@@ -164,6 +164,7 @@ DWORD FUNC_NEW_OPERATOR = 0x082119A;
164
164
DWORD FUNC_CAnimBlendAssociation_Constructor = 0x04CF080 ;
165
165
166
166
#define HOOKPOS_CAnimBlendAssocGroup_CopyAnimation 0x4CE14C
167
+ DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_NORMALFLOW =0x4CE151 ;
167
168
DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation = 0x4CE187 ;
168
169
DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR = 0x4CE199 ;
169
170
@@ -392,6 +393,7 @@ CEntitySAInterface * dwSavedPlayerPointer = 0;
392
393
CEntitySAInterface * activeEntityForStreaming = 0 ; // the entity that the streaming system considers active
393
394
394
395
int _cdecl OnCAnimBlendAssocGroupCopyAnimation ( AssocGroupId animGroup, int iAnimId );
396
+ auto CAnimBlendStaticAssociation_FreeSequenceArray = (hCAnimBlendStaticAssociation_FreeSequenceArray)0x4ce9a0 ;
395
397
396
398
void HOOK_FindPlayerCoors ();
397
399
void HOOK_FindPlayerCentreOfWorld ();
@@ -5359,53 +5361,91 @@ void _declspec(naked) HOOK_CEventHandler_ComputeKnockOffBikeResponse ()
5359
5361
}
5360
5362
}
5361
5363
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
+
5367
5376
void _declspec (naked) HOOK_CAnimBlendAssocGroup_CopyAnimation ()
5368
5377
{
5369
5378
_asm
5370
5379
{
5371
- mov pClump, edi
5372
- mov pAnimAssocGroup, ecx
5373
- mov AnimID, eax
5374
5380
pushad
5375
5381
}
5376
5382
5377
5383
if ( m_pAssocGroupCopyAnimationHandler )
5378
5384
{
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
5383
5444
{
5384
5445
popad
5385
5446
mov ecx, [ecx+4 ]
5386
5447
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
5409
5449
}
5410
5450
}
5411
5451
0 commit comments