[nexuiz-commits] r7248 - in branches/nexuiz-2.0: . data data/gfx data/gfx/hud data/models data/models/weapons data/qcsrc/client data/qcsrc/common data/qcsrc/server data/qcsrc/server/tturrets/units data/sound/weapons data/textures misc/mediasource/hud

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Jul 21 02:58:27 EDT 2009


Author: div0
Date: 2009-07-21 02:58:26 -0400 (Tue, 21 Jul 2009)
New Revision: 7248

Added:
   branches/nexuiz-2.0/data/gfx/hud/inv_weapon13.tga
   branches/nexuiz-2.0/data/gfx/hud/num_dot.tga
   branches/nexuiz-2.0/data/gfx/hud/num_dot_stroke.tga
   branches/nexuiz-2.0/misc/mediasource/hud/nexuiz-grunge-gpl-brushes.zip
Removed:
   branches/nexuiz-2.0/data/gfx/crosshairseeker.tga
   branches/nexuiz-2.0/data/gfx/hud/inv_weapon13.tga
   branches/nexuiz-2.0/data/gfx/hud/inv_weapon15.tga
   branches/nexuiz-2.0/data/models/tagrocket.md3
   branches/nexuiz-2.0/data/models/tagrocket.tga
   branches/nexuiz-2.0/data/models/weapons/g_seeker.md3
   branches/nexuiz-2.0/data/models/weapons/h_seeker.dpm
   branches/nexuiz-2.0/data/models/weapons/h_seeker.dpm.framegroups
   branches/nexuiz-2.0/data/models/weapons/v_seeker.md3
   branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
   branches/nexuiz-2.0/data/sound/weapons/flac_fire.ogg
   branches/nexuiz-2.0/data/sound/weapons/flacexp1.ogg
   branches/nexuiz-2.0/data/sound/weapons/flacexp2.ogg
   branches/nexuiz-2.0/data/sound/weapons/flacexp3.ogg
   branches/nexuiz-2.0/data/sound/weapons/seeker_fire.ogg
   branches/nexuiz-2.0/data/sound/weapons/seekerexp1.ogg
   branches/nexuiz-2.0/data/sound/weapons/seekerexp2.ogg
   branches/nexuiz-2.0/data/sound/weapons/seekerexp3.ogg
   branches/nexuiz-2.0/data/sound/weapons/tag_fire.ogg
   branches/nexuiz-2.0/data/sound/weapons/tag_impact.ogg
   branches/nexuiz-2.0/data/sound/weapons/tag_rocket_fly.ogg
   branches/nexuiz-2.0/data/sound/weapons/tagexp1.ogg
   branches/nexuiz-2.0/data/sound/weapons/tagexp2.ogg
   branches/nexuiz-2.0/data/sound/weapons/tagexp3.ogg
   branches/nexuiz-2.0/data/textures/seeker.tga
   branches/nexuiz-2.0/data/textures/seeker_gloss.tga
   branches/nexuiz-2.0/data/textures/seeker_glow.tga
   branches/nexuiz-2.0/data/textures/seeker_norm.tga
   branches/nexuiz-2.0/data/textures/seeker_pants.tga
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/changes-since-last-release
   branches/nexuiz-2.0/data/build-compat-pack.sh
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/qcsrc/client/Main.qc
   branches/nexuiz-2.0/data/qcsrc/client/View.qc
   branches/nexuiz-2.0/data/qcsrc/client/damage.qc
   branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/client/projectile.qc
   branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
   branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
   branches/nexuiz-2.0/data/qcsrc/common/constants.qh
   branches/nexuiz-2.0/data/qcsrc/common/items.qc
   branches/nexuiz-2.0/data/qcsrc/common/items.qh
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
   branches/nexuiz-2.0/data/qcsrc/server/constants.qh
   branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
   branches/nexuiz-2.0/data/qcsrc/server/havocbot_ons.qc
   branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc
   branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/server/progs.src
   branches/nexuiz-2.0/data/qcsrc/server/race.qc
   branches/nexuiz-2.0/data/qcsrc/server/race.qh
   branches/nexuiz-2.0/data/qcsrc/server/scores.qc
   branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_laser.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_tuba.qc
   branches/nexuiz-2.0/data/weapons.cfg
   branches/nexuiz-2.0/data/weaponsHavoc.cfg
   branches/nexuiz-2.0/data/weaponsNexrun.cfg
Log:
r7219 | div0 | 2009-07-14 01:37:16 -0400 (Tue, 14 Jul 2009) | 2 lines
race HUD
r7220 | m0rfar | 2009-07-14 20:31:33 -0400 (Tue, 14 Jul 2009) | 1 line
mediasource: grunge brushes (used in hud)
r7221 | div0 | 2009-07-15 05:04:35 -0400 (Wed, 15 Jul 2009) | 2 lines
race: when time limit ends, do not stop the race, but let everyone finish his lap (untested, please test)
r7222 | mrbougo | 2009-07-15 10:31:28 -0400 (Wed, 15 Jul 2009) | 1 line
woops, forgot to add that for nexball
r7223 | m0rfar | 2009-07-15 13:01:37 -0400 (Wed, 15 Jul 2009) | 1 line
accuracy stats spec fix
r7224 | div0 | 2009-07-15 15:00:01 -0400 (Wed, 15 Jul 2009) | 2 lines
this really should not change anything, but apparently it fixes race... odd
r7225 | div0 | 2009-07-16 08:44:28 -0400 (Thu, 16 Jul 2009) | 2 lines
fix race penalties
r7226 | div0 | 2009-07-16 09:22:30 -0400 (Thu, 16 Jul 2009) | 2 lines
remove an accidentally committed debug change to g_triggers.qc
r7227 | div0 | 2009-07-16 10:58:19 -0400 (Thu, 16 Jul 2009) | 2 lines
HUD fixes
r7228 | div0 | 2009-07-17 04:16:33 -0400 (Fri, 17 Jul 2009) | 2 lines
cs_*project: check if DP supports them in console coordinate space
r7229 | div0 | 2009-07-17 13:44:14 -0400 (Fri, 17 Jul 2009) | 2 lines
fix the cs_project detection
r7230 | div0 | 2009-07-17 14:08:50 -0400 (Fri, 17 Jul 2009) | 2 lines
split racerecord/ctsrecord DB fields
r7231 | div0 | 2009-07-17 16:40:22 -0400 (Fri, 17 Jul 2009) | 2 lines
a stupid fix for a stupid bug breaking race
r7232 | div0 | 2009-07-17 17:05:28 -0400 (Fri, 17 Jul 2009) | 2 lines
fix a sudden death bug
r7233 | mand1nga | 2009-07-17 22:47:28 -0400 (Fri, 17 Jul 2009) | 1 line
Fix accuracy stats (#400)
r7234 | mrbougo | 2009-07-18 09:05:00 -0400 (Sat, 18 Jul 2009) | 1 line
fix waypoint display origins when out of vision... please confirm that checking if d_z == 0 is too rare to be necessary ?
r7235 | m0rfar | 2009-07-18 13:54:55 -0400 (Sat, 18 Jul 2009) | 1 line
small scoreboard fixes
r7236 | div0 | 2009-07-19 03:11:09 -0400 (Sun, 19 Jul 2009) | 2 lines
fix ANYPOINT selection
r7237 | div0 | 2009-07-19 06:11:52 -0400 (Sun, 19 Jul 2009) | 2 lines
minimize weaponsNexrun.cfg
r7238 | m0rfar | 2009-07-19 11:15:17 -0400 (Sun, 19 Jul 2009) | 1 line
Correctly display all the scoreboard columns (#428)
r7239 | mand1nga | 2009-07-19 11:43:11 -0400 (Sun, 19 Jul 2009) | 1 line
Updated some changes
r7240 | div0 | 2009-07-19 15:24:50 -0400 (Sun, 19 Jul 2009) | 2 lines
fix autodetection of cs_project behaviour
r7241 | div0 | 2009-07-19 18:04:44 -0400 (Sun, 19 Jul 2009) | 2 lines
race: fix stupid typo :P
r7242 | div0 | 2009-07-20 00:47:53 -0400 (Mon, 20 Jul 2009) | 2 lines
race campaign level: fix qualifying status
r7243 | div0 | 2009-07-20 06:33:23 -0400 (Mon, 20 Jul 2009) | 4 lines
[11:57:02] <@LordHavoc> div0: or just remove the seeker for me and say "LordHavoc told me to"
PLEASE TEST
r7244 | div0 | 2009-07-20 06:47:34 -0400 (Mon, 20 Jul 2009) | 2 lines
continue --seeker
r7245 | mand1nga | 2009-07-20 12:43:20 -0400 (Mon, 20 Jul 2009) | 1 line
Fix warning


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/.patchsets	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-7217
+revisions_applied = 1-7245

Modified: branches/nexuiz-2.0/changes-since-last-release
===================================================================
--- branches/nexuiz-2.0/changes-since-last-release	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/changes-since-last-release	2009-07-21 06:58:26 UTC (rev 7248)
@@ -147,6 +147,10 @@
 game: vote call is now possible for server admins too
 game: weapons rebalanced according to frag statistics
 game: zoom unlagged, detect zoom scripts (for spectating/demos)
+game: bots ai: added support for onslaught, complete rewrite of ctf ai, basic jetpack support, other minor fixes and improvements
+game: file based bots configuration
+game: bot scripting engine
+game: weapon accuracy stats (enable with +showaccuracy)
 map: aggressor supports keyhunt
 map: all maps recompiled, now with external lightmaps which look way better
 map: new maps accident, desertfactory, racetrack

Modified: branches/nexuiz-2.0/data/build-compat-pack.sh
===================================================================
--- branches/nexuiz-2.0/data/build-compat-pack.sh	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/build-compat-pack.sh	2009-07-21 06:58:26 UTC (rev 7248)
@@ -57,6 +57,7 @@
 	gfx/hud/num_9.tga
 	gfx/hud/num_colon_stroke.tga
 	gfx/hud/num_colon.tga
+	gfx/hud/num_dot.tga
 	gfx/hud/num_minus_stroke.tga
 	gfx/hud/num_minus.tga
 	gfx/hud/num_plus_stroke.tga

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-07-21 06:58:26 UTC (rev 7248)
@@ -174,12 +174,6 @@
 seta crosshair_hlac_color_blue 0.2	"crosshair color blue component to display when wielding the H.L.A.C."
 seta crosshair_hlac_color_alpha 1	"crosshair alpha value to display when wielding the H.L.A.C."
 seta crosshair_hlac_size 0.6	"crosshair size when wielding the H.L.A.C."
-seta crosshair_seeker ""	"crosshair to display when wielding the TAG Seeker"
-seta crosshair_seeker_color_red 1	"crosshair color red component to display when wielding the TAG seeker"
-seta crosshair_seeker_color_green 0.35	"crosshair color green component to display when wielding the TAG seeker"
-seta crosshair_seeker_color_blue 0.35	"crosshair color blue component to display when wielding the TAG seeker"
-seta crosshair_seeker_color_alpha 0.9	"crosshair alpha value to display when wielding the TAG seeker"
-seta crosshair_seeker_size 0.8	"crosshair size when wielding the TAG seeker"
 seta crosshair_campingrifle ""	"crosshair to display when wielding the campingrifle"
 seta crosshair_campingrifle_color_red 0.85	"crosshair color red component to display when wielding the campingrifle"
 seta crosshair_campingrifle_color_green 0.5	"crosshair color green component to display when wielding the campingrifle"

Deleted: branches/nexuiz-2.0/data/gfx/crosshairseeker.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/gfx/hud/inv_weapon13.tga
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/gfx/hud/inv_weapon13.tga (from rev 7245, trunk/data/gfx/hud/inv_weapon13.tga)
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/gfx/hud/inv_weapon15.tga
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/gfx/hud/num_dot.tga (from rev 7245, trunk/data/gfx/hud/num_dot.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/gfx/hud/num_dot_stroke.tga (from rev 7245, trunk/data/gfx/hud/num_dot_stroke.tga)
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/models/tagrocket.md3
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/models/tagrocket.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/models/weapons/g_seeker.md3
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/models/weapons/h_seeker.dpm
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/models/weapons/h_seeker.dpm.framegroups
===================================================================
--- branches/nexuiz-2.0/data/models/weapons/h_seeker.dpm.framegroups	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/models/weapons/h_seeker.dpm.framegroups	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1,4 +0,0 @@
-1 8 20 0 // fire
-9 5 20 0 // fire2
-15 200 20 1 // idle
-215 40 20 0 // reload

Deleted: branches/nexuiz-2.0/data/models/weapons/v_seeker.md3
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/qcsrc/client/Main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -122,24 +122,6 @@
 
 	cvar_clientsettemp("_supports_weaponpriority", "1");
 
-
-
-
-	cs_project_is_b0rked = TRUE;
-	R_SetView(VF_VIEWPORT, '0 0 0', '640 480 0');
-	R_SetView(VF_FOV, '90 90 0');
-	R_SetView(VF_ORIGIN, '0 0 0');
-	R_SetView(VF_ANGLES, '0 0 0');
-	R_SetView(VF_PERSPECTIVE, 1);
-	makevectors('0 0 0');
-	vector v;
-	v = cs_project(v_forward);
-	if(v_x - 320 < +1)
-	if(v_x - 320 > -1)
-	if(v_y - 240 < +1)
-	if(v_y - 240 > -1)
-		cs_project_is_b0rked = FALSE;
-
 	RegisterWeapons();
 
 	WaypointSprite_Load();

Modified: branches/nexuiz-2.0/data/qcsrc/client/View.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -261,10 +261,6 @@
 			mi = '-3 -3 -3';
 			ma = '3 3 3';
 			break;
-		case WEP_SEEKER: // projectile has a size!
-			mi = '-2 -2 -2';
-			ma = '2 2 2';
-			break;
 		case WEP_ELECTRO: // projectile has a size!
 			mi = '0 0 -3';
 			ma = '0 0 -3';
@@ -650,6 +646,33 @@
 		localcmd("\n", NextFrameCommand, "\n");
 		NextFrameCommand = string_null;
 	}
+
+	// we must do this check AFTER a frame was rendered, or it won't work
+	if(cs_project_is_b0rked == 0)
+	{
+		string w0, h0;
+		w0 = cvar_string("vid_conwidth");
+		h0 = cvar_string("vid_conheight");
+		//R_SetView(VF_VIEWPORT, '0 0 0', '640 480 0');
+		//R_SetView(VF_FOV, '90 90 0');
+		R_SetView(VF_ORIGIN, '0 0 0');
+		R_SetView(VF_ANGLES, '0 0 0');
+		R_SetView(VF_PERSPECTIVE, 1);
+		makevectors('0 0 0');
+		vector v1, v2;
+		cvar_set("vid_conwidth", "800");
+		cvar_set("vid_conheight", "600");
+		v1 = cs_project(v_forward);
+		cvar_set("vid_conwidth", "640");
+		cvar_set("vid_conheight", "480");
+		v2 = cs_project(v_forward);
+		if(v1 == v2)
+			cs_project_is_b0rked = 1;
+		else
+			cs_project_is_b0rked = -1;
+		cvar_set("vid_conwidth", w0);
+		cvar_set("vid_conheight", h0);
+	}
 }
 
 void Sbar_Draw();

Modified: branches/nexuiz-2.0/data/qcsrc/client/damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/damage.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/damage.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -215,56 +215,6 @@
 				if(!issilent)
 					sound(self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
 				break;
-			case WEP_SEEKER:
-				org2 = org + backoff * 6;
-				if(secondary)
-				{
-					pointparticles(particleeffectnum("flac_explode"), org2, '0 0 0', 1);
-					if(!issilent)
-					{
-						if (r<0.15)
-							sound(self, CHAN_PROJECTILE, "weapons/flacexp1.wav", 1, ATTN_NORM);
-						else if (r<0.7)
-							sound(self, CHAN_PROJECTILE, "weapons/flacexp2.wav", 1, ATTN_NORM);
-						else
-							sound(self, CHAN_PROJECTILE, "weapons/flacexp3.wav", 1, ATTN_NORM);
-					}
-				}
-				else
-				{
-					if(bounce)
-					{
-						pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
-						if(!issilent)
-						{
-							if (r<0.15)
-								sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM);
-							else if (r<0.7)
-								sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM);
-							else
-								sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM);
-						}
-					}
-					else if(headshot)
-					{
-						if(!issilent)
-							sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
-					}
-					else
-					{
-						pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
-						if(!issilent)
-						{
-							if (r<0.15)
-								sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
-							else if (r<0.7)
-								sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
-							else
-								sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
-						}
-					}
-				}
-				break;
 			case WEP_HLAC:
 				org2 = org + backoff * 6;
 				pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1);
@@ -299,9 +249,6 @@
 	precache_sound("weapons/crylink_impact.wav");
 	precache_sound("weapons/electro_impact.wav");
 	precache_sound("weapons/electro_impact_combo.wav");
-	precache_sound("weapons/flacexp1.wav");
-	precache_sound("weapons/flacexp2.wav");
-	precache_sound("weapons/flacexp3.wav");
 	precache_sound("weapons/grenade_impact.wav");
 	precache_sound("weapons/hagexp1.wav");
 	precache_sound("weapons/hagexp2.wav");
@@ -313,11 +260,4 @@
 	precache_sound("weapons/ric2.wav");
 	precache_sound("weapons/ric3.wav");
 	precache_sound("weapons/rocket_impact.wav");
-	precache_sound("weapons/seekerexp1.wav");
-	precache_sound("weapons/seekerexp2.wav");
-	precache_sound("weapons/seekerexp3.wav");
-	precache_sound("weapons/tagexp1.wav");
-	precache_sound("weapons/tagexp2.wav");
-	precache_sound("weapons/tagexp3.wav");
-	precache_sound("weapons/tag_impact.wav");
 }

Modified: branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/miscfunctions.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -291,13 +291,11 @@
 vector project_3d_to_2d(vector vec)
 { 
 	vec = cs_project(vec);
-	if(cs_project_is_b0rked)
+	if(cs_project_is_b0rked > 0)
 	{
-		vec_x += vid_width / 2;
-		vec_y += vid_height / 2;
+		vec_x *= vid_conwidth / vid_width;
+		vec_y *= vid_conheight / vid_height;
 	}
-	vec_x *= vid_conwidth / vid_width;
-	vec_y *= vid_conheight / vid_height;
 	return vec;
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/client/projectile.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/projectile.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/projectile.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -27,9 +27,6 @@
 		case PROJECTILE_ROCKET:
 			trailparticles(self, particleeffectnum("TR_ROCKET"), from, to);
 			break;
-		case PROJECTILE_TAG:
-			trailparticles(self, particleeffectnum("TR_VORESPIKE"), from, to);
-			break;
 		case PROJECTILE_CRYLINK:
 			trailparticles(self, particleeffectnum("TR_CRYLINKPLASMA"), from, to);
 			break;
@@ -51,12 +48,6 @@
 		case PROJECTILE_PORTO_BLUE:
 			trailparticles(self, particleeffectnum("TR_WIZSPIKE"), from, to);
 			break;
-		case PROJECTILE_FLAC:
-			trailparticles(self, particleeffectnum("TR_VORESPIKE"), from, to);
-			break;
-		case PROJECTILE_SEEKER:
-			trailparticles(self, particleeffectnum("TR_ROCKET"), from, to);
-			break;
 		case PROJECTILE_HOOKBOMB:
 			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to);
 			break;
@@ -262,7 +253,6 @@
 		{
 			case PROJECTILE_ELECTRO: setmodel(self, "models/ebomb.mdl"); break;
 			case PROJECTILE_ROCKET: setmodel(self, "models/rocket.md3"); self.scale = 2; break;
-			case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); break;
 			case PROJECTILE_BULLET: setmodel(self, "models/tracer.mdl"); break;
 			case PROJECTILE_BULLET_GLOWING: setmodel(self, "models/tracer.mdl"); break;
 			case PROJECTILE_CRYLINK: setmodel(self, "models/plasmatrail.mdl"); break;
@@ -272,8 +262,6 @@
 			case PROJECTILE_GRENADE_BOUNCING: setmodel(self, "models/grenademodel.md3"); break;
 			case PROJECTILE_LASER: setmodel(self, "models/laser.mdl"); break;
 			case PROJECTILE_HLAC: setmodel(self, "models/hlac_bullet.md3"); break;
-			case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.scale = 2; break;
-			case PROJECTILE_FLAC: setmodel(self, "models/hagarmissile.mdl"); self.scale = 0.4; break;
 			case PROJECTILE_PORTO_RED: setmodel(self, "models/grenademodel.md3"); self.scale = 4; break;
 			case PROJECTILE_PORTO_BLUE: setmodel(self, "models/grenademodel.md3"); self.scale = 4; break;
 			case PROJECTILE_HOOKBOMB: setmodel(self, "models/grenademodel.md3"); break;
@@ -305,11 +293,6 @@
 				self.mins = '-3 -3 -3';
 				self.maxs = '3 3 3';
 				break;
-			case PROJECTILE_TAG:
-				loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
-				self.mins = '-2 -2 -2';
-				self.maxs = '2 2 2';
-				break;
 			case PROJECTILE_GRENADE:
 				self.mins = '0 0 -3';
 				self.maxs = '0 0 -3';
@@ -320,14 +303,6 @@
 				self.move_movetype = MOVETYPE_BOUNCE;
 				self.move_touch = SUB_Null;
 				break;
-			case PROJECTILE_FLAC:
-				self.mins = '-2 -2 -2';
-				self.maxs = '2 2 2';
-				break;
-			case PROJECTILE_SEEKER:
-				self.mins = '-4 -4 -4';
-				self.maxs = '4 4 4';
-				break;
 			case PROJECTILE_PORTO_RED:
 				self.colormod = '2 1 1';
 				self.alpha = 0.5;
@@ -385,9 +360,7 @@
 	precache_model("models/laser.mdl");
 	precache_model("models/plasmatrail.mdl");
 	precache_model("models/rocket.md3");
-	precache_model("models/tagrocket.md3");
 	precache_model("models/tracer.mdl");
 	precache_sound("weapons/electro_fly.wav");
 	precache_sound("weapons/rocket_fly.wav");
-	precache_sound("weapons/tag_rocket_fly.wav");
 }

Modified: branches/nexuiz-2.0/data/qcsrc/client/sbar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/sbar.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -954,7 +954,7 @@
 		if (sbar_scoreboard_highlight)
 		{
 			if (mod(i,2))
-				drawfill(pos - '0 1 0' - sbar_fontsize_x / 2 * '1 0 0', column_dim, '0 0 0', sbar_scoreboard_alpha_bg * 0.4, DRAWFLAG_NORMAL);
+				drawfill(pos - '0 1 0' - sbar_fontsize_x / 2 * '1 0 0', column_dim, '0 0 0', sbar_scoreboard_alpha_bg * 0.2, DRAWFLAG_NORMAL);
 		}
 		drawstring(pos, sbar_title[i], sbar_fontsize, rgb, 1, DRAWFLAG_NORMAL);
 		pos_x += column_dim_x;
@@ -966,17 +966,12 @@
 		{
 			if(sbar_field[i] == SP_SEPARATOR)
 				break;
-			/**
-			 * FTEQCC BUG!
-			 * Using strlen(sbar_title[i])*8 instead of
-			 * stringwidth(sbar_title[i], FALSE) will mess it all up
-			 */
-			pos_x -= stringwidth(sbar_title[i], FALSE)*sbar_fontsize_x;
+			pos_x -= sbar_size[i]*sbar_fontsize_x;
 
 			if (sbar_scoreboard_highlight)
 			{
 				if (i == sbar_num_fields-1)
-					column_dim_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x / 2;
+					column_dim_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x / 2 + 1;
 				else
 					column_dim_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
 				if (!mod(i,2))
@@ -1067,7 +1062,7 @@
 		//for(tm = sortedTeams.sort_next; tm; tm = tm.sort_next)
 		for(tm = teams.sort_next; tm; tm = tm.sort_next)
 		{
-			if(!tm.team_size || tm.team == COLOR_SPECTATOR)
+			if(tm.team == COLOR_SPECTATOR)
 				continue;
 
 			rgb = GetTeamRGB(tm.team);
@@ -1249,7 +1244,9 @@
 void Sbar_Score(float margin)
 {
 	float timelimit, minutes, seconds, timeleft, minutesLeft, secondsLeft, distribution, score, desiredPlayerId;
-	vector sbar_save, score_offset, timer_color, offset;
+	float racemin, racesec, racemsec;
+	float distsec, distmsec;
+	vector sbar_save, score_offset, timer_color, offset, distribution_color, minuspos;
 	entity tm, pl, me;
 	sbar_save = sbar;
 
@@ -1285,179 +1282,213 @@
 	}
 	score_offset_z = 0;
 	
-	if(teamplay)
+	if((scores_flags[ps_primary] & SFL_TIME) && !teamplay)
 	{
-		// Layout:
-		//
-		//   team1 team3 team4
-		//
-		//         TEAM2
-		//for(i = 0; i < 4; ++i)
+		// me vector := [team/connected frags id]
 
-		float max_fragcount;
-		max_fragcount = -999;
+		pl = players.sort_next;
+		if(pl == me)
+			pl = pl.sort_next;
+		if(scores_flags[ps_primary] & SFL_ZERO_IS_WORST)
+			if(pl.scores[ps_primary] == 0)
+				pl = world;
 
-		for(tm = teams.sort_next; tm; tm = tm.sort_next)
+		score = me.(scores[ps_primary]);
+		
+		racemin = floor(score/600);
+		racesec = floor((score - racemin*600)/10);
+		racemsec = score - racemin*600 - racesec*10;
+		
+		if (pl && ((!(scores_flags[ps_primary] & SFL_ZERO_IS_WORST)) || score)) {
+			// distribution display
+			distribution = me.(scores[ps_primary]);
+			distribution -= pl.(scores[ps_primary]);
+			
+			if (distribution < 10 && distribution > -10)
+				distmsec = fabs(distribution);
+			else {
+				distsec = floor(fabs(distribution)/10);
+				distmsec = fabs(distribution) - distsec*10;
+			}
+			
+			if (distribution < 100 && distribution > -100) 
+				minuspos = bottomright - element_offset - score_offset + '130 -6 0' + '16 0 0';
+			else if (distribution < 1000 && distribution > -1000)
+				minuspos = bottomright - element_offset - score_offset + '130 -6 0';
+			else if (distribution < 10000 && distribution > -10000)
+				minuspos = bottomright - element_offset - score_offset + '130 -6 0' - '16 0 0';
+			else
+				minuspos = bottomright - element_offset - score_offset + '130 -6 0' - '32 0 0';
+			
+			if (distribution <= 0) {
+				distribution_color = '0 1 0';
+				drawpic(minuspos, "gfx/hud/num_minus", '16 16 0', distribution_color, sbar_alpha_fg, DRAWFLAG_ADDITIVE);
+			}
+			else {
+				distribution_color = '1 0 0';
+				drawpic(minuspos, "gfx/hud/num_plus", '16 16 0', distribution_color, sbar_alpha_fg, DRAWFLAG_ADDITIVE);
+			}
+			
+			Sbar_DrawXNum(bottomright - element_offset - score_offset + '180 -6 0', distmsec, 1, 16, distribution_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			Sbar_DrawXNum(bottomright - element_offset - score_offset + '112 -6 0', distsec, 4, 16, distribution_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			drawpic(bottomright - element_offset - score_offset + '170 -6 0', "gfx/hud/num_dot", '16 16 0', distribution_color, sbar_alpha_fg, DRAWFLAG_ADDITIVE);
+		}
+		
+		// big timer
+		if (distribution <= 0 || distribution == score) // draw the highlight background behind the timer if we have the lead
+			drawpic(bottomright - element_offset - score_offset + '20 10 0', "gfx/hud/sb_highlight_4", '178 28 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
+		
+		Sbar_DrawXNum(bottomright - element_offset - score_offset + '166 10 0', racemsec, 1, 30, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+		Sbar_DrawXNum(bottomright - element_offset - score_offset + '96 10 0', racesec, -2, 30, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+		drawpic(bottomright - element_offset - score_offset + '145 10 0', "gfx/hud/num_dot", '30 30 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE);
+		
+		Sbar_DrawXNum(bottomright - element_offset - score_offset + '24 10 0', racemin, -2, 30, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+		drawpic(bottomright - element_offset - score_offset + '76 8 0', "gfx/hud/num_colon", '30 30 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE);
+	}
+	else {
+		if(teamplay)
 		{
-			if(tm.team == COLOR_SPECTATOR || !tm.team_size) // no players? don't display
-				continue;
-			// -32*4 = -128
-			score = tm.(teamscores[ts_primary]);
+			// Layout:
+			//
+			//   team1 team3 team4
+			//
+			//         TEAM2
+			//for(i = 0; i < 4; ++i)
 
-			if (score > max_fragcount)
-				max_fragcount = score;
+			float max_fragcount;
+			max_fragcount = -999;
 
-			if(tm.team == myteam) {
-				if (max_fragcount == score)
-					Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
-				else
-					Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
-			}
-			else
+			for(tm = teams.sort_next; tm; tm = tm.sort_next)
 			{
-				if (max_fragcount == score)
-					Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
+				if(tm.team == COLOR_SPECTATOR || !tm.team_size) // no players? don't display
+					continue;
+				// -32*4 = -128
+				score = tm.(teamscores[ts_primary]);
+
+				if (score > max_fragcount)
+					max_fragcount = score;
+
+				if(tm.team == myteam) {
+					if (max_fragcount == score)
+						Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
+					else
+						Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
+				}
 				else
-					Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
-				offset_y -= 16;
+				{
+					if (max_fragcount == score)
+						Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
+					else
+						Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 16, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL);
+					offset_y -= 16;
+				}
 			}
-		}
-	} else {
-		// me vector := [team/connected frags id]
+		} else {
+			// me vector := [team/connected frags id]
 
-		pl = players.sort_next;
-		if(pl == me)
-			pl = pl.sort_next;
+			pl = players.sort_next;
+			if(pl == me)
+				pl = pl.sort_next;
 
-		if(pl) {
-			distribution = me.(scores[ps_primary]);
-			distribution -= pl.(scores[ps_primary]);
-		} else
-			distribution = 0;
+			if(pl) {
+				distribution = me.(scores[ps_primary]);
+				distribution -= pl.(scores[ps_primary]);
+			} else
+				distribution = 0;
 
-		score = me.(scores[ps_primary]);
+			score = me.(scores[ps_primary]);
 
-		if(distribution >= 0)
-		{
-			if (distribution != 0) {
-				// draw a + sign in front of the score
-				if (distribution < 10) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '32 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
-				else if (distribution < 100) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '16 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
-				else if (distribution < 1000) { drawpic(bottomright - element_offset - score_offset + '132 -6 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+			if(distribution >= 0)
+			{
+				if (distribution != 0) {
+					// draw a + sign in front of the score
+					if (distribution < 10) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '32 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+					else if (distribution < 100) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '16 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+					else if (distribution < 1000) { drawpic(bottomright - element_offset - score_offset + '132 -6 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); }
+				}
+
+				Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+				Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 1 1', 1, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 			}
-
-			Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-			Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 1 1', 1, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			else if(distribution >= -5)
+			{
+				Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+				Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			}
+			else {
+				Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+				Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+			}
 		}
-		else if(distribution >= -5)
-		{
-			Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-			Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-		}
-		else {
-			Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 16, ' 1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-			Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 34, '1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-		}
 	}
 
 	//draw the remaining or elapsed time
 	timelimit = getstatf(STAT_TIMELIMIT);
-
 	vector bgpos;
-	if(timelimit > 0)
-	{
-		timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
-		timeleft = ceil(timeleft);
-		minutesLeft = floor(timeleft / 60);
-		secondsLeft = timeleft - minutesLeft*60;
 
-		if(minutesLeft >= 5 || warmup_stage) //don't use red or yellow for timer during warmup
-			timer_color = '1 1 1'; //white
-		else if(minutesLeft >= 1)
-			timer_color = '1 1 0'; //yellow
-		else
-			timer_color = '1 0 0'; //red
+	timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
+	timeleft = ceil(timeleft);
+	minutesLeft = floor(timeleft / 60);
+	secondsLeft = timeleft - minutesLeft*60;
 
-		if (cvar("sbar_increment_maptime")) {
-			if (time < getstatf(STAT_GAMESTARTTIME)) {
-				//while restart is still active, show negative counter
-				minutes = 0;
-				seconds = ceil(getstatf(STAT_GAMESTARTTIME) - time);
-			} else {
-				float elapsedTime;
-				elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127
-				minutes = floor(elapsedTime / 60);
-				seconds = elapsedTime - minutes*60;
-			}
+	if(minutesLeft >= 5 || warmup_stage || timelimit == 0) //don't use red or yellow in warmup or when there is no timelimit
+		timer_color = '1 1 1'; //white
+	else if(minutesLeft >= 1)
+		timer_color = '1 1 0'; //yellow
+	else
+		timer_color = '1 0 0'; //red
+
+	if (cvar("sbar_increment_maptime") || timelimit == 0) {
+		if (time < getstatf(STAT_GAMESTARTTIME)) {
+			//while restart is still active, show 00:00
+			minutes = seconds = 0;
 		} else {
-			minutes = minutesLeft;
-			seconds = secondsLeft;
+			float elapsedTime;
+			elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127
+			minutes = floor(elapsedTime / 60);
+			seconds = elapsedTime - minutes*60;
 		}
-
-		if (minutes == 0) {
-			if (cvar("sbar_increment_maptime") == 1)
-				bgpos_x = topright_x - 54 - 17 - 12;
-			else
-				bgpos_x = topright_x - 36 - 7 - 12;
-		}
-		else if (minutes < 10) // nudge the timer background left if more digits are drawn
+		if (minutes < 10)
 			bgpos_x = topright_x - 54 - 17 - 12;
-		else if (minutes < 100)
+		else if (minutes < 100)	// nudge the timer background left if more digits are drawn
 			bgpos_x = topright_x - 72 - 17 - 12;
 		else
 			bgpos_x = topright_x - 90 - 17 - 12;
 		bgpos_y = 0;
 		bgpos_z = 0;
-
-		if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100
-			if (teamplay)
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color
-			else {
-				color_x = cvar("sbar_color_bg_r");
-				color_y = cvar("sbar_color_bg_g");
-				color_z = cvar("sbar_color_bg_b");
-
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);
-			}
-		}
-
-		if(minutesLeft >= 1) {
-			Sbar_DrawXNum(topright - '103 0 0' + '0 2 0', minutes, 3, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-			drawpic(topright - '53 0 0' + '0 1 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, DRAWFLAG_NORMAL);
-		}
-		Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
-
 	} else {
-		timer_color = '1 1 1'; //white
-		minutes = floor(time / 60);
-		seconds = floor(time - minutes*60);
-
-		if (minutes < 10)
+		minutes = minutesLeft;
+		seconds = secondsLeft;
+		if (minutes == 0)
+		bgpos_x = topright_x - 36 - 7 - 12;
+		else if (minutes < 10) // nudge the timer background left if more digits are drawn
 			bgpos_x = topright_x - 54 - 17 - 12;
-		else if (minutes < 100)	// nudge the timer background left if more digits are drawn
+		else if (minutes < 100)
 			bgpos_x = topright_x - 72 - 17 - 12;
 		else
 			bgpos_x = topright_x - 90 - 17 - 12;
 		bgpos_y = 0;
 		bgpos_z = 0;
+	}
 
-		if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100
-			if (teamplay)
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color
-			else {
-				color_x = cvar("sbar_color_bg_r");
-				color_y = cvar("sbar_color_bg_g");
-				color_z = cvar("sbar_color_bg_b");
+	if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100
+		if (teamplay)
+			drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color
+		else {
+			color_x = cvar("sbar_color_bg_r");
+			color_y = cvar("sbar_color_bg_g");
+			color_z = cvar("sbar_color_bg_b");
 
-				drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);
-			}
+			drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL);
 		}
+	}
 
+	if(minutesLeft >= 1 || cvar("sbar_increment_maptime") || timelimit == 0) {
 		Sbar_DrawXNum(topright - '103 0 0' + '0 2 0', minutes, 3, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 		drawpic(topright - '53 0 0' + '0 1 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, DRAWFLAG_NORMAL);
-		Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
 	}
-
+	Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL);
+	
 	if(gametype == GAME_RACE || gametype == GAME_CTS)
 	{
 		drawfont = sbar_bigfont;

Modified: branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/client/waypointsprites.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -195,7 +195,7 @@
 
 		if(max(f1, -f1) > max(f2, -f2))
 		{
-			if(f1 > 0)
+			if(d_z * f1 > 0)
 			{
 				// RIGHT edge
 				d = d * (0.5 / f1);
@@ -210,7 +210,7 @@
 		}
 		else
 		{
-			if(f2 > 0)
+			if(d_z * f2 > 0)
 			{
 				// BOTTOM edge
 				d = d * (0.5 / f2);

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-07-21 06:58:26 UTC (rev 7248)
@@ -390,7 +390,6 @@
 // this sets sounds and other properties of the projectiles in csqc
 float PROJECTILE_ELECTRO = 1;
 float PROJECTILE_ROCKET = 2;
-float PROJECTILE_TAG = 3;
 float PROJECTILE_BULLET = 4;
 float PROJECTILE_CRYLINK = 5;
 float PROJECTILE_ELECTRO_BEAM = 6;
@@ -398,8 +397,6 @@
 float PROJECTILE_GRENADE_BOUNCING = 8;
 float PROJECTILE_LASER = 9;
 float PROJECTILE_HLAC = 10;
-float PROJECTILE_SEEKER = 11;
-float PROJECTILE_FLAC = 12;
 float PROJECTILE_PORTO_RED = 13;
 float PROJECTILE_PORTO_BLUE = 14;
 float PROJECTILE_HOOKBOMB = 15;

Modified: branches/nexuiz-2.0/data/qcsrc/common/items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/items.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/common/items.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -37,8 +37,8 @@
 
 	dummy_weapon_info = spawn();
 	dummy_weapon_info.classname = "weapon_info";
-	dummy_weapon_info.weapon = 0;
-	dummy_weapon_info.weapons = 0;
+	dummy_weapon_info.weapon = 0; // you can recognize dummies by this
+	dummy_weapon_info.weapons = 0; // you can recognize dummies by this too
 	dummy_weapon_info.netname = "@!#%'n Tuba";
 	dummy_weapon_info.items = 0;
 	dummy_weapon_info.weapon_func = w_null;
@@ -114,10 +114,9 @@
 	register_weapon(WEP_PORTO,            w_porto,        0,                0,  0, 0, WEP_TYPE_OTHER, 0,                      "porto" ,       "porto",           "Port-O-Launch");
 	register_weapon(WEP_MINSTANEX,        w_minstanex,    IT_CELLS,         7, -1, 1, WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_HIGH, "minstanex",    "minstanex",       "MinstaNex");
 	register_weapon(WEP_HOOK,             w_hook,         IT_CELLS|IT_FUEL, 0,  0, 1, WEP_TYPE_SPLASH, 0,                      "hookgun",      "hook",            "Grappling Hook");
-	register_weapon(WEP_SEEKER,           w_seeker,       IT_ROCKETS,       8,  0, 0, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_HIGH, "seeker",       "seeker",          "T.A.G. Seeker");
 	register_weapon(WEP_HLAC,             w_hlac,         IT_CELLS,         6,  1, 0, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID,  "hlac",         "hlac",            "Heavy Laser Assault Cannon");
-	register_weapon(WEP_CAMPINGRIFLE,     w_campingrifle, IT_NAILS,         3,  1, 0, WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID,  "campingrifle", "campingrifle",    "Rifle");
 	register_weapon(WEP_TUBA,             w_tuba,         0,                1, -1, 0, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID,  "tuba",         "tuba",            "@!#%'n Tuba");
+	register_weapon(WEP_CAMPINGRIFLE,     w_campingrifle, IT_NAILS,         3,  1, 0, WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID,  "campingrifle", "campingrifle",    "Rifle");
 
 	register_weapons_done();
 }

Modified: branches/nexuiz-2.0/data/qcsrc/common/items.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/items.qh	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/common/items.qh	2009-07-21 06:58:26 UTC (rev 7248)
@@ -14,11 +14,10 @@
 float WEP_MINSTANEX			= 11; float WEPBIT_MINSTANEX		= 1024;
 float WEP_HOOK     			= 12; float WEPBIT_HOOK     		= 2048;
 float WEP_HLAC			    = 13; float WEPBIT_HLAC		        = 4096;
-float WEP_SEEKER			= 14; float WEPBIT_SEEKER		    = 8192;
+float WEP_TUBA        	    = 14; float WEPBIT_TUBA             = 8192;
 float WEP_CAMPINGRIFLE	    = 15; float WEPBIT_CAMPINGRIFLE     = 16384;
-float WEP_TUBA        	    = 16; float WEPBIT_TUBA             = 32768;
-float WEP_LAST				= 16; float WEPBIT_ALL              = 65535;
-float WEP_COUNT             = 17;
+float WEP_LAST				= 15; float WEPBIT_ALL              = 32767;
+float WEP_COUNT             = 16;
 
 float BOT_PICKUP_RATING_LOW	= 2500;
 float BOT_PICKUP_RATING_MID	= 5000;

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -28,13 +28,13 @@
 		sf |= 4; // zoomed
 	if(e.porto_v_angle_held)
 		sf |= 8; // angles held
-	
+
 	WriteByte(MSG_ENTITY, ENT_CLIENT_CLIENTDATA);
 	WriteByte(MSG_ENTITY, sf);
 
 	if(sf & 2)
 		WriteByte(MSG_ENTITY, to.spectatee_status);
-	
+
 	if(sf & 8)
 	{
 		WriteAngle(MSG_ENTITY, e.v_angle_x);
@@ -119,7 +119,7 @@
 	if(race_spawns)
 		if(spot.target == "")
 			return -1;
-	
+
 	if(clienttype(self) == CLIENTTYPE_REAL)
 	{
 		if(spot.restriction == 1)
@@ -227,7 +227,7 @@
 				// too short distance
 				spawn_allgood = FALSE;
 			}
-			else 
+			else
 			{
 				// perfect
 				spawn_allbad = FALSE;
@@ -306,26 +306,33 @@
 	firstspot = findchain(classname, "info_player_deathmatch");
 	// filter out the bad ones
 	// (note this returns the original list if none survived)
-	firstspot_new = Spawn_FilterOutBadSpots(firstspot, playerlist, 100, teamcheck);
-	if(!firstspot_new)
-		firstspot_new = Spawn_FilterOutBadSpots(firstspot, playerlist, -1, teamcheck);
-	firstspot = firstspot_new;
-
-	// there is 50/50 chance of choosing a random spot or the furthest spot
-	// (this means that roughly every other spawn will be furthest, so you
-	// usually won't get fragged at spawn twice in a row)
-	if (arena_roundbased)
+	if(anypoint)
 	{
-		firstspot_new = Spawn_FilterOutBadSpots(firstspot, playerlist, 800, teamcheck);
-		if(firstspot_new)
-			firstspot = firstspot_new;
 		spot = Spawn_WeightedPoint(firstspot, 1, 1, 1);
 	}
-	else if (random() > cvar("g_spawn_furthest"))
-		spot = Spawn_WeightedPoint(firstspot, 1, 1, 1);
 	else
-		spot = Spawn_WeightedPoint(firstspot, 1, 5000, 5); // chooses a far far away spawnpoint
+	{
+		firstspot_new = Spawn_FilterOutBadSpots(firstspot, playerlist, 100, teamcheck);
+		if(!firstspot_new)
+			firstspot_new = Spawn_FilterOutBadSpots(firstspot, playerlist, -1, teamcheck);
+		firstspot = firstspot_new;
 
+		// there is 50/50 chance of choosing a random spot or the furthest spot
+		// (this means that roughly every other spawn will be furthest, so you
+		// usually won't get fragged at spawn twice in a row)
+		if (arena_roundbased)
+		{
+			firstspot_new = Spawn_FilterOutBadSpots(firstspot, playerlist, 800, teamcheck);
+			if(firstspot_new)
+				firstspot = firstspot_new;
+			spot = Spawn_WeightedPoint(firstspot, 1, 1, 1);
+		}
+		else if (random() > cvar("g_spawn_furthest"))
+			spot = Spawn_WeightedPoint(firstspot, 1, 1, 1);
+		else
+			spot = Spawn_WeightedPoint(firstspot, 1, 5000, 5); // chooses a far far away spawnpoint
+	}
+
 	if(cvar("spawn_debugview"))
 	{
 		print("spot mindistance: ", ftos(spot.SPAWNPOINT_SCORE), "\n");
@@ -405,7 +412,7 @@
 float Client_customizeentityforclient()
 {
 	entity modelsource;
-	
+
 	if(self.modelindex == 0)
 		return TRUE;
 
@@ -558,7 +565,7 @@
 		DropBall(self.ballcarried, self.origin + self.ballcarried.origin, self.velocity);
 
 	WaypointSprite_PlayerDead();
-	
+
 	if(self.killcount != -666)
 	{
 		if(g_lms)
@@ -575,7 +582,7 @@
 	PlayerScore_Clear(self); // clear scores when needed
 
 	self.spectatortime = time;
-	
+
 	self.classname = "observer";
 	self.iscreature = FALSE;
 	self.health = -666;
@@ -599,8 +606,6 @@
 	self.pain_finished = 0;
 	self.strength_finished = 0;
 	self.invincible_finished = 0;
-	self.damage_hits = 0;
-	self.maxdamage_fired = 0;
 	self.pushltime = 0;
 	self.think = SUB_Null;
 	self.nextthink = 0;
@@ -729,7 +734,7 @@
 		oldskin = self.skinindex;
 		self.skinindex = RestrictSkin(stof(self.playerskin));
 	}
-	
+
 	if(chmdl || oldskin != self.skinindex)
 		self.species = player_getspecies(); // model or skin has changed
 
@@ -750,7 +755,7 @@
 	entity e;
 	e = spawn();
 	setorigin(e, org);
-	RadiusDamage(e, world, g_touchexplode_damage, g_touchexplode_edgedamage, g_touchexplode_radius, world, g_touchexplode_force, DEATH_TOUCHEXPLODE, world);
+	RadiusDamage(e, world, g_touchexplode_damage, g_touchexplode_edgedamage, g_touchexplode_radius, world, g_touchexplode_force, DEATH_TOUCHEXPLODE, world, 0);
 	remove(e);
 }
 
@@ -873,8 +878,6 @@
 		self.pain_finished = 0;
 		self.strength_finished = 0;
 		self.invincible_finished = 0;
-		self.maxdamage_fired = 0;
-		self.damage_hits = 0;
 		self.pushltime = 0;
 		//self.speed_finished = 0;
 		//self.slowmo_finished = 0;
@@ -1129,7 +1132,7 @@
 	float killtime;
 	entity e;
 	killtime = cvar("g_balance_kill_delay");
-	
+
 	if(g_race_qualifying)
 		killtime = 0;
 
@@ -1238,7 +1241,7 @@
 	// send prediction settings to the client
 	stuffcmd(e, "\nin_bindmap 0 0\n");
 	/*
-	 * we no longer need to stuff this. Remove this comment block if you feel 
+	 * we no longer need to stuff this. Remove this comment block if you feel
 	 * 2.3 and higher (or was it 2.2.3?) don't need these any more
 	stuffcmd(e, strcat("cl_gravity ", ftos(cvar("sv_gravity")), "\n"));
 	stuffcmd(e, strcat("cl_movement_accelerate ", ftos(cvar("sv_accelerate")), "\n"));
@@ -1473,12 +1476,12 @@
 
 	if(self.entcs)
 		detach_entcs();
-	
+
 	if(cvar("sv_eventlog"))
 		GameLogEcho(strcat(":part:", ftos(self.playerid)));
 	bprint ("^4",self.netname);
 	bprint ("^4 disconnected\n");
-	
+
 	SoundEntity_Detach(self);
 
 	DropAllRunes(self);
@@ -1951,7 +1954,7 @@
 		self.pressedkeys &~= KEY_FORWARD;
 		self.pressedkeys &~= KEY_BACKWARD;
 	}
-	
+
 	if (self.movement_y > 0)
 	{	// right key pressed
 		self.pressedkeys |= KEY_RIGHT;
@@ -1967,7 +1970,7 @@
 		self.pressedkeys &~= KEY_RIGHT;
 		self.pressedkeys &~= KEY_LEFT;
 	}
-	
+
 	if (self.BUTTON_JUMP) // get if jump and crouch keys are pressed
 		self.pressedkeys |= KEY_JUMP;
 	else
@@ -1998,8 +2001,6 @@
 	self.metertime = spectatee.metertime;
 	self.strength_finished = spectatee.strength_finished;
 	self.invincible_finished = spectatee.invincible_finished;
-	self.maxdamage_fired = spectatee.maxdamage_fired;
-	self.damage_hits = spectatee.damage_hits;
 	self.pressedkeys = spectatee.pressedkeys;
 	self.weapons = spectatee.weapons;
 	self.switchweapon = spectatee.switchweapon;
@@ -2024,7 +2025,7 @@
 
 	if (self == self.enemy)
 		return 0;
-	
+
 	if(self.enemy.classname != "player")
 		return 0;
 
@@ -2274,7 +2275,7 @@
 	if(blockSpectators && frametime)
 		// WORKAROUND: only use dropclient in server frames (frametime set). Never use it in cl_movement frames (frametime zero).
 		checkSpectatorBlock();
-	
+
 	zoomstate_set = 0;
 
 	if(self.netname_previous != self.netname)
@@ -2472,7 +2473,7 @@
 				}
 			}
 		}
-		
+
 		if(self.health <= g_bloodloss && self.deadflag == DEAD_NO)
 		{
 			if(self.bloodloss_timer < time)
@@ -2706,7 +2707,7 @@
 
 	if(Drag_MayChangeAngles(draggee))
 		draggee.angles_y = draggee.angles_y * (1 - f) + (dragger.v_angle_y + dragger.draglocalangle) * f;
-	
+
 	draggee.ltime = max(servertime + serverframetime, draggee.ltime); // fixes func_train breakage
 
 	te_lightning1(dragger, dragger.origin + dragger.view_ofs, curorigin);
@@ -2800,7 +2801,7 @@
 								detach_sameorigin(self.cursor_trace_ent);
 							Drag_Begin(self, self.cursor_trace_ent, self.cursor_trace_endpos);
 						}
-	
+
 	if(Drag_IsDragging(self))
 	{
 		if(self.BUTTON_DRAG)

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -452,7 +452,7 @@
 							setorigin(e2, org);
 							pointparticles(particleeffectnum("rocket_explode"), org, '0 0 0', 1);
 							sound(e2, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-							RadiusDamage(e2, e, 1000, 0, 128, e, 500, DEATH_CHEAT, world);
+							RadiusDamage(e2, e, 1000, 0, 128, e, 500, DEATH_CHEAT, world, 0);
 							remove(e2);
 						}
 						print("404 Sportsmanship not found.\n");

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1,5 +1,5 @@
 string CVAR_CHECK_DEFAULT = "1247e8cd8be7bda1c260795d5bebb20b";
-string CVAR_CHECK_WEAPONS = "4f7b4c1e2feeef4988b02a93ff35a2ca";
+string CVAR_CHECK_WEAPONS = "a7ca57b891d66754b856e24e5c1745e3";
 
 float	FALSE					= 0;
 float	TRUE					= 1;

Modified: branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -86,7 +86,7 @@
 void func_breakable_look_destroyed()
 {
 	local float floor_z;
-	
+
 	if(self.mdl_dead == "")
 		self.model = "";
 	else {
@@ -97,7 +97,7 @@
 			self.origin_z = floor_z;
 		}
 	}
-		
+
 	self.solid = SOLID_NOT;
 }
 
@@ -157,7 +157,7 @@
 		sound (self, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
 
 	if(self.dmg)
-		RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world);
+		RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world, 0);
 
 	if(self.cnt)
 		pointparticles(self.cnt, self.absmin * 0.5 + self.absmax * 0.5, '0 0 0', self.count);

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -934,7 +934,8 @@
 float RadiusDamage_EnemyDamageDone;
 float RadiusDamage_EnemyMaxDamage;
 float RadiusDamage_running;
-float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity)
+float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore,
+					float forceintensity, float deathtype, entity directhitentity, float weaponid)
 // Returns total damage applies to creatures
 {
 	entity	targ;
@@ -1068,15 +1069,16 @@
 	RadiusDamage_running = 0;
 
 	//Calculates stats for all RadiusDamage weapons
+	if(weaponid)
 	if(clienttype(attacker) == CLIENTTYPE_REAL)
 	{
 		float f;
 		f = min(RadiusDamage_EnemyMaxDamage, RadiusDamage_EnemyDamageDone);
-		attacker.actual_damage[attacker.weapon] += f;  // actual damage done
+		attacker.actual_damage[weaponid] += f;  // actual damage done
 		//attacker.max_damage[attacker.weapon] += coredamage;  // max damage, potential damage
 		// update the client and store into addstat() in g_world
-		attacker.damage_hits = attacker.weapon + 64 * rint(attacker.actual_damage[attacker.weapon]);
-		attacker.maxdamage_fired = attacker.weapon + 64 * rint(attacker.max_damage[attacker.weapon]);
+		attacker.damage_hits = weaponid + 64 * rint(attacker.actual_damage[weaponid]);
+		attacker.maxdamage_fired = weaponid + 64 * rint(attacker.max_damage[weaponid]);
 	}
 
 	return total_damage_to_creatures;

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -162,11 +162,8 @@
 
 	if (self.wait > 0)
 	{
-		if(self.wait > 0.01)
-		{
-			self.think = multi_wait;
-			self.nextthink = time + self.wait;
-		}
+		self.think = multi_wait;
+		self.nextthink = time + self.wait;
 	}
 	else
 	{	// we can't just remove (self) here, because this is a touch function
@@ -268,6 +265,8 @@
 		self.noise = "misc/trigger1.wav";
 	}
 
+	if (!self.wait)
+		self.wait = 0.2;
 	self.use = multi_use;
 
 	EXACTTRIGGER_INIT;

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_world.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -254,6 +254,7 @@
 		BADCVAR("g_cts");
 		BADCVAR("g_runematch");
 		BADCVAR("g_tdm");
+		BADCVAR("g_nexball");
 		BADCVAR("teamplay");
 
 		// long
@@ -1379,7 +1380,6 @@
 float checkrules_suddendeathwarning;
 float checkrules_suddendeathend;
 float checkrules_overtimesadded; //how many overtimes have been already added
-float checkrules_status;
 
 float WINNING_NO = 0; // no winner, but time limits may terminate the game
 float WINNING_YES = 1; // winner found
@@ -1392,7 +1392,7 @@
 	// - for this timelimit_overtime needs to be >0 of course
 	// - also check the winning condition calculated in the previous frame and only add normal overtime
 	//   again, if at the point at which timelimit would be extended again, still no winner was found
-	if ((checkrules_overtimesadded < cvar("timelimit_overtimes")) && cvar("timelimit_overtime") && (checkrules_status == WINNING_NEVER)) 
+	if ((checkrules_overtimesadded >= 0) && (checkrules_overtimesadded < cvar("timelimit_overtimes")) && cvar("timelimit_overtime") && !(g_race && !g_race_qualifying))
 	{
 		++checkrules_overtimesadded;
 		//add one more overtime by simply extending the timelimit
@@ -1418,7 +1418,11 @@
 	else 
 	{
 		if(!checkrules_suddendeathend)
+		{
 			checkrules_suddendeathend = time + 60 * cvar("timelimit_suddendeath");
+			if(g_race && !g_race_qualifying)
+				race_StartCompleting();
+		}
 	}
 }
 
@@ -1713,17 +1717,26 @@
 {
 	float wc;
 	entity p;
+	float n, c;
+
+	n = 0;
+	c = 0;
+	FOR_EACH_PLAYER(p)
+	{
+		++n;
+		if(p.race_completed)
+			++c;
+	}
+	if(n && (n == c))
+		return WINNING_YES;
 	wc = WinningCondition_Scores(fraglimit, 0);
 
 	// ALWAYS initiate overtime, unless EVERYONE has finished the race!
 	if(wc == WINNING_YES || wc == WINNING_STARTSUDDENDEATHOVERTIME)
 	// do NOT support equality when the laps are all raced!
-	{
-		FOR_EACH_PLAYER(p)
-			if not(p.race_completed)
-				return WINNING_STARTSUDDENDEATHOVERTIME;
-		return WINNING_YES;
-	}
+		return WINNING_STARTSUDDENDEATHOVERTIME;
+	else
+		return WINNING_NEVER;
 	return wc;
 }
 
@@ -1884,7 +1897,7 @@
 	{
 		if (timelimit && time >= timelimit)
 		{
-			if(g_race && g_race_qualifying == 2 && timelimit > 0)
+			if(g_race && (g_race_qualifying == 2) && timelimit > 0)
 			{
 				float totalplayers;
 				float playerswithlaps;
@@ -1906,6 +1919,7 @@
 				{
 					checkrules_suddendeathend = 0;
 					ReadyRestart(); // go to race
+					return;
 				}
 				else
 					InitiateOvertime();
@@ -1921,6 +1935,7 @@
 		return;
 	}
 
+	float checkrules_status;
 	checkrules_status = WinningCondition_RanOutOfSpawns();
 	if(checkrules_status == WINNING_YES)
 	{
@@ -1929,10 +1944,12 @@
 	else if(g_race && !g_race_qualifying && timelimit >= 0)
 	{
 		checkrules_status = WinningCondition_Race(fraglimit);
+		//print("WC_RACE yields ", ftos(checkrules_status), "\n");
 	}
 	else if(g_race && g_race_qualifying == 2 && timelimit >= 0)
 	{
 		checkrules_status = WinningCondition_QualifyingThenRace(fraglimit);
+		//print("WC_QUALIFYING_THEN_RACE yields ", ftos(checkrules_status), "\n");
 	}
 	else if(g_assault)
 	{
@@ -1949,11 +1966,13 @@
 	else
 	{
 		checkrules_status = WinningCondition_Scores(fraglimit, leadlimit);
+		//print("WC_SCORES yields ", ftos(checkrules_status), "\n");
 	}
 
 	if(checkrules_status == WINNING_STARTSUDDENDEATHOVERTIME)
 	{
 		checkrules_status = WINNING_NEVER;
+		checkrules_overtimesadded = -1;
 		InitiateOvertime();
 	}
 
@@ -1966,7 +1985,10 @@
 			checkrules_status = WINNING_YES;
 
 	if(checkrules_status == WINNING_YES)
+	{
+		//print("WINNING\n");
 		NextLevel();
+	}
 };
 
 float mapvote_nextthink;

Modified: branches/nexuiz-2.0/data/qcsrc/server/havocbot_ons.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/havocbot_ons.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/havocbot_ons.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -38,7 +38,7 @@
 	for(i = WEP_FIRST; i < WEP_LAST ; ++i)
 	{
 		// Find weapon
-		if(power2of(i-1) & self.weapons)
+		if((get_weaponinfo(i)).weapons & self.weapons)
 		if(++c>=4)
 			break;
 	}

Modified: branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -8,15 +8,29 @@
 float havocbot_pickupevalfunc(entity item)
 {
 	float i, j, rating, base, position, need_shells, need_nails, need_rockets, need_cells;
-	rating = 0;
+	entity wi;
 
 	base = item.bot_pickupbasevalue;
+	rating = 0;
 
-	need_shells = self.weapons & WEPBIT_SHOTGUN;
-	need_nails = self.weapons & WEPBIT_UZI;
-	need_cells = self.weapons & ( WEPBIT_HOOK | WEPBIT_HLAC | WEPBIT_MINSTANEX | WEPBIT_NEX | WEPBIT_ELECTRO | WEPBIT_CRYLINK );
-	need_rockets = self.weapons & ( WEPBIT_ROCKET_LAUNCHER | WEPBIT_GRENADE_LAUNCHER | WEPBIT_HAGAR | WEPBIT_SEEKER );
+	// Detect needed ammo
+	for(i = WEP_FIRST; i < WEP_LAST ; ++i)
+	{
+		wi = get_weaponinfo(i);
 
+		if not(wi.weapons & self.weapons)
+			continue;
+
+		if(wi.items & IT_SHELLS)
+			need_shells = TRUE;
+		else if(wi.items & IT_NAILS)
+			need_nails = TRUE;
+		else if(wi.items & IT_ROCKETS)
+			need_rockets = TRUE;
+		else if(wi.items & IT_CELLS)
+			need_cells = TRUE;
+	}
+
 	// Rate ammo items
 	if (item.ammo_shells)
 	if (self.ammo_shells < g_pickup_shells_max && need_cells )
@@ -69,7 +83,7 @@
 			for(i = WEP_FIRST; i < WEP_LAST ; ++i)
 			{
 				// Find weapon
-				if( power2of(i-1) & item.weapons  != item.weapons )
+				if( (get_weaponinfo(i)).weapons & item.weapons  != item.weapons )
 					continue;
 
 				// Find the highest position on any range

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1964,7 +1964,7 @@
         }
     }
 
-    if (g_race || g_cts)
+    if (g_race)
     {
         for (i = 0; i < MapInfo_count; ++i)
         {
@@ -1980,6 +1980,22 @@
         }
     }
 
+    if (g_cts)
+    {
+        for (i = 0; i < MapInfo_count; ++i)
+        {
+            if (MapInfo_Get_ByID(i))
+            {
+                r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/ctsrecord/time")));
+                if (r == 0)
+                    continue;
+                h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/ctsrecord/netname"));
+                s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, mmsss(r)), " ", h, "\n");
+                ++rec;
+            }
+        }
+    }
+
     MapInfo_ClearTemps();
 
     if (s == "")

Modified: branches/nexuiz-2.0/data/qcsrc/server/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/progs.src	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/progs.src	2009-07-21 06:58:26 UTC (rev 7248)
@@ -104,7 +104,6 @@
 w_porto.qc
 w_hook.qc
 w_hlac.qc
-w_seeker.qc
 w_campingrifle.qc
 w_tuba.qc
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/race.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/race.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/race.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -64,10 +64,6 @@
 	cp = e.race_checkpoint;
 	recordtime = race_checkpoint_records[cp];
 	recordholder = race_checkpoint_recordholders[cp];
-	/*
-	recordtime = stof(db_get(ServerProgsDB, strcat(GetMapname(), "/racerecord/", ftos(cp), "/time")));
-	recordholder = db_get(ServerProgsDB, strcat(GetMapname(), "/racerecord/", ftos(cp), "/netname"));
-	*/
 	if(recordholder == e.netname)
 		recordholder = "";
 
@@ -127,12 +123,7 @@
 
 			if(cvar("fraglimit"))
 				if(l >= cvar("fraglimit"))
-				{
-					race_completing = 1;
-					FOR_EACH_PLAYER(p)
-						if(p.deadflag != DEAD_NO)
-							race_AbandonRaceCheck(p);
-				}
+					race_StartCompleting();
 
 			if(race_completing)
 			{
@@ -167,15 +158,20 @@
 				{
 					float grecordtime;
 					string grecordholder;
-					grecordtime = stof(db_get(ServerProgsDB, strcat(GetMapname(), "/racerecord/time")));
-					grecordholder = db_get(ServerProgsDB, strcat(GetMapname(), "/racerecord/netname"));
+					string rr;
+					if(g_cts)
+						rr = "/ctsrecord/";
+					else
+						rr = "/racerecord/";
+					grecordtime = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time")));
+					grecordholder = db_get(ServerProgsDB, strcat(GetMapname(), rr, "netname"));
 					if(grecordholder == e.netname)
 						grecordholder = "";
 					if(grecordtime == 0)
 					{
 						bprint(e.netname, "^7 set the all-time fastest lap record with ", mmsss(t), "\n");
-						db_put(ServerProgsDB, strcat(GetMapname(), "/racerecord/time"), ftos(t));
-						db_put(ServerProgsDB, strcat(GetMapname(), "/racerecord/netname"), e.netname);
+						db_put(ServerProgsDB, strcat(GetMapname(), rr, "time"), ftos(t));
+						db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname"), e.netname);
 						write_recordmarker(e, time - t/10, t/10);
 					}
 					else if(t < grecordtime)
@@ -184,8 +180,8 @@
 							bprint(e.netname, "^7 broke his all-time fastest lap record with ", mmsss(t), "\n");
 						else
 							bprint(e.netname, "^7 broke ", grecordholder, "^7's all-time fastest lap record with ", mmsss(t), "\n");
-						db_put(ServerProgsDB, strcat(GetMapname(), "/racerecord/time"), ftos(t));
-						db_put(ServerProgsDB, strcat(GetMapname(), "/racerecord/netname"), e.netname);
+						db_put(ServerProgsDB, strcat(GetMapname(), rr, "time"), ftos(t));
+						db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname"), e.netname);
 						write_recordmarker(e, time - t/10, t/10);
 					}
 					else
@@ -561,6 +557,15 @@
 	}
 }
 
+void race_StartCompleting()
+{
+	entity p;
+	race_completing = 1;
+	FOR_EACH_PLAYER(p)
+		if(p.deadflag != DEAD_NO)
+			race_AbandonRaceCheck(p);
+}
+
 void race_PreparePlayer()
 {
 	race_ClearTime(self);
@@ -719,12 +724,6 @@
 void penalty_touch()
 {
 	EXACTTRIGGER_TOUCH;
-	race_ImposePenaltyTime(other, self.race_penalty, self.race_penalty_reason);
-}
-
-void penalty_use()
-{
-	other = activator;
 	if(other.race_lastpenalty != self)
 	{
 		other.race_lastpenalty = self;
@@ -732,6 +731,11 @@
 	}
 }
 
+void penalty_use()
+{
+	race_ImposePenaltyTime(activator, self.race_penalty, self.race_penalty_reason);
+}
+
 void spawnfunc_trigger_race_penalty()
 {
 	EXACTTRIGGER_INIT;

Modified: branches/nexuiz-2.0/data/qcsrc/server/race.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/race.qh	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/race.qh	2009-07-21 06:58:26 UTC (rev 7248)
@@ -18,3 +18,4 @@
 .float race_completed;
 float race_completing;
 void race_ImposePenaltyTime(entity pl, float penalty, string reason);
+void race_StartCompleting();

Modified: branches/nexuiz-2.0/data/qcsrc/server/scores.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/scores.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/scores.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -458,6 +458,7 @@
 			else
 				WinningConditionHelper_topscore = -999999999;
 		}
+		WinningConditionHelper_equality = 0;
 	}
 
 	if(WinningConditionHelper_secondscore == 0)

Modified: branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -331,9 +331,6 @@
 		qualifying_override = cvar("g_race_qualifying_timelimit_override");
 		fraglimit_override = cvar("g_race_laps_limit");
 		leadlimit_override = 0; // currently not supported by race
-
-		if(g_race_qualifying)
-			independent_players = 1;
 	}
 
 	if(g_cts)
@@ -380,8 +377,12 @@
 	if(g_race)
 	{
 		// we need to find out the correct value for g_race_qualifying
-		if(!cvar("g_campaign") && cvar("g_race_qualifying_timelimit") > 0)
+		if(cvar("g_campaign"))
 		{
+			g_race_qualifying = 1;
+		}
+		else if(!cvar("g_campaign") && cvar("g_race_qualifying_timelimit") > 0)
+		{
 			g_race_qualifying = 2;
 			race_fraglimit = cvar("fraglimit");
 			race_leadlimit = cvar("leadlimit");

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -8,11 +8,11 @@
 #ifdef TURRET_DEBUG
     float d;
 
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
 #else
-    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
 #endif
     sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -74,11 +74,11 @@
 
 
 #ifdef TURRET_DEBUG
-    ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + ftmp; //self.owner.shot_dmg;
     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
 #else
-    RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
 #endif
 
     remove (self);

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -161,7 +161,7 @@
 
     //w_deathtypestring = "could not dodge the twin missiles.";
     self.event_damage = SUB_Null;
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
 
 #ifdef TURRET_DEBUG
     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -376,7 +376,7 @@
     WriteCoord (MSG_BROADCAST, org2_z);
 
     self.event_damage = SUB_Null;
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
 
 #ifdef TURRET_DEBUG
     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -81,11 +81,11 @@
 #ifdef TURRET_DEBUG
     float d;
 
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
 #else
-    RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
 #endif
 
     // Target dead, Tell turret.

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -104,11 +104,11 @@
 #ifdef TURRET_DEBUG
     float d;
 
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
 #else
-    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world, 0);
 #endif
     sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -278,7 +278,7 @@
 
     pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
     //w_deathtypestring = "got blasted to oblivion";
-    RadiusDamage (self, self.owner, cvar("g_turrets_unit_walker_std_rocket_dmg"), 0, cvar("g_turrets_unit_walker_std_rocket_radius"), world, cvar("g_turrets_unit_walker_std_rocket_force"), DEATH_TURRET, world);
+    RadiusDamage (self, self.owner, cvar("g_turrets_unit_walker_std_rocket_dmg"), 0, cvar("g_turrets_unit_walker_std_rocket_radius"), world, cvar("g_turrets_unit_walker_std_rocket_force"), DEATH_TURRET, world, 0);
 
     remove (self);
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -15,7 +15,7 @@
 		f = cvar("g_balance_crylink_primary_bouncedamagefactor");
 	if(self.alpha)
 		f *= self.alpha;
-	RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other);
+	RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other, WEP_CRYLINK);
 	if (finalhit)
 	{
 		remove (self);
@@ -42,7 +42,7 @@
 		f = cvar("g_balance_crylink_secondary_bouncedamagefactor");
 	if(self.alpha)
 		f *= self.alpha;
-	RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage") * f, cvar("g_balance_crylink_secondary_edgedamage") * f, cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force") * f, self.projectiledeathtype, other);
+	RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage") * f, cvar("g_balance_crylink_secondary_edgedamage") * f, cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force") * f, self.projectiledeathtype, other, WEP_CRYLINK);
 	if (finalhit)
 	{
 		remove (self);

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -11,11 +11,11 @@
 	self.event_damage = SUB_Null;
 	if (self.movetype == MOVETYPE_BOUNCE)
 	{
-		RadiusDamage (self, self.owner, cvar("g_balance_electro_secondary_damage"), cvar("g_balance_electro_secondary_edgedamage"), cvar("g_balance_electro_secondary_radius"), world, cvar("g_balance_electro_secondary_force"), self.projectiledeathtype, other);
+		RadiusDamage (self, self.owner, cvar("g_balance_electro_secondary_damage"), cvar("g_balance_electro_secondary_edgedamage"), cvar("g_balance_electro_secondary_radius"), world, cvar("g_balance_electro_secondary_force"), self.projectiledeathtype, other, WEP_ELECTRO);
 	}
 	else
 	{
-		RadiusDamage (self, self.owner, cvar("g_balance_electro_primary_damage"), cvar("g_balance_electro_primary_edgedamage"), cvar("g_balance_electro_primary_radius"), world, cvar("g_balance_electro_primary_force"), self.projectiledeathtype, other);
+		RadiusDamage (self, self.owner, cvar("g_balance_electro_primary_damage"), cvar("g_balance_electro_primary_edgedamage"), cvar("g_balance_electro_primary_radius"), world, cvar("g_balance_electro_primary_force"), self.projectiledeathtype, other, WEP_ELECTRO);
 	}
 
 	remove (self);
@@ -23,7 +23,7 @@
 
 void W_Plasma_Explode_Combo (void) {
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.owner, cvar("g_balance_electro_combo_damage"), cvar("g_balance_electro_combo_edgedamage"), cvar("g_balance_electro_combo_radius"), world, cvar("g_balance_electro_combo_force"), WEP_ELECTRO | HITTYPE_BOUNCE, other); // use THIS type for a combo because primary can't bounce
+	RadiusDamage (self, self.owner, cvar("g_balance_electro_combo_damage"), cvar("g_balance_electro_combo_edgedamage"), cvar("g_balance_electro_combo_radius"), world, cvar("g_balance_electro_combo_force"), WEP_ELECTRO | HITTYPE_BOUNCE, other, WEP_ELECTRO); // use THIS type for a combo because primary can't bounce
 	remove (self);
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -8,7 +8,7 @@
 						announce(self.owner, "announcer/male/airshot.wav");
 
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_primary_damage"), cvar("g_balance_grenadelauncher_primary_edgedamage"), cvar("g_balance_grenadelauncher_primary_radius"), world, cvar("g_balance_grenadelauncher_primary_force"), self.projectiledeathtype, other);
+	RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_primary_damage"), cvar("g_balance_grenadelauncher_primary_edgedamage"), cvar("g_balance_grenadelauncher_primary_radius"), world, cvar("g_balance_grenadelauncher_primary_force"), self.projectiledeathtype, other, WEP_GRENADE_LAUNCHER);
 
 	remove (self);
 }
@@ -22,7 +22,7 @@
 					announce(self.owner, "announcer/male/airshot.wav");
 
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_secondary_damage"), cvar("g_balance_grenadelauncher_secondary_edgedamage"), cvar("g_balance_grenadelauncher_secondary_radius"), world, cvar("g_balance_grenadelauncher_secondary_force"), self.projectiledeathtype, other);
+	RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_secondary_damage"), cvar("g_balance_grenadelauncher_secondary_edgedamage"), cvar("g_balance_grenadelauncher_secondary_radius"), world, cvar("g_balance_grenadelauncher_secondary_force"), self.projectiledeathtype, other, WEP_GRENADE_LAUNCHER);
 
 	remove (self);
 }
@@ -103,7 +103,7 @@
 	gren.angles = vectoangles (gren.velocity);
 	gren.flags = FL_PROJECTILE;
 
-	CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE, TRUE);	
+	CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE, TRUE);
 }
 
 void W_Grenade_Attack2 (void)

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -2,7 +2,7 @@
 void W_Hagar_Explode (void)
 {
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.realowner, cvar("g_balance_hagar_primary_damage"), cvar("g_balance_hagar_primary_edgedamage"), cvar("g_balance_hagar_primary_radius"), world, cvar("g_balance_hagar_primary_force"), self.projectiledeathtype, other);
+	RadiusDamage (self, self.realowner, cvar("g_balance_hagar_primary_damage"), cvar("g_balance_hagar_primary_edgedamage"), cvar("g_balance_hagar_primary_radius"), world, cvar("g_balance_hagar_primary_force"), self.projectiledeathtype, other, WEP_HAGAR);
 
 	remove (self);
 }
@@ -10,7 +10,7 @@
 void W_Hagar_Explode2 (void)
 {
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.realowner, cvar("g_balance_hagar_secondary_damage"), cvar("g_balance_hagar_secondary_edgedamage"), cvar("g_balance_hagar_secondary_radius"), world, cvar("g_balance_hagar_secondary_force"), self.projectiledeathtype, other);
+	RadiusDamage (self, self.realowner, cvar("g_balance_hagar_secondary_damage"), cvar("g_balance_hagar_secondary_edgedamage"), cvar("g_balance_hagar_secondary_radius"), world, cvar("g_balance_hagar_secondary_force"), self.projectiledeathtype, other, WEP_HAGAR);
 
 	remove (self);
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -5,7 +5,7 @@
 
 	self.event_damage = SUB_Null;
 
-    RadiusDamage (self, self.owner, cvar("g_balance_hlac_primary_damage"), cvar("g_balance_hlac_primary_edgedamage"), cvar("g_balance_hlac_primary_radius"), world, cvar("g_balance_hlac_primary_force"), self.projectiledeathtype, other);
+    RadiusDamage (self, self.owner, cvar("g_balance_hlac_primary_damage"), cvar("g_balance_hlac_primary_edgedamage"), cvar("g_balance_hlac_primary_radius"), world, cvar("g_balance_hlac_primary_force"), self.projectiledeathtype, other, WEP_HLAC);
 
 	remove (self);
 }
@@ -16,7 +16,7 @@
 
 	self.event_damage = SUB_Null;
 
-    RadiusDamage (self, self.owner, cvar("g_balance_hlac_secondary_damage"), cvar("g_balance_hlac_secondary_edgedamage"), cvar("g_balance_hlac_secondary_radius"), world, cvar("g_balance_hlac_secondary_force"), self.projectiledeathtype, other);
+    RadiusDamage (self, self.owner, cvar("g_balance_hlac_secondary_damage"), cvar("g_balance_hlac_secondary_edgedamage"), cvar("g_balance_hlac_secondary_radius"), world, cvar("g_balance_hlac_secondary_force"), self.projectiledeathtype, other, WEP_HLAC);
 
 	remove (self);
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -19,7 +19,7 @@
 	f = self.dmg_last - dmg_remaining_next;
 	self.dmg_last = dmg_remaining_next;
 
-	RadiusDamage (self, self.owner, self.dmg * f, self.dmg_edge * f, self.dmg_radius, self.owner, self.dmg_force * f, self.projectiledeathtype, world);
+	RadiusDamage (self, self.owner, self.dmg * f, self.dmg_edge * f, self.dmg_radius, self.owner, self.dmg_force * f, self.projectiledeathtype, world, WEP_HOOK);
 	self.projectiledeathtype |= HITTYPE_BOUNCE;
 	//RadiusDamage (self, world, self.dmg * f, self.dmg_edge * f, self.dmg_radius, world, self.dmg_force * f, self.projectiledeathtype, world);
 
@@ -105,7 +105,7 @@
 float w_hook(float req)
 {
 	float hooked_time_max, hooked_fuel;
-		
+
 	if (req == WR_AIM)
 	{
 		// ... sorry ...
@@ -123,7 +123,7 @@
 				if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 					self.ammo_fuel = self.ammo_fuel - cvar("g_balance_hook_primary_fuel");
 				self.hook_state |= HOOK_FIRING;
-				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hook_primary_animtime"), w_ready);				
+				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hook_primary_animtime"), w_ready);
 			}
 		}
 
@@ -148,13 +148,13 @@
 
 		if(self.hook && self.hook.state == 1)
 		{
-			hooked_time_max = cvar("g_balance_hook_primary_hooked_time_max");			
+			hooked_time_max = cvar("g_balance_hook_primary_hooked_time_max");
 			if (hooked_time_max > 0)
 			{
 				if ( time > self.hook_time_hooked + hooked_time_max )
 					self.hook_state |= HOOK_REMOVING;
 			}
-			
+
 			hooked_fuel = cvar("g_balance_hook_primary_hooked_fuel");
 			if (hooked_fuel > 0)
 			{
@@ -180,7 +180,7 @@
 		}
 		else
 		{
-			self.hook_time_hooked = time;				
+			self.hook_time_hooked = time;
 			self.hook_time_fueldecrease = time + cvar("g_balance_hook_primary_hooked_time_free");
 		}
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_laser.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_laser.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_laser.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -6,9 +6,9 @@
 
 	self.event_damage = SUB_Null;
 	if (self.dmg)
-		RadiusDamage (self, self.owner, cvar("g_balance_laser_secondary_damage"), cvar("g_balance_laser_secondary_edgedamage"), cvar("g_balance_laser_secondary_radius"), world, cvar("g_balance_laser_secondary_force"), self.projectiledeathtype, other);
+		RadiusDamage (self, self.owner, cvar("g_balance_laser_secondary_damage"), cvar("g_balance_laser_secondary_edgedamage"), cvar("g_balance_laser_secondary_radius"), world, cvar("g_balance_laser_secondary_force"), self.projectiledeathtype, other, WEP_LASER);
 	else
-		RadiusDamage (self, self.owner, cvar("g_balance_laser_primary_damage"), cvar("g_balance_laser_primary_edgedamage"), cvar("g_balance_laser_primary_radius"), world, cvar("g_balance_laser_primary_force"), self.projectiledeathtype, other);
+		RadiusDamage (self, self.owner, cvar("g_balance_laser_primary_damage"), cvar("g_balance_laser_primary_edgedamage"), cvar("g_balance_laser_primary_radius"), world, cvar("g_balance_laser_primary_force"), self.projectiledeathtype, other, WEP_LASER);
 
 	remove (self);
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -15,7 +15,7 @@
 	W_Rocket_Unregister();
 
 	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), self.projectiledeathtype, other);
+	RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), self.projectiledeathtype, other, WEP_ROCKET_LAUNCHER);
 
 	if (self.owner.weapon == WEP_ROCKET_LAUNCHER)
 	{

Deleted: branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1,481 +0,0 @@
-//.float speed; = switchweapon
-//.float proxytime; = autoswitch
-//.float tl; = wait
-
-void Seeker_Missile_Explode ()
-{
-	self.event_damage = SUB_Null;
-	RadiusDamage (self, self.owner, cvar("g_balance_seeker_missile_damage"), cvar("g_balance_seeker_missile_edgedamage"), cvar("g_balance_seeker_missile_radius"), world, cvar("g_balance_seeker_missile_force"), self.projectiledeathtype, other);
-
-	remove (self);
-}
-
-void Seeker_Missile_Touch()
-{
-	PROJECTILE_TOUCH;
-
-	Seeker_Missile_Explode();
-}
-
-void Seeker_Missile_Think()
-{
-	entity e;
-	vector desireddir, olddir, newdir, eorg;
-	float turnrate;
-	float dist;
-
-	if (time > self.cnt)
-		Seeker_Missile_Explode();
-
-	if (!self.switchweapon)
-		self.switchweapon = cvar("g_balance_seeker_missile_speed");
-
-	if ((self.switchweapon < cvar("g_balance_seeker_missile_speed_max")) && cvar("g_balance_seeker_missile_speed_accel"))
-		self.switchweapon = self.switchweapon * cvar("g_balance_seeker_missile_accel");
-
-	if (self.switchweapon > cvar("g_balance_seeker_missile_speed_max"))
-		self.switchweapon = self.switchweapon * cvar("g_balance_seeker_missile_decel");
-
-	if (self.enemy != world)
-		if (self.enemy.takedamage != DAMAGE_AIM || self.enemy.deadflag != DEAD_NO)
-			self.enemy = world;
-
-	if (self.enemy != world)
-	{
-		e               = self.enemy;
-		eorg            = 0.5 * (e.absmin + e.absmax);
-		turnrate        = cvar("g_balance_seeker_missile_turnrate");		    // how fast to turn
-		desireddir      = normalize(eorg - self.origin);
-		olddir          = normalize(self.velocity);				            // get my current direction
-		dist            = vlen(eorg - self.origin);
-
-		// Do evasive maneuvers for world objects? ( this should be a cpu hog. :P )
-		if (cvar("g_balance_seeker_missile_smart") && (dist > cvar("g_balance_seeker_missile_smart_mindist")))
-		{
-			// Is it a better idea (shorter distance) to trace to the target itself?
-			if ( vlen(self.origin + olddir * self.wait) < dist)
-				traceline(self.origin, self.origin + olddir * self.wait, FALSE, self);
-			else
-				traceline(self.origin, eorg, FALSE, self);
-
-			// Setup adaptive tracelength
-			self.wait = vlen(self.origin - trace_endpos);
-			if (self.wait < cvar("g_balance_seeker_missile_smart_trace_min")) self.wait = cvar("g_balance_seeker_missile_smart_trace_min");
-			if (self.wait > cvar("g_balance_seeker_missile_smart_trace_max")) self.wait = cvar("g_balance_seeker_missile_smart_trace_max");
-
-			// Calc how important it is that we turn and add this to the desierd (enemy) dir.
-			desireddir  = normalize(((trace_plane_normal * (1 - trace_fraction)) + (desireddir * trace_fraction)) * 0.5);
-		}
-
-		//newdir = normalize((olddir + desireddir * turnrate) * 0.5);// take the average of the 2 directions; not the best method but simple & easy
-		newdir = normalize(olddir + desireddir * turnrate);// take the average of the 2 directions; not the best method but simple & easy
-
-		self.velocity = newdir * self.switchweapon;			                    // make me fly in the new direction at my flight speed
-	}
-
-	// Proxy
-	if (cvar("g_balance_seeker_missile_proxy"))
-	{
-		if ( dist <= cvar("g_balance_seeker_missile_proxy_maxrange"))
-		{
-			if (self.autoswitch == 0)
-			{
-				self.autoswitch = time + cvar("g_balance_seeker_missile_proxy_delay");
-			}
-			else
-			{
-				if (self.autoswitch <= time)
-				{
-					Seeker_Missile_Explode();
-					self.autoswitch = 0;
-				}
-			}
-		}
-		else
-		{
-			if (self.autoswitch != 0)
-				self.autoswitch = 0;
-		}
-	}
-	///////////////
-
-	if (self.enemy.deadflag != DEAD_NO)
-	{
-		self.enemy = world;
-		self.cnt = time + 1 + (random() * 4);
-		self.nextthink = self.cnt;
-		return;
-	}
-
-	self.angles = vectoangles(self.velocity);			// turn model in the new flight direction
-	self.nextthink = time + 0.05;
-
-	UpdateCSQCProjectile(self);
-}
-
-
-
-void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-	float d;
-	d = damage;
-
-	if (self.health <= 0)
-		return;
-
-	if (self.owner == attacker)
-		d = d * 0.25;
-
-	self.health = self.health - d;
-
-	if (self.health <= 0)
-		W_PrepareExplosionByDamage(attacker, Seeker_Missile_Explode);
-}
-
-void Seeker_Missile_Animate()
-{
-	self.frame = self.frame +1;
-	self.nextthink = time + 0.05;
-
-	if (self.enemy != world)
-		if (self.enemy.takedamage != DAMAGE_AIM || self.enemy.deadflag != DEAD_NO)
-			self.enemy = world;
-
-	if(self.frame == 5)
-	{
-		self.think           = Seeker_Missile_Think;
-		self.nextthink       = time;// + cvar("g_balance_seeker_missile_activate_delay"); // cant dealy with csqc projectiles
-
-		if (cvar("g_balance_seeker_guided_proxy"))
-			self.movetype    = MOVETYPE_BOUNCEMISSILE;
-		else
-			self.movetype    = MOVETYPE_FLYMISSILE;
-	}
-
-	UpdateCSQCProjectile(self);
-}
-
-void Seeker_Fire_Missile(vector f_diff)
-{
-	local entity missile;
-
-	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
-		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_missile_ammo");
-
-	makevectors(self.v_angle);
-	W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/seeker_fire.wav", cvar("g_balance_seeker_missile_damage"));
-	w_shotorg += f_diff;
-	pointparticles(particleeffectnum("seeker_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
-
-	//self.detornator         = FALSE;
-
-	missile                 = spawn();
-	missile.owner           = self;
-	missile.classname       = "seeker_missile";
-	missile.bot_dodge       = TRUE;
-	missile.bot_dodgerating = cvar("g_balance_seeker_missile_damage");
-
-	missile.think           = Seeker_Missile_Animate;
-
-	//if (!cvar("g_balance_seeker_missile_proxy"))
-	missile.touch           = Seeker_Missile_Touch;
-
-	missile.event_damage    = Seeker_Missile_Damage;
-	missile.nextthink       = time;// + 0.2;// + cvar("g_balance_seeker_missile_activate_delay");
-	missile.cnt             = time + cvar("g_balance_seeker_missile_lifetime");
-	missile.enemy           = self.enemy;
-	missile.switchweapon           = cvar("g_balance_seeker_missile_speed");
-	missile.solid           = SOLID_BBOX;
-	missile.scale           = 2;
-	missile.takedamage          = DAMAGE_YES;
-	missile.health          = cvar("g_balance_seeker_missile_health");
-	missile.damageforcescale = cvar("g_balance_seeker_missile_damageforcescale");
-	missile.projectiledeathtype = WEP_SEEKER;
-
-	setorigin (missile, w_shotorg);
-	setsize (missile, '-4 -4 -4', '4 4 4');
-
-
-	missile.movetype    = MOVETYPE_FLYMISSILE;// MOVETYPE_TOSS;
-
-	missile.flags       = FL_PROJECTILE;
-
-	missile.velocity    = (w_shotdir + '0 0 0.45') * missile.switchweapon;
-	W_SetupProjectileVelocity(missile);
-
-	missile.switchweapon = vlen(missile.velocity);
-	missile.angles = vectoangles (missile.velocity);
-
-	CSQCProjectile(missile, FALSE, PROJECTILE_SEEKER, TRUE);
-}
-
-void Seeker_Vollycontroler_Think()
-{
-	float c;
-	entity oldself,oldenemy;
-	self.cnt = self.cnt - 1;
-
-	if ((self.owner.ammo_rockets < cvar("g_balance_seeker_missile_ammo")) || (self.cnt <= -1) || (self.owner.deadflag != DEAD_NO))
-	{
-		remove(self);
-		return;
-	}
-
-	self.nextthink = time + cvar("g_balance_seeker_missile_delay");
-
-	oldself = self;
-	self = self.owner;
-
-	oldenemy = self.enemy;
-	self.enemy = oldself.enemy;
-
-	c = mod(oldself.cnt, 4);
-	switch(c)
-	{
-		case 0:
-			Seeker_Fire_Missile('-1.25 -3.75 0');
-			break;
-		case 1:
-			Seeker_Fire_Missile('+1.25 -3.75 0');
-			break;
-		case 2:
-			Seeker_Fire_Missile('-1.25 +3.75 0');
-			break;
-		case 3:
-		default:
-			Seeker_Fire_Missile('+1.25 +3.75 0');
-			break;
-	}
-
-	self.enemy = oldenemy;
-	self = oldself;
-}
-
-void Seeker_Tag_Explode ()
-{
-	//if(other==self.owner)
-	//    return;
-	Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE, self);
-
-	remove (self);
-}
-
-void Seeker_Tag_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-	if (self.health <= 0)
-		return;
-	self.health = self.health - damage;
-	if (self.health <= 0)
-		Seeker_Tag_Explode();
-}
-
-void Seeker_Tag_Think()
-{
-	remove(self);
-	return;
-}
-
-void Seeker_Tag_Touch()
-{
-	vector dir;
-	vector org2;
-
-	dir     = normalize (self.owner.origin - self.origin);
-	org2    = findbetterlocation (self.origin, 8);
-
-	te_knightspike(org2);
-
-	self.event_damage = SUB_Null;
-	Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT, self);
-
-	if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
-	{
-		entity e;
-		e           = spawn();
-		e.cnt       = cvar("g_balance_seeker_missile_count");
-		e.owner     = self.owner;
-		e.enemy     = other;
-		e.think     = Seeker_Vollycontroler_Think;
-		e.nextthink = time;
-
-		//sprint(self.owner, "^1Target lock ^3[^7 ",other.netname, " ^3]^1 acquired - autofire activated.\n");
-		//sprint(other,"^1You are targeted!\n");
-
-		// stuffcmd(other,"play2 weapons/zany-alarm4.ogg\n");
-		// stuffcmd(self.owner, "play2 weapons/zany-lock4.ogg\n");
-	}
-
-	remove(self);
-	return;
-}
-
-
-
-void Seeker_Fire_Tag()
-{
-	local entity missile;
-	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
-		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_tag_ammo");
-
-	W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/tag_fire.wav", 0);
-
-	missile                 = spawn();
-	missile.owner           = self;
-	missile.classname       = "seeker_tag";
-	missile.bot_dodge       = TRUE;
-	missile.bot_dodgerating = 50;
-	missile.touch           = Seeker_Tag_Touch;
-	missile.think           = Seeker_Tag_Think;
-	missile.nextthink       = time + cvar("g_balance_seeker_tag_lifetime");
-	missile.movetype        = MOVETYPE_FLY;
-	missile.solid           = SOLID_BBOX;
-	missile.owner           = self;
-
-	missile.takedamage       = DAMAGE_YES;
-	missile.event_damage    = Seeker_Tag_Explode;
-	missile.health          = cvar("g_balance_seeker_tag_health");
-	missile.damageforcescale = cvar("g_balance_seeker_tag_damageforcescale");
-
-	setorigin (missile, w_shotorg);
-	setsize (missile, '-2 -2 -2', '2 2 2');
-
-	missile.flags       = FL_PROJECTILE;
-
-	missile.velocity    = w_shotdir  * cvar("g_balance_seeker_tag_speed");
-	missile.movetype    = MOVETYPE_FLY;
-	W_SetupProjectileVelocity(missile);
-	missile.angles = vectoangles (missile.velocity);
-
-	CSQCProjectile(missile, TRUE, PROJECTILE_TAG, FALSE); // has sound
-}
-
-
-void Seeker_Flac_Explode ()
-{
-	self.event_damage = SUB_Null;
-
-	RadiusDamage (self, self.owner, cvar("g_balance_seeker_flac_damage"), cvar("g_balance_seeker_flac_edgedamage"), cvar("g_balance_seeker_flac_radius"), world, cvar("g_balance_seeker_flac_force"), self.projectiledeathtype, other);
-
-	remove (self);
-}
-
-void Seeker_Flac_Touch()
-{
-	PROJECTILE_TOUCH;
-
-	Seeker_Flac_Explode();
-}
-
-void Seeker_Fire_Flac()
-{
-	local entity missile;
-	vector f_diff;
-	float c;
-
-	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
-		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_flac_ammo");
-
-	c = mod(self.bulletcounter, 4);
-	switch(c)
-	{
-		case 0:
-			f_diff = '-1.25 -3.75 0';
-			break;
-		case 1:
-			f_diff = '+1.25 -3.75 0';
-			break;
-		case 2:
-			f_diff = '-1.25 +3.75 0';
-			break;
-		case 3:
-		default:
-			f_diff = '+1.25 +3.75 0';
-			break;
-	}
-	W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/flac_fire.wav", cvar("g_balance_seeker_flac_damage"));
-	w_shotorg += f_diff;
-
-	pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
-
-	missile = spawn ();
-	missile.owner = missile.realowner = self;
-	missile.classname = "missile";
-	missile.bot_dodge = TRUE;
-	missile.bot_dodgerating = cvar("g_balance_seeker_flac_damage");
-	missile.touch = Seeker_Flac_Explode;
-	missile.use = Seeker_Flac_Explode;
-	missile.think = Seeker_Flac_Explode;
-	missile.nextthink = time + cvar("g_balance_seeker_flac_lifetime") + cvar("g_balance_seeker_flac_lifetime_rand");
-	missile.solid = SOLID_BBOX;
-	missile.scale = 0.4; // BUG: the model is too big
-	missile.projectiledeathtype = WEP_SEEKER;
-	setorigin (missile, w_shotorg);
-	setsize (missile, '-2 -2 -2', '2 2 2');
-	missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
-
-	missile.movetype = MOVETYPE_FLY;
-	w_shotdir = w_shotdir + '0 0 0.3';
-	missile.velocity    = (w_shotdir  + randomvec() * cvar("g_balance_seeker_flac_spread")) * cvar("g_balance_seeker_flac_speed");
-
-	W_SetupProjectileVelocity(missile);
-
-	missile.angles = vectoangles (missile.velocity);
-	missile.flags = FL_PROJECTILE;
-
-	CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE);
-}
-
-void spawnfunc_weapon_seeker (void)
-{
-	weapon_defaultspawnfunc(WEP_SEEKER);
-}
-
-float w_seeker(float req)
-{
-	if (req == WR_AIM)
-		self.BUTTON_ATCK = bot_aim(cvar("g_balance_seeker_tag_speed"), 0, 20, FALSE);
-
-	else if (req == WR_THINK)
-	{
-		if (self.BUTTON_ATCK)
-			if (weapon_prepareattack(0, cvar("g_balance_seeker_tag_refire")))
-			{
-				Seeker_Fire_Tag();
-				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_seeker_tag_animtime"), w_ready);
-			}
-
-		if (self.BUTTON_ATCK2)
-			if (weapon_prepareattack(1, cvar("g_balance_seeker_flac_refire")))
-			{
-				Seeker_Fire_Flac();
-				weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_seeker_flac_animtime"), w_ready);
-			}
-
-	}
-	else if (req == WR_PRECACHE)
-	{
-		precache_model ("models/weapons/g_seeker.md3");
-		precache_model ("models/weapons/v_seeker.md3");
-		precache_model ("models/weapons/h_seeker.dpm");
-		precache_sound ("weapons/tag_fire.wav");
-		precache_sound ("weapons/flac_fire.wav");
-		precache_sound ("weapons/seeker_fire.wav");
-	}
-	else if (req == WR_SETUP)
-		weapon_setup(WEP_SEEKER);
-	else if (req == WR_CHECKAMMO1)
-		return self.ammo_rockets >= cvar("g_balance_seeker_tag_ammo") + cvar("g_balance_seeker_missile_ammo");
-	else if (req == WR_CHECKAMMO2)
-		return self.ammo_rockets >= cvar("g_balance_seeker_flac_ammo");
-	else if (req == WR_SUICIDEMESSAGE)
-		w_deathtypestring = "played with tiny rockets";
-	else if (req == WR_KILLMESSAGE)
-	{
-		if(w_deathtype & HITTYPE_SECONDARY)
-			w_deathtypestring = "ran into #'s flac";
-		else
-			w_deathtypestring = "was tagged by";
-	}
-	return TRUE;
-};
-

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_tuba.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_tuba.qc	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_tuba.qc	2009-07-21 06:58:26 UTC (rev 7248)
@@ -37,7 +37,7 @@
 		note += 12;
 	if(hittype & HITTYPE_SECONDARY)
 		note += 7;
-	
+
 	// we support two kinds of tubas, those tuned in Eb and those tuned in C
 	// kind of tuba currently is player slot number, or team number if in
 	// teamplay
@@ -52,7 +52,7 @@
 		if(pl.clientcolors & 1)
 			note += 3;
 	}
-	
+
 	// total range of notes:
 	//                       0
 	//                 ***  ** ****
@@ -84,7 +84,7 @@
 		c = CHAN_WEAPON2;
 	}
 	sound(self, c, TUBA_NOTE(Tuba_GetNote(self, hittype)), bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), cvar("g_balance_tuba_attenuation"));
-	RadiusDamage(self, self, cvar("g_balance_tuba_damage"), cvar("g_balance_tuba_edgedamage"), cvar("g_balance_tuba_radius"), world, cvar("g_balance_tuba_force"), hittype | WEP_TUBA, world);
+	RadiusDamage(self, self, cvar("g_balance_tuba_damage"), cvar("g_balance_tuba_edgedamage"), cvar("g_balance_tuba_radius"), world, cvar("g_balance_tuba_force"), hittype | WEP_TUBA, world, WEP_TUBA);
 
 	o = gettaginfo(self.exteriorweaponentity, 0);
 	pointparticles(particleeffectnum("smoke_ring"), o + v_up * 45 + v_right * -6 + v_forward * 8, v_up * 100, 1);

Deleted: branches/nexuiz-2.0/data/sound/weapons/flac_fire.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/flacexp1.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/flacexp2.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/flacexp3.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/seeker_fire.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/seekerexp1.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/seekerexp2.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/seekerexp3.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/tag_fire.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/tag_impact.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/tag_rocket_fly.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/tagexp1.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/tagexp2.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/sound/weapons/tagexp3.ogg
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/textures/seeker.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/textures/seeker_gloss.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/textures/seeker_glow.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/textures/seeker_norm.tga
===================================================================
(Binary files differ)

Deleted: branches/nexuiz-2.0/data/textures/seeker_pants.tga
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/weapons.cfg
===================================================================
--- branches/nexuiz-2.0/data/weapons.cfg	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/weapons.cfg	2009-07-21 06:58:26 UTC (rev 7248)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit weaponsHavoc.cfg too.
 
-set cvar_check_weapons 4f7b4c1e2feeef4988b02a93ff35a2ca
+set cvar_check_weapons a7ca57b891d66754b856e24e5c1745e3
 
 // NOTE: this only replaces weapons on the map
 // use g_start_weapon_* to also replace the on-startup weapons!
@@ -21,7 +21,6 @@
 set g_weaponreplace_porto ""
 set g_weaponreplace_minstanex ""
 set g_weaponreplace_hook ""
-set g_weaponreplace_seeker ""
 set g_weaponreplace_hlac ""
 set g_weaponreplace_campingrifle ""
 set g_weaponreplace_tuba ""
@@ -40,7 +39,6 @@
 set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
-set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_campingrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_ammo_shells 40
@@ -337,65 +335,6 @@
 set g_balance_hlac_secondary_ammo 10
 set g_balance_hlac_secondary_shots 6
 
-
-// TAG Seeker
-set g_balance_seeker_tag_speed   9000
-set g_balance_seeker_tag_ammo    1
-set g_balance_seeker_tag_animtime 0.3
-set g_balance_seeker_tag_refire  0.7
-set g_balance_seeker_tag_health  5
-set g_balance_seeker_tag_damageforcescale  4
-set g_balance_seeker_tag_lifetime  15
-
-set g_balance_seeker_missile_delay 0.25
-//set g_balance_seeker_missile_activate_delay 0.1
-
-set g_balance_seeker_missile_speed        700
-set g_balance_seeker_missile_accel		1.05
-set g_balance_seeker_missile_decel		0.9
-
-set g_balance_seeker_missile_speed_max    1250
-set g_balance_seeker_missile_turnrate     0.65
-
-set g_balance_seeker_missile_damage       40
-set g_balance_seeker_missile_edgedamage   10
-set g_balance_seeker_missile_radius       80
-set g_balance_seeker_missile_force        250
-
-set g_balance_seeker_missile_count		    4
-set g_balance_seeker_missile_lifetime 	    15
-set g_balance_seeker_missile_refire           0.5
-set g_balance_seeker_missile_animtime 	    0.3
-set g_balance_seeker_missile_ammo             2
-set g_balance_seeker_missile_health  5
-set g_balance_seeker_missile_damageforcescale  4
-
-set g_balance_seeker_missile_proxy            0
-set g_balance_seeker_missile_proxy_maxrange   45
-set g_balance_seeker_missile_proxy_delay      0.2
-
-// World avoidance
-set g_balance_seeker_missile_smart             1
-set g_balance_seeker_missile_smart_mindist     800
-set g_balance_seeker_missile_smart_trace_max   2500
-set g_balance_seeker_missile_smart_trace_min   1000
-// End new seeker
-
-
-set g_balance_seeker_flac_lifetime      0.1
-set g_balance_seeker_flac_lifetime_rand 0.05
-set g_balance_seeker_flac_speed         3000
-set g_balance_seeker_flac_spread	    0.4
-
-set g_balance_seeker_flac_damage       15
-set g_balance_seeker_flac_edgedamage   10
-set g_balance_seeker_flac_radius       100
-set g_balance_seeker_flac_force        50
-
-set g_balance_seeker_flac_refire       0.1
-set g_balance_seeker_flac_animtime     0.1
-set g_balance_seeker_flac_ammo         0.5
-
 set g_balance_campingrifle_magazinecapacity 8
 set g_balance_campingrifle_reloadtime 2 // matches reload anim
 set g_balance_campingrifle_auto_reload_after_changing_weapons 0

Modified: branches/nexuiz-2.0/data/weaponsHavoc.cfg
===================================================================
--- branches/nexuiz-2.0/data/weaponsHavoc.cfg	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/weaponsHavoc.cfg	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1,4 +1,4 @@
-set cvar_check_weapons 4f7b4c1e2feeef4988b02a93ff35a2ca
+set cvar_check_weapons a7ca57b891d66754b856e24e5c1745e3
 
 // NOTE: this only replaces weapons on the map
 // use g_start_weapon_* to also replace the on-startup weapons!
@@ -16,7 +16,6 @@
 set g_weaponreplace_porto ""
 set g_weaponreplace_minstanex ""
 set g_weaponreplace_hook ""
-set g_weaponreplace_seeker "hagar"
 set g_weaponreplace_hlac ""
 set g_weaponreplace_campingrifle ""
 set g_weaponreplace_tuba ""
@@ -35,7 +34,6 @@
 set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
-set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_campingrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default"
 set g_start_ammo_shells 60
@@ -332,65 +330,6 @@
 set g_balance_hlac_secondary_ammo 10
 set g_balance_hlac_secondary_shots 5
 
-
-// TAG Seeker
-set g_balance_seeker_tag_speed   9000
-set g_balance_seeker_tag_ammo    1
-set g_balance_seeker_tag_animtime 0.3
-set g_balance_seeker_tag_refire  0.7
-set g_balance_seeker_tag_health  5
-set g_balance_seeker_tag_damageforcescale  4
-set g_balance_seeker_tag_lifetime  15
-
-set g_balance_seeker_missile_delay 0.25
-//set g_balance_seeker_missile_activate_delay 0.1
-
-set g_balance_seeker_missile_speed        700
-set g_balance_seeker_missile_accel		1.05
-set g_balance_seeker_missile_decel		0.9
-
-set g_balance_seeker_missile_speed_max    1250
-set g_balance_seeker_missile_turnrate     0.65
-
-set g_balance_seeker_missile_damage       40
-set g_balance_seeker_missile_edgedamage   10
-set g_balance_seeker_missile_radius       80
-set g_balance_seeker_missile_force        250
-
-set g_balance_seeker_missile_count		    4
-set g_balance_seeker_missile_lifetime 	    15
-set g_balance_seeker_missile_refire           0.5
-set g_balance_seeker_missile_animtime 	    0.3
-set g_balance_seeker_missile_ammo             2
-set g_balance_seeker_missile_health  5
-set g_balance_seeker_missile_damageforcescale  4
-
-set g_balance_seeker_missile_proxy            0
-set g_balance_seeker_missile_proxy_maxrange   45
-set g_balance_seeker_missile_proxy_delay      0.2
-
-// World avoidance
-set g_balance_seeker_missile_smart             1
-set g_balance_seeker_missile_smart_mindist     800
-set g_balance_seeker_missile_smart_trace_max   2500
-set g_balance_seeker_missile_smart_trace_min   1000
-// End new seeker
-
-
-set g_balance_seeker_flac_lifetime      0.1
-set g_balance_seeker_flac_lifetime_rand 0.05
-set g_balance_seeker_flac_speed         3000
-set g_balance_seeker_flac_spread	    0.4
-
-set g_balance_seeker_flac_damage       15
-set g_balance_seeker_flac_edgedamage   10
-set g_balance_seeker_flac_radius       100
-set g_balance_seeker_flac_force        50
-
-set g_balance_seeker_flac_refire       0.1
-set g_balance_seeker_flac_animtime     0.1
-set g_balance_seeker_flac_ammo         0.5
-
 set g_balance_campingrifle_magazinecapacity 5
 set g_balance_campingrifle_reloadtime 1.5
 set g_balance_campingrifle_auto_reload_after_changing_weapons 1

Modified: branches/nexuiz-2.0/data/weaponsNexrun.cfg
===================================================================
--- branches/nexuiz-2.0/data/weaponsNexrun.cfg	2009-07-21 06:56:12 UTC (rev 7247)
+++ branches/nexuiz-2.0/data/weaponsNexrun.cfg	2009-07-21 06:58:26 UTC (rev 7248)
@@ -1,39 +1,11 @@
-// weapon settings
+// weapon settings for nexrun CTS, not recommended for DM
 g_projectiles_newton_style 0
 g_shootfromcenter 1
 
 g_balance_grenadelauncher_secondary_speed_up 0
-g_balance_grenadelauncher_secondary_force 260
-g_balance_grenadelauncher_secondary_speed 800 
-g_balance_grenadelauncher_secondary_damage 100
-g_balance_grenadelauncher_secondary_edgedamage 100
-g_balance_grenadelauncher_secondary_radius 150
-g_balance_grenadelauncher_secondary_lifetime 2.5
-g_balance_grenadelauncher_secondary_refire 0.8
-g_balance_grenadelauncher_secondary_animtime 0.3
-g_balance_grenadelauncher_secondary_ammo 1
+g_balance_grenadelauncher_secondary_speed 0 
 
-g_balance_hagar_primary_ammo 1
-g_balance_hagar_primary_damage 20
-g_balance_hagar_primary_edgedamage 15
-g_balance_hagar_primary_force 43
-g_balance_hagar_primary_lifetime 10
-g_balance_hagar_primary_radius 20
-g_balance_hagar_primary_refire 0.10
-g_balance_hagar_primary_speed 2000
-g_balance_hagar_primary_spread 0
-
-g_balance_rocketlauncher_damage 100
-g_balance_rocketlauncher_edgedamage 100
-g_balance_rocketlauncher_force 270
-g_balance_rocketlauncher_radius 150
 g_balance_rocketlauncher_speed 1000
-g_balance_rocketlauncher_speedaccel 0
-g_balance_rocketlauncher_speedstart 1000
-g_balance_rocketlauncher_lifetime 30
-g_balance_rocketlauncher_refire 0.8
-g_balance_rocketlauncher_animtime 0.3
-g_balance_rocketlauncher_ammo 1
 
 g_balance_powerup_invincible_takedamage 0
 g_balance_powerup_invincible_time 999

Copied: branches/nexuiz-2.0/misc/mediasource/hud/nexuiz-grunge-gpl-brushes.zip (from rev 7245, trunk/misc/mediasource/hud/nexuiz-grunge-gpl-brushes.zip)
===================================================================
(Binary files differ)



More information about the nexuiz-commits mailing list