手配レベル上がらない

この方法は他のソフトでも使える方法かといえば
恐らく流用できる方法ではないと思いますが
PS2にはこんな探し方もあるんだなという気持ちで
読んで頂ければと思います、ただし難易度は高い方なので要注意。

ラベル一覧で役に立ちそうな物を探していると
なにやら暗号みたいな文字列が見つかりました
ちなみに今回はWinXPが入ってるPCでこれを書いてるので
少しウィンドウが今までの画像とは違います。

URDLURDL4144(3144など)これを左右反対にすると
4144LDRULDRUやっぱり謎の文字にしか見えませんが
しばらく考えていてある仮説を思い付きました

その時点では4144はまだ分かりませんでしたが
LDRUは十字キーの各方向を表してるのではないでしょうか?
L=Left(左) D=Down(下) R=Right(右) U=Up(上)
そういえばチートコマンドにこれに似た物があります
ライフ回復や武器出現のコマンドは最後が←↓→↑←↓→↑
これはチートコマンドを表している可能性が非常に高いです。
となると、1234はLRボタンでしょうか?

このチートコマンドを表しているであろう文字列が存在する
アドレスの参照先を調べてみる事にしました
003F3310をマークしてF3で検索します
すると、一箇所だけ参照している場所がありました


そこから下方向を見ると全く同じプログラムへ
何度もジャンプするように命令が並んでいます
他にもジャンプする度に1〜Bまで数値が増えたり
0064や0005、00C8といったキリの良い数値もあります

この数値は武器出現コマンド
(R2,R2,L1,R2,←,↓,→,↑,←,↓,→,↑)
を入力した時に増加する弾数と全く同じです
どうやらここはチートコマンドに関係しているプログラムの様です
試しにプログラムの先頭をjr raで潰して(遅延もnopで潰す)
このプログラムを通らないようにしてコマンドを入れた所
効果も入力成功表示も出なくなりました。

そうと分かれば、このプログラム周辺を探れば
ライフ回復や所持金増加、手配レベル0の効果を持っている
プログラムが見つかる可能性があります
武器コマンドより上はすぐ関数の先頭部分になるので
ここから下方向へプログラムを読んでいきます。

すると、こんな場所を発見

42C80000は浮動小数点値を16進数表示にした物です
10進数に直すと100.000000、ここは体力と
防弾チョッキの回復コマンドの時に通過するようです。

次はこんな場所が見つかりました

何か数値をaddiu命令で2増やしています
その後、0006で比較されている事から
手配レベルアップコマンドの場所であると予想出来ます
加算命令が2つあったので両方の加算値を0000にすると
コマンド成功表示が出てもレベルが上がらなくなりました

手配レベルはv0レジスタ+0018hです
これを元に手配レベルを管理してる他の場所を探します
この0018で16bit検索してみると結構見つかりますが
002A6D50で引っかかった場所から下方向を見ると
6〜0の数値のどれかをストアするように
何回か分岐命令を通過するようになっています

(画像サイズの関係で一部(レベル5と6)のみ)

プログラムの終わり付近ではzeroをストアする場所があります
そこを必ず通過するように、関数先頭近くから
その場所まで分岐命令でジャンプさせるようにして
コード化して車で歩道を暴走してみました(笑)
すると、何人轢こうが警察車両に銃を撃ち込もうが
手配レベルが0固定で絶対に上がりません
ただでさえ危ないゲームがもっと危なくなりました(笑)


今回は普通とは全く違う探し方でコードを探しました
コマンドから探す方法はGTA3独特の物で
他のソフトでも似たような方法で探せる可能性は低いです
こういう普通の最大値検索などとは全く違う探し方をする場合は
どんな情報でもコードになると見て考えて
とにかくコード化して実験などを繰り返すのが重要です
実際にコマンドに辿り着くまで結構掛かっています(汗)