summaryrefslogtreecommitdiff
path: root/game/server/hl1/hl1_item_ammo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/hl1/hl1_item_ammo.cpp')
-rw-r--r--game/server/hl1/hl1_item_ammo.cpp410
1 files changed, 410 insertions, 0 deletions
diff --git a/game/server/hl1/hl1_item_ammo.cpp b/game/server/hl1/hl1_item_ammo.cpp
new file mode 100644
index 0000000..e5d44bc
--- /dev/null
+++ b/game/server/hl1/hl1_item_ammo.cpp
@@ -0,0 +1,410 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Ammo boxes for HL1
+//
+//=============================================================================//
+
+
+#include "cbase.h"
+#include "player.h"
+#include "gamerules.h"
+#include "items.h"
+#include "hl1_items.h"
+
+
+// ========================================================================
+// >> Crossbow bolts
+// ========================================================================
+#define AMMO_CROSSBOW_GIVE 5
+#define AMMO_CROSSBOW_MODEL "models/w_crossbow_clip.mdl"
+
+class CCrossbowAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CCrossbowAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_CROSSBOW_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel( AMMO_CROSSBOW_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_CROSSBOW_GIVE, "XBowBolt" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_crossbow, CCrossbowAmmo);
+PRECACHE_REGISTER(ammo_crossbow);
+
+
+// ========================================================================
+// >> Egon ammo
+// ========================================================================
+#define AMMO_EGON_GIVE 20
+#define AMMO_EGON_MODEL "models/w_chainammo.mdl"
+
+class CEgonAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CEgonAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_EGON_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_EGON_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_EGON_GIVE, "Uranium" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_egonclip, CEgonAmmo);
+PRECACHE_REGISTER(ammo_egonclip);
+
+
+// ========================================================================
+// >> Gauss ammo
+// ========================================================================
+#define AMMO_GAUSS_GIVE 20
+#define AMMO_GAUSS_MODEL "models/w_gaussammo.mdl"
+
+class CGaussAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CGaussAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_GAUSS_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_GAUSS_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_GAUSS_GIVE, "Uranium" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_gaussclip, CGaussAmmo);
+PRECACHE_REGISTER(ammo_gaussclip);
+
+
+// ========================================================================
+// >> Glock ammo
+// ========================================================================
+#define AMMO_GLOCK_GIVE 18
+#define AMMO_GLOCK_MODEL "models/w_9mmclip.mdl"
+
+class CGlockAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CGlockAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_GLOCK_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_GLOCK_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_GLOCK_GIVE, "9mmRound" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_glockclip, CGlockAmmo);
+PRECACHE_REGISTER(ammo_glockclip);
+LINK_ENTITY_TO_CLASS(ammo_9mmclip, CGlockAmmo);
+PRECACHE_REGISTER(ammo_9mmclip);
+
+
+// ========================================================================
+// >> MP5 ammo
+// ========================================================================
+#define AMMO_MP5_GIVE 50
+#define AMMO_MP5_MODEL "models/w_9mmARclip.mdl"
+
+class CMP5AmmoClip : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CMP5AmmoClip, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_MP5_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_MP5_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_MP5_GIVE, "9mmRound" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_mp5clip, CMP5AmmoClip);
+PRECACHE_REGISTER(ammo_mp5clip);
+LINK_ENTITY_TO_CLASS(ammo_9mmar, CMP5AmmoClip);
+PRECACHE_REGISTER(ammo_9mmar);
+
+
+// ========================================================================
+// >> MP5Chain (?) ammo
+// ========================================================================
+#define AMMO_MP5CHAIN_GIVE 200
+#define AMMO_MP5CHAIN_MODEL "models/w_chainammo.mdl"
+
+class CMP5Chainammo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CMP5Chainammo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_MP5CHAIN_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_MP5CHAIN_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_MP5CHAIN_GIVE, "9mmRound" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_9mmbox, CMP5Chainammo);
+PRECACHE_REGISTER(ammo_9mmbox);
+
+
+// ========================================================================
+// >> MP5 grenades
+// ========================================================================
+#define AMMO_MP5GRENADE_GIVE 2
+#define AMMO_MP5GRENADE_MODEL "models/w_ARgrenade.mdl"
+
+class CMP5AmmoGrenade : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CMP5AmmoGrenade, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_MP5GRENADE_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_MP5GRENADE_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_MP5GRENADE_GIVE, "MP5_Grenade" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_mp5grenades, CMP5AmmoGrenade);
+PRECACHE_REGISTER(ammo_mp5grenades);
+LINK_ENTITY_TO_CLASS(ammo_argrenades, CMP5AmmoGrenade);
+PRECACHE_REGISTER(ammo_argrenades);
+
+
+// ========================================================================
+// >> 357 ammo
+// ========================================================================
+#define AMMO_357_GIVE 6
+#define AMMO_357_MODEL "models/w_357ammobox.mdl"
+
+class CPythonAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CPythonAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_357_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_357_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_357_GIVE, "357Round" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_357, CPythonAmmo);
+PRECACHE_REGISTER(ammo_357);
+
+
+// ========================================================================
+// >> RPG rockets
+// ========================================================================
+#define AMMO_RPG_GIVE 1
+#define AMMO_RPG_MODEL "models/w_rpgammo.mdl"
+
+class CRpgAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CRpgAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_RPG_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_RPG_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ int nGive;
+
+ if ( g_pGameRules->IsMultiplayer() )
+ {
+ // hand out more ammo per rocket in multiplayer.
+ nGive = AMMO_RPG_GIVE * 2;
+ }
+ else
+ {
+ nGive = AMMO_RPG_GIVE;
+ }
+
+ if (pPlayer->GiveAmmo( nGive, "RPG_Rocket" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_rpgclip, CRpgAmmo);
+PRECACHE_REGISTER(ammo_rpgclip);
+
+
+// ========================================================================
+// >> Shotgun ammo
+// ========================================================================
+#define AMMO_SHOTGUN_GIVE 12
+#define AMMO_SHOTGUN_MODEL "models/w_shotbox.mdl"
+
+class CShotgunAmmo : public CHL1Item
+{
+public:
+ DECLARE_CLASS( CShotgunAmmo, CHL1Item );
+
+ void Spawn( void )
+ {
+ Precache();
+ SetModel( AMMO_SHOTGUN_MODEL );
+ BaseClass::Spawn();
+ }
+ void Precache( void )
+ {
+ PrecacheModel ( AMMO_SHOTGUN_MODEL );
+ }
+ bool MyTouch( CBasePlayer *pPlayer )
+ {
+ if (pPlayer->GiveAmmo( AMMO_SHOTGUN_GIVE, "Buckshot" ) )
+ {
+ if ( g_pGameRules->ItemShouldRespawn( this ) == GR_ITEM_RESPAWN_NO )
+ {
+ UTIL_Remove( this );
+ }
+ return true;
+ }
+ return false;
+ }
+};
+LINK_ENTITY_TO_CLASS(ammo_buckshot, CShotgunAmmo);
+PRECACHE_REGISTER(ammo_buckshot);