現在スコアとグラインド距離

実際にソフトを持っている方ならすぐ分かると思いますが
現在スコアとグラインド距離のコードを複合化しても
参照先がない事に気付くと思います
ではどうやって見つけたのか?
原理は意外と簡単だったりします

まずは、最大値検索でこの場所を見つけました

ちょっとだけ変わった動作ですが
普通の最大値チェックとほとんど変わりませんね
案の定、a3をストアさせるようにしてみた所
スコアが加算されると同時にMAXになりました
ここからどうやってワークアドレスを見つけたのか?
答えは「書き込むレジスタを変える」です

a3にはスコアの最大値が入っています
では、a1には何が入っているのでしょうか?
a3をストアさせるとスコアがMAXになるという事は
a1はスコアのアドレスが入っているという事になりますね

ストアするレジスタをa3ではなくa1に変えると
(sw a1, $0000(a1)です)
ゲーム中にスコアが加算されると
スコア値にスコアアドレスが書き込まれるようになり
あとは表示された数値を16進数に直すだけです
16進数化した数値がそのままスコアアドレスになります

グラインド距離は、昔のような
根性サーチで近くのアドレスを調べます(笑)
移動距離などのかなり細かい数値を扱う処理は
浮動小数点を使っている可能性が非常に高く
キャラの移動に関する物はほぼ確実に浮動小数点です
(座標やポリゴンサイズなどもfloatですね)

とりあえず、100.000000(42C80000)
を書き込んで調べてみる事に。
通常数値と浮動小数点数値の変換には
ネット上でフリーで公開されているツールを使用しました

すると、スコアアドレスに+20hしたアドレスに
100.000000を書き込んだところ
ゲーム開始直後に「10M」と表示されました
これで現在グラインドのアドレスが判明し
値は10倍値で管理されているという事も分かりました。