@@ -164,6 +164,7 @@ DWORD FUNC_NEW_OPERATOR = 0x082119A;
164164DWORD FUNC_CAnimBlendAssociation_Constructor = 0x04CF080 ;
165165
166166#define HOOKPOS_CAnimBlendAssocGroup_CopyAnimation 0x4CE14C
167+ DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_NORMALFLOW =0x4CE151 ;
167168DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation = 0x4CE187 ;
168169DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR = 0x4CE199 ;
169170
@@ -392,6 +393,7 @@ CEntitySAInterface * dwSavedPlayerPointer = 0;
392393CEntitySAInterface * activeEntityForStreaming = 0 ; // the entity that the streaming system considers active
393394
394395int _cdecl OnCAnimBlendAssocGroupCopyAnimation ( AssocGroupId animGroup, int iAnimId );
396+ auto CAnimBlendStaticAssociation_FreeSequenceArray = (hCAnimBlendStaticAssociation_FreeSequenceArray)0x4ce9a0 ;
395397
396398void HOOK_FindPlayerCoors ();
397399void HOOK_FindPlayerCentreOfWorld ();
@@ -5359,53 +5361,91 @@ void _declspec(naked) HOOK_CEventHandler_ComputeKnockOffBikeResponse ()
53595361 }
53605362}
53615363
5362- CAnimBlendAssocGroupSAInterface * pAnimAssocGroup = nullptr ;
5363- CAnimBlendStaticAssociationSAInterface AnimStaticAssoc;
5364- CAnimBlendStaticAssociationSAInterface * pAnimStaticAssoc = nullptr ;
5365- DWORD AnimID = 0 ;
5366- RpClump * pClump = nullptr ;
5364+ CAnimBlendStaticAssociationSAInterface * __cdecl AllocateStaticAssociationMemory ( void )
5365+ {
5366+ return new CAnimBlendStaticAssociationSAInterface;
5367+ }
5368+
5369+ void __cdecl DeleteStaticAssociation ( CAnimBlendStaticAssociationSAInterface * pAnimStaticAssoc )
5370+ {
5371+ CAnimBlendStaticAssociation_FreeSequenceArray ( pAnimStaticAssoc );
5372+ delete pAnimStaticAssoc;
5373+ }
5374+
5375+
53675376void _declspec (naked) HOOK_CAnimBlendAssocGroup_CopyAnimation ()
53685377{
53695378 _asm
53705379 {
5371- mov pClump, edi
5372- mov pAnimAssocGroup, ecx
5373- mov AnimID, eax
53745380 pushad
53755381 }
53765382
53775383 if ( m_pAssocGroupCopyAnimationHandler )
53785384 {
5379- m_pAssocGroupCopyAnimationHandler ( &AnimStaticAssoc, pClump, pAnimAssocGroup, AnimID );
5380- pAnimStaticAssoc = &AnimStaticAssoc;
5381- }
5382- _asm
5385+ _asm
5386+ {
5387+ popad
5388+ push eax
5389+ push ecx
5390+ push edi
5391+
5392+ // Allocate memory for our new static association
5393+ call AllocateStaticAssociationMemory
5394+ mov edi, eax
5395+
5396+ // push the static association
5397+ push edi
5398+ call m_pAssocGroupCopyAnimationHandler // CAnimBlendAssocGroup_CopyAnimation
5399+ add esp, 10h
5400+
5401+ mov ecx, [ecx+4 ]
5402+ sub eax, edx
5403+ push esi
5404+
5405+ // copy the static association to esi
5406+ mov esi, edi
5407+ test esi, esi
5408+ jz ERROR_CopyAnimation
5409+ mov eax, [esi+10h]
5410+ push eax
5411+ mov eax, 04D41C0h
5412+ call eax
5413+ push 3Ch
5414+ call FUNC_NEW_OPERATOR
5415+ add esp, 8
5416+ mov [esp+14h], eax
5417+ test eax, eax
5418+ mov [esp+0Ch], 0
5419+ jz ERROR_CopyAnimation
5420+ push esi
5421+ mov ecx, eax
5422+ call FUNC_CAnimBlendAssociation_Constructor
5423+ mov edi, eax
5424+
5425+ // Delete our static association, since we no longer need it
5426+ push esi
5427+ call DeleteStaticAssociation
5428+ add esp, 4
5429+
5430+ // put CAnimBlendAssociation in eax
5431+ mov eax, edi
5432+ jmp RETURN_CAnimBlendAssocGroup_CopyAnimation
5433+
5434+ ERROR_CopyAnimation:
5435+ // Delete our static association first
5436+ push edi
5437+ call DeleteStaticAssociation
5438+ add esp, 4
5439+ jmp RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR
5440+ }
5441+ }
5442+
5443+ _asm
53835444 {
53845445 popad
53855446 mov ecx, [ecx+4 ]
53865447 sub eax, edx
5387- push esi
5388- mov esi, pAnimStaticAssoc
5389- test esi, esi
5390- jz ERROR_CopyAnimation
5391- mov eax, [esi+10h]
5392- push eax
5393- mov eax, 04D41C0h
5394- call eax
5395- push 3Ch
5396- call FUNC_NEW_OPERATOR
5397- add esp, 8
5398- mov [esp+14h], eax
5399- test eax, eax
5400- mov [esp+0Ch], 0
5401- jz ERROR_CopyAnimation
5402- push esi
5403- mov ecx, eax
5404- call FUNC_CAnimBlendAssociation_Constructor
5405- jmp RETURN_CAnimBlendAssocGroup_CopyAnimation
5406-
5407- ERROR_CopyAnimation:
5408- jmp RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR
5448+ jmp RETURN_CAnimBlendAssocGroup_CopyAnimation_NORMALFLOW
54095449 }
54105450}
54115451
0 commit comments