Descriptions were based on https://gitlab.com/xonotic/xonotic/-/wikis/home for those which had an entry there.
There are some "mutators" which would be nice to include in the guide like weaponarena and weaponstay, except they aren't actually implemented as Mutators in the code.
Descriptions were added in mutatorname.qc under MENUQC, with the MENUQC-Mutator added in mutatorname.qh.
It may be worthwhile considering renaming the MENUQC-Mutator to menu_mutatorname for clarity's sake, like how there's cl_mutatorname sometimes.
The only refactoring included was in common/mutators/mutator/new_toys, relocating nt_IsNewToy from sv_new_toys.qc to new_toys.qc.
#endif
#endif
+#ifdef MENUQC
+METHOD(MutatorBloodLoss, describe, string(MutatorBloodLoss this))
+{
+ TC(MutatorBloodLoss, this);
+ return sprintf(_("%s is a mutator in which players below a certain health threshold (for example 25) will suffer blood loss\n\n"
+ "Blood loss makes players stunned, severely impairs their movement, and rapidly takes away health points until they either die or gain enough health to go above the health threshold"),
+ COLORED_NAME(this));
+}
+#endif
#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorBloodLoss, Mutator)
+ ATTRIB(MutatorBloodLoss, m_name, string, _("Blood loss"));
+ENDCLASS(MutatorBloodLoss)
+
+REGISTER_MUTATOR(bloodloss, true, MutatorBloodLoss);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/cloaked/cloaked.qc>
#ifdef SVQC
#include <common/mutators/mutator/cloaked/sv_cloaked.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/cloaked/cloaked.qh>
#ifdef SVQC
#include <common/mutators/mutator/cloaked/sv_cloaked.qh>
#endif
--- /dev/null
+#include "cloaked.qh"
+
+#ifdef MENUQC
+#include <common/mutators/mutator/powerups/powerup/invisibility.qh>
+
+METHOD(MutatorCloaked, describe, string(MutatorCloaked this))
+{
+ TC(MutatorCloaked, this);
+ return sprintf(_("The %s mutator makes all players nearly invisible, similar to the %s powerup. "
+ "This adds an extra layer of stealth and strategy to gameplay"),
+ COLORED_NAME(this), COLORED_NAME(ITEM_Invisibility));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorCloaked, Mutator)
+ ATTRIB(MutatorCloaked, m_name, string, _("Cloaked"));
+ENDCLASS(MutatorCloaked)
+
+REGISTER_MUTATOR(cloaked, true, MutatorCloaked);
+#endif
#include "dodging.qh"
+
+#ifdef MENUQC
+#include <common/mutators/mutator/overkill/overkill.qh>
+
+METHOD(MutatorDodging, describe, string(MutatorDodging this))
+{
+ TC(MutatorDodging, this);
+ return sprintf(_("%s is a mutator that enables dodging maneuvers, making evading attacks in close combat easier. "
+ "If enabled, when you're standing on the ground and double tap a movement key, you will leap in that direction. "
+ "This also works while in contact with a wall, allowing quick speed gain if done repeatedly against a long wall\n\n"
+ "Some other mutators like %s enable this by default"),
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_ok));
+}
+#endif
#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorDodging, Mutator)
+ ATTRIB(MutatorDodging, m_name, string, _("Dodging"));
+ENDCLASS(MutatorDodging)
+
+REGISTER_MUTATOR(dodging, true, MutatorDodging);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/hook/hook.qc>
#ifdef CSQC
#include <common/mutators/mutator/hook/cl_hook.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/hook/hook.qh>
#ifdef CSQC
#include <common/mutators/mutator/hook/cl_hook.qh>
#endif
--- /dev/null
+#include "hook.qh"
+
+#ifdef MENUQC
+#include <common/mutators/mutator/offhand_blaster/offhand_blaster.qh>
+#include <common/weapons/weapon/hook.qh>
+
+METHOD(MutatorGrapplingHook, describe, string(MutatorGrapplingHook this))
+{
+ TC(MutatorGrapplingHook, this);
+ return sprintf(_("The %s mutator gives all players a %s as their offhand weapon, used with ^3+hook^7. "
+ "It has unlimited ammo, but the ordinary secondary fire can't be used\n\n"
+ "Since it's given as an offhand, players can use it to move around and shoot at their enemies at the same time, opening up more gameplay possibilities than the regular %s\n\n"
+ "Note that it is overridden by the %s mutator"),
+ COLORED_NAME(this), COLORED_NAME(WEP_HOOK), COLORED_NAME(WEP_HOOK), COLORED_NAME(MUTATOR_offhand_blaster));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorGrapplingHook, Mutator)
+ ATTRIB(MutatorGrapplingHook, m_name, string, _("Hook"));
+ENDCLASS(MutatorGrapplingHook)
+
+REGISTER_MUTATOR(hook, true, MutatorGrapplingHook);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/instagib/instagib.qc>
#ifdef SVQC
#include <common/mutators/mutator/instagib/sv_instagib.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/instagib/instagib.qh>
#ifdef SVQC
#include <common/mutators/mutator/instagib/sv_instagib.qh>
#endif
--- /dev/null
+#include "instagib.qh"
+
+#ifdef MENUQC
+#include "items.qh"
+#include <common/gamemodes/gamemode/deathmatch/deathmatch.qh>
+#include <common/items/item/ammo.qh>
+#include <common/mutators/mutator/powerups/powerup/speed.qh>
+#include <common/mutators/mutator/powerups/powerup/invisibility.qh>
+#include <common/weapons/weapon/vaporizer.qh>
+
+METHOD(MutatorInstagib, describe, string(MutatorInstagib this))
+{
+ TC(MutatorInstagib, this);
+ string s = sprintf(_("%s is a mutator that removes all weapons and weapon pickups and gives all players the %s, "
+ "which immediately frags players in a single shot, hence the name \"InstaGib\"\n\n"
+ "Precise aim and ammo conservation are important, since you will suicide after 10 seconds if you run out of ammo. "
+ "Ammo (%s) can be picked up on the map often, or collected from dropped %s guns\n\n"),
+ COLORED_NAME(this), COLORED_NAME(WEP_VAPORIZER), COLORED_NAME(ITEM_Cells), COLORED_NAME(WEP_VAPORIZER));
+ s = strcat(s, sprintf(_("Maps often have an %s on them, which will save you from being fragged when picked up (total extra lives is displayed as armor). "
+ "Other powerups often present on maps include %s and %s\n\n"
+ "It is quite a common mutator present on many servers, mixing well with a lot of gamemodes but particularly %s. "
+ "Sometimes it's enabled alongside other mutators such as %s for added movement possibilities"),
+ COLORED_NAME(ITEM_ExtraLife), COLORED_NAME(ITEM_Speed), COLORED_NAME(ITEM_Invisibility), COLORED_NAME(MAPINFO_TYPE_DEATHMATCH), COLORED_NAME(MUTATOR_hook)));
+ return s;
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorInstagib, Mutator)
+ ATTRIB(MutatorInstagib, m_name, string, _("InstaGib"));
+ENDCLASS(MutatorInstagib)
+
+REGISTER_MUTATOR(mutator_instagib, true, MutatorInstagib);
+#endif
}
#endif
+#ifdef MENUQC
+#include <common/mutators/mutator/hook/hook.qh>
+#include <common/mutators/mutator/offhand_blaster/offhand_blaster.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
+
+METHOD(MutatorNades, describe, string(MutatorNades this))
+{
+ TC(MutatorNades, this);
+ return sprintf(_("The %s mutator gives all players offhand nades that can be primed then thrown by pressing ^3drop weapon^7 twice. "
+ "If the %s and %s mutators are disabled, they can also be thrown by holding then releasing ^3+hook^7\n\n"
+ "There are multiple types of nades that can be selected, and many options available regarding this mutator, "
+ "so they may act a little differently depending on the server you play on\n\n"
+ "This mutator is enabled by default in %s"),
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_offhand_blaster), COLORED_NAME(MUTATOR_hook), COLORED_NAME(MUTATOR_ok));
+}
+#endif
void DrawAmmoNades(vector myPos, vector mySize, bool draw_expanding, float expand_time); // TODO: mutator
#endif
+
+#ifdef MENUQC
+CLASS(MutatorNades, Mutator)
+ ATTRIB(MutatorNades, m_name, string, _("Nades"));
+ENDCLASS(MutatorNades)
+
+REGISTER_MUTATOR(nades, true, MutatorNades);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/new_toys/new_toys.qc>
#ifdef SVQC
#include <common/mutators/mutator/new_toys/sv_new_toys.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/new_toys/new_toys.qh>
#ifdef SVQC
#include <common/mutators/mutator/new_toys/sv_new_toys.qh>
#endif
--- /dev/null
+#include "new_toys.qh"
+
+#include <common/weapons/_all.qh>
+
+// TODO: unhardcode this
+bool nt_IsNewToy(int w)
+{
+ switch(w)
+ {
+ case WEP_SEEKER.m_id:
+ case WEP_MINE_LAYER.m_id:
+ case WEP_HLAC.m_id:
+ case WEP_RIFLE.m_id:
+ case WEP_SHOCKWAVE.m_id:
+ case WEP_ARC.m_id:
+ return true;
+ default:
+ return false;
+ }
+}
+
+#ifdef MENUQC
+#include <common/mutators/mutator/instagib/instagib.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
+
+METHOD(MutatorNewToys, describe, string(MutatorNewToys this))
+{
+ TC(MutatorNewToys, this);
+ string s = sprintf(_("The %s mutator, enabled by default, allows the spawning of new gimmicky weapons, sometimes replacing a core weapon\n\n"
+ "Since these weapons can't spawn in %s and %s, the %s mutator can't be enabled concurrently\n\n"
+ "The current %s weapons are:"), // do it like this so that the string doesn't need to change when the list is updated
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_mutator_instagib), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this), COLORED_NAME(this));
+ FOREACH(Weapons, nt_IsNewToy(it.m_id), {
+ s = strcat(s, "\n", COLORED_NAME(it));
+ });
+ return s;
+}
+#endif
--- /dev/null
+#pragma once
+
+bool nt_IsNewToy(int w);
+
+#ifdef MENUQC
+CLASS(MutatorNewToys, Mutator)
+ ATTRIB(MutatorNewToys, m_name, string, _("New Toys"));
+ENDCLASS(MutatorNewToys)
+
+REGISTER_MUTATOR(nt, true, MutatorNewToys);
+#endif
#include "sv_new_toys.qh"
+#include "new_toys.qh"
+
#include "../random_items/sv_random_items.qh"
#include <server/weapons/spawning.qh>
//string autocvar_g_new_toys;
-bool nt_IsNewToy(int w);
-
REGISTER_MUTATOR(nt, expr_evaluate(cvar_string("g_new_toys")) && !MUTATOR_IS_ENABLED(mutator_instagib) && !MUTATOR_IS_ENABLED(ok))
{
MUTATOR_ONADD
const float NT_AUTOREPLACE_ALWAYS = 1;
const float NT_AUTOREPLACE_RANDOM = 2;
-bool nt_IsNewToy(int w)
-{
- switch(w)
- {
- case WEP_SEEKER.m_id:
- case WEP_MINE_LAYER.m_id:
- case WEP_HLAC.m_id:
- case WEP_RIFLE.m_id:
- case WEP_SHOCKWAVE.m_id:
- case WEP_ARC.m_id:
- return true;
- default:
- return false;
- }
-}
-
string nt_GetFullReplacement(string w)
{
switch(w)
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/nix/nix.qc>
#ifdef SVQC
#include <common/mutators/mutator/nix/sv_nix.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/nix/nix.qh>
#ifdef SVQC
#include <common/mutators/mutator/nix/sv_nix.qh>
#endif
--- /dev/null
+#include "nix.qh"
+
+#ifdef MENUQC
+METHOD(MutatorNIX, describe, string(MutatorNIX this))
+{
+ TC(MutatorNIX, this);
+ return sprintf(_("%s (\"No Items Xonotic\") is a mutator that removes all weapon and ammo pickups from the map, and gives all players the same randomly selected weapon. "
+ "After some time, the weapon is reselected, and this repeats forever"),
+ COLORED_NAME(this));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorNIX, Mutator)
+ ATTRIB(MutatorNIX, m_name, string, _("NIX"));
+ENDCLASS(MutatorNIX)
+
+REGISTER_MUTATOR(nix, true, MutatorNIX);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/offhand_blaster/offhand_blaster.qc>
#ifdef CSQC
#include <common/mutators/mutator/offhand_blaster/cl_offhand_blaster.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/offhand_blaster/offhand_blaster.qh>
#ifdef CSQC
#include <common/mutators/mutator/offhand_blaster/cl_offhand_blaster.qh>
#endif
--- /dev/null
+#include "offhand_blaster.qh"
+
+#ifdef MENUQC
+#include <common/mutators/mutator/hook/hook.qh>
+#include <common/weapons/weapon/blaster.qh>
+
+METHOD(MutatorOffhandBlaster, describe, string(MutatorOffhandBlaster this))
+{
+ TC(MutatorOffhandBlaster, this);
+ return sprintf(_("The %s mutator gives all players a %s as their offhand weapon, used with ^3+hook^7. "
+ "It can be fired at any time, but the ordinary secondary fire can't be used\n\n"
+ "Since it's given as an offhand, you can fire it at the same time as the ordinary %s while laser jumping to achieve even more height\n\n"
+ "Note that it overrides the %s mutator, since they use the same bind"),
+ COLORED_NAME(this), COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER), COLORED_NAME(MUTATOR_hook));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorOffhandBlaster, Mutator)
+ ATTRIB(MutatorOffhandBlaster, m_name, string, _("Offhand blaster"));
+ENDCLASS(MutatorOffhandBlaster)
+
+REGISTER_MUTATOR(offhand_blaster, true, MutatorOffhandBlaster);
+#endif
#endif
#ifdef MENUQC
#include <common/items/item/ammo.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
#include "okmachinegun.qh"
METHOD(OverkillHeavyMachineGun, describe, string(OverkillHeavyMachineGun this))
{
TC(OverkillHeavyMachineGun, this);
return sprintf(_("The %s is a superweapon that rapidly fires harmful bullets with a small degree of spread\n\n"
- "Like with all Overkill weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
+ "Like with all %s weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
"It is a superweapon found on some maps, meaning that it breaks down after some time\n\n"
- "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in Overkill. "
+ "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in %s. "
"It has a limited magazine size, so needs reloading after several shots\n\n"
"The %s can be used in a lot of situations, and it works particularly well at long ranges since the bullets pierce the sky instantaneously\n\n"
"Since its bullets deal a lot more damage than the %s's bullets, it is often heavily contested when it spawns in"),
- COLORED_NAME(this), COLORED_NAME(ITEM_Bullets), COLORED_NAME(this), COLORED_NAME(WEP_OVERKILL_MACHINEGUN));
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_ok), COLORED_NAME(ITEM_Bullets), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this), COLORED_NAME(WEP_OVERKILL_MACHINEGUN));
}
#endif
#endif
#ifdef MENUQC
#include <common/items/item/ammo.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
METHOD(OverkillMachineGun, describe, string(OverkillMachineGun this))
{
TC(OverkillMachineGun, this);
return sprintf(_("The %s quickly fires bullets with a small degree of spread\n\n"
- "Like with all Overkill weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
- "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in Overkill. "
+ "Like with all %s weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
+ "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in %s. "
"It has a limited magazine size, so needs reloading after several shots\n\n"
"The %s can be used in a lot of situations, and it works particularly well at long ranges since the bullets pierce the sky instantaneously"),
- COLORED_NAME(this), COLORED_NAME(ITEM_Bullets), COLORED_NAME(this));
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_ok), COLORED_NAME(ITEM_Bullets), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this));
}
#endif
#endif
#ifdef MENUQC
#include <common/items/item/ammo.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
METHOD(OverkillNex, describe, string(OverkillNex this))
{
TC(OverkillNex, this);
return sprintf(_("The %s fires harmful beams of energy that traverse the map instantaneously and deal a significant chunk of damage on impact\n\n"
- "Like with all Overkill weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
- "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in Overkill. "
+ "Like with all %s weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
+ "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in %s. "
"It has a limited magazine size, so needs reloading after several shots\n\n"
- "Since it is the only Overkill weapon with no spread, the %s stands out at long ranges"),
- COLORED_NAME(this), COLORED_NAME(ITEM_Cells), COLORED_NAME(this));
+ "Since it is the only %s weapon with no spread, the %s stands out at long ranges"),
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_ok), COLORED_NAME(ITEM_Cells), COLORED_NAME(MUTATOR_ok), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this));
}
#endif
#endif
#ifdef MENUQC
#include <common/items/item/ammo.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
METHOD(OverkillRocketPropelledChainsaw, describe, string(OverkillRocketPropelledChainsaw this))
{
TC(OverkillRocketPropelledChainsaw, this);
return sprintf(_("As the name suggests, the %s is a superweapon that fires a rocket propelled chainsaw which explodes on impact, dealing a lot of splash damage to any players close by\n\n"
- "Like with all Overkill weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
+ "Like with all %s weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
"It is a superweapon found on some maps, meaning that it breaks down after some time\n\n"
- "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in Overkill\n\n"
- "Since it is the only Overkill weapon which deals splash damage, the %s is a good choice of weapon for attacking groups of enemies"),
- COLORED_NAME(this), COLORED_NAME(ITEM_Rockets), COLORED_NAME(this));
+ "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in %s\n\n"
+ "Since it is the only %s weapon which deals splash damage, the %s is a good choice of weapon for attacking groups of enemies"),
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_ok), COLORED_NAME(ITEM_Rockets), COLORED_NAME(MUTATOR_ok), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this));
}
#endif
#endif
#ifdef MENUQC
#include <common/items/item/ammo.qh>
+#include <common/mutators/mutator/overkill/overkill.qh>
METHOD(OverkillShotgun, describe, string(OverkillShotgun this))
{
TC(OverkillShotgun, this);
return sprintf(_("The %s fires a single shotgun round which spreads into multiple pellets upon exiting the barrel, dealing a deadly blow if up close\n\n"
- "Like with all Overkill weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
- "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in Overkill. "
+ "Like with all %s weapons, the secondary fire shoots a laser which does not damage or push enemies, but can be used to push yourself around\n\n"
+ "The primary fire consumes %s ammo, although you spawn with an infinite amount of it in %s. "
"It has a limited magazine size, so needs reloading after several shots\n\n"
"The %s's damage drops off quickly as the range increases, so it is only useful for close combat or sometimes medium range combat"),
- COLORED_NAME(this), COLORED_NAME(ITEM_Shells), COLORED_NAME(this));
+ COLORED_NAME(this), COLORED_NAME(MUTATOR_ok), COLORED_NAME(ITEM_Shells), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this));
}
#endif
#include "overkill.qh"
+
+#ifdef MENUQC
+#include "okhmg.qh"
+#include "oknex.qh"
+#include "okmachinegun.qh"
+#include "okrpc.qh"
+#include "okshotgun.qh"
+#include <common/mutators/mutator/dodging/dodging.qh>
+#include <common/mutators/mutator/nades/nades.qh>
+
+METHOD(MutatorOverkill, describe, string(MutatorOverkill this))
+{
+ TC(MutatorOverkill, this);
+ string s = sprintf(_("%s is a mutator that heavily modifies the game, giving players fewer but more powerful weapons, nades, and more movement options\n\n"
+ "In terms of weaponry, players have infinite ammo and spawn in with the %s, %s, and %s, and can pick up the %s and %s superweapons on the map sometimes. "
+ "These weapons are a lot more powerful than the regular weapons, so their time-to-kill is quite low\n\n"
+ "The secondary fire of all weapons shoots a laser which does not damage or push enemies, but can be used to push yourself around. "),
+ COLORED_NAME(this), COLORED_NAME(WEP_OVERKILL_SHOTGUN), COLORED_NAME(WEP_OVERKILL_MACHINEGUN), COLORED_NAME(WEP_OVERKILL_NEX), COLORED_NAME(WEP_OVERKILL_HMG), COLORED_NAME(WEP_OVERKILL_RPC));
+ s = strcat(s, sprintf(_("Also since the %s mutator is active, all players have offhand nades\n\n"
+ "As for movement tricks, %s is enabled by default in %s, allowing for rapidly changing your movement direction"),
+ COLORED_NAME(MUTATOR_nades), COLORED_NAME(MUTATOR_dodging), COLORED_NAME(this)));
+ return s;
+}
+#endif
#pragma once
+#ifdef MENUQC
+CLASS(MutatorOverkill, Mutator)
+ ATTRIB(MutatorOverkill, m_name, string, _("Overkill"));
+ENDCLASS(MutatorOverkill)
+
+REGISTER_MUTATOR(ok, true, MutatorOverkill);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/pinata/pinata.qc>
#ifdef SVQC
#include <common/mutators/mutator/pinata/sv_pinata.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/pinata/pinata.qh>
#ifdef SVQC
#include <common/mutators/mutator/pinata/sv_pinata.qh>
#endif
--- /dev/null
+#include "pinata.qh"
+
+#ifdef MENUQC
+METHOD(MutatorPinata, describe, string(MutatorPinata this))
+{
+ TC(MutatorPinata, this);
+ return sprintf(_("%s is a mutator that makes players drop all their weapons when they die. "
+ "Without this mutator, players normally drop only their equipped weapon"),
+ COLORED_NAME(this));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorPinata, Mutator)
+ ATTRIB(MutatorPinata, m_name, string, _("PiƱata"));
+ENDCLASS(MutatorPinata)
+
+REGISTER_MUTATOR(pinata, true, MutatorPinata);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/rocketflying/rocketflying.qc>
#ifdef SVQC
#include <common/mutators/mutator/rocketflying/sv_rocketflying.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/rocketflying/rocketflying.qh>
#ifdef SVQC
#include <common/mutators/mutator/rocketflying/sv_rocketflying.qh>
#endif
--- /dev/null
+#include "rocketflying.qh"
+
+#ifdef MENUQC
+#include <common/weapons/weapon/devastator.qh>
+
+METHOD(MutatorRocketFlying, describe, string(MutatorRocketFlying this))
+{
+ TC(MutatorRocketFlying, this);
+ return sprintf(_("The %s mutator removes the slight delay when immediately detonating a %s rocket after firing. "
+ "This allows for rockets fired to be detonated much closer to your hitbox, so they can give you a much larger speed boost, also allowing flying around the map"),
+ COLORED_NAME(this), COLORED_NAME(WEP_DEVASTATOR));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorRocketFlying, Mutator)
+ ATTRIB(MutatorRocketFlying, m_name, string, _("Rocket Flying"));
+ENDCLASS(MutatorRocketFlying)
+
+REGISTER_MUTATOR(rocketflying, true, MutatorRocketFlying);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/touchexplode/touchexplode.qc>
#ifdef SVQC
#include <common/mutators/mutator/touchexplode/sv_touchexplode.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/touchexplode/touchexplode.qh>
#ifdef SVQC
#include <common/mutators/mutator/touchexplode/sv_touchexplode.qh>
#endif
--- /dev/null
+#include "touchexplode.qh"
+
+#ifdef MENUQC
+METHOD(MutatorTouchExplode, describe, string(MutatorTouchExplode this))
+{
+ TC(MutatorTouchExplode, this);
+ return sprintf(_("The %s mutator causes an explosion when two players collide if it is enabled\n\n"
+ "This is a nice way to add some silly fun to a server, but it also does allow for the use of new tactics in some gamemodes"),
+ COLORED_NAME(this));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorTouchExplode, Mutator)
+ ATTRIB(MutatorTouchExplode, m_name, string, _("Touch explode"));
+ENDCLASS(MutatorTouchExplode)
+
+REGISTER_MUTATOR(touchexplode, true, MutatorTouchExplode);
+#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/vampire/vampire.qc>
#ifdef SVQC
#include <common/mutators/mutator/vampire/sv_vampire.qc>
#endif
// genmod.sh autogenerated file; do not modify
+#include <common/mutators/mutator/vampire/vampire.qh>
#ifdef SVQC
#include <common/mutators/mutator/vampire/sv_vampire.qh>
#endif
--- /dev/null
+#include "vampire.qh"
+
+#ifdef MENUQC
+#include <common/mutators/mutator/buffs/buffs.qh>
+
+METHOD(MutatorVampire, describe, string(MutatorVampire this))
+{
+ TC(MutatorVampire, this);
+ return sprintf(_("The %s mutator gives all players a permanent version of the %s. "
+ "However, unlike the normal %s, when this mutator is enabled players' health can go way above the usual limit of 200\n\n"
+ "Additionally the amount of health players get is equal to the damage they deal, which isn't normaly the case with the %s"),
+ COLORED_NAME(this), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")));
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorVampire, Mutator)
+ ATTRIB(MutatorVampire, m_name, string, _("Vampire"));
+ENDCLASS(MutatorVampire)
+
+REGISTER_MUTATOR(vampire, true, MutatorVampire);
+#endif
}
#endif
+#ifdef MENUQC
+METHOD(MutatorWallJump, describe, string(MutatorWallJump this))
+{
+ TC(MutatorWallJump, this);
+ return sprintf(_("%s is a mutator that enables jumping off walls for added mobility. "
+ "To do a wall jump, tap ^3+jump^7 when against a wall\n\n"
+ "This mutator adds a bit of versatility, allowing for more dynamic and unpredictable movement"),
+ COLORED_NAME(this));
+}
+#endif
#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorWallJump, Mutator)
+ ATTRIB(MutatorWallJump, m_name, string, _("Wall jumping"));
+ENDCLASS(MutatorWallJump)
+
+REGISTER_MUTATOR(walljump, true, MutatorWallJump);
+#endif