From: Mircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Date: Fri, 21 Jan 2011 02:03:50 +0000 (+0200)
Subject: Part 2 of per-weapon load persistence. Much closer to what it should be like
X-Git-Tag: xonotic-v0.5.0~309^2~7^2~176
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=8c2ca1c3540e236dad9cab692e8bdff19cd2c7a8;p=xonotic%2Fxonotic-data.pk3dir.git

Part 2 of per-weapon load persistence. Much closer to what it should be like
---

diff --git a/balanceXonotic.cfg b/balanceXonotic.cfg
index 414222b286..24bdbe08bd 100644
--- a/balanceXonotic.cfg
+++ b/balanceXonotic.cfg
@@ -263,7 +263,7 @@ set g_balance_shotgun_secondary_damage 110
 set g_balance_shotgun_secondary_force 150
 set g_balance_shotgun_secondary_refire 1.1
 set g_balance_shotgun_secondary_animtime 1
-set g_balance_shotgun_reload_ammo 4
+set g_balance_shotgun_reload_ammo 5
 // }}}
 // {{{ uzi
 set g_balance_uzi_mode 1 				// Activates varible spread for sustained & burst mode secondary
diff --git a/qcsrc/server/cl_weaponsystem.qc b/qcsrc/server/cl_weaponsystem.qc
index 31f3da102e..914abef358 100644
--- a/qcsrc/server/cl_weaponsystem.qc
+++ b/qcsrc/server/cl_weaponsystem.qc
@@ -1616,27 +1616,16 @@ void W_SetupProjectileVelocity(entity missile, float pSpeed, float spread)
 // weapon reload code
 // ----------------------------------------------------------------
 
-void W_ReloadedAndReady()
+float W_ReloadCheck(float ammo_amount)
 {
-	float t;
-	self.ammo_counter = autocvar_g_balance_sniperrifle_magazinecapacity;
-	t = ATTACK_FINISHED(self) - autocvar_g_balance_sniperrifle_reloadtime - 1;
-	ATTACK_FINISHED(self) = t;
-	w_ready();
-}
-
-float W_Reload(float ammo_value)
-{
-	float t;
-
-	if(ammo_value < min(autocvar_g_balance_sniperrifle_primary_ammo, autocvar_g_balance_sniperrifle_secondary_ammo)) // when we get here, bulletcounter must be 0 or -1
+	if(ammo_amount < min(autocvar_g_balance_sniperrifle_primary_ammo, autocvar_g_balance_sniperrifle_secondary_ammo)) // when we get here, ammo_counter must be 0 or -1
 	{
-		print("cannot reload... not enough bullets\n");
+		print("cannot reload... not enough ammo\n");
 		self.ammo_counter = -1; // reload later
 		W_SwitchToOtherWeapon(self);
 		return 0;
 	}
-	
+
 	if (self.ammo_counter >= autocvar_g_balance_shotgun_reload_ammo)
 		return 0;
 
@@ -1649,15 +1638,6 @@ float W_Reload(float ammo_value)
 		self.weaponentity.state = WS_READY;
 	}
 
-	sound (self, CHAN_WEAPON2, "weapons/campingrifle_reload.wav", VOL_BASE, ATTN_NORM);
-
-	t = max(time, ATTACK_FINISHED(self)) + autocvar_g_balance_sniperrifle_reloadtime + 1;
-	ATTACK_FINISHED(self) = t;
-
-	weapon_thinkf(WFRAME_RELOAD, autocvar_g_balance_sniperrifle_reloadtime, W_ReloadedAndReady);
-
-	self.ammo_counter = -1;
-
 	return 1;
 }
 
diff --git a/qcsrc/server/w_shotgun.qc b/qcsrc/server/w_shotgun.qc
index 4af29229d5..13f2cfe67e 100644
--- a/qcsrc/server/w_shotgun.qc
+++ b/qcsrc/server/w_shotgun.qc
@@ -7,31 +7,50 @@ REGISTER_WEAPON(SHOTGUN, w_shotgun, IT_SHELLS, 2, WEP_FLAG_NORMAL | WEP_TYPE_HIT
 
 void W_Shotgun_SetAmmoCounter()
 {
-	// set our ammo counter to the weapon we have switched to
+	// set ammo counter to the weapon we have switched to
 	if(!autocvar_g_balance_shotgun_reload_ammo)
 		self.ammo_counter = 0; // also keeps the crosshair ammo from displaying
 	else
 		self.ammo_counter = self.shotgun_load;
 }
 
+void W_Shotgun_ReloadedAndReady()
+{
+	float t;
+
+	// now do the ammo maths
+	self.ammo_counter = 0; // when we get here it's -1
+	while(self.ammo_counter < autocvar_g_balance_shotgun_reload_ammo)
+	{
+		self.ammo_counter += 1;
+		self.ammo_shells -= 1;
+	}
+	self.shotgun_load = self.ammo_counter;
+
+	t = ATTACK_FINISHED(self) - autocvar_g_balance_sniperrifle_reloadtime - 1;
+	ATTACK_FINISHED(self) = t;
+	w_ready();
+}
+
 void W_Shotgun_Reload()
 {
 	// reloading is disabled for this weapon
 	if(!autocvar_g_balance_shotgun_reload_ammo)
 		return;
 
-	w_ready();
-	if(W_Reload(self.ammo_shells))
-	{
-		// now do the actual ammo transfer
-		for(self.shotgun_load; self.shotgun_load < autocvar_g_balance_shotgun_reload_ammo && self.ammo_shells; )
-		{
-			self.ammo_counter += 1;
-			self.shotgun_load = self.ammo_counter;
-			self.ammo_shells -= 1;
-		}
+	float t;
+
+	if(!W_ReloadCheck(self.ammo_shells))
 		return;
-	}
+
+	sound (self, CHAN_WEAPON2, "weapons/campingrifle_reload.wav", VOL_BASE, ATTN_NORM);
+
+	t = max(time, ATTACK_FINISHED(self)) + autocvar_g_balance_sniperrifle_reloadtime + 1;
+	ATTACK_FINISHED(self) = t;
+
+	weapon_thinkf(WFRAME_RELOAD, autocvar_g_balance_sniperrifle_reloadtime, W_Shotgun_ReloadedAndReady);
+
+	self.ammo_counter = -1;
 }
 
 void W_Shotgun_Attack (void)
@@ -182,7 +201,7 @@ float w_shotgun(float req)
                 if(self.weaponentity.state == WS_READY)
                 {
                     self.wish_reload = 0;
-                    W_Reload(self.ammo_shells);
+                    W_Shotgun_Reload();
                 }
             }
         }
diff --git a/qcsrc/server/w_sniperrifle.qc b/qcsrc/server/w_sniperrifle.qc
index 378e0622aa..10d77affa1 100644
--- a/qcsrc/server/w_sniperrifle.qc
+++ b/qcsrc/server/w_sniperrifle.qc
@@ -24,13 +24,13 @@ void W_SniperRifle_Reload()
 		return;
 
 	w_ready();
-	if(W_Reload(self.ammo_nails))
+	/*if(W_Reload(self.ammo_nails))
 	{
 		// now do the actual ammo transfer
 		for(self.sniperrifle_load; self.sniperrifle_load < autocvar_g_balance_shotgun_reload_ammo && self.ammo_nails; ++self.sniperrifle_load)
 			self.ammo_nails -= 1;
 		return;
-	}
+	}*/
 }
 
 float W_SniperRifle_CheckMaxBullets(float checkammo)
@@ -110,8 +110,8 @@ void spawnfunc_weapon_campingrifle (void)
 void W_SniperRifle_BulletHail_Continue()
 {
 	float r, sw, af;
-	if(self.ammo_counter <= 0)
-		W_SniperRifle_Reload();
+	//if(self.ammo_counter <= 0)
+		//W_SniperRifle_Reload();
 	if(self.ammo_counter < 0)
 		return; // reloading, so we are done
 	sw = self.switchweapon; // make it not detect weapon changes as reason to abort firing
@@ -224,7 +224,7 @@ float w_sniperrifle(float req)
                 if(self.weaponentity.state == WS_READY)
                 {
                     self.wish_reload = 0;
-                    W_Reload(self.ammo_nails);
+                    //W_Reload(self.ammo_nails);
                 }
             }
         }