You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
403 lines
10 KiB
403 lines
10 KiB
//========= 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
|
|
|