update 2005.03.10

No.02 ドラムマニア エキサイトゲージサーチ
概要
PCSX2 Ver0.7から動作するようになった、コナミの音ゲー「ドラムマニア」をサーチします。
メニュー画面などの操作はとても快適でAthlon64 3200+で30fpsほど出てくれます。
…あくまでメニューまでは。

曲がスタートするや否や、スペックによっては1秒もゲームが進行することなくフリーズします。
また、必ずSPU2には標準のSPU2NULL(無音)ではなく、P.E.Op.S. SPU2 DSound Driverが必須です。
とにかく同期が命で、ほんの少しでもエミュレーション精度の問題で同期がズレるとアウトです。

準備
今回のサーチには以下のものを使用します。
・PCSX2言うまでもなくPS2エミュレータ本体。今回はVer0.7を使用しました。
・Phaste改造コードサーチツール
・ドラムマニアSYSTEM.CNFに記載されたバージョンはVER = 1.30

サーチ手順
大まかに説明すると、以下のような流れになります。
1.PCSX2を起動してドラムマニアを実行。
2.Phasteを起動してメニューの[PCSX2補足]をクリックしてプロセス補足。
3.どのモードでも良いので選曲まで進み「F1キーを押してSaveState(リアルタイムセーブ)」
 また、選ぶ曲はテンポが速く連弾の多いものがオススメです。
4.曲が始まった瞬間、Phasteで「サーチ結果クリア(初期化)」をクリック。
5.止まらないことを願い、曲が進行してエキサイトゲージが減ったら、減少[--]サーチ、
 減少後、もしフリーズしてしまったら「F3キーを押してLoadState」で初めに戻り、増加[++]サーチ。
6.再度、曲を選び直してサーチを続行(同じ曲でなくても良い)。
7.根気よく[5]〜[6]の手順をひたすら繰り返し、該当件数を絞り込む。

前回のグラディウスIIIではサーチする値の型をHalfWORDにする必要がありましたが、
今回はBYTE型のままサーチを続けることで、最終的に
アドレス:パラメータ
00B50B5C 0000001D
00B50B61 00000027
00B50B64 0000001D
00B50BB6 0000001D
00B50D00 0000005D
00B50D10 0000005D
00B5261C 0000005A
ここまで絞り込むことができます。
(パラメータの値は「曲が始まった直後で、最大の状態」です)。
ドラムマニアのエキサイトゲージを構成しているセルの数を数えると30個あり、
上の7個所該当している 0000001D(10進数29)の値を0から基準に数えればバッチリ一致!!

…と思っちゃうんですが、実際にエキサイトゲージが格納されているアドレスは 00B50B61 です(--;
Phasteに 00B50B61 00000027 の改造コードを登録して実行しておくと、
いくら失敗しても全くエキサイトゲージが減少しないことが確認できます。
実際にプレイしていると、明らかにエキサイトゲージが0のところにあるにも関わらず、
ゲームオーバーにならない状態があるので、ほんの少し余裕があるのでしょうねぇ。

というわけで改造コードにするとこんな感じです。
マスターコード(必須コード)ECB783F0 1456E60A
エキサイトゲージ減らない 3C248C89 1456E7C4

今回のポイント
今回は、頻繁にフリーズする不具合を SaveState を利用して巻き戻すことにより解決しています。
本当は止まる元凶を見つけ出してパッチで解決したかったんですが、残念ながら力不足で…(つдT)

ただ、気をつける点がいくつかあり、サーチ手順では「選曲」の場面でセーブしていますが、
サーチ効率をよくする目的で演奏中にセーブしたりすると、すぐ強制終了します。
また、リコンパイラを無効にしたほうが重い代わりに動くゲームは増えるのですが、
リコンパイラが効いている状態ではSaveStateがうまく動かないことが多いようです。
(さらにドラムマニアでは重い=同期がズレる→フリーズという難点があります)。

リコンパイラ有効でゲーム進行→止まる手前でSaveState→リコンパイラを無効にしてLoadState、
ということも可能なので、うまくバランスを取りながら進めると良いでしょう。