実行ファイルにないプログラムの解析

実際に実行ファイルを開いて頂ければ分かると思いますが

戦闘中EP減らない
0C389FDE 14560BA7
1C389FDA 1456E7A5

戦闘中常にAP6
0C389CAC 1456D7BA
1C389CA8 3846E7A3

戦闘中1度の攻撃でブーストゲージ+1
0C389E3C 1456E7CA
1C389E40 3854E7D7

などのコードは、複合化して
該当するアドレスに飛んでみても
その場所にプログラムが存在しません。
では、どうやって解析するのか
答え=実行ファイル以外のファイルを調べる

ゼノサーガには、実行ファイル以外にも
ov01.ovlやov10.ovl
というファイルがいくつか存在し
PS2DISで開いてみるとちゃんと命令が書かれています

まず、最初にov01.ovlを開いてみて
ラベル一覧を見てみた所
BOSSやBATTLEなど
いかにも戦闘っぽいラベルがあります


だーっとラベル一覧を見て行くと
calcと書かれたシンボルが多く存在します

calcとは、計算という意味があるので
何かの加減算ルーチンに貼られているようです。

まずAP常に6です
calcApといういかにもなシンボルがあります
プログラムを見てみて下さい

00A11BA4周辺の命令で
APが7を超えたら6に戻して
最終的な数値は00A11BA8の命令でストアされます
常に最大にするならば以下の方法が考えられます
1・AP値のロード命令を0006を代入する命令に変更
2・比較命令を変えて常に6に修正するようにする

一般的な方法はこの2つです
でも自分はちょっと変な部分で代入してます(笑)


次はEP減らないです
APと同じようにcalcEpというシンボルがあります

EPを減らないようにする方法は以下の通りです
1・減算命令を潰してしまう
2・ストア命令を潰してしまう

しかし、プログラムを見ても減算命令が存在しません
恐らく加算命令で負の値を加算しているかもしれませんが
とりあえず確実性の高いストア命令を潰した所
EPが減らなくなりました。


最後はブーストです
同じくcalcBpというシンボルがあります

このルーチン内にある加算命令を変えれば
ブーストゲージの増加量が変えられます
私は加算命令を0032(ゲージ1本分)の代入にしましたが
普通なら代入命令ではゲージ1本に固定されるハズです
でも普通に1本ずつ増えるのはなぜか?

恐らくゲージが1本溜まるとゲージを初期化して
別のアドレスでブースト本数を管理してるからかと思います
最初に代入で上手くいったので
細かい部分まで調べてないので予想ですが・・・


実行ファイルと違い、数値が可変なので
Aコードでの書き込みは効果がありません
基本的に実行ファイル以外の命令は
Dコード(条件比較)を併用して
プログラムが読み込まれた時のみ
コードが有効になるようにして下さい
常に数値を書き込み続けると
別の場面でそのアドレスが使われた際に
ゲームが止まってしまう可能性があります

ゼノサーガはシンボルが多くて
結構トリッキーなコードが作れるゲームですが
逆にシンボル情報が多すぎて
目当てのプログラムが見つからなかったりします

そこは実際にコード化して実験したり
プログラムの流れを頭で読んだりして
候補を絞りながら地道にやるしかありません。