| 277 |
|
} |
| 278 |
|
|
| 279 |
|
|
| 280 |
< |
|
| 280 |
> |
void DD_Patch_CharacterAwareness() |
| 281 |
> |
{ |
| 282 |
> |
const unsigned char patch[] = |
| 283 |
> |
{ |
| 284 |
> |
0x52, // 0: push edx |
| 285 |
> |
0xBA, 0xA0, 0x16, 0x00, 0x00, // 1: mov edx,0x16a0 |
| 286 |
> |
0x89, 0xF8, // 6: mov eax,edi |
| 287 |
> |
0xF7, 0xE2, // 8: mul edx |
| 288 |
> |
0x89, 0xC2, // a: mov edx,eax |
| 289 |
> |
0xE8, 0x00, 0x00, 0x00, 0x00, // c: call ONrGameState_LivingCharacterList_Get (-> OniExe + 0x000fca90) |
| 290 |
> |
0x8B, 0x00, // 11: mov eax,[eax] |
| 291 |
> |
0x01, 0xD0, // 13: add eax,edx |
| 292 |
> |
0x89, 0xC6, // 15: mov esi,eax |
| 293 |
> |
0x5A, // 17: pop edx |
| 294 |
> |
0x8B, 0x46, 0x04, // 18: (ORIG) mov eax, dword [ds:esi+0x4] |
| 295 |
> |
0xF6, 0xC4, 0x80 // 1b: (ORIG) test ah, 0x80 |
| 296 |
> |
}; |
| 297 |
> |
void* newCode = DDrPatch_ExecutableASM((char*)(OniExe + 0x0009A609), (char*)(OniExe + 0x0009A60F), patch, sizeof(patch)); |
| 298 |
> |
if ((int)newCode > 0) { |
| 299 |
> |
DDrPatch_MakeCall((char*)(newCode+0xC), (char*)(OniExe + 0x000FCA90)); |
| 300 |
> |
DDrPatch_NOOP((char*)(OniExe + 0x0009A60E), 1); |
| 301 |
> |
} |
| 302 |
> |
} |
| 303 |
|
|
| 304 |
|
|
| 305 |
|
|
| 343 |
|
if (DDrConfig_GetOptOfType("modding.d_regen", C_BOOL)->value.intBoolVal) |
| 344 |
|
DD_Patch_Regeneration(); |
| 345 |
|
|
| 346 |
+ |
if (DDrConfig_GetOptOfType("gameplay.characterawareness", C_BOOL)->value.intBoolVal) |
| 347 |
+ |
DD_Patch_CharacterAwareness(); |
| 348 |
+ |
|
| 349 |
|
// Cheats always enabled |
| 350 |
|
if (DDrConfig_GetOptOfType("gameplay.cheatsenabled", C_BOOL)->value.intBoolVal) |
| 351 |
|
{ |