]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/scores_rules.qc
Merge remote-tracking branch 'origin/master' into samual/mutator_ctf
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / scores_rules.qc
1 float c1, c2, c3, c4;
2 void CheckAllowedTeams (entity for_whom);
3
4 // NOTE: SP_ constants may not be >= MAX_SCORE; ST_constants may not be >= MAX_TEAMSCORE
5 // scores that should be in all modes:
6 float ScoreRules_teams;
7 void ScoreRules_basics(float teams, float sprio, float stprio, float score_enabled)
8 {
9         float i;
10         for(i = 0; i < MAX_SCORE; ++i)
11                 ScoreInfo_SetLabel_PlayerScore(i, "", 0);
12         for(i = 0; i < MAX_TEAMSCORE; ++i)
13                 ScoreInfo_SetLabel_TeamScore(i, "", 0);
14
15         ScoreRules_teams = teams;
16
17         if(score_enabled)
18                 ScoreInfo_SetLabel_TeamScore  (ST_SCORE,        "score",     stprio);
19
20         if not(INDEPENDENT_PLAYERS)
21                 ScoreInfo_SetLabel_PlayerScore(SP_KILLS,        "kills",     0);
22
23         ScoreInfo_SetLabel_PlayerScore(SP_DEATHS,       "deaths",    SFL_LOWER_IS_BETTER);
24
25         if not(INDEPENDENT_PLAYERS)
26                 ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES,     "suicides",  SFL_LOWER_IS_BETTER);
27
28         if(score_enabled)
29                 ScoreInfo_SetLabel_PlayerScore(SP_SCORE,        "score",     sprio);
30 }
31 void ScoreRules_basics_end()
32 {
33         ScoreInfo_Init(ScoreRules_teams);
34 }
35 void ScoreRules_generic()
36 {
37         if(teamplay)
38         {
39                 CheckAllowedTeams(world);
40                 ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE);
41         }
42         else
43                 ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE);
44         ScoreRules_basics_end();
45 }
46
47 // g_ctf
48 #define ST_CTF_CAPS 1
49 #define SP_CTF_CAPS 4
50 #define SP_CTF_CAPTIME 5
51 #define SP_CTF_PICKUPS 6
52 #define SP_CTF_DROPS 7
53 #define SP_CTF_FCKILLS 8
54 #define SP_CTF_RETURNS 9
55 void ScoreRules_ctf()
56 {
57         CheckAllowedTeams(world);
58         ScoreRules_basics(2, SFL_SORT_PRIO_PRIMARY, 0, TRUE);
59         ScoreInfo_SetLabel_TeamScore  (ST_CTF_CAPS,     "caps",      SFL_SORT_PRIO_PRIMARY);
60         ScoreInfo_SetLabel_PlayerScore(SP_CTF_CAPS,     "caps",      SFL_SORT_PRIO_SECONDARY);
61         ScoreInfo_SetLabel_PlayerScore(SP_CTF_CAPTIME,  "captime",   SFL_LOWER_IS_BETTER | SFL_TIME);
62         ScoreInfo_SetLabel_PlayerScore(SP_CTF_PICKUPS,  "pickups",   0);
63         ScoreInfo_SetLabel_PlayerScore(SP_CTF_FCKILLS,  "fckills",   0);
64         ScoreInfo_SetLabel_PlayerScore(SP_CTF_RETURNS,  "returns",   0);
65         ScoreInfo_SetLabel_PlayerScore(SP_CTF_DROPS,    "drops",     SFL_LOWER_IS_BETTER);
66         ScoreRules_basics_end();
67 }
68
69 // g_domination
70 #define ST_DOM_TICKS 1
71 #define SP_DOM_TICKS 4
72 #define SP_DOM_TAKES 5
73 void ScoreRules_dom()
74 {
75         float sp_domticks, sp_score;
76         sp_score = sp_domticks = 0;
77         if(autocvar_g_domination_disable_frags)
78                 sp_domticks = SFL_SORT_PRIO_PRIMARY;
79         else
80                 sp_score = SFL_SORT_PRIO_PRIMARY;
81         CheckAllowedTeams(world);
82         ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), sp_score, sp_score, TRUE);
83         ScoreInfo_SetLabel_TeamScore  (ST_DOM_TICKS,    "ticks",     sp_domticks);
84         ScoreInfo_SetLabel_PlayerScore(SP_DOM_TICKS,    "ticks",     sp_domticks);
85         ScoreInfo_SetLabel_PlayerScore(SP_DOM_TAKES,    "takes",     0);
86         ScoreRules_basics_end();
87 }
88
89 // LMS stuff
90 #define SP_LMS_LIVES 4
91 #define SP_LMS_RANK 5
92 void ScoreRules_lms()
93 {
94         ScoreRules_basics(0, 0, 0, FALSE);
95         ScoreInfo_SetLabel_PlayerScore(SP_LMS_LIVES,    "lives",     SFL_SORT_PRIO_SECONDARY);
96         ScoreInfo_SetLabel_PlayerScore(SP_LMS_RANK,     "rank",      SFL_LOWER_IS_BETTER | SFL_RANK | SFL_SORT_PRIO_PRIMARY | SFL_ALLOW_HIDE);
97         ScoreRules_basics_end();
98 }
99
100 // Key hunt stuff
101 #define ST_KH_CAPS 1
102 #define SP_KH_CAPS 4
103 #define SP_KH_PUSHES 5
104 #define SP_KH_DESTROYS 6
105 #define SP_KH_PICKUPS 7
106 #define SP_KH_KCKILLS 8
107 #define SP_KH_LOSSES 9
108 void ScoreRules_kh(float teams)
109 {
110         ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE);
111         ScoreInfo_SetLabel_TeamScore  (ST_KH_CAPS,      "caps",      SFL_SORT_PRIO_SECONDARY);
112         ScoreInfo_SetLabel_PlayerScore(SP_KH_CAPS,      "caps",      SFL_SORT_PRIO_SECONDARY);
113         ScoreInfo_SetLabel_PlayerScore(SP_KH_PUSHES,    "pushes",    0);
114         ScoreInfo_SetLabel_PlayerScore(SP_KH_DESTROYS,  "destroyed", SFL_LOWER_IS_BETTER);
115         ScoreInfo_SetLabel_PlayerScore(SP_KH_PICKUPS,   "pickups",   0);
116         ScoreInfo_SetLabel_PlayerScore(SP_KH_KCKILLS,   "kckills",   0);
117         ScoreInfo_SetLabel_PlayerScore(SP_KH_LOSSES,    "losses",    SFL_LOWER_IS_BETTER);
118         ScoreRules_basics_end();
119 }
120
121 // Race stuff
122 #define ST_RACE_LAPS 1
123 #define SP_RACE_LAPS 4
124 #define SP_RACE_FASTEST 5
125 #define SP_RACE_TIME 5
126 //#define SP_RACE_RANK 6
127 void ScoreRules_race()
128 {
129         ScoreRules_basics(race_teams, 0, 0, FALSE);
130         if(race_teams)
131         {
132                 ScoreInfo_SetLabel_TeamScore(  ST_RACE_LAPS,    "laps",      SFL_SORT_PRIO_PRIMARY);
133                 ScoreInfo_SetLabel_PlayerScore(SP_RACE_LAPS,    "laps",      SFL_SORT_PRIO_PRIMARY);
134                 ScoreInfo_SetLabel_PlayerScore(SP_RACE_TIME,    "time",      SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME);
135                 //ScoreInfo_SetLabel_PlayerScore(SP_RACE_RANK,    "rank",      SFL_LOWER_IS_BETTER | SFL_RANK | SFL_ALLOW_HIDE);
136         }
137         else if(g_race_qualifying)
138         {
139                 ScoreInfo_SetLabel_PlayerScore(SP_RACE_FASTEST, "fastest",   SFL_SORT_PRIO_PRIMARY | SFL_LOWER_IS_BETTER | SFL_TIME);
140         }
141         else
142         {
143                 //ScoreInfo_SetLabel_TeamScore(  ST_RACE_LAPS,    "laps",      0);
144                 ScoreInfo_SetLabel_PlayerScore(SP_RACE_LAPS,    "laps",      SFL_SORT_PRIO_PRIMARY);
145                 ScoreInfo_SetLabel_PlayerScore(SP_RACE_TIME,    "time",      SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER | SFL_TIME);
146         }
147         ScoreRules_basics_end();
148 }
149
150 // Assault stuff
151 #define ST_ASSAULT_OBJECTIVES 1
152 #define SP_ASSAULT_OBJECTIVES 4
153 void ScoreRules_assault()
154 {
155         ScoreRules_basics(2, SFL_SORT_PRIO_SECONDARY, SFL_SORT_PRIO_SECONDARY, TRUE);
156         ScoreInfo_SetLabel_TeamScore(  ST_ASSAULT_OBJECTIVES,    "objectives",      SFL_SORT_PRIO_PRIMARY);
157         ScoreInfo_SetLabel_PlayerScore(SP_ASSAULT_OBJECTIVES,    "objectives",      SFL_SORT_PRIO_PRIMARY);
158         ScoreRules_basics_end();
159 }
160
161 // Nexball stuff
162 #define ST_NEXBALL_GOALS 1
163 #define SP_NEXBALL_GOALS 4
164 #define SP_NEXBALL_FAULTS 5
165 void ScoreRules_nexball(float teams)
166 {
167         ScoreRules_basics(teams, 0, 0, TRUE);
168         ScoreInfo_SetLabel_TeamScore(   ST_NEXBALL_GOALS,  "goals", SFL_SORT_PRIO_PRIMARY);
169         ScoreInfo_SetLabel_PlayerScore( SP_NEXBALL_GOALS,  "goals", SFL_SORT_PRIO_PRIMARY);
170         ScoreInfo_SetLabel_PlayerScore(SP_NEXBALL_FAULTS, "faults", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER);
171         ScoreRules_basics_end();
172 }
173
174 // Keep Away stuff
175 #define SP_KEEPAWAY_PICKUPS 4
176 #define SP_KEEPAWAY_CARRIERKILLS 5
177 #define SP_KEEPAWAY_BCTIME 6
178 void ScoreRules_keepaway()
179 {
180         ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, 0, TRUE); // SFL_SORT_PRIO_PRIMARY
181         ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_PICKUPS,                     "pickups",              0);
182         ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_CARRIERKILLS,        "bckills",              0);
183         ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_BCTIME,                      "bctime",                       SFL_SORT_PRIO_SECONDARY);
184         ScoreRules_basics_end();
185 }
186
187 // FreezeTag stuff
188 #define SP_FREEZETAG_REVIVALS 4
189 void ScoreRules_freezetag()
190 {
191         CheckAllowedTeams(world);
192         ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY
193         ScoreInfo_SetLabel_PlayerScore(SP_FREEZETAG_REVIVALS,           "revivals",             0);
194         ScoreRules_basics_end();
195 }