ピロ彦の何か置き場

ドラゴンクエスト4なんでもありRTA サブフレームリセット任意コード実行チャート

RTAの実況動画はこちら


www.youtube.com

生放送アーカイブはこちら


www.youtube.com

サブフレームリセット

  • CRCを調整するために、名前「き」、性別「男」、表示速度「2」を選択。
  • 教会でセーブするまでに、足元を調べたりするとCRCが変化するので注意。
  • 城を出てまっさきにセーブ、音楽が切り替わってからリセット。
  • 冒険の書コピーを押して2F後にリセット、ピスって感じの音で成功判定。
  • 失敗したらデータ1を削除して2から1へコピー。
  • 成功していたらデータ1から開始。*1

第一章

  • いつもと違うBGMで第一章が開始したら成功なので教会でセーブしてBGMが終わるのを待ってからリセット。*2
  • 冒険の書再開後、外でエンカウントしたらコマンド選択画面で、セレクト・左・Aと押して表示速度を正常化する。*3
  • 気球で南西にあるエンドールへ行き、キメラの翼を二つ買う。安定突破したい場合は銅の剣を売って薬草を買うと良い。
  • カジノにて闘技場でモンスターを選んだあと掛け枚数を選択せずにキャンセルすることでコインを999999枚にする、次に39枚賭けて試合の途中にBを押して「はい」で離脱。
  • はぐれメタルの盾・ラーの鏡・いのりの指輪とコインを交換して946960枚にする。*4
  • カジノは天井に頭をぶつけないのでキメラの翼でバトランドへ。
  • 気球でバトランドから東にあるメダル王の城へ行き、奇跡の剣とはぐれメタルヘルムを貰って装備する。はぐれメタルの盾は装備できない。
  • キメラの翼でバトランドへ戻り、気球で湖の塔へ行く。
  • レベルが3まで上がれば大目玉が確殺になるが、Lv2以下では低乱数を引くと大目玉が発狂して敗北する可能性がある。また、一撃で倒すと奇跡の剣の追加効果が発動しないため残りHPには注意が必要。はぐれメタルの盾を使えばギラが怖くなくなるが、確実に後攻するのでピサロのてさきを先に殴るのならば盾は使用しなくても良い。
  • 気球に乗ってイムルで子供を返す。バトランドへは気球に乗らず、渡し船で歩いて帰るほうが速い。

第二章

  • 壁を蹴破るのは遅いため、普通に下に行くだけで良い。

第三章

  • 最速で毒の沼地で最速死亡すれば速いが、トーマスの前に立つとイベントが発生するので注意が必要。*5
  • 復帰後、外で気球が待っているので南南東にある洞窟に東側から入る。

第四章

  • 朝になって右側から外に出た場合、NPCが避けてくれても最速で1.5歩分程度しか速くならないので、動画のように外は出ずに街の中を歩いて教会へ行ってセーブをしたほうが安全。
  • セーブ後リセットして再開したら気球に乗って北のハバリアを出入りしたら東の海を渡りミントスへ。
  • ミントスに入ったらすぐ下の道具屋でキメラの翼を2個購入。
  • 宿屋に入って歩数調整のために一泊する。
  • 宿屋の二階でブライ・クリフトの順に話しかける。
  • ▶どうぐ▶ミネア ▶きぬのローブ ▶わたす▶ブライ
  • ▶どうぐ▶クリフト▶たびびとのふく▶すてる
  • 屋上に出てキメラの翼でモンバーバラへ飛んで、南のスタンシアラから西へ行ってメダル王の城へ。
  • ▶てんばつのつえ▶クリフトx2
  • きせきのつるぎ▶ミネア
  • 気球で西のガーデンブルグへ行ってさいごのカギを貰う。
  • 歩いて外に出てブランカへ。
  • 武器屋▶ 売る ▶ミネア    ▶きせきのつるぎ▶はい
  • 武器屋▶ 買う ▶どうのつるぎ ▶ブライ▶はい
  • 武器屋▶ 買う ▶いばらのむち ▶クリフト
  • どうぐ▶クリフト▶てんばつのつえ▶わたす▶クリフト
  • 防具屋▶ 買う ▶かわのぼうし ▶クリフト
  • 宝物庫の左上の宝箱から、ふしぎなきのみを入手して徒歩で外に出る。
  • 気球でエンドールへ行って一泊して朝にする。*6
  • 防具屋▶ 買う ▶てつのよろい ▶クリフト
  • どうぐ▶クリフト▶かわのぼうし ▶わたす▶クリフト
  • どうぐ▶クリフト▶こんぼう   ▶わたす▶クリフト
  • 武器屋▶ 買う ▶どくがのナイフ▶ミネアx2
  • 武器屋▶ 買う ▶どくがのナイフ▶マーニャ
  • 武器屋▶ 買う ▶どくがのナイフ▶ブライ
  • 武器屋▶ 買う ▶モーニングスタ▶マーニャ▶はい
  • どうぐ▶ブライ ▶ひのきのぼう ▶わたす▶マーニャ
  • エンドール城左扉から左下の隠し階段へ行き、いのちのきのみを入手。
  • キメラの翼でハバリアへ。
  • 街の右にある地下牢で左右の壺からちいさなメダルを2枚入手。
  • どうぐ▶ミネア ▶ちいさなメダル▶わたす▶ブライ
  • どうぐ▶ミネア ▶さいごのカギ ▶わたす▶ブライ
  • どうぐ▶ブライ ▶どくがのナイフ▶わたす▶ブライ
  • どうぐ▶ブライ ▶ぬののふく  ▶わたす▶ブライ
  • どうぐ▶ミネア ▶いのちのきのみ▶わたす▶ブライ
  • どうぐ▶ミネア ▶どうのつるぎ ▶わたす▶ブライ
  • どうぐ▶ミネア ▶ふしぎなきのみ▶わたす▶ミネア
  • 防具屋▶ 買う ▶かわのドレス ▶ミネア
  • 防具屋▶ 買う ▶かわのドレス ▶マーニャ
  • 防具屋▶ 買う ▶かわのドレス ▶クリフト▶はい
  • どうぐ▶クリフト▶てんばつのつえ▶わたす▶クリフト
  • どうぐ▶ミネア ▶どくがのナイフ▶わたす▶ミネア
  • どうぐ▶マーニャ▶どくがのナイフ▶わたす▶マーニャ
  • そうび▶ミネア ▶どくがのナイフ(上)▶BBB
  • そうび▶マーニャひのきのぼう ▶BBB
  • そうび▶ブライ ▶どくがのナイフ▶BBB
  • そうび▶クリフト▶こんぼう▶てつのよろい▶なし▶かわのぼうし
  • 下リストのようになっていればOK*7
  • 船室の地下へ行き、上の部屋の女性に話しかけた後に船長に話しかけて出航。

ミネアのアイテム

  1. Eどくがのナイフ
  2.  ちいさなメダル
  3.  ふしぎなきのみ
  4.  かわのドレス
  5.  どくがのナイフ

マーニャのアイテム

  1. Eおどりこのふく
  2.  モーニングスター
  3. ひのきのぼう
  4.  かわのドレス
  5.  どくがのナイフ

ブライのアイテム

  1.  きぬのローブ
  2.  どうのつるぎ
  3.  ちいさなメダル
  4.  さいごのカギ
  5. Eどくがのナイフ
  6. Eぬののふく
  7.  いのちのきのみ
  8.  どうのつるぎ

クリフトのアイテム

  1.  いばらのむち
  2.  てんばつのつえ
  3. Eてつのよろい
  4. Eかわのぼうし
  5. Eこんぼう
  6.  かわのドレス
  7.  てんばつのつえ

第五章

  • 村の右上の階段を登り降りすると村が滅ぶので毒死する。
  • ブランカの教会にワープするのでセーブしてリセット
  • 冒険の書2と3がアイテム調整済みのデータになるようにコピーして冒険の書1から再開。
  • 歩いて外に出てホフマンが離脱したら0人PTになる。*8
  • つよさ▶じょうたい▶HP.MPにカーソルを合わせる。
  • 2Pの上下左Bを押した状態に何らかの方法で固定する。
  • 1Pの左を先に押したまま、左下セレクトスタートを押しながらAを1フレームだけ押す。
  • 画面がフリーズしたら電源をONOFFする。*9
  • 入力が完璧なら10%程度の確率で任意コードが実行される。
  • 任意コードが実行されると50%の確率でCRC不一致によりデータが削除される。
  • 成功すると天空城から再開するので歩いて外に出るとエンディングへ

任意コードの内容

コントローラ入力コード

$0014:6C 72 D0  JMP ($D072) = $686F

冒険の書2の鋼の剣鎧納入数フラグ

$686F:4B 05     ALR #$05

~~~~~~~~~~~~~~~~~~~

$688D:10 73     BPL $6902

冒険の書3のクリフトのアイテム

$6902:09 17     ORA #$17                   A:00 X:00 Y:3F S:BC P:nvUBdIZc
$6904:A8          TAY                        A:17 X:00 Y:3F S:BC P:nvUBdIzc
$6905:C6 81     DEC $0081 = #$00           A:17 X:00 Y:17 S:BC P:nvUBdIzc
$6907:30 17     BMI $6920                  A:17 X:00 Y:17 S:BC P:NvUBdIzc

冒険の書3のミネアのアイテム
$6920:99 69 65  STA $6569,Y @ $6580 = #$05 A:17 X:00 Y:17 S:BC P:NvUBdIzc
$6923:30 19       BMI $693E                  A:17 X:00 Y:17 S:BC P:NvUBdIzc

冒険の書3のマーニャのアイテム
$693E:AC 0A 80  LDY $800A = #$ED           A:17 X:00 Y:17 S:BC P:NvUBdIzc
$6941:30 19        BMI $695C                  A:17 X:00 Y:ED S:BC P:NvUBdIzc

冒険の書3のブライのアイテム
$695C:2B 02      ANC #$02              A:17 X:00 Y:ED S:BC P:NvUBdIzc
$695E:69 73     ADC #$73                   A:02 X:00 Y:ED S:BC P:nvUBdIzc
$6960:99 A4 64  STA $64A4,Y @ $6591 = #$4B A:75 X:00 Y:ED S:BC P:nvUBdIzc
$6963:02          HLT                        A:75 X:00 Y:ED S:BC P:nvUBdIzc

0人PT状態でHP.MPを表示すると、プログラムが暴走して$0000が実行される。

この時、プログラムカウンタがコントローラ入力が反映されるアドレスである$0014に到達するとコントローラによる任意のコードが可能となる。

コントローラ入力は、右=0x80、左=0x40、下=0x20、上=0x10、スタート=0x08、セレクト=0x04、B=0x02、A=0x01、の合算になり、$0014が1P、$0015が2P、$0016は0x10、0x40、0x70、0xA0、0xD0の5つのうちのいずれかになる。

1Pは左下セレクトスタートと押すことで0x6Cに、2Pは上下左Bを押すことで0x72にします。任意コード実行時に$0016が0xD0であれば、6C 72 D0 というコードが実行され、JMP($D072)という$D072の内容を参照した間接ジャンプになります。$D072には0x686Fという値が入ってるので$686Fへ飛ぶことになる。

$686Fは冒険の書2の鋼の剣と鋼の鎧の納品数フラグで、これはサブフレームリセットの影響で0x4Bになっている。ここからカジノコインまではほぼ0x4Bで埋め尽くされているのでフリーズすることなく通過可能。

カジノコインは24bitの値を持つので、946960枚=0x0E7310に調整することで 10 73 というコードを実行出来る。10はBPLという分岐命令で、直前の計算結果が8ビットの符号付きの整数でのプラスであった場合に分岐ので、10 73 はクリフトのアイテム欄へのジャンプとなる。

クリフトのアイテムコード

  1. ORA #$17でAレジスタを0x17にする。
  2. TAY命令でYレジスタをY=Aの0x17に。
  3. DEC $81で$0081=#$00から1を引いて0xFFにし、ネガティブフラグを立てる。
  4. BMI $17でネガティブフラグが立ってるので、ミネアのアイテム欄へ相対ジャンプする。

理力の杖(0x10)があればネガティブフラグを建てずにジャンプ可能だが、かわのドレス(0x30)で代用している。かわのドレス(0x30)+キラーピアス(0x16)を使えばアイテム欄を8個全て使えるが、1バイトを犠牲にして手に入りやすい天罰の杖(0x17)を使っている。

ミネアのアイテムコード

  1. STA $6569+Y=$6580で$6580にAレジスタの0x17を書き込む。
  2. BMI $19でネガティブフラグが立ってるので、ミネアのアイテム欄へジャンプする。

$6580は冒険の書1の復帰場所で、0x17で天空城からの再開となる。ネガティブフラグを維持したいのでコードを詰め込まずに5バイトだけ使用している。

マーニャのアイテムコード

  1. LDY $800A=#$EDでYレジスタに$800Aの中身である0xEDを書き込む。
  2. BMI $19でネガティブフラグが立ってるので、ブライのアイテム欄へジャンプする。

$800AはROMアドレスなのでバンクが切り替わると全く別な値になる。リセットを押すともう一度コードが実行されるがその時は別のバンクに切り替わってしまっているので実行してはいけない。

ブライのアイテムコード

  1. ANC #$02でAレジスタの0x17と0x02のビット論理積を取る。
  2. ADC #$73でAレジスタを0x02+0x073=0x75にする。
  3. STA $64A4+Y=$6591にAレジスタの0x75を書き込む。
  4. HLT命令でCPUを止める。

ANC命令はAND命令と似ている未定義命令で、元々持っているきぬのローブを活用するために使用している。ADC命令は入手しやすいちいさなメダル(69)とさいごのカギ(73)の再利用で0x75という値を作り出している。$6591:20でエンディングフラグが立つので、先程の書き込みと合わせてCRC値が同じになる0x75という値を入れている。コードが2度実行されるのを避けるため、HLT命令でCPUを止めているがリセットを押すと再び動き出すのでリセットをしないように気をつける。HLT命令が無い場合は一度に何度もコードが実行される事もある。

CRCは16biあるが、チェック時には8bitしか見てないので1バイト分だけ揃えれば良いが、直前の繰り上がりフラグが影響するのでCRC値が一致する確率は1/2となる。

*1:※FCEUX系統のエミュレータはリセットがVBlank直前に処理されるため、VBlank割り込みタイミングを狙ったリセットが不可能だが、Bizhawk(NEShawk)では逆に実機よりも簡単に成功する。レトロフリークにはFCEU系列のエミュレータが搭載されているので、成功しないかもしれない。

*2:セーブせずに外に出て全滅ついでに表示速度を正常化するのも要検討

*3:表示速度の初期値が4なので左から3つ目の3を選択する

*4:はぐれメタルのたてとラーのかがみは捨てる事が出来ないので薬草を買いすぎると持てなくなるので注意。

*5:教会へのルートが子供に塞がれてる時以外は教会でセーブしてリセット再開する方が良いが、毒の沼地のほうが見栄えが良いので採用している。

*6:ブランカで昼夜調整の為に一泊する方が移動歩数は少ないが、外での歩数猶予がほぼ無いためエンドールで泊まるほうが安全

*7:アイテム配置に不安がある場合はここでセーブして冒険の書を3に複製しておくと良い

*8:キメラの翼で外に出ると$16が00になって絶対に成功しなくなるので必ず徒歩で外に出る

*9:バンクが狂っているのでリセットボタンを押しても正しくリセットされない上に任意コードが何度も実行されてデータが消える恐れがある。リセット信号が発生しないタイプの互換機であればリセットが効くかもしれない。