れーすのエグゼ流星Blog

エグゼとゲームと雑記

エグゼ解析したりゲーム作ったりいろいろ。

ロックマンエグゼ6 ウイルスやボスのHPテーブルを特定する

大まかな流れ

1.HPを管理しているRAMを知る

2.RAMをブレークポイントにセットする

3.関数を特定する

4.その関数を使ってこつこつ調べる


1.HPを管理しているRAMを知る

GitHub - dism-exe/bn6f: Disassembly of MegaMan Battle Network 6 with Cybeast Falzar as baserom
アセンブルプロジェクトを使用するとROMマップを出力してくれており、そこにRAMがすべて記載している
ただ、こういうのは改造コードが便利
検索「ロックマンエグゼ6 改造コード 敵のHP」
PAR コード掲示板

敵HP全て1()
BA353788 E5E9DF9A
E18A078F E761732A

PAR→VBAに変換してRAMを把握する
VBA/PAR/XTAコード変換

0203A9D4:0001
0203AAAC:0001

この2つがおそらく最大HPを管理するRAMになる

2.RAMをブレークポイントにセットする

column:arm_asmカンペ [FE改造wiki]

[0203AAAC] = 0x28
ここではグレイブヤード2のカーネルRVのHPでテストをする
HP2600 = 0xA28

1バイト目なので0x28をブレークポイントに設定です

f:id:rai17321:20200213002215p:plain

ヒット

3.関数を特定する

r1,r2にA28が入ってるから、A28を入れる処理を辿る
mov r2,r1でr1にA28をいれてる

1つ上のldrh r1,[r0]で0x810920A(ROM)からA28読み込んでいることを確認

f:id:rai17321:20200213002429p:plain

これがHPテーブル

また、読み込み関数はこれ

0800f824 enemy_get_struct1
0800f84c enemy_get_struct2

この関数を使えばHPなどを読み込めるはず、特にenemy_get_struct2

4.その関数を使ってこつこつ調べる

0800f84c enemy_get_struct2

NO$GBAを使って上をブレークポイントに設定する
おそらくウイルスやボスに遭遇する度にブレークするので、その時のr0とr1を見ればいいと思う