ピロ / Slight Hope 2024/03/02 16:38

エンカウントキャンセル

エンカウントキャンセル実装まで~(ピロ流)

エンカウントキャンセルって魅力的だよね。
自分はRPGツクールMZで実装していますが、プラグインは使用していないので、それ以外でも実装可能だと思います。


はじめに

エンカウントキャンセルってなに?

私も数年前まで知りませんでした。『ワイルドアームズ』というシリーズのゲームに実装されているシステムらしいです。
エンカウント時に視覚的な通知が出て、戦闘するかしないか選べる画期的なシステムだな~と思います。


なんでこの記事を書くに至ったのか?

もちろん実装の仕方を記載している記事を全く見かけないからですね。検索にも引っかからないので。

当エンカウントキャンセルはこちらの記事を参考にしながら作りました。
因みにこの記事を書いてる当本人も初心者なので、改良の余地は十分にあると思います。




前置きとか説明とかどうでもいいから実装方法はよ!

こちらの内容をそっくりそのまま作れば実装できますのでどうぞ。



コモンイベントに上記の並列処理のイベントを作成し、




マップのあらゆるイベントにイベント起動中の時に"強○的にエンカウントをキャンセルする処理"をするためのスイッチを仕込みます。
(この場合はイベント起動中と書いてあるスイッチ処理です。)




また、エンカウントさせたいマップに移動する前処理として、こちらを必ず仕込むようにしてください。

あらかじめ"確定歩数"を変数にしておくことで、マップ毎にエンカウント歩数の調整ができます。




説明を挟みながら

何がどういう処理をしてるのか知りたい~って方に。
正直自信ないので間違えてたらすみません。

コモンイベントによるエンカウントキャンセルの骨組み

順番にどのような処理をしているのか説明していきます。
基本的な歩数の処理はこちらに記載されておりますので、追加で入れた処理の説明をしていきます。



条件分岐 $gamePlayer.isMoving()


プレイヤーが動いてるかどうかの分岐です。
それ以外の時に1ウェイト挟んでいるのは、並列処理やループ処理の時に挟んでおくと動作が安定する…というのをどこかで見かけたので、自分はおまじないとしてよく挟みます。


一定歩数に達したらエンカウントしたのを通知するイベント


ツクールシリーズはキャンセルボタンとメニュー開閉ボタンが同一になっているため、一次的にメニュー画面操作を禁止させます。

それと、プレイヤーに「エンカウントしたぞ!」と視覚的に伝えるためのフキダシアイコン、SEも設定しておきます。




プレイヤーにキャンセルさせるかどうか選択させる


タイマーを起動させて、時間制限を設けます。
制限時間内にプレイヤーがキャンセルボタンを押せばエンカウントキャンセル、押さなければ戦闘が始まるループ処理を組みます。


条件分岐 イベント起動中がON



こちらループ途中に挟んでいる処理です。

この条件分岐を挟んでおかないと、別のマップに移動した後やアイテム取っている最中に、キャンセルボタンを押す暇もなく戦闘が始まってしまいます。

エンカウントマップのイベントには必ず"強○的にエンカウントをキャンセルする処理"をするためのスイッチを仕込み、

$gamePlayer.cancelEncounter();によって強○的にエンカウントキャンセル、

ウェイト24フレームはプレイヤーが慌ててキャンセルボタンを連打し、誤爆でメニューが開いてしまうのを避けるために設けます。




最後の処理


メニュー禁止を解除し、イベント起動中をOFFにし、同一歩数で複数回イベントが発生しないようにする処理を入れて完了!


エンカウントするマップに移動させる時の処理


エンカウント禁止の変更 禁止

ランダムエンカウントをなくすための処理です。説明のためここに組み込んでありますが、ゲーム開始直後に一度仕込んでおけば大丈夫だと思います。

変数の操作 確定歩数

ここの数字によってエンカウントキャンセルが起動する歩数が決まります。
よってマップの広さによって調整することも可能です。
乱数にもできますが……個人的にはあまりお勧めはしません。




最後に

開けてみると誰でも簡単に導入できるのが、ピロ流エンカウントキャンセルの良いところだと思っています。プラグインは一切使用しないし、処理もそんなに重くないですし。

これを機にエンカウントキャンセルが導入されているゲームが増えたらいいな~!

最新の記事

月別アーカイブ

限定特典から探す

記事を検索