例によって「ダウンロード」ページにうpしてあります。今回の主な変更点は以下の通りです。テストが充分でないので使用にはご注意を。
- 内部構造見直しに伴うRomMap, ROMロード時間の改善
- バイナリエディタ機能の追加
1は元々はDQ6のAI行動の解析をしていたのですが、その流れで「DQ6の解析をRomMap.xmlをテキスト編集せずにデータ定義を行えるようにする」を目標にSFCGENEditorの改良(主にデータ定義部分)を行っていましたが、最終的に内部構造の見直しにまで手を出した結果の副産物です。そこそこ構造として固まっていたものを再構成したため、少々時間がかかったのですが、結果として機能レベルは変わらないままROMのロード・解釈速度が劇的に早くなりました。環境にもよりますが、手元の環境*1で、DQ3のオリジナルのROM(文字列、SRの逆アセンブルも含む)のロードにかかる時間が9秒→1秒未満になりました。今まで何やってたんだかという感じではあるのですが、内部でデータの管理のためにあらゆる用途に使用していたDataTableクラスが原因だったようです。DataTableは1レコード中のフィールドの型が実行時に決まるようなケースでは便利ではありますが、もともとSQL Serverなどの外部DBからデータを読んできた時のキャッシュとして使用されることを想定して設計されているようで、メモリ中のみで持つデータの保持には1つ1つの処理が重すぎる(特にレコード追加、レコードアクセス)、ということのようです。もちろんインデックスは設定していたのですが、それでも従来のバージョンを使っていた方はわかるようにお察しの速度だったので大して役には立たなかったようです。これに関連して、RomMap.xml内のデータ型の表記(数字表記を文字列表記に変えた)を変えましたが、古いバージョンとの互換性は確保してあります。普通に古いバージョンのRomMap.xmlを読んで保存すれば表記が変わります。プラグインの内部コードもこの変更に伴い大幅に変えてしまいました(あまり良くないことなのは百も承知ですが)。ほとんどいないと思いますが、プラグインを独自に開発している人はプラグインを変えないと今回のバージョンから使えなくなります。サンプルプラグインのソースコードも更新してあるので参考にして下さい。
2は、.Net Framework上で使用可能なバイナリエディタコントロールがないか探していたところ、Be.HexEditor(リンク先)というコントロールがオープンソースで公開されていたため、カーソル移動まわりをStirling仕様に若干変更して組み込みました。スクロールバーの移動が若干もっさりしているという印象以外はまあそれなりに動くのではないでしょうか。基本バイナリエディタ上での変更作業というのはやらないんですが、DQ3 K.Mixの変更作業でメニュー文字列だけはポチポチとバイナリエディタ上で変更して保存→SFCGENEditorで読み直しという手順で行っていたのを、当時は1の変更を行っていなかったのでROMの読み直しに時間がかかるのが嫌なのでなんとかならんかなあということで実装しました。今となってはROMの読み直しもすぐ終わってしまうので大して重要な機能ではなくなってしまいました。あくまで補助という位置づけで、特定の数バイトのアドレスを変えたいといった用途を想定しているのでジャンプ機能もごく単純なものしか実装していませんし、今のところ豪華な機能にする予定もありません。
というわけで、現在リリースしているバージョンとそこそこ同等の機能の状態になったのでいったんリリースします。とりあえずバイナリwikiを見たり、SRの切り分けをしてDQ6のRomMap.xmlも空き領域が4MBのROM中残り120KBまでのところまでできました。まだSRの解析はほとんどやっていないのですがそれは次の段階です。DQ3でも改造に手を出す前の作業としてポチポチやっていたのを思い出しました(結果として後々かなり役に立ったわけですが)。DQ3と比べて思うことは「かなり領域をめいっぱいに使ってるな」ということです。アイテムID、モンスターIDは256まで全部埋まっています。改造をするにあたってまず目が行くこれらの領域に余裕が無いというのは何かを追加するなら何かを削らないといけないということで「正直厳しいなあ」というのが感想です。各所でそれぞれ1バイトであることを前提にRAMの領域確保がされていたりコードが書かれている事が多いので(特にアイテム関連)、これを例え1ビットでも増やすとなると影響範囲が多すぎて拡張作業が超大変、ということになりそうです。どっちかというとモンスターIDの拡張のほうが対象範囲が限定的なので簡単かなという感じです(セーブデータには関係ないので)。ただ単に「やるとしたら」という前提で感想を書いているだけなので実際にやるかどうかは別の話です。念のため。
*1:Windows7 64bit CPU:Core-i5 3.2GHz, RAM:8GB
コメント
先ほどSFCGENEditorダウンロードさせていただきました。
ROMの読込がものすごく速くなりました。
これは嬉しいです^^ありがとうございます!
バイナリエディタも搭載したのですね
私はStirlingとxeditを使っています
今後も応援しております^
DLありがとうございます。案の定というかまだいろいろ不具合が見つかっているので(特にLoROM対応)、DQ5の解析をしつつ完成度を上げていこうと思っています。