diff options
Diffstat (limited to 'game/shared/dod/weapon_dodbase.h')
| -rw-r--r-- | game/shared/dod/weapon_dodbase.h | 403 |
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 |