ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/src/Patches/Patches.c
(Generate patch)

Comparing Daodan/src/Patches/Patches.c (file contents):
Revision 1000 by alloc, Sun May 4 18:17:11 2014 UTC vs.
Revision 1008 by alloc, Mon Aug 25 23:21:09 2014 UTC

# Line 277 | Line 277 | void DD_Patch_ShowNames()
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  
# Line 321 | Line 343 | bool DD_Patch_Init()
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          {

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)