rUGPについて

rUGPといえば、アージュの「君が望む永遠」や「マブラブ」に使用されているエンジンだ。

昔、シナリオのメッセージ部分を抽出するツールを作成するためにシステムを調べる機会があったのだけれど、面白いと思ったのは、MFCを使用していた点だ。

MFCは、WindowsのGUIアプリケーションの作成やOLE/COMの機能を実装するために便利なフレームワークなのだが、rUGPは、別にその機能は使用していない。

じゃあ、何に使用しているかというと、シリアライズの機能を使用している。

シリアライズ機能は、簡単にいうと、クラスのインスタンスをバイナリデータ化する、または、バイナリデータからクラスのインスタンスを復元する機能だ。

全体のデータをアーカイブしたrioファイルやその中に入っているシナリオデータであるrsaファイルもすべてシリアライズ機能を使ってクラスをバイナリ化したデータとなっている。

実際にシナリオのメッセージ部分だけを抽出しようとすると、継承しているクラスや保持しているクラスをすべてシリアライズ機能で読み出せるようにする必要があった。

シリアライズ機能で読み出すためにはクラスにどんなクラスを継承しているか/どんな型のメンバ変数が存在するか/どの順番で読み込んでいるかを解析する必要があり、かつ、シリアライズ機能にはクラス単位でバージョンの値が指定できるため、バージョン毎に読み出す変数の数や種類が異なる可能性があるため、その部分も正しく解析しないと、読み込みできなかった。

幸い「君の望む永遠」は、実行ファイルにシンボル情報が残っていたこともあって、気合でなんとかメッセージ部分を抽出することができたのだが、「マブラブ」ではシンボル情報も削除されて、クラス名の情報が暗号化され、いろいろ対策されてしまっていたのでさすがにあきらめた。

そんな事情を知っていたので、「マブラブ」に対応したhikobae氏作のAlterDecが出たときには正直すごいとしか感想しかなかった。

AlterDecを配布していたサイト自体はなくなっているが、別の人のツールに取り込まれて進化している模様。

ソースも見ることができる。(Rugpの中)

regomne/chinesize
My chinesize tools, scripts and codes. Contribute to regomne/chinesize development by creating an account on GitHub.