]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/buffs.qh
b61d5307de0745f40505ccc6d0fdd444b16fa09a
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / buffs.qh
1 entity Buff_Type_first;
2 entity Buff_Type_last;
3 .entity enemy; // internal next pointer
4
5 var float BUFF_LAST = 1;
6
7 .float items; // buff ID
8 .string netname; // buff name
9 .string message; // human readable name
10 .vector colormod; // buff color
11 .float skin; // buff skin
12
13 #define REGISTER_BUFF(hname,sname,NAME,bskin,bcolor) \
14         var float BUFF_##NAME; \
15         var entity Buff_Type##sname; \
16         void RegisterBuffs_##sname() \
17         { \
18                 BUFF_##NAME = BUFF_LAST * 2; \
19                 BUFF_LAST = BUFF_##NAME; \
20                 Buff_Type##sname = spawn(); \
21                 Buff_Type##sname.items = BUFF_##NAME; \
22                 Buff_Type##sname.netname = #sname; \
23                 Buff_Type##sname.message = hname; \
24                 Buff_Type##sname.skin = bskin; \
25                 Buff_Type##sname.colormod = bcolor; \
26                 if(!Buff_Type_first) \
27                         Buff_Type_first = Buff_Type##sname; \
28                 if(Buff_Type_last) \
29                         Buff_Type_last.enemy = Buff_Type##sname; \
30                 Buff_Type_last = Buff_Type##sname; \
31         } \
32         ACCUMULATE_FUNCTION(RegisterBuffs, RegisterBuffs_##sname)
33
34 REGISTER_BUFF(_("Ammo"),ammo,AMMO,3,'0.2 1 0.2');
35 REGISTER_BUFF(_("Resistance"),resistance,RESISTANCE,0,'0.3 0.2 1');
36 REGISTER_BUFF(_("Speed"),speed,SPEED,9,'1 1 0.2');
37 REGISTER_BUFF(_("Medic"),medic,MEDIC,1,'1 0.3 1');
38 REGISTER_BUFF(_("Bash"),bash,BASH,5,'1 0.4 0');
39 REGISTER_BUFF(_("Vampire"),vampire,VAMPIRE,2,'1 0.15 0');
40 REGISTER_BUFF(_("Disability"),disability,DISABILITY,7,'0.66 0.66 0.73');
41 REGISTER_BUFF(_("Vengeance"),vengeance,VENGEANCE,15,'0.55 0.5 1');
42 REGISTER_BUFF(_("Jump"),jump,JUMP,10,'0.7 0.2 1');
43 REGISTER_BUFF(_("Flight"),flight,FLIGHT,11,'1 0.2 0.5');
44 REGISTER_BUFF(_("Invisible"),invisible,INVISIBLE,12,'0.9 0.9 0.9');
45
46 #ifdef SVQC
47 .float buffs;
48 void buff_Init(entity ent);
49 void buff_Init_Compat(entity ent, float replacement);
50
51 #define BUFF_SPAWNFUNC(e,b,t) void spawnfunc_item_buff_##e() { self.buffs = b; self.team = t; buff_Init(self); }
52 #define BUFF_SPAWNFUNC_Q3TA_COMPAT(o,r) void spawnfunc_##o() { buff_Init_Compat(self,r); }
53 #define BUFF_SPAWNFUNCS(e,b)                         \
54         BUFF_SPAWNFUNC(e,           b,  0)           \
55         BUFF_SPAWNFUNC(e##_team1,   b,  NUM_TEAM_1) \
56         BUFF_SPAWNFUNC(e##_team2,   b,  NUM_TEAM_2) \
57         BUFF_SPAWNFUNC(e##_team3,   b,  NUM_TEAM_3) \
58         BUFF_SPAWNFUNC(e##_team4,   b,  NUM_TEAM_4) 
59
60 BUFF_SPAWNFUNCS(resistance,             BUFF_RESISTANCE)
61 BUFF_SPAWNFUNCS(ammo,                   BUFF_AMMO)
62 BUFF_SPAWNFUNCS(speed,                  BUFF_SPEED)
63 BUFF_SPAWNFUNCS(medic,                  BUFF_MEDIC)
64 BUFF_SPAWNFUNCS(bash,                   BUFF_BASH)
65 BUFF_SPAWNFUNCS(vampire,                BUFF_VAMPIRE)
66 BUFF_SPAWNFUNCS(disability,             BUFF_DISABILITY)
67 BUFF_SPAWNFUNCS(vengeance,              BUFF_VENGEANCE)
68 BUFF_SPAWNFUNCS(jump,                   BUFF_JUMP)
69 BUFF_SPAWNFUNCS(flight,                 BUFF_FLIGHT)
70 BUFF_SPAWNFUNCS(invisible,              BUFF_INVISIBLE)
71 BUFF_SPAWNFUNCS(random,                 0)
72
73 BUFF_SPAWNFUNC_Q3TA_COMPAT(item_doubler,    BUFF_MEDIC)
74 BUFF_SPAWNFUNC_Q3TA_COMPAT(item_resistance,     BUFF_RESISTANCE)
75 BUFF_SPAWNFUNC_Q3TA_COMPAT(item_scout,      BUFF_SPEED)
76 BUFF_SPAWNFUNC_Q3TA_COMPAT(item_ammoregen,  BUFF_AMMO)
77 #endif
78
79 vector Buff_Color(float buff_id);
80 string Buff_PrettyName(float buff_id);
81 string Buff_Name(float buff_id);
82 float Buff_Type_FromName(string buff_name);
83 float Buff_Skin(float buff_id);