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