東京魔人學園外法帖 血風録
キーワード
参照箇所の検索
相対アドレス
ベース
内容
移動選択すると残り行動数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は消費行動数
等がありこの辺りを変える事で他のコードも作成可能でした。
戻る