殆どのゲームの、数値が関係する要素の殆どに
最大値チェックというプログラムが用意されています
最大値チェックについては基礎知識を読みましたね?
読んでいれば、早速実際のソフトを使って探してみましょう。

最大値検索とは、このカウンターストップの数値から
最大値を超えてるかどうかのチェックをしてる場所を探り
ここからコードを作り出すという物です。

今回の例題には
「ファイナルファンタジー10 インターナショナル」
を使用します
実際に、ギルのアドレスを探してみましょう
下準備でFF10インターナショナルの実行ファイルをPS2DISで開き
逆参照解析さんを起動させておきます。


ギルはゲーム画面で見る限りかなりのケタ数がありそうですが
大体はワードデータ、8ケタの16進数で扱うので
999999999=3B9AC9FF
もしくは
99999999=05F5E0FF
が最大値ではないかと予想出来ます

次に、ツールバーの編集→32bit値を検索→16bitにマークをして
最大値であろう下4ケタの数値、C9FFを入力して検索します
R5900の命令の仕様上、8ケタある数値をレジスタに格納するには
どうしても2つの命令を使わないと格納出来ません
その2つの命令のうちの1つをこの最大値検索で探しあてます。

C9FFで検索してみると、いくつもの候補が出てきますが
説明の為に先に正解を言ってしまうと001BE404が正解です。
その001be404から下に注目しましょう

001be404でv1に3B9AC9FFという数値が完成します
画像が昔のものをそのまま使ってるので分かり難いですが(汗)
上の方でlui v1,$3b9aという命令が動いているので
このori命令で3b9ac9ffという数値が作成されます。

001be410のslt命令でa0とv1を比較しています
もし、a0の値がv1の値より大きかった場合は
v0レジスタに0001が格納されますが
逆に、a0の値がv1の値より小さかった場合は
v0レジスタに0000が格納されます
v1にはギルの最大値らしき数値が入っているので
ここで比較されるa0レジスタにはギルの現在値が入ってると思われます

001be414で上のslt命令の結果に応じてa0にv1が転送されます
上の命令で0001が格納されていれば最大値を転送
0000が格納されていれば転送はされません

001be41cのsw命令で0031CE98というアドレスに
最大値か、元の数値がストア(書き込む)されるという事から
ここは最大値チェックをしていると予想出来ます

この0031CE98というアドレスがギル最大値チェックらしき場所に存在し
さらに比較後の転送結果が格納されるかもしれない事からも考え
ギルのワークアドレスではないかという可能性が高くなります

そこで、実際に0031CE98に最大値をワークコードで書き込んで見ます
ワードデータ書き込みなので先頭を2にして暗号化

2031CE98 3B9AC9FF
〜暗号化〜
1CA851C0 1DBC9E0C

これをマスターコードと一緒に使ってみると・・・
見事にギルが最大になっています、改造成功です。