必ず100%回復&スキル使い放題

限られた情報でどこまで深く探れるか
PS2の改造はここが一番楽しい部分だと思います
今回の実際の手順で紹介するのは、いくつかの要素の情報を組み合わせ
全く違う要素のコードを探したときのもので
シンボルで探した時と同じくらいのレベルのコードです。

また、どちらかと言えば過去の講座も全て読んだ人が対象なので
一部の簡単な説明については省いてある部分があります。


まず、色々な情報の基盤となる所持金を探します
雑誌掲載の前作(プロジェクト・ミネルヴァ)のワークコードでは
05F5E0FFが所持金に書き込まれているので
このプロフェッショナルでも同じであると考えられます
早速E0FFで検索した所、怪しい場所が見つかりました

05F5E0FFと0020A838からロードした数値を比較しています
最大値(仮)と比較されるこの0020A838は所持金のアドレスと思われます
早速、コード化して使ってみましょう

2020A838 05F5E0FF
〜暗号化〜
1CB72B60 17E9C70C

画面を見ると・・・所持金が最大値になっています
予想通り所持金のワークアドレスでした
次に、この所持金をベースにしてキャラステータスを探します
セーブデータ比較や数値サーチプログラムコードなどを使用し
アリシアのHPのアドレスが
0020BFCC
0020BFD0
の2個所に書き込まれている事が分かりました
上は現在値、下は最大値が格納されていました
実行ファイルを見てみると、2つ共どこかから参照されています

このHPアドレスの0020BFCCをスペースキーで参照先に設定し
F3ボタンでどこから参照されているかを探します

すると、多くの個所からこのアドレスの数値をロード&ストアしていて
さらに、多くの場合「sw rt, $155c(base)」というように
baseに155C+して値を扱っている事が分かりました

何箇所か、上の画像のように参照先は表示されていない
命令だけが表示されている個所でもヒットしました

この時点では、味方や敵のアドレスはどうなってるか分かりませんが
少なくともアリシアは+155Cして数値を扱っているようなので
この155Cを数値検索で探して、他のプログラムも調べて見ましょう

すると、00128250でヒットした所から下方向に
ちょっと興味深い処理をしている場所が見つかりました

HP現在値をロードした後に、除算、加算などを繰り返し
その結果を再度HPの現在値にストアしています
が、その計算結果がa2レジスタの数値より多かった場合は
a2レジスタの数値にストアし直しています

このa2レジスタにはどんな数値が入っているのか
プログラムを少し遡って探してみると
00128238のlw命令でs0+1560のアドレスから
a2レジスタに数値をロードしています
s0+155Cが現在値のアドレスらしき場所なので
この+1560は単純に、最大値のアドレスであると考えられます
(現在HPに+4hしたアドレスが最大値のアドレスだからです)

という事は、ここは戦闘中の回復スキルを使った時に使われる
HP回復プログラムではないかと想像できます
早速、00128274の分岐命令を潰して
必ずa2レジスタがストアされるようにして実験です

戦闘中に、わざと味方を連れて敵の中に特攻し
HPをギリギリまで減らして回復スキルを使ってみた所
スキルレベルの回復量などに関係なく
アリシアも味方も100%まで回復するようになりました
どうやら味方も同じく、s0+155CがHPアドレスのようです。



ここが回復スキル使用時の回復プログラムと特定は出来ましたが
どのキャラも、スキルには使用回数制限があるので
使用回数を超えたらせっかくの100%回復も使い難くなってしまいます

スキル回数が0では回復が使えないということは
このプログラムより上で「スキルを使ったかどうか」や
「残り回数を減らす」などの命令があるハズなので
そこを探せばスキル使い放題が作れそうです

ちょっと遡ってみると、HPに近いアドレスである
s0+15E8から値をロードして、FFFF(−0001)を加算し
同じアドレスにストアしている部分が見つかりました

キャラステータスに非常に近いところから数値をロードし
0001を減算して同じアドレスにストア
しかもここは回復スキルを使うと必ず通る場所です
「いかにも」という感じがしますね(笑)

このFFFFを0000にして、減算も加算もしないようにして
コード化して実際に戦闘中にスキルを使用してみました
A01281F4 24420000
〜暗号化〜
9C85021C 3894E7A5
すると、回復スキルでも、サーチスキルでも、バリアスキルでも
スキルを使っても使用回数が減らなくなりました
これで「いかにも」が「やっぱり」に変わりました(笑)
(時間の都合で、実際には他のスキルでは動作確認が取れていません
もう1,2箇所、怪しい場所があるのでもしかしたら・・・(汗))


このようにして、最初に所持金のワークコードを探しただけで
そこからHPのアドレス、HPのアドレスから回復プログラム
回復プログラムからスキル使用時減算までが見つかりました
所持金がスキル回数、わらしべ長者のような発展の仕方ですね(笑)

プログラムの流れや動作が見てすぐ分かる位まで慣れていれば
もっとすんなり、もっと複雑な場所も探し出せるようになると思います