#include "ctf.qh"
+#include <common/items/item/pickup.qh>
+#include <common/mutators/base.qh>
#include <common/gamemodes/sv_rules.qh>
+CLASS(Flag, Pickup)
+ ATTRIB(Flag, m_mins, vector, (PL_MIN_CONST + '0 0 -13') * 1.4); // scaling be damned
+ ATTRIB(Flag, m_maxs, vector, (PL_MAX_CONST + '0 0 -13') * 1.4);
+ENDCLASS(Flag)
+Flag CTF_FLAG;
void ctf_Initialize();
+int autocvar_captureleadlimit_override;
+int autocvar_capturelimit_override;
+
REGISTER_MUTATOR(ctf, false)
{
MUTATOR_STATIC();
// score rule declarations
const int ST_CTF_CAPS = 1;
-CLASS(Flag, Pickup)
- ATTRIB(Flag, m_mins, vector, (PL_MIN_CONST + '0 0 -13') * 1.4); // scaling be damned
- ATTRIB(Flag, m_maxs, vector, (PL_MAX_CONST + '0 0 -13') * 1.4);
-ENDCLASS(Flag)
-Flag CTF_FLAG;
-STATIC_INIT(Flag) { CTF_FLAG = NEW(Flag); }
void ctf_FlagTouch(entity this, entity toucher) { ITEM_HANDLE(Pickup, CTF_FLAG, this, toucher); }
// flag constants // for most of these, there is just one question to be asked: WHYYYYY?
.float score_return;
.float score_team_capture; // shouldn't be too high
+// property set on objects to point to the flag they're carrying (if any)
+.entity flagcarried;
+
// effects
.string toucheffect;
.string passeffect;
// team checking
#define CTF_SAMETEAM(a,b) ((autocvar_g_ctf_reverse || (ctf_oneflag && autocvar_g_ctf_oneflag_reverse)) ? DIFF_TEAM(a,b) : SAME_TEAM(a,b))
#define CTF_DIFFTEAM(a,b) ((autocvar_g_ctf_reverse || (ctf_oneflag && autocvar_g_ctf_oneflag_reverse)) ? SAME_TEAM(a,b) : DIFF_TEAM(a,b))
+#define CTF_IS_NEAR(player, it, extra_size) \
+ boxesoverlap(player.absmin - extra_size, player.absmax + extra_size, it.absmin, it.absmax)