| 183 |
|
return Oni_ONrMechanics_Register(inObjectType, inObjectTypeIndex, inGroupName, inSizeInMemory, inObjectMethods, inFlags, inMechanicsMethods); |
| 184 |
|
} |
| 185 |
|
|
| 186 |
– |
_ONrGameState_HandleUtilityInput Oni_ONrGameState_HandleUtilityInput = (_ONrGameState_HandleUtilityInput)0; |
| 187 |
– |
void ONICALL DD_ONrGameState_HandleUtilityInput(const void* inInput) |
| 188 |
– |
{ |
| 189 |
– |
Oni_ONrGameState_HandleUtilityInput(inInput); |
| 190 |
– |
|
| 191 |
– |
if (ONrDebugKey_WentDown(7)) { |
| 192 |
– |
OBJgTriggerVolume_Visible = !OBJgTriggerVolume_Visible; |
| 193 |
– |
} |
| 194 |
– |
} |
| 195 |
– |
|
| 196 |
– |
|
| 186 |
|
// Enables d_regen script command. Instead of one global flag to only regenerate player each char has a flag to enable local regeneration |
| 187 |
|
void DD_Patch_Regeneration() |
| 188 |
|
{ |
| 373 |
|
if (DDrConfig_GetOptOfType("language.chinese", C_BOOL)->value.intBoolVal) |
| 374 |
|
DD_Patch_Chinese(); |
| 375 |
|
|
| 387 |
– |
// Limit cursor to Oni's window |
| 388 |
– |
if (DDrConfig_GetOptOfType("windows.clipcursor", C_BOOL)->value.intBoolVal) |
| 389 |
– |
{ |
| 390 |
– |
// LIrMode_Set: replace LIrPlatform_Mode_Set call with our hook. |
| 391 |
– |
DDrPatch_MakeCall((void*)(OniExe + 0x00003f9f), (void*) DD_LIrPlatform_Mode_Set); |
| 392 |
– |
|
| 393 |
– |
// LIrMode_Set_Internal: replace LIrPlatform_Mode_Set call with our hook. |
| 394 |
– |
DDrPatch_MakeCall((void*)(OniExe + 0x00003fff), (void*) DD_LIrPlatform_Mode_Set); |
| 395 |
– |
|
| 396 |
– |
// LIrTerminate: replace LIrPlatform_Terminate call with our hook. |
| 397 |
– |
DDrPatch_MakeCall((void*)(OniExe + 0x000004cb8), (void*) DD_LIrPlatform_Terminate); |
| 398 |
– |
} |
| 399 |
– |
|
| 376 |
|
// Disables weapon cooldown exploit |
| 377 |
|
if (DDrConfig_GetOptOfType("gameplay.cooldowntimer", C_BOOL)->value.intBoolVal) |
| 378 |
|
{ |
| 385 |
|
{ |
| 386 |
|
DDrPatch_MakeJump((void*)gl_enumerate_valid_display_modes, (void*)DD_GLrEnumerateDisplayModes); |
| 387 |
|
} |
| 388 |
< |
|
| 389 |
< |
// Forced DirectInput (for Windows NT) |
| 390 |
< |
if (DDrConfig_GetOptOfType("windows.directinput", C_BOOL)->value.intBoolVal) |
| 388 |
> |
|
| 389 |
> |
if (DDrConfig_GetOptOfType("windows.daodaninput", C_BOOL)->value.intBoolVal) |
| 390 |
> |
{ |
| 391 |
> |
DDrInput_PatchDaodanInput(); |
| 392 |
> |
} |
| 393 |
> |
else |
| 394 |
|
{ |
| 395 |
< |
// LIrPlatform_Initialize: replace conditional jump by unconditional |
| 396 |
< |
DDrPatch_Byte((char*)(OniExe + 0x00002e6d), 0xeb); |
| 395 |
> |
// The following patches aren't compatible with, or are superseded by |
| 396 |
> |
// Daodan input |
| 397 |
> |
|
| 398 |
> |
// Limit cursor to Oni's window |
| 399 |
> |
if (DDrConfig_GetOptOfType("windows.clipcursor", C_BOOL)->value.intBoolVal) |
| 400 |
> |
{ |
| 401 |
> |
// LIrMode_Set: replace LIrPlatform_Mode_Set call with our hook. |
| 402 |
> |
DDrPatch_MakeCall((void*)(OniExe + 0x00003f9f), (void*) DD_LIrPlatform_Mode_Set); |
| 403 |
> |
|
| 404 |
> |
// LIrMode_Set_Internal: replace LIrPlatform_Mode_Set call with our hook. |
| 405 |
> |
DDrPatch_MakeCall((void*)(OniExe + 0x00003fff), (void*) DD_LIrPlatform_Mode_Set); |
| 406 |
> |
|
| 407 |
> |
// LIrTerminate: replace LIrPlatform_Terminate call with our hook. |
| 408 |
> |
DDrPatch_MakeCall((void*)(OniExe + 0x000004cb8), (void*) DD_LIrPlatform_Terminate); |
| 409 |
> |
} |
| 410 |
> |
|
| 411 |
> |
// Forced DirectInput (for Windows NT) |
| 412 |
> |
if (DDrConfig_GetOptOfType("windows.directinput", C_BOOL)->value.intBoolVal) |
| 413 |
> |
{ |
| 414 |
> |
// LIrPlatform_Initialize: replace conditional jump by unconditional |
| 415 |
> |
DDrPatch_Byte((char*)(OniExe + 0x00002e6d), 0xeb); |
| 416 |
> |
} |
| 417 |
|
} |
| 418 |
|
|
| 419 |
|
// Disable Oni's command line parser so it doesn't interfere with ours |
| 447 |
|
|
| 448 |
|
// Allow custom actions to be bound through Daodan |
| 449 |
|
if (DDrConfig_GetOptOfType("gameplay.customactions", C_BOOL)->value.intBoolVal) |
| 450 |
< |
{ |
| 451 |
< |
Input_PatchCode (); |
| 453 |
< |
} |
| 454 |
< |
|
| 450 |
> |
DDrInput_PatchCustomActions(); |
| 451 |
> |
|
| 452 |
|
// Hackish fix for Konoko not kicking guns |
| 453 |
|
// Don't use this, it breaks stairs. |
| 454 |
|
if (DDrConfig_GetOptOfType("gameplay.kickguns", C_BOOL)->value.intBoolVal) |
| 567 |
|
// Allow bsl-var show_triggervolumes or ctrl+shift+x (devmode) to work |
| 568 |
|
if (DDrConfig_GetOptOfType("devmode.showtriggervolumes", C_BOOL)->value.intBoolVal) |
| 569 |
|
{ |
| 570 |
+ |
DDrInput_PatchUtilityInput(); |
| 571 |
|
Oni_ONrMechanics_Register = DDrPatch_MakeDetour((void*)ONrMechanics_Register, (void*)DD_ONrMechanics_Register); |
| 574 |
– |
Oni_ONrGameState_HandleUtilityInput = DDrPatch_MakeDetour((void*)ONrGameState_HandleUtilityInput, (void*)DD_ONrGameState_HandleUtilityInput); |
| 572 |
|
} |
| 573 |
< |
|
| 573 |
> |
|
| 574 |
|
// Experiment with allowing enemies to be thrown over railings |
| 575 |
|
if (DDrConfig_GetOptOfType("gameplay.throwtest", C_BOOL)->value.intBoolVal) |
| 576 |
|
{ |
| 588 |
|
DDrPatch_NOOP((char*) OniExe + 0x0002651c, 6); |
| 589 |
|
DDrPatch_MakeCall((char*) OniExe + 0x0002651c, (void*) GetClientRect); |
| 590 |
|
|
| 591 |
+ |
// Note: Daodan input makes the following GetCursorPos and SetCursorPos |
| 592 |
+ |
// patches unnecessary |
| 593 |
+ |
|
| 594 |
|
// LIrPlatform_PollInputForAction: fix GetCursorPos call to return client coordinates. |
| 595 |
|
DDrPatch_NOOP((char*) OniExe + 0x000032cc, 6); |
| 596 |
|
DDrPatch_MakeCall((char*) OniExe + 0x000032cc, (void*) DD_GetCursorPos); |