Changeset 1008 for Daodan/src/Patches


Ignore:
Timestamp:
Aug 26, 2014, 1:21:09 AM (10 years ago)
Author:
alloc
Message:

Daodan 3.9: Added AI awareness patch (fixes #36)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Daodan/src/Patches/Patches.c

    r1000 r1008  
    278278
    279279
    280 
     280void 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}
    281303
    282304
     
    321343        if (DDrConfig_GetOptOfType("modding.d_regen", C_BOOL)->value.intBoolVal)
    322344                DD_Patch_Regeneration();
     345
     346        if (DDrConfig_GetOptOfType("gameplay.characterawareness", C_BOOL)->value.intBoolVal)
     347                DD_Patch_CharacterAwareness();
    323348
    324349        // Cheats always enabled
Note: See TracChangeset for help on using the changeset viewer.