FF2 も調べた

zeropage のほうのメモリアドレスが全く同じだった。

  • $006c script execute flag (0:停止, 1:実行, その他:何かしらイベント)
  • $0072 $script execute pointer (little endian 16bit)

FF3 と異なる部分はスクリプトの実行フラグは $006c は 1 だけ。

戦闘開始で待避されるアドレスは $7bff -> $00ff, $7c00-$7c7e -> $0000-$007e となる*1
pointer 先の data は 0xe7 でスタッフロールが強制的に始まる。今回は先に最終シーンをみた。ただし、曲が再生されないので 0xf5 0x5d, 0xe7 としたほうがよい。

スタッフロールだけ開始なら、屋外で RAM をいじってもイベント発動可能。セリフを出すイベントは FF3 同様固まる。

0x8531

シェイドのなかの皇帝が話しかける→戦闘

0x8537

皇帝死ぬ。この後、お城に戻って一連の会話が始まるが、ヨーゼフの娘を助けたフラグを処理しないと固まる。該当部の RAM のアドレスは昔見つけた記憶があるが忘れた。

0x868c

スタッフロール開始。

問題点

FF3 と比べて都合のいい indert jump もあまりなくて、$7c00 付近を破壊する方法が見つかっていないらしい。

*1:sta <$ff,x で x の overflow の挙動が変でわざとやってるぽい