ウディタ製アクションRPGにおける、「ボスのかんたんなAI作り」の準備として、敵イベントの動作設定について調べました。その結果をまとめていきます。
なぜって、ボスキャラぐらいはそれなりに手ごわく立ち回って欲しいからです。
なぜアクションRPGの敵にAIが必要なのか
アクションRPGならば、「敵」はモンスター画像のマップイベントをおいて、
起動条件は「イベント接触」、そのイベント内容は「主人公へのHPダメージ」と
するのが素直な作り方かと思います。
ところがウディタのイベント移動ルート設定(「カスタム」)は、高機能ではありますが、かんたんなAIのように状況判断をすることまではできません。
ルート設定のなかで「自分が弱ったら動作を変える」などの条件分岐は書けないわけです。
ザコならシンプルなルート設定でよいですが、ボスキャラなどはもう少し凝りたいところ。通常のルート設定では「ランダムに一歩動く、ランダムに一歩動く、主人公に近づく……」のような繰り返しになりがちです。
アクションRPGの敵の複雑な動作管理(AI)はコモンイベントで行う
敵イベントじたいの中身(起動条件)を並列処理にして、動作内容を書くという手もあります。
が、「主人公からイベント(敵)に触れた場合」も、その逆の「イベント(敵)から主人公に触れた場合」でもHPダメージは発生して欲しい。
ここでは、イベントの中身はもとの「HPダメージ」のまま、やはり並列処理のコモンイベントで動作指定を行う方法を模索してみます。
(イベントのセルフ変数によるページ切り替えで細かく動きを変える……という別手法も考えられます)
コモンイベント設定例
このようなコモンイベントによるAI付けを行うのは「ボスだけ」と割り切れば、やることはそれなりに単純です。
このような起動条件の並列処理コモンイベントでOK。
ボスとの戦闘フラグが立ったら、AIコモンの起動条件の変数に、ボス敵イベントのIDを入れてしまえばよいのです。
コモンイベントの中で、起動条件の変数(対象の敵イベントのID)をセルフ変数に受けなおせば次の画像のように、コモンイベントからマップイベントに動作指定が行えます。
コモンイベントによる動作指定(AI)のイメージ例
あとは敵や主人公のHPなども取得しながら条件分岐をし、行動パターンなどを切り替えていけばOKです。
下図のようなフローを組んで、細かく実際の移動命令を埋めていくことになるでしょう。
コモンイベントによる敵イベント動作指定の落とし穴
ウディタの仕様について
しかし、どうやら「イベントの自発的な移動」と「イベントがコモンなど他イベントに指定されての移動」はしっかり区別されているようです。
つまり、「イベント接触」という起動条件は、後者の移動パターン(今回のAIコモン)では満たされず、「敵が主人公に接触してきているのにダメージイベントが発生しない」状況が起こってきます。
ということは、ウディタが自動でやってくれている「イベントが主人公に接触しようとしたかどうか」の判定を半分自作してしまえばよいのですね。
ウディタの仕様に合わせた対応例
動作指定(移動命令)もコモンイベント化して、移動前後の状況をチェックすればOK。
こんな感じです。
理屈だけざっくりと。
- 敵イベントの移動前と移動後の座標を記憶
- 動作指定(移動命令)の後に、移動前と移動後の座標が同じなら、「動こうとしたのに動けなかった」ということ
- その場合、敵イベントの向き(進行方向)に主人公が居たら、「主人公にぶつかって移動できなかった」ということ
- これはイベント接触と同じ状況なので、移動コモン中でダメージ発生処理コモンを呼ぶ
向きと座標を細かく取得して比較していけば、たいていのことは判定できるようですね。
最終的なボス敵AIコモンのイメージ図