#pragma once
+//int autocvar_leadlimit;
+int autocvar_leadlimit_and_fraglimit;
+int autocvar_leadlimit_override;
+
// TODO: find a better location for these?
-float total_players;
-float redalive, bluealive, yellowalive, pinkalive;
+int total_players;
+
+.int ingame;
+#define INGAME_STATUS_NONE 0
+#define INGAME_STATUS_JOINING 0.5
+#define INGAME_STATUS_JOINED 1
+
+// typically used by game modes that temporarily turn players into spectators/observers
+// when they are eliminated but keeping them "in game", i.e. listed among players
+#define INGAME_STATUS_SET(it, s) (it).ingame = s
+#define INGAME_STATUS_CLEAR(it) INGAME_STATUS_SET(it, INGAME_STATUS_NONE)
+
+#define INGAME(it) ((it).ingame)
+#define INGAME_JOINED(it) ((it).ingame == INGAME_STATUS_JOINED)
+#define INGAME_JOINING(it) ((it).ingame == INGAME_STATUS_JOINING)
+
// todo: accept the number of teams as a parameter
void GameRules_teams(bool value);
* @param spprio player score priority (if frags aren't enabled)
* @param stprio team score priority (if frags aren't enabled)
*/
-#define GameRules_scoring(teams, spprio, stprio, fields) MACRO_BEGIN { \
+#define GameRules_scoring(teams, spprio, stprio, fields) MACRO_BEGIN \
_GameRules_scoring_begin((teams), (spprio), (stprio)); \
noref void(entity, string, float) field = _GameRules_scoring_field; \
/* todo: just have the one `field` function */ \
noref void(int, string, float) field_team = _GameRules_scoring_field_team; \
LAMBDA(fields); \
_GameRules_scoring_end(); \
-} MACRO_END
+MACRO_END
void _GameRules_scoring_begin(int teams, float spprio, float stprio);
void _GameRules_scoring_field(entity i, string label, int scoreflags);
void GameRules_scoring_vip(entity player, bool value);
bool GameRules_scoring_is_vip(entity player);
+#define GameRules_scoring_add_float2int(client, fld, value, float_field, score_factor) \
+ _GameRules_scoring_add_float2int(client, SP_##fld, value, float_field, score_factor)
+float _GameRules_scoring_add_float2int(entity client, entity sp, float value, .float field, float score_factor);
#define GameRules_scoring_add(client, fld, value) _GameRules_scoring_add(client, SP_##fld, value)
float _GameRules_scoring_add(entity client, entity sp, float value);
#define GameRules_scoring_add_team(client, fld, value) _GameRules_scoring_add_team(client, SP_##fld, ST_##fld, value)