改造コードエンジン開発について
emuhasteの engine フォルダに改造コードエンジンのDLLファイルを追加してやることで、
あらゆるゲーム改造ツールの改造コードに対応させることが可能です。
また、アーカイブの engnie_source フォルダにあるZIPファイルは、改造コードエンジンのソースコードですので、
ユーザサイドでこれを改良(または仕様に準拠した独自DLLを開発)することが可能です。
基本となる仕組み
emuhasteは改造コードエンジン選択時にDLLからCheatEngine()をロードし、
改造コード適用時またはタイマー呼び出しごとにCheatEngine()へ以下のパラメータを渡して実行します。
>int CheatEngine(unsigned long m_ProcessID, // プロセスID
> unsigned long m_ulRealStartAddress, // プロセスの基準となるベース開始アドレス
> unsigned long m_ulVirtualStartAddress, // emuhasteのヘキサビューワの開始アドレス
> unsigned long m_ulCodeCount, // 入力された改造コードの数
> unsigned long m_ulWriteAddress[], // 改造コードのアドレス配列
> unsigned long m_ulWriteParam[], // 改造コードのパラメータ配列
> unsigned char m_ucAdvancedCheck){ // DLL拡張チェックの値(チェック=1)
DLL側はこれらのパラメータを元に改造コード実行ルーチンを処理します。
プロセスID 3260 のBaseAddr:03D10100、ヘキサビューワ開始アドレス02000000、コード数1、DLL拡張無しなら、
CheatEngine(3260,0x03d10100,0x02000000,1,addr[],param[],0);
とまあ、こんなかんじですね。
あとのOpenProcess()やWriteProcessMemory()を用いたプロセスメモリ書き換えルーチンについては、
DLL開発者の腕に任せますので、特に指定はありません。
CheatEngine()の返り値にintで0を返してさえくれればemuhasteは動作しますので。
改造コードエンジンTYPE2 (CheatEngine2)について
emuhaste Ver3.01よりCheatEngine2を実装しました。
int CheatEngine2(unsigned long m_ProcessID, // プロセスID
unsigned long m_ulRealStartAddress, // プロセスの基準となるベース開始アドレス
unsigned long m_ulVirtualStartAddress, // emuhasteのヘキサビューワの開始アドレス
char *code_ptr, // 改造コードエディタのテキスト情報
unsigned char m_ucAdvancedCheck){ // DLL拡張チェックの値(チェック=1)
TYPE2と言いながら、機能は「CheatEngineのアドレス&パラメータ分離機能を省いたもの」です。
代わりにDLLには改造コードテキストのポインタが渡されますので、文字列を自力で
処理する必要がありますが、アドレス部とパラメータ部の存在しない改造コードに対応できます。