3 CORE laser vortex lg rl cry gl elec hagar fireb hook
7 NEW rifle hlac minel seeker
8 IDEAS OPEN flak OPEN FUN FUN FUN FUN
12 How this mutator works:
13 =======================
15 When a gun tries to spawn, this mutator is called. It will provide alternate
21 "classname" "weapon_vortex"
24 -> This will spawn as Rifle in this mutator ONLY, and as Vortex otherwise.
27 "classname" "weapon_vortext"
28 "new_toys" "vortex rifle"
30 -> This will spawn as either Vortex or Rifle in this mutator ONLY, and as Vortex otherwise.
33 "classname" "weapon_vortex"
36 -> This is always a Vortex.
38 If the map specifies no "new_toys" argument
40 There will be two default replacements selectable: "replace all" and "replace random".
41 In "replace all" mode, e.g. Vortex will have the default replacement "rifle".
42 In "replace random" mode, Vortex will have the default replacement "vortex rifle".
44 This mutator's replacements run BEFORE regular weaponreplace!
46 The New Toys guns do NOT get a spawn function, so they can only ever be spawned
47 when this mutator is active.
49 Likewise, warmup, give all, give ALL and impulse 99 will not give them unless
50 this mutator is active.
52 Outside this mutator, they still can be spawned by:
53 - setting their start weapon cvar to 1
56 - weaponarena (but all and most weapons arena again won't include them)
58 This mutator performs the default replacements on the DEFAULTS of the
59 start weapon selection.
61 These weapons appear in the menu's priority list, BUT get a suffix
64 Picking up a "new toys" weapon will not play standard weapon pickup sound, but
65 roflsound "New toys, new toys!" sound.
71 float autocvar_g_new_toys_autoreplace;
72 #define NT_AUTOREPLACE_NEVER 0
73 #define NT_AUTOREPLACE_ALWAYS 1
74 #define NT_AUTOREPLACE_RANDOM 2
76 MUTATOR_HOOKFUNCTION(nt_SetModname)
82 float nt_IsNewToy(float w)
97 string nt_GetFullReplacement(string w)
101 case "hagar": return "seeker";
102 case "rocketlauncher": return "minelayer";
103 case "uzi": return "hlac";
104 case "vortex": return "rifle";
105 case "shockwave": return "shotgun";
106 default: return string_null;
110 string nt_GetReplacement(string w, float m)
112 if(m == NT_AUTOREPLACE_NEVER)
114 string s = nt_GetFullReplacement(w);
117 if(m == NT_AUTOREPLACE_RANDOM)
118 s = strcat(w, " ", s);
122 MUTATOR_HOOKFUNCTION(nt_SetStartItems)
124 // rearrange start_weapon_default
125 // apply those bits that are set by start_weapon_defaultmask
131 WepSet warmup_newdefault;
133 newdefault = '0 0 0';
134 warmup_newdefault = '0 0 0';
136 for(i = WEP_FIRST; i <= WEP_LAST; ++i)
138 entity e = get_weaponinfo(i);
142 n = tokenize_console(nt_GetReplacement(e.netname, autocvar_g_new_toys_autoreplace));
144 for(j = 0; j < n; ++j)
145 for(k = WEP_FIRST; k <= WEP_LAST; ++k)
146 if(get_weaponinfo(k).netname == argv(j))
148 if(start_weapons & WepSet_FromWeapon(i))
149 newdefault |= WepSet_FromWeapon(k);
150 if(warmup_start_weapons & WepSet_FromWeapon(i))
151 warmup_newdefault |= WepSet_FromWeapon(k);
155 newdefault &= start_weapons_defaultmask;
156 start_weapons &= ~start_weapons_defaultmask;
157 start_weapons |= newdefault;
159 warmup_newdefault &= warmup_start_weapons_defaultmask;
160 warmup_start_weapons &= ~warmup_start_weapons_defaultmask;
161 warmup_start_weapons |= warmup_newdefault;
166 MUTATOR_HOOKFUNCTION(nt_SetWeaponreplace)
168 // otherwise, we do replace
171 // map defined replacement:
172 ret_string = self.new_toys;
177 ret_string = nt_GetReplacement(other.netname, autocvar_g_new_toys_autoreplace);
180 // apply regular weaponreplace
181 ret_string = W_Apply_Weaponreplace(ret_string);
186 MUTATOR_HOOKFUNCTION(nt_FilterItem)
188 if(nt_IsNewToy(self.weapon))
189 self.item_pickupsound = "weapons/weaponpickup_new_toys.wav";
193 MUTATOR_DEFINITION(mutator_new_toys)
195 MUTATOR_HOOK(SetModname, nt_SetModname, CBC_ORDER_ANY);
196 MUTATOR_HOOK(SetStartItems, nt_SetStartItems, CBC_ORDER_ANY);
197 MUTATOR_HOOK(SetWeaponreplace, nt_SetWeaponreplace, CBC_ORDER_LAST);
198 MUTATOR_HOOK(FilterItem, nt_FilterItem, CBC_ORDER_ANY);
202 if(time > 1) // game loads at time 1
203 error("This cannot be added at runtime\n");
205 precache_sound("weapons/weaponpickup_new_toys.wav");
207 // mark the guns as ok to use by e.g. impulse 99
209 for(i = WEP_FIRST; i <= WEP_LAST; ++i)
211 get_weaponinfo(i).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
214 MUTATOR_ONROLLBACK_OR_REMOVE
217 for(i = WEP_FIRST; i <= WEP_LAST; ++i)
219 get_weaponinfo(i).spawnflags |= WEP_FLAG_MUTATORBLOCKED;
224 print("This cannot be removed at runtime\n");