]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/items.qc
Random items: more code.
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / items.qc
1 #include "items.qh"
2
3 /// \file
4 /// \brief Source file that contains implementation of the functions related to
5 /// game items.
6 /// \copyright GNU GPLv2 or any later version.
7
8 #include <common/t_items.qh>
9
10 .bool m_isloot; ///< Holds whether item is loot.
11
12 void Item_Initialize(entity item, string class_name)
13 {
14         switch (class_name)
15         {
16                 case "item_health_small":
17                 {
18                         StartItem(item, ITEM_HealthSmall);
19                         return;
20                 }
21                 case "item_health_medium":
22                 {
23                         StartItem(item, ITEM_HealthMedium);
24                         return;
25                 }
26                 case "item_health_big":
27                 case "item_health_large":
28                 {
29                         StartItem(item, ITEM_HealthBig);
30                         return;
31                 }
32                 case "item_health_mega":
33                 {
34                         StartItem(item, ITEM_HealthMega);
35                         return;
36                 }
37                 case "item_armor_small":
38                 {
39                         StartItem(item, ITEM_ArmorSmall);
40                         return;
41                 }
42                 case "item_armor_medium":
43                 {
44                         StartItem(item, ITEM_ArmorMedium);
45                         return;
46                 }
47                 case "item_armor_big":
48                 case "item_armor_large":
49                 {
50                         StartItem(item, ITEM_ArmorBig);
51                         return;
52                 }
53                 case "item_armor_mega":
54                 {
55                         StartItem(item, ITEM_ArmorMega);
56                         return;
57                 }
58                 case "item_shells":
59                 {
60                         StartItem(item, ITEM_Shells);
61                         return;
62                 }
63                 case "item_bullets":
64                 {
65                         StartItem(item, ITEM_Bullets);
66                         return;
67                 }
68                 case "item_rockets":
69                 {
70                         StartItem(item, ITEM_Rockets);
71                         return;
72                 }
73                 case "item_cells":
74                 {
75                         StartItem(item, ITEM_Cells);
76                         return;
77                 }
78                 case "item_plasma":
79                 {
80                         StartItem(item, ITEM_Plasma);
81                         return;
82                 }
83                 case "item_fuel":
84                 {
85                         StartItem(item, ITEM_JetpackFuel);
86                         return;
87                 }
88                 case "weapon_blaster":
89                 case "weapon_laser":
90                 {
91                         weapon_defaultspawnfunc(item, WEP_BLASTER);
92                         return;
93                 }
94                 case "weapon_shotgun":
95                 {
96                         weapon_defaultspawnfunc(item, WEP_SHOTGUN);
97                         return;
98                 }
99                 case "weapon_machinegun":
100                 case "weapon_uzi":
101                 {
102                         weapon_defaultspawnfunc(item, WEP_MACHINEGUN);
103                         return;
104                 }
105                 case "weapon_mortar":
106                 case "weapon_grenadelauncher":
107                 {
108                         weapon_defaultspawnfunc(item, WEP_MORTAR);
109                         return;
110                 }
111                 case "weapon_electro":
112                 {
113                         weapon_defaultspawnfunc(item, WEP_ELECTRO);
114                         return;
115                 }
116                 case "weapon_crylink":
117                 {
118                         weapon_defaultspawnfunc(item, WEP_CRYLINK);
119                         return;
120                 }
121                 case "weapon_vortex":
122                 case "weapon_nex":
123                 {
124                         weapon_defaultspawnfunc(item, WEP_VORTEX);
125                         return;
126                 }
127                 case "weapon_hagar":
128                 {
129                         weapon_defaultspawnfunc(item, WEP_HAGAR);
130                         return;
131                 }
132                 case "weapon_devastator":
133                 case "weapon_rocketlauncher":
134                 {
135                         weapon_defaultspawnfunc(item, WEP_DEVASTATOR);
136                         return;
137                 }
138                 case "weapon_shockwave":
139                 {
140                         weapon_defaultspawnfunc(item, WEP_SHOCKWAVE);
141                         return;
142                 }
143                 case "weapon_arc":
144                 {
145                         weapon_defaultspawnfunc(item, WEP_ARC);
146                         return;
147                 }
148                 case "weapon_hook":
149                 {
150                         weapon_defaultspawnfunc(item, WEP_HOOK);
151                         return;
152                 }
153                 case "weapon_tuba":
154                 {
155                         weapon_defaultspawnfunc(item, WEP_TUBA);
156                         return;
157                 }
158                 case "weapon_porto":
159                 {
160                         weapon_defaultspawnfunc(item, WEP_PORTO);
161                         return;
162                 }
163                 case "weapon_fireball":
164                 {
165                         weapon_defaultspawnfunc(item, WEP_FIREBALL);
166                         return;
167                 }
168                 case "weapon_minelayer":
169                 {
170                         weapon_defaultspawnfunc(item, WEP_MINE_LAYER);
171                         return;
172                 }
173                 case "weapon_hlac":
174                 {
175                         weapon_defaultspawnfunc(item, WEP_HLAC);
176                         return;
177                 }
178                 case "weapon_rifle":
179                 case "weapon_campingrifle":
180                 case "weapon_sniperrifle":
181                 {
182                         weapon_defaultspawnfunc(item, WEP_RIFLE);
183                         return;
184                 }
185                 case "weapon_seeker":
186                 {
187                         weapon_defaultspawnfunc(item, WEP_SEEKER);
188                         return;
189                 }
190                 case "weapon_vaporizer":
191                 case "weapon_minstanex":
192                 {
193                         weapon_defaultspawnfunc(item, WEP_VAPORIZER);
194                         return;
195                 }
196                 case "item_strength":
197                 {
198                         StartItem(item, ITEM_Strength);
199                         return;
200                 }
201                 case "item_invincible":
202                 {
203                         StartItem(item, ITEM_Shield);
204                         return;
205                 }
206                 case "item_fuel_regen":
207                 {
208                         StartItem(item, ITEM_JetpackRegen);
209                         return;
210                 }
211                 case "item_jetpack":
212                 {
213                         StartItem(item, ITEM_Jetpack);
214                         return;
215                 }
216         }
217         error("Item_Initialize: Invalid classname");
218 }
219
220 entity Item_CreateLoot(string class_name, vector position, vector vel,
221         float time_to_live)
222 {
223         entity item = spawn();
224         if (!Item_InitializeLoot(item, class_name, position, vel, time_to_live))
225         {
226                 return NULL;
227         }
228         return item;
229 }
230
231 bool Item_InitializeLoot(entity item, string class_name, vector position,
232         vector vel, float time_to_live)
233 {
234         item.classname = class_name;
235         Item_SetLoot(item, true);
236         item.noalign = true;
237         item.pickup_anyway = true;
238         item.spawnfunc_checked = true;
239         Item_Initialize(item, class_name);
240         if (wasfreed(item))
241         {
242                 return false;
243         }
244         item.gravity = 1;
245         setorigin(item, position);
246         item.velocity = vel;
247         SUB_SetFade(item, time + time_to_live, 1);
248         return true;
249 }
250
251 bool Item_IsLoot(entity item)
252 {
253         return item.m_isloot || (item.classname == "droppedweapon");
254 }
255
256 void Item_SetLoot(entity item, bool loot)
257 {
258         item.m_isloot = loot;
259 }