=を使ったバグについて云々


結論だけでいい人は下の方を見てチョ☆
ちなみに問題のことについては1.50でのみ確認。Nextやpyについては知らない。


フラグやステップ名に=をつけると、PTを再開させた際に、初期値に戻されるらしい。
そこで、そのバグについて原因とかを調べてみた。

フラグやステップの管理についてセーブデータ内を調べてみるとどうやら、

   [ステップ・フラグ]=[値]   [値]には0〜9の数字(フラグは0・1)

というもので管理されていようだ。

そこで、フラグ名をa=bとするとデータ内ではa=b=1という風に記録される。
データを読み込む際には最初の=までの位置を名前として読み込んでしまう。
つまり、a=bを読み込むとフラグaの値はb=1だ、と誤認されてしまう。
その結果、フラグa=bそのものは認識されず後で追加されたものだと判断され、初期値に戻されてしまう。
これが=を使ったバグのトリックのようだ。
ちなみに、どうやら1.50で読み込みに関わる処理が変わったことで発生したものらしく、1.30以前のものは正常に動作する。
1.30までのバージョンは最後の=(或いは最後の2バイト)で値を判定しているらしい。

さて、問題はこれからだ。
前記のa=bはフラグaであると誤認した通りである。
フラグaが存在しなければ、削除されたフラグであると判断され、そのまま無視される。
では、そのフラグaがシナリオ内に存在するならばどうなるか。

さぁフラグaがあったから、これにb=1という数値を代入するぞ。
……あれ、b=1数値じゃないぞ!?

とまぁ、数値じゃないものを整数にしようとしてエラーを起こしてしまい、シナリオを再開できなくなり、PTが動かせなくなってしまう。
尚、その状態で無理やりPTを読み込んだりすると使えない状態のPTがなぜか増殖したりする。




結論

・基本的にフラグやステップ名に=は使わない。
・どうしても=バグが使いたいのであれば名前の頭に=をつける。


読み込みバグを引き起ってしまった場合の対処法について

慌てず騒がず、該当シナリオを別の場所に隔離するか削除しよう。
問題の部分を読み込む前に強制帰還が行えるよ☆


もにょる   
inserted by FC2 system