r1797 - branches/nexuiz-2.0/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Aug 3 04:53:53 EDT 2006


Author: div0
Date: 2006-08-03 04:53:53 -0400 (Thu, 03 Aug 2006)
New Revision: 1797

Modified:
   branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
   branches/nexuiz-2.0/data/qcsrc/server/defs.qh
   branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
   branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
Log:
weapon throw code cleanup


Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2006-08-02 11:36:39 UTC (rev 1796)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2006-08-03 08:53:53 UTC (rev 1797)
@@ -24,6 +24,53 @@
 	return FALSE;
 };
 
+string W_Name(float weaponid)
+{
+	if(weaponid == WEP_LASER)             return "Laser";
+	if(weaponid == WEP_UZI)               return "Machine Gun";
+	if(weaponid == WEP_SHOTGUN)           return "Shotgun";
+	if(weaponid == WEP_GRENADE_LAUNCHER)  return "Mortar";
+	if(weaponid == WEP_ELECTRO)           return "Electro";
+	if(weaponid == WEP_NEX)               return "Nex";
+	if(weaponid == WEP_HAGAR)             return "Hagar";
+	if(weaponid == WEP_ROCKET_LAUNCHER)   return "Rocket Launcher";
+	if(weaponid == WEP_CRYLINK)           return "Crylink";
+	return "@!#%'n Tuba";
+}
+
+float W_ItemCode(float wpn)
+{
+	switch(wpn)
+	{
+		case WEP_LASER:            return IT_LASER;
+		case WEP_SHOTGUN:          return IT_SHOTGUN;
+		case WEP_UZI:              return IT_UZI;
+		case WEP_GRENADE_LAUNCHER: return IT_GRENADE_LAUNCHER;
+		case WEP_ELECTRO:          return IT_ELECTRO;
+		case WEP_CRYLINK:          return IT_CRYLINK;
+		case WEP_NEX:              return IT_NEX;
+		case WEP_HAGAR:            return IT_HAGAR;
+		case WEP_ROCKET_LAUNCHER:  return IT_ROCKET_LAUNCHER;
+		default:                   return 0;
+	}
+}
+
+float W_AmmoItemCode(float wpn)
+{
+	switch(wpn)
+	{
+		case WEP_SHOTGUN:          return IT_SHELLS;
+		case WEP_UZI:              return IT_NAILS;
+		case WEP_GRENADE_LAUNCHER: return IT_ROCKETS;
+		case WEP_ELECTRO:          return IT_CELLS;
+		case WEP_CRYLINK:          return IT_CELLS;
+		case WEP_NEX:              return IT_CELLS;
+		case WEP_HAGAR:            return IT_ROCKETS;
+		case WEP_ROCKET_LAUNCHER:  return IT_ROCKETS;
+		default:                   return 0;
+	}
+}
+
 // think function for tossed weapons
 void() thrown_wep_think
 {
@@ -38,6 +85,7 @@
 {
 	local float w, ammo;
 	local entity wep, e;
+	local .float ammofield;
 
 	w = self.weapon;
 	if(w == WEP_LASER)
@@ -55,186 +103,27 @@
 	wep.velocity = velo; // e.velocity * 0.5 + v_forward * 750;
 	SUB_SetFade(wep, time + 20, 1);
 
-	if(w == WEP_SHOTGUN)
+	ammofield = Item_CounterField(W_AmmoItemCode(w));
+	w = W_ItemCode(w);
+	if(!(e.items & w))
 	{
-		w = IT_SHOTGUN;
-		if(!(e.items & w))
-		{
-			remove(wep);
-			self = e;
-			return;
-		}
-		weapon_shotgun();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_shells, wep.ammo_shells);
-			wep.ammo_shells = ammo;
-			e.ammo_shells -= ammo;
-		}
+		remove(wep);
+		goto leave;
 	}
-	else if(w == WEP_UZI)
+	(Item_SpawnFunc(w))();
+	if(startitem_failed)
+		goto leave;
+	if(doreduce)
 	{
-		w = IT_UZI;
-		if(!(e.items & w))
-		{
-			remove(wep);
-			self = e;
-			return;
-		}
-		weapon_uzi();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_nails, wep.ammo_nails);
-			wep.ammo_nails = ammo;
-			e.ammo_nails -= ammo;
-		}
+		ammo = min(e.ammofield, wep.ammofield);
+		wep.ammofield = ammo;
+		e.ammofield -= ammo;
 	}
-	else if(w == WEP_GRENADE_LAUNCHER)
-	{
-		w = IT_GRENADE_LAUNCHER;
-		if(!(e.items & w))
-		{
-			self = e;
-			remove(wep);
-			return;
-		}
-		weapon_grenadelauncher();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_rockets, wep.ammo_rockets);
-			wep.ammo_rockets = ammo;
-			e.ammo_rockets -= ammo;
-		}
-	}
-	else if(w == WEP_ELECTRO)
-	{
-		w = IT_ELECTRO;
-		if(!(e.items & w))
-		{
-			self = e;
-			remove(wep);
-			return;
-		}
-		weapon_electro();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_cells, wep.ammo_cells);
-			wep.ammo_cells = ammo;
-			e.ammo_cells -= ammo;
-		}
-	}
-	else if(w == WEP_CRYLINK)
-	{
-		w = IT_CRYLINK;
-		if(!(e.items & w))
-		{
-			self = e;
-			remove(wep);
-			return;
-		}
-		weapon_crylink();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_cells, wep.ammo_cells);
-			wep.ammo_cells = ammo;
-			e.ammo_cells -= ammo;
-		}
-	}
-	else if(w == WEP_NEX)
-	{
-		w = IT_NEX;
-		if(!(e.items & w))
-		{
-			self = e;
-			remove(wep);
-			return;
-		}
-		weapon_nex();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_cells, wep.ammo_cells);
-			wep.ammo_cells = ammo;
-			e.ammo_cells -= ammo;
-		}
-	}
-	else if(w == WEP_HAGAR)
-	{
-		w = IT_HAGAR;
-		if(!(e.items & w))
-		{
-			self = e;
-			remove(wep);
-			return;
-		}
-		weapon_hagar();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_rockets, wep.ammo_rockets);
-			wep.ammo_rockets = ammo;
-			e.ammo_rockets -= ammo;
-		}
-	}
-	else if(w == WEP_ROCKET_LAUNCHER)
-	{
-		w = IT_ROCKET_LAUNCHER;
-		if(!(e.items & w))
-		{
-			self = e;
-			remove(wep);
-			return;
-		}
-		weapon_rocketlauncher();
-		if(startitem_failed)
-		{
-			self = e;
-			return;
-		}
-		if(doreduce)
-		{
-			ammo = min(e.ammo_rockets, wep.ammo_rockets);
-			wep.ammo_rockets = ammo;
-			e.ammo_rockets -= ammo;
-		}
-	}
 
 	if(e.items & w)
 		if(e.health >= 1)
 			sprint(e, strcat("You dropped the ^2", wep.netname, "\n"));
+
 	wep.owner = e;
 	setorigin(wep, wep.origin);
 	wep.nextthink = time + 0.5;
@@ -246,6 +135,8 @@
 	wep.colormap = e.colormap;
 	if (e.switchweapon != e.weapon)
 		e.cnt = e.weapon;
+
+:leave
 	self = e;
 };
 
@@ -426,20 +317,6 @@
 	nixnex_nextweapon = id;
 }
 
-string W_Name(float weaponid)
-{
-	if(weaponid == WEP_LASER)             return "Laser";
-	if(weaponid == WEP_UZI)               return "Machine Gun";
-	if(weaponid == WEP_SHOTGUN)           return "Shotgun";
-	if(weaponid == WEP_GRENADE_LAUNCHER)  return "Mortar";
-	if(weaponid == WEP_ELECTRO)           return "Electro";
-	if(weaponid == WEP_NEX)               return "Nex";
-	if(weaponid == WEP_HAGAR)             return "Hagar";
-	if(weaponid == WEP_ROCKET_LAUNCHER)   return "Rocket Launcher";
-	if(weaponid == WEP_CRYLINK)           return "Crylink";
-	return "@!#%'n Tuba";
-}
-
 void Nixnex_GiveCurrentWeapon()
 {
 	float dt;
@@ -499,7 +376,7 @@
 		self.items = self.items - (self.items & (IT_LASER | IT_SHOTGUN | IT_UZI | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER));
 		if(cvar("g_nixnex_with_laser"))
 			self.items = self.items + IT_LASER;
-		self.items = self.items - (self.items & weapon_translateindextoflag(nixnex_weapon)) + weapon_translateindextoflag(nixnex_weapon);
+		self.items = self.items | W_ItemCode(nixnex_weapon);
 
 		if(self.switchweapon != nixnex_weapon)
 			if(!client_hasweapon(self, self.switchweapon, TRUE, FALSE))

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2006-08-02 11:36:39 UTC (rev 1796)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2006-08-03 08:53:53 UTC (rev 1797)
@@ -229,33 +229,6 @@
 	self.exteriorweaponentity.nextthink = time;
 };
 
-// convertion from index (= impulse) to flag in .items
-float(float index) weapon_translateindextoflag =
-{
-	if (index == WEP_LASER)
-		return IT_LASER;
-	else if (index == WEP_SHOTGUN)
-		return IT_SHOTGUN;
-	else if (index == WEP_UZI)
-		return IT_UZI;
-	else if (index == WEP_GRENADE_LAUNCHER)
-		return IT_GRENADE_LAUNCHER;
-	else if (index == WEP_ELECTRO)
-		return IT_ELECTRO;
-	else if (index == WEP_CRYLINK)
-		return IT_CRYLINK;
-	else if (index == WEP_NEX)
-		return IT_NEX;
-	else if (index == WEP_HAGAR)
-		return IT_HAGAR;
-	else if (index == WEP_ROCKET_LAUNCHER)
-		return IT_ROCKET_LAUNCHER;
-	else if (index == WEP_LASER)
-		return IT_LASER;
-	else
-		return 0;
-};
-
 float(entity cl, float wpn, float andammo, float complain) client_hasweapon =
 {
 	local float itemcode, f;
@@ -267,7 +240,7 @@
 			sprint(self, "Invalid weapon\n");
 		return FALSE;
 	}
-	itemcode = weapon_translateindextoflag(wpn);
+	itemcode = W_ItemCode(wpn);
 	if (cl.items & itemcode)
 	{
 		if (andammo)

Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2006-08-02 11:36:39 UTC (rev 1796)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2006-08-03 08:53:53 UTC (rev 1797)
@@ -271,3 +271,15 @@
 float teams_matter;
 
 float startitem_failed;
+
+
+
+typedef .float floatfield;
+typedef void(void) spawnfunc;
+floatfield Item_CounterField(float it);
+float Item_WeaponCode(float it);
+spawnfunc Item_SpawnFunc(float it);
+
+float W_AmmoItemCode(float wpn);
+float W_ItemCode(float wpn);
+string W_Name(float weaponid);

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc	2006-08-02 11:36:39 UTC (rev 1796)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc	2006-08-03 08:53:53 UTC (rev 1797)
@@ -51,7 +51,7 @@
 	//	w = player.switchweapon;
 	if(w == 0)
 		w = player.cnt; // previous weapon!
-	s = strcat(s, ftos(weapon_translateindextoflag(w)));
+	s = strcat(s, ftos(W_ItemCode(w)));
 	if(time < player.strength_finished)
 		s = strcat(s, "S");
 	if(time < player.invincible_finished)

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2006-08-02 11:36:39 UTC (rev 1796)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2006-08-03 08:53:53 UTC (rev 1797)
@@ -1,6 +1,3 @@
-string W_Name(float weaponid);
-float(float index) weapon_translateindextoflag;
-
 float logfile_open;
 float logfile;
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2006-08-02 11:36:39 UTC (rev 1796)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2006-08-03 08:53:53 UTC (rev 1797)
@@ -570,3 +570,57 @@
 }
 
 
+
+
+
+floatfield Item_CounterField(float it)
+{
+	switch(it)
+	{
+		case IT_SHELLS:      return ammo_shells;
+		case IT_NAILS:       return ammo_nails;
+		case IT_ROCKETS:     return ammo_rockets;
+		case IT_CELLS:       return ammo_cells;
+		case IT_5HP:         return health;
+		case IT_25HP:        return health;
+		case IT_HEALTH:      return health;
+		case IT_ARMOR_SHARD: return armorvalue;
+		case IT_ARMOR:       return armorvalue;
+		// add more things here (health, armor)
+		default:             error("requested item has no counter field");
+	}
+}
+
+float Item_WeaponCode(float it)
+{
+	switch(it)
+	{
+		case IT_LASER:            return WEP_LASER;
+		case IT_SHOTGUN:          return WEP_SHOTGUN;
+		case IT_UZI:              return WEP_UZI;
+		case IT_GRENADE_LAUNCHER: return WEP_GRENADE_LAUNCHER;
+		case IT_ELECTRO:          return WEP_ELECTRO;
+		case IT_CRYLINK:          return WEP_CRYLINK;
+		case IT_NEX:              return WEP_NEX;
+		case IT_HAGAR:            return WEP_HAGAR;
+		case IT_ROCKET_LAUNCHER:  return WEP_ROCKET_LAUNCHER;
+		default:                  return 0;
+	}
+}
+
+spawnfunc Item_SpawnFunc(float it)
+{
+	switch(it)
+	{
+		case IT_SHOTGUN:          return weapon_shotgun;
+		case IT_UZI:              return weapon_uzi;
+		case IT_GRENADE_LAUNCHER: return weapon_grenadelauncher;
+		case IT_ELECTRO:          return weapon_electro;
+		case IT_CRYLINK:          return weapon_crylink;
+		case IT_NEX:              return weapon_nex;
+		case IT_HAGAR:            return weapon_hagar;
+		case IT_ROCKET_LAUNCHER:  return weapon_rocketlauncher;
+		// add all other item spawn functions here
+		default:                  error("requested item can't be spawned");
+	}
+}




More information about the nexuiz-commits mailing list