ウディタ製アクションRPGにおける主人公(自キャラ)から「矢」を撃つ方法は過去にまとめてあります。この応用で「敵が矢を撃つ」処理も作れるでしょう。
とはいえ、敵と主人公は別物。敵からの「矢」は、もっとシンプルかつ応用の効くズルく効率的な作り方にしたいものです。
アレコレ試した結果をまとめました。
超簡単な「敵からの矢」の作り方<別イベントのワープ法>
敵イベントが撃つ「矢」の仕様を決める
例によって「前提をシンプルに」と心がければ、だいたいは行けそうな気がしてきます。
- 「矢」を撃つのはごく一部の敵だけ
- 「矢」を撃つのは一度に一個だけ
- 「矢」は主人公に向けてまっすぐ飛ぶ(ごくシンプルな軌道)
- 「矢」は数マス分飛ぶか、主人公にぶつかると消える
このように決めてしまいましょう。
「矢」をごく簡単なマップイベントで表現してみる
上のように仕様を決めると、矢とは「主人公に向かって移動する」「主人公に触れるとダメージイベントが発生する」ものですから、通常のザコ敵とほぼ同じ設定のマップイベントでよいことがわかります。
主人公が撃つ矢とは区別する意味で、今回はさらにシンプルな画像を使っています。
さてこのマップイベントによる「矢」、移動ルート設定で「主人公のほうを向く」「一歩前進×任意の回数」で、もうまっすぐビュンと飛んでくれますね。
(※「動作を繰り返す」のチェック有無も重要ですが、求める仕様次第なところがありますね)
また、ルート設定の終わりでセルフ変数を変えることで、自分自身を非表示のページに切り替える(数マス飛んで消える)ようにもなりますね。接触起動のイベント内容(ダメージ処理)でも同じスイッチ操作をすれば意図通りです。
しかし、これではいきなり彼方から現れるのでいかにもバグっぽい矢です。
マップに余白を作るなりして、プレイヤーさんの目に入ることなく人知れず飛んで消えるようにしておきましょう。
これはこれで極端な例ですが。
「矢」イベントを別イベントから操作する
あとは、実際にその「矢」を発射するイベントを用意すれば完成です。
注意点は、「矢」を撃つ敵イベント1体につき、専用の「矢」イベントをおき、そのIDを把握しておく必要があることですね。
いろいろやり方はあると思いますが、2通りの例示です。
ザコ用例:一時的に「矢」を発射するページに切り替わる
まずはふつうに敵イベントを作りましょう。
(敵撃破の方式によっては、HPにあたるセルフ変数が0以下になった場合のための非表示ページなどが入ると思われます)
この敵イベントに、こんな感じのルート設定を施しましょう。
ある程度うごいたらセルフ変数を書き換えて、2ページめのイベント内容に変化するわけです。
そして、その2ページ目の内容が、こんな感じ。セルフ変数0番が1のとき有効になる「並列処理」ですね。
このようにして、このマップイベント用の「矢」イベントを自分の位置にワープさせてきて、変数操作で有効化させると、「矢」を撃っているように見えます。
「矢」を撃ったら自分でセルフ変数を書き換えて、また1ページめに戻るので、一定間隔で「矢」を撃つように動いてくれます。
ボス用例:ボスAIからの発射
こちらの記事を参照に。
行動パターンのどこかで、上の要領を「矢」イベントを呼び出して打ち出す処理を入れてあげればよいわけです。
この場合、「敵」イベントそのものの別ページ設定は必要ありません。
<別イベントのワープ法>の応用例
ナントカ法とおおげさに名づけるまでもないことなのですし、これはこれでイベントを大量に設定する手間があります。
しかし、この方法には利点があります。
ほぼ同じ理屈で以下のような応用ができ、多彩な敵の表現が可能になるのです。
分裂する敵
「矢」ではなく、分裂用の「敵」イベントをマップの余白部分に隠しておき、元の敵イベントが攻撃ないし撃破された瞬間に「分裂」用のイベントを元居た場所に引っ張ってきましょう。
分身や手下を呼び出す敵
これも「分裂」と理屈は同じですね。
呼び出す頭数や敵の種類を変えることで、ほぼ同じ挙動でも違った演出に見せられるでしょう。
地形を操る敵
「矢」を呼び出すではなく、その「敵」イベントが居る場所のマップチップを書き換えたりするのもよいでしょう。
それがダメージ床になったりしたら楽しいですね。
ローグライクを作るのでもない限り、マップチップ書き換えは縁遠い気がしますが……イベントによるマップチップ書き換えは、マップ移動によってリセットされるので管理もさほど手間ではありません。
罠として「矢」を発射する装置
「敵」のモンスターではなく、マップチップなどを使った置物(石像)にしておき、動かないけれど一定間隔で「矢」を撃たせます。
これでモンスターのようにふるまうけどモンスターではないもの、つまりトラップ表現になりますね。