改造コードエンジン開発について

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には改造コードテキストのポインタが渡されますので、文字列を自力で
処理する必要がありますが、アドレス部とパラメータ部の存在しない改造コードに対応できます。