Skip to content

Commit 5c0f65a

Browse files
committed
Rewrote animation hooks properly in CClientGame and CMultiplayerSA
I renamed BlendAnimation hook to BlendAnimationHierarchy because now it's hooking a different BlendAnimation function that takes an animation hierarchy as argument. Also, I separated AddAnimation and AddAnimationAndSync hooks and their handlers. Now, they work independently. Also, there was a problem with AddAnimationAndSync hook in CMultiplayerSA.cpp, I fixed the return of the hook.
1 parent 1398945 commit 5c0f65a

File tree

5 files changed

+120
-59
lines changed

5 files changed

+120
-59
lines changed

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 73 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,8 @@ CClientGame::CClientGame ( bool bLocalPlay )
270270
g_pMultiplayer->SetPreFxRenderHandler ( CClientGame::StaticPreFxRenderHandler );
271271
g_pMultiplayer->SetPreHudRenderHandler ( CClientGame::StaticPreHudRenderHandler );
272272
g_pMultiplayer->SetAddAnimationHandler ( CClientGame::StaticAddAnimationHandler );
273-
g_pMultiplayer->SetBlendAnimationHandler ( CClientGame::StaticBlendAnimationHandler );
273+
g_pMultiplayer->SetAddAnimationAndSyncHandler ( CClientGame::StaticAddAnimationAndSyncHandler );
274+
g_pMultiplayer->SetBlendAnimationHierarchyHandler ( CClientGame::StaticBlendAnimationHierarchyHandler );
274275
g_pMultiplayer->SetProcessCollisionHandler ( CClientGame::StaticProcessCollisionHandler );
275276
g_pMultiplayer->SetVehicleCollisionHandler( CClientGame::StaticVehicleCollisionHandler );
276277
g_pMultiplayer->SetVehicleDamageHandler ( CClientGame::StaticVehicleDamageHandler );
@@ -428,7 +429,8 @@ CClientGame::~CClientGame ( void )
428429
g_pMultiplayer->SetPreFxRenderHandler ( NULL );
429430
g_pMultiplayer->SetPreHudRenderHandler ( NULL );
430431
g_pMultiplayer->SetAddAnimationHandler ( NULL );
431-
g_pMultiplayer->SetBlendAnimationHandler ( NULL );
432+
g_pMultiplayer->SetAddAnimationAndSyncHandler ( NULL );
433+
g_pMultiplayer->SetBlendAnimationHierarchyHandler ( NULL );
432434
g_pMultiplayer->SetProcessCollisionHandler ( NULL );
433435
g_pMultiplayer->SetVehicleCollisionHandler( NULL );
434436
g_pMultiplayer->SetVehicleDamageHandler( NULL );
@@ -3697,9 +3699,14 @@ CAnimBlendAssociationSAInterface * CClientGame::StaticAddAnimationHandler ( RpCl
36973699
return g_pClientGame->AddAnimationHandler ( pClump, animGroup, animID );
36983700
}
36993701

3700-
CAnimBlendHierarchySAInterface * CClientGame::StaticBlendAnimationHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta )
3702+
CAnimBlendAssociationSAInterface * CClientGame::StaticAddAnimationAndSyncHandler ( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID )
37013703
{
3702-
return g_pClientGame->BlendAnimationHandler ( pClump, pAnimHierarchy, flags, fBlendDelta );
3704+
return g_pClientGame->AddAnimationAndSyncHandler ( pClump, pAnimAssocToSyncWith, animGroup, animID );
3705+
}
3706+
3707+
CAnimBlendHierarchySAInterface * CClientGame::StaticBlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta )
3708+
{
3709+
return g_pClientGame->BlendAnimationHierarchyHandler ( pClump, pAnimHierarchy, flags, fBlendDelta );
37033710
}
37043711

37053712
void CClientGame::StaticPreWorldProcessHandler ( void )
@@ -4002,7 +4009,15 @@ CAnimBlendAssociationSAInterface * CClientGame::AddAnimationHandler ( RpClump *
40024009
int *next; // eax
40034010
DWORD *tempAssoc; // eax
40044011
int *nextAssoc; // ecx
4005-
// We need to remove this line and add some code here for running animations simultaneously
4012+
4013+
CAnimManager * pAnimationManager = g_pGame->GetAnimManager();
4014+
CAnimBlendStaticAssoc * pAnimOriginalStaticAssoc = (CAnimBlendStaticAssoc *)pAnimationManager->GetAnimStaticAssociation ( animGroup, animID );
4015+
4016+
UncompressAnimation ( pAnimOriginalStaticAssoc->m_pAnimBlendHier );
4017+
pAnimAssoc = (CAnimBlendAssoc *)malloc(sizeof(CAnimBlendAssoc));
4018+
OLD_CAnimBlendAssoc_Constructor_staticAssocRef ( pAnimAssoc, *pAnimOriginalStaticAssoc);
4019+
4020+
// We need to remove this line and add some code here for running animations simultaneously
40064021
pAnimAssoc = CAnimBlendAssocGroup_CopyAnimation((DWORD *) (*(DWORD*)0x00B4EA34) + 5 * animGroup, animID);
40074022

40084023
////ofs << "Done calling CAnimBlendAssocGroup_CopyAnimation " << std::endl;
@@ -4050,15 +4065,62 @@ CAnimBlendAssociationSAInterface * CClientGame::AddAnimationHandler ( RpClump *
40504065
return (CAnimBlendAssociationSAInterface *)pAnimAssoc;
40514066
}
40524067

4053-
CAnimBlendHierarchySAInterface * CClientGame::BlendAnimationHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta )
4068+
CAnimBlendAssociationSAInterface * CClientGame::AddAnimationAndSyncHandler ( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID )
4069+
{
4070+
printf ( "AddAnimationAndSyncHandler called! pClump, GroupID, AnimID: %p, %d, %d\n", (void*)pClump, animGroup, animID );
4071+
4072+
hCAnimBlendAssocGroup_CopyAnimation CAnimBlendAssocGroup_CopyAnimation = (hCAnimBlendAssocGroup_CopyAnimation)0x004CE130;
4073+
hUncompressAnimation UncompressAnimation = (hUncompressAnimation)0x4d41c0;
4074+
hCAnimBlendAssoc_Constructor_staticAssocRef OLD_CAnimBlendAssoc_Constructor_staticAssocRef = (hCAnimBlendAssoc_Constructor_staticAssocRef)0x4CF080;
4075+
hCAnimBlendStaticAssoc_Constructor OLD_CAnimBlendStaticAssoc_Constructor = *(hCAnimBlendStaticAssoc_Constructor)0x4CE940;
4076+
hCAnimBlendStaticAssoc_Init OLD_CAnimBlendStaticAssoc_Init = (hCAnimBlendStaticAssoc_Init)0x004CEC20;
4077+
hCAnimBlendAssoc_SyncAnimation CAnimBlendAssoc_SyncAnimation = (hCAnimBlendAssoc_SyncAnimation)0x004CEB40;
4078+
hCAnimBlendAssoc_Start CAnimBlendAssoc_Start = (hCAnimBlendAssoc_Start)0x004CEB70;
4079+
4080+
CAnimBlendAssoc * pAnimAssocToSyncWith2 = (CAnimBlendAssoc *)pAnimAssocToSyncWith;
4081+
CAnimBlendAssoc *pAnimAssoc; // esi
4082+
int *pClumpData; // edi
4083+
DWORD *tempAssoc; // eax
4084+
int nextAssoc; // ecx
4085+
4086+
pAnimAssoc = CAnimBlendAssocGroup_CopyAnimation((DWORD *) (*(DWORD*)0x00B4EA34) + 5 * animGroup, animID);
4087+
pClumpData = *(int **)( (*(DWORD*)0xB5F878) + (int)pClump);
4088+
if ( (*((BYTE *)pAnimAssoc + 46) >> 5) & 1 && pAnimAssocToSyncWith2 )
4089+
{
4090+
CAnimBlendAssoc_SyncAnimation ( pAnimAssoc, pAnimAssocToSyncWith2);
4091+
*((BYTE *)pAnimAssoc + 46) |= 1u;
4092+
}
4093+
else
4094+
{
4095+
CAnimBlendAssoc_Start ( pAnimAssoc, 0);
4096+
}
4097+
4098+
tempAssoc = ((DWORD*)pAnimAssoc) + 1;
4099+
4100+
if ( *pClumpData )
4101+
*(DWORD *)(*pClumpData + 4) = (DWORD)tempAssoc;
4102+
4103+
nextAssoc = *pClumpData;
4104+
4105+
DWORD * dwpAnimAssoc = (DWORD*) pAnimAssoc;
4106+
4107+
dwpAnimAssoc[2] = (DWORD)pClumpData;
4108+
4109+
*tempAssoc = nextAssoc;
4110+
4111+
*pClumpData = (int)tempAssoc;
4112+
return (CAnimBlendAssociationSAInterface *)pAnimAssoc;
4113+
}
4114+
4115+
CAnimBlendHierarchySAInterface * CClientGame::BlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta )
40544116
{
4055-
printf("CClientGame::BlendAnimationHandler called | pClump: %p\n", (void*)pClump);
4117+
printf("CClientGame::BlendAnimationHierarchyHandler called | pClump: %p\n", (void*)pClump);
40564118

40574119
CAnimManager * pAnimationManager = g_pGame->GetAnimManager();
40584120
CClientPed * pClientPed = GetClientPedByClump ( *pClump ); //pAnimationManager->GetPedPointerFromMap ( pClump ); //m_pRootEntity->GetClientPedByClump ( *pClump );
40594121
if ( pClientPed != nullptr )
40604122
{
4061-
printf ("BlendAnimationHandler: Found pClientPed\n");
4123+
printf ("BlendAnimationHierarchyHandler: Found pClientPed\n");
40624124
if ( pClientPed->isNextAnimationCustom () )
40634125
{
40644126
const SString & strBlockName = pClientPed->GetNextAnimationCustomBlockName ( );
@@ -4069,7 +4131,7 @@ CAnimBlendHierarchySAInterface * CClientGame::BlendAnimationHandler ( RpClump *
40694131
auto pCustomAnimBlendHierarchy = pIFP->GetAnimationHierarchy ( strAnimationName );
40704132
if ( pCustomAnimBlendHierarchy != nullptr )
40714133
{
4072-
printf ("BlendAnimationHandler: Found Hierarchy, returning \n");
4134+
printf ("BlendAnimationHierarchyHandler: Found Hierarchy, returning \n");
40734135

40744136
pClientPed->setCurrentAnimationCustom ( true );
40754137

@@ -4082,12 +4144,12 @@ CAnimBlendHierarchySAInterface * CClientGame::BlendAnimationHandler ( RpClump *
40824144
}
40834145
else
40844146
{
4085-
printf ("BlendAnimationHandler: could not find IFP animation hierarchy '%s'\n", strAnimationName.c_str());
4147+
printf ("BlendAnimationHierarchyHandler: could not find IFP animation hierarchy '%s'\n", strAnimationName.c_str());
40864148
}
40874149
}
40884150
else
40894151
{
4090-
printf("BlendAnimationHandler: could not find IFP block name '%s'\n", strBlockName.c_str());
4152+
printf("BlendAnimationHierarchyHandler: could not find IFP block name '%s'\n", strBlockName.c_str());
40914153
}
40924154
}
40934155
else

Client/mods/deathmatch/logic/CClientGame.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,8 @@ class CClientGame
504504
static void StaticPreFxRenderHandler ( void );
505505
static void StaticPreHudRenderHandler ( void );
506506
static CAnimBlendAssociationSAInterface * StaticAddAnimationHandler ( RpClump * pClump, AssocGroupId animGroup, AnimationId animID );
507-
static CAnimBlendHierarchySAInterface * StaticBlendAnimationHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
507+
static CAnimBlendAssociationSAInterface * StaticAddAnimationAndSyncHandler( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID );
508+
static CAnimBlendHierarchySAInterface * StaticBlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
508509
static bool StaticProcessCollisionHandler ( CEntitySAInterface* pThisInterface, CEntitySAInterface* pOtherInterface );
509510
static bool StaticVehicleCollisionHandler ( CVehicleSAInterface* pThisInterface, CEntitySAInterface* pOtherInterface, int iModelIndex, float fDamageImpulseMag, float fCollidingDamageImpulseMag, uint16 usPieceType, CVector vecCollisionPos, CVector vecCollisionVelocity );
510511
static bool StaticVehicleDamageHandler ( CEntitySAInterface* pVehicleInterface, float fLoss, CEntitySAInterface* pAttackerInterface, eWeaponType weaponType, const CVector& vecDamagePos, uchar ucTyre );
@@ -535,7 +536,8 @@ class CClientGame
535536
void PreWorldProcessHandler ( void );
536537
void PostWorldProcessHandler ( void );
537538
CAnimBlendAssociationSAInterface * AddAnimationHandler ( RpClump * pClump, AssocGroupId animGroup, AnimationId animID );
538-
CAnimBlendHierarchySAInterface * BlendAnimationHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
539+
CAnimBlendAssociationSAInterface * AddAnimationAndSyncHandler ( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID );
540+
CAnimBlendHierarchySAInterface * BlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
539541
bool ProcessCollisionHandler ( CEntitySAInterface* pThisInterface, CEntitySAInterface* pOtherInterface );
540542
bool VehicleCollisionHandler ( CVehicleSAInterface* pCollidingVehicle, CEntitySAInterface* pCollidedVehicle, int iModelIndex, float fDamageImpulseMag, float fCollidingDamageImpulseMag, uint16 usPieceType, CVector vecCollisionPos, CVector vecCollisionVelocity );
541543
bool VehicleDamageHandler ( CEntitySAInterface* pVehicleInterface, float fLoss, CEntitySAInterface* pAttackerInterface, eWeaponType weaponType, const CVector& vecDamagePos, uchar ucTyre );

Client/multiplayer_sa/CMultiplayerSA.cpp

Lines changed: 35 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,13 @@ DWORD RETURN_CPlantMgr_Render_fail = 0x5DBDAA;
156156
DWORD RETURN_CEventHandler_ComputeKnockOffBikeResponse = 0x4BA076;
157157

158158
#define HOOKPOS_CAnimManager_AddAnimation 0x4d3aa0
159-
DWORD RETURN_CAnimManager_AddAnimation = 0x004D3B16; //0x4D3AAA;
159+
DWORD RETURN_CAnimManager_AddAnimation = 0x4D3AAA;
160+
DWORD RETURN_CAnimManager_AddAnimationEND = 0x4D3B16;
160161
DWORD RETURN_CAnimManager_AddAnimation_SkipCopyAnimation = 0x4D3ABC;
161162

162163
#define HOOKPOS_CAnimManager_AddAnimationAndSync 0x4D3B30
163164
DWORD RETURN_CAnimManager_AddAnimationAndSync = 0x4D3B3A;
165+
DWORD RETURN_CAnimManager_AddAnimationAndSyncEND = 0x4D3B9E;
164166
DWORD RETURN_CAnimManager_AddAnimationAndSync_SkipCopyAnimation = 0x4D3B4C;
165167

166168
#define HOOKPOS_CAnimManager_BlendAnimation_Hierarchy 0x4D4410 //0x4D4425
@@ -366,7 +368,8 @@ IdleHandler * m_pIdleHandler = NULL;
366368
PreFxRenderHandler * m_pPreFxRenderHandler = NULL;
367369
PreHudRenderHandler * m_pPreHudRenderHandler = NULL;
368370
AddAnimationHandler* m_pAddAnimationHandler = NULL;
369-
BlendAnimationHandler* m_pBlendAnimationHandler = NULL;
371+
AddAnimationAndSyncHandler* m_pAddAnimationAndSyncHandler = nullptr;
372+
BlendAnimationHierarchyHandler* m_pBlendAnimationHierarchyHandler = NULL;
370373
ProcessCollisionHandler* m_pProcessCollisionHandler = NULL;
371374
VehicleCollisionHandler* m_pVehicleCollisionHandler = NULL;
372375
HeliKillHandler* m_pHeliKillHandler = NULL;
@@ -637,7 +640,7 @@ void CMultiplayerSA::InitHooks()
637640
HookInstall(HOOKPOS_Idle, (DWORD)HOOK_Idle, 10 );
638641
HookInstall(HOOKPOS_CEventHandler_ComputeKnockOffBikeResponse, (DWORD)HOOK_CEventHandler_ComputeKnockOffBikeResponse, 7 );
639642
HookInstall(HOOKPOS_CAnimManager_AddAnimation, (DWORD)HOOK_CAnimManager_AddAnimation, 10 );
640-
//HookInstall(HOOKPOS_CAnimManager_AddAnimationAndSync, (DWORD)HOOK_CAnimManager_AddAnimationAndSync, 10 );
643+
HookInstall(HOOKPOS_CAnimManager_AddAnimationAndSync, (DWORD)HOOK_CAnimManager_AddAnimationAndSync, 10 );
641644
HookInstall(HOOKPOS_CAnimManager_BlendAnimation_Hierarchy, (DWORD)HOOK_CAnimManager_BlendAnimation_Hierarchy, 7 );
642645
HookInstall(HOOKPOS_CPed_GetWeaponSkill, (DWORD)HOOK_CPed_GetWeaponSkill, 8 );
643646
HookInstall(HOOKPOS_CPed_AddGogglesModel, (DWORD)HOOK_CPed_AddGogglesModel, 6);
@@ -2223,9 +2226,14 @@ void CMultiplayerSA::SetAddAnimationHandler ( AddAnimationHandler * pHandler )
22232226
m_pAddAnimationHandler = pHandler;
22242227
}
22252228

2226-
void CMultiplayerSA::SetBlendAnimationHandler ( BlendAnimationHandler * pHandler )
2229+
void CMultiplayerSA::SetAddAnimationAndSyncHandler ( AddAnimationAndSyncHandler * pHandler )
22272230
{
2228-
m_pBlendAnimationHandler = pHandler;
2231+
m_pAddAnimationAndSyncHandler = pHandler;
2232+
}
2233+
2234+
void CMultiplayerSA::SetBlendAnimationHierarchyHandler ( BlendAnimationHierarchyHandler * pHandler )
2235+
{
2236+
m_pBlendAnimationHierarchyHandler = pHandler;
22292237
}
22302238

22312239
void CMultiplayerSA::SetProcessCollisionHandler ( ProcessCollisionHandler * pHandler )
@@ -5353,26 +5361,22 @@ void _declspec(naked) HOOK_CAnimManager_AddAnimation ()
53535361
if ( m_pAddAnimationHandler )
53545362
{
53555363
pAnimAssociation = m_pAddAnimationHandler ( animationClump, animationGroup, animationID );
5356-
}
53575364

5358-
/*
5359-
// As we are manually creating animation association, so skip CopyAnimation call
5360-
_asm
5361-
{
5362-
popad
5363-
push esi
5364-
push edi
5365-
mov eax, pAnimAssociation
5366-
jmp RETURN_CAnimManager_AddAnimation_SkipCopyAnimation
5367-
} */
5365+
_asm
5366+
{
5367+
popad
5368+
mov eax, pAnimAssociation
5369+
jmp RETURN_CAnimManager_AddAnimationEND
5370+
}
5371+
}
53685372

5369-
// As we are manually creating animation association, so skip CopyAnimation call
53705373
_asm
53715374
{
53725375
popad
5373-
mov eax, pAnimAssociation
5376+
mov eax,dword ptr [esp+0Ch]
5377+
mov edx,dword ptr ds:[0B4EA34h]
53745378
jmp RETURN_CAnimManager_AddAnimation
5375-
}
5379+
}
53765380
}
53775381

53785382

@@ -5392,35 +5396,25 @@ void _declspec(naked) HOOK_CAnimManager_AddAnimationAndSync ()
53925396
pushad
53935397
}
53945398

5395-
if ( m_pAddAnimationHandler )
5396-
{
5397-
pAnimAssociation = m_pAddAnimationHandler ( animationClump, animationGroup, animationID );
5398-
}
5399-
else
5399+
if ( m_pAddAnimationAndSyncHandler )
54005400
{
5401-
// This will avoid crash if m_pAddAnimationHandler is removed
5402-
// continue the normal flow of AddAnimationAndSync function, instead of skipping CopyAnimation
5401+
pAnimAssociation = m_pAddAnimationAndSyncHandler ( animationClump, pAnimAssociationToSyncWith, animationGroup, animationID );
54035402

5404-
_asm
5403+
_asm
54055404
{
54065405
popad
5407-
mov eax,dword ptr [esp+0Ch]
5408-
mov edx,dword ptr ds:[0B4EA34h]
5409-
jmp RETURN_CAnimManager_AddAnimationAndSync
5410-
}
5406+
mov eax, pAnimAssociation
5407+
jmp RETURN_CAnimManager_AddAnimationAndSyncEND
5408+
}
54115409
}
54125410

5413-
printf("HOOK_CAnimManager_AddAnimationAndSync: m_nAnimGroup: %d | m_nAnimID: %d\n\n", pAnimAssociation->sAnimGroup, pAnimAssociation->sAnimID);
5414-
5415-
// As we are manually creating animation association, so skip CopyAnimation call
54165411
_asm
54175412
{
54185413
popad
5419-
push esi
5420-
push edi
5421-
mov eax, pAnimAssociation
5422-
jmp RETURN_CAnimManager_AddAnimationAndSync_SkipCopyAnimation
5423-
}
5414+
mov eax,dword ptr [esp+10h]
5415+
mov edx,dword ptr ds:[0B4EA34h]
5416+
jmp RETURN_CAnimManager_AddAnimationAndSync
5417+
}
54245418
}
54255419

54265420
#include <../game_sa/CAnimBlendHierarchySA.h> // ---------------- REMOVE THIS LATER
@@ -5443,9 +5437,9 @@ void _declspec(naked) HOOK_CAnimManager_BlendAnimation_Hierarchy ()
54435437
pushad
54445438
}
54455439

5446-
if ( m_pBlendAnimationHandler )
5440+
if ( m_pBlendAnimationHierarchyHandler )
54475441
{
5448-
pAnimHierarchy = m_pBlendAnimationHandler ( animationClump, pAnimHierarchy, flags, animationBlendDelta );
5442+
pAnimHierarchy = m_pBlendAnimationHierarchyHandler ( animationClump, pAnimHierarchy, flags, animationBlendDelta );
54495443
}
54505444

54515445
printf ("BlendAnimation_Hierarchy_Hook, pAnimHierarchy->usNumSequences: %d\n\n", pAnimHierarchy->usNumSequences);

Client/multiplayer_sa/CMultiplayerSA.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ class CMultiplayerSA : public CMultiplayer
111111
void SetPreFxRenderHandler ( PreFxRenderHandler * pHandler );
112112
void SetPreHudRenderHandler ( PreHudRenderHandler * pHandler );
113113
void SetAddAnimationHandler ( AddAnimationHandler * pHandler );
114-
void SetBlendAnimationHandler ( BlendAnimationHandler * pHandler );
114+
void SetAddAnimationAndSyncHandler ( AddAnimationAndSyncHandler * pHandler );
115+
void SetBlendAnimationHierarchyHandler ( BlendAnimationHierarchyHandler * pHandler );
115116
void SetProcessCollisionHandler ( ProcessCollisionHandler * pHandler );
116117
void SetVehicleCollisionHandler ( VehicleCollisionHandler * pHandler );
117118
void SetVehicleDamageHandler ( VehicleDamageHandler * pHandler );
@@ -280,8 +281,8 @@ class CMultiplayerSA : public CMultiplayer
280281
float m_fAircraftMaxVelocity_Sq;
281282
bool m_bHeatHazeEnabled;
282283
bool m_bHeatHazeCustomized;
283-
float m_fNearClipDistance;
284-
float m_fMaddDoggPoolLevel;
284+
float m_fNearClipDistance;
285+
float m_fMaddDoggPoolLevel;
285286

286287
/* VOID SetPlayerShotVectors(CPlayerPed* player, Vector3D * vecTarget, Vector3D * vecStart);
287288
VOID SetPlayerCameraVectors(CPlayerPed* player, Vector3D * vecSource, Vector3D * vecFront);

0 commit comments

Comments
 (0)