summaryrefslogtreecommitdiff
path: root/game/shared/dod/weapon_dodbase.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/dod/weapon_dodbase.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/dod/weapon_dodbase.h')
-rw-r--r--game/shared/dod/weapon_dodbase.h403
1 files changed, 403 insertions, 0 deletions
diff --git a/game/shared/dod/weapon_dodbase.h b/game/shared/dod/weapon_dodbase.h
new file mode 100644
index 0000000..51cf97e
--- /dev/null
+++ b/game/shared/dod/weapon_dodbase.h
@@ -0,0 +1,403 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef WEAPON_DODBASE_H
+#define WEAPON_DODBASE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "dod_playeranimstate.h"
+#include "dod_weapon_parse.h"
+
+#if defined( CLIENT_DLL )
+ #define CWeaponDODBase C_WeaponDODBase
+#endif
+
+extern int AliasToWeaponID( const char *alias );
+extern const char *WeaponIDToAlias( int id );
+extern bool IsPrimaryWeapon( int id );
+extern bool IsSecondaryWeapon( int id );
+
+class CDODPlayer;
+
+// These are the names of the ammo types that go in the CAmmoDefs and that the
+// weapon script files reference.
+
+#define DOD_AMMO_SUBMG "DOD_AMMO_SUBMG"
+#define DOD_AMMO_ROCKET "DOD_AMMO_ROCKET"
+#define DOD_AMMO_COLT "DOD_AMMO_COLT"
+#define DOD_AMMO_P38 "DOD_AMMO_P38"
+#define DOD_AMMO_C96 "DOD_AMMO_C96"
+#define DOD_AMMO_WEBLEY "DOD_AMMO_WEBLEY"
+#define DOD_AMMO_GARAND "DOD_AMMO_GARAND"
+#define DOD_AMMO_K98 "DOD_AMMO_K98"
+#define DOD_AMMO_M1CARBINE "DOD_AMMO_M1CARBINE"
+#define DOD_AMMO_ENFIELD "DOD_AMMO_ENFIELD"
+#define DOD_AMMO_SPRING "DOD_AMMO_SPRING"
+#define DOD_AMMO_FG42 "DOD_AMMO_FG42"
+#define DOD_AMMO_BREN "DOD_AMMO_BREN"
+#define DOD_AMMO_BAR "DOD_AMMO_BAR"
+#define DOD_AMMO_30CAL "DOD_AMMO_30CAL"
+#define DOD_AMMO_MG34 "DOD_AMMO_MG34"
+#define DOD_AMMO_MG42 "DOD_AMMO_MG42"
+#define DOD_AMMO_HANDGRENADE "DOD_AMMO_HANDGRENADE"
+#define DOD_AMMO_HANDGRENADE_EX "DOD_AMMO_HANDGRENADE_EX" // the EX is for EXploding! :)
+#define DOD_AMMO_STICKGRENADE "DOD_AMMO_STICKGRENADE"
+#define DOD_AMMO_STICKGRENADE_EX "DOD_AMMO_STICKGRENADE_EX"
+#define DOD_AMMO_SMOKEGRENADE_US "DOD_AMMO_SMOKEGRENADE_US"
+#define DOD_AMMO_SMOKEGRENADE_GER "DOD_AMMO_SMOKEGRENADE_GER"
+#define DOD_AMMO_SMOKEGRENADE_US_LIVE "DOD_AMMO_SMOKEGRENADE_US_LIVE"
+#define DOD_AMMO_SMOKEGRENADE_GER_LIVE "DOD_AMMO_SMOKEGRENADE_GER_LIVE"
+#define DOD_AMMO_RIFLEGRENADE_US "DOD_AMMO_RIFLEGRENADE_US"
+#define DOD_AMMO_RIFLEGRENADE_GER "DOD_AMMO_RIFLEGRENADE_GER"
+#define DOD_AMMO_RIFLEGRENADE_US_LIVE "DOD_AMMO_RIFLEGRENADE_US_LIVE"
+#define DOD_AMMO_RIFLEGRENADE_GER_LIVE "DOD_AMMO_RIFLEGRENADE_GER_LIVE"
+
+
+
+#define CROSSHAIR_CONTRACT_PIXELS_PER_SECOND 7.0f
+
+// Given an ammo type (like from a weapon's GetPrimaryAmmoType()), this compares it
+// against the ammo name you specify.
+// MIKETODO: this should use indexing instead of searching and strcmp()'ing all the time.
+bool IsAmmoType( int iAmmoType, const char *pAmmoName );
+
+
+typedef enum
+{
+ WEAPON_NONE = 0,
+
+ //Melee
+ WEAPON_AMERKNIFE,
+ WEAPON_SPADE,
+
+ //Pistols
+ WEAPON_COLT,
+ WEAPON_P38,
+ WEAPON_C96,
+
+ //Rifles
+ WEAPON_GARAND,
+ WEAPON_M1CARBINE,
+ WEAPON_K98,
+
+ //Sniper Rifles
+ WEAPON_SPRING,
+ WEAPON_K98_SCOPED,
+
+ //SMG
+ WEAPON_THOMPSON,
+ WEAPON_MP40,
+ WEAPON_MP44,
+ WEAPON_BAR,
+
+ //Machine guns
+ WEAPON_30CAL,
+ WEAPON_MG42,
+
+ //Rocket weapons
+ WEAPON_BAZOOKA,
+ WEAPON_PSCHRECK,
+
+ //Grenades
+ WEAPON_FRAG_US,
+ WEAPON_FRAG_GER,
+
+ WEAPON_FRAG_US_LIVE,
+ WEAPON_FRAG_GER_LIVE,
+
+ WEAPON_SMOKE_US,
+ WEAPON_SMOKE_GER,
+
+ WEAPON_RIFLEGREN_US,
+ WEAPON_RIFLEGREN_GER,
+
+ WEAPON_RIFLEGREN_US_LIVE,
+ WEAPON_RIFLEGREN_GER_LIVE,
+
+ // not actually separate weapons, but defines used in stats recording
+ // find a better way to do this without polluting the list of actual weapons.
+ WEAPON_THOMPSON_PUNCH,
+ WEAPON_MP40_PUNCH,
+
+ WEAPON_GARAND_ZOOMED,
+ WEAPON_K98_ZOOMED,
+ WEAPON_SPRING_ZOOMED,
+ WEAPON_K98_SCOPED_ZOOMED,
+
+ WEAPON_30CAL_UNDEPLOYED,
+ WEAPON_MG42_UNDEPLOYED,
+
+ WEAPON_BAR_SEMIAUTO,
+ WEAPON_MP44_SEMIAUTO,
+
+ WEAPON_MAX, // number of weapons weapon index
+
+} DODWeaponID;
+
+
+//Class Heirarchy for dod weapons
+
+/*
+
+ CWeaponDODBase
+ |
+ |
+ |--> CWeaponDODBaseMelee
+ | |
+ | |--> CWeaponSpade
+ | |--> CWeaponUSKnife
+ |
+ |--> CWeaponDODBaseGrenade
+ | |
+ | |--> CWeaponHandgrenade
+ | |--> CWeaponStickGrenade
+ | |--> CWeaponSmokeGrenadeUS
+ | |--> CWeaponSmokeGrenadeGER
+ |
+ |--> CWeaponBaseRifleGrenade
+ | |
+ | |--> CWeaponRifleGrenadeUS
+ | |--> CWeaponRifleGrenadeGER
+ |
+ |--> CDODBaseRocketWeapon
+ | |
+ | |--> CWeaponBazooka
+ | |--> CWeaponPschreck
+ |
+ |--> CWeaponDODBaseGun
+ |
+ |--> CDODFullAutoWeapon
+ | |
+ | |--> CWeaponC96
+ | |
+ | |--> CDODFullAutoPunchWeapon
+ | | |
+ | | |--> CWeaponThompson
+ | | |--> CWeaponMP40
+ | |
+ | |--> CDODBipodWeapon
+ | |
+ | |-> CWeapon30Cal
+ | |-> CWeaponMG42
+ |
+ |--> CDODFireSelectWeapon
+ | |
+ | |--> CWeaponMP44
+ | |--> CWeaponBAR
+ |
+ |
+ |--> CDODSemiAutoWeapon
+ |
+ |--> CWeaponColt
+ |--> CWeaponP38
+ |--> CWeaponM1Carbine
+ |--> CDODSniperWeapon
+ |
+ |--> CWeaponSpring
+ |--> CWeaponScopedK98
+ |--> CWeaponGarand
+ |--> CWeaponK98
+
+*/
+
+void FindHullIntersection( const Vector &vecSrc, trace_t &tr, const Vector &mins, const Vector &maxs, CBaseEntity *pEntity );
+
+typedef enum
+{
+ Primary_Mode = 0,
+ Secondary_Mode,
+} DODWeaponMode;
+
+
+class CWeaponDODBase : public CBaseCombatWeapon
+{
+public:
+ DECLARE_CLASS( CWeaponDODBase, CBaseCombatWeapon );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ CWeaponDODBase();
+
+ #ifdef GAME_DLL
+ DECLARE_DATADESC();
+
+ virtual void CheckRespawn();
+ virtual CBaseEntity* Respawn();
+
+ virtual const Vector& GetBulletSpread();
+ virtual float GetDefaultAnimSpeed();
+
+ virtual void ItemBusyFrame();
+ virtual bool ShouldRemoveOnRoundRestart();
+
+ void Materialize();
+ void AttemptToMaterialize();
+
+ #else
+
+ void PlayWorldReloadSound( CDODPlayer *pPlayer );
+
+ #endif
+
+ virtual bool DefaultReload( int iClipSize1, int iClipSize2, int iActivity );
+
+ virtual bool Holster( CBaseCombatWeapon *pSwitchingTo );
+ virtual void Drop( const Vector &vecVelocity );
+ virtual void AddViewmodelBob( CBaseViewModel *viewmodel, Vector &origin, QAngle &angles );
+ virtual float CalcViewmodelBob( void );
+ // All predicted weapons need to implement and return true
+ virtual bool IsPredicted() const;
+
+ virtual int ObjectCaps( void ) { return BaseClass::ObjectCaps() | FCAP_USE_IN_RADIUS; }
+
+ CBasePlayer* GetPlayerOwner() const;
+ CDODPlayer* GetDODPlayerOwner() const;
+
+ virtual void WeaponIdle( void );
+ virtual Activity GetIdleActivity( void );
+
+ // Get DOD-specific weapon data.
+ CDODWeaponInfo const &GetDODWpnData() const;
+
+ // Get specific DOD weapon ID (ie: WEAPON_GARAND, etc)
+ virtual DODWeaponID GetWeaponID( void ) const { return WEAPON_NONE; }
+ virtual DODWeaponID GetStatsWeaponID( void ) { return GetWeaponID(); }
+ virtual DODWeaponID GetAltWeaponID( void ) const { return WEAPON_NONE; }
+
+ // return true if this weapon is an instance of the given weapon type (ie: "IsA" WEAPON_GLOCK)
+ bool IsA( DODWeaponID id ) const { return GetWeaponID() == id; }
+
+ // return true if this weapon has a silencer equipped
+ virtual bool IsSilenced( void ) const { return false; }
+
+ void KickBack( float up_base, float lateral_base, float up_modifier, float lateral_modifier, float up_max, float lateral_max, int direction_change );
+
+ virtual void SetWeaponModelIndex( const char *pName );
+
+ virtual bool CanDrop( void ) { return false; }
+
+ virtual bool ShouldDrawCrosshair( void ) { return true; }
+ virtual bool ShouldDrawViewModel( void ) { return true; }
+ virtual bool ShouldDrawMuzzleFlash( void ) { return true; }
+
+ virtual float GetWeaponAccuracy( float flPlayerSpeed ) { return 0; }
+
+ virtual bool HideViewModelWhenZoomed( void ) { return false; }
+
+ virtual bool CanAttack( void );
+ virtual bool ShouldAutoReload( void );
+
+ CNetworkVar( int, m_iReloadModelIndex );
+ CNetworkVector( m_vInitialDropVelocity );
+
+ virtual void FinishReload( void ) {}
+
+public:
+ #if defined( CLIENT_DLL )
+
+ virtual void ProcessMuzzleFlashEvent();
+ virtual bool ShouldPredict();
+
+
+ virtual void PostDataUpdate( DataUpdateType_t type );
+ virtual void OnDataChanged( DataUpdateType_t type );
+
+ virtual bool OnFireEvent( C_BaseViewModel *pViewModel, const Vector& origin, const QAngle& angles, int event, const char *options );
+
+ virtual bool ShouldAutoEjectBrass( void );
+ virtual bool GetEjectBrassShellType( void );
+
+ void SetUseAltModel( bool bUseAlt );
+ virtual int GetWorldModelIndex( void );
+ virtual void CheckForAltWeapon( int iCurrentState );
+
+ virtual Vector GetDesiredViewModelOffset( C_DODPlayer *pOwner );
+ virtual float GetViewModelSwayScale( void ) { return 1.0; }
+
+ virtual void OnWeaponDropped( void ) {}
+
+ virtual bool ShouldDraw( void );
+
+ float m_flCrosshairDistance;
+ int m_iAmmoLastCheck;
+ int m_iAlpha;
+ int m_iScopeTextureID;
+
+ bool m_bUseAltWeaponModel; //use alternate left handed world model? reset on new sequence
+ #else
+
+ virtual bool Reload();
+ virtual void Spawn();
+
+ void SetDieThink( bool bDie );
+ void Die( void );
+
+ void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
+
+ #endif
+
+ virtual void OnPickedUp( CBaseCombatCharacter *pNewOwner );
+
+ bool IsUseable();
+ virtual bool CanDeploy( void );
+ virtual bool CanHolster( void );
+ virtual bool SendWeaponAnim( int iActivity );
+ virtual void Precache( void );
+ virtual bool CanBeSelected( void );
+ virtual bool DefaultDeploy( char *szViewModel, char *szWeaponModel, int iActivity, char *szAnimExt );
+ virtual bool Deploy();
+ bool PlayEmptySound();
+ virtual void ItemPostFrame();
+
+ virtual const char *GetViewModel( int viewmodelindex = 0 ) const;
+
+ bool m_bInAttack; //True after a semi-auto weapon fires - will not fire a second time on the same button press
+
+ void SetExtraAmmoCount( int count ) { m_iExtraPrimaryAmmo = count; }
+ int GetExtraAmmoCount( void ) { return m_iExtraPrimaryAmmo; }
+
+ virtual const char *GetSecondaryDeathNoticeName( void ) { return "world"; }
+
+ virtual CBaseEntity *MeleeAttack( int iDamageAmount, int iDamageType, float flDmgDelay, float flAttackDelay );
+ void EXPORT Smack( void );
+ //Secondary Attacks
+ void RifleButt( void );
+ void Bayonet( void );
+ void Punch( void );
+
+ virtual Activity GetMeleeActivity( void ) { return ACT_VM_SECONDARYATTACK; }
+ virtual Activity GetStrongMeleeActivity( void ) { return ACT_VM_SECONDARYATTACK; }
+
+ virtual float GetRecoil( void ) { return 0.0f; }
+
+protected:
+ CNetworkVar( float, m_flSmackTime );
+ int m_iSmackDamage;
+ int m_iSmackDamageType;
+ EHANDLE m_pTraceHitEnt;
+ trace_t m_trHit;
+
+ int m_iAltFireHint;
+
+private:
+
+ void EjectBrassLate();
+
+ float m_flDecreaseShotsFired;
+
+ CWeaponDODBase( const CWeaponDODBase & );
+
+ int m_iExtraPrimaryAmmo;
+
+#ifdef CLIENT_DLL
+ int m_iCrosshairTexture;
+#endif
+};
+
+
+#endif // WEAPON_DODBASE_H