PS2は開発中にバグが多く発生する事が多いのかなんなのか デバッグモードが残ってる可能性が結構高いです 稀に、レガイアの様に凄く細かい設定が出来るぐらい 完全なデバッグモードが残ってる事もあります 今回の題材はゼノサーガです まずは、デバッグに関係ありそうな文字列か ラベル(シンボル)を探します。 ゼノサーガでは、文字を Shift JisではなくEUCで管理しているようなので 漢字コードをEUCにして検索します 「デバッグ」で検索してみた所 最初に「== デバッグフラグ ==」 という文字列に当たると思いますこの周辺を見てみると カメラ切り替えやイベント実行などの いかにもデバッグっぽい文字列があると思います 試しに004BB258を参照先にしてF3を押して下さい
すると、002507C4の一ヶ所だけヒットすると思います このアドレスの次の命令を見て下さい jalでxglFontDebugPrintfルーチンに飛んでいます 文字列を通過してからジャンプしています。 早速このルーチンに飛んで解析してみましょう
この下の画像を見て頂ければ分かると思いますが 0087B308のアドレスの数値を元に 大きく分岐する事が分かると思います
分岐しないように、0087B308のアドレスに 何か数値を書き込んで見ましょう するとなにやらメニューが表示されました
これはデバッグメニューの一種のようですが デバッグモードでは無いようです。 でも、解析の助けにはなりそうなので このコードは入れっぱなしにしておきました 実はここでこのコードを入れておいたので 後にデバッグモードを見付ける事が出来ました(かなりの偶然) 他を探してみましょう 今度はラベルで探してみます すると、GameModeDebugMenuというラベルを発見 そこに飛んでみましょう すると、ルーチンの最初の方に 0048BD0Eの数値によって分岐する命令があるので 分岐しなかった場合の部分を見てみましょう
この中のストア命令に注目して下さい sq、sd、sw、shの3つがありますが デバッグフラグを扱っているルーチン内なら フラグを立てるときにストアを使う可能性があります フラグは、普通ならば何ケタも書き込む必要がないので 一番書き込むデータ数が少ないshに注目 ここではアドレス0035BCE0の数値を00333D8Cに移しているようです 試しに00333D8Cに数値を入力してみます すると、数値を8にした時にデバッグモードに入りました
大成功~ かと思いきや デバッグメニューから抜けれない罠(汗) 数値を固定してるのがNGみたいです 特定の場面でコードをONにするなら パッドコードが便利ですが PSの様に自由に見つける事が出来ません。 しかし、上で「0048BD0Eの数値によって分岐」 と書きましたが、0100はパッドコードで言うと セレクトボタンと同じ数値です。 もしかしたら0048BD0Eはパッドアドレスでは?・・・ 早速、L2を押したらコードがONになるように 条件判定コードとして0048BD0Eを使ってみました すると、見事に押した時にデバッグモードに入りました が、どうやってメニューから抜け出すのか未だに謎です ここでもう一度おさらい 「0048BD0Eの数値と0100を比較している」 つまり、セレクトを押すか押さないか かなりセレクトボタンが怪しいですね・・・ 早速デバッグメニューでセレクトを押してみました すると、デバッグメニューから抜ける事が出来ました これでデバッグモードの完成です サーチ終了後に分かった事ですが 0087B308のコードを入れてないと デバッグメニューが正しく使えません 実際はこんなに早く見つからず 大分混乱しながら作ったので この説明と一部食い違う可能性があります(汗) 特に、実際にコードで使ってるパッドアドレスは モデルコントロールで見つけた0048BD10だったりします