]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/ca_ft_fixes
authorterencehill <piuntn@gmail.com>
Tue, 18 Jun 2013 15:33:00 +0000 (17:33 +0200)
committerterencehill <piuntn@gmail.com>
Tue, 18 Jun 2013 15:33:00 +0000 (17:33 +0200)
gamemodes.cfg
qcsrc/server/autocvars.qh
qcsrc/server/cl_impulse.qc
qcsrc/server/g_world.qc
qcsrc/server/mutators/gamemode_arena.qc
qcsrc/server/mutators/gamemode_ca.qc
qcsrc/server/mutators/gamemode_ca.qh
qcsrc/server/mutators/gamemode_freezetag.qc
qcsrc/server/mutators/gamemode_lms.qc
qcsrc/server/scores_rules.qc
qcsrc/server/teamplay.qc

index a1ad723d2748dd155db645f1f44ec0a633cd9bdb..2b032f773f7ceeb17361678a0d41227cd154fb23 100644 (file)
@@ -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"
 
 
@@ -278,10 +279,11 @@ seta g_freezetag_point_leadlimit -1       "Freeze Tag point lead limit overriding the
 set g_freezetag_revive_speed 0.4 "Speed for reviving a frozen teammate"
 set g_freezetag_revive_clearspeed 1.6 "Speed at which reviving progress gets lost when out of range"
 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_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
 
 
index dead5a9d4b360d924a0642f4b21fe0161e734ccd..c57663ddf53571895868bc47441ba265ea317a0e 100644 (file)
@@ -349,7 +349,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;
@@ -711,6 +710,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")
index 3288bbc72a9af3b52cfcc56c64e44ddd8df4b4cd..d997409e2391fd05bfc34239a14c025db28964fc 100644 (file)
@@ -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
index 3043a30003a590f713fc6561074605fbf31d236f..39e9d446ff8f058a30d56ce0d470e0f6da6a824a 100644 (file)
@@ -1911,7 +1911,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)
index 46b8faccc182bc60f5c8b997df036e77c0535196..a102b5bb0ea49b978170e3e876eda60e2b2736e4 100644 (file)
@@ -156,6 +156,7 @@ MUTATOR_HOOKFUNCTION(arena_reset_map_players)
 {
        FOR_EACH_CLIENT(self)
        {
+               self.killcount = 0;
                if(self.spawned)
                {
                        PutClientInServer();
index 7c8c1cb77c62c8d451e5fa7f0def6c9cc5e5e019..457654a5722fd4f488e678ce30f31a605b56da09 100644 (file)
@@ -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,37 +222,29 @@ 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;
 }
 
-// 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);
 
@@ -262,8 +252,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)
index a33395254bef0a82abefaebe7ed17b88d9c3b426..a7c1edfc53870a43666b596eac2f533dc2ebab7b 100644 (file)
@@ -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
index 82147826ee56345cad3162601515a20c05e631db..dbbebbb3b0c30fa13f0b7ffc18b8469d600a5490 100644 (file)
@@ -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(inWarmupStage)
+                       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(inWarmupStage)
+                       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)
        {
@@ -575,10 +588,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;
 }
@@ -594,7 +603,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);
index 193b5378ecf594af3e08e5891e1fe216a531f28d..1684c998863990fe8229eae6b8b77fa5ffaf56b7 100644 (file)
@@ -174,13 +174,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;
 }
index d60f4563c1cfdbf937982c9046ed66cc2f264423..e3649f611b0df0d7188028d9b8e885157a4c809e 100644 (file)
@@ -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();
+}
index 0ba1e7c8481db848019a0f856fdf70ee236e0b32..30a526bc6de2176dc8b0572fe3ddc1ebc92224c6 100644 (file)
@@ -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)