/*** * * Copyright (C) 2002 The Wastes Project, All Rights Reserved. * * This product contains software technology from Valve Software, LLC, * Copyright © 1996-2001, Valve LLC, All rights reserved. * * Use, distribution, and modification of this source code and/or resulting * object code is restricted to non-commercial enhancements to products from * The Wastes Project. All other use, distribution, or modification is prohibited * without written permission from The Wastes Project. * ***/ #ifndef __THEWASTES_H_ #define __THEWASTES_H_ /* This header file contains our unique stuff about The Wastes. Include this and the matching .cpp file in the dll you need. */ #include "tw_common.h" class CWasteWeapon; class CWasteAmmo; // Damage Modifiers for various locations. // Multiply these by the weapons base damage // for easy damage calculation! #define HEAD_DAMAGE 2 #define CHEST_DAMAGE 1 #define GUT_DAMAGE 1.1 #define ARM_DAMAGE 0.6 #define LEG_DAMAGE 0.65 /*** * * * Weapons / Ammo * * ***/ // Baseline damages... these are the damages as // if you hit someone in the chest. extremeties // and the head uses modifiers to get a slightly // different value from this. #define BERETTA_DMG_WHIP 15 #define COLT_DMG_WHIP 15 #define DEAGLE_DMG_WHIP 20 #define MOSSBERG_DMG_WHIP 25 #define BOLTRIFLE_DMG_WHIP 25 // Cant have more than 32(for now) :) #define WEAPON_BERETTA 1 #define WEAPON_COLT 2 #define WEAPON_DEAGLE 3 #define WEAPON_RUGER 4 #define WEAPON_HANDCANNON 5 #define WEAPON_SAWEDOFF 6 #define WEAPON_MOSSBERG 7 #define WEAPON_WINCHESTER 8 #define WEAPON_SMG9 9 #define WEAPON_FNFAL 10 #define WEAPON_TOMMYGUN 11 #define WEAPON_JACKHAMMER 12 #define WEAPON_G11 13 #define WEAPON_BOLTRIFLE 14 #define WEAPON_STEN 15 #define WEAPON_MOLOTOVCOCKTAIL 16 #define WEAPON_FRAGGRENADE 17 #define WEAPON_PIPEBOMB 18 #define WEAPON_COMBATKNIFE 19 #define WEAPON_THROWINGKNIFE 20 #define WEAPON_BASEBALLBAT 21 #define WEAPON_SLEDGEHAMMER 22 #define WEAPON_KATANA 23 #define WEAPON_SPEAR 24 #define WEAPON_CATTLEPROD 25 #define WEAPON_AKIMBOBERETTAS 26 #define WEAPON_AKIMBOCOLTS 27 #define WEAPON_AKIMBODEAGLES 28 #define WEAPON_AKIMBOSAWEDOFFS 29 #define WEIGHT_BERETTA 10 #define WEIGHT_COLT 10 #define WEIGHT_DEAGLE 12 #define WEIGHT_RUGER 15 #define WEIGHT_HANDCANNON 20 #define WEIGHT_SAWEDOFF 22 #define WEIGHT_MOSSBERG 30 #define WEIGHT_WINCHESTER 30 #define WEIGHT_SMG9 20 #define WEIGHT_BOLTRIFLE 30 #define WEIGHT_STEN 22 #define WEIGHT_UNIQUE 35 #define WEIGHT_MOLOTOVCOCKTAIL 5 #define WEIGHT_FRAGGRENADE 5 #define WEIGHT_PIPEBOMB 5 #define WEIGHT_COMBATKNIFE 5 #define WEIGHT_THROWINGKNIFE 5 #define WEIGHT_BASEBALLBAT 5 #define WEIGHT_SLEDGEHAMMER 5 #define WEIGHT_KATANA 5 #define WEIGHT_SPEAR 5 #define WEIGHT_CATTLEPROD 10 // Weapon Death Messages. // Format: %s(killer) %s(victim) #define DEATH_BERETTA_1 "%s perforated %s with a Beretta 92FS" #define DEATH_COLT_1 "%s punctured %s's stomach with a Colt Enforcer" #define DEATH_DEAGLE_1 "%s ripped a hole in %s's chest with a .50AE slug" #define DEATH_RUGER_1 "%s gave %s just desserts with a .454 Casull round" #define DEATH_HANDCANNON_1 "%s drove a 5.6mm round into %s like a freight train" #define DEATH_SAWEDOFF_1 "%s blew away %s. twice." #define DEATH_MOSSBERG_1 "%s marries %s in hole-y matrimony" #define DEATH_WINCHESTER_1 "%s singlehandedly destroyed %s's will to terminate" #define DEATH_SMG9_1 "%s gave %s some heart burn" #define DEATH_FNFAL_1 "%s made %s wonder, \"Where the hell did that bullet come from?\"" #define DEATH_TOMMYGUN_1 "%s made a wiseguy out of %s" #define DEATH_JACKHAMMER_1 "%s turned %s into buckshot hamburger" #define DEATH_G11_1 "%s gave %s some caseless loving" #define DEATH_BOLTRIFLE_1 "%s pinpointed %s's internal organs and pulled the trigger" #define DEATH_STEN_1 "%s showed %s that surrender is not an option" #define DEATH_MOLOTOVCOCKTAIL_1 "%s made %s crispy on the outside and gooey on the inside" #define DEATH_FRAGGRENADE_1 "%s turned %s into tiny little gibs" #define DEATH_PIPEBOMB_1 "%s taught %s about homemade explosives" #define DEATH_COMBATKNIFE_1 "%s gutted %s with his combat knife" #define DEATH_THROWINGKNIFE_1 "%s stuck his throwing knife in %s's side" #define DEATH_BASEBALLBAT_1 "%s smashed %s's face in with his bat" #define DEATH_SLEDGEHAMMER_1 "%s went to work on %s's skull" #define DEATH_KATANA_1 "%s sliced the belly of %s" #define DEATH_SPEAR_1 "%s bludgeoned %s with his spear" #define DEATH_CATTLEPROD_1 "%s roasted %s with 11 herbs and spices" #define DEATH_AKIMBOBERETTAS_1 "%s John Woo'd %s with his akimbo berettas" #define DEATH_AKIMBOCOLTS_1 "%s enforced his rules on %s with two colt enforcer rounds" #define DEATH_AKIMBODEAGLES_1 "%s put a big hole in %s's body courtesy of two .50AE slugs" #define DEATH_AKIMBOSAWEDOFFS_1 "%s gave %s double the pleasure from dual sawed off's" #define DEATH_BLEED_1 "%s bled %s, real slow" #define DEATH_BERETTA_2 "%s busts a cap on %s" #define DEATH_COLT_2 "%s capped %s with a 10mm slug" #define DEATH_DEAGLE_2 "%s drilled a 12.7mm diameter hole in %s's skull" #define DEATH_RUGER_2 "%s schooled %s with a well placed Ruger shot" #define DEATH_HANDCANNON_2 "%s made sure the last thing on %s's mind was a 5.56mm cartridge" #define DEATH_SAWEDOFF_2 "%s's twin barrels leave %s twitching in the dust" #define DEATH_MOSSBERG_2 "%s gives %s a buckshot enema" #define DEATH_WINCHESTER_2 "%s aerated %s's chest with his Winchester" #define DEATH_SMG9_2 "%s said to %s's corpse, \"Why yes, I guess it is whoring!\"" #define DEATH_FNFAL_2 "%s showed %s even the FN-FAL loves fun and games!" #define DEATH_TOMMYGUN_2 "%s riddled %s, gangsta style" #define DEATH_JACKHAMMER_2 "%s didn't want to kill %s so much as remove him from the known universe" #define DEATH_G11_2 "%s found the G11 first. %s obviously didn't" #define DEATH_BOLTRIFLE_2 "%s put down %s with a well placed rifle round" #define DEATH_STEN_2 "%s gave %s a dishonorable discharge" #define DEATH_MOLOTOVCOCKTAIL_2 "%s burned %s at the stake and pissed on the ashes" #define DEATH_FRAGGRENADE_2 "%s taught %s the pin trick" #define DEATH_PIPEBOMB_2 "%s instructs %s not to play with explosives" #define DEATH_COMBATKNIFE_2 "%s sliced %s's neck" #define DEATH_THROWINGKNIFE_2 "%s put a throwing knife between the eyes of %s" #define DEATH_BASEBALLBAT_2 "%s hit a homerun with %s's body" #define DEATH_SLEDGEHAMMER_2 "%s beat %s to a pulp with his sledge" #define DEATH_KATANA_2 "%s showed %s what happens when you \'bring out the gimp\'" #define DEATH_SPEAR_2 "%s shoved his hand carved spear blade into %s's gut" #define DEATH_CATTLEPROD_2 "%s gave %s quite a shock" #define DEATH_AKIMBOBERETTAS_2 "%s riddles %s with several 9mm rounds from two berettas" #define DEATH_AKIMBOCOLTS_2 "%s put %s in his place using two colt enforcers" #define DEATH_AKIMBODEAGLES_2 "%s gave %s a lobotomy using two desert eagles as scalpels" #define DEATH_AKIMBOSAWEDOFFS_2 "%s made %s's insides his outsides using two sawed-off shotguns" #define DEATH_BLEED_2 "%s opened up %s like a leaky faucet" // Note, if the weapon can have an extra // round in the chamber, account for this // in this listing #define CLIP_BERETTA 15 #define CLIP_COLT 12 #define CLIP_DEAGLE 7 #define CLIP_RUGER 5 #define CLIP_HANDCANNON 5 #define CLIP_SAWEDOFF 2 #define CLIP_MOSSBERG 8 #define CLIP_WINCHESTER 6 #define CLIP_SMG9 24 #define CLIP_FNFAL 20 #define CLIP_TOMMYGUN 50 #define CLIP_JACKHAMMER 10 #define CLIP_G11 45 #define CLIP_BOLTRIFLE 5 #define CLIP_STEN 30 #define GIVE_BERETTA CLIP_BERETTA*2 #define GIVE_COLT CLIP_COLT*2 #define GIVE_DEAGLE CLIP_DEAGLE*2 #define GIVE_RUGER CLIP_RUGER*2 #define GIVE_HANDCANNON CLIP_HANDCANNON*2 #define GIVE_BUCKSHOT 8*2 #define GIVE_SMG9 CLIP_SMG9*2 #define GIVE_FNFAL CLIP_FNFAL*2 #define GIVE_TOMMYGUN CLIP_TOMMYGUN*2 #define GIVE_JACKHAMMER CLIP_JACKHAMMER*2 #define GIVE_G11 CLIP_G11*2 #define GIVE_BOLTRIFLE CLIP_BOLTRIFLE*2 #define GIVE_STEN CLIP_STEN*2 #define GIVE_WINCHESTER CLIP_WINCHESTER*2 #define GIVE_JACKHAMMER CLIP_JACKHAMMER*2 #define AMMO_MAX_BERETTA 120 #define AMMO_MAX_COLT 96 #define AMMO_MAX_DEAGLE 56 #define AMMO_MAX_RUGER 25 #define AMMO_MAX_HANDCANNON 20 #define AMMO_MAX_BUCKSHOT 16 #define AMMO_MAX_SMG9 100 #define AMMO_MAX_FNFAL 80 #define AMMO_MAX_TOMMYGUN 150 #define AMMO_MAX_JACKHAMMER 30 #define AMMO_MAX_G11 135 #define AMMO_MAX_BOLTRIFLE 15 #define AMMO_MAX_STEN 90 #define AMMO_MAX_WINCHESTER 24 #define AMMO_MAX_JACKHAMMER 30 #define AMMO_MAX_MOLOTOVCOCKTAIL 5 #define AMMO_MAX_FRAGGRENADE 5 #define AMMO_MAX_PIPEBOMB 5 #define AMMO_MAX_THROWINGKNIFE 10 #define AMMO_MAX_SPEARS 5 #define AMMO_GIVE_BERETTA CLIP_BERETTA #define AMMO_GIVE_COLT CLIP_COLT #define AMMO_GIVE_DEAGLE CLIP_DEAGLE #define AMMO_GIVE_RUGER CLIP_RUGER #define AMMO_GIVE_HANDCANNON CLIP_HANDCANNON #define AMMO_GIVE_BUCKSHOT 8 #define AMMO_GIVE_SMG9 CLIP_SMG9 #define AMMO_GIVE_FNFAL CLIP_FNFAL*2 #define AMMO_GIVE_TOMMYGUN CLIP_TOMMYGUN #define AMMO_GIVE_JACKHAMMER CLIP_JACKHAMMER #define AMMO_GIVE_G11 CLIP_G11 #define AMMO_GIVE_BOLTRIFLE CLIP_BOLTRIFLE #define AMMO_GIVE_STEN CLIP_STEN #define AMMO_GIVE_WINCHESTER CLIP_WINCHESTER #define AMMO_GIVE_JACKHAMMER CLIP_JACKHAMMER class CWasteWeapon : public CBasePlayerWeapon { public: void Spawn(); void ItemPostFrame(); // Extend in child classes virtual void SpecialMode(); virtual BOOL UseDecrement( void ); virtual const char *szGetDeathNoticeString(){ return ""; } // The death message to send to clients virtual float flGetTiltedDamage(){ return 0; } // The weapon returns its own damage based on several variables, including state code virtual int iGetWeight(); // How heavy is this weapon? // Replication of member variables, if needed virtual void PackWeapon(void *weapon_data){} virtual void UnpackWeapon(void *weapon_data){} // Used server side virtual BOOL bLaserActive(){ return FALSE; } }; class CWasteAmmo : public CBasePlayerAmmo { public: }; /************* Sidearms - included in both client and game dll, tw_sidearms.cpp *************/ #define SIDEARM_SHOOT 0 #define SIDEARM_AIM 2 #define SIDEARM_JUMPPENALTY 1.2 // Accuracy infraction for jumping shooters. #define SIDEARM_DUCKPENALTY 0.45 // Not really a penalty, increases accuracy if your duckin #define SIDEARM_AIMPENALTY 1.75 // Modifier for accuracy and rate of fire if your aiming. #define MOVING_AIMPENALTY 1.1 class CSidearm : public CWasteWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); void ItemPostFrame(); void PrimaryAttack(); void SecondaryAttack(); void SpecialMode(); virtual void SetState(int statenum); virtual void PistolFire(float spread,float rof); virtual void SwingWeapon(); void Reload(); void Holster( int skiplocal = 0 ); virtual int GetWhipDmg(){ return 0; } BOOL Deploy(); BOOL PlayEmptySound(); void WeaponIdle(); void Drop(); // Replication virtual void PackWeapon(void *weapon_data); virtual void UnpackWeapon(void *weapon_data); // Global Vars unsigned short m_usFire1; int m_iExtraRound; // If true allows for an extra ammo in the gun. // damage values. these should vary from gun to gun. int m_iBulletType; int m_iClipSize; float m_fAccuracy; float m_fRateOfFire; int m_iAllowFire; // Semi-Auto mode(detect input) int m_iState; // Whip, Aim, or Shoot? int m_iOldState; virtual const char *GetAnimPlayer(){return ""; } // Used so the player knows what weapon animation to play. virtual const char *GetModelV() { return ""; } virtual const char *GetModelP() { return ""; } virtual const char *GetModelW() { return ""; } private: // hacks to handle aim mode (animations) BOOL m_bAimReload; }; class CBeretta : public CSidearm { public: void Spawn(); void Precache(); int iItemSlot( void ){ return 1; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void AttachToPlayer( CBasePlayer *pPlayer ); const char *GetAnimPlayer(){ return "onehanded"; } const char *GetModelV(){ return "models/v_beretta.mdl"; } const char *GetModelP(){ return "models/p_beretta.mdl"; } const char *GetModelW(){ return "models/w_beretta.mdl"; } const char *GetSoundEmpty(){ return "weapons/beretta_fire_empty.wav"; } const char *GetSoundReload1(){ return "weapons/beretta_reload1.wav"; } const char *GetSoundReload2(){ return "weapons/beretta_reload2.wav"; } const char *GetSoundReloadNotEmpty(){ return "weapons/beretta_reload_not_empty.wav"; } const char *GetSoundDraw1(){ return "weapons/beretta_draw.wav"; } const char *GetSoundDraw2(){ return GetSoundDraw1(); } int GetWhipDmg(){ return BERETTA_DMG_WHIP; } }; class CBerettaAmmo : public CWasteAmmo { public: void Spawn( void ); void Precache( void ); BOOL AddAmmo( CBaseEntity *pOther ); }; class CColt : public CSidearm { public: void Spawn(); void Precache(); int iItemSlot( void ){ return 2; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); const char *GetAnimPlayer(){ return "onehanded"; } const char *GetModelV(){ return "models/v_colt.mdl"; } const char *GetModelP(){ return "models/p_colt.mdl"; } const char *GetModelW(){ return "models/w_colt.mdl"; } int GetWhipDmg(){ return COLT_DMG_WHIP; } }; class CColtAmmo : public CWasteAmmo { public: void Spawn( void ); void Precache( void ); BOOL AddAmmo(CBaseEntity *pOther); }; class CDesertEagle : public CSidearm { public: void Spawn(); void Precache(); int iItemSlot( void ){ return 3; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void SwingWeapon(); const char *GetAnimPlayer(){ return "onehanded"; } const char *GetModelV(){ return "models/v_deagle.mdl"; } const char *GetModelP(){ return "models/p_deagle.mdl"; } const char *GetModelW(){ return "models/w_deagle.mdl"; } int GetWhipDmg(){ return DEAGLE_DMG_WHIP; } }; class CDesertEagleAmmo : public CWasteAmmo { public: void Spawn( void ); void Precache( void ); BOOL AddAmmo(CBaseEntity *pOther); }; // Accuracy and Rate of Fire modifications if a Ruger is zoomed in. #define RUGER_AIMACC 2.50 #define RUGER_AIMROF 2.00 class CRuger : public CSidearm { public: void Spawn(); void Precache(); int iItemSlot( void ){ return 4; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); void ItemPostFrame(); void PistolFire(float spread,float rof); void SwingWeapon(); void SpecialMode(); void SecondaryAttack(); void Reload(); void WeaponIdle(); void Holster(int skiplocal = 0); BOOL Deploy(); void SetState(int statenum); const char *GetAnimPlayer(){ return "onehanded"; } const char *GetModelV(){ return "models/v_ruger.mdl"; } const char *GetModelP(){ return "models/p_ruger.mdl"; } const char *GetModelW(){ return "models/w_ruger.mdl"; } int GetWhipDmg(){ return 0; } // vars BOOL m_bInZoom; BOOL m_bStartZoom; private: void ClientSway(); }; class CRugerAmmo : public CWasteAmmo { public: void Spawn( void ); void Precache( void ); BOOL AddAmmo(CBaseEntity *pOther); }; #define HANDCANNON_JUMPPENALTY 2.5 // Accuracy infraction for jumping shooters. #define HANDCANNON_DUCKPENALTY 0.45 // Not really a penalty, increases accuracy if your duckin #define HANDCANNON_LASERPENALTY 1.75 // Modifier for accuracy and rate of fire if your aiming. // Granted this is a sidearm, however // The code for it is much different. // Code reuse here wouldnt be that smart // methinks. :) class CHandcannon : public CWasteWeapon { public: void Spawn(); void Precache(); int iItemSlot(){ return 5; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); void PrimaryAttack(); void SecondaryAttack(); void ItemPostFrame(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); void WeaponIdle(); void Holster(int skiplocal = 0); // Used server side virtual BOOL bLaserActive(); private: unsigned short m_usFire1; // damage values. these should vary from gun to gun. int m_iBulletType; int m_iClipSize; float m_fAccuracy; float m_fRateOfFire; int m_iAllowFire; // Semi-Auto mode(detect input) BOOL m_bLaserVisible; }; class CHandcannonAmmo : public CWasteAmmo { public: void Spawn( void ); void Precache( void ); BOOL AddAmmo(CBaseEntity *pOther); }; /************* Shotguns - included in both client and game dll, tw_shotguns.cpp *************/ class CShotgun : public CWasteWeapon // Pump shotgun { public: int GetItemInfo(ItemInfo *p); void ItemPostFrame(); void WeaponIdle(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); // vars int m_iBulletType; int m_iClipSize; int m_iAllowFire; int m_iState; int m_iReloadState; unsigned int m_usFire1; }; class CShotgunAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; #define MOSSBERG_SHOTCOUNT 8 #define MOSSBERG_SPREAD 0.055 class CMossberg : public CShotgun { public: void Spawn(); void Precache(); int iItemSlot(){ return 1; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); void WeaponIdle(); void Holster(int skiplocal = 0); }; #define WINCHESTER_SPREAD 0.030 class CWinchester : public CShotgun { public: void Spawn(); void Precache(); int iItemSlot(){ return 2; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); }; class CWinchesterAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; class CSawedOff : public CWasteWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); int iItemSlot(){ return 6; } const char *szGetDeathNoticeString(); void FireShotgun(int barrels); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); void ItemPostFrame(); private: // vars int m_iBulletType; int m_iClipSize; int m_iAllowFire; float m_flEjectShell; unsigned int m_usFire1; }; class CJackHammer : public CWasteWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); int iItemSlot(){ return 3; } const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); private: int m_iClipSize; unsigned int m_usFire1; }; class CJackHammerAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; /************* Automatic Weapons *************/ class CAutomatic : public CWasteWeapon { public: int GetItemInfo(ItemInfo *p); void ItemPostFrame(); void Holster(int skiplocal = 0); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); protected: unsigned int m_usFire1; int m_iBulletType; int m_iClipSize; int m_iState; int m_iAllowFire; float m_flAccuracy; float m_flRateOfFire; }; class CSmg9 : public CAutomatic { public: void Spawn(); void Precache(); int iItemSlot(){ return 3; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void ItemPostFrame(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); void Holster(int skiplocal = 0); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); // Used server side virtual BOOL bLaserActive(); private: BOOL m_bBurstFire; BOOL m_bLaserVisible; }; class CSmg9Ammo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; class CFnFal : public CAutomatic { public: void Spawn(); void Precache(); int iItemSlot(){ return 1; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void SpecialMode(); void ItemPostFrame(); void Reload(); BOOL Deploy(); void Holster(int skiplocal = 0); BOOL PlayEmptySound(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); private: BOOL m_iAim; // Currently in aim mode }; class CFnFalAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; class CTommyGun : public CAutomatic { public: void Spawn(); void Precache(); int iItemSlot(){ return 2; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); }; class CTommyGunAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; class CG11 : public CAutomatic { public: void Spawn(); void Precache(); int iItemSlot(){ return 4; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void SpecialMode(); void ItemPostFrame(); void ClientSway(); void Reload(); BOOL Deploy(); void Holster( int skiplocal = 0 ); BOOL PlayEmptySound(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); private: int m_iWeaponState; float m_flBurstAccuracy; BOOL m_bThermal; BOOL m_bActivateThermal; // Delay thermal activation }; class CG11Ammo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; class CBoltRifle : public CWasteWeapon { public: void Spawn(); void Precache(); int iItemSlot(){ return 4; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void SpecialMode(); void ClientSway(); void ItemPostFrame(); void Reload(); BOOL Deploy(); void Holster(int skiplocal = 0); BOOL PlayEmptySound(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); private: int m_iBulletType; int m_iClipSize; int m_iAllowFire; int m_iState; unsigned int m_usFire1; BOOL m_bReZoom; }; class CBoltRifleAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; class CSten : public CWasteWeapon { public: void Spawn(); void Precache(); int iItemSlot(){ return 5; } int GetItemInfo(ItemInfo *p); float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void ItemPostFrame(); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL Deploy(); BOOL PlayEmptySound(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); private: int m_iClipSize; int m_iBulletType; int m_iState; int m_iAllowFire; unsigned int m_usFire1; BOOL m_bOverheated; }; class CStenAmmo : public CWasteAmmo { public: void Spawn(); void Precache(); BOOL AddAmmo(CBaseEntity *pOther); }; /************* Explosives *************/ class CMolotovCocktail : public CWasteWeapon { public: void Spawn(); void Precache(); int iItemSlot(){ return 1; } int GetItemInfo(ItemInfo *p); const char *szGetDeathNoticeString(); void AttachToPlayer(CBasePlayer *pPlayer); int AddDuplicate(CBasePlayerItem *pItem); float flGetTiltedDamage(); void PrimaryAttack(); void ItemPostFrame(); void ThrowMolotov(); BOOL Deploy(); BOOL CanHolster(); void Holster(int skiplocal = 0); private: float m_flStartAttack; unsigned short m_usFire1; BOOL m_bJustThrown; }; class CTimedExplosiveWeapon : public CWasteWeapon { public: void Spawn(); void Precache(); int GetItemInfo( ItemInfo *p ); float flGetTiltedDamage(); void ItemPostFrame(); void PrimaryAttack(); void SecondaryAttack(); virtual void ThrowExplosive(float flFuse); BOOL CanHolster(); void Holster( int skiplocal = 0 ); float m_flStartAttack; float m_flFuseTimer; // How long does the fuse last on this explosive? float m_flDamage; // How much damage do our explosives dish out ? float m_flResistance; // Air resistance char *m_pszExplosiveModel; // What does our explosive look like ? BOOL m_bFusePrimed; // TRUE if the bomb we are holding is ticking! int m_iExplosiveType; // Explosive class to use unsigned short m_usExplosive; BOOL m_bJustThrown; }; class CFragGrenade : public CTimedExplosiveWeapon { public: void Spawn(); void Precache(); int iItemSlot(){ return 2; } int GetItemInfo(ItemInfo *p); void AttachToPlayer(CBasePlayer *pPlayer); int AddDuplicate(CBasePlayerItem *pItem); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void ItemPostFrame(); void ThrowExplosive(float flFuse); BOOL Deploy(); }; class CPipebomb : public CTimedExplosiveWeapon { public: void Spawn(); void Precache(); int iItemSlot(){ return 3; } int GetItemInfo(ItemInfo *p); void AttachToPlayer(CBasePlayer *pPlayer); int AddDuplicate(CBasePlayerItem *pItem); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); void ItemPostFrame(); void ThrowExplosive(float flFuse); BOOL Deploy(); }; /************* Melee Weapons *************/ class CMeleeWeapon : public CWasteWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); float flGetAngleDamage(float flDamage,CBaseEntity *pEntity); virtual CBaseEntity *SwingWeapon( float flKickback = 0.0f ); virtual void PlayHitSound(); BOOL PlayEmptySound(); virtual const char *pszGetViewModel() = 0; virtual const char *pszGetPlayerModel() = 0; virtual const char *pszGetWorldModel() = 0; virtual int iGetDamageType() = 0; virtual float flGetRange() = 0; unsigned short m_usFire1; }; class CThrowingWeapon : public CWasteWeapon { public: void Precache(); int GetItemInfo(ItemInfo *p); void AttachToPlayer(CBasePlayer *pPlayer); int AddDuplicate(CBasePlayerItem *pItem); void ItemPostFrame(); BOOL CanHolster(); void Holster( int skiplocal = 0 ); virtual void ThrowObject() = 0; virtual int iGetMaxAmmo() = 0; virtual const char *pszGetAmmoName() = 0; float m_flStartAttack; BOOL m_bJustThrown; }; class CCombatKnife : public CMeleeWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 1; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); BOOL Deploy(); void WeaponIdle(); const char *pszGetViewModel(){ return "models/v_combatknife.mdl"; } const char *pszGetPlayerModel(){ return "models/p_combatknife.mdl"; } const char *pszGetWorldModel(){ return "models/w_combatknife.mdl"; } int iGetDamageType(){ return DMG_CLUB|DMG_NEVERGIB; } float flGetRange(){ return 32.0f; } private: BOOL m_bSecondaryAttack; // set for flGetTiltedDamage }; class CBaseballBat : public CMeleeWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 3; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); BOOL Deploy(); void WeaponIdle(); const char *pszGetViewModel(){ return "models/v_baseballbat.mdl"; } const char *pszGetPlayerModel(){ return "models/p_baseballbat.mdl"; } const char *pszGetWorldModel(){ return "models/w_baseballbat.mdl"; } int iGetDamageType(){ return DMG_CLUB|DMG_NEVERGIB; } float flGetRange(){ return 48.0f; } }; class CSledgeHammer : public CMeleeWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 4; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); BOOL Deploy(); void WeaponIdle(); const char *pszGetViewModel(){ return "models/v_sledge.mdl"; } const char *pszGetPlayerModel(){ return "models/p_sledge.mdl"; } const char *pszGetWorldModel(){ return "models/w_sledge.mdl"; } int iGetDamageType(){ return DMG_CLUB; } float flGetRange(){ return 48.0f; } }; class CKatana : public CMeleeWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 5; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void SecondaryAttack(); BOOL Deploy(); void Holster(int skiplocal = 0); void WeaponIdle(); const char *pszGetViewModel(){ return "models/v_katana.mdl"; } const char *pszGetPlayerModel(){ return "models/p_katana.mdl"; } const char *pszGetWorldModel(){ return "models/w_katana.mdl"; } int iGetDamageType(){ return DMG_CLUB|DMG_NEVERGIB; } float flGetRange(); // Replication void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); private: int m_iState; }; class CThrowingKnife : public CThrowingWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 2; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PrimaryAttack(); void ItemPostFrame(); void ThrowObject(); BOOL Deploy(); void WeaponIdle(); int iGetMaxAmmo(){ return AMMO_MAX_THROWINGKNIFE; } const char *pszGetAmmoName(){ return "ThrowingKnives"; } }; class CSpear : public CThrowingWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 6; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void SwingWeapon(); void ThrowObject(); void PrimaryAttack(); void SecondaryAttack(); void ItemPostFrame(); BOOL Deploy(); void WeaponIdle(); int iGetMaxAmmo(){ return AMMO_MAX_SPEARS; } const char *pszGetAmmoName(){ return "Spears"; } private: unsigned short m_usFire1; }; class CCattleProd : public CMeleeWeapon { public: void Spawn(); void Precache(); int GetItemInfo(ItemInfo *p); int iItemSlot(){ return 7; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void PlayHitSound(); void PrimaryAttack(); BOOL Deploy(); void WeaponIdle(); const char *pszGetViewModel(){ return "models/v_cattleprod.mdl"; } const char *pszGetPlayerModel(){ return "models/p_cattleprod.mdl"; } const char *pszGetWorldModel(){ return "models/w_cattleprod.mdl"; } int iGetDamageType(){ return DMG_SHOCK|DMG_CLUB|DMG_NEVERGIB; } float flGetRange(); }; /************* Akimbo Weapons *************/ class CAkimboWeapon : public CWasteWeapon { public: void Spawn(); int GetItemInfo(ItemInfo *p); void PackWeapon(void *weapon_data); void UnpackWeapon(void *weapon_data); void ItemPostFrame(); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL PlayEmptySound(); void WeaponIdle(); unsigned short m_usFire1; int m_iBulletType; int m_iClipSize; float m_fAccuracy; float m_fRateOfFire; BOOL m_bSlowFire; int m_iCurrentHand; // which hand is firing ? }; class CAkimboBerettas : public CAkimboWeapon { public: void Spawn(); void Precache(); int GetItemInfo( ItemInfo *p ); int iItemSlot(){ return 1; }; float flGetTiltedDamage(); const char *szGetDeathNoticeString(); BOOL Deploy(); }; class CAkimboColts : public CAkimboWeapon { public: void Spawn(); void Precache(); int GetItemInfo( ItemInfo *p ); int iItemSlot(){ return 2; }; float flGetTiltedDamage(); const char *szGetDeathNoticeString(); BOOL Deploy(); }; class CAkimboDeagles : public CAkimboWeapon { public: void Spawn(); void Precache(); int GetItemInfo( ItemInfo *p ); int iItemSlot(){ return 3; }; float flGetTiltedDamage(); const char *szGetDeathNoticeString(); BOOL Deploy(); }; class CAkimboSawedOffs : public CAkimboWeapon { public: void Spawn(); void Precache(); int GetItemInfo( ItemInfo *p ); int iItemSlot(){ return 4; } float flGetTiltedDamage(); const char *szGetDeathNoticeString(); void ItemPostFrame(); void FireSawedOffs( int iShellsFired ); void PrimaryAttack(); void SecondaryAttack(); void Reload(); BOOL Deploy(); int m_iAllowFire; }; /*** * * * Player - wasteplayer.cpp * * ***/ #define MODIFY_PLAYER_SPEED(pPlayer,fSpeed) pPlayer->pev->fuser1 = fSpeed #define HALT_PLAYER(pPlayer,fPercent,fReductionFactor) pPlayer->pev->fuser3 = fReductionFactor; pPlayer->pev->fuser2 = fPercent #define CRIPPLE_PLAYER(pPlayer,fPercent) HALT_PLAYER(pPlayer,fPercent,-0.3f) /*** * * * Utility Code * * ***/ #ifdef CLIENT_DLL // General event code void CenterPrint(const char*); // Client side print to center int GetLocalPlayerIndex(); // get local player index extern int g_iClientLasersEnabled[32]; // Render client side laser dot // Viewport void V_SetSway(float scale); void V_StopSway(); void V_DisableFade(); extern int ev_thermal; // Thermal Vision toggle // Other extern int g_runfuncs; #else // Server side only extern int gmsgLaserInfo; // Used by some weapons with laser sites #endif void FindHullIntersection( const Vector &vecSrc, TraceResult &tr, float *mins, float *maxs, edict_t *pEntity ); #endif