1 #include "dialog_multiplayer_create_mutators.qh"
2 #include <common/weapons/_all.qh>
4 #include "weaponarenacheckbox.qh"
7 #include "textlabel.qh"
8 #include "checkbox_slider_invalid.qh"
9 #include "radiobutton.qh"
12 void XonoticMutatorsDialog_showNotify(entity me)
14 SUPER(XonoticMutatorsDialog).showNotify(me);
18 string weaponarenastring;
19 string weaponarenastring_cvar;
20 string WeaponArenaString()
24 s = cvar_string("g_weaponarena");
27 if(s == "all" || s == "1")
28 return _("All Weapons Arena");
30 return _("Most Weapons Arena");
31 if(s == weaponarenastring_cvar)
32 return weaponarenastring;
34 strunzone(weaponarenastring);
35 if(weaponarenastring_cvar)
36 strunzone(weaponarenastring_cvar);
38 weaponarenastring_cvar = strzone(s);
40 n = tokenize_console(s);
42 for(i = 0; i < n; ++i)
44 FOREACH(Weapons, it != WEP_Null, LAMBDA(
45 if(argv(i) == it.netname)
46 s = strcat(s, " & ", it.m_name);
49 s = sprintf(_("%s Arena"), substring(s, 3, strlen(s) - 3));
51 weaponarenastring = strzone(s);
53 return weaponarenastring;
56 AUTOCVAR(g_grappling_hook, bool, _("let players spawn with the grappling hook which allows them to pull themselves up"));
58 string XonoticMutatorsDialog_toString(entity me)
63 s = strcat(s, ", ", _("Dodging"));
64 if(cvar("g_instagib"))
65 s = strcat(s, ", ", _("InstaGib"));
66 if(cvar("g_new_toys"))
67 s = strcat(s, ", ", _("New Toys"));
69 s = strcat(s, ", ", _("NIX"));
70 if(cvar("g_rocket_flying"))
71 s = strcat(s, ", ", _("Rocket Flying"));
72 if(cvar("g_invincible_projectiles"))
73 s = strcat(s, ", ", _("Invincible Projectiles"));
74 if(cvar_string("g_weaponarena") != "0")
75 s = strcat(s, ", ", WeaponArenaString());
76 else if(cvar("g_balance_blaster_weaponstart") == 0)
77 s = strcat(s, ", ", _("No start weapons"));
78 if(cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))
79 s = strcat(s, ", ", _("Low gravity"));
81 s = strcat(s, ", ", _("Cloaked"));
82 if(autocvar_g_grappling_hook)
83 s = strcat(s, ", ", _("Hook"));
85 s = strcat(s, ", ", _("Midair"));
87 s = strcat(s, ", ", _("Vampire"));
89 s = strcat(s, ", ", _("Piñata"));
90 if(cvar("g_weapon_stay"))
91 s = strcat(s, ", ", _("Weapons stay"));
92 if(cvar("g_bloodloss") > 0)
93 s = strcat(s, ", ", _("Blood loss"));
95 s = strcat(s, ", ", _("Jet pack"));
97 s = strcat(s, ", ", _("Buffs"));
98 if(cvar("g_overkill"))
99 s = strcat(s, ", ", _("Overkill"));
100 if(cvar("g_powerups") == 0)
101 s = strcat(s, ", ", _("No powerups"));
102 if(cvar("g_powerups") > 0)
103 s = strcat(s, ", ", _("Powerups"));
104 if(cvar("g_touchexplode") > 0)
105 s = strcat(s, ", ", _("Touch explode"));
107 return ZCTX(_("MUT^None"));
109 return substring(s, 2, strlen(s) - 2);
112 float checkCompatibility_pinata(entity me)
114 if(cvar("g_instagib"))
118 if(cvar_string("g_weaponarena") != "0")
122 float checkCompatibility_weaponstay(entity me)
124 return checkCompatibility_pinata(me);
126 float checkCompatibility_newtoys(entity me)
128 if(cvar("g_instagib"))
130 if(cvar_string("g_weaponarena") == "most")
132 if(cvar_string("g_weaponarena") == "all" || cvar_string("g_weaponarena") == "1")
134 if(cvar_string("g_weaponarena") != "0")
138 float checkCompatibility_weaponarena_weapon(entity me)
140 if(cvar("g_instagib"))
142 if(cvar_string("g_weaponarena") == "most")
144 if(cvar_string("g_weaponarena") == "all" || cvar_string("g_weaponarena") == "1")
146 if(cvar_string("g_weaponarena") == "0")
148 if(cvar_string("g_balance_blaster_weaponstart") == "0")
153 void XonoticMutatorsDialog_fill(entity me)
158 me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Gameplay mutators:")));
161 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_dodging", _("Dodging"),
162 _("Enable dodging")));
165 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_touchexplode", _("Touch explode")));
168 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
169 _("All players are almost invisible")));
172 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_buffs", _("Buffs")));
175 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_midair", _("Midair"),
176 _("Only possible to inflict damage on your enemy while he's airborne")));
179 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_vampire", _("Vampire"),
180 _("Damage done to your enemy gets added to your own health")));
181 setDependent(e, "g_instagib", 0, 0);
184 s = makeXonoticSlider_T(10, 50, 1, "g_bloodloss",
185 _("Amount of health below which your player gets stunned because of blood loss"));
186 me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss")));
187 setDependent(e, "g_instagib", 0, 0);
190 me.TD(me, 1, 1.6, s);
193 s = makeXonoticSlider_T(80, 400, 8, "sv_gravity",
194 _("Make things fall to the ground slower, lower value means lower gravity"));
196 s.valueDisplayMultiplier = 0.125; // show gravity in percent
197 me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(800, 1, s, _("Low gravity")));
198 e.savedValue = 200; // good on silvercity
201 me.TD(me, 1, 1.6, s);
203 me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Weapon & item mutators:")));
206 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_grappling_hook", _("Grappling hook"),
207 _("Players spawn with the grappling hook")));
210 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_jetpack", _("Jet pack"),
211 _("Players spawn with the jetpack")));
214 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_invincible_projectiles", _("Invincible Projectiles")));
215 setDependent(e, "g_instagib", 0, 0);
218 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_new_toys", _("New Toys")));
219 setDependentWeird(e, checkCompatibility_newtoys);
222 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_rocket_flying", _("Rocket Flying")));
223 setDependent(e, "g_instagib", 0, 0);
226 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_pinata", _("Piñata"),
227 _("Players will drop all weapons they possessed when they are killed")));
228 setDependentWeird(e, checkCompatibility_pinata);
231 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_weapon_stay", _("Weapons stay"),
232 _("Weapons stay after they are picked up")));
233 setDependentWeird(e, checkCompatibility_weaponstay);
236 me.gotoRC(me, 0, 2); me.setFirstColumn(me, me.currentColumn);
237 me.TD(me, 1, 2, e = makeXonoticRadioButton(1, string_null, string_null, _("Regular (no arena)")));
239 me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "g_weaponarena", "menu_weaponarena", _("Weapon arenas:"),
240 _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
241 e.cvarValueIsAnotherCvar = true;
242 e.cvarOffValue = "0";
243 for(i = WEP_FIRST, j = 0; i <= WEP_LAST; ++i)
246 if(w.spawnflags & WEP_FLAG_HIDDEN)
251 me.TD(me, 1, 1.8, e = makeXonoticWeaponarenaCheckBox(strzone(w.netname), strzone(w.m_name)));
252 setDependentWeird(e, checkCompatibility_weaponarena_weapon);
257 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "most", _("Most weapons"),
258 _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
259 e.cvarOffValue = "0";
262 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "all", _("All weapons"),
263 _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
264 e.cvarOffValue = "0";
266 me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:")));
269 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_instagib", "1", _("InstaGib"),
270 _("Players will be given only one weapon, which can instantly kill the opponent with a single shot. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode does not inflict any damage but is good for doing trickjumps.")));
271 e.cvarOffValue = "0";
274 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_nix", "1", _("NIX"),
275 _("No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.")));
276 e.cvarOffValue = "0";
279 me.TD(me, 1, 1.6, e = makeXonoticCheckBox_T(0, "g_nix_with_blaster", _("with blaster"),
280 _("Always carry the blaster as an additional weapon in Nix")));
281 setDependent(e, "g_nix", 1, 1);
284 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_balance_blaster_weaponstart", "0", _("No start weapons"), "-"));
285 e.cvarOffValue = "-1";
286 makeMulti(e, "g_balance_shotgun_weaponstart g_balance_machinegun_weaponstart g_balance_devastator_weaponstart g_balance_minelayer_weaponstart g_balance_electro_weaponstart g_balance_crylink_weaponstart g_balance_hagar_weaponstart g_balance_porto_weaponstart g_balance_vaporizer_weaponstart g_balance_hook_weaponstart g_balance_rifle_weaponstart g_balance_fireball_weaponstart g_balance_seeker_weaponstart g_balance_tuba_weaponstart g_balance_arc_weaponstart g_balance_vortex_weaponstart g_balance_mortar_weaponstart");
288 me.gotoRC(me, me.rows - 1, 0);
289 me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
290 e.onClick = Dialog_Close;
291 e.onClickEntity = me;
294 .void(entity) refilter;
296 void XonoticMutatorsDialog_close(entity me)
298 if(me.refilterEntity)
299 me.refilterEntity.refilter(me.refilterEntity);
300 SUPER(XonoticMutatorsDialog).close(me);