FC『ダブルムーン伝説』預かり所バグの実用化 その3

前回は、キャラIDを書き換えてセーブすることでイベントフラグを書き換えられることと、普通のキャラデータでイベントフラグ書き換えを行ってもクリア可能な状態にはならないことを示しました。そこで、キャラIDを書き換えてセーブ→ロードすることで「普通でない」キャラデータをロードすることを考えてみます。

キャラIDとセーブデータアドレスの対応表を再掲します:

単純に考えれば、不正なキャラID(0x0D 以上)を片っ端から試してうまくいくものを探せばいいと思われそうですが、いくつかの問題により実際に使えるIDはかなり限られます:

  • 多くのIDはロード時にフリーズする
  • 多くのIDは持ち物メニューや能力値メニューを開いたり、預かり所を利用しようとするとフリーズする(預かり所バグを再度行うことができない)
  • セーブデータアドレスにRAMもI/Oポートも割り当てられていない場合、エミュレータ依存の動作となる(例: セーブデータ1のキャラID 0x51 アドレス $5749)

つまり、不正IDのうち実際に利用できるのは「ロード時にフリーズせず、預かり所利用時にもフリーズしない」ものだけで、この条件を満たすのはセーブデータ1で12個、セーブデータ2で11個しかありません(エミュレータ依存性を排除しようとするともっと減ります)。しかもその中からイベントフラグを都合よく書き換えてくれるものを探さなければなりません(魔法屋で魔法を忘れさせることである程度は調整できるが限界がある(フリーズしてしまうものも)。また、ほとんどの不正IDは魔法を覚えさせられない)。

要するに「ROM/RAMのデタラメな位置からデタラメなキャラデータをロードし、それがイベントフラグ書き換えに都合のいい状態になっていることを願う」しかないわけですが、ここで一つの抜け道があります。セーブデータ2のキャラID 0x5D は利用可能IDの1つですが、セーブデータアドレスを見ると $7F7F となっています。これはセーブデータ2の領域内で、しかも預けアイテムデータを修得魔法データとしてロードするようになっています。つまり他のIDと違って任意に修得魔法を操作できるわけで、これを使えば望み通りにイベントフラグを書き換えられそうです。

これでクリアへの道が開けました。前回述べたように、セーブデータ2においてイベントフラグ書き換えに使うIDは 0x70 なので、手順をまとめると:

  • 予め預けアイテムを適切に配置しておく
  • 預かり所バグで4人目のキャラIDを 0x5D に書き換える
  • セーブ→ロードして4人目の修得魔法データを預けアイテムデータからロード
  • 預かり所バグで4人目のキャラIDを 0x70 に書き換える
  • セーブしてイベントフラグを書き換える

これでクリア可能な状態に持っていけることになります。

ところがこれで一件落着とはいきません。TAS動画(28:40.85)で示したように、FCEUX上では確かにこの手順でクリアできるのですが、実はキャラID 0x5D は非常に微妙な問題を抱えています。これについては次回