3 // Welcome to the stuff behind the scenes
4 // Below, you will find the list of buffs
6 // Note: Buffs also need spawnfuncs, which are set below
8 entity Buff_Type_first;
10 .entity enemy; // internal next pointer
15 .int items; // buff ID
16 .string netname; // buff name
17 .string message; // human readable name
18 .vector colormod; // buff color
19 .string model2; // buff sprite
20 .int skin; // buff skin
22 #define REGISTER_BUFF(hname,sname,NAME,bskin,bcolor) \
24 entity Buff_Type##sname; \
25 void RegisterBuffs_##sname() \
27 BUFF_##NAME = BUFF_LAST * 2; \
28 BUFF_LAST = BUFF_##NAME; \
29 BUFF_ALL |= BUFF_##NAME; \
30 Buff_Type##sname = spawn(); \
31 Buff_Type##sname.items = BUFF_##NAME; \
32 Buff_Type##sname.netname = #sname; \
33 Buff_Type##sname.message = hname; \
34 Buff_Type##sname.skin = bskin; \
35 Buff_Type##sname.colormod = bcolor; \
36 Buff_Type##sname.model2 = strzone(strcat("buff-", #sname)); \
37 if(!Buff_Type_first) \
38 Buff_Type_first = Buff_Type##sname; \
40 Buff_Type_last.enemy = Buff_Type##sname; \
41 Buff_Type_last = Buff_Type##sname; \
43 ACCUMULATE_FUNCTION(RegisterBuffs, RegisterBuffs_##sname)
45 REGISTER_BUFF(_("Ammo"),ammo,AMMO,3,'0.2 1 0.2');
46 REGISTER_BUFF(_("Resistance"),resistance,RESISTANCE,0,'0.3 0.2 1');
47 REGISTER_BUFF(_("Speed"),speed,SPEED,9,'1 1 0.2');
48 REGISTER_BUFF(_("Medic"),medic,MEDIC,1,'1 0.3 1');
49 REGISTER_BUFF(_("Bash"),bash,BASH,5,'1 0.4 0');
50 REGISTER_BUFF(_("Vampire"),vampire,VAMPIRE,2,'1 0.15 0');
51 REGISTER_BUFF(_("Disability"),disability,DISABILITY,7,'0.66 0.66 0.73');
52 REGISTER_BUFF(_("Vengeance"),vengeance,VENGEANCE,15,'0.55 0.5 1');
53 REGISTER_BUFF(_("Jump"),jump,JUMP,10,'0.7 0.2 1');
54 REGISTER_BUFF(_("Flight"),flight,FLIGHT,11,'1 0.2 0.5');
55 REGISTER_BUFF(_("Invisible"),invisible,INVISIBLE,12,'0.9 0.9 0.9');
56 REGISTER_BUFF(_("Inferno"),inferno,INFERNO,16,'2 0 0');
61 void buff_Init(entity ent);
62 void buff_Init_Compat(entity ent, int replacement);
64 #define BUFF_SPAWNFUNC(e,b,t) void spawnfunc_item_buff_##e() { self.buffs = b; self.team = t; buff_Init(self); }
65 #define BUFF_SPAWNFUNC_Q3TA_COMPAT(o,r) void spawnfunc_item_##o() { buff_Init_Compat(self,r); }
66 #define BUFF_SPAWNFUNCS(e,b) \
67 BUFF_SPAWNFUNC(e, b, 0) \
68 BUFF_SPAWNFUNC(e##_team1, b, NUM_TEAM_1) \
69 BUFF_SPAWNFUNC(e##_team2, b, NUM_TEAM_2) \
70 BUFF_SPAWNFUNC(e##_team3, b, NUM_TEAM_3) \
71 BUFF_SPAWNFUNC(e##_team4, b, NUM_TEAM_4)
73 BUFF_SPAWNFUNCS(resistance, BUFF_RESISTANCE)
74 BUFF_SPAWNFUNCS(ammo, BUFF_AMMO)
75 BUFF_SPAWNFUNCS(speed, BUFF_SPEED)
76 BUFF_SPAWNFUNCS(medic, BUFF_MEDIC)
77 BUFF_SPAWNFUNCS(bash, BUFF_BASH)
78 BUFF_SPAWNFUNCS(vampire, BUFF_VAMPIRE)
79 BUFF_SPAWNFUNCS(disability, BUFF_DISABILITY)
80 BUFF_SPAWNFUNCS(vengeance, BUFF_VENGEANCE)
81 BUFF_SPAWNFUNCS(jump, BUFF_JUMP)
82 BUFF_SPAWNFUNCS(flight, BUFF_FLIGHT)
83 BUFF_SPAWNFUNCS(invisible, BUFF_INVISIBLE)
84 BUFF_SPAWNFUNCS(inferno, BUFF_INFERNO)
85 BUFF_SPAWNFUNCS(random, 0)
87 BUFF_SPAWNFUNC_Q3TA_COMPAT(doubler, BUFF_MEDIC)
88 BUFF_SPAWNFUNC_Q3TA_COMPAT(resistance, BUFF_RESISTANCE)
89 BUFF_SPAWNFUNC_Q3TA_COMPAT(scout, BUFF_SPEED)
90 BUFF_SPAWNFUNC_Q3TA_COMPAT(ammoregen, BUFF_AMMO)
93 BUFF_SPAWNFUNC_Q3TA_COMPAT(haste, BUFF_SPEED)
94 BUFF_SPAWNFUNC_Q3TA_COMPAT(invis, BUFF_INVISIBLE)
95 BUFF_SPAWNFUNC_Q3TA_COMPAT(medic, BUFF_MEDIC)
98 #undef BUFF_SPAWNFUNC_Q3TA_COMPAT
99 #undef BUFF_SPAWNFUNCS
102 vector Buff_Color(int buff_id);
103 string Buff_PrettyName(int buff_id);
104 string Buff_Name(int buff_id);
105 int Buff_Type_FromName(string buff_name);
106 int Buff_Type_FromSprite(string buff_sprite);
107 int Buff_Skin(int buff_id);
108 string Buff_Sprite(int buff_id);