Posts
KFX 逆汗道中記
KFX を逆アセンブルして解析したときの情報を元に仮説を述べてみたいと思う。アセンブラや Windows に対する理解が足りないことによる間違いがあるかもしれないので注意すべし。
voice.lst の登録領域は静的確保
voice.lst の登録数を増やすことができれば表現の幅が広がり、KFX が安定して動作するようになるので改造にチャレンジしてみたが、登録数を増やすことはできなかった。
逆アセコードは凄まじい量なので全部のコードを目で追ったわけではないが、怪しいと思われるコードを追ってみたり、確保すべきヒープ領域数で絞り込んでみたりしたが、それらしきコードは見つからなかった。このことから領域は動的 (malloc or new) ではなく静的 (配列) に確保されている可能性が高い。
バグの再現性
voice.lst で範囲外の領域 (マイナス表記など) を使った際に起こる不具合には、何故再現性があるのだろうか。例えば、マイナス指定をしたときにスーパーコンボの残像が出なくなることがあるが、これは残像を制御しているシステム領域が上書きによって破壊されてしまったのが原因だと思われる。
確実に SYSTEM 領域を破壊するには VOICE 領域が SYSTEM 領域に隣接してなければならないが、もしプログラムが動的に VOICE 領域を確保していた場合、この理論は成り立たたなくなる。領域の動的確保は OS が見つけた空き領域を使うことになっているので VOICE 領域が毎回同じ位置に来るとは限らない。
前回ロードしたキャラのリソースが使用できる
時々、voice.lst の記述ミスが原因で前回ロードしたキャラの音声が再生されてしまうことがある。これは、前回のキャラが使用した VOICE 領域を参照したことが原因だと予想がつく。もし、VOICE 領域が動的に確保されていたら前回のキャラが使った領域を参照できる可能性は低い。