[nexuiz-commits] r6617 - in branches/nexuiz-2.0: . data data/qcsrc/client data/qcsrc/common data/qcsrc/menu data/qcsrc/menu/item data/qcsrc/menu/nexuiz data/qcsrc/server data/qcsrc/server/tturrets/units server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Apr 29 11:52:30 EDT 2009


Author: div0
Date: 2009-04-29 11:52:29 -0400 (Wed, 29 Apr 2009)
New Revision: 6617

Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/branch-manager
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc
   branches/nexuiz-2.0/data/qcsrc/client/prandom.qc
   branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc
   branches/nexuiz-2.0/data/qcsrc/common/util.qc
   branches/nexuiz-2.0/data/qcsrc/menu/item/inputbox.c
   branches/nexuiz-2.0/data/qcsrc/menu/menu.qc
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
   branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
   branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
   branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
   branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
   branches/nexuiz-2.0/server/server.cfg
Log:
r6574 | tzork | 2009-04-23 14:56:15 +0200 (Thu, 23 Apr 2009) | 1 line
Added steerlib_beamsteer
r6575 | tzork | 2009-04-23 15:45:02 +0200 (Thu, 23 Apr 2009) | 1 line
add verbstack_popfifo & verbstack_pullfifo
r6576 | tzork | 2009-04-23 16:18:27 +0200 (Thu, 23 Apr 2009) | 2 lines
make verb owner a param of verbstack_push.
update ewheel and walker accordingly + some minor tweaks to these two.
r6609 | div0 | 2009-04-28 16:33:13 +0200 (Tue, 28 Apr 2009) | 2 lines
improve projectiles when sys_ticrate is 0
r6610 | div0 | 2009-04-28 17:10:38 +0200 (Tue, 28 Apr 2009) | 2 lines
wait longer till disorienting
r6611 | esteel | 2009-04-28 17:51:01 +0200 (Tue, 28 Apr 2009) | 2 lines
renamed the !@#$% player_fbskin_* and sv_defaultplayer_fbskin_* to cl_fbskin_* and sv_fbskin_*.. should remove that WTF feeling users get when they hear about those votes\
also synced server/server.cfg with defaultNexuiz.cfg.. added movetoteam_auto
r6612 | div0 | 2009-04-28 19:47:52 +0200 (Tue, 28 Apr 2009) | 2 lines
try working around fteqcc -r3178 bug
r6613 | div0 | 2009-04-28 19:56:50 +0200 (Tue, 28 Apr 2009) | 2 lines
fix a typo in walker code
r6614 | div0 | 2009-04-28 20:25:48 +0200 (Tue, 28 Apr 2009) | 2 lines
fix debris bug in func_breakable
r6615 | div0 | 2009-04-28 20:32:39 +0200 (Tue, 28 Apr 2009) | 2 lines
fix two more obviously buggy places
r6616 | esteel | 2009-04-29 11:42:21 +0200 (Wed, 29 Apr 2009) | 2 lines
added net_address to server.cfg and some minor changes


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/.patchsets	2009-04-29 15:52:29 UTC (rev 6617)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6536,6541-6549,6552-6567,6572-6572,6577-6577,6580-6582,6585-6587,6592-6593,6598-6598,6603-6604,6607-6607
+revisions_applied = 1-6536,6541-6549,6552-6567,6572-6577,6580-6582,6585-6587,6592-6593,6598-6598,6603-6604,6607-6616

Modified: branches/nexuiz-2.0/branch-manager
===================================================================
--- branches/nexuiz-2.0/branch-manager	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/branch-manager	2009-04-29 15:52:29 UTC (rev 6617)
@@ -23,6 +23,20 @@
 	return $ret;
 }
 
+sub StatusOf($@)
+{
+	my ($cmd, @args) = @_;
+	$cmd =~ s/#(\d)/"\$ARG$1"/g;
+	$ENV{"ARG$_"} = $args[$_-1]
+		for 1.. at args;
+	my $ret = system $cmd;
+
+	$ENV{"ARG$_"} = ''
+		for 1.. at args;
+
+	return $ret;
+}
+
 my %conf = 
 (
 	master => '',
@@ -264,7 +278,7 @@
 	LoadSettings();
 	AddPatch $first, $last;
 
-	print OutputOf 'svn merge -r#1:#2 #3', ($first - 1), $last, $conf{master};
+	StatusOf 'svn merge -r#1:#2 #3', ($first - 1), $last, $conf{master};
 	print "You may also want to run $0 unmerged to fill possible revision holes\n";
 	print "Make sure there are no conflicts, then run $0 commit\n";
 	print "To abort, use $0 revert\n";

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-04-29 15:52:29 UTC (rev 6617)
@@ -974,14 +974,14 @@
 alias singleplayer_levellist "set scmenu_campaign_dump 1; togglemenu; wait; togglemenu"
 
 // Green's fullbright skins
-alias player_fbskin_green "playermodel models/player/nexus.zym; playerskin 6; color 3 3"
-alias player_fbskin_red "playermodel models/player/nexus.zym; playerskin 6; color 4 4"
-alias player_fbskin_orange "playermodel models/player/nexus.zym; playerskin 6; color 14 14"
-alias player_fbskin_off "playermodel models/player/nexus.zym; playerskin 0"
-alias sv_defaultplayer_fbskin_green "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 51"
-alias sv_defaultplayer_fbskin_red "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 68"
-alias sv_defaultplayer_fbskin_orange "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 238"
-alias sv_defaultplayer_fbskin_off "g_fullbrightplayers 0; sv_defaultcharacter 0; sv_defaultplayerskin 0; sv_defaultplayercolors \"\""
+alias cl_fbskin_green "playermodel models/player/nexus.zym; playerskin 6; color 3 3"
+alias cl_fbskin_red "playermodel models/player/nexus.zym; playerskin 6; color 4 4"
+alias cl_fbskin_orange "playermodel models/player/nexus.zym; playerskin 6; color 14 14"
+alias cl_fbskin_off "playermodel models/player/nexus.zym; playerskin 0"
+alias sv_fbskin_green "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 51"
+alias sv_fbskin_red "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 68"
+alias sv_fbskin_orange "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 238"
+alias sv_fbskin_off "g_fullbrightplayers 0; sv_defaultcharacter 0; sv_defaultplayerskin 0; sv_defaultplayercolors \"\""
 
 seta sv_servermodelsonly 1
 
@@ -1030,7 +1030,7 @@
 set g_nick_flood_timeout 120 "time after which nick flood protection resets (set to 0 to disable nick flood checking)"
 set g_nick_flood_penalty 0.5 "duration of the nick flood penalty"
 set g_nick_flood_penalty_yellow 3 "number of changes to allow before warning and movement blocking"
-set g_nick_flood_penalty_red 10 "number of changes to allow before totally disorienting the player"
+set g_nick_flood_penalty_red 30 "number of changes to allow before totally disorienting the player"
 
 set g_waypointsprite_normdistance 512
 set g_waypointsprite_minscale 1

Modified: branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/client/movetypes.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -327,6 +327,9 @@
 
 	dt = time - self.move_time;
 
+	if(ticrate <= 0)
+		matchserver = 0;
+
 	if(matchserver)
 	{
 		movedt = ticrate;

Modified: branches/nexuiz-2.0/data/qcsrc/client/prandom.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/prandom.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/client/prandom.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -5,7 +5,10 @@
 float prandom()
 {
 	float c;
-	c = crc16(FALSE, strcat(ftos(prandom_seed), ftos(prandom_seed + 3.1415926535)));
+	string s1, s2;
+	s1 = ftos(prandom_seed);
+	s2 = ftos(prandom_seed + 3.1415926535);
+	c = crc16(FALSE, strcat(s1, s2)); // fteqcc sucks
 	prandom_seed = c;
 
 #ifdef USE_PRANDOM_DEBUG

Modified: branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/client/teamradar.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -18,7 +18,11 @@
 
 float vlen_minnorm2d(vector v)
 {
-	return min(max(v_x, -v_x), max(v_y, -v_y));
+	float a, b;
+	a = max(v_x, -v_x);
+	b = max(v_y, -v_y);
+	return min(a, b);
+	// return min(max(v_x, -v_x), max(v_y, -v_y)); // fteqcc sucks
 }
 
 vector teamradar_3dcoord_to_texcoord(vector in)

Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -883,10 +883,15 @@
 void cvar_settemp_restore()
 {
 	// undo what cvar_settemp did
+	string s1, s2;
 	float n, i;
 	n = tokenize_sane(cvar_string("settemp_list"));
 	for(i = 0; i < n - 3; i += 3)
-		cvar_set(argv(i + 1), cvar_string(argv(i + 2)));
+	{
+		s1 = argv(i + 1);
+		s2 = argv(i + 2);
+		cvar_set(s1, s2); // fteqcc sucks
+	}
 	cvar_set("settemp_list", "0");
 }
 #endif

Modified: branches/nexuiz-2.0/data/qcsrc/menu/item/inputbox.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/item/inputbox.c	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/menu/item/inputbox.c	2009-04-29 15:52:29 UTC (rev 6617)
@@ -87,6 +87,7 @@
 
 float keyDownInputBox(entity me, float key, float ascii, float shift)
 {
+	string s1, s2;
 	me.lastChangeTime = time;
 	me.dragScrollTimer = time;
 	if(ascii >= 32 && ascii != 127)
@@ -112,14 +113,22 @@
 			if(me.cursorPos > 0)
 			{
 				me.cursorPos -= 1;
-				me.setText(me, strcat(substring(me.text, 0, me.cursorPos), substring(me.text, me.cursorPos + 1, strlen(me.text) - me.cursorPos - 1)));
+				s1 = substring(me.text, 0, me.cursorPos);
+				s2 = substring(me.text, me.cursorPos + 1, strlen(me.text) - me.cursorPos - 1);
+				me.setText(me, strcat(s1, s2)); // fteqcc sucks
 			}
 			return 1;
 		case K_DEL:
 			if(shift & S_CTRL)
+			{
 				me.setText(me, "");
+			}
 			else
-				me.setText(me, strcat(substring(me.text, 0, me.cursorPos), substring(me.text, me.cursorPos + 1, strlen(me.text) - me.cursorPos - 1)));
+			{
+				s1 = substring(me.text, 0, me.cursorPos);
+				s2 = substring(me.text, me.cursorPos + 1, strlen(me.text) - me.cursorPos - 1);
+				me.setText(me, strcat(s1, s2)); // fteqcc sucks
+			}
 			return 1;
 	}
 	return 0;

Modified: branches/nexuiz-2.0/data/qcsrc/menu/menu.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/menu.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/menu/menu.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -54,7 +54,7 @@
 void() m_init_delayed =
 {
 	float fh, glob, n, i;
-	string s;
+	string s, s1, s2;
 
 	dprint_load();
 
@@ -93,7 +93,11 @@
 			continue;
 		n = tokenize_sane(s);
 		if(n >= 2)
-			Skin_ApplySetting(argv(0), substring(s, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)));
+		{
+			s1 = argv(0);
+			s2 = substring(s, argv_start_index(1), argv_end_index(-1) - argv_start_index(1));
+			Skin_ApplySetting(s1, s2); // fteqcc sucks
+		}
 	}
 	fclose(fh);
 

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/serverlist.c	2009-04-29 15:52:29 UTC (rev 6617)
@@ -104,7 +104,7 @@
 
 void ToggleFavorite(string srv)
 {
-	string s;
+	string s, s1, s2;
 	float o;
 	s = cvar_string("net_slist_favorites");
 	o = strstrofs(strcat(" ", s, " "), strcat(" ", srv, " "), 0);
@@ -114,9 +114,9 @@
 	}
 	else
 	{
-		cvar_set("net_slist_favorites", strcat(
-					substring(s, 0, o - 1), substring(s, o + strlen(srv), strlen(s) - o - strlen(srv))
-					));
+		s1 = substring(s, 0, o - 1);
+		s2 = substring(s, o + strlen(srv), strlen(s) - o - strlen(srv));
+		cvar_set("net_slist_favorites", strcat(s1, s2)); // fteqcc sucks
 	}
 	resorthostcache();
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -2072,7 +2072,11 @@
 		if(dot2 == -1)
 			return 1;
 		else
-			return vercmp_recursive(substring(v1, dot1 + 1, 999), substring(v2, dot2 + 1, 999));
+		{
+			s1 = substring(v1, dot1 + 1, -1);
+			s2 = substring(v2, dot2 + 1, -1);
+			return vercmp_recursive(s1, s2); // fteqcc sucks
+		}
 }
 
 float vercmp(string v1, string v2)

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -879,16 +879,18 @@
 void PrecacheGlobalSound(string samplestring)
 {
 	float n, i;
+	string s;
 	tokenize_sane(samplestring);
+	s = argv(0);
 	n = stof(argv(1));
 	if(n > 0)
 	{
 		for(i = 1; i <= n; ++i)
-			precache_sound(strcat(argv(0), ftos(i), ".wav"));
+			precache_sound(strcat(s, ftos(i), ".wav")); // fteqcc sucks
 	}
 	else
 	{
-		precache_sound(strcat(argv(0), ".wav"));
+		precache_sound(strcat(s, ".wav"));
 	}
 }
 
@@ -969,16 +971,18 @@
 {
 	float n;
 	float tauntrand;
+	string s;
 
 	if(sample == "")
 		return;
 
 	tokenize_sane(sample);
+	s = argv(0);
 	n = stof(argv(1));
 	if(n > 0)
-		sample = strcat(argv(0), ftos(floor(random() * n + 1)), ".wav"); // randomization
+		sample = strcat(s, ftos(floor(random() * n + 1)), ".wav"); // randomization, fteqcc sucks
 	else
-		sample = strcat(argv(0), ".wav"); // randomization
+		sample = strcat(s, ".wav"); // randomization
 	
 	switch(voicetype)
 	{

Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -101,7 +101,7 @@
 float readyrestart_happened;
 .float lms_spectate_warning;
 void SV_ParseClientCommand(string s) {
-	local string cmd;
+	local string cmd, s1, s2;
 	local float tokens, f, effectnum;
 	local vector start, end;
 
@@ -259,7 +259,11 @@
 		sprint(self, records_reply);
 	} else if(argv(0) == "voice") {
 		if(tokens >= 3)
-			VoiceMessage(argv(1), substring(s, argv_start_index(2), argv_end_index(-1) - argv_start_index(2)));
+		{
+			s1 = argv(1);
+			s2 = substring(s, argv_start_index(2), argv_end_index(-1) - argv_start_index(2));
+			VoiceMessage(s1, s2); // fteqcc sucks
+		}
 		else
 			VoiceMessage(argv(1), "");
 	} else if(argv(0) == "say") {

Modified: branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/func_breakable.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -34,10 +34,10 @@
 	local	entity dbr;
 
 	dbr = spawn();
-	dbr.origin = self.origin + self.absmin
+	setorigin(dbr, self.absmin
 	           + '1 0 0' * random() * (self.absmax_x - self.absmin_x)
 	           + '0 1 0' * random() * (self.absmax_y - self.absmin_y)
-	           + '0 0 1' * random() * (self.absmax_z - self.absmin_z);
+	           + '0 0 1' * random() * (self.absmax_z - self.absmin_z));
 	setmodel (dbr, debrisname );
 	dbr.movetype = MOVETYPE_BOUNCE;
 	dbr.solid = SOLID_NOT;
@@ -126,6 +126,11 @@
 
 	activator = self.owner;
 
+	// now throw around the debris
+	n = tokenize_sane(self.debris);
+	for(i = 0; i < n; ++i)
+		LaunchDebris(argv(i));
+
 	func_breakable_destroyed();
 
 	if(self.noise)
@@ -134,11 +139,6 @@
 	if(self.dmg)
 		RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world);
 
-	// now throw around the debris
-	n = tokenize_sane(self.debris);
-	for(i = 0; i < n; ++i)
-		LaunchDebris(argv(i));
-
 	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/steerlib.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -298,12 +298,147 @@
     frontwish = v_forward * f_front;
 
     return normalize(leftwish + rightwish + frontwish);
+}
 
+float beamsweep_badpoint(vector point,float waterok)
+{
+    float pc,pc2;
+
+    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
+        return 1;
+
+    pc  = pointcontents(point);
+    pc2 = pointcontents(point - '0 0 1');
+
+    switch(pc)
+    {
+        case CONTENT_SOLID: break;
+        case CONTENT_SLIME: break;
+        case CONTENT_LAVA:  break;
+
+        case CONTENT_SKY:
+            return 1;
+
+        case CONTENT_EMPTY:
+            if (pc2 == CONTENT_SOLID)
+                return 0;
+
+            if (pc2 == CONTENT_WATER)
+                if(waterok)
+                    return 0;
+
+            break;
+
+        case CONTENT_WATER:
+            if(waterok)
+                return 0;
+
+            break;
+    }
+
+    return 1;
 }
 
+float beamsweep(vector from, vector dir,float length, float step,float step_up, float step_down)
+{
+    float i;
+    vector a,b,u,d;
+
+    u = '0 0 1' * step_up;
+    d = '0 0 1' * step_down;
+
+    traceline(from + u, from - d,MOVE_NORMAL,self);
+    if(trace_fraction == 1.0)
+        return 0;
+
+    if(beamsweep_badpoint(trace_endpos,0))
+        return 0;
+
+    a = trace_endpos;
+    for(i = 0; i < length; i += step)
+    {
+
+        b = a + dir * step;
+        tracebox(a + u,'-4 -4 -4','4 4 4', b + u,MOVE_NORMAL,self);
+        if(trace_fraction != 1.0)
+            return i / length;
+
+        traceline(b + u, b - d,MOVE_NORMAL,self);
+        if(trace_fraction == 1.0)
+            return i / length;
+
+        if(beamsweep_badpoint(trace_endpos,0))
+            return i / length;
+
+        //te_lightning1(world,a+u,b+u);
+        //te_lightning1(world,b+u,b-d);
+
+        a = trace_endpos;
+    }
+
+    return 1;
+}
+
+vector steerlib_beamsteer(vector dir, float length, float step, float step_up, float step_down)
+{
+    float bm_forward, bm_right, bm_left,p;
+    vector vr,vl;
+
+    dir_z *= 0.15;
+    vr = vectoangles(dir);
+    vr_x *= -1;
+
+    makevectors(vr);
+    bm_forward = beamsweep(self.origin, v_forward, length, step, step_up, step_down);
+
+    vr = normalize(v_forward + v_right * 0.125);
+    vl = normalize(v_forward - v_right * 0.125);
+
+    bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
+    bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
+
+
+    p = bm_left + bm_right;
+    if(p == 2)
+    {
+        //te_lightning1(self,self.origin + '0 0 32',self.origin + '0 0 32' + vr * length);
+        //te_lightning1(self.tur_head,self.origin + '0 0 32',self.origin + '0 0 32' + vl * length);
+
+        return v_forward;
+    }
+
+    p = 2 - p;
+
+    vr = normalize(v_forward + v_right * p);
+    vl = normalize(v_forward - v_right * p);
+    bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
+    bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
+
+
+    if(bm_left + bm_right < 0.15)
+    {
+        vr = normalize((v_forward*-1) + v_right * 0.75);
+        vl = normalize((v_forward*-1) - v_right * 0.75);
+
+        bm_right = beamsweep(self.origin, vr, length, step, step_up, step_down);
+        bm_left  = beamsweep(self.origin, vl, length, step, step_up, step_down);
+    }
+
+    //te_lightning1(self,self.origin + '0 0 32',self.origin + '0 0 32' + vr * length);
+    //te_lightning1(self.tur_head,self.origin + '0 0 32',self.origin + '0 0 32' + vl * length);
+
+    bm_forward *= bm_forward;
+    bm_right   *= bm_right;
+    bm_left    *= bm_left;
+
+    vr = vr * bm_right;
+    vl = vl * bm_left;
+
+    return normalize(vr + vl);
+
+}
 
 
-
 //////////////////////////////////////////////
 //     Testting                             //
 // Everything below this point is a mess :D //
@@ -486,3 +621,4 @@
 #endif
 
 
+

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-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -61,6 +61,34 @@
 
 }
 
+float ewheel_moveverb_roam(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if (!self.enemy)
+            return verb.verb_static_value;
+
+        return VS_CALL_NO;
+
+    case VCM_DO:
+        self.angles_z = 0;
+        makevectors(self.angles);
+        self.moveto = v_forward * 128;
+        self.steerto = steerlib_beamsteer(v_forward,1024,32,36,128);
+        self.frame += 1;
+        movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
+
+        return VS_CALL_YES_DOING;
+
+    case VCM_REMOVE:
+
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
 float ewheel_moveverb_path(float eval)
 {
     switch (eval)
@@ -79,7 +107,7 @@
         else
         {
             // Are we close enougth to a path node to switch to the next?
-            if (vlen(self.origin  - self.pathcurrent.origin) < 32)
+            if (vlen(self.origin  - self.pathcurrent.origin) < 64)
                 if (self.pathcurrent.path_next == world)
                 {
                     // Path endpoint reached
@@ -119,7 +147,7 @@
             self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
 
             self.frame += 1;
-            movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
+            movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_fast"),0.4);
 
             return VS_CALL_YES_DOING;
         }
@@ -157,9 +185,12 @@
 
     case VCM_DO:
 
-        self.moveto  = self.enemy.origin;
         self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
+        self.steerto = steerlib_beamsteer(self.steerto,1024,64,68,256);
+        self.moveto  = self.origin + self.steerto * 128;
 
+        makevectors(self.angles);
+
         if (self.tur_dist_enemy > self.target_range_optimal)
         {
             if ( self.tur_head.spawnshieldtime < 1 )
@@ -169,9 +200,10 @@
             }
             else if (self.tur_head.spawnshieldtime < 2)
             {
+
                 self.frame += 1;
                 movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
-            }
+           }
             else
             {
                 self.frame += 1;
@@ -266,7 +298,7 @@
     real_angle = shortangle_vxy(real_angle,self.tur_head.angles);
 
     self.tur_head.spawnshieldtime = fabs(real_angle_y);
-    real_angle_y  = bound(self.tur_head.aim_speed * -1,real_angle_y,self.tur_head.aim_speed);
+    real_angle_y  = bound(-self.tur_head.aim_speed,real_angle_y,self.tur_head.aim_speed);
     self.angles_y = (self.angles_y + real_angle_y);
 
     // Simulate banking
@@ -326,6 +358,59 @@
 
 }
 
+/*
+float test_stack_1(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        dprint("test_stack_1\n");
+        return VS_CALL_REMOVE;
+    }
+
+    return VS_CALL_REMOVE;
+}
+
+float test_stack_2(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        dprint("test_stack_2\n");
+        return VS_CALL_REMOVE;
+    }
+
+    return VS_CALL_REMOVE;
+}
+
+float ccnntt;
+float test_stack_3(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        dprint("test_stack_3\n");
+        ++ccnntt;
+        if(ccnntt > 3)
+            return VS_CALL_REMOVE;
+        else
+            return VS_CALL_YES_DONE;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+.entity test_stack;
+*/
 void turret_ewheel_dinit()
 {
     entity e;
@@ -361,7 +446,7 @@
     }
 
     self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS;
     self.damage_flags          |= TFL_DMG_DEATH_NOGIBS;
 
     self.iscreature = TRUE;
@@ -383,11 +468,23 @@
     self.tur_head.frame = 1;
 
     self.verbs_move = spawn();
-    verbstack_push(self.verbs_move, ewheel_moveverb_idle,   WVM_IDLE,  0);
-    verbstack_push(self.verbs_move, ewheel_moveverb_enemy,  WVM_ENEMY, 0);
-    verbstack_push(self.verbs_move, ewheel_moveverb_path,   WVM_PATH,  0);
-    verbstack_push(self.verbs_move, ewheel_moveverb_runaway,WVM_PANIC,  0);
 
+    //verbstack_push(self.verbs_move, ewheel_moveverb_roam,   WVM_IDLE,  0, self);
+    verbstack_push(self.verbs_move, ewheel_moveverb_idle,   WVM_IDLE,  0, self);
+    verbstack_push(self.verbs_move, ewheel_moveverb_enemy,  WVM_ENEMY, 0, self);
+    verbstack_push(self.verbs_move, ewheel_moveverb_path,   WVM_PATH,  0, self);
+    //verbstack_push(self.verbs_move, ewheel_moveverb_runaway,WVM_PANIC,  0, self);
+
+    /*
+    self.test_stack = spawn();
+    verbstack_push(self.test_stack, test_stack_1,1,  0, self);
+    verbstack_push(self.test_stack, test_stack_2,2,  0, self);
+    verbstack_push(self.test_stack, test_stack_3,100,0, self);
+    while(verbstack_popfifo(self.test_stack) != 0)
+    */
+
+
+
     // Convert from dgr / sec to dgr / tic
     self.tur_head.aim_speed = cvar("g_turrets_unit_ewheel_turnrate");
     self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
@@ -413,6 +510,8 @@
 
 void spawnfunc_turret_ewheel()
 {
+    g_turrets_common_precash();
+
     precache_model ("models/turrets/ewheel-base.md3");
     precache_model ("models/turrets/ewheel-gun1.md3");
 

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-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -598,10 +598,10 @@
         if (self.enemy == world)
             return VS_CALL_NO;
 
-        if (tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL))
-            return verb.verb_static_value;
+        //if (tracewalk(self.enemy, self.origin, self.mins, self.maxs, self.enemy.origin, MOVE_NORMAL))
+        return verb.verb_static_value;
 
-        return VS_CALL_NO;
+        //return VS_CALL_NO;
 
     case VCM_DO:
         switch (self.waterlevel)
@@ -684,7 +684,7 @@
             if(verb.wait - time < 9)
                 if(vlen(self.moveto - self.origin) < 32)
                 {
-                    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * (verb.wait - time));
+                    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * (verb.wait - time), self);
                     self.animflag = ANIM_NO;
                     return VS_CALL_REMOVE;
                 }
@@ -729,7 +729,7 @@
     case VCM_DO:
 
         //if (random() < 0.5)
-            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * 5);
+            verbstack_push(self.walker_verbs_move, walker_moveverb_idle_pause,   WVM_IDLE + WVM_IDLE_UP, random() * 5, self);
         //else
         //    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam,   WVM_IDLE + WVM_IDLE_UP,  random() * 15);
 
@@ -949,12 +949,12 @@
     self.walker_verbs_attack = spawn();
     self.walker_verbs_idle   = spawn();
 
-    verbstack_push(self.walker_verbs_move, walker_moveverb_idle,   WVM_IDLE,  0);
-    verbstack_push(self.walker_verbs_move, walker_moveverb_enemy,  WVM_ENEMY, 0);
-    verbstack_push(self.walker_verbs_move, walker_moveverb_path,   WVM_PATH,  0);
+    verbstack_push(self.walker_verbs_move, walker_moveverb_idle,   WVM_IDLE,  0, self);
+    verbstack_push(self.walker_verbs_move, walker_moveverb_enemy,  WVM_ENEMY, 0, self);
+    verbstack_push(self.walker_verbs_move, walker_moveverb_path,   WVM_PATH,  0, self);
 
-    verbstack_push(self.walker_verbs_attack, walker_attackverb_meele,   WVA_MEELE,  0);
-    verbstack_push(self.walker_verbs_attack, walker_attackverb_rockets, WVA_ROCKET, 0);
+    verbstack_push(self.walker_verbs_attack, walker_attackverb_meele,   WVA_MEELE,  0, self);
+    verbstack_push(self.walker_verbs_attack, walker_attackverb_rockets, WVA_ROCKET, 0, self);
 
     self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc	2009-04-29 15:52:29 UTC (rev 6617)
@@ -8,7 +8,7 @@
 
 /// Execure this verb
 #define VCM_DO     0
-/// Return teh value of this verb. Return VS_CALL_REMOVE to delete it.
+/// Return the value of this verb. Return VS_CALL_REMOVE to delete it.
 #define VCM_EVAL   1
 /// This verb is beeing removed NOW (not sent when verb_call returns VS_CALL_REMOVE)
 #define VCM_REMOVE 2
@@ -34,7 +34,7 @@
 /**
     Push a new verb onto the specified stack. Set vrb_life to make it time-limited.
 **/
-entity verbstack_push(entity stack, float(float eval) vrb_call, float val_static, float vrb_life)
+entity verbstack_push(entity stack, float(float eval) vrb_call, float val_static, float vrb_life,entity verb_owner)
 {
     entity vrb;
 
@@ -45,7 +45,7 @@
         return world;
 
     vrb                   = spawn();
-    vrb.owner             = self;
+    vrb.owner             = verb_owner;
     vrb.verbstack         = stack;
     vrb.verb_call         = vrb_call;
     vrb.verb_static_value = val_static;
@@ -108,6 +108,28 @@
     return value;
 }
 
+float verbstack_popfifo(entity stack)
+{
+    entity oldself;
+    float ret;
+
+    oldself = self;
+    verb = findentity(stack,verbstack,stack);
+    if not (verb)
+        ret = 0;
+    else
+    {
+        self = verb.owner;
+        ret = verb.verb_call(VCM_DO);
+
+        if(ret == VS_CALL_REMOVE)
+            remove(verb);
+    }
+
+    self = oldself;
+    return ret;
+}
+
 /**
     Find the best verb in this stack and return it.
     ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL.
@@ -149,6 +171,11 @@
     return bestverb;
 }
 
+entity verbstack_pullfifo(entity stack)
+{
+    return findentity(stack,verbstack,stack);
+}
+
 /**
     Delete every verb on this stack, signaling them with VCM_REMOVE first.
 **/

Modified: branches/nexuiz-2.0/server/server.cfg
===================================================================
--- branches/nexuiz-2.0/server/server.cfg	2009-04-29 09:42:21 UTC (rev 6616)
+++ branches/nexuiz-2.0/server/server.cfg	2009-04-29 15:52:29 UTC (rev 6617)
@@ -1,7 +1,7 @@
 // A setting needs to be surrounded with " if it contains special
 // characters like space, semicolon (seperates commands) or starts
 // with // (begins a comment for the rest of the line or next
-// semicolon).  While just "" means 'no/empty setting".
+// semicolon).  While just "" means 'no/empty setting'.
 
 /////////////////////////////////////////////////////////////////////
 // Everything has some sensible defaults so you do NOT really need to
@@ -9,34 +9,34 @@
 // make it 'YOUR' server.  IF so remove the // from the line start and
 // change them to your liking.
 
-//sv_public 1               // 0 if the server should not be on the public servers list
-//sv_status_privacy 1       // 1 hides IP addresses from "status" replies shown to clients, 0 shows them. Enables players to identify wellknown punks on your server OR is a thread to anonymity.. depending on your point of view :)
-//hostname "Nexuiz $g_nexuizversion Server"  // this name will appear on the server list (the $g_nexuizversion gets replaced with the current version)
-//sv_motd ""                // this message (unless "") is displayed to players on connect
-//maxplayers 8              // number of players allowed on the server
-//port 26000                // the port used by the server
-//log_file server.log       // server console output will also be copied to this file
+//sv_public 1	// 0 if the server should not be on the public servers list
+//sv_status_privacy 1	// 1 hides IP addresses from "status" replies shown to clients, 0 shows them. Enables players to identify wellknown punks on your server OR is a thread to anonymity.. depending on your point of view :)
+//hostname "Nexuiz $g_nexuizversion Server"	// this name will appear on the server list (the $g_nexuizversion gets replaced with the current version)
+//sv_motd ""	// this message (unless "") is displayed to players on connect
+//maxplayers 8	// number of players allowed on the server
+//port 26000	// the port used by the server
+//log_file "server.log"	// server console output will also be copied to this file. This: "${serverconfig}.log" uses variable substitution to make the logfile have the same name as your config file with .log appended which is useful if you run several servers
 
 // List of maps to play on the server.  Set to "" to autodetect (which would enumerate ALL maps.  Maps that don't support the current game mode will be skipped, so you don't need to remove them here.
 //g_maplist "accident aggressor aneurysm basement basementctf bleach bloodprison bloodprisonctf bluesky darkzone desertfactory dieselpower dismal downer eggandbacon evilspace farewell final_rage ons-reborn racetrack reslimed ruiner runningman runningman_1on1remix runningmanctf silvercity skyway slimepit soylent starship stormkeep strength toxic warfare"
-//g_maplist_shuffle 1           // 0 always selects the next map out of g_maplist (but then better set g_maplist_votable 0 below to prevent repetitive votes), 1 will select random maps each time
-//g_maplist_mostrecent_count 3  // number of maps that have to be played before a map can be repeated
+//g_maplist_shuffle 1	// 0 always selects the next map out of g_maplist (but then better set g_maplist_votable 0 below to prevent repetitive votes), 1 will select random maps each time
+//g_maplist_mostrecent_count 3	// number of maps that have to be played before a map can be repeated
 
 // LIMITS: how long a match will last before the next map starts (-1 means use the map default, 0 = unlimited, please note that the variables fraglimit/timelimit can NOT be globally used for this but only DURING a match is being played)
-//timelimit_override -1        // global timelimit for all maps and gametypes
-//fraglimit_override -1        // global frag/point limit for all maps and gametypes
-//g_ctf_capture_limit -1       // frag/capture limit for CTF
-//capturelimit_override -1     // capture limit for CTF
-//g_domination_point_limit -1  // frag/point limit for DOM
-//g_runematch_point_limit -1   // frag/point limit for RUNE
-//g_keyhunt_point_limit -1     // frag/point limit for KH
-//g_lms_lives_override -1      // lives for LMS
+//timelimit_override -1	// global timelimit for all maps and gametypes
+//fraglimit_override -1	// global frag/point limit for all maps and gametypes
+//g_ctf_capture_limit -1	// frag/capture limit for CTF
+//capturelimit_override -1	// capture limit for CTF
+//g_domination_point_limit -1	// frag/point limit for DOM
+//g_runematch_point_limit -1	// frag/point limit for RUNE
+//g_keyhunt_point_limit -1	// frag/point limit for KH
+//g_lms_lives_override -1	// lives for LMS
 
-//g_ctf_win_mode 0             // CTF win mode: 0 = caps only, 1 = caps + points as tie breaker, 2 = points only
-//g_ctf_ignore_frags 1         // set to 1 to ignore kills except for FC kills
+//g_ctf_win_mode 0	// CTF win mode: 0 = caps only, 1 = caps + points as tie breaker, 2 = points only
+//g_ctf_ignore_frags 1	// set to 1 to ignore kills except for FC kills
 
 // TEAMS for key hunt (change this to 2, 3, 4 to set a fixed keyhunt style)
-//g_keyhunt_teams_override -1  // teams for KH
+//g_keyhunt_teams_override -1	// teams for KH
 
 // GAME MODE: what type of server do you want to host?
 // possible values: dm (deathmatch), tdm (team deathmatch), dom (domination), ctf (ctf), rune (runematch), lms (last man standing), arena (arena), kh (keyhunt), as (assault), ons (onslaught), race (race)
@@ -44,74 +44,76 @@
 
 
 // enable some mutators you'd like
-//g_cloaked 0              // set to 1 for transparent hard to see players
-//g_footsteps 0            // set to 1 to enable footsteps
-//g_grappling_hook 0       // set to 1 to enable the hook
-//g_laserguided_missile 0  // set to 1 for laser guided missiles in the RL
-//g_midair 0               // set to 1 to make only midair damage count
-//g_vampire 0              // set to 1 to give players the damage they cause as health
-//sv_gravity 800           // for low gravity, set this somewhere between 50 and 400
+//g_cloaked 0	// set to 1 for transparent hard to see players
+//g_footsteps 0	// set to 1 to enable footsteps
+//g_grappling_hook 0	// set to 1 to enable the hook
+//g_laserguided_missile 0	// set to 1 for laser guided missiles in the RL
+//g_midair 0	// set to 1 to make only midair damage count
+//g_vampire 0	// set to 1 to give players the damage they cause as health
+//sv_gravity 800	// for low gravity, set this somewhere between 50 and 400
 
 // select AT MOST one of these arena mutators
-//g_minstagib 0          // set to 1 for MinstaGib
-//g_nixnex 0             // set to 1 for No Items Nexuiz
-//g_nixnex_with_laser 0  // set to 1 to always give players the laser in NixNex
-//g_rocketarena 0        // set to 1 to make the rocket launcher the only weapon
+//g_minstagib 0	// set to 1 for MinstaGib
+//g_nixnex 0	// set to 1 for No Items Nexuiz
+//g_nixnex_with_laser 0	// set to 1 to always give players the laser in NixNex
+//g_rocketarena 0	// set to 1 to make the rocket launcher the only weapon
 
 /////////////////////////////////////////////////////////////////////
 // Some settings you MIGHT want to change.  Again IF so remove the //
 // from the line start and change them to your liking.
 
-//rcon_password "" // you can use rcon if this password is set.  you need to set the same password in your client if you want to issue rcon commands
-//rcon_restricted_password "" // put here the password for a "restricted" rcon user (see below)
+//net_address 0.0.0.0	// ONLY change this if you have problems with your server. Specifies the network interface used by the engine.  Set it you one of you internal IPs
 
-//bot_number 0 // number of bots to add
-//skill 1 // the bots skill level
-//minplayers 0 // add bots if less then that number of players playing. MAKE SURE ITS LESS THEN maxplayers or people will get blocked by bots!
-//bot_prefix [BOT] // prepend this to all botnames
-//bot_suffix "" // append this to all botnames
-//g_maplist_check_waypoints 0 // set this to 1 to skip maps without waypoints if there aren't enough players to play without bots
+//rcon_password ""	// you can use rcon if this password is set.  you need to set the same password in your client if you want to issue rcon commands
+//rcon_restricted_password ""	// put here the password for a "restricted" rcon user (see below)
 
-//g_maplist_votable 5 // number of maps to vote between.  set to 0 to disable the map voting screen (please enable g_maplist_shuffle above when this is enabled, or votes will be repetitive)
-//g_maplist_votable_suggestions 2 // number of suggestions to accept using the suggestmap command
-//g_maplist_votable_abstain 0 // when 1, people get a "don't care" selection in the vote screen
-//g_maplist_votable_nodetail 1 // when 1, people can't see how many voted for what (to thwart abusive "influential" first votes)
+//bot_number 0	// number of bots to add
+//skill 1	// the bots skill level
+//minplayers 0	// add bots if less then that number of players playing. MAKE SURE ITS LESS THEN maxplayers or people will get blocked by bots!
+//bot_prefix [BOT]	// prepend this to all botnames
+//bot_suffix ""	// append this to all botnames
+//g_maplist_check_waypoints 0	// set this to 1 to skip maps without waypoints if there aren't enough players to play without bots
 
-//sv_vote_commands "restart fraglimit chmap gotomap endmatch reducematchtime extendmatchtime allready kick cointoss movetoteam_auto" // players can vote for those commands or use them if they are masters. You canm also add 'g_grappling_hook' for hook voting, and 'sv_defaultplayer_fbskin_green sv_defaultplayer_fbskin_red sv_defaultplayer_fbskin_orange sv_defaultplayer_fbskin_off' for fbskin voting.
-//sv_vote_master_commands "movetoteam_red movetoteam_blue movetoteam_yellow movetoteam_pink" // add commands masters can use if logged in or elected. You may want to put 'kickban' here, so masters can keep out punks. It may be good to also put "sv_status_privacy 0" then...
-//rcon_restricted_commands "restart fraglimit chmap gotomap endmatch reducematchtime extendmatchtime allready kick kickban \"sv_cmd bans\" \"sv_cmd unban\" status \"sv_cmd teamstatus\" movetoteam_red movetoteam_blue movetoteam_yellow movetoteam_pink" // commands for the (stronger) rcon restricted
+//g_maplist_votable 6	// number of maps to vote between.  set to 0 to disable the map voting screen (please enable g_maplist_shuffle above when this is enabled, or votes will be repetitive)
+//g_maplist_votable_suggestions 2	// number of suggestions to accept using the suggestmap command
+//g_maplist_votable_abstain 0	// when 1, people get a "don't care" selection in the vote screen
+//g_maplist_votable_nodetail 1	// when 1, people can't see how many voted for what (to thwart abusive "influential" first votes)
 
-//sv_vote_call 1 // 0 will disable the normal voting
-//sv_vote_master 1 // 0 will disable voting to become master, good if you prefer to use the master password instead
-//sv_vote_master_password "" // when set, vlogin PWD will allow people to become master to run master commands directly using vdo
-//sv_vote_majority_factor 0.5 // 0.666 will require a 2/3 majority instead of a regular 1/2 one
-//sv_vote_simple_majority_factor 0 // 0.666 will win votes by a 2/3 majority of the VOTERS (not the players!)
+//sv_vote_commands "restart fraglimit chmap gotomap endmatch reducematchtime extendmatchtime allready kick cointoss movetoteam_auto"	// players can vote for those commands or use them if they are masters. You canm also add 'g_grappling_hook' for hook voting, and 'sv_fbskin_green sv_fbskin_red sv_fbskin_orange sv_fbskin_off' for fbskin voting.
+//sv_vote_master_commands "movetoteam_red movetoteam_blue movetoteam_yellow movetoteam_pink"	// add commands masters can use if logged in or elected. You may want to put 'kickban' here, so masters can keep out punks. It may be good to also put "sv_status_privacy 0" then...
+//rcon_restricted_commands "restart fraglimit chmap gotomap endmatch reducematchtime extendmatchtime allready kick kickban \"sv_cmd bans\" \"sv_cmd unban\" status \"sv_cmd teamstatus\" movetoteam_auto movetoteam_red movetoteam_blue movetoteam_yellow movetoteam_pink"	// commands for the (stronger) rcon restricted
+
+//sv_vote_call 1	// 0 will disable the normal voting
+//sv_vote_master 1	// 0 will disable voting to become master, good if you prefer to use the master password instead
+//sv_vote_master_password ""	// when set, vlogin PWD will allow people to become master to run master commands directly using vdo
+//sv_vote_majority_factor 0.5	// 0.666 will require a 2/3 majority instead of a regular 1/2 one
+//sv_vote_simple_majority_factor 0	// 0.666 will win votes by a 2/3 majority of the VOTERS (not the players!)
 //note: to JUST support simple majorities, set these two factors equal
 
 /////////////////////////////////////////////////////////////////////
 // Some more advanced settings.  You probably are not interested in changing them at all.
 
 // select one of these:
-//g_balance_rocketlauncher_detonatedelay 0    // rocket detonation at any time
-//g_balance_rocketlauncher_detonatedelay 0.2  // rocket detonation at least 0.2s after it was shot (reduces rocket boosting)
-//g_balance_rocketlauncher_detonatedelay -1   // rocket detonation only if the rocket is out of range of the owner (prevents rocket boosting, makes rockets "safer")
+//g_balance_rocketlauncher_detonatedelay 0	// rocket detonation at any time
+//g_balance_rocketlauncher_detonatedelay 0.2	// rocket detonation at least 0.2s after it was shot (reduces rocket boosting)
+//g_balance_rocketlauncher_detonatedelay -1	// rocket detonation only if the rocket is out of range of the owner (prevents rocket boosting, makes rockets "safer")
 
-//sv_ready_restart 0 // 1 to allow players to restart the map when all of them press the ready button
-//sv_autoscreenshot 0 // 1 will force a screenshot for all clients when the map ends.  Useful for competitions or the ladder.
+//sv_ready_restart 0	// 1 to allow players to restart the map when all of them press the ready button
+//sv_autoscreenshot 0	// 1 will force a screenshot for all clients when the map ends.  Useful for competitions or the ladder.
 
-//g_antilag 2 // 0 to disable the antilag feature, 1 and 2 use different methods
+//g_antilag 2	// 0 to disable the antilag feature, 1 and 2 use different methods
 
-//sys_ticrate 0.05 // how long a server frame is.  0.05 = 20 fps, 0.02 = 50 fps.  Lower settings makes things smoother but create much more traffic
-//sv_maxrate 1000000 // limits client connections to this rate in bytes/seconds
+//sys_ticrate 0.05	// how long a server frame is.  0.05 = 20 fps, 0.02 = 50 fps.  Lower settings makes things smoother but create much more traffic (known good values include: 0.05, 0.046875, 0.03125)
+//sv_maxrate 1000000	// limits client connections to this rate in bytes/seconds
 
 // see Docs/mapdownload.txt for more info
-//sv_curl_defaulturl http://www.nexuiz.com/contentdownload/getmap.php?file= //fallback download URL
+//sv_curl_defaulturl http://www.nexuiz.com/contentdownload/getmap.php?file=	//fallback download URL
 
-//sv_defaultcharacter 0 // 1 will force a specific model for all players
-//sv_defaultplayermodel models/player/nexus.zym // this model will be used
-//sv_defaultplayerskin 0 // this skin number will be forced for all players
-//g_fullbrightplayers 0 // 1 to make players fullbright
-//g_fullbrightitems 0 // 1 to make items fullbright
+//sv_defaultcharacter 0	// 1 will force a specific model for all players
+//sv_defaultplayermodel models/player/nexus.zym	// this model will be used
+//sv_defaultplayerskin 0	// this skin number will be forced for all players
+//g_fullbrightplayers 0	// 1 to make players fullbright
+//g_fullbrightitems 0	// 1 to make items fullbright
 
-//g_balance_teams 1 // 0 will show players the team selection menu after joining instead of automaticly putting them on the smaller team
-//g_balance_teams_force 0 // 1 to automaticly balance teams even during a game
+//g_balance_teams 1	// 0 will show players the team selection menu after joining instead of automaticly putting them on the smaller team
+//g_balance_teams_force 0	// 1 to automaticly balance teams even during a game



More information about the nexuiz-commits mailing list