@@ -160,8 +160,12 @@ DWORD RETURN_CPlantMgr_Render_fail = 0x5DBDAA;
160160#define HOOKPOS_CEventHandler_ComputeKnockOffBikeResponse 0x4BA06F
161161DWORD RETURN_CEventHandler_ComputeKnockOffBikeResponse = 0x4BA076 ;
162162
163- #define HOOKPOS_CAnimBlendAssocGroup_CopyAnimation 0x4CE130 // mov ecx, [ecx+4]
164- DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation = 0x4CE158 ; // test esi, esi
163+ DWORD FUNC_NEW_OPERATOR = 0x082119A ;
164+ DWORD FUNC_CAnimBlendAssociation_Constructor = 0x04CF080 ;
165+
166+ #define HOOKPOS_CAnimBlendAssocGroup_CopyAnimation 0x4CE14C
167+ DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation = 0x4CE187 ;
168+ DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR = 0x4CE199 ;
165169
166170#define HOOKPOS_CAnimManager_AddAnimation 0x4d3aa0
167171DWORD RETURN_CAnimManager_AddAnimation = 0x4D3AB1 ;
@@ -647,7 +651,7 @@ void CMultiplayerSA::InitHooks()
647651 HookInstall (HOOKPOS_CEventHandler_ComputeKnockOffBikeResponse, (DWORD)HOOK_CEventHandler_ComputeKnockOffBikeResponse, 7 );
648652 HookInstall (HOOKPOS_CAnimManager_AddAnimation, (DWORD)HOOK_CAnimManager_AddAnimation, 10 );
649653 HookInstall (HOOKPOS_CAnimManager_AddAnimationAndSync, (DWORD)HOOK_CAnimManager_AddAnimationAndSync, 10 );
650- HookInstall (HOOKPOS_CAnimBlendAssocGroup_CopyAnimation, (DWORD)HOOK_CAnimBlendAssocGroup_CopyAnimation, 6 );
654+ HookInstall (HOOKPOS_CAnimBlendAssocGroup_CopyAnimation, (DWORD)HOOK_CAnimBlendAssocGroup_CopyAnimation, 5 );
651655 HookInstall (HOOKPOS_CAnimManager_BlendAnimation_Hierarchy, (DWORD)HOOK_CAnimManager_BlendAnimation_Hierarchy, 7 );
652656 HookInstall (HOOKPOS_CPed_GetWeaponSkill, (DWORD)HOOK_CPed_GetWeaponSkill, 8 );
653657 HookInstall (HOOKPOS_CPed_AddGogglesModel, (DWORD)HOOK_CPed_AddGogglesModel, 6 );
@@ -5347,48 +5351,60 @@ void _declspec(naked) HOOK_CEventHandler_ComputeKnockOffBikeResponse ()
53475351 }
53485352}
53495353
5350- CAnimBlendStaticAssociationSAInterface * getAnimStaticAssociation ( DWORD * pAnimAssocGroup, DWORD AnimID )
5354+ void CreateAnimStaticAssociation ( CAnimBlendStaticAssociationSAInterface * pAnimStaticAssoc, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, DWORD AnimID )
53515355{
5352- auto pAnimStaticAssoc = (CAnimBlendStaticAssociationSAInterface *)( pAnimAssocGroup[1 ] + 20 * (AnimID - pAnimAssocGroup[3 ]) );
5356+ DWORD * pdwAnimAssocGroup = reinterpret_cast < DWORD * > ( pAnimAssocGroup );
5357+ auto pOriginalAnimStaticAssoc = (CAnimBlendStaticAssociationSAInterface *)( pdwAnimAssocGroup[1 ] + 20 * (AnimID - pdwAnimAssocGroup[3 ]) );
53535358 // auto pAnimStaticAssoc = (CAnimBlendStaticAssociationSAInterface *)malloc ( sizeof(CAnimBlendStaticAssociationSAInterface));
53545359
5355- return pAnimStaticAssoc;
5360+ * pAnimStaticAssoc = *pOriginalAnimStaticAssoc ;
53565361}
53575362
5358- // CAnimBlendAssocGroupSAInterface * pAnimAssocGroup = nullptr;
5363+ CAnimBlendAssocGroupSAInterface * pAnimAssocGroup = nullptr ;
5364+ CAnimBlendStaticAssociationSAInterface AnimStaticAssoc;
53595365CAnimBlendStaticAssociationSAInterface * pAnimStaticAssoc = nullptr ;
5360- DWORD * pAnimAssocGroup = nullptr ;
53615366DWORD AnimID = 0 ;
53625367RpClump * pClump = nullptr ;
53635368void _declspec (naked) HOOK_CAnimBlendAssocGroup_CopyAnimation ()
53645369{
53655370 _asm
53665371 {
53675372 mov pClump, edi
5368-
5369- mov eax, fs:0
5370- push 0FFFFFFFFh
5371- push 083BCABh
5372- push eax
5373- mov eax, [esp+10h]
5374- mov fs:0 , esp
5375- mov edx, [ecx+0Ch]
5376-
53775373 mov pAnimAssocGroup, ecx
53785374 mov AnimID, eax
53795375 pushad
53805376 }
53815377
5382- pAnimStaticAssoc = getAnimStaticAssociation ( pAnimAssocGroup, AnimID );
5383-
5378+ CreateAnimStaticAssociation ( &AnimStaticAssoc, pAnimAssocGroup, AnimID );
5379+ pAnimStaticAssoc = &AnimStaticAssoc;
5380+
53845381 _asm
53855382 {
53865383 popad
53875384 mov ecx, [ecx+4 ]
53885385 sub eax, edx
53895386 push esi
53905387 mov esi, pAnimStaticAssoc
5388+ test esi, esi
5389+ jz ERROR_CopyAnimation
5390+ mov eax, [esi+10h]
5391+ push eax
5392+ mov eax, 04D41C0h
5393+ call eax
5394+ push 3Ch
5395+ call FUNC_NEW_OPERATOR
5396+ add esp, 8
5397+ mov [esp+14h], eax
5398+ test eax, eax
5399+ mov [esp+0Ch], 0
5400+ jz ERROR_CopyAnimation
5401+ push esi
5402+ mov ecx, eax
5403+ call FUNC_CAnimBlendAssociation_Constructor
53915404 jmp RETURN_CAnimBlendAssocGroup_CopyAnimation
5405+
5406+ ERROR_CopyAnimation:
5407+ jmp RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR
53925408 }
53935409}
53945410
0 commit comments