--- Daodan/src/Daodan.c 2009/08/10 09:09:53 452 +++ Daodan/src/Daodan.c 2009/10/17 08:47:09 465 @@ -38,6 +38,7 @@ bool patch_particledisablebit = false; bool patch_multibyte = false; bool patch_cheattable = true; bool patch_argb8888 = true; +bool patch_killvtune = true; bool patch_safeprintf = true; bool patch_daodandisplayenum = true; @@ -161,12 +162,17 @@ bool DDrPatch_Init() DDrPatch_Int32 (OniExe + 0x000f617a, (int)&DDr_CheatTable[0].message_on); } + // ARGB8888 textures if (patch_argb8888) { DDrPatch_Byte (OniExe + 0x00135af0, 0x07); DDrPatch_Byte (OniExe + 0x00135af4, 0x0B); } + // Disable loading the vtuneapi.dll + if (patch_killvtune) + DDrPatch_Byte (OniExe + 0x00026340, 0xC3); + return true; } @@ -228,6 +234,8 @@ bool DDrIniCallback(char* section, bool patch_cheattable = !stricmp(inifile_cleanstr(value), "true"); else if (!stricmp(name, "argb8888")) patch_argb8888 = !stricmp(inifile_cleanstr(value), "true"); + else if (!stricmp(name, "killvtune")) + patch_killvtune = !stricmp(inifile_cleanstr(value), "true"); else if (!stricmp(name, "safeprintf")) patch_safeprintf = !stricmp(inifile_cleanstr(value), "true"); else if (!stricmp(name, "daodandisplayenum")) @@ -435,13 +443,40 @@ void __cdecl DDrMain(int argc, char* arg SLrDaodan_Patch(); if (patch_cheater) + { DDrPatch_MakeCall(OniExe + 0x000f618f, DDrCheater); + DDrPatch_Int16(OniExe + 0x000deb45, 0x5590); + DDrPatch_MakeCall(OniExe + 0x000deb47, FallingFrames); + DDrPatch_MakeJump(OniExe + 0x0010f021, DDrCheater_LevelLoad); + } init_daodan_gl(); ONiMain(argc, argv); } - +/* +void DDrWrongExe() +{ + switch (MessageBox(NULL, "This version of the Daodan DLL is incompatible with your Oni.exe.\n" + "Click OK for more information. To continue using Oni without the patch, replace the downloaded binkw32.dll with the original.", "Daodan", MB_OKCANCEL | MB_ICONERROR)) + { + case IDOK: + { + STARTUPINFO si; + PROCESS_INFORMATION pi; + FillMemory(&si, 0, sizeof(si)); + FillMemory(&pi, 0, sizeof(pi)); + si.cb = sizeof(si); + if (!CreateProcess(NULL, "cmd /c \"start http://wiki.oni2.net/Daodan_DLL\"", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + MessageBox(NULL, "", "", 0); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + default: + ExitProcess(0); + } +} +*/ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { switch (fdwReason) @@ -450,8 +485,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DDrDLLModule = hinstDLL; DDrONiModule = GetModuleHandle(NULL); - DDrPatch_MakeCall(OniExe + 0x0010fb49, DDrMain); - + if (*(uint32_t*)((void*)OniExe + 0x0011acd0) == 0x09d36852) + DDrPatch_MakeCall(OniExe + 0x0010fb49, DDrMain); + else + ExitProcess(0); break; } return TRUE;