最大値検索1とは違うソフトでの解析も紹介します。

今回の題材はDDR MAXです

このゲームでのスコア最大値は、プレイ画面を見た感じでは
3B9AC9FF(999999999)であると考えられるので、
下4ケタのC9FFで数値検索をしてみると何箇所かヒットしますが
その中でも0015DE4Cの周辺に注目です。

0015DE44でv0+003Cのアドレスから数値をv1へ読み込み
0015DE48と0015DE4Cでa0レジスタに3B9AC9FFを格納し
0015DE50でv1とa0の数値を比較しています

ここまでは最大値検索-1と同じですが、ここからが少し違います
比較結果により0015DE54で分岐するしないが決まります
数値が3B9AC9FFより多ければ分岐せず、少なければ分岐するようになっています
これは最大値チェックとは?で例で書いた物と同じ様なものです。

もし、分岐しなかった場合0015DE60の命令でv0+003Cのアドレスの数値に3B9AC9FFが
書き込まれるのを見るとまさに最大値チェックであると考えられます
分岐しなければ最大値に修正されるので
0015DE54の分岐命令を潰してしまえば
常に3B9AC9FFが書き込まれるようになります

実際にこの分岐命令を潰すプログラムコードを作り
動作するかを試します
2015DE54 00000000 を暗号化して動作確認をすると・・・
スコア加算時にスコアが最大になりました
これでスコア即MAXの完成です。