r2478 - in trunk: data data/qcsrc/server pro

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu May 3 21:22:21 EDT 2007


Author: lordhavoc
Date: 2007-05-03 21:22:21 -0400 (Thu, 03 May 2007)
New Revision: 2478

Modified:
   trunk/data/default.cfg
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_impulse.qc
   trunk/data/qcsrc/server/cl_player.qc
   trunk/data/qcsrc/server/cl_weapons.qc
   trunk/data/qcsrc/server/cl_weaponsystem.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/g_casings.qc
   trunk/data/qcsrc/server/g_world.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/t_items.qc
   trunk/data/qcsrc/server/t_jumppads.qc
   trunk/data/qcsrc/server/w_crylink.qc
   trunk/data/qcsrc/server/w_electro.qc
   trunk/data/qcsrc/server/w_grenadelauncher.qc
   trunk/data/qcsrc/server/w_hagar.qc
   trunk/data/qcsrc/server/w_laser.qc
   trunk/data/qcsrc/server/w_nex.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
   trunk/data/qcsrc/server/w_shotgun.qc
   trunk/data/qcsrc/server/w_uzi.qc
   trunk/pro/default.cfg
Log:
very major cleanup of precache code, this patch reduced memory usage
(mostly textures) by 190MB in testing, however the old behavior can be
reenabled by use of the new sv_precache* cvars if any problems arise
added ekg cvar ('engine killing gibs mode' for the ROTT fans)
moved player starting equipment code to level startup


Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/default.cfg	2007-05-04 01:22:21 UTC (rev 2478)
@@ -113,7 +113,11 @@
 // use default physics
 exec physicsQBR.cfg
 
+seta sv_precacheplayermodels 0
+seta sv_precacheweapons 0
+seta sv_precacheitems 0
 set sv_spectator_speed_multiplier 1.5
+seta sv_precacheplayermodels 0
 seta sv_spectate 1
 seta sv_defaultcharacter 0
 seta sv_defaultplayermodel models/player/nexus.zym
@@ -122,6 +126,7 @@
 net_messagetimeout 300
 net_connecttimeout 30
 sv_jumpstep 1 // step up stairs while jumping, makes it easier to reach ledges
+set ekg 0
 
 cl_movement 1
 seta cl_autoswitch 1

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/cl_client.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -415,10 +415,20 @@
 		self.flags = FL_CLIENT;
 		self.takedamage = DAMAGE_AIM;
 		self.effects = 0;
-		self.health = cvar("g_balance_health_start");
 		self.air_finished = time + 12;
 		self.dmg = 2;
-		self.armorvalue = cvar("g_balance_armor_start");
+
+		self.ammo_shells = start_ammo_shells;
+		self.ammo_nails = start_ammo_nails;
+		self.ammo_rockets = start_ammo_rockets;
+		self.ammo_cells = start_ammo_cells;
+		self.health = start_health;
+		self.armorvalue = start_armorvalue;
+		self.items = start_items;
+		self.switchweapon = start_switchweapon;
+		self.weapon = 0;
+		self.jump_interval = time;
+
 		self.spawnshieldtime = time + cvar("g_spawnshieldtime");
 		self.pauserotarmor_finished = time + cvar("g_balance_pause_armor_rot_spawn");
 		self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn");
@@ -441,8 +451,6 @@
 		// players have no think function
 		self.think = SUB_Null;
 		self.nextthink = 0;
-		self.weapon = 0;
-		self.switchweapon = 0;
 		self.hook_time = 0;
 
 		self.runes = 0;
@@ -486,104 +494,6 @@
 		// don't reset back to last position, even if new position is stuck in solid
 		self.oldorigin = self.origin;
 
-		if(cvar("g_lms"))
-		{
-			self.ammo_shells = cvar("g_lms_start_ammo_shells");
-			self.ammo_nails = cvar("g_lms_start_ammo_nails");
-			self.ammo_rockets = cvar("g_lms_start_ammo_rockets");
-			self.ammo_cells = cvar("g_lms_start_ammo_cells");
-			self.health = cvar("g_lms_start_health");
-			self.armorvalue = cvar("g_lms_start_armor");
-		}
-		else if (cvar("g_use_ammunition")) {
-			self.ammo_shells = cvar("g_start_ammo_shells");
-			self.ammo_nails = cvar("g_start_ammo_nails");
-			self.ammo_rockets = cvar("g_start_ammo_rockets");
-			self.ammo_cells = cvar("g_start_ammo_cells");
-		} else {
-			self.ammo_shells = 999;
-			self.ammo_nails = 999;
-			self.ammo_rockets = 999;
-			self.ammo_cells = 999;
-		}
-
-		self.items = 0;
-		if (cvar("g_start_weapon_laser") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_LASER;
-			self.switchweapon = WEP_LASER;
-		}
-		if (cvar("g_start_weapon_shotgun") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_SHOTGUN;
-			self.switchweapon = WEP_SHOTGUN;
-		}
-		if (cvar("g_start_weapon_uzi") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_UZI;
-			self.switchweapon = WEP_UZI;
-		}
-		if (cvar("g_start_weapon_grenadelauncher") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_GRENADE_LAUNCHER;
-			self.switchweapon = WEP_GRENADE_LAUNCHER;
-		}
-		if (cvar("g_start_weapon_electro") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_ELECTRO;
-			self.switchweapon = WEP_ELECTRO;
-		}
-		if (cvar("g_start_weapon_crylink") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_CRYLINK;
-			self.switchweapon = WEP_CRYLINK;
-		}
-		if (cvar("g_start_weapon_nex") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_NEX;
-			self.switchweapon = WEP_NEX;
-		}
-		if (cvar("g_start_weapon_hagar") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_HAGAR;
-			self.switchweapon = WEP_HAGAR;
-		}
-		if (cvar("g_start_weapon_rocketlauncher") || cvar("g_lms"))
-		{
-			self.items = self.items | IT_ROCKET_LAUNCHER;
-			self.switchweapon = WEP_ROCKET_LAUNCHER;
-		}
-
-		if(cvar("g_instagib"))
-		{
-			self.items = IT_NEX;
-			self.switchweapon = WEP_NEX;
-			self.ammo_cells = 999;
-		}
-
-		if(cvar("g_rocketarena"))
-		{
-			self.items = IT_ROCKET_LAUNCHER;
-			self.switchweapon = WEP_ROCKET_LAUNCHER;
-			self.ammo_rockets = 999;
-		}
-
-		if(cvar("g_nixnex"))
-		{
-			self.items = 0;
-			// will be done later
-		}
-
-		if(cvar("g_minstagib"))
-		{
-			self.health = 100;
-			self.armorvalue = 0;
-			self.items = IT_NEX;
-			self.switchweapon = WEP_NEX;
-			self.ammo_cells = cvar("g_minstagib_ammo_start");
-			self.jump_interval = time;
-		}
-
 		if(cvar("g_arena"))
 		{
 			Spawnqueue_Remove(self);
@@ -616,12 +526,14 @@
 
 		if(cvar("spawn_debug"))
 		{
-				sprint(self, strcat("spawnpoint origin:  ", vtos(spot.origin), "\n"));
-				remove(spot);	// usefull for checking if there are spawnpoints, that let drop through the floor
+			sprint(self, strcat("spawnpoint origin:  ", vtos(spot.origin), "\n"));
+			remove(spot);	// usefull for checking if there are spawnpoints, that let drop through the floor
 		}
 
 		//stuffcmd(self, "chase_active 0");
 	 	//stuffcmd(self, "set viewsize $tmpviewsize \n");
+
+		sound (self, CHAN_AUTO, "misc/teleport.wav", 1, ATTN_NORM);
 	} else if(self.classname == "observer") {
 		PutObserverInServer ();
 	}

Modified: trunk/data/qcsrc/server/cl_impulse.qc
===================================================================
--- trunk/data/qcsrc/server/cl_impulse.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/cl_impulse.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -183,12 +183,23 @@
 				if(imp == 99)
 				{
 					self.items |= (IT_LASER | IT_UZI | IT_SHOTGUN | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER);
-					self.ammo_shells = 999;
-					self.ammo_nails = 999;
-					self.ammo_rockets = 999;
-					self.ammo_cells = 999;
-					self.health = 999;
-					self.armorvalue = 999;
+					self.ammo_shells = cvar("g_pickup_shells_max");
+					self.ammo_nails = cvar("g_pickup_nails_max");
+					self.ammo_rockets = cvar("g_pickup_rockets_max");
+					self.ammo_cells = cvar("g_pickup_cells_max");
+					self.health = cvar("g_pickup_healthshard_max");
+					self.armorvalue = cvar("g_pickup_armorshard_max");
+					self.pauserotarmor_finished = time + cvar("g_balance_pause_armor_rot_spawn");
+					self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn");
+					self.pauseregen_finished = time + cvar("g_balance_pause_health_regen_spawn");
+					// precache weapon models/sounds
+					local float wep;
+					wep = WEP_FIRST;
+					while (wep <= WEP_LAST)
+					{
+						weapon_action(wep, WR_PRECACHE);
+						wep = wep + 1;
+					}
 				}
 				else if (imp == 13)
 				{

Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/cl_player.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -176,28 +176,37 @@
 		self.view_ofs = '0 0 4';
 
 		// make a juicy mess
-		te_bloodshower (self.origin + self.mins, self.origin + self.maxs, 800, 1000);
-		te_bloodshower (self.origin + self.mins, self.origin + self.maxs, 400, 1000);
+		local float multiplier;
+		multiplier = 1;
+		if (cvar("ekg"))
+			multiplier = 5;
+		te_bloodshower (self.origin + self.mins, self.origin + self.maxs, 1200 * multiplier, 1000);
 
 		// make a meaty mess
 		TossGib (self, "models/gibs/eye.md3", self.origin, self.velocity,0);
 		TossGib (world, "models/gibs/bloodyskull.md3", self.origin, '0 0 600',0);
 
-		TossGib (world, "models/gibs/gib1.md3", self.origin, self.velocity,0);
-		//TossGib (world, "models/gibs/gib2.md3", self.origin, self.velocity,0);
-		TossGib (world, "models/gibs/gib1.mdl", self.origin, self.velocity,0);
-		//TossGib (world, "models/gibs/gib3.md3", self.origin, self.velocity,0);
-		TossGib (world, "models/gibs/gib2.mdl", self.origin, self.velocity,0);
-		//TossGib (world, "models/gibs/gib4.md3", self.origin, self.velocity,0);
-		TossGib (world, "models/gibs/gib3.mdl", self.origin, self.velocity,0);
+		local float c;
+		c = 0;
+		while (c < multiplier)
+		{
+			c = c + 1;
+			TossGib (world, "models/gibs/gib1.md3", self.origin, self.velocity,0);
+			//TossGib (world, "models/gibs/gib2.md3", self.origin, self.velocity,0);
+			TossGib (world, "models/gibs/gib1.mdl", self.origin, self.velocity,0);
+			//TossGib (world, "models/gibs/gib3.md3", self.origin, self.velocity,0);
+			TossGib (world, "models/gibs/gib2.mdl", self.origin, self.velocity,0);
+			//TossGib (world, "models/gibs/gib4.md3", self.origin, self.velocity,0);
+			TossGib (world, "models/gibs/gib3.mdl", self.origin, self.velocity,0);
 
-		// these destory on impact
-		TossGib (world, "models/gibs/gib5.md3", self.origin, '-500 0 450',1);
-		//TossGib (world, "models/gibs/gib6.md3", self.origin, '0 500 450',1);
-		TossGib (world, "models/gibs/chunk.mdl", self.origin, '0 -500 450',1);
-		TossGib (world, "models/gibs/chunk.mdl", self.origin, '500 0 450',1);
-		TossGib (world, "models/gibs/chunk.mdl", self.origin, self.velocity,1);
-		TossGib (world, "models/gibs/chunk.mdl", self.origin, '0 0 450',1);
+			// these destory on impact
+			TossGib (world, "models/gibs/gib5.md3", self.origin, '-500 0 450',1);
+			//TossGib (world, "models/gibs/gib6.md3", self.origin, '0 500 450',1);
+			TossGib (world, "models/gibs/chunk.mdl", self.origin, '0 -500 450',1);
+			TossGib (world, "models/gibs/chunk.mdl", self.origin, '500 0 450',1);
+			TossGib (world, "models/gibs/chunk.mdl", self.origin, self.velocity,1);
+			TossGib (world, "models/gibs/chunk.mdl", self.origin, '0 0 450',1);
+		}
 
 		sound (self, CHAN_VOICE, "misc/gib.wav", 1, ATTN_NORM);
 	}

Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/cl_weapons.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -122,7 +122,7 @@
 
 	if(e.items & w)
 		if(e.health >= 1)
-			sprint(e, strcat("You dropped the ^2", wep.netname, "\n"));
+			sprint(e, strcat("You dropped the ^2", wep.netname, " with ", ftos(wep.ammofield), " ammo", "\n"));
 
 	wep.owner = e;
 	setorigin(wep, wep.origin);
@@ -346,10 +346,10 @@
 			}
 			else
 			{
-				self.ammo_shells = 999;
-				self.ammo_nails = 999;
-				self.ammo_rockets = 999;
-				self.ammo_cells = 999;
+				self.ammo_shells = cvar("g_pickup_shells_max");
+				self.ammo_nails = cvar("g_pickup_nails_max");
+				self.ammo_rockets = cvar("g_pickup_rockets_max");
+				self.ammo_cells = cvar("g_pickup_cells_max");
 			}
 			self.nixnex_nextincr = time + cvar("g_balance_nixnex_incrtime");
 			if(dt >= 1 && dt <= 5)
@@ -375,7 +375,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 | IT_LASER;
 		self.items = self.items | W_ItemCode(nixnex_weapon);
 
 		if(self.switchweapon != nixnex_weapon)

Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -23,7 +23,7 @@
 void(entity ent, vector vecs, float antilag, float recoil, string snd) W_SetupShot =
 {
 	local vector trueaimpoint;
-	traceline_hitcorpse(self, self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, self);
+	traceline_hitcorpse(self, self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, self);
 	trueaimpoint = trace_endpos;
 
 	if (cvar("g_shootfromeye"))

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/defs.qh	2007-05-04 01:22:21 UTC (rev 2478)
@@ -138,6 +138,7 @@
 float WR_CHECKAMMO1	  = 3; // checks ammo for weapon
 float WR_CHECKAMMO2	  = 4; // checks ammo for weapon
 float WR_AIM		  = 5; // runs bot aiming code for this weapon
+float WR_PRECACHE	  = 6; // precaches models/sounds used by this weapon
 
 // Weapon indexes
 float WEP_LASER				= 1; // float	IT_LASER				= 4096;

Modified: trunk/data/qcsrc/server/g_casings.qc
===================================================================
--- trunk/data/qcsrc/server/g_casings.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/g_casings.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -81,7 +81,8 @@
 	}
 	else if (casingtype == 2)
 	{
-		setmodel (e, "models/casing_steel.mdl"); // precision set above
+		// FIXME: this is not used and not precached, uncomment if you need it
+		//setmodel (e, "models/casing_steel.mdl"); // precision set above
 		e.cnt = time + 10;
 	}
 	else

Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/g_world.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -88,108 +88,55 @@
 	soundpack = strzone(soundpack);
 	*/
 
-	// Precache all player models
-	// Workaround for "invisible players"
-	precache_model("models/player/carni.zym");
-	precache_model("models/player/crash.zym");
-	precache_model("models/player/grunt.zym");
-	precache_model("models/player/headhunter.zym");
-	precache_model("models/player/insurrectionist.zym");
-	precache_model("models/player/jeandarc.zym");
-	precache_model("models/player/lurk.zym");
-	precache_model("models/player/lycanthrope.zym");
-	precache_model("models/player/marine.zym");
-	precache_model("models/player/nexus.zym");
-	precache_model("models/player/pyria.zym");
-	precache_model("models/player/shock.zym");
-	precache_model("models/player/skadi.zym");
-	precache_model("models/player/specop.zym");
-	precache_model("models/player/visitant.zym");
+	// gamemode related things
+	precache_model ("models/misc/chatbubble.spr");
+	precache_model ("models/misc/teambubble.spr");
+	if (cvar("g_runematch"))
+	{
+		precache_model ("models/runematch/curse.mdl");
+		precache_model ("models/runematch/rune.mdl");
+	}
 
-	//precache_model ("progs/beam.mdl");
-	precache_model ("models/bullet.mdl");
-	precache_model ("models/casing_bronze.mdl");
-	precache_model ("models/casing_shell.mdl");
-	precache_model ("models/casing_steel.mdl");
-	precache_model ("models/ebomb.mdl");
-	precache_model ("models/elaser.mdl");
-	precache_model ("models/flash.md3");
+	// Precache all player models if desired
+	if (cvar("sv_precacheplayermodels"))
+	{
+		precache_model("models/player/carni.zym");
+		precache_model("models/player/crash.zym");
+		precache_model("models/player/grunt.zym");
+		precache_model("models/player/headhunter.zym");
+		precache_model("models/player/insurrectionist.zym");
+		precache_model("models/player/jeandarc.zym");
+		precache_model("models/player/lurk.zym");
+		precache_model("models/player/lycanthrope.zym");
+		precache_model("models/player/marine.zym");
+		precache_model("models/player/nexus.zym");
+		precache_model("models/player/pyria.zym");
+		precache_model("models/player/shock.zym");
+		precache_model("models/player/skadi.zym");
+		precache_model("models/player/specop.zym");
+		precache_model("models/player/visitant.zym");
+	}
+
+	if (cvar("g_footsteps"))
+	{
+		precache_sound ("misc/footstep01.wav");
+		precache_sound ("misc/footstep02.wav");
+		precache_sound ("misc/footstep03.wav");
+		precache_sound ("misc/footstep04.wav");
+		precache_sound ("misc/footstep05.wav");
+		precache_sound ("misc/footstep06.wav");
+	}
+
+	// gore and miscellaneous sounds
+	//precache_sound ("misc/h2ohit.wav");
 	precache_model ("models/gibs/bloodyskull.md3");
 	precache_model ("models/gibs/chunk.mdl");
 	precache_model ("models/gibs/eye.md3");
 	precache_model ("models/gibs/gib1.md3");
-	//precache_model ("models/gibs/gib2.md3");
-	//precache_model ("models/gibs/gib3.md3");
-	//precache_model ("models/gibs/gib4.md3");
-	precache_model ("models/gibs/gib5.md3");
-	//precache_model ("models/gibs/gib6.md3");
 	precache_model ("models/gibs/gib1.mdl");
 	precache_model ("models/gibs/gib2.mdl");
 	precache_model ("models/gibs/gib3.mdl");
-	precache_model ("models/grenademodel.md3");
-	precache_model ("models/hagarmissile.mdl");
-	precache_model ("models/items/a_bullets.mdl");
-	precache_model ("models/items/a_cells.md3");
-	precache_model ("models/items/a_rockets.md3");
-	precache_model ("models/items/a_shells.md3");
-	precache_model ("models/items/g_a1.md3");
-	precache_model ("models/items/g_a25.md3");
-	precache_model ("models/items/g_h1.md3");
-	precache_model ("models/items/g_h25.md3");
-	precache_model ("models/items/g_h100.md3");
-	precache_model ("models/items/g_invincible.md3");
-	precache_model ("models/items/g_strength.md3");
-	precache_model ("models/laser.mdl");
-	precache_model ("models/misc/chatbubble.spr");
-	precache_model ("models/misc/teambubble.spr");
-	precache_model ("models/nexflash.md3");
-	precache_model ("models/plasma.mdl");
-	precache_model ("models/plasmatrail.mdl");
-	precache_model ("models/rocket.md3");
-	//precache_model ("models/sprites/grenexpl.spr");
-	precache_model ("models/runematch/rune.mdl");
-	precache_model ("models/runematch/curse.mdl");
-	//precache_model ("models/sprites/hagar.spr");
-	//precache_model ("models/sprites/muzzleflash.spr32");
-	//precache_model ("models/sprites/electrocombo.spr32");
-	//precache_model ("models/sprites/plasmahitwall.spr32");
-	//precache_model ("models/sprites/plasmashot.spr32");
-	//precache_model ("models/sprites/rockexpl.spr");
-	precache_model ("models/tracer.mdl");
-	precache_model ("models/uziflash.md3");
-	precache_model ("models/weapons/g_crylink.md3");
-	precache_model ("models/weapons/g_electro.md3");
-	precache_model ("models/weapons/g_gl.md3");
-	precache_model ("models/weapons/g_hagar.md3");
-	precache_model ("models/weapons/g_nex.md3");
-	precache_model ("models/weapons/g_rl.md3");
-	precache_model ("models/weapons/g_shotgun.md3");
-	precache_model ("models/weapons/g_uzi.md3");
-	precache_model ("models/weapons/v_crylink.md3");
-	precache_model ("models/weapons/v_electro.md3");
-	precache_model ("models/weapons/v_gl.md3");
-	precache_model ("models/weapons/v_hagar.md3");
-	precache_model ("models/weapons/v_laser.md3");
-	precache_model ("models/weapons/v_nex.md3");
-	precache_model ("models/weapons/v_rl.md3");
-	precache_model ("models/weapons/v_shotgun.md3");
-	precache_model ("models/weapons/v_uzi.md3");
-	precache_model ("models/weapons/w_crylink.zym");
-	precache_model ("models/weapons/w_electro.zym");
-	precache_model ("models/weapons/w_gl.zym");
-	precache_model ("models/weapons/w_hagar.zym");
-	precache_model ("models/weapons/w_laser.zym");
-	precache_model ("models/weapons/w_nex.zym");
-	precache_model ("models/weapons/w_rl.zym");
-	precache_model ("models/weapons/w_shotgun.zym");
-	precache_model ("models/weapons/w_uzi.zym");
-
-	// laser for laser-guided weapons
-	precache_model ("models/laser_dot.mdl");
-
-	precache_sound ("misc/null.wav");
-	precache_sound ("misc/armor1.wav");
-	precache_sound ("misc/armor25.wav");
+	precache_model ("models/gibs/gib5.md3");
 	precache_sound ("misc/armorimpact.wav");
 	precache_sound ("misc/bodyimpact1.wav");
 	precache_sound ("misc/bodyimpact2.wav");
@@ -198,87 +145,19 @@
 	precache_sound ("misc/gib_splat02.wav");
 	precache_sound ("misc/gib_splat03.wav");
 	precache_sound ("misc/gib_splat04.wav");
-	//precache_sound ("misc/h2ohit.wav");
 	precache_sound ("misc/hit.wav");
-	precache_sound ("misc/footstep01.wav");
-	precache_sound ("misc/footstep02.wav");
-	precache_sound ("misc/footstep03.wav");
-	precache_sound ("misc/footstep04.wav");
-	precache_sound ("misc/footstep05.wav");
-	precache_sound ("misc/footstep06.wav");
 	precache_sound ("misc/hitground1.wav");
 	precache_sound ("misc/hitground2.wav");
 	precache_sound ("misc/hitground3.wav");
 	precache_sound ("misc/hitground4.wav");
-	precache_sound ("misc/itempickup.wav");
-	precache_sound ("misc/itemrespawn.wav");
-	precache_sound ("misc/jumppad.wav");
-	precache_sound ("misc/mediumhealth.wav");
-	precache_sound ("misc/megahealth.wav");
-	precache_sound ("misc/minihealth.wav");
-	precache_sound ("misc/powerup.wav");
-	precache_sound ("misc/powerup_shield.wav");
+	precache_sound ("misc/null.wav");
 	precache_sound ("misc/talk.wav");
 	precache_sound ("misc/teleport.wav");
-	precache_sound ("plats/medplat1.wav");
-	precache_sound ("plats/medplat2.wav");
 	precache_sound ("player/lava.wav");
 	precache_sound ("player/slime.wav");
-	precache_sound ("weapons/crylink_fire.wav");
-	precache_sound ("weapons/electro_bounce.wav");
-	precache_sound ("weapons/electro_fire.wav");
-	precache_sound ("weapons/electro_fire2.wav");
-	precache_sound ("weapons/electro_fly.wav");
-	precache_sound ("weapons/electro_impact.wav");
-	precache_sound ("weapons/electro_impact_combo.wav");
-	//precache_sound ("weapons/grenade_bounce.wav");
-	precache_sound ("weapons/grenade_bounce1.wav");
-	precache_sound ("weapons/grenade_bounce2.wav");
-	precache_sound ("weapons/grenade_bounce3.wav");
-	precache_sound ("weapons/grenade_bounce4.wav");
-	precache_sound ("weapons/grenade_bounce5.wav");
-	precache_sound ("weapons/grenade_bounce6.wav");
-	precache_sound ("weapons/grenade_fire.wav");
-	precache_sound ("weapons/grenade_impact.wav");
-	precache_sound ("weapons/hagar_fire.wav");
-	precache_sound ("weapons/hagexp1.wav");
-	precache_sound ("weapons/hagexp2.wav");
-	precache_sound ("weapons/hagexp3.wav");
-	precache_sound ("weapons/hook_fire.wav");
-	precache_sound ("weapons/hook_impact.wav");
-	precache_sound ("weapons/lasergun_fire.wav");
-	precache_sound ("weapons/laserimpact.wav");
-	precache_sound ("weapons/nexfire.wav");
-	precache_sound ("weapons/neximpact.wav");
-	precache_sound ("weapons/ric1.wav");
-	precache_sound ("weapons/ric2.wav");
-	precache_sound ("weapons/ric3.wav");
-	precache_sound ("weapons/rocket_fire.wav");
-	precache_sound ("weapons/rocket_fly.wav");
-	precache_sound ("weapons/rocket_impact.wav");
-	precache_sound ("weapons/rocket_det.wav");
-	precache_sound ("weapons/shotgun_fire.wav");
-	precache_sound ("weapons/tink1.wav");
-	precache_sound ("weapons/uzi_fire.wav");
-	precache_sound ("weapons/weapon_switch.wav");
-	precache_sound ("weapons/weaponpickup.wav");
-	precache_sound ("weapons/strength_fire.wav");
 
-	//precache_sound ("announce/male/kill10.wav");
-	//precache_sound ("announce/male/kill15.wav");
-	//precache_sound ("announce/male/kill20.wav");
-	//precache_sound ("announce/male/kill25.wav");
-	//precache_sound ("announce/male/kill3.wav");
-	//precache_sound ("announce/male/kill30.wav");
-	//precache_sound ("announce/male/kill4.wav");
-	//precache_sound ("announce/male/kill5.wav");
-	//precache_sound ("announce/male/kill6.wav");
-	//precache_sound ("announce/male/mapkill1.wav");
-	//precache_sound ("announce/robotic/last_second_save.wav");
-	//precache_sound ("announce/robotic/narrowly_averted.wav");
-	//precache_sound ("minstagib/mockery.wav");
-
 	// announcer sounds - male
+	//precache_sound ("announcer/male/electrobitch.wav");
 	precache_sound ("announcer/male/03kills.wav");
 	precache_sound ("announcer/male/05kills.wav");
 	precache_sound ("announcer/male/10kills.wav");
@@ -287,8 +166,6 @@
 	precache_sound ("announcer/male/25kills.wav");
 	precache_sound ("announcer/male/30kills.wav");
 	precache_sound ("announcer/male/botlike.wav");
-	precache_sound ("announcer/male/electrobitch.wav");
-	precache_sound ("announcer/male/welcome.wav");
 	precache_sound ("announcer/male/yoda.wav");
 
 	// announcer sounds - robotic
@@ -296,19 +173,43 @@
 	precache_sound ("announcer/robotic/1minuteremains.wav");
 	precache_sound ("announcer/robotic/2fragsleft.wav");
 	precache_sound ("announcer/robotic/3fragsleft.wav");
-	precache_sound ("announcer/robotic/lastsecond.wav");
-	precache_sound ("announcer/robotic/narrowly.wav");
-	precache_sound ("announcer/robotic/1.wav");
-	precache_sound ("announcer/robotic/2.wav");
-	precache_sound ("announcer/robotic/3.wav");
-	precache_sound ("announcer/robotic/4.wav");
-	precache_sound ("announcer/robotic/5.wav");
-	precache_sound ("announcer/robotic/6.wav");
-	precache_sound ("announcer/robotic/7.wav");
-	precache_sound ("announcer/robotic/8.wav");
-	precache_sound ("announcer/robotic/9.wav");
-	precache_sound ("announcer/robotic/10.wav");
+	if (cvar("g_minstagib"))
+	{
+		precache_sound ("announcer/robotic/lastsecond.wav");
+		precache_sound ("announcer/robotic/narrowly.wav");
+		precache_sound ("announcer/robotic/1.wav");
+		precache_sound ("announcer/robotic/2.wav");
+		precache_sound ("announcer/robotic/3.wav");
+		precache_sound ("announcer/robotic/4.wav");
+		precache_sound ("announcer/robotic/5.wav");
+		precache_sound ("announcer/robotic/6.wav");
+		precache_sound ("announcer/robotic/7.wav");
+		precache_sound ("announcer/robotic/8.wav");
+		precache_sound ("announcer/robotic/9.wav");
+		precache_sound ("announcer/robotic/10.wav");
+	}
 
+	// common weapon precaches
+	precache_sound ("weapons/weapon_switch.wav");
+	precache_sound ("weapons/weaponpickup.wav");
+	if (cvar("g_grappling_hook"))
+	{
+		precache_sound ("weapons/hook_fire.wav"); // hook
+		precache_sound ("weapons/hook_impact.wav"); // hook
+	}
+
+	if (cvar("sv_precacheweapons"))
+	{
+		//precache weapon models/sounds
+		local float wep;
+		wep = WEP_FIRST;
+		while (wep <= WEP_LAST)
+		{
+			weapon_action(wep, WR_PRECACHE);
+			wep = wep + 1;
+		}
+	}
+
 	// plays music for the level if there is any
 	if (self.noise)
 	{

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -703,6 +703,15 @@
 float g_pickup_healthmega;
 float g_pickup_healthmega_max;
 
+float start_items;
+float start_switchweapon;
+float start_ammo_shells;
+float start_ammo_nails;
+float start_ammo_rockets;
+float start_ammo_cells;
+float start_health;
+float start_armorvalue;
+
 void readlevelcvars(void)
 {
 	g_pickup_shells                    = cvar("g_pickup_shells");
@@ -723,6 +732,123 @@
 	g_pickup_health_max                = cvar("g_pickup_health_max");
 	g_pickup_healthmega                = cvar("g_pickup_healthmega");
 	g_pickup_healthmega_max            = cvar("g_pickup_healthmega_max");
+
+	// initialize starting values for players
+	start_items = 0;
+	start_switchweapon = 0;
+	start_ammo_shells = 0;
+	start_ammo_nails = 0;
+	start_ammo_rockets = 0;
+	start_ammo_cells = 0;
+	start_health = cvar("g_balance_health_start");
+	start_armorvalue = cvar("g_balance_armor_start");
+
+	if(cvar("g_instagib"))
+	{
+		start_items = IT_NEX;
+		start_switchweapon = WEP_NEX;
+		weapon_action(start_switchweapon, WR_PRECACHE);
+		start_ammo_cells = 999;
+	}
+	else if(cvar("g_rocketarena"))
+	{
+		start_items = IT_ROCKET_LAUNCHER;
+		start_switchweapon = WEP_ROCKET_LAUNCHER;
+		weapon_action(start_switchweapon, WR_PRECACHE);
+		start_ammo_rockets = 999;
+	}
+	else if(cvar("g_nixnex"))
+	{
+		start_items = 0;
+		// will be done later
+	}
+	else if(cvar("g_minstagib"))
+	{
+		start_health = 100;
+		start_armorvalue = 0;
+		start_items = IT_NEX;
+		start_switchweapon = WEP_NEX;
+		weapon_action(start_switchweapon, WR_PRECACHE);
+		start_ammo_cells = cvar("g_minstagib_ammo_start");
+	}
+	else
+	{
+		if(cvar("g_lms"))
+		{
+			start_ammo_shells = cvar("g_lms_start_ammo_shells");
+			start_ammo_nails = cvar("g_lms_start_ammo_nails");
+			start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
+			start_ammo_cells = cvar("g_lms_start_ammo_cells");
+			start_health = cvar("g_lms_start_health");
+			start_armorvalue = cvar("g_lms_start_armor");
+		}
+		else if (cvar("g_use_ammunition")) {
+			start_ammo_shells = cvar("g_start_ammo_shells");
+			start_ammo_nails = cvar("g_start_ammo_nails");
+			start_ammo_rockets = cvar("g_start_ammo_rockets");
+			start_ammo_cells = cvar("g_start_ammo_cells");
+		} else {
+			start_ammo_shells = cvar("g_pickup_shells_max");
+			start_ammo_nails = cvar("g_pickup_nails_max");
+			start_ammo_rockets = cvar("g_pickup_rockets_max");
+			start_ammo_cells = cvar("g_pickup_cells_max");
+		}
+
+		if (cvar("g_start_weapon_laser") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_LASER;
+			start_switchweapon = WEP_LASER;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_shotgun") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_SHOTGUN;
+			start_switchweapon = WEP_SHOTGUN;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_uzi") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_UZI;
+			start_switchweapon = WEP_UZI;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_grenadelauncher") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_GRENADE_LAUNCHER;
+			start_switchweapon = WEP_GRENADE_LAUNCHER;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_electro") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_ELECTRO;
+			start_switchweapon = WEP_ELECTRO;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_crylink") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_CRYLINK;
+			start_switchweapon = WEP_CRYLINK;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_nex") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_NEX;
+			start_switchweapon = WEP_NEX;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_hagar") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_HAGAR;
+			start_switchweapon = WEP_HAGAR;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+		if (cvar("g_start_weapon_rocketlauncher") || cvar("g_lms"))
+		{
+			start_items = start_items | IT_ROCKET_LAUNCHER;
+			start_switchweapon = WEP_ROCKET_LAUNCHER;
+			weapon_action(start_switchweapon, WR_PRECACHE);
+		}
+	}
 }
 
 /*

Modified: trunk/data/qcsrc/server/t_items.qc
===================================================================
--- trunk/data/qcsrc/server/t_items.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/t_items.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -350,6 +350,13 @@
 		}
 	}
 
+	if (self.classname != "droppedweapon")
+	{
+		precache_model (itemmodel);
+		precache_sound (pickupsound);
+		precache_sound ("misc/itemrespawn.wav");
+	}
+
 	if(itemid & (IT_STRENGTH | IT_INVINCIBLE | IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2 |
 				IT_ROCKET_LAUNCHER | IT_HAGAR | IT_NEX | IT_CRYLINK | IT_ELECTRO |
 				IT_GRENADE_LAUNCHER | IT_UZI | IT_SHOTGUN | IT_LASER) && self.classname != "droppedweapon")
@@ -479,62 +486,86 @@
 	if(!self.ammo_nails)
 		self.ammo_nails = cvar("g_pickup_nails");
 	StartItem ("models/weapons/g_uzi.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_UZI), IT_UZI, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_UZI, WR_PRECACHE);
 }
 
 void weapon_shotgun (void) {
 	if(!self.ammo_shells)
 		self.ammo_shells = cvar("g_pickup_shells");
 	StartItem ("models/weapons/g_shotgun.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_SHOTGUN), IT_SHOTGUN, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_SHOTGUN, WR_PRECACHE);
 }
 
-void weapon_grenadelauncher (void) {
+void weapon_grenadelauncher (void)
+{
 	if(!self.ammo_rockets)
 		self.ammo_rockets = cvar("g_pickup_rockets");
 	StartItem ("models/weapons/g_gl.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_GRENADE_LAUNCHER), IT_GRENADE_LAUNCHER, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_GRENADE_LAUNCHER, WR_PRECACHE);
 }
 
-void weapon_electro (void) {
+void weapon_electro (void)
+{
 	if(!self.ammo_cells)
 		self.ammo_cells = cvar("g_pickup_cells");
 	StartItem ("models/weapons/g_electro.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_ELECTRO), IT_ELECTRO, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_ELECTRO, WR_PRECACHE);
 }
 
-void weapon_crylink (void) {
+void weapon_crylink (void)
+{
 	if(!self.ammo_cells)
 		self.ammo_cells = cvar("g_pickup_cells");
 	StartItem ("models/weapons/g_crylink.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_CRYLINK), IT_CRYLINK, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_CRYLINK, WR_PRECACHE);
 }
 
-void weapon_nex (void) {
-	if (cvar("g_minstagib")) {
+void weapon_nex (void)
+{
+	float nextime;
+	if (cvar("g_minstagib"))
+	{
 		minstagib_items(IT_CELLS);
-	} else {
-		float nextime;
-		if(!self.ammo_cells)
-			self.ammo_cells = cvar("g_pickup_cells");
-		nextime = cvar("g_balance_nex_respawntime_modifier");
-		if(nextime)
-			nextime = 15 * nextime;
-		else
-			nextime = 15;
-		StartItem ("models/weapons/g_nex.md3", "weapons/weaponpickup.wav", nextime, W_Name(WEP_NEX), IT_NEX, FL_WEAPON, weapon_pickupevalfunc, 1000);
+		return;
 	}
+	if(!self.ammo_cells)
+		self.ammo_cells = cvar("g_pickup_cells");
+	nextime = cvar("g_balance_nex_respawntime_modifier");
+	if(nextime)
+		nextime = 15 * nextime;
+	else
+		nextime = 15;
+	StartItem ("models/weapons/g_nex.md3", "weapons/weaponpickup.wav", nextime, W_Name(WEP_NEX), IT_NEX, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_NEX, WR_PRECACHE);
 }
 
-void weapon_hagar (void) {
+void weapon_hagar (void)
+{
 	if(!self.ammo_rockets)
 		self.ammo_rockets = cvar("g_pickup_rockets");
 	StartItem ("models/weapons/g_hagar.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_HAGAR), IT_HAGAR, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_HAGAR, WR_PRECACHE);
 }
 
-void weapon_rocketlauncher (void) {
-	if (cvar("g_minstagib")) {
+void weapon_rocketlauncher (void)
+{
+	if (cvar("g_minstagib"))
+	{
 		minstagib_items(IT_CELLS);
-	} else {
-		if(!self.ammo_rockets)
-			self.ammo_rockets = g_pickup_rockets;
-		StartItem ("models/weapons/g_rl.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_ROCKET_LAUNCHER), IT_ROCKET_LAUNCHER, FL_WEAPON, weapon_pickupevalfunc, 1000);
+		return;
 	}
+	if(!self.ammo_rockets)
+		self.ammo_rockets = g_pickup_rockets;
+	StartItem ("models/weapons/g_rl.md3", "weapons/weaponpickup.wav", 15, W_Name(WEP_ROCKET_LAUNCHER), IT_ROCKET_LAUNCHER, FL_WEAPON, weapon_pickupevalfunc, 1000);
+	if (self.modelindex) // don't precache if self was removed
+		weapon_action(WEP_ROCKET_LAUNCHER, WR_PRECACHE);
 }
 
 void item_rockets (void) {
@@ -621,6 +652,7 @@
 	if(cvar("g_minstagib")) {
 		minstagib_items(IT_STRENGTH);
 	} else {
+		precache_sound("weapons/strength_fire.wav");
 		self.strength_finished = 30;
 		self.effects = EF_ADDITIVE;StartItem ("models/items/g_strength.md3", "misc/powerup.wav", 120, "Strength Powerup", IT_STRENGTH, FL_POWERUP, generic_pickupevalfunc, 10000);
 	}

Modified: trunk/data/qcsrc/server/t_jumppads.qc
===================================================================
--- trunk/data/qcsrc/server/t_jumppads.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/t_jumppads.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -240,6 +240,9 @@
 		self.speed = 1000;
 	self.movedir = self.movedir * self.speed * 10;
 
+	if (self.target)
+		precache_sound ("misc/jumppad.wav");
+
 	// this must be called to spawn the teleport waypoints for bots
 	self.think = trigger_push_findtarget;
 	self.nextthink = time + 0.2;

Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_crylink.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -203,6 +203,15 @@
 			weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_crylink_secondary_animtime"), w_ready);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/plasma.mdl");
+		precache_model ("models/plasmatrail.mdl");
+		precache_model ("models/weapons/g_crylink.md3");
+		precache_model ("models/weapons/v_crylink.md3");
+		precache_model ("models/weapons/w_crylink.zym");
+		precache_sound ("weapons/crylink_fire.wav");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_CRYLINK, "crylink", IT_CELLS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_electro.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -192,6 +192,20 @@
 			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_electro_secondary_animtime"), w_ready);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/ebomb.mdl");
+		precache_model ("models/elaser.mdl");
+		precache_model ("models/weapons/g_electro.md3");
+		precache_model ("models/weapons/v_electro.md3");
+		precache_model ("models/weapons/w_electro.zym");
+		precache_sound ("weapons/electro_bounce.wav");
+		precache_sound ("weapons/electro_fire.wav");
+		precache_sound ("weapons/electro_fire2.wav");
+		precache_sound ("weapons/electro_fly.wav");
+		precache_sound ("weapons/electro_impact.wav");
+		precache_sound ("weapons/electro_impact_combo.wav");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_ELECTRO, "electro", IT_CELLS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -180,6 +180,21 @@
 			weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_grenadelauncher_secondary_animtime"), w_ready);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/grenademodel.md3");
+		precache_model ("models/weapons/g_gl.md3");
+		precache_model ("models/weapons/v_gl.md3");
+		precache_model ("models/weapons/w_gl.zym");
+		precache_sound ("weapons/grenade_bounce1.wav");
+		precache_sound ("weapons/grenade_bounce2.wav");
+		precache_sound ("weapons/grenade_bounce3.wav");
+		precache_sound ("weapons/grenade_bounce4.wav");
+		precache_sound ("weapons/grenade_bounce5.wav");
+		precache_sound ("weapons/grenade_bounce6.wav");
+		precache_sound ("weapons/grenade_fire.wav");
+		precache_sound ("weapons/grenade_impact.wav");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_GRENADE_LAUNCHER, "gl", IT_ROCKETS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_hagar.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -172,6 +172,17 @@
 			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hagar_secondary_refire"), w_ready);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/hagarmissile.mdl");
+		precache_model ("models/weapons/g_hagar.md3");
+		precache_model ("models/weapons/v_hagar.md3");
+		precache_model ("models/weapons/w_hagar.zym");
+		precache_sound ("weapons/hagar_fire.wav");
+		precache_sound ("weapons/hagexp1.wav");
+		precache_sound ("weapons/hagexp2.wav");
+		precache_sound ("weapons/hagexp3.wav");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_HAGAR, "hagar", IT_ROCKETS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_laser.qc
===================================================================
--- trunk/data/qcsrc/server/w_laser.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_laser.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -117,6 +117,14 @@
 			}
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/laser.mdl");
+		precache_model ("models/weapons/v_laser.md3");
+		precache_model ("models/weapons/w_laser.zym");
+		precache_sound ("weapons/lasergun_fire.wav");
+		precache_sound ("weapons/laserimpact.wav");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_LASER, "laser", 0);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_nex.qc
===================================================================
--- trunk/data/qcsrc/server/w_nex.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_nex.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -172,6 +172,15 @@
 			}
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/nexflash.md3");
+		precache_model ("models/weapons/g_nex.md3");
+		precache_model ("models/weapons/v_nex.md3");
+		precache_model ("models/weapons/w_nex.zym");
+		precache_sound ("weapons/nexfire.wav");
+		precache_sound ("weapons/neximpact.wav");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_NEX, "nex", IT_CELLS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -386,6 +386,20 @@
 			sound (self, CHAN_AUTO, "weapons/tink1.wav", 1, ATTN_NORM);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/flash.md3");
+		precache_model ("models/rocket.md3");
+		precache_model ("models/weapons/g_rl.md3");
+		precache_model ("models/weapons/v_rl.md3");
+		precache_model ("models/weapons/w_rl.zym");
+		precache_sound ("weapons/rocket_det.wav");
+		precache_sound ("weapons/rocket_fire.wav");
+		precache_sound ("weapons/rocket_fly.wav");
+		precache_sound ("weapons/rocket_impact.wav");
+		if (cvar("g_laserguided_missile"))
+			precache_model ("models/laser_dot.mdl"); // rocket launcher
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_ROCKET_LAUNCHER, "rl", IT_ROCKETS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_shotgun.qc
===================================================================
--- trunk/data/qcsrc/server/w_shotgun.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_shotgun.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -87,6 +87,21 @@
 			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_shotgun_secondary_animtime"), shotgun_fire2_02);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/tracer.mdl");
+		precache_model ("models/weapons/g_shotgun.md3");
+		precache_model ("models/weapons/v_shotgun.md3");
+		precache_model ("models/weapons/w_shotgun.zym");
+		precache_sound ("misc/itempickup.wav");
+		precache_sound ("weapons/ric1.wav");
+		precache_sound ("weapons/ric2.wav");
+		precache_sound ("weapons/ric3.wav");
+		precache_sound ("weapons/shotgun_fire.wav");
+		precache_sound ("weapons/tink1.wav");
+		if (cvar("g_casings") >= 1)
+			precache_model ("models/casing_shell.mdl");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_SHOTGUN, "shotgun", IT_SHELLS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/data/qcsrc/server/w_uzi.qc	2007-05-04 01:22:21 UTC (rev 2478)
@@ -106,6 +106,21 @@
 			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_uzi_sustained_refire"), w_ready);
 		}
 	}
+	else if (req == WR_PRECACHE)
+	{
+		precache_model ("models/tracer.mdl");
+		precache_model ("models/uziflash.md3");
+		precache_model ("models/weapons/g_uzi.md3");
+		precache_model ("models/weapons/v_uzi.md3");
+		precache_model ("models/weapons/w_uzi.zym");
+		precache_sound ("weapons/ric1.wav");
+		precache_sound ("weapons/ric2.wav");
+		precache_sound ("weapons/ric3.wav");
+		precache_sound ("weapons/tink1.wav");
+		precache_sound ("weapons/uzi_fire.wav");
+		if (cvar("g_casings") >= 2)
+			precache_model ("models/casing_bronze.mdl");
+	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_UZI, "uzi", IT_NAILS);
 	else if (req == WR_CHECKAMMO1)

Modified: trunk/pro/default.cfg
===================================================================
--- trunk/pro/default.cfg	2007-05-03 21:54:34 UTC (rev 2477)
+++ trunk/pro/default.cfg	2007-05-04 01:22:21 UTC (rev 2478)
@@ -113,6 +113,9 @@
 // use default physics
 exec physicsPro.cfg
 
+seta sv_precacheplayermodels 0
+seta sv_precacheweapons 0
+seta sv_precacheitems 0
 set sv_spectator_speed_multiplier 1.5
 seta sv_spectate 1
 seta sv_defaultcharacter 0
@@ -122,6 +125,7 @@
 net_messagetimeout 300
 net_connecttimeout 30
 sv_jumpstep 1 // step up stairs while jumping, makes it easier to reach ledges
+set ekg 0
 
 cl_movement 1
 seta cl_autoswitch 1




More information about the nexuiz-commits mailing list