前回の記事でチラッと触れましたが
イベントスクリプトを組むときに画面ロックの6Aを抜くと
ワープイベントやる時に図鑑などで画面を開くことでワープをキャンセルできることが判明しました。
・・・って言ったんですけど、
真面目に検証してみたら6A入っててもタイミングがシビアになるだけで普通にキャンセル可能だったという・・・!w
ということで問題点はあとでまとめるとして具体的にどういう挙動するかってのをちゃんと説明してなかったので
ちょっとサラっと動画にしてまとめて見ましたので紹介しますね。
というわけでこちらの動画ですが
まず今回の実験用に組んだイベントスクリプトがこちらです。
5a (NPC振り向き)
0f 00 xx xx xx 08 09 02 (セリフ表示)
3a 03 08 04 00 00 00 00 02 (マップ03 08(グレンタウン)の4番目のワープ(ショップ外)にワープ)
画面ロックされないのでセリフを十字キーやスタートボタンで閉じられるのでワープキャンセルが楽になります。
ここで6Aが入ってるとAボタンを押してセリフを閉じてからワープしないといけないので
かなり高速でスタートAを押す必要がありますがまあその話は割愛しまして、
今回は3Cはワープ後の挙動が違うだけなので省きまして、
39(通常ワープ)
3A(無音ワープ)
3B(ドアが開いてワープ)
3D(テレポートワープ)
の4種類でのワープキャンセルをやってみました。
ワープキャンセルに成功するとマップBGMが無音化し、
3Bの場合は主人公が表示されなくなり、3Dの場合は主人公のいる高さが低くなって表示がおかしくなります。
でもって共通の現象として本来だったらここでワープして終わるはずだったイベントが強制中断され、
そのまま好き勝手に移動が可能になってしまいます。
こうなるとワープさせてイベント終了!ってしようと思ったらこの仕様を知ってるプレイヤーに悪さされて
本来だったら起こりえない展開を起こすことになるかもしれません。
最悪の場合話しかけちゃいけないNPCに話しかけてフリーズするとか・・・w
ということでこのワープキャンセルを起こさない方法をうちなりに考えてみたのですが、
最初はこの前も言ったとおり6Aでの画面ロックをしてなかったからダメだと思ったんですよ。
でも実際試してみたらどうだったかは前述のとおりで。
じゃあどうすればいいかってちょっと超適当スクリプト集を眺めて行き着いた結論が
●空白時間
28 tt tt 02
・当然の事ながら逆順で入力
・FF FFとかにすると長すぎてひどい事になる
28 tt tt 02
・当然の事ながら逆順で入力
・FF FFとかにすると長すぎてひどい事になる
これです。要するにウェイトです。待機時間です。
「ワープスクリプトが終了してワープするまでの間に画面を切り替えられてしまうなら
ワープし終わるまでプレイヤーからの操作を受付させなければいい」という発想です。
これだと画面ロックの6Aを入れてなかろうが
鬼のようにスタートボタンを連打しようが
ヘルプ連打を試してみようが
プレイヤーは待つことしかできません。
ということでワープスクリプトを組むときは
3a mm mm ww xx 00 yy 00 (マップmm mmのww番のワープに飛ぶ。ww番がなければxx,yyの座標に飛ぶ)
28 xx xx (xx xxの間待機)
02 (スクリプト終了)
って感じでワープ直後にウェイトを噛ませてやるのが安全そうです。
・・・完全に我流組みなのでもしかしたらもっと楽で確実な方法があるかもしれませんが。w
ということでワープキャンセルバグの紹介でした。
自作イベント組んでる改ポケ製作者の皆さん、だいぶ今更ですが気をつけてくださいね・・・!w