無敵ハウゼン調査

はじめに

ルドラの秘宝の無敵ハウゼンについて、ROMデータの中身を調査してみました。

ROM解析に使用したツール

ROM解析には以下のツールを使用しました。

わかったこと

HPが0になった際に、7E0C2B(ハウゼンの場合は7E0EAB)の値と0x04の論理積を取り、0だったら通常の処理(死ぬ)、0以外だったらHPに1を強制セットとなっていました。dis65816の結果では以下のあたり。

02D368 BD 2B 0C  LDA $0C2B "X"  ; "A" = $0C2B+"X"
02D36B 89 04     BIT #$04
02D36D D0 03     BNE #$03       ? -> $02D372
02D36F A9 00     LDA #$00       ; "A" = 0
02D371 60        RTS
02D372 A9 01     LDA #$01       ; "A" = 1
02D374 9D 08 0C  STA $0C08 "X"  ; $0C08+"X" = "A"
02D377 A9 01     LDA #$01       ; "A" = 1
02D379 60        RTS

倒せないハウゼンは当該部分の値が2Fになっているために倒せないようになっています。倒せるハウゼンは2B。ちゃんと調査したわけではないのでなんともいえないけど、おそらくここは感電が通用するかとか、浮遊状態になるかとかのフラグになっているのではないかと推測。

ロジックの説明

当該ロジックの適当な説明は以下。

02D368 BD 2B 0C  LDA $0C2B "X"  ;7E0C2Bより値取得
02D36B 89 04     BIT #$04       ;0x04との論理積を取る
02D36D D0 03     BNE #$03       ;論理積を取った結果が0以外だったら$03のアドレス(02D372)へ飛ぶ

結果が0のとき
02D36F A9 00     LDA #$00       ;
02D371 60        RTS            ;呼び出し元へ戻る

結果が0以外のとき
02D372 A9 01     LDA #$01       ;
02D374 9D 08 0C  STA $0C08 "X"  ;HPに1を強制セット
02D377 A9 01     LDA #$01       ;
02D379 60        RTS            ;呼び出し元へ戻る

倒せるハウゼンを無敵ハウゼンにする方法(おまけ)