| 9 |  | #include "Daodan_Persistence.h" | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 10 |  | #include "Daodan_BSL.h" | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 11 |  | #include "Daodan_Console.h" | 
 
 
 
 
 
 
 
 
 | 12 | – | #include "Daodan_WindowHack.h" | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 12 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 13 |  | #include "Oni.h" | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 14 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 40 |  | bool patch_disablecmdline = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 41 |  | bool patch_optionsvisible = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 42 |  |  | 
 
 
 
 
 
 
 
 | 43 | + | bool patch_binkplay = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 44 |  | bool patch_safeprintf = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 45 |  | bool patch_daodandisplayenum = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 46 |  | bool patch_usegettickcount = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 47 |  | bool patch_cheatsenabled = true; | 
 
 
 
 
 
 
 
 
 
 
 | 48 | < | bool patch_usedaodangl = false; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 49 | < | bool patch_windowhack = true; | 
 
 
 
 
 
 
 
 
 | 48 | > | bool patch_usedaodangl = true; | 
 
 
 
 
 | 49 | > | bool patch_clipcursor = true; | 
 
 
 
 
 
 
 
 
 
 
 | 50 |  | bool patch_daodaninit = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 51 |  | bool patch_bsl = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 52 |  | bool patch_cheater = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 54 |  | bool opt_usedaodanbsl = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 55 |  | bool opt_border = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 56 |  | bool opt_topmost = false; | 
 
 
 
 
 
 
 
 | 57 | + | bool opt_gamma = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 58 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 59 | < | typedef int (__cdecl *CHINESEPROC)(DWORD WINAPI); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 60 | < | bool patch_chinese = false; | 
 
 
 
 
 
 
 
 
 | 59 | > | typedef int (__cdecl *CHINESEPROC)(DWORD ThreadId); | 
 
 
 
 
 | 60 | > | bool patch_chinese = true; | 
 
 
 
 
 
 
 
 
 
 
 | 61 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 62 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 63 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 64 | < | void ONICALL DDrShowResumeButton(int window, int visibility) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 63 | > | // Hooked WMrSlider_SetRange() in ONiOGU_Options_InitDialog. Disables a gamma | 
 
 
 
 
 | 64 | > | // slider in windowed mode. | 
 
 
 
 
 | 65 | > | static void ONICALL DD_ONiOGU_GammaSlider_SetRange(WMtWindow* window, int min_value, int max_value) | 
 
 
 
 
 | 66 | > | { | 
 
 
 
 
 | 67 | > | WMrWindow_SetEnabled(window, M3gResolutionSwitch && opt_gamma); | 
 
 
 
 
 | 68 | > | WMrSlider_SetRange(window, min_value, max_value); | 
 
 
 
 
 | 69 | > | } | 
 
 
 
 
 | 70 | > |  | 
 
 
 
 
 | 71 | > | void ONICALL DDrShowResumeButton(WMtWindow* window, int visibility) | 
 
 
 
 
 
 
 
 
 
 
 | 72 |  | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 73 |  | if (visibility) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 74 |  | WMrWindow_SetLocation(window, 150, 350); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 77 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 78 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 79 |  | /* Options always visible patch */ | 
 
 
 
 
 
 
 
 
 
 
 | 80 | < | void ONICALL DDrShowOptionsButton(int window, int visibility) | 
 
 
 
 
 
 
 
 
 | 80 | > | void ONICALL DDrShowOptionsButton(WMtWindow* window, int visibility) | 
 
 
 
 
 
 
 
 
 
 
 | 81 |  | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 82 |  | WMrWindow_SetVisible(window, 1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 83 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 262 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 263 |  | if(patch_chinese) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 264 |  | { | 
 
 
 
 
 
 
 
 
 
 
 | 265 | < | DDrStartupMessage("Loading chinese DLL"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 266 | < | HMODULE dll = LoadLibrary("xfhsm_oni.dll"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 267 | < | DWORD err = GetLastError(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 268 | < | DDrStartupMessage(" - Module loading returned error %i", err); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 265 | > | HMODULE dll; | 
 
 
 
 
 | 266 | > | DWORD err; | 
 
 
 
 
 | 267 | > |  | 
 
 
 
 
 | 268 | > | DDrStartupMessage("Loading chinese DLL"); | 
 
 
 
 
 | 269 | > | dll = LoadLibrary("xfhsm_oni.dll"); | 
 
 
 
 
 | 270 | > | err = GetLastError(); | 
 
 
 
 
 
 
 
 
 
 
 | 271 |  | if( dll ) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 272 |  | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 273 |  | void* proc = GetProcAddress( dll, "InstallHook" ); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 275 |  | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 276 |  | ((CHINESEPROC)proc)(GetCurrentThreadId()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 277 |  | } | 
 
 
 
 
 
 
 
 | 278 | + | } else { | 
 
 
 
 
 
 
 
 | 279 | + | char msg[100]; | 
 
 
 
 
 
 
 
 | 280 | + | FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, msg, 100, NULL); | 
 
 
 
 
 
 
 
 | 281 | + | DDrStartupMessage(" - Module loading failed with error %i: %s", err, msg); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 282 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 283 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 284 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 325 |  | DDrPatch_MakeCall((void*)(OniExe + 0x000d2d43), DDrShowResumeButton); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 326 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 327 |  |  | 
 
 
 
 
 
 
 
 | 328 | + | // Fix BinkBufferInit() call in BKrMovie_Play() to use GDI (DIB) blitting | 
 
 
 
 
 
 
 
 | 329 | + | // instead of DirectDraw; patch ONiRunGame to use the same method to play | 
 
 
 
 
 
 
 
 | 330 | + | // outro (ie., BKrMovie_Play() instead of ONrMovie_Play_Hardware() as the | 
 
 
 
 
 
 
 
 | 331 | + | // latter has problems on WINE). | 
 
 
 
 
 
 
 
 | 332 | + | if (patch_binkplay) | 
 
 
 
 
 
 
 
 | 333 | + | { | 
 
 
 
 
 
 
 
 | 334 | + | // push BINKBUFFERAUTO -> push BINKBUFFERDIBSECTION. | 
 
 
 
 
 
 
 
 | 335 | + | DDrPatch_Byte((void*)(OniExe + 0x0008829b + 1), 0x02); | 
 
 
 
 
 
 
 
 | 336 | + | // call ONrMovie_Play_Hardware -> call ONrMovie_Play | 
 
 
 
 
 
 
 
 | 337 | + | DDrPatch_MakeCall((void*)(OniExe + 0x000d496f), ONrMovie_Play); | 
 
 
 
 
 
 
 
 | 338 | + | } | 
 
 
 
 
 
 
 
 | 339 | + |  | 
 
 
 
 
 
 
 
 | 340 | + | // Patch a gamma slider in Options dialog (unconditionally). | 
 
 
 
 
 
 
 
 | 341 | + | // ONiOGU_Options_InitDialog: replace WMrSlider_SetRange(gammaSliderWindow, ...) | 
 
 
 
 
 
 
 
 | 342 | + | // call with our hook function. | 
 
 
 
 
 
 
 
 | 343 | + | DDrPatch_MakeCall((void*)(OniExe + 0x000d262c), (void*)DD_ONiOGU_GammaSlider_SetRange); | 
 
 
 
 
 
 
 
 | 344 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 345 |  | return true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 346 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 347 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 390 |  | opt_sound = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 391 |  | else if (!_stricmp(name, "switch")) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 392 |  | M3gResolutionSwitch = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 | 393 | + | else if (!_stricmp(name, "gamma")) | 
 
 
 
 
 
 
 
 | 394 | + | opt_gamma = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 395 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 396 |  | DDrStartupMessage("unrecognised option \"%s\"", name); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 397 |  | break; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 442 |  | patch_cheatsenabled = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 443 |  | else if (!_stricmp(name, "usedaodangl")) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 444 |  | patch_usedaodangl = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 | 445 | < | else if (!_stricmp(name, "windowhack")) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 446 | < | patch_windowhack = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 | 445 | > | else if (!_stricmp(name, "clipcursor")) | 
 
 
 
 
 | 446 | > | patch_clipcursor = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 | 447 |  | else if (!_stricmp(name, "daodaninit")) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 448 |  | patch_daodaninit = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 449 |  | else if (!_stricmp(name, "bsl")) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 454 |  | patch_newweapon = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 455 |  | else if (!_stricmp(name, "optionsvisible")) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 456 |  | patch_optionsvisible = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 | 457 | + | else if (!_stricmp(name, "binkplay")) | 
 
 
 
 
 
 
 
 | 458 | + | patch_binkplay = !_stricmp(inifile_cleanstr(value), "true"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 459 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 460 |  | DDrStartupMessage("unrecognised patch \"%s\"", name); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 461 |  | break; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 700 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 701 |  | // Daodan device mode enumeration function | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 702 |  | if (patch_daodandisplayenum) | 
 
 
 
 
 
 
 
 
 
 
 | 703 | < | DDrPatch_MakeJump((void*)gl_enumerate_valid_display_modes, (void*)daodan_enumerate_valid_display_modes); | 
 
 
 
 
 
 
 
 
 | 703 | > | DDrPatch_MakeJump((void*)gl_enumerate_valid_display_modes, (void*)DD_GLrEnumerateDisplayModes); | 
 
 
 
 
 
 
 
 
 
 
 | 704 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 705 |  | // Performance patch | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 706 |  | if (patch_usegettickcount) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 714 |  | if (patch_cheatsenabled) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 715 |  | DDrPatch_MakeJump((void*)ONrPersist_GetWonGame, (void*)DDrPersist_GetWonGame); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 716 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 717 | < | // Windowed mode | 
 
 
 
 
 
 
 
 
 | 717 | > | // DaodanGL with windowed mode support. | 
 
 
 
 
 
 
 
 
 
 
 | 718 |  | if (patch_usedaodangl) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 719 |  | { | 
 
 
 
 
 
 
 
 
 
 
 | 720 | < | DDrPatch_NOOP((char*)(OniExe + 0x000032B7), 6); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 721 | < | DDrPatch_MakeCall((void*)(OniExe + 0x000032B7), (void*)LIiP_SetCursorPosHook); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 722 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 723 | < | DDrPatch_NOOP((char*)(OniExe + 0x00003349), 6); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 724 | < | DDrPatch_MakeCall((void*)(OniExe + 0x00003349), (void*)LIiP_SetCursorPosHook); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 725 | < | DDrPatch_MakeJump((void*)ONrPlatform_Initialize, (void*)DDrPlatform_Initialize); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 726 | < | DDrPatch_MakeJump((void*)gl_platform_initialize, (void*)daodangl_platform_initialize); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 727 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 728 | < | // Hacked windowed mode (for when daodangl isn't working properly) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 729 | < | else if (patch_windowhack) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 730 | < | DDrWindowHack_Install(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 720 | > | // LIrPlatform_Mode_Set: GetWindowRect -> GetClientRect. | 
 
 
 
 
 | 721 | > | DDrPatch_NOOP((char*) OniExe + 0x00002dd6, 6); | 
 
 
 
 
 | 722 | > | DDrPatch_MakeCall((char*) OniExe + 0x00002dd6, (void*) GetClientRect); | 
 
 
 
 
 | 723 | > |  | 
 
 
 
 
 | 724 | > | // UUrWindow_GetSize: GetWindowRect -> GetClientRect. | 
 
 
 
 
 | 725 | > | DDrPatch_NOOP((char*) OniExe + 0x0002651c, 6); | 
 
 
 
 
 | 726 | > | DDrPatch_MakeCall((char*) OniExe + 0x0002651c, (void*) GetClientRect); | 
 
 
 
 
 | 727 | > |  | 
 
 
 
 
 | 728 | > | // LIrPlatform_PollInputForAction: fix GetCursorPos call to return client coordinates. | 
 
 
 
 
 | 729 | > | DDrPatch_NOOP((char*) OniExe + 0x000032cc, 6); | 
 
 
 
 
 | 730 | > | DDrPatch_MakeCall((char*) OniExe + 0x000032cc, (void*) DD_GetCursorPos); | 
 
 
 
 
 | 731 | > |  | 
 
 
 
 
 | 732 | > | // LIrPlatform_InputEvent_GetMouse: fix GetCursorPos call to return client coordinates. | 
 
 
 
 
 | 733 | > | DDrPatch_NOOP((char*) OniExe + 0x00002cc2, 6); | 
 
 
 
 
 | 734 | > | DDrPatch_MakeCall((char*) OniExe + 0x00002cc2, (void*) DD_GetCursorPos); | 
 
 
 
 
 | 735 | > |  | 
 
 
 
 
 | 736 | > | // LIrPlatform_PollInputForAction: translate SetCursorPos position to screen coordinates. | 
 
 
 
 
 | 737 | > | DDrPatch_NOOP((char*) OniExe + 0x000032b7, 6); | 
 
 
 
 
 | 738 | > | DDrPatch_MakeCall((char*) OniExe + 0x000032b7, (void*) DD_SetCursorPos); | 
 
 
 
 
 | 739 | > |  | 
 
 
 
 
 | 740 | > | // LIrPlatform_PollInputForAction: translate SetCursorPos position to screen coordinates. | 
 
 
 
 
 | 741 | > | DDrPatch_NOOP((char*) OniExe + 0x00003349, 6); | 
 
 
 
 
 | 742 | > | DDrPatch_MakeCall((char*) OniExe + 0x00003349, (void*) DD_SetCursorPos); | 
 
 
 
 
 | 743 | > |  | 
 
 
 
 
 | 744 | > | // Replace ONrPlatformInitialize. | 
 
 
 
 
 | 745 | > | DDrPatch_MakeJump((void*) ONrPlatform_Initialize, (void*) DD_ONrPlatform_Initialize); | 
 
 
 
 
 | 746 | > |  | 
 
 
 
 
 | 747 | > | // Replace gl_platform_initialize. | 
 
 
 
 
 | 748 | > | DDrPatch_MakeJump((void*) gl_platform_initialize, (void*) DD_GLrPlatform_Initialize); | 
 
 
 
 
 | 749 | > |  | 
 
 
 
 
 | 750 | > | // Replace gl_platform_dispose. | 
 
 
 
 
 | 751 | > | DDrPatch_MakeJump((void *) gl_platform_dispose, (void*) DD_GLrPlatform_Dispose); | 
 
 
 
 
 | 752 | > | } | 
 
 
 
 
 | 753 | > |  | 
 
 
 
 
 | 754 | > | if (patch_clipcursor) | 
 
 
 
 
 | 755 | > | { | 
 
 
 
 
 | 756 | > | // LIrMode_Set: replace LIrPlatform_Mode_Set call with our hook. | 
 
 
 
 
 | 757 | > | DDrPatch_MakeCall((void*)(OniExe + 0x00003f9f), (void*) DD_LIrPlatform_Mode_Set); | 
 
 
 
 
 | 758 | > |  | 
 
 
 
 
 | 759 | > | // LIrMode_Set_Internal: replace LIrPlatform_Mode_Set call with our hook. | 
 
 
 
 
 | 760 | > | DDrPatch_MakeCall((void*)(OniExe + 0x00003fff), (void*) DD_LIrPlatform_Mode_Set); | 
 
 
 
 
 | 761 | > |  | 
 
 
 
 
 | 762 | > | // LIrTermiante: replace LIrPlatform_Terminate call with our hook. | 
 
 
 
 
 | 763 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000004cb8), (void*) DD_LIrPlatform_Terminate); | 
 
 
 
 
 | 764 | > | } | 
 
 
 
 
 | 765 | > |  | 
 
 
 
 
 
 
 
 
 
 
 | 766 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 767 |  | if (patch_daodaninit) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 768 |  | DDrPatch_MakeCall((void*)(OniExe + 0x000d345a), (void*)DDrGame_Init); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 783 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 784 |  | DDrPatch_MakeJump((void*)(OniExe + 0x000245A0), (void*)DDrPrintWarning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 785 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 786 | < | ONiMain(argc, argv); | 
 
 
 
 
 
 
 
 
 | 786 | > | ONiMain(argc, argv); | 
 
 
 
 
 
 
 
 
 
 
 | 787 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 788 |  | /* | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 789 |  | void DDrWrongExe() |