東京魔人學園外法帖 血風録

キーワード
参照箇所の検索
相対アドレス
ベース


内容
移動選択すると残り行動数99
技LVUPするとLV9


移動選択すると残り行動数99

これはPSの魔人シリーズのコードを作った事が参考になりました。
PSの魔人シリーズでは移動選択した際に表示される文字を呼び出している処理の
付近に行動数をロードする命令があり、今回もこの方法で出来ました。
最初に説明しておきたい点は最大値検索とセーブデータから以下の事が分かっています。
相対アドレス 効果
$0084 戦闘時最大行動数
$0086 戦闘時最大生命力
$0088 戦闘時攻撃力
$008a 戦闘時防御力
$008c 戦闘時精神力
$008e 戦闘時現在行動数
$0090 戦闘時現在生命力

次は文字列から検索
ps2disのパターン検索は文字を検索する事が出来る為、これを使用します
検索するのは「移動」です。検索をすると以下の場所が見つかりました

この場所からスペース、F3で参照箇所へとびます。その中でこちらを見て下さい

00160900 beq   zero, zero, $00162134
00160904 sb   v0, $0006(a3)
00160908 addiu  a0, gp, $8d50            
0016090c addiu  a1, zero, $0002     a1=$00000002
00160910 addiu  a2, zero, $ffff     a2=$ffffffff
00160914 jal   $00111140
00160918 addiu  a3, zero, $0002     a3=$00000002
0016091c addiu  v1, zero, $0001     v1=$00000001
00160920 bne   v0, v1, $00162134
00160924 lw   v1, $8508(gp)
00160928 addiu  v0, zero, $0002     v0=$00000002
0016092c beq   zero, zero, $00162134
00160930 sb   v0, $0006(v1)
00160934 nop
00160938 jal   $001607e0
0016093c nop
00160940 lw   v0, $8dd0(gp)
00160944 lbu   t0, $0032(s4)
00160948 lbu   a1, $0041(v0)
0016094c srl   t0, t0, 7
00160950 lb   a3, $008e(s4)            
00160954 subu  t0, zero, t0

青いバーが参照箇所で注目してもらいたいのは灰色のバーです
$008eは戦闘時の現在行動数の相対アドレスであると分かっています
その為ロードしているこの部分を変えると現在位の行動数を変更できると思われます
addiu a3,zero,$0063
この様に変える事で移動を選択すると残り行動数が99になりました。

技LVUPするとLV9

技レベルの最大値は9だと分かっていましたが、$0009で16bit検索をすると引っ掛かる数が
多いかと思われる為今回は違う方法を使います
使うのは参照箇所(F3)の検索です
まずはアドレス$00000009へジャンプしBを押してバイトで表示させます
そうしてスペースでマークし、F3で検索
これでps2dis上で(_00000009)と表示される箇所を検索する事が出来ます
これでもかなりの数が引っ掛かり、(_00000009)と表示されている箇所以外も引っ掛かります
今回は16bit検索よりましな程度ですが場合によっては、16bit検索よりもかなりの効率の良い場合もあります

(_〜)と表示される箇所は最大値より大きかった場合に修正する値が入っています
詳しくはキーワードの参照箇所の検索を確認して下さい

00114b98 lb   v0, $0009(a0)
00114b9c addiu  v1, zero, $ffff     v1=$ffffffff
00114ba0 daddu  a3, zero, zero
00114ba4 beq   v0, v1, $00114c34
00114ba8 lw   a2, $0004(a0)
00114bac lbu   v0, $000b(a0)
00114bb0 sltiu  v0, v0, $0003
00114bb4 bne   v0, zero, $00114bd8
00114bb8 lbu   v1, $000a(a0)
00114bbc sltiu  v0, v1, $0009
00114bc0 beq   v0, zero, $00114bd8
00114bc4 sb   zero, $000b(a0)
00114bc8 addiu  v0, v1, $0001            
00114bcc addiu  a3, zero, $0001     a3=$00000001
00114bd0 sb   v0, $000a(a0)
00114bd4 daddu  v1, v0, zero
00114bd8 andi  v1, v1, $00ff
00114bdc addiu  v0, zero, $0009     v0=$00000009
00114be0 bnel  v1, v0, $00114c04
00114be4 lbu   a0, $000a(a0)
00114be8 lb   v1, $004d(a2)
00114bec addiu  v0, zero, $0063     v0=$00000063
00114bf0 beq   v1, v0, $00114c00
00114bf4 lbu   a1, $004d(a2)
00114bf8 addiu  v0, a1, $ffff
00114bfc sb   v0, $004e(a2)
00114c00 lbu   a0, $000a(a0)
00114c04 lb   v0, $004c(a2)
00114c08 addiu  a0, a0, $ffff
00114c0c lhu   v1, $0048(a2)
00114c10 mult  a0, a0, v0
00114c14 addu  v1, v1, a0
00114c18 sll   v0, v1, 16
00114c1c sra   v0, v0, 16
00114c20 slti   v0, v0, $03e8
00114c24 bne   v0, zero, $00114c34
00114c28 sh   v1, $004a(a2)
00114c2c addiu  v0, zero, $03e7     v0=$000003e7
00114c30 sh   v0, $004a(a2)
00114c34 jr   ra
00114c38 daddu  v0, a3, zero

灰色のバーは最大値を超えていない場合に+1する事を意味しています
ここを
addiu v0,zero,$0009
と変える事でLVUPすると9になります
この処理は技のパラメータを設定している様で、
p$000bは技の使用回数
p$004aは技の威力
p$004dは消費行動数
等がありこの辺りを変える事で他のコードも作成可能でした。

戻る