]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/buffs/buffs.qh
Improve cl_gunalign cvar description
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / buffs / buffs.qh
1 #pragma once
2
3 #include <common/teams.qh>
4 #include <common/util.qh>
5
6 #ifdef GAMEQC
7 #include <common/items/item.qh>
8 #include <common/mutators/mutator/waypoints/all.qh>
9 #endif
10
11 #define REGISTER_BUFF(id, inst) \
12     REGISTER(StatusEffect, BUFF_##id, m_id, inst)
13
14 #include <common/mutators/mutator/status_effects/_mod.qh>
15 CLASS(Buff, StatusEffects)
16 #ifdef GAMEQC
17         ATTRIB(Buff, m_itemid, int, IT_BUFF);
18 #endif
19         ATTRIB(Buff, netname, string, "buff");
20         ATTRIB(Buff, m_icon, string, "buff");
21         ATTRIB(Buff, m_color, vector, '1 1 1');
22         ATTRIB(Buff, m_name, string, "Buff");
23         ATTRIB(Buff, m_skin, int, 0);
24         ATTRIB(Buff, m_lifetime, float, 60);
25         ATTRIB(Buff, m_sprite, string, "");
26         METHOD(Buff, display, void(entity this, void(string name, string icon) returns)) {
27                 returns(this.m_name, sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.m_icon));
28         }
29 #ifdef SVQC
30         METHOD(Buff, m_time, float(Buff this))
31         { return cvar(strcat("g_buffs_", this.netname, "_time")); }
32 #endif
33 ENDCLASS(Buff)
34
35 STATIC_INIT(REGISTER_BUFFS) {
36         FOREACH(StatusEffect, it.instanceOfBuff, {
37                 it.m_sprite = strzone(strcat("buff-", it.netname));
38         });
39 }
40
41 #ifdef SVQC
42         .entity buffdef;
43         .int team_forced;
44         void buff_Init(entity ent);
45         void buff_Init_Compat(entity ent, entity replacement);
46         #define BUFF_SPAWNFUNC(e, b, t) spawnfunc(item_buff_##e) { \
47                 this.buffdef = b; \
48                 if(teamplay) \
49                         this.team_forced = t; \
50                 buff_Init(this); \
51         }
52         #define BUFF_SPAWNFUNCS(e, b)                       \
53                         BUFF_SPAWNFUNC(e,           b,  0)          \
54                         BUFF_SPAWNFUNC(e##_team1,   b,  NUM_TEAM_1) \
55                         BUFF_SPAWNFUNC(e##_team2,   b,  NUM_TEAM_2) \
56                         BUFF_SPAWNFUNC(e##_team3,   b,  NUM_TEAM_3) \
57                         BUFF_SPAWNFUNC(e##_team4,   b,  NUM_TEAM_4)
58         #define BUFF_SPAWNFUNC_Q3COMPAT(o, r) spawnfunc(o) { buff_Init_Compat(this, r); }
59 #else
60         #define BUFF_SPAWNFUNC(e, b, t)
61         #define BUFF_SPAWNFUNCS(e, b)
62         #define BUFF_SPAWNFUNC_Q3COMPAT(o, r)
63 #endif
64
65 string Buff_CompatName(string buffname);
66
67 BUFF_SPAWNFUNCS(random, NULL)
68
69 #include "all.inc"
70
71 #ifdef GAMEQC
72 REPLICATE_INIT(bool, cvar_cl_buffs_autoreplace);
73 #endif