2 /// \brief Source file that contains implementation of the random items mutator.
4 /// \copyright GNU GPLv2 or any later version.
6 //============================ Constants ======================================
10 RANDOM_ITEM_TYPE_HEALTH,
11 RANDOM_ITEM_TYPE_ARMOR,
12 RANDOM_ITEM_TYPE_RESOURCE,
13 RANDOM_ITEM_TYPE_WEAPON,
14 RANDOM_ITEM_TYPE_POWERUP
19 RANDOM_ITEM_SUBTYPE_HEALTH_SMALL,
20 RANDOM_ITEM_SUBTYPE_HEALTH_MEDIUM,
21 RANDOM_ITEM_SUBTYPE_HEALTH_BIG,
22 RANDOM_ITEM_SUBTYPE_HEALTH_MEGA
27 RANDOM_ITEM_SUBTYPE_ARMOR_SMALL,
28 RANDOM_ITEM_SUBTYPE_ARMOR_MEDIUM,
29 RANDOM_ITEM_SUBTYPE_ARMOR_BIG,
30 RANDOM_ITEM_SUBTYPE_ARMOR_MEGA
35 RANDOM_ITEM_SUBTYPE_RESOURCE_SHELLS,
36 RANDOM_ITEM_SUBTYPE_RESOURCE_BULLETS,
37 RANDOM_ITEM_SUBTYPE_RESOURCE_ROCKETS,
38 RANDOM_ITEM_SUBTYPE_RESOURCE_CELLS,
39 RANDOM_ITEM_SUBTYPE_RESOURCE_PLASMA,
40 RANDOM_ITEM_SUBTYPE_RESOURCE_FUEL,
45 RANDOM_ITEM_SUBTYPE_WEAPON_BLASTER,
46 RANDOM_ITEM_SUBTYPE_WEAPON_SHOTGUN,
47 RANDOM_ITEM_SUBTYPE_WEAPON_MACHINEGUN,
48 RANDOM_ITEM_SUBTYPE_WEAPON_MORTAR,
49 RANDOM_ITEM_SUBTYPE_WEAPON_ELECTRO,
50 RANDOM_ITEM_SUBTYPE_WEAPON_CRYLINK,
51 RANDOM_ITEM_SUBTYPE_WEAPON_VORTEX,
52 RANDOM_ITEM_SUBTYPE_WEAPON_HAGAR,
53 RANDOM_ITEM_SUBTYPE_WEAPON_DEVASTATOR,
54 RANDOM_ITEM_SUBTYPE_WEAPON_SHOCKWAVE,
55 RANDOM_ITEM_SUBTYPE_WEAPON_ARC,
56 RANDOM_ITEM_SUBTYPE_WEAPON_HOOK,
57 RANDOM_ITEM_SUBTYPE_WEAPON_TUBA,
58 RANDOM_ITEM_SUBTYPE_WEAPON_PORTO,
59 RANDOM_ITEM_SUBTYPE_WEAPON_FIREBALL,
60 RANDOM_ITEM_SUBTYPE_WEAPON_MINELAYER,
61 RANDOM_ITEM_SUBTYPE_WEAPON_HLAC,
62 RANDOM_ITEM_SUBTYPE_WEAPON_RIFLE,
63 RANDOM_ITEM_SUBTYPE_WEAPON_SEEKER,
64 RANDOM_ITEM_SUBTYPE_WEAPON_VAPORIZER
69 RANDOM_ITEM_SUBTYPE_POWERUP_STRENGTH,
70 RANDOM_ITEM_SUBTYPE_POWERUP_SHIELD,
71 RANDOM_ITEM_SUBTYPE_POWERUP_FUEL_REGEN,
72 RANDOM_ITEM_SUBTYPE_POWERUP_JETPACK
75 //======================= Global variables ====================================
77 bool autocvar_g_random_items; ///< Whether to enable random items.
81 /// \brief Whether to randomly replace small health.
82 bool autocvar_g_random_items_replace_health_small;
83 /// \brief Whether to randomly replace medium health.
84 bool autocvar_g_random_items_replace_health_medium;
85 /// \brief Whether to randomly replace big health.
86 bool autocvar_g_random_items_replace_health_big;
87 /// \brief Whether to randomly replace mega health.
88 bool autocvar_g_random_items_replace_health_mega;
90 /// \brief Whether to randomly replace small armor.
91 bool autocvar_g_random_items_replace_armor_small;
92 /// \brief Whether to randomly replace medium armor.
93 bool autocvar_g_random_items_replace_armor_medium;
94 /// \brief Whether to randomly replace big armor.
95 bool autocvar_g_random_items_replace_armor_big;
96 /// \brief Whether to randomly replace mega armor.
97 bool autocvar_g_random_items_replace_armor_mega;
99 /// \brief Whether to randomly replace shells.
100 bool autocvar_g_random_items_replace_item_shells;
101 /// \brief Whether to randomly replace bullets.
102 bool autocvar_g_random_items_replace_item_bullets;
103 /// \brief Whether to randomly replace rockets.
104 bool autocvar_g_random_items_replace_item_rockets;
105 /// \brief Whether to randomly replace cells.
106 bool autocvar_g_random_items_replace_item_cells;
107 /// \brief Whether to randomly replace plasma.
108 bool autocvar_g_random_items_replace_item_plasma;
109 /// \brief Whether to randomly replace fuel.
110 bool autocvar_g_random_items_replace_item_fuel;
112 /// \brief Whether to randomly replace blaster.
113 bool autocvar_g_random_items_replace_weapon_blaster;
114 /// \brief Whether to randomly replace shotgun.
115 bool autocvar_g_random_items_replace_weapon_shotgun;
116 /// \brief Whether to randomly replace machinegun.
117 bool autocvar_g_random_items_replace_weapon_machinegun;
118 /// \brief Whether to randomly replace mortar.
119 bool autocvar_g_random_items_replace_weapon_mortar;
120 /// \brief Whether to randomly replace electro.
121 bool autocvar_g_random_items_replace_weapon_electro;
122 /// \brief Whether to randomly replace crylink.
123 bool autocvar_g_random_items_replace_weapon_crylink;
124 /// \brief Whether to randomly replace vortex.
125 bool autocvar_g_random_items_replace_weapon_vortex;
126 /// \brief Whether to randomly replace hagar.
127 bool autocvar_g_random_items_replace_weapon_hagar;
128 /// \brief Whether to randomly replace devastator.
129 bool autocvar_g_random_items_replace_weapon_devastator;
130 /// \brief Whether to randomly replace shockwave.
131 bool autocvar_g_random_items_replace_weapon_shockwave;
132 /// \brief Whether to randomly replace arc.
133 bool autocvar_g_random_items_replace_weapon_arc;
134 /// \brief Whether to randomly replace hook.
135 bool autocvar_g_random_items_replace_weapon_hook;
136 /// \brief Whether to randomly replace tuba.
137 bool autocvar_g_random_items_replace_weapon_tuba;
138 /// \brief Whether to randomly replace port-o-launch.
139 bool autocvar_g_random_items_replace_weapon_porto;
140 /// \brief Whether to randomly replace fireball.
141 bool autocvar_g_random_items_replace_weapon_fireball;
142 /// \brief Whether to randomly replace mine layer.
143 bool autocvar_g_random_items_replace_weapon_minelayer;
144 /// \brief Whether to randomly replace HLAC.
145 bool autocvar_g_random_items_replace_weapon_hlac;
146 /// \brief Whether to randomly replace rifle.
147 bool autocvar_g_random_items_replace_weapon_rifle;
148 /// \brief Whether to randomly replace TAG seeker.
149 bool autocvar_g_random_items_replace_weapon_seeker;
150 /// \brief Whether to randomly replace vaporizer.
151 bool autocvar_g_random_items_replace_weapon_vaporizer;
153 /// \brief Whether to randomly replace strength.
154 bool autocvar_g_random_items_replace_item_strength;
155 /// \brief Whether to randomly replace shield.
156 bool autocvar_g_random_items_replace_item_shield;
157 /// \brief Whether to randomly replace fuel regeneration.
158 bool autocvar_g_random_items_replace_item_fuel_regen;
159 /// \brief Whether to randomly replace jetpack.
160 bool autocvar_g_random_items_replace_item_jetpack;
162 bool autocvar_g_random_items_replace_item_minst_cells;
163 bool autocvar_g_random_items_replace_item_invisibility;
164 bool autocvar_g_random_items_replace_item_extralife;
165 bool autocvar_g_random_items_replace_item_speed;
167 // Map probability cvars
169 /// \brief Probability of random health items spawning in the map.
170 float autocvar_g_random_items_health_probability;
171 /// \brief Probability of random armor items spawning in the map.
172 float autocvar_g_random_items_armor_probability;
173 /// \brief Probability of random resource items spawning in the map.
174 float autocvar_g_random_items_resource_probability;
175 /// \brief Probability of random weapons spawning in the map.
176 float autocvar_g_random_items_weapon_probability;
177 /// \brief Probability of random powerups spawning in the map.
178 float autocvar_g_random_items_powerup_probability;
180 /// \brief Probability of random small health spawning in the map.
181 float autocvar_g_random_items_health_small_probability;
182 /// \brief Probability of random medium health spawning in the map.
183 float autocvar_g_random_items_health_medium_probability;
184 /// \brief Probability of random big health spawning in the map.
185 float autocvar_g_random_items_health_big_probability;
186 /// \brief Probability of random mega health spawning in the map.
187 float autocvar_g_random_items_health_mega_probability;
189 /// \brief Probability of random small armor spawning in the map.
190 float autocvar_g_random_items_armor_small_probability;
191 /// \brief Probability of random medium armor.spawning in the map.
192 float autocvar_g_random_items_armor_medium_probability;
193 /// \brief Probability of random big armor spawning in the map.
194 float autocvar_g_random_items_armor_big_probability;
195 /// \brief Probability of random mega armor spawning in the map.
196 float autocvar_g_random_items_armor_mega_probability;
198 /// \brief Probability of random shells spawning in the map.
199 float autocvar_g_random_items_resource_shells_probability;
200 /// \brief Probability of random bullets spawning in the map.
201 float autocvar_g_random_items_resource_bullets_probability;
202 /// \brief Probability of random rockets spawning in the map.
203 float autocvar_g_random_items_resource_rockets_probability;
204 /// \brief Probability of random cells spawning in the map.
205 float autocvar_g_random_items_resource_cells_probability;
206 /// \brief Probability of random plasma spawning in the map.
207 float autocvar_g_random_items_resource_plasma_probability;
208 /// \brief Probability of random fuel spawning in the map.
209 float autocvar_g_random_items_resource_fuel_probability;
211 /// \brief Probability of random blaster spawning in the map.
212 float autocvar_g_random_items_weapon_blaster_probability;
213 /// \brief Probability of random shotgun spawning in the map.
214 float autocvar_g_random_items_weapon_shotgun_probability;
215 /// \brief Probability of random machinegun spawning in the map.
216 float autocvar_g_random_items_weapon_machinegun_probability;
217 /// \brief Probability of random mortar spawning in the map.
218 float autocvar_g_random_items_weapon_mortar_probability;
219 /// \brief Probability of random electro spawning in the map.
220 float autocvar_g_random_items_weapon_electro_probability;
221 /// \brief Probability of random crylink spawning in the map.
222 float autocvar_g_random_items_weapon_crylink_probability;
223 /// \brief Probability of random vortex spawning in the map.
224 float autocvar_g_random_items_weapon_vortex_probability;
225 /// \brief Probability of random hagar spawning in the map.
226 float autocvar_g_random_items_weapon_hagar_probability;
227 /// \brief Probability of random devastator spawning in the map.
228 float autocvar_g_random_items_weapon_devastator_probability;
229 /// \brief Probability of random shockwave spawning in the map.
230 float autocvar_g_random_items_weapon_shockwave_probability;
231 /// \brief Probability of random arc spawning in the map.
232 float autocvar_g_random_items_weapon_arc_probability;
233 /// \brief Probability of random hook spawning in the map.
234 float autocvar_g_random_items_weapon_hook_probability;
235 /// \brief Probability of random tuba spawning in the map.
236 float autocvar_g_random_items_weapon_tuba_probability;
237 /// \brief Probability of random port-o-launch spawning in the map.
238 float autocvar_g_random_items_weapon_porto_probability;
239 /// \brief Probability of random fireball spawning in the map.
240 float autocvar_g_random_items_weapon_fireball_probability;
241 /// \brief Probability of random mine layer spawning in the map.
242 float autocvar_g_random_items_weapon_minelayer_probability;
243 /// \brief Probability of random HLAC spawning in the map.
244 float autocvar_g_random_items_weapon_hlac_probability;
245 /// \brief Probability of random rifle spawning in the map.
246 float autocvar_g_random_items_weapon_rifle_probability;
247 /// \brief Probability of random TAG seeker spawning in the map.
248 float autocvar_g_random_items_weapon_seeker_probability;
249 /// \brief Probability of random vaporizer spawning in the map.
250 float autocvar_g_random_items_weapon_vaporizer_probability;
252 /// \brief Probability of random strength spawning in the map.
253 float autocvar_g_random_items_strength_probability;
254 /// \brief Probability of random shield spawning in the map.
255 float autocvar_g_random_items_shield_probability;
256 /// \brief Probability of random fuel regeneration spawning in the map.
257 float autocvar_g_random_items_fuel_regen_probability;
258 /// \brief Probability of random jetpack spawning in the map.
259 float autocvar_g_random_items_jetpack_probability;
261 //float autocvar_g_random_items_minst_cells_probability;
262 //float autocvar_g_random_items_invisibility_probability;
263 //float autocvar_g_random_items_extralife_probability;
264 //float autocvar_g_random_items_speed_probability;
268 bool autocvar_g_random_loot; ///< Whether to enable random loot.
270 float autocvar_g_random_loot_min; ///< Minimum amount of loot items.
271 float autocvar_g_random_loot_max; ///< Maximum amount of loot items.
272 float autocvar_g_random_loot_time; ///< Amount of time the loot will stay.
273 float autocvar_g_random_loot_spread; ///< How far can loot be thrown.
275 // Loot probability cvars
277 /// \brief Probability of random health items spawning as loot.
278 float autocvar_g_random_loot_health_probability;
279 /// \brief Probability of random armor items spawning as loot.
280 float autocvar_g_random_loot_armor_probability;
281 /// \brief Probability of random resource items spawning as loot.
282 float autocvar_g_random_loot_resource_probability;
283 /// \brief Probability of random weapons spawning as loot.
284 float autocvar_g_random_loot_weapon_probability;
285 /// \brief Probability of random powerups spawning as loot.
286 float autocvar_g_random_loot_powerup_probability;
288 /// \brief Probability of random small health spawning as loot.
289 float autocvar_g_random_loot_health_small_probability;
290 /// \brief Probability of random medium health spawning as loot.
291 float autocvar_g_random_loot_health_medium_probability;
292 /// \brief Probability of random big health spawning as loot.
293 float autocvar_g_random_loot_health_big_probability;
294 /// \brief Probability of random mega health spawning as loot.
295 float autocvar_g_random_loot_health_mega_probability;
297 /// \brief Probability of random small armor spawning as loot.
298 float autocvar_g_random_loot_armor_small_probability;
299 /// \brief Probability of random medium armor.spawning as loot.
300 float autocvar_g_random_loot_armor_medium_probability;
301 /// \brief Probability of random big armor spawning as loot.
302 float autocvar_g_random_loot_armor_big_probability;
303 /// \brief Probability of random mega armor spawning as loot.
304 float autocvar_g_random_loot_armor_mega_probability;
306 /// \brief Probability of random shells spawning as loot.
307 float autocvar_g_random_loot_resource_shells_probability;
308 /// \brief Probability of random bullets spawning as loot.
309 float autocvar_g_random_loot_resource_bullets_probability;
310 /// \brief Probability of random rockets spawning as loot.
311 float autocvar_g_random_loot_resource_rockets_probability;
312 /// \brief Probability of random cells spawning as loot.
313 float autocvar_g_random_loot_resource_cells_probability;
314 /// \brief Probability of random plasma spawning as loot.
315 float autocvar_g_random_loot_resource_plasma_probability;
316 /// \brief Probability of random fuel spawning as loot.
317 float autocvar_g_random_loot_resource_fuel_probability;
319 /// \brief Probability of random blaster spawning as loot.
320 float autocvar_g_random_loot_weapon_blaster_probability;
321 /// \brief Probability of random shotgun spawning as loot.
322 float autocvar_g_random_loot_weapon_shotgun_probability;
323 /// \brief Probability of random machinegun spawning as loot.
324 float autocvar_g_random_loot_weapon_machinegun_probability;
325 /// \brief Probability of random mortar spawning as loot.
326 float autocvar_g_random_loot_weapon_mortar_probability;
327 /// \brief Probability of random electro spawning as loot.
328 float autocvar_g_random_loot_weapon_electro_probability;
329 /// \brief Probability of random crylink spawning as loot.
330 float autocvar_g_random_loot_weapon_crylink_probability;
331 /// \brief Probability of random vortex spawning as loot.
332 float autocvar_g_random_loot_weapon_vortex_probability;
333 /// \brief Probability of random hagar spawning as loot.
334 float autocvar_g_random_loot_weapon_hagar_probability;
335 /// \brief Probability of random devastator spawning as loot.
336 float autocvar_g_random_loot_weapon_devastator_probability;
337 /// \brief Probability of random shockwave spawning as loot.
338 float autocvar_g_random_loot_weapon_shockwave_probability;
339 /// \brief Probability of random arc spawning as loot.
340 float autocvar_g_random_loot_weapon_arc_probability;
341 /// \brief Probability of random hook spawning as loot.
342 float autocvar_g_random_loot_weapon_hook_probability;
343 /// \brief Probability of random tuba spawning as loot.
344 float autocvar_g_random_loot_weapon_tuba_probability;
345 /// \brief Probability of random port-o-launch spawning as loot.
346 float autocvar_g_random_loot_weapon_porto_probability;
347 /// \brief Probability of random fireball spawning as loot.
348 float autocvar_g_random_loot_weapon_fireball_probability;
349 /// \brief Probability of random mine layer spawning as loot.
350 float autocvar_g_random_loot_weapon_minelayer_probability;
351 /// \brief Probability of random HLAC spawning as loot.
352 float autocvar_g_random_loot_weapon_hlac_probability;
353 /// \brief Probability of random rifle spawning as loot.
354 float autocvar_g_random_loot_weapon_rifle_probability;
355 /// \brief Probability of random TAG seeker spawning as loot.
356 float autocvar_g_random_loot_weapon_seeker_probability;
357 /// \brief Probability of random vaporizer spawning as loot.
358 float autocvar_g_random_loot_weapon_vaporizer_probability;
360 /// \brief Probability of random strength spawning as loot.
361 float autocvar_g_random_loot_strength_probability;
362 /// \brief Probability of random shield spawning as loot.
363 float autocvar_g_random_loot_shield_probability;
364 /// \brief Probability of random fuel regeneration spawning as loot.
365 float autocvar_g_random_loot_fuel_regen_probability;
366 /// \brief Probability of random jetpack spawning as loot.
367 float autocvar_g_random_loot_jetpack_probability;
369 /// \brief Holds whether random item is spawning. Used to prevent infinite
371 bool random_items_is_spawning = false;
373 //========================= Free functions ====================================
375 /// \brief Returns whether a map item should be replaced.
376 /// \param[in] item Item to inspect.
377 /// \return True if the item should be replaced, false otherwise.
378 bool RandomItems_ShouldReplaceItem(entity item)
380 switch (item.classname)
382 case "item_health_small":
384 return autocvar_g_random_items_replace_health_small;
386 case "item_health_medium":
388 return autocvar_g_random_items_replace_health_medium;
390 case "item_health_big":
391 case "item_health_large":
393 return autocvar_g_random_items_replace_health_big;
395 case "item_health_mega":
397 return autocvar_g_random_items_replace_health_mega;
399 case "item_armor_small":
401 return autocvar_g_random_items_replace_armor_small;
403 case "item_armor_medium":
405 return autocvar_g_random_items_replace_armor_medium;
407 case "item_armor_big":
408 case "item_armor_large":
410 return autocvar_g_random_items_replace_armor_big;
412 case "item_armor_mega":
414 return autocvar_g_random_items_replace_armor_mega;
418 return autocvar_g_random_items_replace_item_shells;
422 return autocvar_g_random_items_replace_item_bullets;
426 return autocvar_g_random_items_replace_item_rockets;
430 return autocvar_g_random_items_replace_item_cells;
434 return autocvar_g_random_items_replace_item_plasma;
438 return autocvar_g_random_items_replace_item_fuel;
440 case "weapon_blaster":
443 return autocvar_g_random_items_replace_weapon_blaster;
445 case "weapon_shotgun":
447 return autocvar_g_random_items_replace_weapon_shotgun;
449 case "weapon_machinegun":
452 return autocvar_g_random_items_replace_weapon_machinegun;
454 case "weapon_mortar":
455 case "weapon_grenadelauncher":
457 return autocvar_g_random_items_replace_weapon_mortar;
459 case "weapon_electro":
461 return autocvar_g_random_items_replace_weapon_electro;
463 case "weapon_crylink":
465 return autocvar_g_random_items_replace_weapon_crylink;
467 case "weapon_vortex":
470 return autocvar_g_random_items_replace_weapon_vortex;
474 return autocvar_g_random_items_replace_weapon_hagar;
476 case "weapon_devastator":
477 case "weapon_rocketlauncher":
479 return autocvar_g_random_items_replace_weapon_devastator;
481 case "weapon_shockwave":
483 return autocvar_g_random_items_replace_weapon_shockwave;
487 return autocvar_g_random_items_replace_weapon_arc;
491 return autocvar_g_random_items_replace_weapon_hook;
495 return autocvar_g_random_items_replace_weapon_tuba;
499 return autocvar_g_random_items_replace_weapon_porto;
501 case "weapon_fireball":
503 return autocvar_g_random_items_replace_weapon_fireball;
505 case "weapon_minelayer":
507 return autocvar_g_random_items_replace_weapon_minelayer;
511 return autocvar_g_random_items_replace_weapon_hlac;
514 case "weapon_campingrifle":
515 case "weapon_sniperrifle":
517 return autocvar_g_random_items_replace_weapon_rifle;
519 case "weapon_seeker":
521 return autocvar_g_random_items_replace_weapon_seeker;
523 case "weapon_vaporizer":
524 case "weapon_minstanex":
526 return autocvar_g_random_items_replace_weapon_vaporizer;
528 case "item_strength":
530 return autocvar_g_random_items_replace_item_strength;
532 case "item_invincible":
534 return autocvar_g_random_items_replace_item_shield;
536 case "item_fuel_regen":
538 return autocvar_g_random_items_replace_item_fuel_regen;
542 return autocvar_g_random_items_replace_item_jetpack;
544 case "item_minst_cells":
546 return autocvar_g_random_items_replace_item_minst_cells;
548 case "item_invisibility":
550 return autocvar_g_random_items_replace_item_invisibility;
552 case "item_extralife":
554 return autocvar_g_random_items_replace_item_extralife;
558 return autocvar_g_random_items_replace_item_speed;
560 case "replacedweapon":
564 case WEP_MINE_LAYER.m_id:
566 return autocvar_g_random_items_replace_weapon_minelayer;
570 return autocvar_g_random_items_replace_weapon_hlac;
574 return autocvar_g_random_items_replace_weapon_rifle;
576 case WEP_SEEKER.m_id:
578 return autocvar_g_random_items_replace_weapon_seeker;
593 /// \brief Returns a random classname of the map item.
594 /// \return Random classname of the map item.
595 string RandomItems_GetRandomMapItemClassName()
597 RandomSelection_Init();
598 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_HEALTH,
599 autocvar_g_random_items_health_probability, 1);
600 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_ARMOR,
601 autocvar_g_random_items_armor_probability, 1);
602 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_RESOURCE,
603 autocvar_g_random_items_resource_probability, 1);
604 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_WEAPON,
605 autocvar_g_random_items_weapon_probability, 1);
606 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_POWERUP,
607 autocvar_g_random_items_powerup_probability, 1);
608 int item_type = RandomSelection_chosen_float;
611 case RANDOM_ITEM_TYPE_HEALTH:
613 RandomSelection_Init();
614 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_SMALL,
615 autocvar_g_random_items_health_small_probability, 1);
616 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_MEDIUM,
617 autocvar_g_random_items_health_medium_probability, 1);
618 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_BIG,
619 autocvar_g_random_items_health_big_probability, 1);
620 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_MEGA,
621 autocvar_g_random_items_health_mega_probability, 1);
622 item_type = RandomSelection_chosen_float;
625 case RANDOM_ITEM_SUBTYPE_HEALTH_SMALL:
627 return "item_health_small";
629 case RANDOM_ITEM_SUBTYPE_HEALTH_MEDIUM:
631 return "item_health_medium";
633 case RANDOM_ITEM_SUBTYPE_HEALTH_BIG:
635 return "item_health_big";
637 case RANDOM_ITEM_SUBTYPE_HEALTH_MEGA:
639 return "item_health_mega";
644 case RANDOM_ITEM_TYPE_ARMOR:
646 RandomSelection_Init();
647 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_SMALL,
648 autocvar_g_random_items_armor_small_probability, 1);
649 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_MEDIUM,
650 autocvar_g_random_items_armor_medium_probability, 1);
651 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_BIG,
652 autocvar_g_random_items_armor_big_probability, 1);
653 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_MEGA,
654 autocvar_g_random_items_armor_mega_probability, 1);
655 item_type = RandomSelection_chosen_float;
658 case RANDOM_ITEM_SUBTYPE_ARMOR_SMALL:
660 return "item_armor_small";
662 case RANDOM_ITEM_SUBTYPE_ARMOR_MEDIUM:
664 return "item_armor_medium";
666 case RANDOM_ITEM_SUBTYPE_ARMOR_BIG:
668 return "item_armor_big";
670 case RANDOM_ITEM_SUBTYPE_ARMOR_MEGA:
672 return "item_armor_mega";
677 case RANDOM_ITEM_TYPE_RESOURCE:
679 RandomSelection_Init();
680 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_SHELLS,
681 autocvar_g_random_items_resource_shells_probability, 1);
682 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_BULLETS,
683 autocvar_g_random_items_resource_bullets_probability, 1);
684 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_ROCKETS,
685 autocvar_g_random_items_resource_rockets_probability, 1);
686 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_CELLS,
687 autocvar_g_random_items_resource_cells_probability, 1);
688 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_PLASMA,
689 autocvar_g_random_items_resource_plasma_probability, 1);
690 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_FUEL,
691 autocvar_g_random_items_resource_fuel_probability, 1);
692 item_type = RandomSelection_chosen_float;
695 case RANDOM_ITEM_SUBTYPE_RESOURCE_SHELLS:
697 return "item_shells";
699 case RANDOM_ITEM_SUBTYPE_RESOURCE_BULLETS:
701 return "item_bullets";
703 case RANDOM_ITEM_SUBTYPE_RESOURCE_ROCKETS:
705 return "item_rockets";
707 case RANDOM_ITEM_SUBTYPE_RESOURCE_CELLS:
711 case RANDOM_ITEM_SUBTYPE_RESOURCE_PLASMA:
713 return "item_plasma";
715 case RANDOM_ITEM_SUBTYPE_RESOURCE_FUEL:
722 case RANDOM_ITEM_TYPE_WEAPON:
724 RandomSelection_Init();
725 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_BLASTER,
726 autocvar_g_random_items_weapon_blaster_probability, 1);
727 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_SHOTGUN,
728 autocvar_g_random_items_weapon_shotgun_probability, 1);
729 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_MACHINEGUN,
730 autocvar_g_random_items_weapon_machinegun_probability, 1);
731 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_MORTAR,
732 autocvar_g_random_items_weapon_mortar_probability, 1);
733 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_ELECTRO,
734 autocvar_g_random_items_weapon_electro_probability, 1);
735 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_CRYLINK,
736 autocvar_g_random_items_weapon_crylink_probability, 1);
737 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_VORTEX,
738 autocvar_g_random_items_weapon_vortex_probability, 1);
739 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_HAGAR,
740 autocvar_g_random_items_weapon_hagar_probability, 1);
741 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_DEVASTATOR,
742 autocvar_g_random_items_weapon_devastator_probability, 1);
743 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_SHOCKWAVE,
744 autocvar_g_random_items_weapon_shockwave_probability, 1);
745 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_ARC,
746 autocvar_g_random_items_weapon_arc_probability, 1);
747 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_HOOK,
748 autocvar_g_random_items_weapon_hook_probability, 1);
749 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_TUBA,
750 autocvar_g_random_items_weapon_tuba_probability, 1);
751 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_PORTO,
752 autocvar_g_random_items_weapon_porto_probability, 1);
753 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_FIREBALL,
754 autocvar_g_random_items_weapon_fireball_probability, 1);
755 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_MINELAYER,
756 autocvar_g_random_items_weapon_minelayer_probability, 1);
757 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_HLAC,
758 autocvar_g_random_items_weapon_hlac_probability, 1);
759 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_RIFLE,
760 autocvar_g_random_items_weapon_rifle_probability, 1);
761 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_SEEKER,
762 autocvar_g_random_items_weapon_seeker_probability, 1);
763 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_VAPORIZER,
764 autocvar_g_random_items_weapon_vaporizer_probability, 1);
765 item_type = RandomSelection_chosen_float;
768 case RANDOM_ITEM_SUBTYPE_WEAPON_BLASTER:
770 return "weapon_blaster";
772 case RANDOM_ITEM_SUBTYPE_WEAPON_SHOTGUN:
774 return "weapon_shotgun";
776 case RANDOM_ITEM_SUBTYPE_WEAPON_MACHINEGUN:
778 return "weapon_machinegun";
780 case RANDOM_ITEM_SUBTYPE_WEAPON_MORTAR:
782 return "weapon_mortar";
784 case RANDOM_ITEM_SUBTYPE_WEAPON_ELECTRO:
786 return "weapon_electro";
788 case RANDOM_ITEM_SUBTYPE_WEAPON_CRYLINK:
790 return "weapon_crylink";
792 case RANDOM_ITEM_SUBTYPE_WEAPON_VORTEX:
794 return "weapon_vortex";
796 case RANDOM_ITEM_SUBTYPE_WEAPON_HAGAR:
798 return "weapon_hagar";
800 case RANDOM_ITEM_SUBTYPE_WEAPON_DEVASTATOR:
802 return "weapon_devastator";
804 case RANDOM_ITEM_SUBTYPE_WEAPON_SHOCKWAVE:
806 return "weapon_shockwave";
808 case RANDOM_ITEM_SUBTYPE_WEAPON_ARC:
812 case RANDOM_ITEM_SUBTYPE_WEAPON_HOOK:
814 return "weapon_hook";
816 case RANDOM_ITEM_SUBTYPE_WEAPON_TUBA:
818 return "weapon_tuba";
820 case RANDOM_ITEM_SUBTYPE_WEAPON_PORTO:
822 return "weapon_porto";
824 case RANDOM_ITEM_SUBTYPE_WEAPON_FIREBALL:
826 return "weapon_fireball";
828 case RANDOM_ITEM_SUBTYPE_WEAPON_MINELAYER:
830 return "weapon_minelayer";
832 case RANDOM_ITEM_SUBTYPE_WEAPON_HLAC:
834 return "weapon_hlac";
836 case RANDOM_ITEM_SUBTYPE_WEAPON_RIFLE:
838 return "weapon_rifle";
840 case RANDOM_ITEM_SUBTYPE_WEAPON_SEEKER:
842 return "weapon_seeker";
844 case RANDOM_ITEM_SUBTYPE_WEAPON_VAPORIZER:
846 return "weapon_vaporizer";
851 case RANDOM_ITEM_TYPE_POWERUP:
853 RandomSelection_Init();
854 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_STRENGTH,
855 autocvar_g_random_items_strength_probability, 1);
856 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_SHIELD,
857 autocvar_g_random_items_shield_probability, 1);
858 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_FUEL_REGEN,
859 autocvar_g_random_items_fuel_regen_probability, 1);
860 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_JETPACK,
861 autocvar_g_random_items_jetpack_probability, 1);
862 item_type = RandomSelection_chosen_float;
865 case RANDOM_ITEM_SUBTYPE_POWERUP_STRENGTH:
867 return "item_strength";
869 case RANDOM_ITEM_SUBTYPE_POWERUP_SHIELD:
871 return "item_invincible";
873 case RANDOM_ITEM_SUBTYPE_POWERUP_FUEL_REGEN:
875 return "item_fuel_regen";
877 case RANDOM_ITEM_SUBTYPE_POWERUP_JETPACK:
879 return "item_jetpack";
888 /// \brief Spawns a random map item.
889 /// \param[in] position Position of the item.
890 /// \return Spawned item on success, NULL otherwise.
891 entity RandomItems_SpawnMapItem(vector position)
893 string class_name = RandomItems_GetRandomMapItemClassName();
898 random_items_is_spawning = true;
899 entity item = spawn();
900 item.classname = class_name;
901 Item_Initialize(item, class_name);
902 random_items_is_spawning = false;
907 setorigin(item, position);
911 /// \brief Returns a random classname of the loot item.
912 /// \return Random classname of the loot item.
913 string RandomItems_GetRandomLootItemClassName()
915 RandomSelection_Init();
916 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_HEALTH,
917 autocvar_g_random_loot_health_probability, 1);
918 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_ARMOR,
919 autocvar_g_random_loot_armor_probability, 1);
920 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_RESOURCE,
921 autocvar_g_random_loot_resource_probability, 1);
922 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_WEAPON,
923 autocvar_g_random_loot_weapon_probability, 1);
924 RandomSelection_AddFloat(RANDOM_ITEM_TYPE_POWERUP,
925 autocvar_g_random_loot_powerup_probability, 1);
926 int item_type = RandomSelection_chosen_float;
929 case RANDOM_ITEM_TYPE_HEALTH:
931 RandomSelection_Init();
932 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_SMALL,
933 autocvar_g_random_loot_health_small_probability, 1);
934 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_MEDIUM,
935 autocvar_g_random_loot_health_medium_probability, 1);
936 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_BIG,
937 autocvar_g_random_loot_health_big_probability, 1);
938 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_HEALTH_MEGA,
939 autocvar_g_random_loot_health_mega_probability, 1);
940 item_type = RandomSelection_chosen_float;
943 case RANDOM_ITEM_SUBTYPE_HEALTH_SMALL:
945 return "item_health_small";
947 case RANDOM_ITEM_SUBTYPE_HEALTH_MEDIUM:
949 return "item_health_medium";
951 case RANDOM_ITEM_SUBTYPE_HEALTH_BIG:
953 return "item_health_big";
955 case RANDOM_ITEM_SUBTYPE_HEALTH_MEGA:
957 return "item_health_mega";
962 case RANDOM_ITEM_TYPE_ARMOR:
964 RandomSelection_Init();
965 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_SMALL,
966 autocvar_g_random_loot_armor_small_probability, 1);
967 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_MEDIUM,
968 autocvar_g_random_loot_armor_medium_probability, 1);
969 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_BIG,
970 autocvar_g_random_loot_armor_big_probability, 1);
971 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_ARMOR_MEGA,
972 autocvar_g_random_loot_armor_mega_probability, 1);
973 item_type = RandomSelection_chosen_float;
976 case RANDOM_ITEM_SUBTYPE_ARMOR_SMALL:
978 return "item_armor_small";
980 case RANDOM_ITEM_SUBTYPE_ARMOR_MEDIUM:
982 return "item_armor_medium";
984 case RANDOM_ITEM_SUBTYPE_ARMOR_BIG:
986 return "item_armor_big";
988 case RANDOM_ITEM_SUBTYPE_ARMOR_MEGA:
990 return "item_armor_mega";
995 case RANDOM_ITEM_TYPE_RESOURCE:
997 RandomSelection_Init();
998 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_SHELLS,
999 autocvar_g_random_loot_resource_shells_probability, 1);
1000 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_BULLETS,
1001 autocvar_g_random_loot_resource_bullets_probability, 1);
1002 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_ROCKETS,
1003 autocvar_g_random_loot_resource_rockets_probability, 1);
1004 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_CELLS,
1005 autocvar_g_random_loot_resource_cells_probability, 1);
1006 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_PLASMA,
1007 autocvar_g_random_loot_resource_plasma_probability, 1);
1008 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_RESOURCE_FUEL,
1009 autocvar_g_random_loot_resource_fuel_probability, 1);
1010 item_type = RandomSelection_chosen_float;
1013 case RANDOM_ITEM_SUBTYPE_RESOURCE_SHELLS:
1015 return "item_shells";
1017 case RANDOM_ITEM_SUBTYPE_RESOURCE_BULLETS:
1019 return "item_bullets";
1021 case RANDOM_ITEM_SUBTYPE_RESOURCE_ROCKETS:
1023 return "item_rockets";
1025 case RANDOM_ITEM_SUBTYPE_RESOURCE_CELLS:
1027 return "item_cells";
1029 case RANDOM_ITEM_SUBTYPE_RESOURCE_PLASMA:
1031 return "item_plasma";
1033 case RANDOM_ITEM_SUBTYPE_RESOURCE_FUEL:
1040 case RANDOM_ITEM_TYPE_WEAPON:
1042 RandomSelection_Init();
1043 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_BLASTER,
1044 autocvar_g_random_loot_weapon_blaster_probability, 1);
1045 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_SHOTGUN,
1046 autocvar_g_random_loot_weapon_shotgun_probability, 1);
1047 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_MACHINEGUN,
1048 autocvar_g_random_loot_weapon_machinegun_probability, 1);
1049 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_MORTAR,
1050 autocvar_g_random_loot_weapon_mortar_probability, 1);
1051 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_ELECTRO,
1052 autocvar_g_random_loot_weapon_electro_probability, 1);
1053 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_CRYLINK,
1054 autocvar_g_random_loot_weapon_crylink_probability, 1);
1055 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_VORTEX,
1056 autocvar_g_random_loot_weapon_vortex_probability, 1);
1057 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_HAGAR,
1058 autocvar_g_random_loot_weapon_hagar_probability, 1);
1059 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_DEVASTATOR,
1060 autocvar_g_random_loot_weapon_devastator_probability, 1);
1061 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_SHOCKWAVE,
1062 autocvar_g_random_loot_weapon_shockwave_probability, 1);
1063 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_ARC,
1064 autocvar_g_random_loot_weapon_arc_probability, 1);
1065 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_HOOK,
1066 autocvar_g_random_loot_weapon_hook_probability, 1);
1067 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_TUBA,
1068 autocvar_g_random_loot_weapon_tuba_probability, 1);
1069 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_PORTO,
1070 autocvar_g_random_loot_weapon_porto_probability, 1);
1071 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_FIREBALL,
1072 autocvar_g_random_loot_weapon_fireball_probability, 1);
1073 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_MINELAYER,
1074 autocvar_g_random_loot_weapon_minelayer_probability, 1);
1075 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_HLAC,
1076 autocvar_g_random_loot_weapon_hlac_probability, 1);
1077 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_RIFLE,
1078 autocvar_g_random_loot_weapon_rifle_probability, 1);
1079 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_SEEKER,
1080 autocvar_g_random_loot_weapon_seeker_probability, 1);
1081 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_WEAPON_VAPORIZER,
1082 autocvar_g_random_loot_weapon_vaporizer_probability, 1);
1083 item_type = RandomSelection_chosen_float;
1086 case RANDOM_ITEM_SUBTYPE_WEAPON_BLASTER:
1088 return "weapon_blaster";
1090 case RANDOM_ITEM_SUBTYPE_WEAPON_SHOTGUN:
1092 return "weapon_shotgun";
1094 case RANDOM_ITEM_SUBTYPE_WEAPON_MACHINEGUN:
1096 return "weapon_machinegun";
1098 case RANDOM_ITEM_SUBTYPE_WEAPON_MORTAR:
1100 return "weapon_mortar";
1102 case RANDOM_ITEM_SUBTYPE_WEAPON_ELECTRO:
1104 return "weapon_electro";
1106 case RANDOM_ITEM_SUBTYPE_WEAPON_CRYLINK:
1108 return "weapon_crylink";
1110 case RANDOM_ITEM_SUBTYPE_WEAPON_VORTEX:
1112 return "weapon_vortex";
1114 case RANDOM_ITEM_SUBTYPE_WEAPON_HAGAR:
1116 return "weapon_hagar";
1118 case RANDOM_ITEM_SUBTYPE_WEAPON_DEVASTATOR:
1120 return "weapon_devastator";
1122 case RANDOM_ITEM_SUBTYPE_WEAPON_SHOCKWAVE:
1124 return "weapon_shockwave";
1126 case RANDOM_ITEM_SUBTYPE_WEAPON_ARC:
1128 return "weapon_arc";
1130 case RANDOM_ITEM_SUBTYPE_WEAPON_HOOK:
1132 return "weapon_hook";
1134 case RANDOM_ITEM_SUBTYPE_WEAPON_TUBA:
1136 return "weapon_tuba";
1138 case RANDOM_ITEM_SUBTYPE_WEAPON_PORTO:
1140 return "weapon_porto";
1142 case RANDOM_ITEM_SUBTYPE_WEAPON_FIREBALL:
1144 return "weapon_fireball";
1146 case RANDOM_ITEM_SUBTYPE_WEAPON_MINELAYER:
1148 return "weapon_minelayer";
1150 case RANDOM_ITEM_SUBTYPE_WEAPON_HLAC:
1152 return "weapon_hlac";
1154 case RANDOM_ITEM_SUBTYPE_WEAPON_RIFLE:
1156 return "weapon_rifle";
1158 case RANDOM_ITEM_SUBTYPE_WEAPON_SEEKER:
1160 return "weapon_seeker";
1162 case RANDOM_ITEM_SUBTYPE_WEAPON_VAPORIZER:
1164 return "weapon_vaporizer";
1169 case RANDOM_ITEM_TYPE_POWERUP:
1171 RandomSelection_Init();
1172 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_STRENGTH,
1173 autocvar_g_random_loot_strength_probability, 1);
1174 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_SHIELD,
1175 autocvar_g_random_loot_shield_probability, 1);
1176 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_FUEL_REGEN,
1177 autocvar_g_random_loot_fuel_regen_probability, 1);
1178 RandomSelection_AddFloat(RANDOM_ITEM_SUBTYPE_POWERUP_JETPACK,
1179 autocvar_g_random_loot_jetpack_probability, 1);
1180 item_type = RandomSelection_chosen_float;
1183 case RANDOM_ITEM_SUBTYPE_POWERUP_STRENGTH:
1185 return "item_strength";
1187 case RANDOM_ITEM_SUBTYPE_POWERUP_SHIELD:
1189 return "item_invincible";
1191 case RANDOM_ITEM_SUBTYPE_POWERUP_FUEL_REGEN:
1193 return "item_fuel_regen";
1195 case RANDOM_ITEM_SUBTYPE_POWERUP_JETPACK:
1197 return "item_jetpack";
1206 /// \brief Spawns a random loot item.
1207 /// \param[in] position Position of the item.
1208 /// \return No return.
1209 void RandomItems_SpawnLootItem(vector position)
1211 string class_name = RandomItems_GetRandomLootItemClassName();
1216 vector spread = '0 0 0';
1217 spread.z = autocvar_g_random_loot_spread / 2;
1218 spread += randomvec() * autocvar_g_random_loot_spread;
1219 random_items_is_spawning = true;
1220 Item_CreateLoot(class_name, position, spread, autocvar_g_random_loot_time);
1221 random_items_is_spawning = false;
1224 //============================= Hooks ========================================
1226 REGISTER_MUTATOR(random_items, (autocvar_g_random_items ||
1227 autocvar_g_random_loot));
1229 MUTATOR_HOOKFUNCTION(random_items, BuildMutatorsString)
1231 M_ARGV(0, string) = strcat(M_ARGV(0, string), ":random_items");
1234 MUTATOR_HOOKFUNCTION(random_items, BuildMutatorsPrettyString)
1236 M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Random items");
1239 /// \brief Hook that is called when an item is about to spawn.
1240 MUTATOR_HOOKFUNCTION(random_items, FilterItem, CBC_ORDER_LAST)
1242 //PrintToChatAll("FilterItem");
1243 if (!autocvar_g_random_items)
1247 if (random_items_is_spawning == true)
1251 entity item = M_ARGV(0, entity);
1252 if (Item_IsLoot(item))
1256 if (!RandomItems_ShouldReplaceItem(item))
1260 if (RandomItems_SpawnMapItem(item.origin) == NULL)
1267 /// \brief Hook that is called after the player has touched an item.
1268 MUTATOR_HOOKFUNCTION(random_items, ItemTouched, CBC_ORDER_LAST)
1270 //PrintToChatAll("ItemTouched");
1271 if (!autocvar_g_random_items)
1275 entity item = M_ARGV(0, entity);
1276 if (Item_IsLoot(item))
1280 if (!RandomItems_ShouldReplaceItem(item))
1284 entity new_item = RandomItems_SpawnMapItem(item.origin);
1285 if (new_item == NULL)
1289 Item_ScheduleRespawn(new_item);
1293 /// \brief Hook which is called when the player dies.
1294 MUTATOR_HOOKFUNCTION(random_items, PlayerDies)
1296 //PrintToChatAll("PlayerDies");
1297 if (!autocvar_g_random_loot)
1301 entity victim = M_ARGV(2, entity);
1302 vector loot_position = victim.origin + '0 0 32';
1303 int num_loot_items = floor(autocvar_g_random_loot_min + random() *
1304 autocvar_g_random_loot_max);
1305 for (int item_index = 0; item_index < num_loot_items; ++item_index)
1307 RandomItems_SpawnLootItem(loot_position);