[nexuiz-commits] r7201 - in trunk/data: . maps qcsrc/client qcsrc/common qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Jul 12 08:02:50 EDT 2009


Author: div0
Date: 2009-07-12 08:02:49 -0400 (Sun, 12 Jul 2009)
New Revision: 7201

Modified:
   trunk/data/defaultNexuiz.cfg
   trunk/data/maps/racetrack.mapinfo
   trunk/data/qcsrc/client/sbar.qc
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/common/mapinfo.qc
   trunk/data/qcsrc/common/mapinfo.qh
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/clientcommands.qc
   trunk/data/qcsrc/server/constants.qh
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/g_world.qc
   trunk/data/qcsrc/server/havocbot_roles.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/race.qc
   trunk/data/qcsrc/server/race.qh
   trunk/data/qcsrc/server/t_teleporters.qc
   trunk/data/qcsrc/server/teamplay.qc
Log:
bye bye "Race", hello "CTS" and "Race" (in mapinfo: rc)


Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/defaultNexuiz.cfg	2009-07-12 12:02:49 UTC (rev 7201)
@@ -24,7 +24,7 @@
 seta g_configversion 0	"Configuration file version (used to upgrade settings) 0: first run, or previous start was <2.4.1  Later, it's overridden by config.cfg, version ranges are defined in config_update.cfg"
 
 // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar)
-set cvar_check_default 9b8ca48c50d9e2af73245655fdb29b04
+set cvar_check_default 1247e8cd8be7bda1c260795d5bebb20b
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -667,13 +667,13 @@
 
 // race
 set g_race 0 "Race: be faster than your opponents"
-set g_race_qualifying 2
-// Qualifying uses timelimit, and the one with the best time wins. Fraglimit is nonfunctional then.
-// Normal race uses fraglimit as a limit for the laps.
-// Special mode: g_race_qualifying 2. First runs a qualifying, after
-// ready-restart it turns into a race. TODO not done yet (e.g. timing display)
+set g_race_qualifying_timelimit 0
+set g_race_qualifying_timelimit_override -1
 set g_race_teams 0	"when 2, 3, or 4, the race is played as a team game (the team members can add up their laps)"
 
+// cts
+set g_cts 0 "CTS: complete the stage"
+
 // nexball
 set g_nexball 0 "Nexball: Basketball and Soccer go Nexuiz"
 

Modified: trunk/data/maps/racetrack.mapinfo
===================================================================
--- trunk/data/maps/racetrack.mapinfo	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/maps/racetrack.mapinfo	2009-07-12 12:02:49 UTC (rev 7201)
@@ -4,5 +4,5 @@
 _diameter 9083.417969
 _spawnpoints 0
 has weapons
-type race 5 20 15
+type rc 20 5 7 15
 cdtrack 7

Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/client/sbar.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -1458,7 +1458,7 @@
 		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)
+	if(gametype == GAME_RACE || gametype == GAME_CTS)
 	{
 		drawfont = sbar_bigfont;
 		float a, t;

Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/common/constants.qh	2009-07-12 12:02:49 UTC (rev 7201)
@@ -37,6 +37,7 @@
 const float GAME_ONSLAUGHT	= 10;
 const float GAME_RACE	= 11;
 const float GAME_NEXBALL = 12;
+const float GAME_CTS = 13;
 
 const float AS_STRING		= 1;
 const float AS_INT		= 2;

Modified: trunk/data/qcsrc/common/mapinfo.qc
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/common/mapinfo.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -348,12 +348,8 @@
 			}
 			else if(k == "race_place")
 			{
-				if(v == "1")
-					spawnplaces |= 1;
-				else if(v == "2")
-					spawnplaces |= 2;
-				else if(v == "3")
-					spawnplaces |= 4;
+				if(stof(v) > 0)
+					spawnplaces = 1;
 			}
 			else if(k == "classname")
 			{
@@ -418,8 +414,11 @@
 	}
 
 	if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE)
-		if(spawnplaces != 7)
-			MapInfo_Map_flags |= MAPINFO_FLAG_FRUSTRATING;
+	if(!spawnplaces)
+	{
+		MapInfo_Map_supportedGametypes &~= MAPINFO_TYPE_RACE;
+		MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_CTS;
+	}
 
 	dprint("-> diameter ",    ftos(diameter));
 	dprint(";  spawnpoints ", ftos(spawnpoints));
@@ -451,7 +450,7 @@
 	if(!(pThisType & pWantedType))
 		return;
 	
-	if(pWantedType == MAPINFO_TYPE_ASSAULT || pWantedType == MAPINFO_TYPE_ONSLAUGHT) // these modes don't use fraglimit
+	if(pWantedType == MAPINFO_TYPE_ASSAULT || pWantedType == MAPINFO_TYPE_ONSLAUGHT || pWantedType == MAPINFO_TYPE_RACE || pWantedType == MAPINFO_TYPE_CTS) // these modes don't use fraglimit
 	{
 		cvar_set("fraglimit", "0");
 	}
@@ -486,8 +485,26 @@
 		s = cdr(s);
 	}
 
+	// rc = timelimit timelimit_qualification laps laps_teamplay
 	if(pWantedType == MAPINFO_TYPE_RACE)
 	{
+		sa = car(s); if(sa == "") sa = cvar_string("timelimit");
+		cvar_set("g_race_qualifying_timelimit", sa);
+		s = cdr(s);
+
+		sa = car(s); if(sa == "") sa = "10";
+		if(cvar("g_race_teams") < 2)
+			cvar_set("fraglimit", sa);
+		s = cdr(s);
+
+		sa = car(s); if(sa == "") sa = "20";
+		if(cvar("g_race_teams") >= 2)
+			cvar_set("fraglimit", sa);
+		s = cdr(s);
+	}
+
+	if(pWantedType == MAPINFO_TYPE_CTS)
+	{
 		sa = car(s); if(sa == "") sa = cvar_string("fraglimit");
 		if(cvar("g_race_teams"))
 			cvar_set("fraglimit", sa);
@@ -511,8 +528,9 @@
 	else if(t == "kh")      return MAPINFO_TYPE_KEYHUNT;
 	else if(t == "as")      return MAPINFO_TYPE_ASSAULT;
 	else if(t == "ons")     return MAPINFO_TYPE_ONSLAUGHT;
-	else if(t == "race")    return MAPINFO_TYPE_RACE;
+	else if(t == "rc")      return MAPINFO_TYPE_RACE;
 	else if(t == "nexball") return MAPINFO_TYPE_NEXBALL;
+	else if(t == "cts")     return MAPINFO_TYPE_CTS;
 	else if(t == "all")     return MAPINFO_TYPE_ALL;
 	else                    return 0;
 }
@@ -595,9 +613,10 @@
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ARENA)           fputs(fh, "type arena 10 20\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_KEYHUNT)         fputs(fh, "type kh 1000 20 3\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ASSAULT)         fputs(fh, "type as 20\n");
-		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE)            fputs(fh, "type race 5 20 15\n");
+		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE)            fputs(fh, "type rc 20 5 7 15\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ONSLAUGHT)       fputs(fh, "type ons 20\n");
 		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_NEXBALL)         fputs(fh, "type nexball 5 20\n");
+		if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_CTS)             fputs(fh, "type cts 20 0\n");
 
 		fh2 = fopen(strcat("scripts/", pFilename, ".arena"), FILE_READ);
 		if(fh2 >= 0)
@@ -880,6 +899,8 @@
 		return MAPINFO_TYPE_RACE;
 	else if(cvar("g_nexball"))
 		return MAPINFO_TYPE_NEXBALL;
+	else if(cvar("g_cts"))
+		return MAPINFO_TYPE_CTS;
 	else
 		return MAPINFO_TYPE_DEATHMATCH;
 }
@@ -918,6 +939,8 @@
 		case MAPINFO_TYPE_ASSAULT: return "g_assault";
 		case MAPINFO_TYPE_ONSLAUGHT: return "g_onslaught";
 		case MAPINFO_TYPE_RACE: return "g_race";
+		case MAPINFO_TYPE_NEXBALL: return "g_nexball";
+		case MAPINFO_TYPE_CTS: return "g_cts";
 		default: return "";
 	}
 }
@@ -937,6 +960,7 @@
 	cvar_set("g_onslaught",  (t == MAPINFO_TYPE_ONSLAUGHT)       ? "1" : "0");
 	cvar_set("g_race",       (t == MAPINFO_TYPE_RACE)            ? "1" : "0");
 	cvar_set("g_nexball",    (t == MAPINFO_TYPE_NEXBALL)         ? "1" : "0");
+	cvar_set("g_cts",        (t == MAPINFO_TYPE_CTS)             ? "1" : "0");
 }
 
 void MapInfo_LoadMap(string s)

Modified: trunk/data/qcsrc/common/mapinfo.qh
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qh	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/common/mapinfo.qh	2009-07-12 12:02:49 UTC (rev 7201)
@@ -10,6 +10,7 @@
 float MAPINFO_TYPE_ARENA			= 512;
 float MAPINFO_TYPE_KEYHUNT			= 1024;
 float MAPINFO_TYPE_NEXBALL          = 2048;
+float MAPINFO_TYPE_CTS              = 4096;
 float MAPINFO_TYPE_ALL              = 65535; // this has to include all above bits
 
 float MAPINFO_FEATURE_WEAPONS       = 1; // not defined for minstagib-only maps

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/cl_client.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -2533,7 +2533,7 @@
 	if(self.spectatee_status != oldspectatee_status)
 	{
 		ClientData_Touch(self);
-		if(g_race)
+		if(g_race || g_cts)
 			race_InitSpectator();
 	}
 

Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/clientcommands.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -233,7 +233,7 @@
 			return;
 
 		if((inWarmupStage && 0 >= g_warmup_limit) // with unlimited warmup players have to be able to restart
-		   || cvar("sv_ready_restart"))
+		   || cvar("sv_ready_restart") || g_race_qualifying == 2)
 		{
 			if(!readyrestart_happened || cvar("sv_ready_restart_repeatable"))
 			{
@@ -454,7 +454,7 @@
 	VoteReset();
 
 	// clear overtime
-	if (checkrules_overtimesadded > 0) {
+	if (checkrules_overtimesadded > 0 && g_race_qualifying != 2) {
 		//we have to decrease timelimit to its original value again!!
 		float newTL;
 		newTL = cvar("timelimit");
@@ -511,13 +511,13 @@
 	if(g_arena | g_assault | gameover | intermission_running | race_completing)
 		localcmd("restart\n");
 
+	ReadyRestartForce();
+
 	// reset ALL scores, but only do that at the beginning
 	//of the countdown if sv_ready_restart_after_countdown is off!
 	//Otherwise scores could be manipulated during the countdown!
 	if (!cvar("sv_ready_restart_after_countdown"))
 		Score_ClearAll();
-
-	ReadyRestartForce();
 }
 
 /**
@@ -558,8 +558,8 @@
  */
 void restartTimer_Think() {
 	restart_mapalreadyrestarted = 1;
+	reset_map(TRUE);
 	Score_ClearAll();
-	reset_map(TRUE);
 	remove(self);
 	return;
 }

Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/constants.qh	2009-07-12 12:02:49 UTC (rev 7201)
@@ -1,4 +1,4 @@
-string CVAR_CHECK_DEFAULT = "9b8ca48c50d9e2af73245655fdb29b04";
+string CVAR_CHECK_DEFAULT = "1247e8cd8be7bda1c260795d5bebb20b";
 string CVAR_CHECK_WEAPONS = "4f7b4c1e2feeef4988b02a93ff35a2ca";
 
 float	FALSE					= 0;

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/defs.qh	2009-07-12 12:02:49 UTC (rev 7201)
@@ -17,7 +17,7 @@
 
 float ctf_score_value(string parameter);
 
-float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch, g_race, g_nexball;
+float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch, g_race, g_nexball, g_cts;
 float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_laserguided_missile, g_midair, g_minstagib, g_nixnex, g_nixnex_with_laser, g_pinata, g_norecoil, g_vampire, g_minstagib_invis_alpha, g_bloodloss;
 float g_warmup_limit;
 float g_warmup_allguns;

Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/g_world.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -251,6 +251,7 @@
 		BADCVAR("g_keyhunt_teams");
 		BADCVAR("g_onslaught");
 		BADCVAR("g_race");
+		BADCVAR("g_cts");
 		BADCVAR("g_runematch");
 		BADCVAR("g_tdm");
 		BADCVAR("teamplay");
@@ -1899,9 +1900,9 @@
 						++readyplayers;
 				}
 
-				// at least 2/3 of the players have completed a lap: start the RACE
+				// at least 2 of the players have completed a lap: start the RACE
 				// otherwise, the players should end the qualifying on their own
-				if(readyplayers || ((totalplayers >= 3) && (playerswithlaps * 3 >= totalplayers * 2)))
+				if(readyplayers || playerswithlaps >= 2)
 				{
 					checkrules_suddendeathend = 0;
 					ReadyRestart(); // go to race

Modified: trunk/data/qcsrc/server/havocbot_roles.qc
===================================================================
--- trunk/data/qcsrc/server/havocbot_roles.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/havocbot_roles.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -637,7 +637,7 @@
 		havocbot_chooserole_dom();
 	else if (g_keyhunt)
 		havocbot_chooserole_kh();
-	else if (g_race)
+	else if (g_race || g_cts)
 		havocbot_chooserole_race();
 	else if (g_onslaught)
 		havocbot_chooserole_ons();

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -876,7 +876,7 @@
             {
                 if (g_lms)
                     t = (e.spawnflags & WEPSPAWNFLAG_NORMAL);
-                else if (g_race)
+                else if (g_race || g_cts)
                     t = (i == WEP_LASER);
                 else if (g_nexball)
                     t = 0; // weapon is set a few lines later
@@ -1051,7 +1051,7 @@
     g_warmup_allguns = cvar("g_warmup_allguns");
     g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
 
-    if (g_race && g_race_qualifying == 2 || g_arena || g_assault || cvar("g_campaign"))
+    if ((g_race && g_race_qualifying == 2) || g_arena || g_assault || cvar("g_campaign"))
         inWarmupStage = 0; // these modes cannot work together, sorry
 
     g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
@@ -1960,7 +1960,7 @@
         }
     }
 
-    if (g_race)
+    if (g_race || g_cts)
     {
         for (i = 0; i < MapInfo_count; ++i)
         {
@@ -1975,6 +1975,7 @@
             }
         }
     }
+
     MapInfo_ClearTemps();
 
     if (s == "")

Modified: trunk/data/qcsrc/server/race.qc
===================================================================
--- trunk/data/qcsrc/server/race.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/race.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -502,7 +502,7 @@
 void spawnfunc_trigger_race_checkpoint()
 {
 	vector o;
-	if(!g_race)
+	if(!g_race && !g_cts)
 	{
 		remove(self);
 		return;
@@ -569,7 +569,7 @@
 
 void race_RetractPlayer()
 {
-	if(!g_race)
+	if(!g_race && !g_cts)
 		return;
 	self.race_checkpoint = race_PreviousCheckpoint(self.race_checkpoint);
 	if(self.race_checkpoint == 0)
@@ -581,7 +581,7 @@
 
 void race_PreDie()
 {
-	if(!g_race)
+	if(!g_race && !g_cts)
 		return;
 
 	race_AbandonRaceCheck(self);
@@ -589,7 +589,7 @@
 
 void race_PreSpawn()
 {
-	if(!g_race)
+	if(!g_race && !g_cts)
 		return;
 	if(self.killcount == -666 || g_race_qualifying)
 		race_PreparePlayer();
@@ -599,7 +599,7 @@
 
 void race_PostSpawn(entity spot)
 {
-	if(!g_race)
+	if(!g_race && !g_cts)
 		return;
 	if(self.killcount != -666 && !g_race_qualifying)
 	{
@@ -618,14 +618,14 @@
 
 void race_PreSpawnObserver()
 {
-	if(!g_race)
+	if(!g_race && !g_cts)
 		return;
 	race_PreparePlayer();
 }
 
 void spawnfunc_info_player_race (void)
 {
-	if(!g_race)
+	if(!g_race && !g_cts)
 	{
 		remove(self);
 		return;
@@ -673,6 +673,7 @@
 		independent_players = 0;
 		cvar_set("fraglimit", ftos(race_fraglimit));
 		cvar_set("leadlimit", ftos(race_leadlimit));
+		cvar_set("timelimit", ftos(race_timelimit));
 		ScoreRules_race();
 	}
 }

Modified: trunk/data/qcsrc/server/race.qh
===================================================================
--- trunk/data/qcsrc/server/race.qh	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/race.qh	2009-07-12 12:02:49 UTC (rev 7201)
@@ -13,6 +13,7 @@
 float race_lowest_place_spawn; // where to spawn in qualifying
 float race_fraglimit;
 float race_leadlimit;
+float race_timelimit;
 .float race_place;
 .float race_completed;
 float race_completing;

Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/t_teleporters.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -83,7 +83,7 @@
 
 	if(player.classname == "player")
 	{
-		if(player.takedamage && player.deadflag == DEAD_NO && !g_race && cvar("g_telefrags"))
+		if(player.takedamage && player.deadflag == DEAD_NO && !g_race && !g_cts && cvar("g_telefrags"))
 			tdeath(player, teleporter, telefragger, telefragmin, telefragmax);
 
 		// player no longer is on ground

Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc	2009-07-11 21:14:27 UTC (rev 7200)
+++ trunk/data/qcsrc/server/teamplay.qc	2009-07-12 12:02:49 UTC (rev 7201)
@@ -98,6 +98,7 @@
 	cvar_set("g_onslaught", ftos(g_onslaught));
 	cvar_set("g_race", ftos(g_race));
 	cvar_set("g_nexball", ftos(g_nexball));
+	cvar_set("g_cts", ftos(g_cts));
 }
 
 void ReadGameCvars()
@@ -122,6 +123,7 @@
 		found += (g_onslaught = (!found && (prev != GAME_ONSLAUGHT) && cvar("g_onslaught")));
 		found += (g_race = (!found && (prev != GAME_RACE) && cvar("g_race")));
 		found += (g_nexball = (!found && (prev != GAME_NEXBALL) && cvar("g_nexball")));
+		found += (g_cts = (!found && (prev != GAME_CTS) && cvar("g_cts")));
 
 		if(found)
 			break;
@@ -163,8 +165,10 @@
 
 void InitGameplayMode()
 {
-	float fraglimit_override, timelimit_override, leadlimit_override;
+	float fraglimit_override, timelimit_override, leadlimit_override, qualifying_override;
 
+	qualifying_override = -1;
+
 	VoteReset();
 
 	teams_matter = 0;
@@ -315,28 +319,30 @@
 	{
 		game = GAME_RACE;
 		gamemode_name = "Race";
-		g_race_qualifying = cvar("g_race_qualifying");
 
 		if(cvar("g_race_teams"))
 		{
-			g_race_qualifying = 0; // not supported!
 			ActivateTeamplay();
 			race_teams = bound(2, cvar("g_race_teams"), 4);
 		}
 		else
 			race_teams = 0;
 
-		if(g_race_qualifying == 1)
-			fraglimit_override = 0;
-		else
-			fraglimit_override = cvar("g_race_laps_limit");
-
+		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;
+	}
 
-		ScoreRules_race();
+	if(g_cts)
+	{
+		game = GAME_CTS;
+		gamemode_name = "CTS";
+		g_race_qualifying = 1;
+		fraglimit_override = 0;
+		leadlimit_override = 0;
 	}
 
 	if(g_nexball)
@@ -367,16 +373,35 @@
 			cvar_set("timelimit", ftos(timelimit_override));
 		if(leadlimit_override >= 0)
 			cvar_set("leadlimit", ftos(leadlimit_override));
+		if(qualifying_override >= 0)
+			cvar_set("g_race_qualifying_timelimit", ftos(qualifying_override));
 	}
 
-	if(g_race && g_race_qualifying == 2)
+	if(g_race)
 	{
-		race_fraglimit = cvar("fraglimit");
-		cvar_set("fraglimit", "0");
-		race_leadlimit = cvar("leadlimit");
-		cvar_set("leadlimit", "0");
+		// we need to find out the correct value for g_race_qualifying
+		if(cvar("g_race_qualifying_timelimit") > 0)
+		{
+			g_race_qualifying = 2;
+			race_fraglimit = cvar("fraglimit");
+			race_leadlimit = cvar("leadlimit");
+			race_timelimit = cvar("timelimit");
+			cvar_set("fraglimit", "0");
+			cvar_set("leadlimit", "0");
+			cvar_set("timelimit", cvar_string("g_race_qualifying_timelimit"));
+		}
+		else
+			g_race_qualifying = 0;
 	}
 
+	if(g_race || g_cts)
+	{
+		if(g_race_qualifying)
+			independent_players = 1;
+
+		ScoreRules_race();
+	}
+
 	InitializeEntity(world, default_delayedinit, INITPRIO_GAMETYPE_FALLBACK);
 }
 



More information about the nexuiz-commits mailing list