| 84 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 85 |  | void ONICALL DDrGame_Init() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 86 |  | { | 
 
 
 
 
 
 
 
 
 
 
 | 87 | < | ConfigOption_t* co = DDrConfig_GetOptOfType("options.usedaodanbsl", C_BOOL); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 88 | < | if (co->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 | 87 | > | if (DDrConfig_GetOptOfType("patches.usedaodanbsl", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 88 |  | SLrDaodan_Initialize(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 89 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 90 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 191 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 192 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 193 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 194 | < | int DD_Patch_DebugNameTextureInit(short width, short height, int type, int allocated, int flags, char* name, void** output) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 195 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 197 | < | //flags = (1 << 10); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 198 | < | type = 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 199 | < | //DDrPatch_Byte( 0x005EB83C + 3, 0xff ); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 200 | < | DDrPatch_Int32((int*)(OniExe + 0x001EB83C), 0xFF000000 ); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 201 | < | return M3rTextureMap_New(width, height, type, allocated, flags, name, output); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 202 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 203 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 204 | < | short DD_Patch_DebugNameShadeHack( Character* Char ) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 205 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 206 | < | return TSrContext_SetShade(*(void**)(OniExe + 0x001EB844), ONrCharacter_GetHealthShade( Char->Health, Char->MaxHealth )); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 207 | < | //return TSrContext_SetShade(*(void**)0x005EB844, 0xFFFFFFFF); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 208 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 209 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 210 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 211 | < | // Disable UUrPlatform_Initalize/Terminate, this enables the Alt-Tab and the | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 212 | < | // Windows key but has the possible side effect of allowing the screensaver | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 213 | < | // to enable itself in-game. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 214 | < | void DD_Patch_AltTab() | 
 
 
 
 
 
 
 
 
 | 194 | > | // Enables d_regen script command. Instead of one global flag to only regenerate player each char has a flag to enable local regeneration | 
 
 
 
 
 | 195 | > | void DD_Patch_Regeneration() | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 196 |  | { | 
 
 
 
 
 
 
 
 
 
 
 | 197 | < | // 0xC3 = ret, so makes those functions just have a "ret" instruction at their start | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 217 | < | DDrPatch_Byte  ((char*)UUrPlatform_Initialize, 0xC3); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 218 | < | DDrPatch_Byte  ((char*)UUrPlatform_Terminate, 0xC3); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 219 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 220 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 221 | < | // Textures using ARGB8888 can be used | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 222 | < | void DD_Patch_ARGB8888() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 223 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 224 | < | DDrPatch_Byte  ((char*)(OniExe + 0x00135af0), 0x07); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 225 | < | DDrPatch_Byte  ((char*)(OniExe + 0x00135af4), 0x0B); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 226 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 227 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 228 | < | // Fix BinkBufferInit() call in BKrMovie_Play() to use GDI (DIB) blitting | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 229 | < | // instead of DirectDraw; patch ONiRunGame to use the same method to play | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 230 | < | // outro (ie., BKrMovie_Play() instead of ONrMovie_Play_Hardware() as the | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 231 | < | // latter has problems on WINE). | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 232 | < | void DD_Patch_BinkPlay() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 233 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 234 | < | // push BINKBUFFERAUTO -> push BINKBUFFERDIBSECTION. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 235 | < | DDrPatch_Byte((void*)(OniExe + 0x0008829b + 1), 0x02); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 236 | < | // call ONrMovie_Play_Hardware -> call ONrMovie_Play | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 237 | < | DDrPatch_MakeCall((void*)(OniExe + 0x000d496f), ONrMovie_Play); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 238 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 239 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 240 | < | // Enables d_regen (unfinished) and prevents fly-in portraits from being | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 241 | < | // stretched when playing in widescreen resolutions. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 242 | < | void DD_Patch_BSL() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 243 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 244 | < | //Calculating the value of the needed offset is much more reliable when the compiler does it for you. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 245 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 246 | < | //TODO: fix moonshadow. | 
 
 
 
 
 
 
 
 
 | 197 | > | // In: WPrInventory_Update | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 198 |  | Character * Chr = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 199 |  | int NoPath = (int)&(Chr[0].RegenHax) & 0x000000FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 200 |  | const unsigned char regen_patch[] = | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 201 |  | {0x90, 0x90, 0x90, 0x90, 0x90,                          // mov    al, _WPgRegenerationCheat     -> NOOP | 
 
 
 
 
 
 
 
 
 
 
 | 202 | < | 0x90, 0x90,                                                                     // test   al, al                                        -> NOOP | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 203 | < | 0x90, 0x90,                                                                     // jz     short loc_51BB98                      -> NOOP | 
 
 
 
 
 
 
 
 
 | 202 | > | 0x90, 0x90,                                             // test   al, al                        -> NOOP | 
 
 
 
 
 | 203 | > | 0x90, 0x90,                                             // jz     short loc_51BB98                      -> NOOP | 
 
 
 
 
 
 
 
 
 
 
 | 204 |  | 0x8B, 0x86, (char)NoPath, 0x01, 0x00, 0x00, // mov     eax, [esi+Character.field_1E8] | 
 
 
 
 
 
 
 
 
 
 
 | 205 | < | //      -> mov     eax, [esi+Character.RegenHax] | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 206 | < | 0x85, 0xC0,                                                                     // test eax, eax | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 207 | < | 0x74, 0x21                                                                      // jnz 0x21 -> jz 0x21 | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 208 | < | }; | 
 
 
 
 
 
 
 
 
 | 205 | > | //      -> mov     eax, [esi+Character.RegenHax] | 
 
 
 
 
 | 206 | > | 0x85, 0xC0,                                             // test eax, eax | 
 
 
 
 
 | 207 | > | 0x74, 0x21                                              // jnz 0x21 -> jz 0x21 | 
 
 
 
 
 | 208 | > | }; | 
 
 
 
 
 
 
 
 
 
 
 | 209 |  | DDrPatch_Const((char*)(OniExe + 0x0011BB64), regen_patch); | 
 
 
 
 
 
 
 
 
 | 259 | – |  | 
 
 
 
 
 
 
 
 
 | 260 | – | // Patches for existing BSL functions | 
 
 
 
 
 
 
 
 
 | 261 | – | SLrDaodan_Patch(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 210 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 211 |  |  | 
 
 
 
 
 
 
 
 
 | 264 | – | // Adds new cheat codes if cheattable is also enabled | 
 
 
 
 
 
 
 
 
 | 265 | – | void DD_Patch_Cheater() | 
 
 
 
 
 
 
 
 
 | 266 | – | { | 
 
 
 
 
 
 
 
 
 | 267 | – | DDrPatch_MakeCall((void*)(OniExe + 0x000f618f), (void*)DDrCheater); | 
 
 
 
 
 
 
 
 
 | 268 | – | DDrPatch_Int16((short*)(OniExe + 0x000deb45), 0x5590); | 
 
 
 
 
 
 
 
 
 | 269 | – | #if 1 | 
 
 
 
 
 
 
 
 
 | 270 | – | DDrPatch_MakeCall((void*)(OniExe + 0x000deb47), (void*)FallingFrames); | 
 
 
 
 
 
 
 
 
 | 271 | – | #endif | 
 
 
 
 
 
 
 
 
 | 272 | – | DDrPatch_MakeJump((void*)(OniExe + 0x0010f021), (void*)DDrCheater_LevelLoad); | 
 
 
 
 
 
 
 
 
 | 273 | – | } | 
 
 
 
 
 
 
 
 
 | 274 | – |  | 
 
 
 
 
 
 
 
 
 | 275 | – | // Cheats always enabled | 
 
 
 
 
 
 
 
 
 | 276 | – | void DD_Patch_CheatsEnabled() | 
 
 
 
 
 
 
 
 
 | 277 | – | { | 
 
 
 
 
 
 
 
 
 | 278 | – | DDrPatch_MakeJump((void*)ONrPersist_GetWonGame, (void*)DDrPersist_GetWonGame); | 
 
 
 
 
 
 
 
 
 | 279 | – | } | 
 
 
 
 
 
 
 
 
 | 280 | – |  | 
 
 
 
 
 
 
 
 
 | 281 | – | // Use Daodan's own cheattable | 
 
 
 
 
 
 
 
 
 | 282 | – | void DD_Patch_CheatTable() | 
 
 
 
 
 
 
 
 
 | 283 | – | { | 
 
 
 
 
 
 
 
 
 | 284 | – | DDrPatch_Int32 ((int*)(OniExe + 0x000f616b), (int)&DDr_CheatTable[0].name); | 
 
 
 
 
 
 
 
 
 | 285 | – | DDrPatch_Int32 ((int*)(OniExe + 0x000f617a), (int)&DDr_CheatTable[0].message_on); | 
 
 
 
 
 
 
 
 
 | 286 | – | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 212 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 213 |  | // Load chinese font DLL if available | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 214 |  | void DD_Patch_Chinese() | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 236 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 237 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 238 |  |  | 
 
 
 
 
 
 
 
 
 | 314 | – | // Limit cursor to Oni's window | 
 
 
 
 
 
 
 
 
 | 315 | – | void DD_Patch_ClipCursor() | 
 
 
 
 
 
 
 
 
 | 316 | – | { | 
 
 
 
 
 
 
 
 
 | 317 | – | // LIrMode_Set: replace LIrPlatform_Mode_Set call with our hook. | 
 
 
 
 
 
 
 
 
 | 318 | – | DDrPatch_MakeCall((void*)(OniExe + 0x00003f9f), (void*) DD_LIrPlatform_Mode_Set); | 
 
 
 
 
 
 
 
 
 | 319 | – |  | 
 
 
 
 
 
 
 
 
 | 320 | – | // LIrMode_Set_Internal: replace LIrPlatform_Mode_Set call with our hook. | 
 
 
 
 
 
 
 
 
 | 321 | – | DDrPatch_MakeCall((void*)(OniExe + 0x00003fff), (void*) DD_LIrPlatform_Mode_Set); | 
 
 
 
 
 
 
 
 
 | 322 | – |  | 
 
 
 
 
 
 
 
 
 | 323 | – | // LIrTermiante: replace LIrPlatform_Terminate call with our hook. | 
 
 
 
 
 
 
 
 
 | 324 | – | DDrPatch_MakeCall((void*)(OniExe + 0x000004cb8), (void*) DD_LIrPlatform_Terminate); | 
 
 
 
 
 
 
 
 
 | 325 | – | } | 
 
 
 
 
 
 
 
 
 | 326 | – |  | 
 
 
 
 
 
 
 
 
 | 327 | – | // Disables weapon cooldown exploit | 
 
 
 
 
 
 
 
 
 | 328 | – | void DD_Patch_CooldownTimer() | 
 
 
 
 
 
 
 
 
 | 329 | – | { | 
 
 
 
 
 
 
 
 
 | 330 | – | const unsigned char cooldown_patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 }; | 
 
 
 
 
 
 
 
 
 | 331 | – | DDrPatch_Const ((char*)(OniExe + 0x0011a825), cooldown_patch); | 
 
 
 
 
 
 
 
 
 | 332 | – | } | 
 
 
 
 
 
 
 
 
 | 333 | – |  | 
 
 
 
 
 
 
 
 
 | 334 | – | // Daodan device mode enumeration function | 
 
 
 
 
 
 
 
 
 | 335 | – | void DD_Patch_DaodanDisplayEnum() | 
 
 
 
 
 
 
 
 
 | 336 | – | { | 
 
 
 
 
 
 
 
 
 | 337 | – | DDrPatch_MakeJump((void*)gl_enumerate_valid_display_modes, (void*)DD_GLrEnumerateDisplayModes); | 
 
 
 
 
 
 
 
 
 | 338 | – | } | 
 
 
 
 
 
 
 
 
 | 339 | – |  | 
 
 
 
 
 
 
 
 
 | 340 | – | // Adds new BSL functions | 
 
 
 
 
 
 
 
 
 | 341 | – | void DD_Patch_DaodanInit() | 
 
 
 
 
 
 
 
 
 | 342 | – | { | 
 
 
 
 
 
 
 
 
 | 343 | – | DDrPatch_MakeCall((void*)(OniExe + 0x000d345a), (void*)DDrGame_Init); | 
 
 
 
 
 
 
 
 
 | 344 | – | } | 
 
 
 
 
 
 
 
 
 | 345 | – |  | 
 
 
 
 
 
 
 
 
 | 346 | – | // Forced DirectInput (for Windows NT) | 
 
 
 
 
 
 
 
 
 | 347 | – | void DD_Patch_DirectInput() | 
 
 
 
 
 
 
 
 
 | 348 | – | { | 
 
 
 
 
 
 
 
 
 | 349 | – | DDrPatch_Byte((char*)(OniExe + 0x00002e6d), 0xeb); | 
 
 
 
 
 
 
 
 
 | 350 | – | } | 
 
 
 
 
 
 
 
 
 | 351 | – |  | 
 
 
 
 
 
 
 
 
 | 352 | – | // Disable Oni's command line parser so it doesn't interfere with ours | 
 
 
 
 
 
 
 
 
 | 353 | – | void DD_Patch_DisableCmdLine() | 
 
 
 
 
 
 
 
 
 | 354 | – | { | 
 
 
 
 
 
 
 
 
 | 355 | – | // Replace start of OniParseCommandLine with XOR ax,ax; RET | 
 
 
 
 
 
 
 
 
 | 356 | – | //      DDrPatch_Int32 ((int*)(OniExe + 0x000d3570), 0xc3c03366); | 
 
 
 
 
 
 
 
 
 | 357 | – | // Replace start of OniParseCommandLine with XOR eax,eax; RET | 
 
 
 
 
 
 
 
 
 | 358 | – | DDrPatch_Int32 ((int*)(OniExe + 0x000d3570), 0x00c3c033); | 
 
 
 
 
 
 
 
 
 | 359 | – | } | 
 
 
 
 
 
 
 
 
 | 360 | – |  | 
 
 
 
 
 
 
 
 
 | 361 | – | // Font texture cache doubled | 
 
 
 
 
 
 
 
 
 | 362 | – | void DD_Patch_FontTextureCache() | 
 
 
 
 
 
 
 
 
 | 363 | – | { | 
 
 
 
 
 
 
 
 
 | 364 | – | DDrPatch_Byte((char*)(OniExe + 0x00020ea7), 0x20); | 
 
 
 
 
 
 
 
 
 | 365 | – | DDrPatch_Byte((char*)(OniExe + 0x00020f4a), 0x40); | 
 
 
 
 
 
 
 
 
 | 366 | – | } | 
 
 
 
 
 
 
 
 
 | 367 | – |  | 
 
 
 
 
 
 
 
 
 | 368 | – | // Disable Oni's internal CLrGetCommandLine function (to eventually replace it with our own) | 
 
 
 
 
 
 
 
 
 | 369 | – | void DD_Patch_GetCmdLine() | 
 
 
 
 
 
 
 
 
 | 370 | – | { | 
 
 
 
 
 
 
 
 
 | 371 | – | DDrPatch_NOOP  ((char*)(OniExe + 0x000d3280), 51); | 
 
 
 
 
 
 
 
 
 | 372 | – | } | 
 
 
 
 
 
 
 
 
 | 373 | – |  | 
 
 
 
 
 
 
 
 
 | 374 | – | // Allow HD screens with resolution < 1024*768 | 
 
 
 
 
 
 
 
 
 | 375 | – | void DD_Patch_HDScreens_LowRes() | 
 
 
 
 
 
 
 
 
 | 376 | – | { | 
 
 
 
 
 
 
 
 
 | 377 | – | DDrPatch_MakeJump((void*)M3rDraw_BigBitmap, (void*)DD_M3rDraw_BigBitmap); | 
 
 
 
 
 
 
 
 
 | 378 | – | } | 
 
 
 
 
 
 
 
 
 | 379 | – |  | 
 
 
 
 
 
 
 
 
 | 380 | – | void DD_Patch_HighresConsole() { | 
 
 
 
 
 
 
 
 
 | 381 | – | Oni_COrTextArea_Resize = DDrPatch_MakeDetour((void*)COrTextArea_Resize, (void*)DD_COrTextArea_Resize); | 
 
 
 
 
 
 
 
 
 | 382 | – | } | 
 
 
 
 
 
 
 
 
 | 383 | – |  | 
 
 
 
 
 
 
 
 
 | 384 | – | // Hackish fix for Konoko not kicking guns | 
 
 
 
 
 
 
 
 
 | 385 | – | // Don't use this, it breaks stairs. | 
 
 
 
 
 
 
 
 
 | 386 | – | void DD_Patch_KickGuns() | 
 
 
 
 
 
 
 
 
 | 387 | – | { | 
 
 
 
 
 
 
 
 
 | 388 | – | const unsigned char kickgun_patch[] = { 0x00, 0x05, 0x00, 0x00, 0x00, 0xC7, 0x05, 0x1C, 0xC9, 0x5E, 0x00, 0x70, 0xB8, 0x43, 0x00, 0xC7, 0x05, 0x20, 0xC9, 0x5E, 0x00, 0x20, 0xBE, 0x43 }; | 
 
 
 
 
 
 
 
 
 | 389 | – | DDrPatch_Const ((char*)(OniExe + 0x000dc420), kickgun_patch); | 
 
 
 
 
 
 
 
 
 | 390 | – | } | 
 
 
 
 
 
 
 
 
 | 391 | – |  | 
 
 
 
 
 
 
 
 
 | 392 | – | // Disable loading the vtuneapi.dll | 
 
 
 
 
 
 
 
 
 | 393 | – | void DD_Patch_KillVTune() | 
 
 
 
 
 
 
 
 
 | 394 | – | { | 
 
 
 
 
 
 
 
 
 | 395 | – | DDrPatch_Byte  ((char*)(OniExe + 0x00026340), 0xC3); | 
 
 
 
 
 
 
 
 
 | 396 | – | } | 
 
 
 
 
 
 
 
 
 | 397 | – |  | 
 
 
 
 
 
 
 
 
 | 398 | – | // Now supports textures up to 512x512 | 
 
 
 
 
 
 
 
 
 | 399 | – | void DD_Patch_LargeTextures() | 
 
 
 
 
 
 
 
 
 | 400 | – | { | 
 
 
 
 
 
 
 
 
 | 401 | – | DDrPatch_Byte  ((char*)(OniExe + 0x00005251), 0x10); | 
 
 
 
 
 
 
 
 
 | 402 | – | } | 
 
 
 
 
 
 
 
 
 | 403 | – |  | 
 
 
 
 
 
 
 
 
 | 404 | – | // Non-"_Final" levels are now valid | 
 
 
 
 
 
 
 
 
 | 405 | – | void DD_Patch_LevelPlugins() | 
 
 
 
 
 
 
 
 
 | 406 | – | { | 
 
 
 
 
 
 
 
 
 | 407 | – | DDrPatch_Byte  ((char*)(OniExe + 0x000206a8), 0x01); | 
 
 
 
 
 
 
 
 
 | 408 | – | } | 
 
 
 
 
 
 
 
 
 | 409 | – |  | 
 
 
 
 
 
 
 
 
 | 410 | – | // Weapon on ground shown with name and magazine contents | 
 
 
 
 
 
 
 
 
 | 411 | – | void DD_Patch_NewWeap() | 
 
 
 
 
 
 
 
 
 | 412 | – | { | 
 
 
 
 
 
 
 
 
 | 413 | – | //Makes it always say "Received weapon_name." | 
 
 
 
 
 
 
 
 
 | 414 | – | //Needs check for loc_4DFC66 | 
 
 
 
 
 
 
 
 
 | 415 | – | //DDrPatch_NOOP((char*)(OniExe + 0x000E4DF8),2); | 
 
 
 
 
 
 
 
 
 | 416 | – |  | 
 
 
 
 
 
 
 
 
 | 417 | – | //Adds Weapon name and ammo meter to pickup autoprompt | 
 
 
 
 
 
 
 
 
 | 418 | – | DDrPatch_NOOP((char*)(OniExe + 0x000FAC73), 9); | 
 
 
 
 
 
 
 
 
 | 419 | – | DDrPatch_NOOP((char*)(OniExe + 0x000FAC80), 5); | 
 
 
 
 
 
 
 
 
 | 420 | – | DDrPatch_MakeCall((void*)(OniExe + 0xFAC85), (void*)DDrWeapon2Message); | 
 
 
 
 
 
 
 
 
 | 421 | – |  | 
 
 
 
 
 
 
 
 
 | 422 | – | //Moves location of colors | 
 
 
 
 
 
 
 
 
 | 423 | – | //DDrPatch_Int32((int*)(OniExe + 0x0002E3D5), (int)&DDrDSayColors ); | 
 
 
 
 
 
 
 
 
 | 424 | – | //DDrPatch_Int32((int*)(OniExe + 0x0002E3DA), (int)&DDrDSayColors ); | 
 
 
 
 
 
 
 
 
 | 425 | – | } | 
 
 
 
 
 
 
 
 
 | 426 | – |  | 
 
 
 
 
 
 
 
 
 | 427 | – | // Disable Multi-byte character awareness patch (multiple language support) | 
 
 
 
 
 
 
 
 
 | 428 | – | void DD_Patch_NoMultiByte() | 
 
 
 
 
 
 
 
 
 | 429 | – | { | 
 
 
 
 
 
 
 
 
 | 430 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002d8f8), 0xeb); | 
 
 
 
 
 
 
 
 
 | 431 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002d9ad), 0xeb); | 
 
 
 
 
 
 
 
 
 | 432 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002dbe2), 0xeb); | 
 
 
 
 
 
 
 
 
 | 433 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002dec3), 0xeb); | 
 
 
 
 
 
 
 
 
 | 434 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e2ab), 0xeb); | 
 
 
 
 
 
 
 
 
 | 435 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e2c4), 0xeb); | 
 
 
 
 
 
 
 
 
 | 436 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e379), 0xeb); | 
 
 
 
 
 
 
 
 
 | 437 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e48c), 0xeb); | 
 
 
 
 
 
 
 
 
 | 438 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e4d0), 0xeb); | 
 
 
 
 
 
 
 
 
 | 439 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e4f4), 0xeb); | 
 
 
 
 
 
 
 
 
 | 440 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e646), 0xeb); | 
 
 
 
 
 
 
 
 
 | 441 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e695), 0xeb); | 
 
 
 
 
 
 
 
 
 | 442 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e944), 0xeb); | 
 
 
 
 
 
 
 
 
 | 443 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e95d), 0xeb); | 
 
 
 
 
 
 
 
 
 | 444 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e98e), 0xeb); | 
 
 
 
 
 
 
 
 
 | 445 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0002e9dc), 0xeb); | 
 
 
 
 
 
 
 
 
 | 446 | – | } | 
 
 
 
 
 
 
 
 
 | 447 | – |  | 
 
 
 
 
 
 
 
 
 | 448 | – | // Fix options not visible in main menu when a game was started | 
 
 
 
 
 
 
 
 
 | 449 | – | void DD_Patch_OptionsVisible() | 
 
 
 
 
 
 
 
 
 | 450 | – | { | 
 
 
 
 
 
 
 
 
 | 451 | – | DDrPatch_MakeCall((void*)(OniExe + 0x000d2d2d), DDrShowOptionsButton); | 
 
 
 
 
 
 
 
 
 | 452 | – | DDrPatch_MakeCall((void*)(OniExe + 0x000d2d43), DDrShowResumeButton); | 
 
 
 
 
 
 
 
 
 | 453 | – | } | 
 
 
 
 
 
 
 
 
 | 454 | – |  | 
 
 
 
 
 
 
 
 
 | 455 | – | // Unlocks particle action disabling/enabling bits for all events. (Will be | 
 
 
 
 
 
 
 
 
 | 456 | – | // controlled by a command line switch when I figure out how to do that without | 
 
 
 
 
 
 
 
 
 | 457 | – | // Win32 hacks.) | 
 
 
 
 
 
 
 
 
 | 458 | – | void DD_Patch_ParticleDisableBit() | 
 
 
 
 
 
 
 
 
 | 459 | – | { | 
 
 
 
 
 
 
 
 
 | 460 | – | DDrPatch_Int16 ((short*)(OniExe + 0x001b184), 0x9090); | 
 
 
 
 
 
 
 
 
 | 461 | – | } | 
 
 
 
 
 
 
 
 
 | 462 | – |  | 
 
 
 
 
 
 
 
 
 | 463 | – | // Pathfinding grid cache size x8 | 
 
 
 
 
 
 
 
 
 | 464 | – | void DD_Patch_PathFinding() | 
 
 
 
 
 
 
 
 
 | 465 | – | { | 
 
 
 
 
 
 
 
 
 | 466 | – | const unsigned char pathfinding[2] = {0x90 , 0xE9 }; | 
 
 
 
 
 
 
 
 
 | 467 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0010b03b), 0x20); | 
 
 
 
 
 
 
 
 
 | 468 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0010b04c), 0x20); | 
 
 
 
 
 
 
 
 
 | 469 | – |  | 
 
 
 
 
 
 
 
 
 | 470 | – | //other stuff | 
 
 
 
 
 
 
 
 
 | 471 | – | DDrPatch_Const((char*)(OniExe + 0x00040789), pathfinding); | 
 
 
 
 
 
 
 
 
 | 472 | – | } | 
 
 
 
 
 
 
 
 
 | 473 | – |  | 
 
 
 
 
 
 
 
 
 | 474 | – | // Projectile awareness fixed | 
 
 
 
 
 
 
 
 
 | 475 | – | void DD_Patch_ProjAware() | 
 
 
 
 
 
 
 
 
 | 476 | – | { | 
 
 
 
 
 
 
 
 
 | 477 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0009c07c), 0x6c); | 
 
 
 
 
 
 
 
 
 | 478 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0009c080), 0x70); | 
 
 
 
 
 
 
 
 
 | 479 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0009c084), 0x74); | 
 
 
 
 
 
 
 
 
 | 480 | – | DDrPatch_Byte  ((char*)(OniExe + 0x0009c110), 0x6c); | 
 
 
 
 
 
 
 
 
 | 481 | – | } | 
 
 
 
 
 
 
 
 
 | 482 | – |  | 
 
 
 
 
 
 
 
 
 | 483 | – | // Safe startup message printer | 
 
 
 
 
 
 
 
 
 | 484 | – | void DD_Patch_SafePrintf() | 
 
 
 
 
 
 
 
 
 | 485 | – | { | 
 
 
 
 
 
 
 
 
 | 486 | – | DDrPatch_MakeJump((void*)UUrStartupMessage, (void*)DDrStartupMessage); | 
 
 
 
 
 
 
 
 
 | 487 | – | } | 
 
 
 
 
 
 
 
 
 | 488 | – |  | 
 
 
 
 
 
 
 
 
 | 489 | – | // Show all (also enemies') lasersights | 
 
 
 
 
 
 
 
 
 | 490 | – | void DD_Patch_ShowAllLasersights() | 
 
 
 
 
 
 
 
 
 | 491 | – | { | 
 
 
 
 
 
 
 
 
 | 492 | – | DDrPatch_NOOP((char*)(OniExe + 0x000E1957), 6 ); | 
 
 
 
 
 
 
 
 
 | 493 | – | } | 
 
 
 
 
 
 
 
 
 | 494 | – |  | 
 
 
 
 
 
 
 
 
 | 495 | – | void DD_Patch_ShowTriggerVolumes() | 
 
 
 
 
 
 
 
 
 | 496 | – | { | 
 
 
 
 
 
 
 
 
 | 497 | – | Oni_ONrMechanics_Register = DDrPatch_MakeDetour((void*)ONrMechanics_Register, (void*)DD_ONrMechanics_Register); | 
 
 
 
 
 
 
 
 
 | 498 | – | Oni_ONrGameState_HandleUtilityInput = DDrPatch_MakeDetour((void*)ONrGameState_HandleUtilityInput, (void*)DD_ONrGameState_HandleUtilityInput); | 
 
 
 
 
 
 
 
 
 | 499 | – | } | 
 
 
 
 
 
 
 
 
 | 500 | – |  | 
 
 
 
 
 
 
 
 
 | 501 | – | // Experiment with allowing enemies to be thrown over railings | 
 
 
 
 
 
 
 
 
 | 502 | – | void DD_Patch_Throwtest() | 
 
 
 
 
 
 
 
 
 | 503 | – | { | 
 
 
 
 
 
 
 
 
 | 504 | – | const unsigned char throwtest_patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 }; | 
 
 
 
 
 
 
 
 
 | 505 | – | DDrPatch_Const((char*)(OniExe + 0x000dc190), throwtest_patch); | 
 
 
 
 
 
 
 
 
 | 506 | – | } | 
 
 
 
 
 
 
 
 
 | 507 | – |  | 
 
 
 
 
 
 
 
 
 | 508 | – | // DaodanGL with windowed mode support | 
 
 
 
 
 
 
 
 
 | 509 | – | void DD_Patch_UseDaodanGL() | 
 
 
 
 
 
 
 
 
 | 510 | – | { | 
 
 
 
 
 
 
 
 
 | 511 | – | // LIrPlatform_Mode_Set: GetWindowRect -> GetClientRect. | 
 
 
 
 
 
 
 
 
 | 512 | – | DDrPatch_NOOP((char*) OniExe + 0x00002dd6, 6); | 
 
 
 
 
 
 
 
 
 | 513 | – | DDrPatch_MakeCall((char*) OniExe + 0x00002dd6, (void*) GetClientRect); | 
 
 
 
 
 
 
 
 
 | 514 | – |  | 
 
 
 
 
 
 
 
 
 | 515 | – | // UUrWindow_GetSize: GetWindowRect -> GetClientRect. | 
 
 
 
 
 
 
 
 
 | 516 | – | DDrPatch_NOOP((char*) OniExe + 0x0002651c, 6); | 
 
 
 
 
 
 
 
 
 | 517 | – | DDrPatch_MakeCall((char*) OniExe + 0x0002651c, (void*) GetClientRect); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 239 |  |  | 
 
 
 
 
 
 
 
 
 | 519 | – | // LIrPlatform_PollInputForAction: fix GetCursorPos call to return client coordinates. | 
 
 
 
 
 
 
 
 
 | 520 | – | DDrPatch_NOOP((char*) OniExe + 0x000032cc, 6); | 
 
 
 
 
 
 
 
 
 | 521 | – | DDrPatch_MakeCall((char*) OniExe + 0x000032cc, (void*) DD_GetCursorPos); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 240 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 241 | < | // LIrPlatform_InputEvent_GetMouse: fix GetCursorPos call to return client coordinates. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 524 | < | DDrPatch_NOOP((char*) OniExe + 0x00002cc2, 6); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 525 | < | DDrPatch_MakeCall((char*) OniExe + 0x00002cc2, (void*) DD_GetCursorPos); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 526 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 527 | < | // LIrPlatform_PollInputForAction: translate SetCursorPos position to screen coordinates. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 528 | < | DDrPatch_NOOP((char*) OniExe + 0x000032b7, 6); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 529 | < | DDrPatch_MakeCall((char*) OniExe + 0x000032b7, (void*) DD_SetCursorPos); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 530 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 531 | < | // LIrPlatform_PollInputForAction: translate SetCursorPos position to screen coordinates. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 532 | < | DDrPatch_NOOP((char*) OniExe + 0x00003349, 6); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 533 | < | DDrPatch_MakeCall((char*) OniExe + 0x00003349, (void*) DD_SetCursorPos); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 534 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 535 | < | // Replace ONrPlatformInitialize. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 536 | < | DDrPatch_MakeJump((void*) ONrPlatform_Initialize, (void*) DD_ONrPlatform_Initialize); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 537 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 538 | < | // Replace gl_platform_initialize. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 539 | < | DDrPatch_MakeJump((void*) gl_platform_initialize, (void*) DD_GLrPlatform_Initialize); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 540 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 541 | < | // Replace gl_platform_dispose. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 542 | < | DDrPatch_MakeJump((void *) gl_platform_dispose, (void*) DD_GLrPlatform_Dispose); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 543 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 544 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 545 | < | // Performance patch | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 546 | < | void DD_Patch_UseGetTickCount() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 547 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 548 | < | DDrPatch_MakeJump((void*)UUrMachineTime_High, (void*)DDrMachineTime_High); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 549 | < | DDrPatch_MakeJump((void*)UUrMachineTime_High_Frequency, (void*)DDrMachineTime_High_Frequency); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 550 | < | DDrPatch_MakeJump((void*)UUrMachineTime_Sixtieths, (void*)DDrMachineTime_Sixtieths); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 551 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 552 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 553 | < | // Adds working function for existing BSL command wp_fadetime, sets fade time to 4800 | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 554 | < | void DD_Patch_WpFadetime() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 555 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 556 | < | // Makes wp_fadetime actually have a function | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 557 | < | const unsigned char fadetime_patch[] = { 0x66, 0x8B, 0x1D, 0xC4, 0x7D, 0x62, 0x00, 0x66, 0x89, 0x5E, 0x46, 0x5B, 0x5E, 0x83, 0xC4, 0x14, 0xC3 }; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 558 | < | DDrPatch_Const ((char*)(OniExe + 0x0011a889), fadetime_patch); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 559 | < | DDrPatch_Byte  ((char*)(OniExe + 0x0011a560), 0x31); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 560 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 561 | < | // Sets the fadetime to 4800 by default | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 562 | < | DDrPatch_Int16 ((short*)(OniExe + 0x0011ab0e), 0x12c0); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 563 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 564 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 565 | < | // Disable gamma slider in options in windowed mode | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 566 | < | void DD_Patch_GammaSlider() | 
 
 
 
 
 
 
 
 
 | 241 | > | int DD_Patch_DebugNameTextureInit(short width, short height, int type, int allocated, int flags, char* name, void** output) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 242 |  | { | 
 
 
 
 
 
 
 
 
 
 
 | 243 | < | DDrPatch_MakeCall((void*)(OniExe + 0x000d262c), (void*)DD_ONiOGU_GammaSlider_SetRange); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 243 | > | //flags = (1 << 10); | 
 
 
 
 
 | 244 | > | type = 1; | 
 
 
 
 
 | 245 | > | //DDrPatch_Byte( 0x005EB83C + 3, 0xff ); | 
 
 
 
 
 | 246 | > | DDrPatch_Int32((int*)(OniExe + 0x001EB83C), 0xFF000000 ); | 
 
 
 
 
 | 247 | > | return M3rTextureMap_New(width, height, type, allocated, flags, name, output); | 
 
 
 
 
 
 
 
 
 
 
 | 248 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 249 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 250 | < | // Fix the warning print method | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 572 | < | void DD_Patch_PrintWarning() | 
 
 
 
 
 
 
 
 
 | 250 | > | short DD_Patch_DebugNameShadeHack( Character* Char ) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 251 |  | { | 
 
 
 
 
 
 
 
 
 
 
 | 252 | < | DDrPatch_MakeJump((void*)(OniExe + 0x000245A0), (void*)DDrPrintWarning); | 
 
 
 
 
 
 
 
 
 | 252 | > | return TSrContext_SetShade(*(void**)(OniExe + 0x001EB844), ONrCharacter_GetHealthShade( Char->Health, Char->MaxHealth )); | 
 
 
 
 
 
 
 
 
 
 
 | 253 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 254 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 255 |  | //Fix crappy ai2_shownames | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 276 |  | */ | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 277 |  | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 278 |  |  | 
 
 
 
 
 
 
 
 
 | 601 | – | /* | 
 
 
 
 
 
 
 
 
 | 602 | – | void DD_Patch_ShowTriggerVolumes() | 
 
 
 
 
 
 
 
 
 | 603 | – | { | 
 
 
 
 
 
 
 
 
 | 604 | – | DDrPatch_Int32((int*)(OniExe + 0x000cc9bb+4), (uint32_t)DD_OBJiTriggerVolume_Draw); | 
 
 
 
 
 
 
 
 
 | 605 | – | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 279 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 280 | < | void DD_Patch_ShowFlags() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 281 | < | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 282 | < | DDrPatch_Int32((int*)(OniExe + 0x000c4ed4+4), (uint32_t)DD_OBJiFlag_Draw); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 283 | < | } | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 284 | < | */ | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 280 | > |  | 
 
 
 
 
 | 281 | > |  | 
 
 
 
 
 | 282 | > |  | 
 
 
 
 
 | 283 | > |  | 
 
 
 
 
 | 284 | > |  | 
 
 
 
 
 | 285 | > |  | 
 
 
 
 
 
 
 
 
 
 
 | 286 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 287 |  | bool DD_Patch_Init() | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 288 |  | { | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 289 |  | STARTUPMESSAGE("Patching engine", 0); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 290 |  |  | 
 
 
 
 
 
 
 
 | 291 | + | // Disable UUrPlatform_Initalize/Terminate, this enables the Alt-Tab and the | 
 
 
 
 
 
 
 
 | 292 | + | // Windows key but has the possible side effect of allowing the screensaver | 
 
 
 
 
 
 
 
 | 293 | + | // to enable itself in-game. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 294 |  | if (DDrConfig_GetOptOfType("patches.alttab", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 295 | < | DD_Patch_AltTab(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 295 | > | { | 
 
 
 
 
 | 296 | > | // 0xC3 = ret, so makes those functions just have a "ret" instruction at their start | 
 
 
 
 
 | 297 | > | DDrPatch_Byte((char*)UUrPlatform_Initialize, 0xC3); | 
 
 
 
 
 | 298 | > | DDrPatch_Byte((char*)UUrPlatform_Terminate, 0xC3); | 
 
 
 
 
 | 299 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 300 |  |  | 
 
 
 
 
 
 
 
 | 301 | + | // Textures using ARGB8888 can be used | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 302 |  | if (DDrConfig_GetOptOfType("patches.argb8888", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 303 | < | DD_Patch_ARGB8888(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 303 | > | { | 
 
 
 
 
 | 304 | > | // Update conversion lookups in IMgConvertPixelType_List | 
 
 
 
 
 | 305 | > | DDrPatch_Byte((char*)(OniExe + 0x00135af0), 0x07); | 
 
 
 
 
 | 306 | > | DDrPatch_Byte((char*)(OniExe + 0x00135af4), 0x0B); | 
 
 
 
 
 | 307 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 308 |  |  | 
 
 
 
 
 
 
 
 | 309 | + | // Fix BinkBufferInit() call in BKrMovie_Play() to use GDI (DIB) blitting | 
 
 
 
 
 
 
 
 | 310 | + | // instead of DirectDraw; patch ONiRunGame to use the same method to play | 
 
 
 
 
 
 
 
 | 311 | + | // outro (ie., BKrMovie_Play() instead of ONrMovie_Play_Hardware() as the | 
 
 
 
 
 
 
 
 | 312 | + | // latter has problems on WINE). | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 313 |  | if (DDrConfig_GetOptOfType("patches.binkplay", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 314 | < | DD_Patch_BinkPlay(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 315 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 316 | < | if (DDrConfig_GetOptOfType("patches.bsl", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 317 | < | DD_Patch_BSL(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 314 | > | { | 
 
 
 
 
 | 315 | > | // push BINKBUFFERAUTO -> push BINKBUFFERDIBSECTION. | 
 
 
 
 
 | 316 | > | DDrPatch_Byte((void*)(OniExe + 0x0008829b + 1), 0x02); | 
 
 
 
 
 | 317 | > | // call ONrMovie_Play_Hardware -> call ONrMovie_Play | 
 
 
 
 
 | 318 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000d496f), ONrMovie_Play); | 
 
 
 
 
 | 319 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 320 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 321 | < | if (DDrConfig_GetOptOfType("patches.cheater", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 322 | < | DD_Patch_Cheater(); | 
 
 
 
 
 
 
 
 
 | 321 | > | if (DDrConfig_GetOptOfType("patches.d_regen", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 | 322 | > | DD_Patch_Regeneration(); | 
 
 
 
 
 
 
 
 
 
 
 | 323 |  |  | 
 
 
 
 
 
 
 
 | 324 | + | // Cheats always enabled | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 325 |  | if (DDrConfig_GetOptOfType("patches.cheatsenabled", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 326 | < | DD_Patch_CheatsEnabled(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 326 | > | { | 
 
 
 
 
 | 327 | > | DDrPatch_MakeJump((void*)ONrPersist_GetWonGame, (void*)DDrPersist_GetWonGame); | 
 
 
 
 
 | 328 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 329 |  |  | 
 
 
 
 
 
 
 
 | 330 | + | // Use Daodan's own cheattable | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 331 |  | if (DDrConfig_GetOptOfType("patches.cheattable", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 332 | < | DD_Patch_CheatTable(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 332 | > | { | 
 
 
 
 
 | 333 | > | // In ONrGameState_HandleCheats: Replace pointers to orig cheattable | 
 
 
 
 
 | 334 | > | DDrPatch_Int32 ((int*)(OniExe + 0x000f616b), (int)&DDr_CheatTable[0].name); | 
 
 
 
 
 | 335 | > | DDrPatch_Int32 ((int*)(OniExe + 0x000f617a), (int)&DDr_CheatTable[0].message_on); | 
 
 
 
 
 | 336 | > |  | 
 
 
 
 
 | 337 | > | // ONrGameState_HandleCheats: Replace call to ONrCheater | 
 
 
 
 
 | 338 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000f618f), (void*)DDrCheater); | 
 
 
 
 
 | 339 | > |  | 
 
 
 
 
 | 340 | > | // In: ONrGameState_DoCharacterFrame | 
 
 
 
 
 | 341 | > | //  -> NOP; PUSH ebp; CALL FallingFrames | 
 
 
 
 
 | 342 | > | // Replace fall height frame counter (actually in-air frame counter) increase by a | 
 
 
 
 
 | 343 | > | //  conditional one (only counted when inc_fallingframes) | 
 
 
 
 
 | 344 | > | DDrPatch_Int16((short*)(OniExe + 0x000deb45), 0x5590); | 
 
 
 
 
 | 345 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000deb47), (void*)FallingFrames); | 
 
 
 
 
 | 346 | > |  | 
 
 
 
 
 | 347 | > | // At end of ONrUnlockLevel to init values on level loading | 
 
 
 
 
 | 348 | > | DDrPatch_MakeJump((void*)(OniExe + 0x0010f021), (void*)DDrCheater_LevelLoad); | 
 
 
 
 
 | 349 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 350 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 351 |  | if (DDrConfig_GetOptOfType("patches.chinese", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 352 |  | DD_Patch_Chinese(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 353 |  |  | 
 
 
 
 
 
 
 
 | 354 | + | // Limit cursor to Oni's window | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 355 |  | if (DDrConfig_GetOptOfType("patches.clipcursor", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 356 | < | DD_Patch_ClipCursor(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 356 | > | { | 
 
 
 
 
 | 357 | > | // LIrMode_Set: replace LIrPlatform_Mode_Set call with our hook. | 
 
 
 
 
 | 358 | > | DDrPatch_MakeCall((void*)(OniExe + 0x00003f9f), (void*) DD_LIrPlatform_Mode_Set); | 
 
 
 
 
 
 
 
 
 
 
 | 359 |  |  | 
 
 
 
 
 
 
 
 | 360 | + | // LIrMode_Set_Internal: replace LIrPlatform_Mode_Set call with our hook. | 
 
 
 
 
 
 
 
 | 361 | + | DDrPatch_MakeCall((void*)(OniExe + 0x00003fff), (void*) DD_LIrPlatform_Mode_Set); | 
 
 
 
 
 
 
 
 | 362 | + |  | 
 
 
 
 
 
 
 
 | 363 | + | // LIrTerminate: replace LIrPlatform_Terminate call with our hook. | 
 
 
 
 
 
 
 
 | 364 | + | DDrPatch_MakeCall((void*)(OniExe + 0x000004cb8), (void*) DD_LIrPlatform_Terminate); | 
 
 
 
 
 
 
 
 | 365 | + | } | 
 
 
 
 
 
 
 
 | 366 | + |  | 
 
 
 
 
 
 
 
 | 367 | + | // Disables weapon cooldown exploit | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 368 |  | if (DDrConfig_GetOptOfType("patches.cooldowntimer", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 369 | < | DD_Patch_CooldownTimer(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 369 | > | { | 
 
 
 
 
 | 370 | > | // In WPrRelease: NoOp 4 MOVs | 
 
 
 
 
 | 371 | > | DDrPatch_NOOP((char*)(OniExe + 0x0011a825), 22); | 
 
 
 
 
 | 372 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 373 |  |  | 
 
 
 
 
 
 
 
 | 374 | + | // Daodan device mode enumeration function | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 375 |  | if (DDrConfig_GetOptOfType("patches.daodandisplayenum", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 376 | < | DD_Patch_DaodanDisplayEnum(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 376 | > | { | 
 
 
 
 
 | 377 | > | DDrPatch_MakeJump((void*)gl_enumerate_valid_display_modes, (void*)DD_GLrEnumerateDisplayModes); | 
 
 
 
 
 | 378 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 379 |  |  | 
 
 
 
 
 
 
 
 | 380 | + | // Forced DirectInput (for Windows NT) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 381 |  | if (DDrConfig_GetOptOfType("patches.directinput", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 382 | < | DD_Patch_DirectInput(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 382 | > | { | 
 
 
 
 
 | 383 | > | // LIrPlatform_Initialize: replace conditional jump by unconditional | 
 
 
 
 
 | 384 | > | DDrPatch_Byte((char*)(OniExe + 0x00002e6d), 0xeb); | 
 
 
 
 
 | 385 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 386 |  |  | 
 
 
 
 
 
 
 
 | 387 | + | // Disable Oni's command line parser so it doesn't interfere with ours | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 388 |  | if (DDrConfig_GetOptOfType("patches.disablecmdline", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 389 | < | DD_Patch_DisableCmdLine(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 389 | > | { | 
 
 
 
 
 | 390 | > | // Replace start of OniParseCommandLine with XOR eax,eax; RET | 
 
 
 
 
 | 391 | > | DDrPatch_Int32 ((int*)(OniExe + 0x000d3570), 0x00c3c033); | 
 
 
 
 
 | 392 | > | // NoOp first 51 byte in ONiMain, including tests and conditional exec of CLrGetCommandLine | 
 
 
 
 
 | 393 | > | DDrPatch_NOOP((char*)(OniExe + 0x000d3280), 51); | 
 
 
 
 
 | 394 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 395 |  |  | 
 
 
 
 
 
 
 
 | 396 | + | // Font texture cache doubled | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 397 |  | if (DDrConfig_GetOptOfType("patches.fonttexturecache", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 398 | < | DD_Patch_FontTextureCache(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 399 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 400 | < | if (DDrConfig_GetOptOfType("patches.getcmdline", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 401 | < | DD_Patch_GetCmdLine(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 398 | > | { | 
 
 
 
 
 | 399 | > | // Double two values in TMrGame_Initialize | 
 
 
 
 
 | 400 | > | DDrPatch_Byte((char*)(OniExe + 0x00020ea7), 0x20); | 
 
 
 
 
 | 401 | > | DDrPatch_Byte((char*)(OniExe + 0x00020f4a), 0x40); | 
 
 
 
 
 | 402 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 403 |  |  | 
 
 
 
 
 
 
 
 | 404 | + | // Allow HD screens on resolutions < 1024*768 | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 405 |  | if (DDrConfig_GetOptOfType("patches.hdscreens_lowres", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 406 | < | DD_Patch_HDScreens_LowRes(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 406 | > | { | 
 
 
 
 
 | 407 | > | DDrPatch_MakeJump((void*)M3rDraw_BigBitmap, (void*)DD_M3rDraw_BigBitmap); | 
 
 
 
 
 | 408 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 409 |  |  | 
 
 
 
 
 
 
 
 | 410 | + | // Allow for console to show on higher resolutions | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 411 |  | if (DDrConfig_GetOptOfType("patches.highres_console", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 412 | < | DD_Patch_HighresConsole(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 412 | > | { | 
 
 
 
 
 | 413 | > | Oni_COrTextArea_Resize = DDrPatch_MakeDetour((void*)COrTextArea_Resize, (void*)DD_COrTextArea_Resize); | 
 
 
 
 
 | 414 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 415 |  |  | 
 
 
 
 
 
 
 
 | 416 | + | // Hackish fix for Konoko not kicking guns | 
 
 
 
 
 
 
 
 | 417 | + | // Don't use this, it breaks stairs. | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 418 |  | if (DDrConfig_GetOptOfType("patches.kickguns", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 419 | < | DD_Patch_KickGuns(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 419 | > | { | 
 
 
 
 
 | 420 | > | // In ONrCharacter_EnablePhysics: Load different values to same addresses as before | 
 
 
 
 
 | 421 | > | const unsigned char kickgun_patch[] = { 0x00, 0x05, 0x00, 0x00, 0x00, 0xC7, 0x05, 0x1C, 0xC9, 0x5E, 0x00, 0x70, 0xB8, 0x43, 0x00, 0xC7, 0x05, 0x20, 0xC9, 0x5E, 0x00, 0x20, 0xBE, 0x43 }; | 
 
 
 
 
 | 422 | > | DDrPatch_Const ((char*)(OniExe + 0x000dc420), kickgun_patch); | 
 
 
 
 
 | 423 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 424 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 425 | < | //if (patch_killvtune) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 426 | < | //      DD_Patch_KillVTune(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 425 | > | // Disable loading the vtuneapi.dll | 
 
 
 
 
 | 426 | > | if (DDrConfig_GetOptOfType("patches.killvtune", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 | 427 | > | { | 
 
 
 
 
 | 428 | > | // Instantly return from UUrLoadVtuneAPI | 
 
 
 
 
 | 429 | > | DDrPatch_Byte((char*)(OniExe + 0x00026340), 0xC3); | 
 
 
 
 
 | 430 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 431 |  |  | 
 
 
 
 
 
 
 
 | 432 | + | // Now supports textures up to 512x512 | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 433 |  | if (DDrConfig_GetOptOfType("patches.largetextures", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 434 | < | DD_Patch_LargeTextures(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 434 | > | { | 
 
 
 
 
 | 435 | > | DDrPatch_Byte((char*)(OniExe + 0x00005251), 0x10); | 
 
 
 
 
 | 436 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 437 |  |  | 
 
 
 
 
 
 
 
 | 438 | + | // Non-"_Final" levels are now valid | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 439 |  | if (DDrConfig_GetOptOfType("patches.levelplugins", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 440 | < | DD_Patch_LevelPlugins(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 440 | > | { | 
 
 
 
 
 | 441 | > | // Patch in TMrUtility_LevelInfo_Get: | 
 
 
 
 
 | 442 | > | DDrPatch_Byte((char*)(OniExe + 0x000206a8), 0x01); | 
 
 
 
 
 | 443 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 444 |  |  | 
 
 
 
 
 
 
 
 | 445 | + | // Weapon on ground shown with name and magazine contents | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 446 |  | if (DDrConfig_GetOptOfType("patches.newweap", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 447 | < | DD_Patch_NewWeap(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 447 | > | { | 
 
 
 
 
 | 448 | > | //Makes it always say "Received weapon_name." | 
 
 
 
 
 | 449 | > | //Needs check for loc_4DFC66 | 
 
 
 
 
 | 450 | > | //DDrPatch_NOOP((char*)(OniExe + 0x000E4DF8),2); | 
 
 
 
 
 | 451 | > |  | 
 
 
 
 
 | 452 | > | //Adds Weapon name and ammo meter to pickup autoprompt (patches to ONrGameState_ProcessHeartbeat) | 
 
 
 
 
 | 453 | > | // Do not call WPrHasAmmo and ignore conditional jump: | 
 
 
 
 
 | 454 | > | DDrPatch_NOOP((char*)(OniExe + 0x000FAC73), 9); | 
 
 
 
 
 | 455 | > | // Do not load ecx with some magic value? | 
 
 
 
 
 | 456 | > | DDrPatch_NOOP((char*)(OniExe + 0x000FAC80), 5); | 
 
 
 
 
 | 457 | > | // Replace call to ONiGameState_FindAutoPromptMessage | 
 
 
 
 
 | 458 | > | DDrPatch_MakeCall((void*)(OniExe + 0xFAC85), (void*)DDrWeapon2Message); | 
 
 
 
 
 | 459 | > |  | 
 
 
 
 
 | 460 | > | //Moves location of colors | 
 
 
 
 
 | 461 | > | //DDrPatch_Int32((int*)(OniExe + 0x0002E3D5), (int)&DDrDSayColors ); | 
 
 
 
 
 | 462 | > | //DDrPatch_Int32((int*)(OniExe + 0x0002E3DA), (int)&DDrDSayColors ); | 
 
 
 
 
 | 463 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 464 |  |  | 
 
 
 
 
 
 
 
 | 465 | + | // Disable Multi-byte character awareness patch (multiple language support) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 466 |  | if (DDrConfig_GetOptOfType("patches.nomultibyte", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 467 | < | DD_Patch_NoMultiByte(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 467 | > | { | 
 
 
 
 
 | 468 | > | // TSiContext_DrawLine: Replace conditional jumps by unconditional ones | 
 
 
 
 
 | 469 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002d8f8), 0xeb); | 
 
 
 
 
 | 470 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002d9ad), 0xeb); | 
 
 
 
 
 | 471 | > | // TSiContext_DrawTextLine: same | 
 
 
 
 
 | 472 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002dbe2), 0xeb); | 
 
 
 
 
 | 473 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002dec3), 0xeb); | 
 
 
 
 
 | 474 | > | // TSrContext_FormatString: same | 
 
 
 
 
 | 475 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e2ab), 0xeb); | 
 
 
 
 
 | 476 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e2c4), 0xeb); | 
 
 
 
 
 | 477 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e379), 0xeb); | 
 
 
 
 
 | 478 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e48c), 0xeb); | 
 
 
 
 
 | 479 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e4d0), 0xeb); | 
 
 
 
 
 | 480 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e4f4), 0xeb); | 
 
 
 
 
 | 481 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e646), 0xeb); | 
 
 
 
 
 | 482 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e695), 0xeb); | 
 
 
 
 
 | 483 | > | // TSrContext_GetStringRect: same | 
 
 
 
 
 | 484 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e944), 0xeb); | 
 
 
 
 
 | 485 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e95d), 0xeb); | 
 
 
 
 
 | 486 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e98e), 0xeb); | 
 
 
 
 
 | 487 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0002e9dc), 0xeb); | 
 
 
 
 
 | 488 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 489 |  |  | 
 
 
 
 
 
 
 
 | 490 | + | // Fix options not visible in main menu when a game was started | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 491 |  | if (DDrConfig_GetOptOfType("patches.optionsvisible", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 492 | < | DD_Patch_OptionsVisible(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 492 | > | { | 
 
 
 
 
 | 493 | > | // replace WMrWindow_SetVisible calls | 
 
 
 
 
 | 494 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000d2d2d), DDrShowOptionsButton); | 
 
 
 
 
 | 495 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000d2d43), DDrShowResumeButton); | 
 
 
 
 
 | 496 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 497 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 498 | < | if (DDrConfig_GetOptOfType("patches.particledisablebit", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 690 | < | DD_Patch_ParticleDisableBit(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 691 | < |  | 
 
 
 
 
 
 
 
 
 | 498 | > | // Pathfinding grid cache size x8 | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 499 |  | if (DDrConfig_GetOptOfType("patches.pathfinding", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 500 | < | DD_Patch_PathFinding(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 500 | > | { | 
 
 
 
 
 | 501 | > | // Replaces conditional jump (je) with unconditional jump | 
 
 
 
 
 | 502 | > | const unsigned char pathfinding[2] = {0x90 , 0xE9 }; | 
 
 
 
 
 | 503 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0010b03b), 0x20); | 
 
 
 
 
 | 504 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0010b04c), 0x20); | 
 
 
 
 
 | 505 | > |  | 
 
 
 
 
 | 506 | > | //other stuff | 
 
 
 
 
 | 507 | > | DDrPatch_Const((char*)(OniExe + 0x00040789), pathfinding); | 
 
 
 
 
 | 508 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 509 |  |  | 
 
 
 
 
 
 
 
 | 510 | + | // Projectile awareness fixed | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 511 |  | if (DDrConfig_GetOptOfType("patches.projaware", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 512 | < | DD_Patch_ProjAware(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 512 | > | { | 
 
 
 
 
 | 513 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0009c07c), 0x6c); | 
 
 
 
 
 | 514 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0009c080), 0x70); | 
 
 
 
 
 | 515 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0009c084), 0x74); | 
 
 
 
 
 | 516 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0009c110), 0x6c); | 
 
 
 
 
 | 517 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 518 |  |  | 
 
 
 
 
 
 
 
 | 519 | + | // Safe startup message printer | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 520 |  | if (DDrConfig_GetOptOfType("patches.safeprintf", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 521 | < | DD_Patch_SafePrintf(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 521 | > | { | 
 
 
 
 
 | 522 | > | DDrPatch_MakeJump((void*)UUrStartupMessage, (void*)DDrStartupMessage); | 
 
 
 
 
 | 523 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 524 |  |  | 
 
 
 
 
 
 
 
 | 525 | + | // Show all (also enemies') lasersights | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 526 |  | if (DDrConfig_GetOptOfType("patches.showalllasersights", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 527 | < | DD_Patch_ShowAllLasersights(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 527 | > | { | 
 
 
 
 
 | 528 | > | DDrPatch_NOOP((char*)(OniExe + 0x000E1957), 6 ); | 
 
 
 
 
 | 529 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 530 |  |  | 
 
 
 
 
 
 
 
 | 531 | + | // Allow bsl-var show_triggervolumes or ctrl+shift+x (devmode) to work | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 532 |  | if (DDrConfig_GetOptOfType("patches.showtriggervolumes", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 533 | < | DD_Patch_ShowTriggerVolumes(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 533 | > | { | 
 
 
 
 
 | 534 | > | Oni_ONrMechanics_Register = DDrPatch_MakeDetour((void*)ONrMechanics_Register, (void*)DD_ONrMechanics_Register); | 
 
 
 
 
 | 535 | > | Oni_ONrGameState_HandleUtilityInput = DDrPatch_MakeDetour((void*)ONrGameState_HandleUtilityInput, (void*)DD_ONrGameState_HandleUtilityInput); | 
 
 
 
 
 | 536 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 537 |  |  | 
 
 
 
 
 
 
 
 | 538 | + | // Experiment with allowing enemies to be thrown over railings | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 539 |  | if (DDrConfig_GetOptOfType("patches.throwtest", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 540 | < | DD_Patch_Throwtest(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 540 | > | { | 
 
 
 
 
 | 541 | > | DDrPatch_NOOP((char*)(OniExe + 0x000dc190), 10); | 
 
 
 
 
 | 542 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 543 |  |  | 
 
 
 
 
 
 
 
 | 544 | + | // DaodanGL with windowed mode support | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 545 |  | if (DDrConfig_GetOptOfType("patches.usedaodangl", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 546 | < | DD_Patch_UseDaodanGL(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 546 | > | { | 
 
 
 
 
 | 547 | > | // LIrPlatform_Mode_Set: GetWindowRect -> GetClientRect. | 
 
 
 
 
 | 548 | > | DDrPatch_NOOP((char*) OniExe + 0x00002dd6, 6); | 
 
 
 
 
 | 549 | > | DDrPatch_MakeCall((char*) OniExe + 0x00002dd6, (void*) GetClientRect); | 
 
 
 
 
 | 550 | > |  | 
 
 
 
 
 | 551 | > | // UUrWindow_GetSize: GetWindowRect -> GetClientRect. | 
 
 
 
 
 | 552 | > | DDrPatch_NOOP((char*) OniExe + 0x0002651c, 6); | 
 
 
 
 
 | 553 | > | DDrPatch_MakeCall((char*) OniExe + 0x0002651c, (void*) GetClientRect); | 
 
 
 
 
 | 554 | > |  | 
 
 
 
 
 | 555 | > | // LIrPlatform_PollInputForAction: fix GetCursorPos call to return client coordinates. | 
 
 
 
 
 | 556 | > | DDrPatch_NOOP((char*) OniExe + 0x000032cc, 6); | 
 
 
 
 
 | 557 | > | DDrPatch_MakeCall((char*) OniExe + 0x000032cc, (void*) DD_GetCursorPos); | 
 
 
 
 
 | 558 | > |  | 
 
 
 
 
 | 559 | > | // LIrPlatform_InputEvent_GetMouse: fix GetCursorPos call to return client coordinates. | 
 
 
 
 
 | 560 | > | DDrPatch_NOOP((char*) OniExe + 0x00002cc2, 6); | 
 
 
 
 
 | 561 | > | DDrPatch_MakeCall((char*) OniExe + 0x00002cc2, (void*) DD_GetCursorPos); | 
 
 
 
 
 | 562 | > |  | 
 
 
 
 
 | 563 | > | // LIrPlatform_PollInputForAction: translate SetCursorPos position to screen coordinates. | 
 
 
 
 
 | 564 | > | DDrPatch_NOOP((char*) OniExe + 0x000032b7, 6); | 
 
 
 
 
 | 565 | > | DDrPatch_MakeCall((char*) OniExe + 0x000032b7, (void*) DD_SetCursorPos); | 
 
 
 
 
 | 566 | > |  | 
 
 
 
 
 | 567 | > | // LIrPlatform_PollInputForAction: translate SetCursorPos position to screen coordinates. | 
 
 
 
 
 | 568 | > | DDrPatch_NOOP((char*) OniExe + 0x00003349, 6); | 
 
 
 
 
 | 569 | > | DDrPatch_MakeCall((char*) OniExe + 0x00003349, (void*) DD_SetCursorPos); | 
 
 
 
 
 | 570 | > |  | 
 
 
 
 
 | 571 | > | // Replace ONrPlatformInitialize. | 
 
 
 
 
 | 572 | > | DDrPatch_MakeJump((void*) ONrPlatform_Initialize, (void*) DD_ONrPlatform_Initialize); | 
 
 
 
 
 | 573 | > |  | 
 
 
 
 
 | 574 | > | // Replace gl_platform_initialize. | 
 
 
 
 
 | 575 | > | DDrPatch_MakeJump((void*) gl_platform_initialize, (void*) DD_GLrPlatform_Initialize); | 
 
 
 
 
 
 
 
 
 
 
 | 576 |  |  | 
 
 
 
 
 
 
 
 | 577 | + | // Replace gl_platform_dispose. | 
 
 
 
 
 
 
 
 | 578 | + | DDrPatch_MakeJump((void *) gl_platform_dispose, (void*) DD_GLrPlatform_Dispose); | 
 
 
 
 
 
 
 
 | 579 | + | } | 
 
 
 
 
 
 
 
 | 580 | + |  | 
 
 
 
 
 
 
 
 | 581 | + | // Performance patch | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 582 |  | if (DDrConfig_GetOptOfType("patches.usegettickcount", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 583 | < | DD_Patch_UseGetTickCount(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 583 | > | { | 
 
 
 
 
 | 584 | > | DDrPatch_MakeJump((void*)UUrMachineTime_High, (void*)DDrMachineTime_High); | 
 
 
 
 
 | 585 | > | DDrPatch_MakeJump((void*)UUrMachineTime_High_Frequency, (void*)DDrMachineTime_High_Frequency); | 
 
 
 
 
 | 586 | > | DDrPatch_MakeJump((void*)UUrMachineTime_Sixtieths, (void*)DDrMachineTime_Sixtieths); | 
 
 
 
 
 | 587 | > | } | 
 
 
 
 
 | 588 | > |  | 
 
 
 
 
 | 589 | > | // Fix displaying the talking portraits in widescreen modes | 
 
 
 
 
 | 590 | > | if (DDrConfig_GetOptOfType("patches.widescreenportraits", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 | 591 | > | { | 
 
 
 
 
 | 592 | > | SLrDaodan_Patch(); | 
 
 
 
 
 | 593 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 594 |  |  | 
 
 
 
 
 
 
 
 | 595 | + | // Adds working function for existing BSL command wp_fadetime, sets fade time to 4800 | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 596 |  | if (DDrConfig_GetOptOfType("patches.wpfadetime", C_BOOL)->value.intBoolVal) | 
 
 
 
 
 
 
 
 
 
 
 | 597 | < | DD_Patch_WpFadetime(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 598 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 597 | > | { | 
 
 
 
 
 | 598 | > | // Makes wp_fadetime actually have a function (changes within WPrRelease) | 
 
 
 
 
 | 599 | > | // Patches end of function to instead of use a constant value for fadetime (12c0 = 4800) actually use value of wp_fadetime: | 
 
 
 
 
 | 600 | > | // orig: MOV [esi+0x46], 0x12c0 ; POP ebx ; POP esi ; ADD esp, 0x14 ; RET | 
 
 
 
 
 | 601 | > | // new:  MOV bx, [0x627dc4] ; MOV [esi+0x46], bx ; POP ebx ; POP esi ; ADD esp, 0x14 ; RET | 
 
 
 
 
 | 602 | > | const unsigned char fadetime_patch[] = { 0x66, 0x8B, 0x1D, 0xC4, 0x7D, 0x62, 0x00, 0x66, 0x89, 0x5E, 0x46, 0x5B, 0x5E, 0x83, 0xC4, 0x14, 0xC3 }; | 
 
 
 
 
 | 603 | > | DDrPatch_Const ((char*)(OniExe + 0x0011a889), fadetime_patch); | 
 
 
 
 
 | 604 | > | // Fixes jump because of new length of code in patch | 
 
 
 
 
 | 605 | > | DDrPatch_Byte  ((char*)(OniExe + 0x0011a560), 0x31); | 
 
 
 
 
 | 606 | > |  | 
 
 
 
 
 | 607 | > | // Sets the fadetime to 4800 by default (in WPrInitialize) | 
 
 
 
 
 | 608 | > | DDrPatch_Int16 ((short*)(OniExe + 0x0011ab0e), 4800); | 
 
 
 
 
 | 609 | > | } | 
 
 
 
 
 
 
 
 
 
 
 | 610 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 611 | < | DD_Patch_DaodanInit(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 611 | > | // Adds new BSL functions | 
 
 
 
 
 | 612 | > | // Replaces an early unused call (OBJrLevel_Unload_Unknown_2) in ONiMain | 
 
 
 
 
 | 613 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000d345a), (void*)DDrGame_Init); | 
 
 
 
 
 
 
 
 
 
 
 | 614 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 615 | < | DD_Patch_GammaSlider(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 615 | > | // Disable gamma slider in options in windowed mode | 
 
 
 
 
 | 616 | > | // In ONiOGU_Options_Callback: Replace WMrSlider_SetRange | 
 
 
 
 
 | 617 | > | DDrPatch_MakeCall((void*)(OniExe + 0x000d262c), (void*)DD_ONiOGU_GammaSlider_SetRange); | 
 
 
 
 
 
 
 
 
 
 
 | 618 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 619 | < | DD_Patch_PrintWarning(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 619 | > | // Fix the warning print method | 
 
 
 
 
 | 620 | > | // Replace UUrError_Report_Internal | 
 
 
 
 
 | 621 | > | DDrPatch_MakeJump((void*)(OniExe + 0x000245A0), (void*)DDrPrintWarning); | 
 
 
 
 
 
 
 
 
 
 
 | 622 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 623 |  | DD_Patch_ShowNames(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 624 |  |  |