]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/buffs/buffs.qh
Merge branch 'master' into Mario/csqc_muzzleflash
[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/mutators/mutator/waypoints/all.qh>
8 #endif
9
10 #ifdef GAMEQC
11 REGISTER_WAYPOINT(Buff, _("Buff"), "", '1 0.5 0', 1);
12 REGISTER_RADARICON(Buff, 1);
13 #endif
14
15 REGISTRY(Buffs, BITS(5))
16 REGISTER_REGISTRY(Buffs)
17 REGISTRY_CHECK(Buffs)
18
19 #define REGISTER_BUFF(id) \
20     REGISTER(Buffs, BUFF_##id, m_id, NEW(Buff))
21
22 #include <common/items/item/pickup.qh>
23 CLASS(Buff, Pickup)
24         /** bit index */
25         ATTRIB(Buff, m_itemid, int, 0);
26         ATTRIB(Buff, netname, string, "buff");
27         ATTRIB(Buff, m_color, vector, '1 1 1');
28         ATTRIB(Buff, m_name, string, "Buff");
29         ATTRIB(Buff, m_skin, int, 0);
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/buff_%s", cvar_string("menu_skin"), this.netname));
33         }
34 #ifdef SVQC
35         METHOD(Buff, m_time, float(Buff this))
36         { return cvar(strcat("g_buffs_", this.netname, "_time")); }
37 #endif
38 ENDCLASS(Buff)
39
40 STATIC_INIT(REGISTER_BUFFS) {
41         FOREACH(Buffs, true, {
42                 it.m_itemid = BIT(it.m_id - 1);
43                 it.m_sprite = strzone(strcat("buff-", it.netname));
44         });
45 }
46
47 #ifdef SVQC
48         void buff_Init(entity ent);
49         void buff_Init_Compat(entity ent, entity replacement);
50         #define BUFF_SPAWNFUNC(e, b, t) spawnfunc(item_buff_##e) { \
51                 STAT(BUFFS, this) = b.m_itemid; \
52                 this.team = t; \
53                 buff_Init(this); \
54         }
55         #define BUFF_SPAWNFUNCS(e, b)                       \
56                         BUFF_SPAWNFUNC(e,           b,  0)          \
57                         BUFF_SPAWNFUNC(e##_team1,   b,  NUM_TEAM_1) \
58                         BUFF_SPAWNFUNC(e##_team2,   b,  NUM_TEAM_2) \
59                         BUFF_SPAWNFUNC(e##_team3,   b,  NUM_TEAM_3) \
60                         BUFF_SPAWNFUNC(e##_team4,   b,  NUM_TEAM_4)
61         #define BUFF_SPAWNFUNC_Q3TA_COMPAT(o, r) spawnfunc(item_##o) { buff_Init_Compat(this, r); }
62 #else
63         #define BUFF_SPAWNFUNC(e, b, t)
64         #define BUFF_SPAWNFUNCS(e, b)
65         #define BUFF_SPAWNFUNC_Q3TA_COMPAT(o, r)
66 #endif
67
68 string Buff_UndeprecateName(string buffname);
69 entity buff_FirstFromFlags(int _buffs);
70
71 REGISTER_BUFF(Null);
72 BUFF_SPAWNFUNCS(random, BUFF_Null)
73
74 REGISTRY_DEFINE_GET(Buffs, BUFF_Null)
75 #include "all.inc"