ルドラの秘宝の無敵ハウゼンについて、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 ;呼び出し元へ戻る