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 |
|
{ |