見出し画像

アイテムが逃げるなど、キャラの挙動の柔軟性を向上させた ローグライク(仮)

今日の作業は、大きなリファクタリングでした。

キャラクターという、ダンジョンに配置されたプレイヤーや敵味方、アイテム、階段などに「ビヘイビア」という概念を追加しました。正しくは、既にあった「ビヘイビア」をより柔軟に記述できるように大拡張した、という感じです。

これによって何ができるようになったかというと、例えばこの動画のようなことが。

アイテムや穴(魔物の巣)がプレイヤーから逃げていくようになりました。これは仮の挙動であって、実際は各キャラクターごとに適切なビヘイビアを設定していくのですが。

「逃げるビヘイビア」も過去に作った「エスケーパー」という敵のものをそのまま使っています。エスケーパーのビヘイビアを、他のキャラクターにも簡単に差し込めるようになった、という感じですね。しかも、その対象がアイテムやオブジェクトですら可能です。

また、ポーションを飲むと回復する挙動も実装しました。このビヘイビアに直結するものだったので。

何のために

柔軟性が高まることは良いことなのですが、今回この作業を行ったのは単に良くするためではなく、もっと明確な理由があります。

まず、アイテムを投げて、それが当たったときのことを考えました。

ポーションはHPを回復するアイテムです。それに対して「飲む」という操作をしたら、ポーションの一般的な挙動である「飲んだキャラのHPを回復する」という処理が実行され、ポーションがかばんから消滅するべきです。

では、ポーションを投げて敵にあたったらどうなるでしょうか。ポーションは一般的な挙動を「敵にあたった時」にも実行してほしいです。敵のHPが回復するわけですね。もちろんポーションはそのまま消滅してしまうので、飲んだ時とほぼ同じ挙動になります。

ではポーションではなく、巻物だったとしましょう。例えば識別の巻物だったら・・・?それを「読む」という操作をしたときと「敵にあたった時」の挙動は同じでしょうか?もちろん違いますよね。ということは、ポーションと違って、操作により挙動が変化するアイテムが存在するということになります。

これをポーションに戻すと、「飲む」と「キャラに当たる」の2つが同じ挙動に連動し、巻物であれば「読む」と「キャラに当たる」の2つが別の挙動に連動する、と考えることができます。

この、操作に対する挙動の柔軟性を高めるための処理が「ビヘイビア」というものです。アイテムがどのように利用されたかによって細かく区別できるようにビヘイビアを実装することができるようにしました。

以上はアイテムのビヘイビアの話ですが、敵や仲間のビヘイビアももちろん存在します。敵に「何かのアイテムがぶつかったとき」の挙動はアイテム側ではなく敵側のビヘイビアとして実装することも出来ます。

例えば識別の巻物の「キャラに当たる」挙動はダメージ1ポイントを与える、と実装されているとします。でも識別の巻物をぶつけられると死ぬ敵を実装したい。となると、その敵のビヘイビアに「識別の巻物だったら死ぬ」と実装すればよいわけです。そうすると、仮に敵のビヘイビアを優先する実行優先度に従う場合、ダメージ1の処理は行われず、敵が死ぬことになります。

このように、すべてのキャラクターに様々なケースの挙動を実装できるようにする「ビヘイビア」を設けたのが、今回の目的です。ビヘイビアはデフォルト挙動もあるので「普通の敵として振る舞う」とか「階段として振る舞う」、「アイテムとして振る舞う」ということも記述できますし、「階段だけど、プレイヤーが近づくと逃げる」という特殊化した実装もできるようになっています。

これがビヘイビアです!

応援してくださると嬉しいです。よろしくお願いいたします!