1 #include "dialog_multiplayer_create_mutators.qh"
2 #include <common/weapons/all.qh>
4 #ifndef DIALOG_MULTIPLAYER_CREATE_MUTATORS_H
5 #define DIALOG_MULTIPLAYER_CREATE_MUTATORS_H
7 CLASS(XonoticMutatorsDialog, XonoticDialog)
8 METHOD(XonoticMutatorsDialog, toString, string(entity));
9 METHOD(XonoticMutatorsDialog, fill, void(entity));
10 METHOD(XonoticMutatorsDialog, showNotify, void(entity));
11 METHOD(XonoticMutatorsDialog, close, void(entity));
12 ATTRIB(XonoticMutatorsDialog, title, string, _("Mutators"))
13 ATTRIB(XonoticMutatorsDialog, color, vector, SKINCOLOR_DIALOG_MUTATORS)
14 ATTRIB(XonoticMutatorsDialog, intendedWidth, float, 0.9)
15 ATTRIB(XonoticMutatorsDialog, rows, float, 20)
16 ATTRIB(XonoticMutatorsDialog, columns, float, 6)
17 ATTRIB(XonoticMutatorsDialog, refilterEntity, entity, NULL)
18 ENDCLASS(XonoticMutatorsDialog)
22 void XonoticMutatorsDialog_showNotify(entity me)
24 SUPER(XonoticMutatorsDialog).showNotify(me);
28 string weaponarenastring;
29 string weaponarenastring_cvar;
30 string WeaponArenaString()
34 s = cvar_string("g_weaponarena");
37 if(s == "all" || s == "1")
38 return _("All Weapons Arena");
40 return _("Most Weapons Arena");
41 if(s == weaponarenastring_cvar)
42 return weaponarenastring;
44 strunzone(weaponarenastring);
45 if(weaponarenastring_cvar)
46 strunzone(weaponarenastring_cvar);
48 weaponarenastring_cvar = strzone(s);
50 n = tokenize_console(s);
52 for(i = 0; i < n; ++i)
54 FOREACH(Weapons, it != WEP_Null, LAMBDA(
55 if(argv(i) == it.netname)
56 s = strcat(s, " & ", it.m_name);
59 s = sprintf(_("%s Arena"), substring(s, 3, strlen(s) - 3));
61 weaponarenastring = strzone(s);
63 return weaponarenastring;
66 AUTOCVAR(g_grappling_hook, bool, _("let players spawn with the grappling hook which allows them to pull themselves up"));
68 string XonoticMutatorsDialog_toString(entity me)
73 s = strcat(s, ", ", _("Dodging"));
74 if(cvar("g_instagib"))
75 s = strcat(s, ", ", _("InstaGib"));
76 if(cvar("g_new_toys"))
77 s = strcat(s, ", ", _("New Toys"));
79 s = strcat(s, ", ", _("NIX"));
80 if(cvar("g_rocket_flying"))
81 s = strcat(s, ", ", _("Rocket Flying"));
82 if(cvar("g_invincible_projectiles"))
83 s = strcat(s, ", ", _("Invincible Projectiles"));
84 if(cvar_string("g_weaponarena") != "0")
85 s = strcat(s, ", ", WeaponArenaString());
86 else if(cvar("g_balance_blaster_weaponstart") == 0)
87 s = strcat(s, ", ", _("No start weapons"));
88 if(cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))
89 s = strcat(s, ", ", _("Low gravity"));
91 s = strcat(s, ", ", _("Cloaked"));
92 if(autocvar_g_grappling_hook)
93 s = strcat(s, ", ", _("Hook"));
95 s = strcat(s, ", ", _("Midair"));
97 s = strcat(s, ", ", _("Vampire"));
99 s = strcat(s, ", ", _("Piñata"));
100 if(cvar("g_weapon_stay"))
101 s = strcat(s, ", ", _("Weapons stay"));
102 if(cvar("g_bloodloss") > 0)
103 s = strcat(s, ", ", _("Blood loss"));
104 if(cvar("g_jetpack"))
105 s = strcat(s, ", ", _("Jet pack"));
107 s = strcat(s, ", ", _("Buffs"));
108 if(cvar("g_overkill"))
109 s = strcat(s, ", ", _("Overkill"));
110 if(cvar("g_powerups") == 0)
111 s = strcat(s, ", ", _("No powerups"));
112 if(cvar("g_powerups") > 0)
113 s = strcat(s, ", ", _("Powerups"));
114 if(cvar("g_touchexplode") > 0)
115 s = strcat(s, ", ", _("Touch explode"));
117 return ZCTX(_("MUT^None"));
119 return substring(s, 2, strlen(s) - 2);
122 float checkCompatibility_pinata(entity me)
124 if(cvar("g_instagib"))
128 if(cvar_string("g_weaponarena") != "0")
132 float checkCompatibility_weaponstay(entity me)
134 return checkCompatibility_pinata(me);
136 float checkCompatibility_newtoys(entity me)
138 if(cvar("g_instagib"))
140 if(cvar_string("g_weaponarena") == "most")
142 if(cvar_string("g_weaponarena") == "all" || cvar_string("g_weaponarena") == "1")
144 if(cvar_string("g_weaponarena") != "0")
148 float checkCompatibility_weaponarena_weapon(entity me)
150 if(cvar("g_instagib"))
152 if(cvar_string("g_weaponarena") == "most")
154 if(cvar_string("g_weaponarena") == "all" || cvar_string("g_weaponarena") == "1")
156 if(cvar_string("g_weaponarena") == "0")
158 if(cvar_string("g_balance_blaster_weaponstart") == "0")
163 void XonoticMutatorsDialog_fill(entity me)
168 me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Gameplay mutators:")));
171 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_dodging", _("Dodging"),
172 _("Enable dodging")));
175 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_touchexplode", _("Touch explode")));
178 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
179 _("All players are almost invisible")));
182 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_buffs", _("Buffs")));
185 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_midair", _("Midair"),
186 _("Only possible to inflict damage on your enemy while he's airborne")));
189 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_vampire", _("Vampire"),
190 _("Damage done to your enemy gets added to your own health")));
191 setDependent(e, "g_instagib", 0, 0);
194 s = makeXonoticSlider_T(10, 50, 1, "g_bloodloss",
195 _("Amount of health below which your player gets stunned because of blood loss"));
196 me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss")));
197 setDependent(e, "g_instagib", 0, 0);
200 me.TD(me, 1, 1.6, s);
203 s = makeXonoticSlider_T(80, 400, 8, "sv_gravity",
204 _("Make things fall to the ground slower, lower value means lower gravity"));
206 s.valueDisplayMultiplier = 0.125; // show gravity in percent
207 me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(800, 1, s, _("Low gravity")));
208 e.savedValue = 200; // good on silvercity
211 me.TD(me, 1, 1.6, s);
213 me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Weapon & item mutators:")));
216 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_grappling_hook", _("Grappling hook"),
217 _("Players spawn with the grappling hook")));
220 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_jetpack", _("Jet pack"),
221 _("Players spawn with the jetpack")));
224 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_invincible_projectiles", _("Invincible Projectiles")));
225 setDependent(e, "g_instagib", 0, 0);
228 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_new_toys", _("New Toys")));
229 setDependentWeird(e, checkCompatibility_newtoys);
232 me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_rocket_flying", _("Rocket Flying")));
233 setDependent(e, "g_instagib", 0, 0);
236 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_pinata", _("Piñata"),
237 _("Players will drop all weapons they possessed when they are killed")));
238 setDependentWeird(e, checkCompatibility_pinata);
241 me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_weapon_stay", _("Weapons stay"),
242 _("Weapons stay after they are picked up")));
243 setDependentWeird(e, checkCompatibility_weaponstay);
246 me.gotoRC(me, 0, 2); me.setFirstColumn(me, me.currentColumn);
247 me.TD(me, 1, 2, e = makeXonoticRadioButton(1, string_null, string_null, _("Regular (no arena)")));
249 me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "g_weaponarena", "menu_weaponarena", _("Weapon arenas:"),
250 _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
251 e.cvarValueIsAnotherCvar = true;
252 e.cvarOffValue = "0";
253 for(i = WEP_FIRST, j = 0; i <= WEP_LAST; ++i)
256 if(w.spawnflags & WEP_FLAG_HIDDEN)
261 me.TD(me, 1, 1.8, e = makeXonoticWeaponarenaCheckBox(strzone(w.netname), strzone(w.m_name)));
262 setDependentWeird(e, checkCompatibility_weaponarena_weapon);
267 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "most", _("Most weapons"),
268 _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
269 e.cvarOffValue = "0";
272 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "all", _("All weapons"),
273 _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
274 e.cvarOffValue = "0";
276 me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:")));
279 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_instagib", "1", _("InstaGib"),
280 _("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.")));
281 e.cvarOffValue = "0";
284 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_nix", "1", _("NIX"),
285 _("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.")));
286 e.cvarOffValue = "0";
289 me.TD(me, 1, 1.6, e = makeXonoticCheckBox_T(0, "g_nix_with_blaster", _("with blaster"),
290 _("Always carry the blaster as an additional weapon in Nix")));
291 setDependent(e, "g_nix", 1, 1);
294 me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_balance_blaster_weaponstart", "0", _("No start weapons"), "-"));
295 e.cvarOffValue = "-1";
296 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");
298 me.gotoRC(me, me.rows - 1, 0);
299 me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
300 e.onClick = Dialog_Close;
301 e.onClickEntity = me;
304 void XonoticMutatorsDialog_close(entity me)
306 if(me.refilterEntity)
307 me.refilterEntity.refilter(me.refilterEntity);
308 SUPER(XonoticMutatorsDialog).close(me);