Skip to content

Commit 62b3d09

Browse files
committed
Created a new AssocGroupCopyAnimation handler
1 parent 1694765 commit 62b3d09

File tree

5 files changed

+40
-25
lines changed

5 files changed

+40
-25
lines changed

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ CClientGame::CClientGame ( bool bLocalPlay )
272272
g_pMultiplayer->SetPreHudRenderHandler ( CClientGame::StaticPreHudRenderHandler );
273273
g_pMultiplayer->SetAddAnimationHandler ( CClientGame::StaticAddAnimationHandler );
274274
g_pMultiplayer->SetAddAnimationAndSyncHandler ( CClientGame::StaticAddAnimationAndSyncHandler );
275+
g_pMultiplayer->SetAssocGroupCopyAnimationHandler ( CClientGame::StaticAssocGroupCopyAnimationHandler );
275276
g_pMultiplayer->SetBlendAnimationHierarchyHandler ( CClientGame::StaticBlendAnimationHierarchyHandler );
276277
g_pMultiplayer->SetProcessCollisionHandler ( CClientGame::StaticProcessCollisionHandler );
277278
g_pMultiplayer->SetVehicleCollisionHandler( CClientGame::StaticVehicleCollisionHandler );
@@ -431,6 +432,7 @@ CClientGame::~CClientGame ( void )
431432
g_pMultiplayer->SetPreHudRenderHandler ( NULL );
432433
g_pMultiplayer->SetAddAnimationHandler ( NULL );
433434
g_pMultiplayer->SetAddAnimationAndSyncHandler ( NULL );
435+
g_pMultiplayer->SetAssocGroupCopyAnimationHandler ( NULL );
434436
g_pMultiplayer->SetBlendAnimationHierarchyHandler ( NULL );
435437
g_pMultiplayer->SetProcessCollisionHandler ( NULL );
436438
g_pMultiplayer->SetVehicleCollisionHandler( NULL );
@@ -3705,6 +3707,11 @@ CAnimBlendAssociationSAInterface * CClientGame::StaticAddAnimationAndSyncHandler
37053707
return g_pClientGame->AddAnimationAndSyncHandler ( pClump, pAnimAssocToSyncWith, animGroup, animID );
37063708
}
37073709

3710+
void CClientGame::StaticAssocGroupCopyAnimationHandler ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID )
3711+
{
3712+
g_pClientGame->AssocGroupCopyAnimationHandler ( pOutAnimStaticAssoc, pClump, pAnimAssocGroup, animID );
3713+
}
3714+
37083715
CAnimBlendHierarchySAInterface * CClientGame::StaticBlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta )
37093716
{
37103717
return g_pClientGame->BlendAnimationHierarchyHandler ( pClump, pAnimHierarchy, flags, fBlendDelta );
@@ -4006,6 +4013,15 @@ CAnimBlendAssociationSAInterface * CClientGame::AddAnimationAndSyncHandler ( RpC
40064013
return nullptr;
40074014
}
40084015

4016+
void CClientGame::AssocGroupCopyAnimationHandler ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID )
4017+
{
4018+
printf ("AssocGroupCopyAnimationHandler called!\n");
4019+
CAnimManager * pAnimationManager = g_pGame->GetAnimManager();
4020+
auto pOriginalAnimStaticAssoc = pAnimationManager->GetAnimStaticAssociation ( pAnimAssocGroup->groupID, animID );
4021+
4022+
*pOutAnimStaticAssoc = *pOriginalAnimStaticAssoc;
4023+
}
4024+
40094025
CAnimBlendHierarchySAInterface * CClientGame::BlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta )
40104026
{
40114027
printf("CClientGame::BlendAnimationHierarchyHandler called | pClump: %p\n", (void*)pClump);

Client/mods/deathmatch/logic/CClientGame.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ class CClientGame
505505
static void StaticPreHudRenderHandler ( void );
506506
static CAnimBlendAssociationSAInterface * StaticAddAnimationHandler ( RpClump * pClump, AssocGroupId animGroup, AnimationId animID );
507507
static CAnimBlendAssociationSAInterface * StaticAddAnimationAndSyncHandler( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID );
508+
static void StaticAssocGroupCopyAnimationHandler ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID );
508509
static CAnimBlendHierarchySAInterface * StaticBlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
509510
static bool StaticProcessCollisionHandler ( CEntitySAInterface* pThisInterface, CEntitySAInterface* pOtherInterface );
510511
static bool StaticVehicleCollisionHandler ( CVehicleSAInterface* pThisInterface, CEntitySAInterface* pOtherInterface, int iModelIndex, float fDamageImpulseMag, float fCollidingDamageImpulseMag, uint16 usPieceType, CVector vecCollisionPos, CVector vecCollisionVelocity );
@@ -537,6 +538,7 @@ class CClientGame
537538
void PostWorldProcessHandler ( void );
538539
CAnimBlendAssociationSAInterface * AddAnimationHandler ( RpClump * pClump, AssocGroupId animGroup, AnimationId animID );
539540
CAnimBlendAssociationSAInterface * AddAnimationAndSyncHandler ( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID );
541+
void AssocGroupCopyAnimationHandler ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID );
540542
CAnimBlendHierarchySAInterface * BlendAnimationHierarchyHandler ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
541543
bool ProcessCollisionHandler ( CEntitySAInterface* pThisInterface, CEntitySAInterface* pOtherInterface );
542544
bool VehicleCollisionHandler ( CVehicleSAInterface* pCollidingVehicle, CEntitySAInterface* pCollidedVehicle, int iModelIndex, float fDamageImpulseMag, float fCollidingDamageImpulseMag, uint16 usPieceType, CVector vecCollisionPos, CVector vecCollisionVelocity );

Client/multiplayer_sa/CMultiplayerSA.cpp

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ PreFxRenderHandler * m_pPreFxRenderHandler = NULL;
378378
PreHudRenderHandler * m_pPreHudRenderHandler = NULL;
379379
AddAnimationHandler* m_pAddAnimationHandler = NULL;
380380
AddAnimationAndSyncHandler* m_pAddAnimationAndSyncHandler = nullptr;
381+
AssocGroupCopyAnimationHandler* m_pAssocGroupCopyAnimationHandler = nullptr;
381382
BlendAnimationHierarchyHandler* m_pBlendAnimationHierarchyHandler = NULL;
382383
ProcessCollisionHandler* m_pProcessCollisionHandler = NULL;
383384
VehicleCollisionHandler* m_pVehicleCollisionHandler = NULL;
@@ -390,6 +391,8 @@ DrivebyAnimationHandler* m_pDrivebyAnimationHandler = NULL;
390391
CEntitySAInterface * dwSavedPlayerPointer = 0;
391392
CEntitySAInterface * activeEntityForStreaming = 0; // the entity that the streaming system considers active
392393

394+
int _cdecl OnCAnimBlendAssocGroupCopyAnimation ( AssocGroupId animGroup, int iAnimId );
395+
393396
void HOOK_FindPlayerCoors();
394397
void HOOK_FindPlayerCentreOfWorld();
395398
void HOOK_FindPlayerHeading();
@@ -2242,6 +2245,11 @@ void CMultiplayerSA::SetAddAnimationAndSyncHandler ( AddAnimationAndSyncHandler
22422245
m_pAddAnimationAndSyncHandler = pHandler;
22432246
}
22442247

2248+
void CMultiplayerSA::SetAssocGroupCopyAnimationHandler ( AssocGroupCopyAnimationHandler * pHandler )
2249+
{
2250+
m_pAssocGroupCopyAnimationHandler = pHandler;
2251+
}
2252+
22452253
void CMultiplayerSA::SetBlendAnimationHierarchyHandler ( BlendAnimationHierarchyHandler * pHandler )
22462254
{
22472255
m_pBlendAnimationHierarchyHandler = pHandler;
@@ -5351,15 +5359,6 @@ void _declspec(naked) HOOK_CEventHandler_ComputeKnockOffBikeResponse ()
53515359
}
53525360
}
53535361

5354-
void CreateAnimStaticAssociation ( CAnimBlendStaticAssociationSAInterface * pAnimStaticAssoc, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, DWORD AnimID )
5355-
{
5356-
DWORD * pdwAnimAssocGroup = reinterpret_cast < DWORD * > ( pAnimAssocGroup );
5357-
auto pOriginalAnimStaticAssoc = (CAnimBlendStaticAssociationSAInterface *)( pdwAnimAssocGroup[1] + 20 * (AnimID - pdwAnimAssocGroup[3]) );
5358-
//auto pAnimStaticAssoc = (CAnimBlendStaticAssociationSAInterface *)malloc ( sizeof(CAnimBlendStaticAssociationSAInterface));
5359-
5360-
*pAnimStaticAssoc = *pOriginalAnimStaticAssoc;
5361-
}
5362-
53635362
CAnimBlendAssocGroupSAInterface * pAnimAssocGroup = nullptr;
53645363
CAnimBlendStaticAssociationSAInterface AnimStaticAssoc;
53655364
CAnimBlendStaticAssociationSAInterface * pAnimStaticAssoc = nullptr;
@@ -5375,9 +5374,11 @@ void _declspec(naked) HOOK_CAnimBlendAssocGroup_CopyAnimation ()
53755374
pushad
53765375
}
53775376

5378-
CreateAnimStaticAssociation ( &AnimStaticAssoc, pAnimAssocGroup, AnimID );
5379-
pAnimStaticAssoc = &AnimStaticAssoc;
5380-
5377+
if ( m_pAssocGroupCopyAnimationHandler )
5378+
{
5379+
m_pAssocGroupCopyAnimationHandler ( &AnimStaticAssoc, pClump, pAnimAssocGroup, AnimID );
5380+
pAnimStaticAssoc = &AnimStaticAssoc;
5381+
}
53815382
_asm
53825383
{
53835384
popad
@@ -5408,14 +5409,6 @@ void _declspec(naked) HOOK_CAnimBlendAssocGroup_CopyAnimation ()
54085409
}
54095410
}
54105411

5411-
int _cdecl OnCAnimBlendAssocGroupCopyAnimation ( CAnimBlendAssocGroupSAInterface* pGroup, int iAnimId );
5412-
5413-
CAnimBlendAssocGroupSAInterface * getAnimAssocGroupInterface ( AssocGroupId animGroup )
5414-
{
5415-
DWORD * pAnimAssocGroupsArray = reinterpret_cast < DWORD * > ( *(DWORD*)0xb4ea34 );
5416-
return reinterpret_cast < CAnimBlendAssocGroupSAInterface * > ( pAnimAssocGroupsArray + 5 * animGroup );
5417-
}
5418-
54195412
CAnimBlendAssocGroupSAInterface * pAnimAssocGroupInterface = nullptr;
54205413

54215414
RpClump * animationClump = NULL;
@@ -5435,8 +5428,7 @@ void _declspec(naked) HOOK_CAnimManager_AddAnimation ()
54355428
pushad
54365429
}
54375430

5438-
pAnimAssocGroupInterface = getAnimAssocGroupInterface ( animationGroup );
5439-
animationID = OnCAnimBlendAssocGroupCopyAnimation ( pAnimAssocGroupInterface, animationID );
5431+
animationID = OnCAnimBlendAssocGroupCopyAnimation ( animationGroup, animationID );
54405432

54415433
if ( m_pAddAnimationHandler )
54425434
{
@@ -5474,8 +5466,7 @@ void _declspec(naked) HOOK_CAnimManager_AddAnimationAndSync ()
54745466
pushad
54755467
}
54765468

5477-
pAnimAssocGroupInterface = getAnimAssocGroupInterface ( animationGroup );
5478-
animationID = OnCAnimBlendAssocGroupCopyAnimation ( pAnimAssocGroupInterface, animationID );
5469+
animationID = OnCAnimBlendAssocGroupCopyAnimation ( animationGroup, animationID );
54795470

54805471
if ( m_pAddAnimationAndSyncHandler )
54815472
{

Client/multiplayer_sa/CMultiplayerSA.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ class CMultiplayerSA : public CMultiplayer
112112
void SetPreHudRenderHandler ( PreHudRenderHandler * pHandler );
113113
void SetAddAnimationHandler ( AddAnimationHandler * pHandler );
114114
void SetAddAnimationAndSyncHandler ( AddAnimationAndSyncHandler * pHandler );
115+
void SetAssocGroupCopyAnimationHandler ( AssocGroupCopyAnimationHandler * pHandler );
115116
void SetBlendAnimationHierarchyHandler ( BlendAnimationHierarchyHandler * pHandler );
116117
void SetProcessCollisionHandler ( ProcessCollisionHandler * pHandler );
117118
void SetVehicleCollisionHandler ( VehicleCollisionHandler * pHandler );

Client/sdk/multiplayer/CMultiplayer.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "CPopulationMP.h"
2121
#include "CLimits.h"
2222
#include <../Client/game_sa/CAnimBlendAssociationSA.h>
23+
#include <../Client/game_sa/CAnimBlendStaticAssociationSA.h>
2324

2425
struct SRwResourceStats
2526
{
@@ -38,6 +39,8 @@ struct SClothesCacheStats
3839
};
3940

4041
class CAnimBlendAssociationSAInterface;
42+
class CAnimBlendStaticAssociationSAInterface;
43+
class CAnimBlendAssocGroupSAInterface;
4144
typedef unsigned long AssocGroupId;
4245
typedef unsigned long AnimationId;
4346

@@ -67,6 +70,7 @@ typedef void ( PreFxRenderHandler ) ( void );
6770
typedef void ( PreHudRenderHandler ) ( void );
6871
typedef CAnimBlendAssociationSAInterface * ( AddAnimationHandler ) ( RpClump * pClump, AssocGroupId animGroup, AnimationId animID );
6972
typedef CAnimBlendAssociationSAInterface * ( AddAnimationAndSyncHandler ) ( RpClump * pClump, CAnimBlendAssociationSAInterface * pAnimAssocToSyncWith, AssocGroupId animGroup, AnimationId animID );
73+
typedef void ( AssocGroupCopyAnimationHandler ) ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID );
7074
typedef CAnimBlendHierarchySAInterface * ( BlendAnimationHierarchyHandler ) ( RpClump * pClump, CAnimBlendHierarchySAInterface * pAnimHierarchy, int flags, float fBlendDelta );
7175
typedef bool ( ProcessCollisionHandler ) ( class CEntitySAInterface* pThisInterface, class CEntitySAInterface* pOtherInterface );
7276
typedef bool ( VehicleCollisionHandler ) ( class CVehicleSAInterface* pCollidingVehicle, class CEntitySAInterface* pCollidedVehicle, int iModelIndex, float fDamageImpulseMag, float fCollidingDamageImpulseMag, uint16 usPieceType, CVector vecCollisionPos, CVector vecCollisionVelocity );
@@ -181,7 +185,8 @@ class CMultiplayer
181185
virtual void SetPreHudRenderHandler ( PreHudRenderHandler * pHandler ) = 0;
182186
virtual void SetAddAnimationHandler ( AddAnimationHandler * pHandler ) = 0;
183187
virtual void SetAddAnimationAndSyncHandler ( AddAnimationAndSyncHandler * pHandler ) = 0;
184-
virtual void SetBlendAnimationHierarchyHandler ( BlendAnimationHierarchyHandler * pHandler ) = 0;
188+
virtual void SetAssocGroupCopyAnimationHandler ( AssocGroupCopyAnimationHandler * pHandler ) = 0;
189+
virtual void SetBlendAnimationHierarchyHandler ( BlendAnimationHierarchyHandler * pHandler ) = 0;
185190
virtual void SetProcessCollisionHandler ( ProcessCollisionHandler * pHandler ) = 0;
186191
virtual void SetVehicleCollisionHandler ( VehicleCollisionHandler * pHandler ) = 0;
187192
virtual void SetVehicleDamageHandler ( VehicleDamageHandler * pHandler ) = 0;

0 commit comments

Comments
 (0)