From 0a7f077d2afa8eede51253055d459b9af5e52072 Mon Sep 17 00:00:00 2001
From: Samual Lenks <samual@xonotic.org>
Date: Tue, 14 May 2013 03:13:53 -0400
Subject: [PATCH] Save what i've got now for later if necessary

---
 qcsrc/common/items.qc      |  8 +++++++-
 qcsrc/common/items.qh      | 16 +++++++++-------
 qcsrc/server/cl_weapons.qc |  9 +++++----
 qcsrc/server/defs.qh       |  2 --
 4 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/qcsrc/common/items.qc b/qcsrc/common/items.qc
index c961895d9..913d16bc8 100644
--- a/qcsrc/common/items.qc
+++ b/qcsrc/common/items.qc
@@ -2,7 +2,7 @@
 entity weapon_info[WEP_MAXCOUNT];
 entity dummy_weapon_info;
 
-void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname)
+void register_weapon(float id, float(float) func, float droptime, float raisetime, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname)
 {
 	entity e;
 	weapon_info[id - 1] = e = spawn();
@@ -19,6 +19,7 @@ void register_weapon(float id, float(float) func, float ammotype, float i, float
 	e.model2 = strzone(strcat("wpn-", e.mdl));
 	e.impulse = i;
 	e.bot_pickupbasevalue = pickupbasevalue;
+	
 	if(ammotype & IT_SHELLS)
 		e.ammo_field = ammo_shells;
 	else if(ammotype & IT_NAILS)
@@ -31,6 +32,9 @@ void register_weapon(float id, float(float) func, float ammotype, float i, float
 		e.ammo_field = ammo_fuel;
 	else
 		e.ammo_field = ammo_batteries;
+
+	e.switchdelay_drop = droptime;
+	e.switchdelay_raise = raisetime;
 }
 float w_null(float dummy)
 {
@@ -52,6 +56,8 @@ void register_weapons_done()
 	dummy_weapon_info.model2 = "";
 	dummy_weapon_info.impulse = -1;
 	dummy_weapon_info.bot_pickupbasevalue = 0;
+	dummy_weapon_info.switchdelay_drop = 0;
+	dummy_weapon_info.switchdelay_raise = 0;
 
 	float i;
 	weaponorder_byid = "";
diff --git a/qcsrc/common/items.qh b/qcsrc/common/items.qh
index ba42d55ac..c0aab581b 100644
--- a/qcsrc/common/items.qh
+++ b/qcsrc/common/items.qh
@@ -83,11 +83,13 @@ string W_NumberWeaponOrder(string order);
 .float bot_pickupbasevalue; // bot weapon priority
 .string model2; // wpn- sprite name
 ..float ammo_field; // main ammo field
+.float switchdelay_drop; // amount of time to complete drop frame for weapon
+.float switchdelay_raise; // amount of time to complete raise frame for weapon
 // also, weaponinfo ents can act as a WEPSET
 
 // dynamic weapon adding
 float w_null(float dummy);
-void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname);
+void register_weapon(float id, float(float) func, float droptime, float raisetime, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname);
 void register_weapons_done();
 
 #define WEP_FIRST 1
@@ -207,7 +209,7 @@ float WEP_LAST;
 WEPSET_DECLARE_A(WEPBIT_ALL);
 WEPSET_DECLARE_A(WEPBIT_SUPERWEAPONS);
 // note: the fabs call is just there to hide "if result is constant" warning
-#define REGISTER_WEAPON_2(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
+#define REGISTER_WEAPON_2(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
 	float id; \
 	float func(float); \
 	void RegisterWeapons_##id() \
@@ -217,15 +219,15 @@ WEPSET_DECLARE_A(WEPBIT_SUPERWEAPONS);
 		if(fabs(weapontype & WEP_FLAG_SUPERWEAPON)) \
 			WEPSET_OR_AW(WEPBIT_SUPERWEAPONS, id); \
 		++WEP_COUNT; \
-		register_weapon(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \
+		register_weapon(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \
 	} \
 	ACCUMULATE_FUNCTION(RegisterWeapons, RegisterWeapons_##id)
 #ifdef MENUQC
-#define REGISTER_WEAPON(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
-	REGISTER_WEAPON_2(WEP_##id,w_null,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
+#define REGISTER_WEAPON(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
+	REGISTER_WEAPON_2(WEP_##id,w_null,0,0,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
 #else
-#define REGISTER_WEAPON(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
-	REGISTER_WEAPON_2(WEP_##id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
+#define REGISTER_WEAPON(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
+	REGISTER_WEAPON_2(WEP_##id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
 #endif
 
 #include "../server/w_all.qc"
diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc
index c4603aa65..a34e5fad3 100644
--- a/qcsrc/server/cl_weapons.qc
+++ b/qcsrc/server/cl_weapons.qc
@@ -398,6 +398,9 @@ void W_WeaponFrame()
 	// Change weapon
 	if (self.weapon != self.switchweapon)
 	{
+		entity e;
+		e = get_weaponinfo(self.switchweapon);
+		
 		if (self.weaponentity.state == WS_CLEAR)
 		{
 			// end switching!
@@ -408,8 +411,6 @@ void W_WeaponFrame()
 			weapon_action(self.switchweapon, WR_SETUP);
 
 			// set our clip load to the load of the weapon we switched to, if it's reloadable
-			entity e;
-			e = get_weaponinfo(self.switchweapon);
 			if(e.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", e.netname, "_reload_ammo"))) // prevent accessing undefined cvars
 			{
 				self.clip_load = self.(weapon_load[self.switchweapon]);
@@ -420,7 +421,7 @@ void W_WeaponFrame()
 
 			// VorteX: add player model weapon select frame here
 			// setcustomframe(PlayerWeaponRaise);
-			weapon_thinkf(WFRAME_IDLE, ((self.weaponentity.switchdelay_raise < 0) ? autocvar_g_balance_weaponswitchdelay : self.weaponentity.switchdelay_raise), w_ready);
+			weapon_thinkf(WFRAME_IDLE, cvar(sprintf("g_balance_%s_switchdelay_raise", e.netname)), w_ready);
 			weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');
 		}
 		else if (self.weaponentity.state == WS_DROP)
@@ -440,7 +441,7 @@ void W_WeaponFrame()
 			sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
 			self.weaponentity.state = WS_DROP;
 			// set up weapon switch think in the future, and start drop anim
-			weapon_thinkf(WFRAME_DONTCHANGE, ((self.weaponentity.switchdelay_drop < 0) ? autocvar_g_balance_weaponswitchdelay : self.weaponentity.switchdelay_drop), w_clear);
+			weapon_thinkf(WFRAME_DONTCHANGE, cvar(sprintf("g_balance_%s_switchdelay_drop", e.netname)), w_clear);
 			weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);
 #ifndef INDEPENDENT_ATTACK_FINISHED
 			}
diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh
index 21bfa0a84..7d3585725 100644
--- a/qcsrc/server/defs.qh
+++ b/qcsrc/server/defs.qh
@@ -177,8 +177,6 @@ void setanim(entity e, vector anim, float looping, float override, float restart
 .vector weaponentity_glowmod;
 
 //.float weapon; // current weapon
-.float switchdelay_drop; // amount of time to complete drop frame for weapon
-.float switchdelay_raise; // amount of time to complete raise frame for weapon
 .float switchweapon; // weapon requested to switch to
 .float switchingweapon; // weapon currently being switched to (is copied from switchweapon once switch is possible)
 .string weaponname; // name of .weapon
-- 
2.39.5