結論だけでいい人は下の方を見てチョ☆ ちなみに問題のことについては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がなぜか増殖したりする。 結論 ・基本的にフラグやステップ名に=は使わない。 ・どうしても=バグが使いたいのであれば名前の頭に=をつける。 読み込みバグを引き起ってしまった場合の対処法について 慌てず騒がず、該当シナリオを別の場所に隔離するか削除しよう。 問題の部分を読み込む前に強制帰還が行えるよ☆ |