Merge in xonotic/xonotic-data.pk3dir.git: terencehill/ca_ft_fixes
git-manager created issue #1777 (closed) on 2013-09-16T16:01:02Z:
Purpose of the branch:
CA-FT fixes MR
Fixes for these bugs reported in #1599
CA: #1, #2, #3 and probably #10 (commit d0bee8b: "Fix implementation of CA score rules" could have fixed it)
FT: #1 and #3
Fix for Bug #1470 fragspree counter not reset in CA
First commit of this branch (d0bee8: Fix implementation of CA score rules) fixes bug #1634 (Server crashes in CA)
I've also added a small and simple feature (feature request #1690):
Add cvars g_freezetag_team_spawns and g_ca_team_spawns: when 1, players spawn from the team spawnpoints of the map, if any
Repository: xonotic/xonotic-data.pk3dir.git Commit: 775fd0ae Branch: terencehill/ca_ft_fixes
Merge commands:
cd data/xonotic-data.pk3dir
git checkout master
git reset --hard origin/master
git pull && git diff '775fd0aea75ebb8bd7e4436a1189ea8b3c64c427'..'origin/terencehill/ca_ft_fixes'
# please check that the diff you just saw did not contain anything complex that
# needs a new merge request, and review these changes
git merge --edit --log --no-ff 'origin/terencehill/ca_ft_fixes'
# please make sure this merge worked, and if not, fix merge conflicts and git
# commit BEFORE the next command
#
# also, THIS is the point to do final pre-merge testing
#
# use git reset --hard origin/master to bail out
git push && git push --delete origin 'terencehill/ca_ft_fixes'
Diffstat:
gamemodes.cfg | 10 +++--
qcsrc/server/autocvars.qh | 3 +-
qcsrc/server/cl_impulse.qc | 3 +-
qcsrc/server/g_world.qc | 2 +-
qcsrc/server/mutators/gamemode_arena.qc | 1 +
qcsrc/server/mutators/gamemode_ca.qc | 46 ++++++++++-----------------
qcsrc/server/mutators/gamemode_ca.qh | 6 ---
qcsrc/server/mutators/gamemode_freezetag.qc | 28 ++++++++++++----
qcsrc/server/mutators/gamemode_lms.qc | 14 ++++----
qcsrc/server/scores_rules.qc | 14 ++++++--
qcsrc/server/teamplay.qc | 4 ++
11 files changed, 71 insertions(+), 60 deletions(-)
Revision log:
commit 775fd0aea75ebb8bd7e4436a1189ea8b3c64c427
Author: terencehill
Commit: terencehill
Fix compilation. It seems that Samual renamed inWarmupStage to warmup_stage in the commit 6c4446c0a7 with the very explicative description "I'm a goddamn genius, IT WORKS!".
commit a7794afc2db05650096d9c22e55cb1ca6d82aa9b
Merge: 53c0fad e2d636e
Author: terencehill
Commit: terencehill
Merge branch 'master' into terencehill/ca_ft_fixes
Conflicts:
gamemodes.cfg
qcsrc/server/mutators/gamemode_ca.qc
qcsrc/server/mutators/gamemode_lms.qc
commit 53c0fad35f703c744ffe14a73bf50f96094272c6
Merge: e9b8b02 d956593
Author: terencehill
Commit: terencehill
Merge branch 'master' into terencehill/ca_ft_fixes
commit e9b8b02ec887ead824e33c0c6ac55301bb6aa6dc
Author: terencehill
Commit: terencehill
Add cvars g_freezetag_team_spawns and g_ca_team_spawns: when 1, players spawn from the team spawnpoints of the map, if any
commit fd22f72d0b16c4c9f3815378825e6186bf344e44
Author: terencehill
Commit: terencehill
CheckAllowedTeams isn't needed in these cases
commit 11b56396ae864478454d391e80efdc3b2892ac33
Author: terencehill
Commit: terencehill
Add description to g_*_round_timelimit cvars
commit cb49ed58d95fed2ccfdc85627ace3b29082b508e
Author: terencehill
Commit: terencehill
Since CA and LMS have special values for starting ammo, health and armor, let's use them in warmup too
commit ca1f34a7fb758f24785b789e9b65718c46fb763d
Author: terencehill
Commit: terencehill
Allow weapon change impulses when not in round time
commit ff156cd912245fe8711ae2cbd57ce04edeab6bee
Author: terencehill
Commit: terencehill
Fix bug where just connected players are forced to join the game the next round
commit ac26e18f9ef8b55367b17a5af573b210462e9d4b
Author: terencehill
Commit: terencehill
Fix this Freezetag bug: If you try to revive a player after a round ends the "Revive progress" centerprint will be stuck until a new one appears
commit 2f2014adc81fc91cf7a3271bebe394d58b0f4bec
Author: terencehill
Commit: terencehill
Freezetag: use warmup_start_health in warmup stage
commit d96820e531946e841c229515055e573569f13098
Author: terencehill
Commit: terencehill
Reset kill count when a new round starts
commit cb31e6d9e7c60dbe2701de36cfe9e0b3754d42bf
Author: terencehill
Commit: terencehill
Make work the "3/2/1 frags left" announcer messages in Freezetag
commit fe22209725e11fd16bf7d5514b1e7c668d2149f4
Merge: edca1c7 e557ad1
Author: terencehill
Commit: terencehill
Merge branch 'master' into terencehill/ca_ft_fixes
commit edca1c788f1959742f4e6872186d695c159391d6
Author: terencehill
Commit: terencehill
ScoreRules_freezetag should know the number of available teams this way (like CA and KH)
commit d0bee8b16abe5d50eaf98a446874024a44d6098c
Author: terencehill
Commit: terencehill
Fix implementation of CA score rules
User agreed to the license.
Diff:
diff --git a/gamemodes.cfg b/gamemodes.cfg
index 665fa55..7d1194f 100644
--- a/gamemodes.cfg
+++ b/gamemodes.cfg
@@ -142,7 +142,7 @@ set g_ft_weapon_stay 0
set g_arena 0 "Arena: many one-on-one rounds are played to find the winner"
set g_arena_maxspawned 2 "maximum number of players to spawn at once (the rest is spectating, waiting for their turn)"
set g_arena_roundbased 1 "if disabled, the next player will spawn as soon as someone dies"
-set g_arena_round_timelimit 180
+set g_arena_round_timelimit 180 "round time limit in seconds"
set g_arena_warmup 5 "time, newly spawned players have to prepare themselves in round based matches"
@@ -161,8 +161,9 @@ set g_ca_point_leadlimit 0
set g_ca_spectate_enemies 0 "Allow spectating enemy player by dead player during clan arena games."
set g_ca_warmup 10 "how long the players will have time to run around the map before the round starts"
set g_ca_damage2score_multiplier 0.01
-set g_ca_round_timelimit 180
+set g_ca_round_timelimit 180 "round time limit in seconds"
seta g_ca_teams_override 0
+set g_ca_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any"
set g_ca_teams 0
@@ -249,7 +250,7 @@ set g_cts_finish_kill_delay 10 "prevent cheating by running back to the start li
// ==========================
set g_dm 1 "Deathmatch: killing any other player is one frag, player with most frags wins"
set g_tdm_teams 2 "how many teams are in team deathmatch (set by mapinfo)"
-set g_tdm_team_spawns 0 "when 1, a map can define team spawnpoints for TDM"
+set g_tdm_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any"
seta g_tdm_teams_override 0 "how many teams are in team deathmatch"
@@ -280,10 +281,11 @@ set g_freezetag_revive_clearspeed 1.6 "Speed at which reviving progress gets los
set g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a frozen teammate to keep reviving him"
set g_freezetag_revive_falldamage 0 "Enable reviving from this amount of fall damage"
set g_freezetag_revive_falldamage_health 40 "Amount of health player has if they revived from falling"
-set g_freezetag_round_timelimit 180
+set g_freezetag_round_timelimit 180 "round time limit in seconds"
set g_freezetag_frozen_force 0.6 "How much to multiply the force on a frozen player with"
set g_freezetag_frozen_maxtime 60 "frozen players will be automatically unfrozen after this time in seconds"
seta g_freezetag_teams_override 0
+set g_freezetag_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any"
set g_freezetag_teams 0
diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh
index 711d914..f5a29b2 100644
--- a/qcsrc/server/autocvars.qh
+++ b/qcsrc/server/autocvars.qh
@@ -347,7 +347,6 @@ float autocvar_g_balance_health_regenstable;
float autocvar_g_balance_health_rot;
float autocvar_g_balance_health_rotlinear;
float autocvar_g_balance_health_rotstable;
-float autocvar_g_balance_health_start;
float autocvar_g_balance_hlac_primary_ammo;
float autocvar_g_balance_hlac_primary_animtime;
float autocvar_g_balance_hlac_primary_damage;
@@ -709,6 +708,7 @@ float autocvar_g_ca_round_timelimit;
float autocvar_g_ca_spectate_enemies;
float autocvar_g_ca_teams;
float autocvar_g_ca_teams_override;
+float autocvar_g_ca_team_spawns;
float autocvar_g_ca_warmup;
float autocvar_g_campaign;
#define autocvar_g_campaign_forceteam cvar("g_campaign_forceteam")
@@ -825,6 +825,7 @@ float autocvar_g_freezetag_revive_clearspeed;
float autocvar_g_freezetag_round_timelimit;
float autocvar_g_freezetag_teams;
float autocvar_g_freezetag_teams_override;
+float autocvar_g_freezetag_team_spawns;
float autocvar_g_freezetag_warmup;
#define autocvar_g_friendlyfire cvar("g_friendlyfire")
#define autocvar_g_friendlyfire_virtual cvar("g_friendlyfire_virtual")
diff --git a/qcsrc/server/cl_impulse.qc b/qcsrc/server/cl_impulse.qc
index a94ba29..a80f462 100644
--- a/qcsrc/server/cl_impulse.qc
+++ b/qcsrc/server/cl_impulse.qc
@@ -46,8 +46,9 @@ void ImpulseCommands (void)
return;
self.impulse = 0;
- // forbid impulses when not in round time
+ // allow only weapon change impulses when not in round time
if(round_handler_IsActive() && !round_handler_IsRoundStarted())
+ if(imp == 17 || (imp >= 20 && imp < 200) || imp > 253)
return;
if (timeout_status == TIMEOUT_ACTIVE) //don't allow any impulses while the game is paused
diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc
index d654b91..e7a3ad9 100644
--- a/qcsrc/server/g_world.qc
+++ b/qcsrc/server/g_world.qc
@@ -1863,7 +1863,7 @@ float WinningCondition_Scores(float limit, float leadlimit)
if(WinningConditionHelper_zeroisworst)
leadlimit = 0; // not supported in this mode
- if(g_dm || g_tdm || g_arena || g_ca || (g_race && !g_race_qualifying) || g_nexball)
+ if(g_dm || g_tdm || g_arena || g_ca || g_freezetag || (g_race && !g_race_qualifying) || g_nexball)
// these modes always score in increments of 1, thus this makes sense
{
if(leaderfrags != WinningConditionHelper_topscore)
diff --git a/qcsrc/server/mutators/gamemode_arena.qc b/qcsrc/server/mutators/gamemode_arena.qc
index bb6312e..17b673a 100644
--- a/qcsrc/server/mutators/gamemode_arena.qc
+++ b/qcsrc/server/mutators/gamemode_arena.qc
@@ -156,6 +156,7 @@ MUTATOR_HOOKFUNCTION(arena_reset_map_players)
{
FOR_EACH_CLIENT(self)
{
+ self.killcount = 0;
if(self.spawned)
{
PutClientInServer();
diff --git a/qcsrc/server/mutators/gamemode_ca.qc b/qcsrc/server/mutators/gamemode_ca.qc
index f55c46e..0a89494 100644
--- a/qcsrc/server/mutators/gamemode_ca.qc
+++ b/qcsrc/server/mutators/gamemode_ca.qc
@@ -144,6 +144,7 @@ MUTATOR_HOOKFUNCTION(ca_PutClientInServer)
if(!allowed_to_spawn)
{
self.classname = "observer";
+ if(self.jointime != time) //not when connecting
if(!self.caplayer)
{
self.caplayer = 0.5;
@@ -158,6 +159,7 @@ MUTATOR_HOOKFUNCTION(ca_reset_map_players)
{
FOR_EACH_CLIENT(self)
{
+ self.killcount = 0;
if(self.caplayer)
{
self.classname = "player";
@@ -182,12 +184,8 @@ MUTATOR_HOOKFUNCTION(ca_reset_map_global)
MUTATOR_HOOKFUNCTION(ca_GetTeamCount)
{
- ca_teams = autocvar_g_ca_teams_override;
- if(ca_teams < 2)
- ca_teams = autocvar_g_ca_teams;
- ca_teams = bound(2, ca_teams, 4);
ret_float = ca_teams;
- return 1;
+ return 0;
}
MUTATOR_HOOKFUNCTION(ca_PlayerDies)
@@ -224,16 +222,14 @@ MUTATOR_HOOKFUNCTION(ca_GiveFragsForKill)
MUTATOR_HOOKFUNCTION(ca_SetStartItems)
{
- start_health = cvar("g_lms_start_health");
- start_armorvalue = cvar("g_lms_start_armor");
-
- start_ammo_shells = cvar("g_lms_start_ammo_shells");
- start_ammo_nails = cvar("g_lms_start_ammo_nails");
- start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
- start_ammo_cells = cvar("g_lms_start_ammo_cells");
- start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
-
start_items &= ~IT_UNLIMITED_AMMO;
+ start_health = warmup_start_health = cvar("g_lms_start_health");
+ start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor");
+ start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells");
+ start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails");
+ start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
+ start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells");
+ start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
return 0;
}
@@ -272,23 +268,17 @@ MUTATOR_HOOKFUNCTION(ca_PlayerDamage_SplitHealthArmor)
return FALSE;
}
-// scoreboard setup
-void ca_ScoreRules()
-{
- ScoreRules_basics(2, SFL_SORT_PRIO_PRIMARY, 0, TRUE);
- ScoreInfo_SetLabel_TeamScore (ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY);
- ScoreRules_basics_end();
-}
-
-void ca_DelayedInit() // Do this check with a delay so we can wait for teams to be set up.
-{
- ca_ScoreRules();
-}
-
void ca_Initialize()
{
allowed_to_spawn = TRUE;
+ ca_teams = autocvar_g_ca_teams_override;
+ if(ca_teams < 2)
+ ca_teams = autocvar_g_ca_teams;
+ ca_teams = bound(2, ca_teams, 4);
+ ret_float = ca_teams;
+ ScoreRules_ca(ca_teams);
+
round_handler_Spawn(CA_CheckTeams, CA_CheckWinner, CA_RoundStart);
round_handler_Init(5, autocvar_g_ca_warmup, autocvar_g_ca_round_timelimit);
@@ -296,8 +286,6 @@ void ca_Initialize()
addstat(STAT_BLUEALIVE, AS_INT, bluealive_stat);
addstat(STAT_YELLOWALIVE, AS_INT, yellowalive_stat);
addstat(STAT_PINKALIVE, AS_INT, pinkalive_stat);
-
- InitializeEntity(world, ca_DelayedInit, INITPRIO_GAMETYPE);
}
MUTATOR_DEFINITION(gamemode_ca)
diff --git a/qcsrc/server/mutators/gamemode_ca.qh b/qcsrc/server/mutators/gamemode_ca.qh
index a333952..a7c1edf 100644
--- a/qcsrc/server/mutators/gamemode_ca.qh
+++ b/qcsrc/server/mutators/gamemode_ca.qh
@@ -1,8 +1,2 @@
// should be removed in the future, as other code should not have to care
.float caplayer; // 0.5 if scheduled to join the next round
-
-#ifdef SVQC
-
-#define ST_CA_ROUNDS 1
-
-#endif
diff --git a/qcsrc/server/mutators/gamemode_freezetag.qc b/qcsrc/server/mutators/gamemode_freezetag.qc
index 0c22db0..406cf07 100644
--- a/qcsrc/server/mutators/gamemode_freezetag.qc
+++ b/qcsrc/server/mutators/gamemode_freezetag.qc
@@ -100,7 +100,10 @@ float freezetag_CheckWinner()
Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_OVER);
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_OVER);
FOR_EACH_PLAYER(e)
+ {
e.freezetag_frozen_timeout = 0;
+ e.freezetag_revive_progress = 0;
+ }
round_handler_Init(5, autocvar_g_freezetag_warmup, autocvar_g_freezetag_round_timelimit);
return 1;
}
@@ -123,7 +126,10 @@ float freezetag_CheckWinner()
}
FOR_EACH_PLAYER(e)
+ {
e.freezetag_frozen_timeout = 0;
+ e.freezetag_revive_progress = 0;
+ }
round_handler_Init(5, autocvar_g_freezetag_warmup, autocvar_g_freezetag_round_timelimit);
return 1;
}
@@ -401,6 +407,7 @@ MUTATOR_HOOKFUNCTION(freezetag_reset_map_players)
{
FOR_EACH_PLAYER(self)
{
+ self.killcount = 0;
if (self.freezetag_frozen)
freezetag_Unfreeze(world);
self.freezetag_frozen_timeout = -1;
@@ -468,7 +475,10 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink)
if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * max(1/60, autocvar_g_freezetag_revive_speed), 1);
- self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
+ if(warmup_stage)
+ self.health = max(1, self.freezetag_revive_progress * warmup_start_health);
+ else
+ self.health = max(1, self.freezetag_revive_progress * start_health);
if(self.freezetag_revive_progress >= 1)
{
@@ -509,7 +519,10 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink)
else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1);
- self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
+ if(warmup_stage)
+ self.health = max(1, self.freezetag_revive_progress * warmup_start_health);
+ else
+ self.health = max(1, self.freezetag_revive_progress * start_health);
}
else if(!n)
{
@@ -602,10 +615,6 @@ MUTATOR_HOOKFUNCTION(freezetag_SpectateCopy)
MUTATOR_HOOKFUNCTION(freezetag_GetTeamCount)
{
- freezetag_teams = autocvar_g_freezetag_teams_override;
- if(freezetag_teams < 2)
- freezetag_teams = autocvar_g_freezetag_teams;
- freezetag_teams = bound(2, freezetag_teams, 4);
ret_float = freezetag_teams;
return 0;
}
@@ -621,7 +630,12 @@ MUTATOR_HOOKFUNCTION(freezetag_VehicleTouch)
void freezetag_Initialize()
{
precache_model("models/ice/ice.md3");
- ScoreRules_freezetag();
+
+ freezetag_teams = autocvar_g_freezetag_teams_override;
+ if(freezetag_teams < 2)
+ freezetag_teams = autocvar_g_freezetag_teams;
+ freezetag_teams = bound(2, freezetag_teams, 4);
+ ScoreRules_freezetag(freezetag_teams);
round_handler_Spawn(freezetag_CheckTeams, freezetag_CheckWinner, func_null);
round_handler_Init(5, autocvar_g_freezetag_warmup, autocvar_g_freezetag_round_timelimit);
diff --git a/qcsrc/server/mutators/gamemode_lms.qc b/qcsrc/server/mutators/gamemode_lms.qc
index f980607..850b4e2 100644
--- a/qcsrc/server/mutators/gamemode_lms.qc
+++ b/qcsrc/server/mutators/gamemode_lms.qc
@@ -122,13 +122,13 @@ MUTATOR_HOOKFUNCTION(lms_GiveFragsForKill)
MUTATOR_HOOKFUNCTION(lms_SetStartItems)
{
start_items &= ~IT_UNLIMITED_AMMO;
- start_ammo_shells = cvar("g_lms_start_ammo_shells");
- start_ammo_nails = cvar("g_lms_start_ammo_nails");
- start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
- start_ammo_cells = cvar("g_lms_start_ammo_cells");
- start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
- start_health = cvar("g_lms_start_health");
- start_armorvalue = cvar("g_lms_start_armor");
+ start_health = warmup_start_health = cvar("g_lms_start_health");
+ start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor");
+ start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells");
+ start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails");
+ start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
+ start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells");
+ start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
return FALSE;
}
diff --git a/qcsrc/server/scores_rules.qc b/qcsrc/server/scores_rules.qc
index d60f456..e3649f6 100644
--- a/qcsrc/server/scores_rules.qc
+++ b/qcsrc/server/scores_rules.qc
@@ -106,12 +106,18 @@ void ScoreRules_nexball(float teams)
ScoreRules_basics_end();
}
-// FreezeTag stuff
#define SP_FREEZETAG_REVIVALS 4
-void ScoreRules_freezetag()
+void ScoreRules_freezetag(float teams)
{
- CheckAllowedTeams(world);
- ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY
+ ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY
ScoreInfo_SetLabel_PlayerScore(SP_FREEZETAG_REVIVALS, "revivals", 0);
ScoreRules_basics_end();
}
+
+#define ST_CA_ROUNDS 1
+void ScoreRules_ca(float teams)
+{
+ ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, 0, TRUE);
+ ScoreInfo_SetLabel_TeamScore(ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY);
+ ScoreRules_basics_end();
+}
diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc
index 81c877d..a9ce549 100644
--- a/qcsrc/server/teamplay.qc
+++ b/qcsrc/server/teamplay.qc
@@ -128,6 +128,8 @@ void InitGameplayMode()
fraglimit_override = autocvar_g_ca_point_limit;
leadlimit_override = autocvar_g_ca_point_leadlimit;
MUTATOR_ADD(gamemode_ca);
+ if(autocvar_g_ca_team_spawns)
+ have_team_spawns = -1; // request team spawns
}
if(g_keyhunt)
@@ -144,6 +146,8 @@ void InitGameplayMode()
fraglimit_override = autocvar_g_freezetag_point_limit;
leadlimit_override = autocvar_g_freezetag_point_leadlimit;
MUTATOR_ADD(gamemode_freezetag);
+ if(autocvar_g_freezetag_team_spawns)
+ have_team_spawns = -1; // request team spawns
}
if(g_assault)