3 #include <common/teams.qh>
4 #include <common/util.qh>
7 #include <common/items/item.qh>
8 #include <common/mutators/mutator/waypoints/all.qh>
12 REGISTER_WAYPOINT(Buff, _("Buff"), "", '1 0.5 0', 1);
13 REGISTER_RADARICON(Buff, 1);
16 #define REGISTER_BUFF(id, inst) \
17 REGISTER(StatusEffect, BUFF_##id, m_id, inst)
19 #include <common/mutators/mutator/status_effects/_mod.qh>
20 CLASS(Buff, StatusEffects)
22 ATTRIB(Buff, m_itemid, int, IT_BUFF);
24 ATTRIB(Buff, netname, string, "buff");
25 ATTRIB(Buff, m_icon, string, "buff");
26 ATTRIB(Buff, m_color, vector, '1 1 1');
27 ATTRIB(Buff, m_name, string, "Buff");
28 ATTRIB(Buff, m_skin, int, 0);
29 ATTRIB(Buff, m_lifetime, float, 60);
30 ATTRIB(Buff, m_sprite, string, "");
31 METHOD(Buff, display, void(entity this, void(string name, string icon) returns)) {
32 returns(this.m_name, sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.m_icon));
35 METHOD(Buff, m_time, float(Buff this))
36 { return cvar(strcat("g_buffs_", this.netname, "_time")); }
40 STATIC_INIT(REGISTER_BUFFS) {
41 FOREACH(StatusEffect, it.instanceOfBuff, {
42 it.m_sprite = strzone(strcat("buff-", it.netname));
49 void buff_Init(entity ent);
50 void buff_Init_Compat(entity ent, entity replacement);
51 #define BUFF_SPAWNFUNC(e, b, t) spawnfunc(item_buff_##e) { \
54 this.team_forced = t; \
57 #define BUFF_SPAWNFUNCS(e, b) \
58 BUFF_SPAWNFUNC(e, b, 0) \
59 BUFF_SPAWNFUNC(e##_team1, b, NUM_TEAM_1) \
60 BUFF_SPAWNFUNC(e##_team2, b, NUM_TEAM_2) \
61 BUFF_SPAWNFUNC(e##_team3, b, NUM_TEAM_3) \
62 BUFF_SPAWNFUNC(e##_team4, b, NUM_TEAM_4)
63 #define BUFF_SPAWNFUNC_Q3COMPAT(o, r) spawnfunc(o) { buff_Init_Compat(this, r); }
65 #define BUFF_SPAWNFUNC(e, b, t)
66 #define BUFF_SPAWNFUNCS(e, b)
67 #define BUFF_SPAWNFUNC_Q3COMPAT(o, r)
70 string Buff_UndeprecateName(string buffname);
72 BUFF_SPAWNFUNCS(random, NULL)
77 REPLICATE_INIT(bool, cvar_cl_buffs_autoreplace);