5 #define REGISTER_SP(id) REGISTER(Scores, SP, id, m_id, new_pure(PlayerScoreField))
6 REGISTRY(Scores, MAX_SCORE);
7 #define Scores_from(i) _Scores_from(i, NULL)
8 REGISTER_REGISTRY(Scores)
10 REGISTRY_CHECK(Scores);
11 STATIC_INIT(Scores_renumber) { FOREACH(Scores, true, it.m_id = i); }
17 // game mode specific indices are not in common/, but in server/scores_rules.qc!
27 REGISTER_SP(SEPARATOR);
32 REGISTER_SP(DMGTAKEN);
36 REGISTER_SP(SUICIDES);
41 // TODO: move to common mutators
43 REGISTER_SP(RACE_TIME);
44 REGISTER_SP(RACE_LAPS);
45 REGISTER_SP(RACE_FASTEST);
47 //REGISTER_SP(CTS_TIME);
48 //REGISTER_SP(CTS_LAPS);
49 //REGISTER_SP(CTS_FASTEST);
51 REGISTER_SP(ASSAULT_OBJECTIVES);
53 REGISTER_SP(CTF_PICKUPS);
54 REGISTER_SP(CTF_FCKILLS);
55 REGISTER_SP(CTF_RETURNS);
56 REGISTER_SP(CTF_CAPS);
57 REGISTER_SP(CTF_CAPTIME);
58 REGISTER_SP(CTF_DROPS);
60 REGISTER_SP(DOM_TAKES);
61 REGISTER_SP(DOM_TICKS);
63 REGISTER_SP(FREEZETAG_REVIVALS);
65 REGISTER_SP(KEEPAWAY_PICKUPS);
66 REGISTER_SP(KEEPAWAY_BCTIME);
67 REGISTER_SP(KEEPAWAY_CARRIERKILLS);
69 REGISTER_SP(KH_PICKUPS);
71 REGISTER_SP(KH_KCKILLS);
72 REGISTER_SP(KH_PUSHES);
73 REGISTER_SP(KH_DESTROYS);
74 REGISTER_SP(KH_LOSSES);
76 REGISTER_SP(LMS_RANK);
77 REGISTER_SP(LMS_LIVES);
79 REGISTER_SP(NEXBALL_GOALS);
80 REGISTER_SP(NEXBALL_FAULTS);
82 REGISTER_SP(ONS_TAKES);
83 REGISTER_SP(ONS_CAPS);
87 // the stuff you don't need to see
90 * Lower scores are better (e.g. suicides)
92 const int SFL_LOWER_IS_BETTER = BIT(0);
95 * Don't show zero values as scores
97 const int SFL_HIDE_ZERO = BIT(1);
100 * Allow a column to be hidden (do not automatically add it even if it is a sorting key)
102 const int SFL_ALLOW_HIDE = BIT(4);
105 * Display as a rank (with st, nd, rd, th suffix)
107 const int SFL_RANK = BIT(5);
110 * Display as mm:ss.s, value is stored as 10ths of a second (AND 0 is the worst possible value!)
112 const int SFL_TIME = BIT(6);
114 // not an extra constant yet
115 #define SFL_ZERO_IS_WORST SFL_TIME
118 * Scoring priority (NOTE: PRIMARY is used for fraglimit)
120 const int SFL_SORT_PRIO_SECONDARY = 4;
121 const int SFL_SORT_PRIO_PRIMARY = 8;
122 const int SFL_SORT_PRIO_MASK = 12;
124 #define IS_INCREASING(x) ( (x) & SFL_LOWER_IS_BETTER )
125 #define IS_DECREASING(x) ( !((x) & SFL_LOWER_IS_BETTER) )
127 USING(PlayerScoreField, entity);
128 .int _scores[MAX_SCORE];
132 #define scores(this) _scores[(this).m_id]
133 #define scores_label(this) ((this).m_name)
134 #define scores_flags(this) ((this).m_flags)
136 #define MAX_TEAMSCORE 2
137 USING(ScoreTeam, string);
138 .int _teamscores[MAX_TEAMSCORE];
139 #define teamscores(i) _teamscores[i]
140 string _teamscores_label[MAX_TEAMSCORE];
141 #define teamscores_label(i) _teamscores_label[i]
142 int _teamscores_flags[MAX_TEAMSCORE];
143 #define teamscores_flags(i) _teamscores_flags[i]
145 const int ST_SCORE = 0;