]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/buffs.qh
c789981b295a80d86a06780d3ce3102d97fdbd08
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / buffs.qh
1 #ifndef BUFFS_H
2 #define BUFFS_H
3
4 #if defined(CSQC)
5         #include "util-pre.qh"
6         #include "../client/sys-pre.qh"
7         #include "../dpdefs/csprogsdefs.qh"
8         #include "../client/sys-post.qh"
9         #include "../client/defs.qh"
10         #include "../dpdefs/keycodes.qh"
11         #include "constants.qh"
12         #include "stats.qh"
13         #include "../warpzonelib/anglestransform.qh"
14         #include "../warpzonelib/mathlib.qh"
15         #include "../warpzonelib/common.qh"
16         #include "../warpzonelib/client.qh"
17         #include "playerstats.qh"
18         #include "teams.qh"
19         #include "util.qh"
20         #include "nades.qh"
21 #elif defined(MENUQC)
22 #elif defined(SVQC)
23         #include "util-pre.qh"
24     #include "../server/sys-pre.qh"
25     #include "../dpdefs/progsdefs.qh"
26     #include "../dpdefs/dpextensions.qh"
27     #include "../server/sys-post.qh"
28     #include "../warpzonelib/anglestransform.qh"
29     #include "../warpzonelib/mathlib.qh"
30     #include "../warpzonelib/common.qh"
31     #include "../warpzonelib/util_server.qh"
32     #include "../warpzonelib/server.qh"
33     #include "constants.qh"
34     #include "stats.qh"
35     #include "teams.qh"
36     #include "util.qh"
37     #include "nades.qh"
38 #endif
39
40 entity Buff_Type_first;
41 entity Buff_Type_last;
42 .entity enemy; // internal next pointer
43
44 float BUFF_LAST = 1;
45
46 .int items; // buff ID
47 .string netname; // buff name
48 .string message; // human readable name
49 .vector colormod; // buff color
50 .string model2; // buff sprite
51 .float skin; // buff skin
52
53 #define REGISTER_BUFF(hname,sname,NAME,bskin,bcolor) \
54         float BUFF_##NAME; \
55         entity Buff_Type##sname; \
56         void RegisterBuffs_##sname() \
57         { \
58                 BUFF_##NAME = BUFF_LAST * 2; \
59                 BUFF_LAST = BUFF_##NAME; \
60                 Buff_Type##sname = spawn(); \
61                 Buff_Type##sname.items = BUFF_##NAME; \
62                 Buff_Type##sname.netname = #sname; \
63                 Buff_Type##sname.message = hname; \
64                 Buff_Type##sname.skin = bskin; \
65                 Buff_Type##sname.colormod = bcolor; \
66                 Buff_Type##sname.model2 = strzone(strcat("buff-", #sname)); \
67                 if(!Buff_Type_first) \
68                         Buff_Type_first = Buff_Type##sname; \
69                 if(Buff_Type_last) \
70                         Buff_Type_last.enemy = Buff_Type##sname; \
71                 Buff_Type_last = Buff_Type##sname; \
72         } \
73         ACCUMULATE_FUNCTION(RegisterBuffs, RegisterBuffs_##sname)
74
75 REGISTER_BUFF(_("Ammo"),ammo,AMMO,3,'0.2 1 0.2');
76 REGISTER_BUFF(_("Resistance"),resistance,RESISTANCE,0,'0.3 0.2 1');
77 REGISTER_BUFF(_("Speed"),speed,SPEED,9,'1 1 0.2');
78 REGISTER_BUFF(_("Medic"),medic,MEDIC,1,'1 0.3 1');
79 REGISTER_BUFF(_("Bash"),bash,BASH,5,'1 0.4 0');
80 REGISTER_BUFF(_("Vampire"),vampire,VAMPIRE,2,'1 0.15 0');
81 REGISTER_BUFF(_("Disability"),disability,DISABILITY,7,'0.66 0.66 0.73');
82 REGISTER_BUFF(_("Vengeance"),vengeance,VENGEANCE,15,'0.55 0.5 1');
83 REGISTER_BUFF(_("Jump"),jump,JUMP,10,'0.7 0.2 1');
84 REGISTER_BUFF(_("Flight"),flight,FLIGHT,11,'1 0.2 0.5');
85 REGISTER_BUFF(_("Invisible"),invisible,INVISIBLE,12,'0.9 0.9 0.9');
86 #undef REGISTER_BUFF
87
88 #ifdef SVQC
89 .float buffs;
90 void buff_Init(entity ent);
91 void buff_Init_Compat(entity ent, float replacement);
92
93 #define BUFF_SPAWNFUNC(e,b,t) void spawnfunc_item_buff_##e() { self.buffs = b; self.team = t; buff_Init(self); }
94 #define BUFF_SPAWNFUNC_Q3TA_COMPAT(o,r) void spawnfunc_item_##o() { buff_Init_Compat(self,r); }
95 #define BUFF_SPAWNFUNCS(e,b)                         \
96         BUFF_SPAWNFUNC(e,           b,  0)           \
97         BUFF_SPAWNFUNC(e##_team1,   b,  NUM_TEAM_1) \
98         BUFF_SPAWNFUNC(e##_team2,   b,  NUM_TEAM_2) \
99         BUFF_SPAWNFUNC(e##_team3,   b,  NUM_TEAM_3) \
100         BUFF_SPAWNFUNC(e##_team4,   b,  NUM_TEAM_4) 
101
102 BUFF_SPAWNFUNCS(resistance,             BUFF_RESISTANCE)
103 BUFF_SPAWNFUNCS(ammo,                   BUFF_AMMO)
104 BUFF_SPAWNFUNCS(speed,                  BUFF_SPEED)
105 BUFF_SPAWNFUNCS(medic,                  BUFF_MEDIC)
106 BUFF_SPAWNFUNCS(bash,                   BUFF_BASH)
107 BUFF_SPAWNFUNCS(vampire,                BUFF_VAMPIRE)
108 BUFF_SPAWNFUNCS(disability,             BUFF_DISABILITY)
109 BUFF_SPAWNFUNCS(vengeance,              BUFF_VENGEANCE)
110 BUFF_SPAWNFUNCS(jump,                   BUFF_JUMP)
111 BUFF_SPAWNFUNCS(flight,                 BUFF_FLIGHT)
112 BUFF_SPAWNFUNCS(invisible,              BUFF_INVISIBLE)
113 BUFF_SPAWNFUNCS(random,                 0)
114
115 BUFF_SPAWNFUNC_Q3TA_COMPAT(doubler,    BUFF_MEDIC)
116 BUFF_SPAWNFUNC_Q3TA_COMPAT(resistance,  BUFF_RESISTANCE)
117 BUFF_SPAWNFUNC_Q3TA_COMPAT(scout,      BUFF_SPEED)
118 BUFF_SPAWNFUNC_Q3TA_COMPAT(ammoregen,  BUFF_AMMO)
119
120 // actually Q3
121 BUFF_SPAWNFUNC_Q3TA_COMPAT(haste,       BUFF_SPEED)
122 BUFF_SPAWNFUNC_Q3TA_COMPAT(invis,       BUFF_INVISIBLE)
123 BUFF_SPAWNFUNC_Q3TA_COMPAT(medic,       BUFF_MEDIC)
124 #endif
125
126 vector Buff_Color(float buff_id);
127 string Buff_PrettyName(float buff_id);
128 string Buff_Name(float buff_id);
129 float Buff_Type_FromName(string buff_name);
130 float Buff_Type_FromSprite(string buff_sprite);
131 float Buff_Skin(float buff_id);
132 string Buff_Sprite(float buff_id);
133 #endif