メモリ破壊徹底追跡 - ポケモンを呼ぶ笛フリーズ条件

ポケモンを呼ぶ笛でフリーズする原因を道具使用ルーチンを追跡して究明。

原理

イーブイはまず出ません
ポケモンを呼ぶ笛で「てへ」を使用した後の処理を追いかけると、以下のようになっています。

  1. 道具欄を開くと現在の画面のマップチップ情報が0xCD7Cから先に360byteコピーされる。この時、0xCD7Cは画面の左上、0xCD7Dは画面の左上のひとつ右、画面の右上に到達したら画面の左上の真下の・・・と右下までコピーする。
  2. 道具を使った瞬間に、0xCF78に使った道具の番号「0x7B」が保存され、さらに0xCD68-0xCD7Bの20byteに道具名がコピーされる。このコピーは固定長。
  3. 0xCD68から、終端文字の0x50が現れるまでのデータを0xCF45から先にコピーする。ここで、20byte以内に0x50がないとそのまま画面のデータを読んでコピーを続け、0xCF78に保存されている道具の番号を壊す。
  4. 道具使用時の処理に入る。0xCF78に入っている道具番号を読み込み、該当の道具の処理に飛ぶ。
  5. 戦闘中判定になっているため、戦闘中に使えない道具ならオーキドの言葉、それ以外なら使用した時の処理を行う。

成功する場合

戦闘中に使えない道具の番号だった場合、オーキドの言葉が表示された後、道具欄の画面内一番上の道具を使用します。

失敗する場合

戦闘中に使える道具かつポケモンを選ぶ系の道具だった場合、ホワイトアウトして暴走するか、ポケモン選択画面に入って失敗します。
戦闘中にポケモンを選ばず直接使える道具だった場合、使用して暴走します。
0xD036に達する前に0x50が来てしまった場合、壁抜けモードになると思います。

参考資料

フリーズ条件チップの場所赤枠で囲んだチップが「何を使ったかの情報」になっているチップです。このチップ番号がそのまま「内部番号何番目」にあたるので、たとえばこの場合だと「2C」、つまり?????(偽)を使ったことになります。 もちろん使えないのでオーキドのことば、その後カーソルが上に動き勝手に笛を吹いてメニューが閉じ、戦闘に入ります。
フリーズ条件チップの場所街用チップセット。

評価

捜索範囲をだいぶ減らせると思います


戻る
connecting: riko.2rnd.msmrrneda.net