FF2 の皇帝呼び出しを調べたらさらに短縮できた

前回のイベント番号で CPU address $0072 の script (scenario) pointer へ設定される値は下記です. イベント番号@ pointer の table は CPU address $0d:$bfc0 にあり正規の値は 0 から 0x19 でそれを超えると MMC1 の bank 境界をまたぎます.

ROM

FF3 同様エンディングに直行できる script data は決まっていまして 2013 年に自分が調査しています.
https://na6ko.hatenadiary.jp/entry/20130806/p2
正規の手順でしたらイベント番号 0x0f の皇帝登場がまさにそれです. イベント番号 0x40 はエンディングの途中ですが初期化していない変数があるのか止まります.

0x00@ $8000: 0xc2 0xf9 0x07 0xc0 | 0x45@ $8d02: 0xb1 0xa2 0xa4 0x3c
0x01@ $8088: 0xc0 0xf9 0x18 0xc3 | 0x3b@ $8eff: 0xa2 0x46 0xc3 0xc3
0x02@ $8098: 0xc0 0xc0 0xc2 0xf9 | 0x2f@ $9c0c: 0xe5 0xc8 0xf0 0x0b
0x03@ $80a7: 0xf8 0x40 0x13 0x22 | 0x3a@ $a220: 0x1c 0xea 0x9c 0xf2
0x69@ $80a9: 0x13 0x22 0x10 0x21 | 0x26@ $a24c: 0xf3 0x1c 0xe1 0x9c
0x78@ $80bd: 0x12 0x12 0x11 0x12 | 0x65@ $a261: 0xe0 0x43 0xf2 0xb5
0x04@ $811b: 0xf8 0x10 0xe0 0xe0 | 0x6b@ $a262: 0x43 0xf2 0xb5 0x2a
0x05@ $8164: 0xf8 0x10 0xf0 0x11 | 0x48@ $a5dc: 0xbb 0xcb 0xf1 0xbb
0x06@ $81b7: 0xf8 0x10 0xe0 0x2a | 0x66@ $a900: 0xcb 0xfd 0x15 0xa9
0x07@ $8208: 0xc3 0xf9 0x04 0xf0 | 0x6c@ $a900: 0xcb 0xfd 0x15 0xa9
0x08@ $827f: 0xf8 0x10 0x03 0xf9 | 0x4b@ $a90f: 0x1e 0x2e 0x3e 0xfc
0x09@ $82c6: 0xf7 0x39 0x0f 0x1f | 0x3d@ $a99a: 0xa8 0xa1 0xa9 0x9a
0x0a@ $830b: 0xf8 0x40 0x03 0xf9 | 0x32@ $a9fe: 0xd8 0x18 0xed 0xf2
0x0b@ $839b: 0xf8 0x40 0x3a 0x32 | 0x44@ $a9fe: 0xd8 0x18 0xed 0xf2
0x0c@ $83e3: 0x0f 0x1f 0xf8 0x20 | 0x5b@ $ad27: 0x25 0x65 0x46 0xcb
0x0d@ $844d: 0xf8 0x80 0xc2 0xf9 | 0x56@ $b642: 0xf1 0xb8 0xf2 0x6b
0x0e@ $850f: 0xe6 0xe6 0xe6 0x28 | 0x52@ $b890: 0x3b 0xcb 0x3b 0xcb
0x0f@ $8531: 0xf8 0x40 0xf0 0x37 | 0x64@ $c08d: 0xa9 0x7f 0x20 0x00
0x60@ $8546: 0x1b 0x2b 0xc7 0x3a | 0x42@ $c46e: 0xa2 0x3f 0xa9 0xf0
0x5a@ $8560: 0x23 0xc3 0x03 0x13 | 0x58@ $c486: 0xa2 0xef 0xa9 0x00
0x5f@ $8560: 0x23 0xc3 0x03 0x13 | 0x3f@ $c4a0: 0xa9 0x30 0x8d 0x00
0x4c@ $8577: 0x13 0xc3 0x03 0x13 | 0x25@ $c74f: 0xa9 0x0d 0x20 0x03
0x79@ $85b4: 0xf9 0x06 0x5f 0x6c | 0x7f@ $c832: 0xa5 0xff 0x8d 0x00
0x40@ $8620: 0x44 0x26 0xf0 0x45 | 0x49@ $c9fa: 0xad 0x47 0x60 0x29
0x10@ $8690: 0xe6 0xe0 0xe6 0xe0 | 0x7b@ $ca41: 0x20 0x6f 0xd0 0x20
0x11@ $86b4: 0xe6 0xc4 0xe6 0xc6 | 0x28@ $dc30: 0xad 0x02 0x20 0xa9
0x12@ $86eb: 0xf8 0x40 0xc1 0xc1 | 0x22@ $dce3: 0xa9 0x05 0x85 0x61
0x13@ $8719: 0xf8 0x20 0xc4 0xc6 | 0x4a@ $f077: 0x20 0xe8 0xe4 0x91
0x14@ $875e: 0xc2 0xc1 0xf9 0x04 | 0x2b@ $f2c8: 0xad 0xf5 0x62 0x10
0x15@ $876f: 0xe6 0xe6 0x3a 0x32 | 0x4e@ $f476: 0xa9 0x88 0x85 0xff
0x16@ $877e: 0xe9 0xf4 0x17 0xf8 | 0x6a@ $f58d: 0xa5 0x61 0x29 0xe0
0x17@ $8789: 0xf3 0x78 0xf0 0x4d | 0x68@ $fa00: 0x4c 0x9e 0xfa 0x48
0x18@ $8790: 0x05 0xf0 0x4f 0xc1 | 0x38@ $fd85: 0x20 0xa5 0x00 0x8d
0x19@ $87c5: 0x2c 0x22 0x22 0xf9 | 0x6e@ $fe03: 0x4c 0x1a 0xfe 0x8d
0x36@ $88a9: 0x9c 0x91 0xaf 0xc4 | 0x35@ $fe85: 0x10 0x40 0xa9 0xc0
0x33@ $8d00: 0x7f 0x8c 0xb1 0xa2 | 0x37@ $ff85: 0x00 0x00 0x00 0x00

RAM + その他

この中でわかりやすいものは 0x43@ $0020 (ボタン入力)と 0x5c@ $6011 (セーブした外のY座標)です. 最初に気づいたのは CPU address $6011 のほうで徒歩やチョコボで移動してセーブし、エンディングにいけるデータを書き込み、宿屋からエンディングにいけることを確認しました. 目的の場所がかなり遠かったので最速プレイにはなりませんでした.

次に気づいたのは CPU address $0020 で宿屋で宿泊する際にボタン入力から必要なデータをいれると宿屋からエンディングにいけました. これはネリーを助けなくていいし、皇帝を倒さなくていいのでかなり早いです.

熟練度経験値を 0x43 にするために 67 回もたたかうを選びキャンセルすることになるのでまだ縮められるのではと考えています.

0x43@ $0020: RAM             |0x3e@ $2000: undef
0x29@ $184c: RAM mirror $004c|0x6d@ $2000: undef
0x39@ $008d: RAM             |0x34@ $2001: undef
0x2c@ $00a9: RAM             |0x57@ $2008: undef
0x63@ $08a9: RAM mirror $00a9|0x7e@ $2040: undef
0x7c@ $00a9: RAM             |0x7a@ $2048: undef
0x59@ $10ad: RAM mirror $00ad|0x67@ $207f: undef
0x5e@ $18ad: RAM mirror $00ad|0x41@ $20c4: undef
0x6f@ $00bd: RAM             |0x4d@ $20fa: undef
0x1a@ $0200: RAM             |0x2e@ $20fe: undef
0x1b@ $0200: RAM             |0x51@ $20fe: undef
0x1c@ $0200: RAM             |0x55@ $20fe: undef
0x1d@ $0200: RAM             |0x20@ $254c: undef
0x1e@ $0200: RAM             |0x61@ $2842: undef
0x1f@ $0200: RAM             |0x5d@ $2885: undef
0x2d@ $0320: RAM             |0x73@ $2985: undef
0x50@ $0320: RAM             |0x77@ $2a85: undef
0x54@ $0320: RAM             |0x47@ $3020: undef
0x31@ $034c: RAM             |0x62@ $32b0: undef
0x7d@ $158d: RAM mirror $058d|0x70@ $38b4: undef
0x30@ $0ea9: RAM mirror $06a9|0x75@ $38b4: undef
0x4f@ $0ea9: RAM mirror $06a9|0x72@ $3f29: undef
0x53@ $0ea9: RAM mirror $06a9|0x46@ $4014: undef
0x71@ $07e9: RAM             |0x74@ $40bd: undef
0x76@ $07e9: RAM             |0x21@ $4cc0: undef
0x5c@ $6011: RAM             |0x2a@ $4cc0: undef
0x3c@ $6f25: RAM             |0x27@ $4cdb: undef
                             |0x24@ $4cf3: undef
                             |0x23@ $4d4c: undef