Redid the backup activity system so that individual weapons can choose which activity tables to fall back to

This commit is contained in:
Blixibon 2021-10-10 19:56:40 -05:00
parent 3431f21f4d
commit b9f3ac03fa
9 changed files with 77 additions and 20 deletions

View File

@ -61,11 +61,6 @@
extern int g_interactionBarnacleVictimReleased; extern int g_interactionBarnacleVictimReleased;
#endif //HL2_DLL #endif //HL2_DLL
#ifdef MAPBASE
extern acttable_t *GetSMG1Acttable();
extern int GetSMG1ActtableCount();
#endif
extern ConVar weapon_showproficiency; extern ConVar weapon_showproficiency;
ConVar ai_show_hull_attacks( "ai_show_hull_attacks", "0" ); ConVar ai_show_hull_attacks( "ai_show_hull_attacks", "0" );
@ -2751,19 +2746,22 @@ Activity CBaseCombatCharacter::Weapon_BackupActivity( Activity activity, bool we
return activity; return activity;
} }
acttable_t *pTable = GetSMG1Acttable(); acttable_t *pTable = pWeapon->GetBackupActivityList();
int actCount = GetSMG1ActtableCount(); if (pTable)
for ( int i = 0; i < actCount; i++, pTable++ )
{ {
if ( activity == pTable->baseAct ) int actCount = pWeapon->GetBackupActivityListCount();
for ( int i = 0; i < actCount; i++, pTable++ )
{ {
// Don't pick SMG animations we don't actually have an animation for. if ( activity == pTable->baseAct )
if (GetModelPtr() ? !GetModelPtr()->HaveSequenceForActivity(pTable->weaponAct) : false)
{ {
return activity; // Don't pick SMG animations we don't actually have an animation for.
} if (GetModelPtr() ? !GetModelPtr()->HaveSequenceForActivity(pTable->weaponAct) : false)
{
return activity;
}
return (Activity)pTable->weaponAct; return (Activity)pTable->weaponAct;
}
} }
} }

View File

@ -27,6 +27,11 @@
// CWeapon357 // CWeapon357
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#ifdef MAPBASE
extern acttable_t *GetPistolActtable();
extern int GetPistolActtableCount();
#endif
class CWeapon357 : public CBaseHLCombatWeapon class CWeapon357 : public CBaseHLCombatWeapon
{ {
DECLARE_CLASS( CWeapon357, CBaseHLCombatWeapon ); DECLARE_CLASS( CWeapon357, CBaseHLCombatWeapon );
@ -69,6 +74,9 @@ public:
void FireNPCPrimaryAttack( CBaseCombatCharacter *pOperator, Vector &vecShootOrigin, Vector &vecShootDir ); void FireNPCPrimaryAttack( CBaseCombatCharacter *pOperator, Vector &vecShootOrigin, Vector &vecShootDir );
void Operator_ForceNPCFire( CBaseCombatCharacter *pOperator, bool bSecondary ); void Operator_ForceNPCFire( CBaseCombatCharacter *pOperator, bool bSecondary );
virtual acttable_t *GetBackupActivityList() { return GetPistolActtable(); }
virtual int GetBackupActivityListCount() { return GetPistolActtableCount(); }
#endif #endif
DECLARE_SERVERCLASS(); DECLARE_SERVERCLASS();

View File

@ -13,6 +13,11 @@
#pragma once #pragma once
#endif #endif
#ifdef MAPBASE
extern acttable_t *GetPistolActtable();
extern int GetPistolActtableCount();
#endif
class CWeaponAlyxGun : public CHLSelectFireMachineGun class CWeaponAlyxGun : public CHLSelectFireMachineGun
{ {
DECLARE_DATADESC(); DECLARE_DATADESC();
@ -51,6 +56,11 @@ public:
SetTouch(NULL); SetTouch(NULL);
} }
#ifdef MAPBASE
virtual acttable_t *GetBackupActivityList() { return GetPistolActtable(); }
virtual int GetBackupActivityListCount() { return GetPistolActtableCount(); }
#endif
float m_flTooCloseTimer; float m_flTooCloseTimer;
DECLARE_ACTTABLE(); DECLARE_ACTTABLE();

View File

@ -38,10 +38,6 @@ ConVar sk_weapon_ar2_alt_fire_radius( "sk_weapon_ar2_alt_fire_radius", "10" );
ConVar sk_weapon_ar2_alt_fire_duration( "sk_weapon_ar2_alt_fire_duration", "2" ); ConVar sk_weapon_ar2_alt_fire_duration( "sk_weapon_ar2_alt_fire_duration", "2" );
ConVar sk_weapon_ar2_alt_fire_mass( "sk_weapon_ar2_alt_fire_mass", "150" ); ConVar sk_weapon_ar2_alt_fire_mass( "sk_weapon_ar2_alt_fire_mass", "150" );
#ifdef MAPBASE
extern acttable_t *GetSMG1Acttable();
#endif
//========================================================= //=========================================================
//========================================================= //=========================================================

View File

@ -46,6 +46,12 @@ public:
// Animation event // Animation event
virtual void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator ); virtual void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator );
#ifdef MAPBASE
// Don't use backup activities
acttable_t *GetBackupActivityList() { return NULL; }
int GetBackupActivityListCount() { return 0; }
#endif
private: private:
// Animation event handlers // Animation event handlers
void HandleAnimEventMeleeHit( animevent_t *pEvent, CBaseCombatCharacter *pOperator ); void HandleAnimEventMeleeHit( animevent_t *pEvent, CBaseCombatCharacter *pOperator );

View File

@ -108,6 +108,12 @@ public:
return 0.5f; return 0.5f;
} }
#ifdef MAPBASE
// Pistols are their own backup activities
virtual acttable_t *GetBackupActivityList() { return NULL; }
virtual int GetBackupActivityListCount() { return 0; }
#endif
DECLARE_ACTTABLE(); DECLARE_ACTTABLE();
private: private:

View File

@ -1077,6 +1077,11 @@ WeaponClass_t CBaseCombatWeapon::WeaponClassFromString(const char *str)
return WEPCLASS_INVALID; return WEPCLASS_INVALID;
} }
#ifdef HL2_DLL
extern acttable_t *GetSMG1Acttable();
extern int GetSMG1ActtableCount();
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Purpose: // Purpose:
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -1084,12 +1089,32 @@ bool CBaseCombatWeapon::SupportsBackupActivity(Activity activity)
{ {
// Derived classes should override this. // Derived classes should override this.
// Pistol and melee users should not use SMG animations for missing pistol activities. #ifdef HL2_DLL
if (WeaponClassify() == WEPCLASS_HANDGUN || IsMeleeWeapon()) // Melee users should not use SMG animations for missing activities.
if (IsMeleeWeapon() && GetBackupActivityList() == GetSMG1Acttable())
return false; return false;
#endif
return true; return true;
} }
acttable_t *CBaseCombatWeapon::GetBackupActivityList()
{
#ifdef HL2_DLL
return GetSMG1Acttable();
#else
return NULL;
#endif
}
int CBaseCombatWeapon::GetBackupActivityListCount()
{
#ifdef HL2_DLL
return GetSMG1ActtableCount();
#else
return 0;
#endif
}
#endif #endif

View File

@ -230,6 +230,8 @@ public:
static WeaponClass_t WeaponClassFromString(const char *str); static WeaponClass_t WeaponClassFromString(const char *str);
virtual bool SupportsBackupActivity(Activity activity); virtual bool SupportsBackupActivity(Activity activity);
virtual acttable_t *GetBackupActivityList();
virtual int GetBackupActivityListCount();
#endif #endif
virtual void Equip( CBaseCombatCharacter *pOwner ); virtual void Equip( CBaseCombatCharacter *pOwner );

View File

@ -83,6 +83,12 @@ public:
float GetDamageForActivity( Activity hitActivity ); float GetDamageForActivity( Activity hitActivity );
#ifdef MAPBASE
// Don't use backup activities
acttable_t *GetBackupActivityList() { return NULL; }
int GetBackupActivityListCount() { return 0; }
#endif
CWeaponStunStick( const CWeaponStunStick & ); CWeaponStunStick( const CWeaponStunStick & );
private: private: