]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add Mutators to the guide
authorotta8634 <k9wolf@pm.me>
Wed, 8 Jan 2025 16:19:56 +0000 (00:19 +0800)
committerotta8634 <k9wolf@pm.me>
Wed, 8 Jan 2025 16:19:56 +0000 (00:19 +0800)
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.

56 files changed:
qcsrc/common/mutators/mutator/bloodloss/bloodloss.qc
qcsrc/common/mutators/mutator/bloodloss/bloodloss.qh
qcsrc/common/mutators/mutator/cloaked/_mod.inc
qcsrc/common/mutators/mutator/cloaked/_mod.qh
qcsrc/common/mutators/mutator/cloaked/cloaked.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/cloaked/cloaked.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/dodging/dodging.qc
qcsrc/common/mutators/mutator/dodging/dodging.qh
qcsrc/common/mutators/mutator/hook/_mod.inc
qcsrc/common/mutators/mutator/hook/_mod.qh
qcsrc/common/mutators/mutator/hook/hook.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/hook/hook.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/instagib/_mod.inc
qcsrc/common/mutators/mutator/instagib/_mod.qh
qcsrc/common/mutators/mutator/instagib/instagib.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/instagib/instagib.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/nades/nades.qc
qcsrc/common/mutators/mutator/nades/nades.qh
qcsrc/common/mutators/mutator/new_toys/_mod.inc
qcsrc/common/mutators/mutator/new_toys/_mod.qh
qcsrc/common/mutators/mutator/new_toys/new_toys.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/new_toys/new_toys.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/new_toys/sv_new_toys.qc
qcsrc/common/mutators/mutator/nix/_mod.inc
qcsrc/common/mutators/mutator/nix/_mod.qh
qcsrc/common/mutators/mutator/nix/nix.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/nix/nix.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/offhand_blaster/_mod.inc
qcsrc/common/mutators/mutator/offhand_blaster/_mod.qh
qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/overkill/okhmg.qc
qcsrc/common/mutators/mutator/overkill/okmachinegun.qc
qcsrc/common/mutators/mutator/overkill/oknex.qc
qcsrc/common/mutators/mutator/overkill/okrpc.qc
qcsrc/common/mutators/mutator/overkill/okshotgun.qc
qcsrc/common/mutators/mutator/overkill/overkill.qc
qcsrc/common/mutators/mutator/overkill/overkill.qh
qcsrc/common/mutators/mutator/pinata/_mod.inc
qcsrc/common/mutators/mutator/pinata/_mod.qh
qcsrc/common/mutators/mutator/pinata/pinata.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/pinata/pinata.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/rocketflying/_mod.inc
qcsrc/common/mutators/mutator/rocketflying/_mod.qh
qcsrc/common/mutators/mutator/rocketflying/rocketflying.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/rocketflying/rocketflying.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/touchexplode/_mod.inc
qcsrc/common/mutators/mutator/touchexplode/_mod.qh
qcsrc/common/mutators/mutator/touchexplode/touchexplode.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/touchexplode/touchexplode.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/vampire/_mod.inc
qcsrc/common/mutators/mutator/vampire/_mod.qh
qcsrc/common/mutators/mutator/vampire/vampire.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/vampire/vampire.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/walljump/walljump.qc
qcsrc/common/mutators/mutator/walljump/walljump.qh

index 41ceaa91fab751c6bfa7761d77f15cdc44ff9058..cd68ee1946dc6ab2338dd186766a5c2dac935748 100644 (file)
@@ -68,3 +68,12 @@ MUTATOR_HOOKFUNCTION(bloodloss, PlayerJump)
 #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
index 6f70f09beec2219624baeca92e2cd7deaa104fb4..67a1eb7adf5b96a60e2488e04c1c6255b2f39684 100644 (file)
@@ -1 +1,9 @@
 #pragma once
+
+#ifdef MENUQC
+CLASS(MutatorBloodLoss, Mutator)
+       ATTRIB(MutatorBloodLoss, m_name, string, _("Blood loss"));
+ENDCLASS(MutatorBloodLoss)
+
+REGISTER_MUTATOR(bloodloss, true, MutatorBloodLoss);
+#endif
index 16df93594712306a61673b2b8928002fa24e6c29..d77f368025c6369f1d1442175e8175f8ca80a7e1 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index dce3c58e728955f4686367352b41b2f7e826f074..7e9f378832516c60a8320ee862180ce9683fb3bb 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/cloaked/cloaked.qc b/qcsrc/common/mutators/mutator/cloaked/cloaked.qc
new file mode 100644 (file)
index 0000000..25910c4
--- /dev/null
@@ -0,0 +1,13 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/cloaked/cloaked.qh b/qcsrc/common/mutators/mutator/cloaked/cloaked.qh
new file mode 100644 (file)
index 0000000..fddd5bf
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorCloaked, Mutator)
+       ATTRIB(MutatorCloaked, m_name, string, _("Cloaked"));
+ENDCLASS(MutatorCloaked)
+
+REGISTER_MUTATOR(cloaked, true, MutatorCloaked);
+#endif
index 9e7ea204f70fea157d8c69d5930b49afc2b995d1..dac57b31233e840a4bf86cfa685bb47512073201 100644 (file)
@@ -1 +1,15 @@
 #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
index 6f70f09beec2219624baeca92e2cd7deaa104fb4..6566973df934e8587dad4687dcd3d937375806e8 100644 (file)
@@ -1 +1,9 @@
 #pragma once
+
+#ifdef MENUQC
+CLASS(MutatorDodging, Mutator)
+       ATTRIB(MutatorDodging, m_name, string, _("Dodging"));
+ENDCLASS(MutatorDodging)
+
+REGISTER_MUTATOR(dodging, true, MutatorDodging);
+#endif
index 7fe785b6f75fd01279657070792360f390d236d4..d2903410880ef9f508383f8d1f3df17f77bdd8b9 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index df09201f511888d3122aaab17d9f91694b16813d..3e006e56da7cb8223ab592a3b248cb5da2ab6252 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/hook/hook.qc b/qcsrc/common/mutators/mutator/hook/hook.qc
new file mode 100644 (file)
index 0000000..5180cf6
--- /dev/null
@@ -0,0 +1,16 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/hook/hook.qh b/qcsrc/common/mutators/mutator/hook/hook.qh
new file mode 100644 (file)
index 0000000..0737562
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorGrapplingHook, Mutator)
+       ATTRIB(MutatorGrapplingHook, m_name, string, _("Hook"));
+ENDCLASS(MutatorGrapplingHook)
+
+REGISTER_MUTATOR(hook, true, MutatorGrapplingHook);
+#endif
index d3ea3f236252e50643b78e3540f6f00b11bc7bd1..dc3443a0ed09ce20573b59b65b696a1f1787e497 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index 10d0e4a5e6f7a238fed0cb5f314f7b0cd2dad872..8f97b03d6b19845f80a2398ba6f26b76b8a0f73c 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/instagib/instagib.qc b/qcsrc/common/mutators/mutator/instagib/instagib.qc
new file mode 100644 (file)
index 0000000..aab5480
--- /dev/null
@@ -0,0 +1,26 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/instagib/instagib.qh b/qcsrc/common/mutators/mutator/instagib/instagib.qh
new file mode 100644 (file)
index 0000000..04e05ff
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorInstagib, Mutator)
+       ATTRIB(MutatorInstagib, m_name, string, _("InstaGib"));
+ENDCLASS(MutatorInstagib)
+
+REGISTER_MUTATOR(mutator_instagib, true, MutatorInstagib);
+#endif
index d65c2bd4493bc3c9650b3af5e4146c9ca0d1dad2..988284c5e8179df3771d6f6f5a5d28c0f03b8015 100644 (file)
@@ -1803,3 +1803,19 @@ MUTATOR_HOOKFUNCTION(nades, BuildMutatorsString)
 }
 
 #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
index d55551570d3c6c4b21d7dc38e40a9d16a236c3e4..8f5d8377b40e6f84277be595d093ea5660363f3b 100644 (file)
@@ -210,3 +210,11 @@ bool Projectile_isnade(int proj); // TODO: remove
 
 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
index d32cd54af28120ba226a39d048424cab7c699327..f00f9d5863645caa60a9df59b6fbdc0b928508c5 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index f736088fd2b936e3873771d6b912fb6deed5f6eb..0704834ea74c3b71728083cd6b9b39e7568600dc 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/new_toys/new_toys.qc b/qcsrc/common/mutators/mutator/new_toys/new_toys.qc
new file mode 100644 (file)
index 0000000..f7e815a
--- /dev/null
@@ -0,0 +1,38 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/new_toys/new_toys.qh b/qcsrc/common/mutators/mutator/new_toys/new_toys.qh
new file mode 100644 (file)
index 0000000..0b773ee
--- /dev/null
@@ -0,0 +1,11 @@
+#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
index e2a5ea41a7717ebdc74828261f2ffdf752c83699..c081ee15fddf8024e1c30e8c534e36990547a613 100644 (file)
@@ -1,5 +1,7 @@
 #include "sv_new_toys.qh"
 
+#include "new_toys.qh"
+
 #include "../random_items/sv_random_items.qh"
 #include <server/weapons/spawning.qh>
 
@@ -73,8 +75,6 @@ roflsound "New toys, new toys!" sound.
 
 //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
@@ -114,22 +114,6 @@ const float NT_AUTOREPLACE_NEVER = 0;
 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)
index c8e3a0a9b453560235ff81e076174b18e803744e..dea2ff33ace86a23f591ec120851a2861d50fb58 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index ee5012bfc6d8609feee31203c829cf61b72dfcee..22f5685584094f07142aed11bc66bb6c5d49440d 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/nix/nix.qc b/qcsrc/common/mutators/mutator/nix/nix.qc
new file mode 100644 (file)
index 0000000..3895353
--- /dev/null
@@ -0,0 +1,11 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/nix/nix.qh b/qcsrc/common/mutators/mutator/nix/nix.qh
new file mode 100644 (file)
index 0000000..2ef6d69
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorNIX, Mutator)
+       ATTRIB(MutatorNIX, m_name, string, _("NIX"));
+ENDCLASS(MutatorNIX)
+
+REGISTER_MUTATOR(nix, true, MutatorNIX);
+#endif
index feb7a3b7a18fc7c5cf6d6e2321c0d23996bf8a95..5ea58c0ce785009de89f47313a1edd343c0933e0 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index 5febcd4f64bc24a9ae8781c4918d110e474eb4cb..5c82e05d690e42371e9992f145f4583a6e1fb404 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qc b/qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qc
new file mode 100644 (file)
index 0000000..dd78f9b
--- /dev/null
@@ -0,0 +1,16 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qh b/qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qh
new file mode 100644 (file)
index 0000000..d5fc817
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorOffhandBlaster, Mutator)
+       ATTRIB(MutatorOffhandBlaster, m_name, string, _("Offhand blaster"));
+ENDCLASS(MutatorOffhandBlaster)
+
+REGISTER_MUTATOR(offhand_blaster, true, MutatorOffhandBlaster);
+#endif
index a35864da7e0143409b18f8a37cb6abeff413a587..1469cb059bbb18fcf1d2169e274e9538e6f03a04 100644 (file)
@@ -157,19 +157,20 @@ METHOD(OverkillHeavyMachineGun, wr_impacteffect, void(entity thiswep, entity act
 #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
index 53da43bf03239b71b2e97aacf8a3971a0f603a8e..e268e8592c9f4ff0264043b1f27a961b70dd60d9 100644 (file)
@@ -157,16 +157,17 @@ METHOD(OverkillMachineGun, wr_impacteffect, void(entity thiswep, entity actor))
 #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
index 1a567aaa21890ffe59d0a04b2b37339385d13e5e..89c23be1ea9380b841871b50ee89386278d90da2 100644 (file)
@@ -364,16 +364,17 @@ METHOD(OverkillNex, wr_zoomdir, bool(entity thiswep))
 #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
index 06767cdf4cbd52857b3bb668aa8038409ea7a562..dad56d1b4d48d38fe3532dc2f846e8bfc04211bc 100644 (file)
@@ -233,16 +233,17 @@ METHOD(OverkillRocketPropelledChainsaw, wr_impacteffect, void(entity thiswep, en
 #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
index 405cfadd3f10a85d4b006de61d7d3c6dc7878a45..22dfa1ed82d731d979ffc9de3a0d1b5dfb55e855 100644 (file)
@@ -122,16 +122,17 @@ METHOD(OverkillShotgun, wr_impacteffect, void(entity thiswep, entity actor))
 #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
index 3cb64ce9234761703a1876d0310c873fa2bbe5e8..f761ebefe7d82d98ad42b37f9e5f425c944a3f03 100644 (file)
@@ -1 +1,25 @@
 #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
index 3f59c932d39b02caf58f2abac65bdd9246f0a7da..82931a2b0c452996d9211be4f34424b94c7a0f49 100644 (file)
@@ -1,2 +1,9 @@
 #pragma once
 
+#ifdef MENUQC
+CLASS(MutatorOverkill, Mutator)
+       ATTRIB(MutatorOverkill, m_name, string, _("Overkill"));
+ENDCLASS(MutatorOverkill)
+
+REGISTER_MUTATOR(ok, true, MutatorOverkill);
+#endif
index 49eeb71370f8ccd05982fe041805ced260b6b431..7a253091a06256de6d3cae1a2e001a11beacd52d 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index 42249994c61e78c3d893864dd65c9ba31ac94772..ad1adee1b734391a15b842e3a677c97457690e07 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/pinata/pinata.qc b/qcsrc/common/mutators/mutator/pinata/pinata.qc
new file mode 100644 (file)
index 0000000..b02c7e5
--- /dev/null
@@ -0,0 +1,11 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/pinata/pinata.qh b/qcsrc/common/mutators/mutator/pinata/pinata.qh
new file mode 100644 (file)
index 0000000..9ecdc92
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorPinata, Mutator)
+       ATTRIB(MutatorPinata, m_name, string, _("PiƱata"));
+ENDCLASS(MutatorPinata)
+
+REGISTER_MUTATOR(pinata, true, MutatorPinata);
+#endif
index c3aa87c52a133990f8a27c895e89c1979943784f..e0f90c5cb1a298d83fddd48ef64d074e95f68f79 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index b76f84ec3cc7c542a385bf9d10473e099a8ee906..62c87c21db9692e4dfcd5fe86d10df598e5df96e 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/rocketflying/rocketflying.qc b/qcsrc/common/mutators/mutator/rocketflying/rocketflying.qc
new file mode 100644 (file)
index 0000000..d17f2de
--- /dev/null
@@ -0,0 +1,13 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/rocketflying/rocketflying.qh b/qcsrc/common/mutators/mutator/rocketflying/rocketflying.qh
new file mode 100644 (file)
index 0000000..d397987
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorRocketFlying, Mutator)
+       ATTRIB(MutatorRocketFlying, m_name, string, _("Rocket Flying"));
+ENDCLASS(MutatorRocketFlying)
+
+REGISTER_MUTATOR(rocketflying, true, MutatorRocketFlying);
+#endif
index 1e871f988961d035ed44541b61ad0024168dd04f..8e7d2d17993697d0f608819e79fc917e68787a1a 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index f6aa9f17721b5dfc7cc2a6cc33dcb4b40fb9746d..13844a4a5cfdfdb467062eef8ad8c5b31ae8c05a 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/touchexplode/touchexplode.qc b/qcsrc/common/mutators/mutator/touchexplode/touchexplode.qc
new file mode 100644 (file)
index 0000000..54c0898
--- /dev/null
@@ -0,0 +1,11 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/touchexplode/touchexplode.qh b/qcsrc/common/mutators/mutator/touchexplode/touchexplode.qh
new file mode 100644 (file)
index 0000000..e0e6ae8
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorTouchExplode, Mutator)
+       ATTRIB(MutatorTouchExplode, m_name, string, _("Touch explode"));
+ENDCLASS(MutatorTouchExplode)
+
+REGISTER_MUTATOR(touchexplode, true, MutatorTouchExplode);
+#endif
index 3c24ef0732e39d5ddc16c17f3f188fa4f1d7e8b2..8892178050803e03962d8a00f54d8e6c43a1a38f 100644 (file)
@@ -1,4 +1,5 @@
 // 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
index 33e8b43bc661f9d5c285b5eb8011a511ffd8044a..47afd396857a4594e9f10010cd704127a88def42 100644 (file)
@@ -1,4 +1,5 @@
 // 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
diff --git a/qcsrc/common/mutators/mutator/vampire/vampire.qc b/qcsrc/common/mutators/mutator/vampire/vampire.qc
new file mode 100644 (file)
index 0000000..47760dc
--- /dev/null
@@ -0,0 +1,14 @@
+#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
diff --git a/qcsrc/common/mutators/mutator/vampire/vampire.qh b/qcsrc/common/mutators/mutator/vampire/vampire.qh
new file mode 100644 (file)
index 0000000..63a2479
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#ifdef MENUQC
+CLASS(MutatorVampire, Mutator)
+       ATTRIB(MutatorVampire, m_name, string, _("Vampire"));
+ENDCLASS(MutatorVampire)
+
+REGISTER_MUTATOR(vampire, true, MutatorVampire);
+#endif
index 519159d917b386b9488261845caeed486f4f378c..7eef1306fcbf86c81e01e2239237579a07b7fb92 100644 (file)
@@ -73,3 +73,13 @@ MUTATOR_HOOKFUNCTION(walljump, PlayerJump)
 }
 
 #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
index 6f70f09beec2219624baeca92e2cd7deaa104fb4..7862fa19f9fd37a23261049bb8ff6820a80c9cab 100644 (file)
@@ -1 +1,9 @@
 #pragma once
+
+#ifdef MENUQC
+CLASS(MutatorWallJump, Mutator)
+       ATTRIB(MutatorWallJump, m_name, string, _("Wall jumping"));
+ENDCLASS(MutatorWallJump)
+
+REGISTER_MUTATOR(walljump, true, MutatorWallJump);
+#endif