Skip to content

Commit bd58fa4

Browse files
committed
Static association is created and destroyed within CopyAnimation hook
1 parent 1ad24fe commit bd58fa4

File tree

1 file changed

+74
-34
lines changed

1 file changed

+74
-34
lines changed

Client/multiplayer_sa/CMultiplayerSA.cpp

Lines changed: 74 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ DWORD FUNC_NEW_OPERATOR = 0x082119A;
164164
DWORD FUNC_CAnimBlendAssociation_Constructor = 0x04CF080;
165165

166166
#define HOOKPOS_CAnimBlendAssocGroup_CopyAnimation 0x4CE14C
167+
DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_NORMALFLOW =0x4CE151;
167168
DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation = 0x4CE187;
168169
DWORD RETURN_CAnimBlendAssocGroup_CopyAnimation_ERROR = 0x4CE199;
169170

@@ -392,6 +393,7 @@ CEntitySAInterface * dwSavedPlayerPointer = 0;
392393
CEntitySAInterface * activeEntityForStreaming = 0; // the entity that the streaming system considers active
393394

394395
int _cdecl OnCAnimBlendAssocGroupCopyAnimation ( AssocGroupId animGroup, int iAnimId );
396+
auto CAnimBlendStaticAssociation_FreeSequenceArray = (hCAnimBlendStaticAssociation_FreeSequenceArray)0x4ce9a0;
395397

396398
void HOOK_FindPlayerCoors();
397399
void 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+
53675376
void _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

Comments
 (0)