]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/mutators/mutator/gamemode_ca.qh
Merge branch 'master' into Lyberta/PrintMove
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator / gamemode_ca.qh
1 #pragma once
2
3 #include "../gamemode.qh"
4
5 int autocvar_g_ca_point_limit;
6 int autocvar_g_ca_point_leadlimit;
7 float autocvar_g_ca_round_timelimit;
8 bool autocvar_g_ca_team_spawns;
9 //int autocvar_g_ca_teams;
10 int autocvar_g_ca_teams_override;
11 float autocvar_g_ca_warmup;
12
13
14 int ca_teams;
15 bool allowed_to_spawn;
16
17 const int ST_CA_ROUNDS = 1;
18
19 bool CA_CheckTeams();
20 bool CA_CheckWinner();
21 void CA_RoundStart();
22 bool ca_isEliminated(entity e);
23
24 REGISTER_MUTATOR(ca, false)
25 {
26     MUTATOR_STATIC();
27         MUTATOR_ONADD
28         {
29                 GameRules_teams(true);
30         GameRules_spawning_teams(autocvar_g_ca_team_spawns);
31         GameRules_limit_score(autocvar_g_ca_point_limit);
32         GameRules_limit_lead(autocvar_g_ca_point_leadlimit);
33
34                 ca_teams = autocvar_g_ca_teams_override;
35                 if (ca_teams < 2)
36                         ca_teams = cvar("g_ca_teams"); // read the cvar directly as it gets written earlier in the same frame
37
38                 ca_teams = BITS(bound(2, ca_teams, 4));
39         GameRules_scoring(ca_teams, SFL_SORT_PRIO_PRIMARY, 0, {
40             field_team(ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY);
41         });
42
43                 allowed_to_spawn = true;
44                 round_handler_Spawn(CA_CheckTeams, CA_CheckWinner, CA_RoundStart);
45                 round_handler_Init(5, autocvar_g_ca_warmup, autocvar_g_ca_round_timelimit);
46                 EliminatedPlayers_Init(ca_isEliminated);
47         }
48         return 0;
49 }
50
51 // should be removed in the future, as other code should not have to care
52 .float caplayer; // 0.5 if scheduled to join the next round