れーすのエグゼ流星Blog

エグゼとゲームと雑記

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

BA CrossOverPatch for JP 作業記録 その1【シールドの展開時間】

はじめに

BA CrossOverPatch for JPというものを作っています
BA CrossOverPatchと呼ばれるUSグレイガ向けのハックROMをJPにも移植しようというプロジェクトです

詳しくはこちら
www.youtube.com

自分用のメモとして日々の作業を記録していこうと思います
(こういうのは続けることが一番なので、三日坊主にならないようにラフに書いていきます)

シールドの展開時間を伸ばす

流星のロックマンでお馴染みのシールドは結構展開時間が長いです
一方ロックマンエグゼ6のシールドはかなり短いです、変えていきましょう


NO$GBAというデバッガーを使い、0801BE14にブレークポイントをセット
0801BE14はロックマンのアクションに対して使うブレークポイントです
しかし、ヒットせず。アプローチを変えて、音を鳴らす関数やスプライトをロードする関数にブレークポイントを仕掛けても調査は難航


DiscordでGreigaMasterに助けを乞う


f:id:rai17321:20190807233247p:plain

色々教えてもらうと、結果的に以下がループ処理だとわかりました

000f3ef6 8a38 ldrh r0, [r7, #16]
000f3ef8 3001 add r0, #1 
000f3efa 8238 strh r0, [r7, #16]
000f3efc 7b39 ldrb r1, [r7, #12]
000f3efe 4288 cmp r0, r1 


よく見るとこれ、ループ処理です
000f3ef6 8a38 ldrh r0, [r7, #16]
RAMから現在のフレームを取得


000f3ef8 3001 add r0, #1
取得した値をインクリメント


000f3efa 8238 strh r0, [r7, #16]
RAMにインクリメントした値を書き込む


000f3efc 7b39 ldrb r1, [r7, #12]
シールド展開時間の設定値をRAMから読み込む


000f3efe 4288 cmp r0, r1
r0とr1の値を比較、r1の値を超えるまで1ずつインクリメントされていく


つまり、000f3efc 7b39 ldrb r1, [r7, #12] が実行されたタイミングのレジスタr1の値を確認し、そこから辿っていけば設定値の格納先がわかるわけです


結論としては下記となります
0001278c 0214 lsl r4, r2, #8 //シールド 展開時間