アクションRPGでは敵に接触するとダメージを受けるので、ダメージを受けてしまった直後の処理も必要です。
アクションゲームとしては任天堂の看板タイトル『スーパーマリオブラザーズ』が良いお手本となりますが、「一定時間、半透明に点滅して敵に触れてもダメージを受けず、敵をすり抜ける」状態になります。
今回はこのあたりをウディタで再現する処理を作っていきましょう。
敵にぶつかって起きる「接触ダメージ」の考え方
敵イベントがこのような内容だったとして、呼び出される「接触ダメージ」のコモンは、基本的には次の分岐で考えればOKなはず。
- ムテキ状態なら、ダメージを受けず、すり抜けのチェックを行う
- ムテキ状態でないなら、ダメージを受け、ムテキ状態フラグを立てる
ムテキ状態かどうかは、通常変数でチェックされているものと考えます。
後半のダメージを受ける実際の処理は、作りたいアクションゲームの仕様によって様々に変わってくるかと思います。
ダメージ直後にすり抜けられる敵
すなおに考えると「ムテキ状態フラグがONなら、主人公をすり抜け状態にする」としたいところですが……
単に動作指定ですり抜け状態とするだけでは、主人公がマップの移動不可エリアまですり抜けられてしまいます。
ザコ敵の方をすり抜け可とした場合もやはり同様です。行けない範囲にまでキャラがはみ出ていくと、いかにもバグっぽいです。
「ムテキ状態中の敵すり抜け」の疑似的な再現にはひとひねりが必要そうですね。
というわけで、まずぶつかった敵イベントの座標などをチェックするので、「接触ダメージ」コモンを次のようになおします。
呼び出し元イベントのIDを取得して、すり抜け判定のコモンに渡すようにしました。
そのIDをもとの次のような判定をしていきます。
「プレイヤーが能動的に敵にぶつかっていった時にだけすり抜け移動をゆるす」という考え方ですね。
一定時間ダメージを受けつけないムテキ状態にする
「ダメージを受けない」だけなら、すり抜けに比べればずいぶんシンプルです。
ムテキ状態フラグの変数をタイマー代わりにし、フラグ変数がon=0より大きいときだけ、ダメージ処理をスキップすればOKですね(これはすでに最初の「接触ダメージ」コモンのなかでやっています)
あとは、フラグ変数がオンのときに、その変数をタイマーとして減算(カウントダウン)する並列処理をつくれば、一定時間でムテキ状態は自動終了してくれます。
ただ、「半透明の点滅」の表現を一発でこなすイベントコマンドは無いので、タイマーのカウントを減らすついでに、カウントを参照して透明度の高い状態と低い状態を行き来させると、それらしく「透け点滅」が実現できるでしょう。
アクションRPGでは主人公への動作指定はあちこちの並列コモンで干渉し合うはずなので、「エフェクト」で「赤や白に明滅」(色点滅)で済ませておく方が無難かも。