This will allow for addressing the circular includes "issue" from before.
#include "ammo.qh"
+#ifdef MENUQC
+METHOD(Shells, describe, string(Shells this))
+{
+ TC(Shells, this);
+ return sprintf(_("The %s ammo type is used by the %s and %s"),
+ COLORED_NAME(Shells),
+ strcat(rgb_to_hexcolor(COLOR_WEP_SHOTGUN), _("Shotgun"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_OKSHOTGUN), _("Overkill Shotgun"), "^7")
+ );
+}
+
+METHOD(Bullets, describe, string(Bullets this))
+{
+ TC(Bullets, this);
+ return sprintf(_("The %s ammo type is used by the %s, %s, %s, and %s"),
+ COLORED_NAME(Bullets),
+ strcat(rgb_to_hexcolor(COLOR_WEP_MACHINEGUN), _("MachineGun"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_RIFLE), _("Rifle"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_OKMACHINEGUN), _("Overkill MachineGun"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_OKHMG), _("Overkill Heavy Machine Gun"), "^7")
+ );
+}
+
+METHOD(Rockets, describe, string(Rockets this))
+{
+ TC(Rockets, this);
+ return sprintf(_("The %s ammo type is used by the %s, %s, %s, %s, %s, and %s"),
+ COLORED_NAME(Rockets),
+ strcat(rgb_to_hexcolor(COLOR_WEP_DEVASTATOR), _("Devastator"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_MORTAR), _("Mortar"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_HAGAR), _("Hagar"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_MINELAYER), _("Mine Layer"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_SEEKER), _("T.A.G. Seeker"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_OKRPC), _("Overkill Rocket Propelled Chainsaw"), "^7")
+ );
+}
+
+METHOD(Cells, describe, string(Cells this))
+{
+ TC(Cells, this);
+ return sprintf(_("The %s ammo type is used by the %s, %s, %s, %s, %s, and %s"),
+ COLORED_NAME(Cells),
+ strcat(rgb_to_hexcolor(COLOR_WEP_VORTEX), _("Vortex"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_CRYLINK), _("Crylink"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_ELECTRO), _("Electro"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_HLAC), _("Heavy Laser Assault Cannon"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_VAPORIZER), _("Vaporizer"), "^7"),
+ strcat(rgb_to_hexcolor(COLOR_WEP_ARC), _("Arc"), "^7")
+ );
+}
+#endif
/* itemid */ ATTRIB(Shells, m_itemid, int, IT_RESOURCE);
/* iteminit */ ATTRIB(Shells, m_iteminit, void(Pickup this, entity item), ammo_shells_init);
#endif
-#ifdef MENUQC
-METHOD(Shells, describe, string(Shells this))
-{
- TC(Shells, this);
- return sprintf(_("The %s ammo type is used by the %s and %s"),
- COLORED_NAME(Shells),
- strcat(rgb_to_hexcolor(COLOR_WEP_SHOTGUN), _("Shotgun"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_OKSHOTGUN), _("Overkill Shotgun"), "^7")
- );
-}
-#endif
ENDCLASS(Shells)
REGISTER_ITEM(Shells, NEW(Shells));
/* itemid */ ATTRIB(Bullets, m_itemid, int, IT_RESOURCE);
/* iteminit */ ATTRIB(Bullets, m_iteminit, void(Pickup this, entity item), ammo_bullets_init);
#endif
-#ifdef MENUQC
-METHOD(Bullets, describe, string(Bullets this))
-{
- TC(Bullets, this);
- return sprintf(_("The %s ammo type is used by the %s, %s, %s, and %s"),
- COLORED_NAME(Bullets),
- strcat(rgb_to_hexcolor(COLOR_WEP_MACHINEGUN), _("MachineGun"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_RIFLE), _("Rifle"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_OKMACHINEGUN), _("Overkill MachineGun"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_OKHMG), _("Overkill Heavy Machine Gun"), "^7")
- );
-}
-#endif
ENDCLASS(Bullets)
REGISTER_ITEM(Bullets, NEW(Bullets));
/* itemid */ ATTRIB(Rockets, m_itemid, int, IT_RESOURCE);
/* iteminit */ ATTRIB(Rockets, m_iteminit, void(Pickup this, entity item), ammo_rockets_init);
#endif
-#ifdef MENUQC
-METHOD(Rockets, describe, string(Rockets this))
-{
- TC(Rockets, this);
- return sprintf(_("The %s ammo type is used by the %s, %s, %s, %s, %s, and %s"),
- COLORED_NAME(Rockets),
- strcat(rgb_to_hexcolor(COLOR_WEP_DEVASTATOR), _("Devastator"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_MORTAR), _("Mortar"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_HAGAR), _("Hagar"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_MINELAYER), _("Mine Layer"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_SEEKER), _("T.A.G. Seeker"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_OKRPC), _("Overkill Rocket Propelled Chainsaw"), "^7")
- );
-}
-#endif
ENDCLASS(Rockets)
REGISTER_ITEM(Rockets, NEW(Rockets));
/* itemid */ ATTRIB(Cells, m_itemid, int, IT_RESOURCE);
/* iteminit */ ATTRIB(Cells, m_iteminit, void(Pickup this, entity item), ammo_cells_init);
#endif
-#ifdef MENUQC
-METHOD(Cells, describe, string(Cells this))
-{
- TC(Cells, this);
- return sprintf(_("The %s ammo type is used by the %s, %s, %s, %s, %s, and %s"),
- COLORED_NAME(Cells),
- strcat(rgb_to_hexcolor(COLOR_WEP_VORTEX), _("Vortex"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_CRYLINK), _("Crylink"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_ELECTRO), _("Electro"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_HLAC), _("Heavy Laser Assault Cannon"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_VAPORIZER), _("Vaporizer"), "^7"),
- strcat(rgb_to_hexcolor(COLOR_WEP_ARC), _("Arc"), "^7")
- );
-}
-#endif
ENDCLASS(Cells)
REGISTER_ITEM(Cells, NEW(Cells));
#include "armor.qh"
+
+#ifdef MENUQC
+METHOD(ArmorSmall, describe, string(ArmorSmall this))
+{
+ TC(ArmorSmall, this);
+ return sprintf(_("The %s provides you a small amount of armor when picked up, "
+ "protecting you from damage by absorbing incoming hits until it is depleted"),
+ COLORED_NAME(ArmorSmall));
+}
+
+METHOD(ArmorMedium, describe, string(ArmorMedium this))
+{
+ TC(ArmorMedium, this);
+ return sprintf(_("The %s provides you a medium amount of armor when picked up, "
+ "protecting you from damage by absorbing incoming hits until it is depleted"),
+ COLORED_NAME(ArmorMedium));
+}
+
+METHOD(ArmorBig, describe, string(ArmorBig this))
+{
+ TC(ArmorBig, this);
+ return sprintf(_("The %s provides you a large amount of armor when picked up, "
+ "protecting you from damage by absorbing incoming hits until it is depleted"),
+ COLORED_NAME(ArmorBig));
+}
+
+METHOD(ArmorMega, describe, string(ArmorMega this))
+{
+ TC(ArmorMega, this);
+ return sprintf(_("The %s provides you a huge amount of armor when picked up, "
+ "protecting you from damage by absorbing incoming hits until it is depleted\n\n"
+ "It tends to be one of the most highly contested items on a map, particularly in game modes like Duel"),
+ COLORED_NAME(ArmorMega));
+}
+#endif
/* pickupanyway */ ATTRIB(ArmorSmall, m_pickupanyway, float, GET(g_pickup_armorsmall_anyway));
/* iteminit */ ATTRIB(ArmorSmall, m_iteminit, void(Pickup this, entity item), item_armorsmall_init);
#endif
-#ifdef MENUQC
-METHOD(ArmorSmall, describe, string(ArmorSmall this))
-{
- TC(ArmorSmall, this);
- return sprintf(_("The %s provides you a small amount of armor when picked up, "
- "protecting you from damage by absorbing incoming hits until it is depleted"),
- COLORED_NAME(ArmorSmall));
-}
-#endif
ENDCLASS(ArmorSmall)
REGISTER_ITEM(ArmorSmall, NEW(ArmorSmall));
/* pickupanyway */ ATTRIB(ArmorMedium, m_pickupanyway, float, GET(g_pickup_armormedium_anyway));
/* iteminit */ ATTRIB(ArmorMedium, m_iteminit, void(Pickup this, entity item), item_armormedium_init);
#endif
-#ifdef MENUQC
-METHOD(ArmorMedium, describe, string(ArmorMedium this))
-{
- TC(ArmorMedium, this);
- return sprintf(_("The %s provides you a medium amount of armor when picked up, "
- "protecting you from damage by absorbing incoming hits until it is depleted"),
- COLORED_NAME(ArmorMedium));
-}
-#endif
ENDCLASS(ArmorMedium)
REGISTER_ITEM(ArmorMedium, NEW(ArmorMedium));
/* pickupanyway */ ATTRIB(ArmorBig, m_pickupanyway, float, GET(g_pickup_armorbig_anyway));
/* iteminit */ ATTRIB(ArmorBig, m_iteminit, void(Pickup this, entity item), item_armorbig_init);
#endif
-#ifdef MENUQC
-METHOD(ArmorBig, describe, string(ArmorBig this))
-{
- TC(ArmorBig, this);
- return sprintf(_("The %s provides you a large amount of armor when picked up, "
- "protecting you from damage by absorbing incoming hits until it is depleted"),
- COLORED_NAME(ArmorBig));
-}
-#endif
ENDCLASS(ArmorBig)
REGISTER_ITEM(ArmorBig, NEW(ArmorBig));
/* pickupanyway */ ATTRIB(ArmorMega, m_pickupanyway, float, GET(g_pickup_armormega_anyway));
/* iteminit */ ATTRIB(ArmorMega, m_iteminit, void(Pickup this, entity item), item_armormega_init);
#endif
-#ifdef MENUQC
-METHOD(ArmorMega, describe, string(ArmorMega this))
-{
- TC(ArmorMega, this);
- return sprintf(_("The %s provides you a huge amount of armor when picked up, "
- "protecting you from damage by absorbing incoming hits until it is depleted\n\n"
- "It tends to be one of the most highly contested items on a map, particularly in game modes like Duel"),
- COLORED_NAME(ArmorMega));
-}
-#endif
ENDCLASS(ArmorMega)
REGISTER_ITEM(ArmorMega, NEW(ArmorMega));
#include "health.qh"
+
+#ifdef MENUQC
+METHOD(HealthSmall, describe, string(HealthSmall this))
+{
+ TC(HealthSmall, this);
+ return sprintf(_("The %s restores a small amount of health when picked up, "
+ "helping you recover from damage taken during combat"),
+ COLORED_NAME(HealthSmall));
+}
+
+METHOD(HealthMedium, describe, string(HealthMedium this))
+{
+ TC(HealthMedium, this);
+ return sprintf(_("The %s restores a medium amount of health when picked up, "
+ "helping you recover from damage taken during combat"),
+ COLORED_NAME(HealthMedium));
+}
+
+METHOD(HealthBig, describe, string(HealthBig this))
+{
+ TC(HealthBig, this);
+ return sprintf(_("The %s restores a large amount of health when picked up, "
+ "helping you recover from damage taken during combat"),
+ COLORED_NAME(HealthBig));
+}
+
+METHOD(HealthMega, describe, string(HealthMega this))
+{
+ TC(HealthMega, this);
+ return sprintf(_("The %s restores a huge amount of health when picked up, "
+ "helping you recover from damage taken during combat\n\n"
+ "It tends to be one of the most highly contested items on a map, particularly in game modes like Duel"),
+ COLORED_NAME(HealthMega));
+}
+#endif
/* pickupanyway */ ATTRIB(HealthSmall, m_pickupanyway, float, GET(g_pickup_healthsmall_anyway));
/* iteminit */ ATTRIB(HealthSmall, m_iteminit, void(Pickup this, entity item), item_healthsmall_init);
#endif
-#ifdef MENUQC
-METHOD(HealthSmall, describe, string(HealthSmall this))
-{
- TC(HealthSmall, this);
- return sprintf(_("The %s restores a small amount of health when picked up, "
- "helping you recover from damage taken during combat"),
- COLORED_NAME(HealthSmall));
-}
-#endif
ENDCLASS(HealthSmall)
REGISTER_ITEM(HealthSmall, NEW(HealthSmall));
/* pickupanyway */ ATTRIB(HealthMedium, m_pickupanyway, float, GET(g_pickup_healthmedium_anyway));
/* iteminit */ ATTRIB(HealthMedium, m_iteminit, void(Pickup this, entity item), item_healthmedium_init);
#endif
-#ifdef MENUQC
-METHOD(HealthMedium, describe, string(HealthMedium this))
-{
- TC(HealthMedium, this);
- return sprintf(_("The %s restores a medium amount of health when picked up, "
- "helping you recover from damage taken during combat"),
- COLORED_NAME(HealthMedium));
-}
-#endif
ENDCLASS(HealthMedium)
REGISTER_ITEM(HealthMedium, NEW(HealthMedium));
/* pickupanyway */ ATTRIB(HealthBig, m_pickupanyway, float, GET(g_pickup_healthbig_anyway));
/* iteminit */ ATTRIB(HealthBig, m_iteminit, void(Pickup this, entity item), item_healthbig_init);
#endif
-#ifdef MENUQC
-METHOD(HealthBig, describe, string(HealthBig this))
-{
- TC(HealthBig, this);
- return sprintf(_("The %s restores a large amount of health when picked up, "
- "helping you recover from damage taken during combat"),
- COLORED_NAME(HealthBig));
-}
-#endif
ENDCLASS(HealthBig)
REGISTER_ITEM(HealthBig, NEW(HealthBig));
/* pickupanyway */ ATTRIB(HealthMega, m_pickupanyway, float, GET(g_pickup_healthmega_anyway));
/* iteminit */ ATTRIB(HealthMega, m_iteminit, void(Pickup this, entity item), item_healthmega_init);
#endif
-#ifdef MENUQC
-METHOD(HealthMega, describe, string(HealthMega this))
-{
- TC(HealthMega, this);
- return sprintf(_("The %s restores a huge amount of health when picked up, "
- "helping you recover from damage taken during combat\n\n"
- "It tends to be one of the most highly contested items on a map, particularly in game modes like Duel"),
- COLORED_NAME(HealthMega));
-}
-#endif
ENDCLASS(HealthMega)
REGISTER_ITEM(HealthMega, NEW(HealthMega));
#include "jetpack.qh"
#ifdef SVQC
-
METHOD(Jetpack, m_spawnfunc_hookreplace, GameItem(Jetpack this, entity e))
{
- if(start_items & ITEM_Jetpack.m_itemid)
- {
+ if (start_items & ITEM_Jetpack.m_itemid)
return ITEM_JetpackFuel;
- }
return this;
}
METHOD(JetpackRegen, m_spawnfunc_hookreplace, GameItem(JetpackRegen this, entity e))
{
if (start_items & ITEM_JetpackRegen.m_itemid)
- {
return ITEM_JetpackFuel;
- }
return this;
}
+#endif
+
+#ifdef MENUQC
+METHOD(Jetpack, describe, string(Jetpack this))
+{
+ TC(Jetpack, this);
+ return sprintf(_("The %s allows you to fly around the map for a short period, "
+ "providing increased mobility, maneuverability, and the ability to reach higher ground\n\n"
+ "It consumes Fuel ammo while operating, so make sure you don't run out when you're high up!"),
+ COLORED_NAME(Jetpack));
+}
+METHOD(JetpackFuel, describe, string(JetpackFuel this))
+{
+ TC(JetpackFuel, this);
+ return sprintf(_("The %s ammo type is used by the %s"),
+ COLORED_NAME(JetpackFuel), COLORED_NAME(Jetpack));
+}
+
+METHOD(JetpackRegen, describe, string(JetpackRegen this))
+{
+ TC(JetpackRegen, this);
+ return sprintf(_("The %s powerup regenerates %s needed for the %s until the powerup expires, "
+ "so you can continue flying around for longer\n\n"
+ "Since it is a powerup, it will drop if you die while holding it"),
+ COLORED_NAME(JetpackRegen), COLORED_NAME(JetpackFuel), COLORED_NAME(Jetpack));
+}
#endif
/* pickupfunc */ ATTRIB(Jetpack, m_pickupevalfunc, float(entity player, entity item), ammo_pickupevalfunc);
/* iteminit */ ATTRIB(Jetpack, m_iteminit, void(Pickup this, entity item), powerup_jetpack_init);
#endif
-#ifdef MENUQC
-METHOD(Jetpack, describe, string(Jetpack this))
-{
- TC(Jetpack, this);
- return sprintf(_("The %s allows you to fly around the map for a short period, "
- "providing increased mobility, maneuverability, and the ability to reach higher ground\n\n"
- "It consumes Fuel ammo while operating, so make sure you don't run out when you're high up!"),
- COLORED_NAME(Jetpack));
-}
-#endif
ENDCLASS(Jetpack)
REGISTER_ITEM(Jetpack, NEW(Jetpack));
/* itemid */ ATTRIB(JetpackFuel, m_itemid, int, IT_RESOURCE);
/* iteminit */ ATTRIB(JetpackFuel, m_iteminit, void(Pickup this, entity item), ammo_fuel_init);
#endif
-#ifdef MENUQC
-METHOD(JetpackFuel, describe, string(JetpackFuel this))
-{
- TC(JetpackFuel, this);
- return sprintf(_("The %s ammo type is used by the %s"),
- COLORED_NAME(JetpackFuel), COLORED_NAME(Jetpack));
-}
-#endif
ENDCLASS(JetpackFuel)
REGISTER_ITEM(JetpackFuel, NEW(JetpackFuel));
/* pickupfunc */ ATTRIB(JetpackRegen, m_pickupevalfunc, float(entity player, entity item), ammo_pickupevalfunc);
/* iteminit */ ATTRIB(JetpackRegen, m_iteminit, void(Pickup this, entity item), powerup_fuelregen_init);
#endif
-#ifdef MENUQC
-METHOD(JetpackRegen, describe, string(JetpackRegen this))
-{
- TC(JetpackRegen, this);
- return sprintf(_("The %s powerup regenerates %s needed for the %s until the powerup expires, "
- "so you can continue flying around for longer\n\n"
- "Since it is a powerup, it will drop if you die while holding it"),
- COLORED_NAME(JetpackRegen), COLORED_NAME(JetpackFuel), COLORED_NAME(Jetpack));
-}
-#endif
ENDCLASS(JetpackRegen)
REGISTER_ITEM(JetpackRegen, NEW(JetpackRegen));
return true;
}
#endif
+#ifdef MENUQC
+METHOD(Golem, describe, string(Golem this))
+{
+ TC(Golem, this);
+ return _("Golems are truly a force to be feared. They tend to have an immense amount of health and take only half the damage from explosions\n\n"
+ "His pride and joy is his lightning energy attack. His attacks are throwing electro balls, and if the prey is near him he will attack with his claws");
+}
+#endif
#endif
ATTRIB(Golem, netname, string, "golem");
ATTRIB(Golem, m_name, string, _("Golem"));
-#ifdef MENUQC
- METHOD(Golem, describe, string(Golem this))
- {
- TC(Golem, this);
- return _("Golems are truly a force to be feared. They tend to have an immense amount of health and take only half the damage from explosions\n\n"
- "His pride and joy is his lightning energy attack. His attacks are throwing electro balls, and if the prey is near him he will attack with his claws");
- }
-#endif
ENDCLASS(Golem)
REGISTER_MONSTER(GOLEM, NEW(Golem));
return true;
}
#endif
+#ifdef MENUQC
+METHOD(Mage, describe, string(Mage this))
+{
+ TC(Mage, this);
+ return _("Mages are capable of developing magic with their powerful knowledge that they learn and practice during their spell sciences. "
+ "Sometimes the Mage can give regeneration to the owner and sometimes makes the owner pay the health for his needs to be with him\n\n"
+ "The Mage attacks by launching magic balls. This spell attack is known as \"Mage spike\"");
+}
+#endif
#endif
ATTRIB(Mage, netname, string, "mage");
ATTRIB(Mage, m_name, string, _("Mage"));
-#ifdef MENUQC
- METHOD(Mage, describe, string(Mage this))
- {
- TC(Mage, this);
- return _("Mages are capable of developing magic with their powerful knowledge that they learn and practice during their spell sciences. "
- "Sometimes the Mage can give regeneration to the owner and sometimes makes the owner pay the health for his needs to be with him\n\n"
- "The Mage attacks by launching magic balls. This spell attack is known as \"Mage spike\"");
- }
-#endif
ENDCLASS(Mage)
REGISTER_MONSTER(MAGE, NEW(Mage));
return true;
}
#endif
+#ifdef MENUQC
+METHOD(Spider, describe, string(Spider this))
+{
+ TC(Spider, this);
+ return _("The Spider is a big arachnid that walks with 8 legs only on the ground, traveling faster than other monsters\n\n"
+ "When an opponent approaches a Spider, it will spit cobweb energy balls to slow down prey, then attack nearby opponents with its chelicerae");
+}
+#endif
#endif
ATTRIB(Spider, netname, string, "spider");
ATTRIB(Spider, m_name, string, _("Spider"));
-#ifdef MENUQC
- METHOD(Spider, describe, string(Spider this))
- {
- TC(Spider, this);
- return _("The Spider is a big arachnid that walks with 8 legs only on the ground, traveling faster than other monsters\n\n"
- "When an opponent approaches a Spider, it will spit cobweb energy balls to slow down prey, then attack nearby opponents with its chelicerae");
- }
-#endif
ENDCLASS(Spider)
REGISTER_MONSTER(SPIDER, NEW(Spider));
return true;
}
#endif
+#ifdef MENUQC
+METHOD(Wyvern, describe, string(Wyvern this))
+{
+ TC(Wyvern, this);
+ return _("The Wyvern is a dragon that was said to breathe fire or to possess a poisonous breath, a reptilian body, two legs or sometimes none, and a spiked tail. "
+ "The alleged marine variant had a fishtail instead of the spiny dragon tail\n\n"
+ "Wyvern flies around the map and chases and attacks his opponents with fireballs");
+}
+#endif
#endif
ATTRIB(Wyvern, netname, string, "wyvern");
ATTRIB(Wyvern, m_name, string, _("Wyvern"));
-#ifdef MENUQC
- METHOD(Wyvern, describe, string(Wyvern this))
- {
- TC(Wyvern, this);
- return _("The Wyvern is a dragon that was said to breathe fire or to possess a poisonous breath, a reptilian body, two legs or sometimes none, and a spiked tail. "
- "The alleged marine variant had a fishtail instead of the spiny dragon tail\n\n"
- "Wyvern flies around the map and chases and attacks his opponents with fireballs");
- }
-#endif
ENDCLASS(Wyvern)
REGISTER_MONSTER(WYVERN, NEW(Wyvern));
return true;
}
#endif
+#ifdef MENUQC
+METHOD(Zombie, describe, string(Zombie this))
+{
+ TC(Zombie, this);
+ return _("The Zombie is an undead human that tears chunks of flesh from its head, hindquarters, and crotch before proceeding to toss them at the player character for minor damage\n\n"
+ "When an opponent comes too close to the Zombie, it will start chasing then launch to attack with a bite\n\n"
+ "When a Zombie is close to death, it will stand in a \"dead pose,\" from which it can be revived. "
+ "To properly kill one, you will need to damage the Zombie when it is in a dead pose");
+}
+#endif
#endif
ATTRIB(Zombie, netname, string, "zombie");
ATTRIB(Zombie, m_name, string, _("Zombie"));
-#ifdef MENUQC
- METHOD(Zombie, describe, string(Zombie this))
- {
- TC(Zombie, this);
- return _("The Zombie is an undead human that tears chunks of flesh from its head, hindquarters, and crotch before proceeding to toss them at the player character for minor damage\n\n"
- "When an opponent comes too close to the Zombie, it will start chasing then launch to attack with a bite\n\n"
- "When a Zombie is close to death, it will stand in a \"dead pose,\" from which it can be revived. "
- "To properly kill one, you will need to damage the Zombie when it is in a dead pose");
- }
-#endif
ENDCLASS(Zombie)
REGISTER_MONSTER(ZOMBIE, NEW(Zombie));
#include "items.qh"
+
+#ifdef MENUQC
+METHOD(VaporizerCells, describe, string(VaporizerCells this))
+{
+ // can't include common/weapons/weapon/vaporizer.qh or else circular includes
+#define VAPORIZER_COLOR strcat(rgb_to_hexcolor(COLOR_WEP_VAPORIZER), _("Vaporizer"), "^7")
+ TC(VaporizerCells, this);
+ return sprintf(_("The %s is sometimes present on maps when InstaGib is enabled, providing ammo for the %s"),
+ COLORED_NAME(VaporizerCells), VAPORIZER_COLOR);
+#undef VAPORIZER_COLOR
+}
+
+METHOD(ExtraLife, describe, string(ExtraLife this))
+{
+ TC(ExtraLife, this);
+ return sprintf(_("The %s powerup acts as armor in InstaGib. "
+ "If a player is shot while having one or more extra lives, they will survive the shot but suffer strong knockback"),
+ COLORED_NAME(ExtraLife));
+}
+#endif
/* */ ATTRIB(VaporizerCells, m_respawntimejitter, float, GET(instagib_respawntimejitter_ammo));
/* iteminit */ ATTRIB(VaporizerCells, m_iteminit, void(Pickup this, entity item), ammo_vaporizercells_init);
#endif
-#ifdef MENUQC
-METHOD(VaporizerCells, describe, string(VaporizerCells this))
-{
- // can't include common/weapons/weapon/vaporizer.qh or else circular includes
-#define VAPORIZER_COLOR strcat(rgb_to_hexcolor(COLOR_WEP_VAPORIZER), _("Vaporizer"), "^7")
- TC(VaporizerCells, this);
- return sprintf(_("The %s is sometimes present on maps when InstaGib is enabled, providing ammo for the %s"),
- COLORED_NAME(VaporizerCells), VAPORIZER_COLOR);
-#undef VORTEX_COLOR
-}
-#endif
ENDCLASS(VaporizerCells)
REGISTER_ITEM(VaporizerCells, NEW(VaporizerCells));
#ifdef SVQC
/* itemid */ ATTRIB(ExtraLife, m_itemid, int, IT_RESOURCE);
#endif
-#ifdef MENUQC
-METHOD(ExtraLife, describe, string(ExtraLife this))
-{
- TC(ExtraLife, this);
- return sprintf(_("The %s powerup acts as armor in InstaGib. "
- "If a player is shot while having one or more extra lives, they will survive the shot but suffer strong knockback"),
- COLORED_NAME(ExtraLife));
-}
-#endif
ENDCLASS(ExtraLife)
REGISTER_ITEM(ExtraLife, NEW(ExtraLife));
}
#endif
+#ifdef MENUQC
+
+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"
+ "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. "
+ "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(OverkillHeavyMachineGun), COLORED_NAME(Bullets), COLORED_NAME(OverkillHeavyMachineGun), COLORED_NAME(OverkillMachineGun));
+}
+
+#endif
END()
W_PROPS(X, OverkillHeavyMachineGun, okhmg)
#undef X
-#ifdef MENUQC
-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"
- "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. "
- "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(OverkillHeavyMachineGun), COLORED_NAME(Bullets), COLORED_NAME(OverkillHeavyMachineGun), COLORED_NAME(OverkillMachineGun));
-}
-#endif
ENDCLASS(OverkillHeavyMachineGun)
REGISTER_WEAPON(OVERKILL_HMG, NEW(OverkillHeavyMachineGun));
}
#endif
+#ifdef MENUQC
+
+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. "
+ "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(OverkillMachineGun), COLORED_NAME(Bullets), COLORED_NAME(OverkillMachineGun));
+}
+
+#endif
END()
W_PROPS(X, OverkillMachineGun, okmachinegun)
#undef X
-#ifdef MENUQC
-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. "
- "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(OverkillMachineGun), COLORED_NAME(Bullets), COLORED_NAME(OverkillMachineGun));
-}
-#endif
ENDCLASS(OverkillMachineGun)
REGISTER_WEAPON(OVERKILL_MACHINEGUN, NEW(OverkillMachineGun));
}
#endif
+#ifdef MENUQC
+
+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. "
+ "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(OverkillNex), COLORED_NAME(Cells), COLORED_NAME(OverkillNex));
+}
+
+#endif
END()
W_PROPS(X, OverkillNex, oknex)
#undef X
-#ifdef MENUQC
-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. "
- "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(OverkillNex), COLORED_NAME(Cells), COLORED_NAME(OverkillNex));
-}
-#endif
ENDCLASS(OverkillNex)
REGISTER_WEAPON(OVERKILL_NEX, NEW(OverkillNex));
}
#endif
+#ifdef MENUQC
+
+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"
+ "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(OverkillRocketPropelledChainsaw), COLORED_NAME(Rockets), COLORED_NAME(OverkillRocketPropelledChainsaw));
+}
+
+#endif
END()
W_PROPS(X, OverkillRocketPropelledChainsaw, okrpc)
#undef X
-#ifdef MENUQC
-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"
- "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(OverkillRocketPropelledChainsaw), COLORED_NAME(Rockets), COLORED_NAME(OverkillRocketPropelledChainsaw));
-}
-#endif
ENDCLASS(OverkillRocketPropelledChainsaw)
REGISTER_WEAPON(OVERKILL_RPC, NEW(OverkillRocketPropelledChainsaw));
}
#endif
+#ifdef MENUQC
+
+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. "
+ "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(OverkillShotgun), COLORED_NAME(Shells), COLORED_NAME(OverkillShotgun));
+}
+
+#endif
END()
W_PROPS(X, OverkillShotgun, okshotgun)
#undef X
-#ifdef MENUQC
-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. "
- "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(OverkillShotgun), COLORED_NAME(Shells), COLORED_NAME(OverkillShotgun));
-}
-#endif
ENDCLASS(OverkillShotgun)
REGISTER_WEAPON(OVERKILL_SHOTGUN, NEW(OverkillShotgun));
SUPER(Invisibility).m_tick(this, actor);
}
#endif
+#ifdef MENUQC
+METHOD(Invisibility, describe, string(Invisibility this))
+{
+ TC(Invisibility, this);
+ return sprintf(_("The %s powerup increases your translucency while the powerup is active, making it more difficult for enemies to see you. "
+ "This powerup is often present in InstaGib\n\n"
+ "Since it is a powerup, it will drop if you die while holding it"),
+ COLORED_NAME(Invisibility));
+}
+#endif
ATTRIB(Invisibility, m_name, string, _("Invisibility"));
ATTRIB(Invisibility, m_color, vector, COLOR_POWERUP_INVISIBILITY);
ATTRIB(Invisibility, m_icon, string, "buff_invisible");
-#ifdef MENUQC
- METHOD(Invisibility, describe, string(Invisibility this))
- {
- TC(Invisibility, this);
- return sprintf(_("The %s powerup increases your translucency while the powerup is active, making it more difficult for enemies to see you. "
- "This powerup is often present in InstaGib\n\n"
- "Since it is a powerup, it will drop if you die while holding it"),
- COLORED_NAME(Invisibility));
- }
-#endif
ENDCLASS(Invisibility)
REGISTER_STATUSEFFECT(Invisibility, NEW(Invisibility));
addPowerupItem(this.m_name, this.m_icon, autocvar_hud_progressbar_shield_color, currentTime, this.m_lifetime, (actor.statuseffect_flags[this.m_id] & STATUSEFFECT_FLAG_PERSISTENT));
}
#endif
+#ifdef MENUQC
+METHOD(Shield, describe, string(Shield this))
+{
+ TC(Shield, this);
+ return sprintf(_("The %s powerup greatly decreases the damage you take until the powerup expires, having a compounding effect with armor. "
+ "It also makes you more resistant to knockback\n\n"
+ "Since it is a powerup, it will drop if you die while holding it"),
+ COLORED_NAME(Shield));
+}
+#endif
ATTRIB(Shield, m_name, string, _("Shield"));
ATTRIB(Shield, m_color, vector, COLOR_POWERUP_SHIELD);
ATTRIB(Shield, m_icon, string, "shield");
-#ifdef MENUQC
- METHOD(Shield, describe, string(Shield this))
- {
- TC(Shield, this);
- return sprintf(_("The %s powerup greatly decreases the damage you take until the powerup expires, having a compounding effect with armor. "
- "It also makes you more resistant to knockback\n\n"
- "Since it is a powerup, it will drop if you die while holding it"),
- COLORED_NAME(Shield));
- }
-#endif
ENDCLASS(Shield)
REGISTER_STATUSEFFECT(Shield, NEW(Shield));
SUPER(Speed).m_tick(this, actor);
}
#endif
+#ifdef MENUQC
+METHOD(Speed, describe, string(Speed this))
+{
+ TC(Speed, this);
+ return sprintf(_("The %s powerup increases your movement speed, attack speed, and health regeneration speed while the powerup is active. "
+ "However, it also makes you a bit more vulnerable to incoming attacks\n\n"
+ "Since it is a powerup, it will drop if you die while holding it"),
+ COLORED_NAME(Speed));
+}
+#endif
ATTRIB(Speed, m_name, string, _("Speed"));
ATTRIB(Speed, m_color, vector, COLOR_POWERUP_SPEED);
ATTRIB(Speed, m_icon, string, "buff_speed");
-#ifdef MENUQC
- METHOD(Speed, describe, string(Speed this))
- {
- TC(Speed, this);
- return sprintf(_("The %s powerup increases your movement speed, attack speed, and health regeneration speed while the powerup is active. "
- "However, it also makes you a bit more vulnerable to incoming attacks\n\n"
- "Since it is a powerup, it will drop if you die while holding it"),
- COLORED_NAME(Speed));
- }
-#endif
ENDCLASS(Speed)
REGISTER_STATUSEFFECT(Speed, NEW(Speed));
addPowerupItem(this.m_name, this.m_icon, autocvar_hud_progressbar_strength_color, currentTime, this.m_lifetime, (actor.statuseffect_flags[this.m_id] & STATUSEFFECT_FLAG_PERSISTENT));
}
#endif
+#ifdef MENUQC
+METHOD(Strength, describe, string(Strength this))
+{
+ TC(Strength, this);
+ return sprintf(_("The %s powerup greatly increases the damage you deal, until the powerup expires. "
+ "It also increases the knockback that your attacks deal\n\n"
+ "The damage and knockback you deal to yourself also increases but by a smaller amount\n\n"
+ "Since it is a powerup, it will drop if you die while holding it"),
+ COLORED_NAME(Strength));
+}
+#endif
ATTRIB(Strength, m_name, string, _("Strength"));
ATTRIB(Strength, m_color, vector, COLOR_POWERUP_STRENGTH);
ATTRIB(Strength, m_icon, string, "strength");
-#ifdef MENUQC
- METHOD(Strength, describe, string(Strength this))
- {
- TC(Strength, this);
- return sprintf(_("The %s powerup greatly increases the damage you deal, until the powerup expires. "
- "It also increases the knockback that your attacks deal\n\n"
- "The damage and knockback you deal to yourself also increases but by a smaller amount\n\n"
- "Since it is a powerup, it will drop if you die while holding it"),
- COLORED_NAME(Strength));
- }
-#endif
ENDCLASS(Strength)
REGISTER_STATUSEFFECT(Strength, NEW(Strength));
#endif
#endif
+#ifdef MENUQC
+
+METHOD(Bumblebee, describe, string(Bumblebee this))
+{
+ TC(Bumblebee, this);
+ return sprintf(_("The %s vehicle seats up to three passengers, who are given different roles based on the order they enter\n\n"
+ "The first player to enter will be the pilot, flying the vehicle up into the skies. "
+ "The first player can also shoot a green healing wave to heal other teammates on the ground\n\n"
+ "The second player to enter is the right gunner and the third player to enter is the left gunner\n\n"
+ "When the pilot exits the vehicle, the players switch roles by moving up in position"),
+ COLORED_NAME(Bumblebee));
+}
+
+#endif
/* netname */ ATTRIB(Bumblebee, netname, string, "bumblebee");
/* fullname */ ATTRIB(Bumblebee, m_name, string, _("Bumblebee"));
/* icon */ ATTRIB(Bumblebee, m_icon, string, "vehicle_bumble");
-#ifdef MENUQC
-METHOD(Bumblebee, describe, string(Bumblebee this))
-{
- TC(Bumblebee, this);
- return sprintf(_("The %s vehicle seats up to three passengers, who are given different roles based on the order they enter\n\n"
- "The first player to enter will be the pilot, flying the vehicle up into the skies. "
- "The first player can also shoot a green healing wave to heal other teammates on the ground\n\n"
- "The second player to enter is the right gunner and the third player to enter is the left gunner\n\n"
- "When the pilot exits the vehicle, the players switch roles by moving up in position"),
- COLORED_NAME(Bumblebee));
-}
-#endif
ENDCLASS(Bumblebee)
REGISTER_VEHICLE(BUMBLEBEE, NEW(Bumblebee));
}
#endif
+#ifdef MENUQC
+
+METHOD(Racer, describe, string(Racer this))
+{
+ TC(Racer, this);
+ return sprintf(_("The %s vehicle looks like a jet, but does not fly uwpards very well. "
+ "It seats only one passenger, who becomes the pilot\n\n"
+ "It can be accelerated by pressing the ^3+jump^7 bind, which consumes power from the same source as the primary weapon\n\n"
+ "The %s's primary weapon is a laser and the secondary weapon is energy balls that explode on impact"),
+ COLORED_NAME(Racer), COLORED_NAME(Racer));
+}
+
+#endif
/* netname */ ATTRIB(Racer, netname, string, "racer");
/* fullname */ ATTRIB(Racer, m_name, string, _("Racer"));
/* icon */ ATTRIB(Racer, m_icon, string, "vehicle_racer");
-#ifdef MENUQC
-METHOD(Racer, describe, string(Racer this))
-{
- TC(Racer, this);
- return sprintf(_("The %s vehicle looks like a jet, but does not fly uwpards very well. "
- "It seats only one passenger, who becomes the pilot\n\n"
- "It can be accelerated by pressing the ^3+jump^7 bind, which consumes power from the same source as the primary weapon\n\n"
- "The %s's primary weapon is a laser and the secondary weapon is energy balls that explode on impact"),
- COLORED_NAME(Racer), COLORED_NAME(Racer));
-}
-#endif
ENDCLASS(Racer)
REGISTER_VEHICLE(RACER, NEW(Racer));
#endif
#endif
+#ifdef MENUQC
+
+METHOD(Raptor, describe, string(Raptor this))
+{
+ // can't include ./spiderbot.qh or else circular includes
+#define SPIDERBOT_COLOR strcat(rgb_to_hexcolor('1 1 1'), _("Spiderbot"), "^7")
+ TC(Raptor, this);
+ return sprintf(_("The %s vehicle is a flying vehicle that takes only one pilot, who can also opearate two weapons\n\n"
+ "The two weapons have different reticles for them similar to the %s. "
+ "The primary weapon is laser-based, and is shot toward the white reticle. "
+ "The secondary weapon drops bombs to the ground, aiming towards the green reticle. "
+ "The white reticle always points at the head of the vehicle, while the green reticle's location is determined by the momentum of the vehicle"),
+ COLORED_NAME(Raptor), SPIDERBOT_COLOR);
+#undef SPIDERBOT_COLOR
+}
+
+#endif
/* netname */ ATTRIB(Raptor, netname, string, "raptor");
/* fullname */ ATTRIB(Raptor, m_name, string, _("Raptor"));
/* icon */ ATTRIB(Raptor, m_icon, string, "vehicle_raptor");
-#ifdef MENUQC
-METHOD(Raptor, describe, string(Raptor this))
-{
- // can't include ./spiderbot.qh or else circular includes
-#define SPIDERBOT_COLOR strcat(rgb_to_hexcolor('1 1 1'), _("Spiderbot"), "^7")
- TC(Raptor, this);
- return sprintf(_("The %s vehicle is a flying vehicle that takes only one pilot, who can also opearate two weapons\n\n"
- "The two weapons have different reticles for them similar to the %s. "
- "The primary weapon is laser-based, and is shot toward the white reticle. "
- "The secondary weapon drops bombs to the ground, aiming towards the green reticle. "
- "The white reticle always points at the head of the vehicle, while the green reticle's location is determined by the momentum of the vehicle"),
- COLORED_NAME(Raptor), SPIDERBOT_COLOR);
-#undef SPIDERBOT_COLOR
-}
-#endif
ENDCLASS(Raptor)
REGISTER_VEHICLE(RAPTOR, NEW(Raptor));
#endif
#endif
+#ifdef MENUQC
+
+METHOD(Spiderbot, describe, string(Spiderbot this))
+{
+ TC(Spiderbot, this);
+ return sprintf(_("The %s vehicle walks and jumps around, and takes only one rider\n\n"
+ "It can jump from very high altitudes while protecting the rider\n\n"
+ "It has two weapons the rider can control, which have different reticles for them similar to the %s. "
+ "The primary weapon is a machine gun, and is shot toward the green reticle. "
+ "The secondary weapon shoots rockets towards the white reticle. "
+ "The white reticle points to the front of the vehicle, while the green reticle also points to the front, with a bit of delay when the %s rotates"),
+ COLORED_NAME(Spiderbot), COLORED_NAME(Raptor), COLORED_NAME(Spiderbot));
+}
+
+#endif
/* netname */ ATTRIB(Spiderbot, netname, string, "spiderbot");
/* fullname */ ATTRIB(Spiderbot, m_name, string, _("Spiderbot"));
/* icon */ ATTRIB(Spiderbot, m_icon, string, "vehicle_spider");
-#ifdef MENUQC
-METHOD(Spiderbot, describe, string(Spiderbot this))
-{
- TC(Spiderbot, this);
- return sprintf(_("The %s vehicle walks and jumps around, and takes only one rider\n\n"
- "It can jump from very high altitudes while protecting the rider\n\n"
- "It has two weapons the rider can control, which have different reticles for them similar to the %s. "
- "The primary weapon is a machine gun, and is shot toward the green reticle. "
- "The secondary weapon shoots rockets towards the white reticle. "
- "The white reticle points to the front of the vehicle, while the green reticle also points to the front, with a bit of delay when the %s rotates"),
- COLORED_NAME(Spiderbot), COLORED_NAME(Raptor), COLORED_NAME(Spiderbot));
-}
-#endif
ENDCLASS(Spiderbot)
REGISTER_VEHICLE(SPIDERBOT, NEW(Spiderbot));
}
#endif
+#ifdef MENUQC
+
+METHOD(Arc, describe, string(Arc this))
+{
+ TC(Arc, this);
+ return sprintf(_("The %s fires a continuous stream of electricity, steadily dealing damage to any enemies that cross its path\n\n"
+ "The secondary fire rapidly shoots electro balls forward, exploding on impact and dealing some splash damage\n\n"
+ "It consumes %s ammo, steadily churning through your supply to maintain the stream\n\n"
+ "The %s is quite a versatile weapon, however it is more effective at close to medium ranges, since the stream is not instantaneous"),
+ COLORED_NAME(Arc), COLORED_NAME(Cells), COLORED_NAME(Arc));
+}
+
+#endif
END()
W_PROPS(X, Arc, arc)
#undef X
-#ifdef MENUQC
-METHOD(Arc, describe, string(Arc this))
-{
- TC(Arc, this);
- return sprintf(_("The %s fires a continuous stream of electricity, steadily dealing damage to any enemies that cross its path\n\n"
- "The secondary fire rapidly shoots electro balls forward, exploding on impact and dealing some splash damage\n\n"
- "It consumes %s ammo, steadily churning through your supply to maintain the stream\n\n"
- "The %s is quite a versatile weapon, however it is more effective at close to medium ranges, since the stream is not instantaneous"),
- COLORED_NAME(Arc), COLORED_NAME(Cells), COLORED_NAME(Arc));
-}
-#endif
ENDCLASS(Arc)
REGISTER_WEAPON(ARC, NEW(Arc));
}
#endif
+#ifdef MENUQC
+
+METHOD(Blaster, describe, string(Blaster this))
+{
+ TC(Blaster, this);
+ return sprintf(_("The %s is one of the two main default weapons, firing a relatively weak high speed laser forwards, dealing some splash damage but importantly a lot of knockback\n\n"
+ "It has no secondary fire, instead switching to the previously selected weapon\n\n"
+ "It doesn't require ammo, meaning it is a great choice if you are running low on ammo and need to preserve some\n\n"
+ "The %s is always available so ends up being used a lot when players spawn in, but it's difficult to master when used over a medium to long range\n\n"
+ "One of the most common uses of the %s is \"laser jumping,\" where you can gain height by aiming down, jumping, then firing to boost yourself up. "
+ "Because it does a lot of knockback, another common usage is alternating between a high damage weapon and the %s to throw the enemy's aim off"),
+ COLORED_NAME(Blaster), COLORED_NAME(Blaster), COLORED_NAME(Blaster), COLORED_NAME(Blaster));
+}
+
+#endif
END()
W_PROPS(X, Blaster, blaster)
#undef X
-#ifdef MENUQC
-METHOD(Blaster, describe, string(Blaster this))
-{
- TC(Blaster, this);
- return sprintf(_("The %s is one of the two main default weapons, firing a relatively weak high speed laser forwards, dealing some splash damage but importantly a lot of knockback\n\n"
- "It has no secondary fire, instead switching to the previously selected weapon\n\n"
- "It doesn't require ammo, meaning it is a great choice if you are running low on ammo and need to preserve some\n\n"
- "The %s is always available so ends up being used a lot when players spawn in, but it's difficult to master when used over a medium to long range\n\n"
- "One of the most common uses of the %s is \"laser jumping,\" where you can gain height by aiming down, jumping, then firing to boost yourself up. "
- "Because it does a lot of knockback, another common usage is alternating between a high damage weapon and the %s to throw the enemy's aim off"),
- COLORED_NAME(Blaster), COLORED_NAME(Blaster), COLORED_NAME(Blaster), COLORED_NAME(Blaster));
-}
-#endif
ENDCLASS(Blaster)
REGISTER_WEAPON(BLASTER, NEW(Blaster));
}
#endif
+#ifdef MENUQC
+
+METHOD(Crylink, describe, string(Crylink this))
+{
+ TC(Crylink, this);
+ return sprintf(_("The %s fires bursts of laser-like projectiles, spreading out as they travel away, and deflecting off walls. "
+ "If the primary fire is held, when it's released the projectiles will converge before spreading out again, "
+ "which can be utilized to deal more damage to an enemy by making the projectiles converge on them\n\n"
+ "The secondary fire shoots the projectiles together in a tight group, so it is often the better option in situations where the enemy is an easy target to hit\n\n"
+ "It consumes %s ammo for each projectile, which is shared by several weapons\n\n"
+ "Close to medium range is the ideal time to use the %s, although the secondary fire can be useful for long range combat sometimes\n\n"
+ "The %s deals knockback in a unique way, pulling the player from their center to the point of impact. "
+ "This makes it one of the best weapons to slow someone down if you are chasing them, particularly with the secondary fire. "
+ "Another common use of the %s is \"crylink running,\" where you partially angle down and use the secondary fire to pull yourself forwards, in order to gain speed"),
+ COLORED_NAME(Crylink), COLORED_NAME(Cells), COLORED_NAME(Crylink), COLORED_NAME(Crylink), COLORED_NAME(Crylink));
+}
+
+#endif
END()
W_PROPS(X, Crylink, crylink)
#undef X
-#ifdef MENUQC
-METHOD(Crylink, describe, string(Crylink this))
-{
- TC(Crylink, this);
- return sprintf(_("The %s fires bursts of laser-like projectiles, spreading out as they travel away, and deflecting off walls. "
- "If the primary fire is held, when it's released the projectiles will converge before spreading out again, "
- "which can be utilized to deal more damage to an enemy by making the projectiles converge on them\n\n"
- "The secondary fire shoots the projectiles together in a tight group, so it is often the better option in situations where the enemy is an easy target to hit\n\n"
- "It consumes %s ammo for each projectile, which is shared by several weapons\n\n"
- "Close to medium range is the ideal time to use the %s, although the secondary fire can be useful for long range combat sometimes\n\n"
- "The %s deals knockback in a unique way, pulling the player from their center to the point of impact. "
- "This makes it one of the best weapons to slow someone down if you are chasing them, particularly with the secondary fire. "
- "Another common use of the %s is \"crylink running,\" where you partially angle down and use the secondary fire to pull yourself forwards, in order to gain speed"),
- COLORED_NAME(Crylink), COLORED_NAME(Cells), COLORED_NAME(Crylink), COLORED_NAME(Crylink), COLORED_NAME(Crylink));
-}
-#endif
ENDCLASS(Crylink)
REGISTER_WEAPON(CRYLINK, NEW(Crylink));
}
#endif
+#ifdef MENUQC
+
+METHOD(Devastator, describe, string(Devastator this))
+{
+ TC(Devastator, this);
+ return sprintf(_("The %s launches a remote controlled rocket, dealing significant damage when it explodes on impact. "
+ "If the primary fire is held, the rocket can be guided by the user's aim, allowing steering it towards enemies\n\n"
+ "The secondary fire can be used to immediately detonate the most recently fired rocket, allowing dealing damage to enemies even if the rocket barely missed colliding with them\n\n"
+ "It consumes a bunch of %s ammo for each rocket, which can end up being depleted quickly, so often players alternate with another weapon like %s\n\n"
+ "Due to its high damage output, the %s is one of the most commonly used weapons. "
+ "It can be used in almost any scenario, working best in medium range combat. "
+ "In close range combat, the large splash radius means often rockets can damage yourself as well as the enemy\n\n"
+ "Due to the ability to remotely detonate rockets, a common usage is \"rocket flying\", where you fire a rocket and immediately detonate it to boost yourself while mid-air"),
+ COLORED_NAME(Devastator), COLORED_NAME(Rockets), COLORED_NAME(Vortex), COLORED_NAME(Devastator));
+}
+
+#endif
END()
W_PROPS(X, Devastator, devastator)
#undef X
-#ifdef MENUQC
-METHOD(Devastator, describe, string(Devastator this))
-{
- TC(Devastator, this);
- return sprintf(_("The %s launches a remote controlled rocket, dealing significant damage when it explodes on impact. "
- "If the primary fire is held, the rocket can be guided by the user's aim, allowing steering it towards enemies\n\n"
- "The secondary fire can be used to immediately detonate the most recently fired rocket, allowing dealing damage to enemies even if the rocket barely missed colliding with them\n\n"
- "It consumes a bunch of %s ammo for each rocket, which can end up being depleted quickly, so often players alternate with another weapon like %s\n\n"
- "Due to its high damage output, the %s is one of the most commonly used weapons. "
- "It can be used in almost any scenario, working best in medium range combat. "
- "In close range combat, the large splash radius means often rockets can damage yourself as well as the enemy\n\n"
- "Due to the ability to remotely detonate rockets, a common usage is \"rocket flying\", where you fire a rocket and immediately detonate it to boost yourself while mid-air"),
- COLORED_NAME(Devastator), COLORED_NAME(Rockets), COLORED_NAME(Vortex), COLORED_NAME(Devastator));
-}
-#endif
ENDCLASS(Devastator)
REGISTER_WEAPON(DEVASTATOR, NEW(Devastator));
}
#endif
+#ifdef MENUQC
+
+METHOD(Electro, describe, string(Electro this))
+{
+ TC(Electro, this);
+ return sprintf(_("The %s shoots electric balls forwards, dealing some splash damage when they burst on impact\n\n"
+ "The secondary fire launches similar balls that are influenced by gravity, "
+ "so they can be laid around the map at high traffic locations (like the flag in Capture The Flag) to damage enemies that walk by. "
+ "The balls burst after some time, and can be forced to burst in a \"combo\" if a primary fire ball bursts near them\n\n"
+ "It consumes some %s ammo for each ball\n\n"
+ "The %s is one of the best spam weapons to use in crowded areas, since combos can deal tons of damage, if the enemy is close enough. "
+ "Since the primary fire doesn't travel particularly fast, the %s is not useful in many other situations"),
+ COLORED_NAME(Electro), COLORED_NAME(Cells), COLORED_NAME(Electro), COLORED_NAME(Electro));
+}
+
+#endif
END()
W_PROPS(X, Electro, electro)
#undef X
-#ifdef MENUQC
-METHOD(Electro, describe, string(Electro this))
-{
- TC(Electro, this);
- return sprintf(_("The %s shoots electric balls forwards, dealing some splash damage when they burst on impact\n\n"
- "The secondary fire launches similar balls that are influenced by gravity, "
- "so they can be laid around the map at high traffic locations (like the flag in Capture The Flag) to damage enemies that walk by. "
- "The balls burst after some time, and can be forced to burst in a \"combo\" if a primary fire ball bursts near them\n\n"
- "It consumes some %s ammo for each ball\n\n"
- "The %s is one of the best spam weapons to use in crowded areas, since combos can deal tons of damage, if the enemy is close enough. "
- "Since the primary fire doesn't travel particularly fast, the %s is not useful in many other situations"),
- COLORED_NAME(Electro), COLORED_NAME(Cells), COLORED_NAME(Electro), COLORED_NAME(Electro));
-}
-#endif
ENDCLASS(Electro)
REGISTER_WEAPON(ELECTRO, NEW(Electro));
}
#endif
+#ifdef MENUQC
+
+METHOD(Fireball, describe, string(Fireball this))
+{
+ TC(Fireball, this);
+ return sprintf(_("The %s supercharges then fires a massive fireball in a straight line, dealing heaps of splash damage over a large radius on impact\n\n"
+ "The secondary fire launches flaming balls that set nearby players alight\n\n"
+ "It is a superweapon, so isn't often found in game\n\n"
+ "It doesn't require ammo, but it is destroyed after some time\n\n"
+ "Since the %s takes a moment to charge and the fireball travels slowly, using it effectively may be difficult, "
+ "but if done properly it can deal a ton of damage"),
+ COLORED_NAME(Fireball), COLORED_NAME(Fireball));
+}
+
+#endif
END()
W_PROPS(X, Fireball, fireball)
#undef X
-#ifdef MENUQC
-METHOD(Fireball, describe, string(Fireball this))
-{
- TC(Fireball, this);
- return sprintf(_("The %s supercharges then fires a massive fireball in a straight line, dealing heaps of splash damage over a large radius on impact\n\n"
- "The secondary fire launches flaming balls that set nearby players alight\n\n"
- "It is a superweapon, so isn't often found in game\n\n"
- "It doesn't require ammo, but it is destroyed after some time\n\n"
- "Since the %s takes a moment to charge and the fireball travels slowly, using it effectively may be difficult, "
- "but if done properly it can deal a ton of damage"),
- COLORED_NAME(Fireball), COLORED_NAME(Fireball));
-}
-#endif
ENDCLASS(Fireball)
REGISTER_WEAPON(FIREBALL, NEW(Fireball));
}
#endif
+#ifdef MENUQC
+
+METHOD(Hagar, describe, string(Hagar this))
+{
+ TC(Hagar, this);
+ return sprintf(_("The %s rapidly fires small propelled rockets forwards, dealing some splash damage on impact\n\n"
+ "When the secondary fire is held, multiple rockets are loaded up, and they're shot at the same time when released. "
+ "These rockets can't be held forever, so it will fire itself after some time (after a warning beep) if the secondary fire isn't released\n\n"
+ "It consumes %s ammo for each rocket\n\n"
+ "The %s works best over close to medium ranges, since it's hard to land hits at a long distance. "
+ "A common usage is fully loading the secondary fire before turning a corner, so you can surprise any enemies around the corner with a bunch of rockets to the face"),
+ COLORED_NAME(Hagar), COLORED_NAME(Rockets), COLORED_NAME(Hagar));
+}
+
+#endif
END()
W_PROPS(X, Hagar, hagar)
#undef X
-#ifdef MENUQC
-METHOD(Hagar, describe, string(Hagar this))
-{
- TC(Hagar, this);
- return sprintf(_("The %s rapidly fires small propelled rockets forwards, dealing some splash damage on impact\n\n"
- "When the secondary fire is held, multiple rockets are loaded up, and they're shot at the same time when released. "
- "These rockets can't be held forever, so it will fire itself after some time (after a warning beep) if the secondary fire isn't released\n\n"
- "It consumes %s ammo for each rocket\n\n"
- "The %s works best over close to medium ranges, since it's hard to land hits at a long distance. "
- "A common usage is fully loading the secondary fire before turning a corner, so you can surprise any enemies around the corner with a bunch of rockets to the face"),
- COLORED_NAME(Hagar), COLORED_NAME(Rockets), COLORED_NAME(Hagar));
-}
-#endif
ENDCLASS(Hagar)
REGISTER_WEAPON(HAGAR, NEW(Hagar));
}
#endif
+#ifdef MENUQC
+
+METHOD(HLAC, describe, string(HLAC this))
+{
+ TC(HLAC, this);
+ return sprintf(_("The %s (or HLAC for short) fires lasers in quick succession. "
+ "The projectiles it fires are similar to those of the %s\n\n"
+ "The secondary fire shoots a randomly scattered burst of multiple lasers at once\n\n"
+ "Unlike the %s, it consumes %s ammo for each laser shot, meaning that it cannot be used infinitely\n\n"
+ "The %s works best in close ranges, but the primary fire is also useful in medium ranges\n\n"
+ "A unique aspect of the %s is that the longer the primary fire is held, the more that the lasers will start to spread out. "
+ "This means releasing primary fire every now and then is important to restore accuracy. "
+ "Also, the %s has less spread when used while crouching"),
+ COLORED_NAME(HLAC), COLORED_NAME(Blaster), COLORED_NAME(Blaster), COLORED_NAME(Cells), COLORED_NAME(HLAC), COLORED_NAME(HLAC), COLORED_NAME(HLAC));
+}
+
+#endif
END()
W_PROPS(X, HLAC, hlac)
#undef X
-#ifdef MENUQC
-METHOD(HLAC, describe, string(HLAC this))
-{
- TC(HLAC, this);
- return sprintf(_("The %s (or HLAC for short) fires lasers in quick succession. "
- "The projectiles it fires are similar to those of the %s\n\n"
- "The secondary fire shoots a randomly scattered burst of multiple lasers at once\n\n"
- "Unlike the %s, it consumes %s ammo for each laser shot, meaning that it cannot be used infinitely\n\n"
- "The %s works best in close ranges, but the primary fire is also useful in medium ranges\n\n"
- "A unique aspect of the %s is that the longer the primary fire is held, the more that the lasers will start to spread out. "
- "This means releasing primary fire every now and then is important to restore accuracy. "
- "Also, the %s has less spread when used while crouching"),
- COLORED_NAME(HLAC), COLORED_NAME(Blaster), COLORED_NAME(Blaster), COLORED_NAME(Cells), COLORED_NAME(HLAC), COLORED_NAME(HLAC), COLORED_NAME(HLAC));
-}
-#endif
ENDCLASS(HLAC)
REGISTER_WEAPON(HLAC, NEW(HLAC));
// TODO: hook: temporarily transform this.origin for drawing the model along warpzones!
#endif
+#ifdef MENUQC
+
+METHOD(Hook, describe, string(Hook this))
+{
+ TC(Hook, this);
+ return sprintf(_("The %s is a unique weapon, firing a chain forwards which pulls you in once it latches onto something\n\n"
+ "The secondary fire usually drops a gravity bomb that affects enemies, also releasing light a smoke like a flashbang\n\n"
+ "It usually requires %s ammo to work, consuming it both when initially firing the hook, and after a couple seconds as it reels you in\n\n"
+ "The %s allows reaching previously unreachable places on maps and zooming around the map at high speeds, "
+ "making both surprise ambushes and miraculous escapes possible\n\n"
+ "It isn't available very often on maps, unless the Grappling Hook mutator is active, in which all players have it on their offhand, used with the ^3+hook^7 bind"),
+ COLORED_NAME(Hook), COLORED_NAME(JetpackFuel), COLORED_NAME(Hook));
+}
+
+#endif
END()
W_PROPS(X, Hook, hook)
#undef X
-#ifdef MENUQC
-METHOD(Hook, describe, string(Hook this))
-{
- TC(Hook, this);
- return sprintf(_("The %s is a unique weapon, firing a chain forwards which pulls you in once it latches onto something\n\n"
- "The secondary fire usually drops a gravity bomb that affects enemies, also releasing light a smoke like a flashbang\n\n"
- "It usually requires %s ammo to work, consuming it both when initially firing the hook, and after a couple seconds as it reels you in\n\n"
- "The %s allows reaching previously unreachable places on maps and zooming around the map at high speeds, "
- "making both surprise ambushes and miraculous escapes possible\n\n"
- "It isn't available very often on maps, unless the Grappling Hook mutator is active, in which all players have it on their offhand, used with the ^3+hook^7 bind"),
- COLORED_NAME(Hook), COLORED_NAME(JetpackFuel), COLORED_NAME(Hook));
-}
-#endif
ENDCLASS(Hook)
REGISTER_WEAPON(HOOK, NEW(Hook));
}
#endif
+#ifdef MENUQC
+
+METHOD(MachineGun, describe, string(MachineGun this))
+{
+ TC(MachineGun, this);
+ return sprintf(_("The %s quickly fires bullets with a small degree of spread\n\n"
+ "The secondary fire fires a quick burst of bullets faster than the primary fire and with no spread, but there's a short delay until it can be used again\n\n"
+ "It consumes %s ammo for each bullet shot, until the whole magazine is emptied\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. "
+ "Since the secondary fire has no spread, it's the better option when firing over a long range"),
+ COLORED_NAME(MachineGun), COLORED_NAME(Bullets), COLORED_NAME(MachineGun));
+}
+
+#endif
END()
W_PROPS(X, MachineGun, machinegun)
#undef X
-#ifdef MENUQC
-METHOD(MachineGun, describe, string(MachineGun this))
-{
- TC(MachineGun, this);
- return sprintf(_("The %s quickly fires bullets with a small degree of spread\n\n"
- "The secondary fire fires a quick burst of bullets faster than the primary fire and with no spread, but there's a short delay until it can be used again\n\n"
- "It consumes %s ammo for each bullet shot, until the whole magazine is emptied\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. "
- "Since the secondary fire has no spread, it's the better option when firing over a long range"),
- COLORED_NAME(MachineGun), COLORED_NAME(Bullets), COLORED_NAME(MachineGun));
-}
-#endif
ENDCLASS(MachineGun)
REGISTER_WEAPON(MACHINEGUN, NEW(MachineGun));
}
#endif
+#ifdef MENUQC
+
+METHOD(MineLayer, describe, string(MineLayer this))
+{
+ TC(MineLayer, this);
+ return sprintf(_("The %s places mines on the ground when fired, which detonate and damage enemies if stepped on. "
+ "Only a couple mines can be placed at any time, and after several seconds they will self-detonate\n\n"
+ "The secondary fire instantaneously detonates any mines fired by the primary fire, first waiting until you're far enough away\n\n"
+ "It consumes %s ammo for each mine laid\n\n"
+ "The mines are not launched very far before they hit the ground, so the %s isn't very effective at medium to long ranges. "
+ "It is often used to protect important areas of the map such as the flag in Capture The Flag, control points in Onslaught, or checkpoints in Assault"),
+ COLORED_NAME(MineLayer), COLORED_NAME(Rockets), COLORED_NAME(MineLayer));
+}
+
+#endif
END()
W_PROPS(X, MineLayer, minelayer)
#undef X
-#ifdef MENUQC
-METHOD(MineLayer, describe, string(MineLayer this))
-{
- TC(MineLayer, this);
- return sprintf(_("The %s places mines on the ground when fired, which detonate and damage enemies if stepped on. "
- "Only a couple mines can be placed at any time, and after several seconds they will self-detonate\n\n"
- "The secondary fire instantaneously detonates any mines fired by the primary fire, first waiting until you're far enough away\n\n"
- "It consumes %s ammo for each mine laid\n\n"
- "The mines are not launched very far before they hit the ground, so the %s isn't very effective at medium to long ranges. "
- "It is often used to protect important areas of the map such as the flag in Capture The Flag, control points in Onslaught, or checkpoints in Assault"),
- COLORED_NAME(MineLayer), COLORED_NAME(Rockets), COLORED_NAME(MineLayer));
-}
-#endif
ENDCLASS(MineLayer)
REGISTER_WEAPON(MINE_LAYER, NEW(MineLayer));
}
#endif
+#ifdef MENUQC
+
+METHOD(Mortar, describe, string(Mortar this))
+{
+ TC(Mortar, this);
+ return sprintf(_("The %s launches a grenade that explodes immediately on impact, dealing a medium amount of splash damage\n\n"
+ "The secondary fire shoots a similar grenade that explodes shortly after bouncing\n\n"
+ "It consumes %s ammo for every grenade launched\n\n"
+ "The %s works best at close to medium ranges, but it's quite tricky to hit an enemy if they're airborne. "
+ "Since the secondary fire grenade bounces before exploding, it can be bounced against walls to damage enemies lurking around a corner"),
+ COLORED_NAME(Mortar), COLORED_NAME(Rockets), COLORED_NAME(Mortar));
+}
+
+#endif
END()
W_PROPS(X, Mortar, mortar)
#undef X
-#ifdef MENUQC
-METHOD(Mortar, describe, string(Mortar this))
-{
- TC(Mortar, this);
- return sprintf(_("The %s launches a grenade that explodes immediately on impact, dealing a medium amount of splash damage\n\n"
- "The secondary fire shoots a similar grenade that explodes shortly after bouncing\n\n"
- "It consumes %s ammo for every grenade launched\n\n"
- "The %s works best at close to medium ranges, but it's quite tricky to hit an enemy if they're airborne. "
- "Since the secondary fire grenade bounces before exploding, it can be bounced against walls to damage enemies lurking around a corner"),
- COLORED_NAME(Mortar), COLORED_NAME(Rockets), COLORED_NAME(Mortar));
-}
-#endif
ENDCLASS(Mortar)
REGISTER_WEAPON(MORTAR, NEW(Mortar));
}
#endif
+#ifdef MENUQC
+
+METHOD(PortoLaunch, describe, string(PortoLaunch this))
+{
+ TC(PortoLaunch, this);
+ return sprintf(_("The %s is a unique gun that creates one-way portals between flat surfaces on the map, that immediately teleport players and projectiles\n\n"
+ "The secondary fire is used to shoot the out-portal, while the primary fire shoots the in-portal\n\n"
+ "It doesn't require ammo, but it is destroyed after some time\n\n"
+ "The portals will close either after the player who shot them dies or after some time period"
+ "The %s isn't often placed on maps, but if used well it can make for some interesting gameplay"),
+ COLORED_NAME(PortoLaunch), COLORED_NAME(PortoLaunch));
+}
+
+#endif
END()
W_PROPS(X, PortoLaunch, porto)
#undef X
-#ifdef MENUQC
-METHOD(PortoLaunch, describe, string(PortoLaunch this))
-{
- TC(PortoLaunch, this);
- return sprintf(_("The %s is a unique gun that creates one-way portals between flat surfaces on the map, that immediately teleport players and projectiles\n\n"
- "The secondary fire is used to shoot the out-portal, while the primary fire shoots the in-portal\n\n"
- "It doesn't require ammo, but it is destroyed after some time\n\n"
- "The portals will close either after the player who shot them dies or after some time period"
- "The %s isn't often placed on maps, but if used well it can make for some interesting gameplay"),
- COLORED_NAME(PortoLaunch), COLORED_NAME(PortoLaunch));
-}
-#endif
ENDCLASS(PortoLaunch)
REGISTER_WEAPON(PORTO, NEW(PortoLaunch));
}
#endif
+#ifdef MENUQC
+
+METHOD(Rifle, describe, string(Rifle this))
+{
+ // can't include ./vortex.qh or else circular includes
+#define VORTEX_COLOR strcat(rgb_to_hexcolor(COLOR_WEP_VORTEX), _("Vortex"), "^7")
+ TC(Rifle, this);
+ return sprintf(_("The %s fires bullets that traverse the map instantaneously and deal a significant chunk of damage on impact\n\n"
+ "The secondary fire shoots a few less powerful bullets at once with a bit of scatter\n\n"
+ "It consumes %s ammo for each bullet shot\n\n"
+ "Unlike the %s, the secondary fire doesn't zoom, so the ^3+zoom^7 bind needs to be used manually with the %s. "
+ "Also, it needs to be reloaded after its magazine is emptied\n\n"
+ "Similar to the %s, the %s can be used at any range, but it stands out at long ranges"),
+ COLORED_NAME(Rifle), COLORED_NAME(Bullets), VORTEX_COLOR, COLORED_NAME(Rifle), VORTEX_COLOR, COLORED_NAME(Rifle));
+#undef VORTEX_COLOR
+}
+
+#endif
END()
W_PROPS(X, Rifle, rifle)
#undef X
-#ifdef MENUQC
-METHOD(Rifle, describe, string(Rifle this))
-{
- // can't include ./vortex.qh or else circular includes
-#define VORTEX_COLOR strcat(rgb_to_hexcolor(COLOR_WEP_VORTEX), _("Vortex"), "^7")
- TC(Rifle, this);
- return sprintf(_("The %s fires bullets that traverse the map instantaneously and deal a significant chunk of damage on impact\n\n"
- "The secondary fire shoots a few less powerful bullets at once with a bit of scatter\n\n"
- "It consumes %s ammo for each bullet shot\n\n"
- "Unlike the %s, the secondary fire doesn't zoom, so the ^3+zoom^7 bind needs to be used manually with the %s. "
- "Also, it needs to be reloaded after its magazine is emptied\n\n"
- "Similar to the %s, the %s can be used at any range, but it stands out at long ranges"),
- COLORED_NAME(Rifle), COLORED_NAME(Bullets), VORTEX_COLOR, COLORED_NAME(Rifle), VORTEX_COLOR, COLORED_NAME(Rifle));
-#undef VORTEX_COLOR
-}
-#endif
ENDCLASS(Rifle)
REGISTER_WEAPON(RIFLE, NEW(Rifle));
}
#endif
+#ifdef MENUQC
+
+METHOD(Seeker, describe, string(Seeker this))
+{
+ TC(Seeker, this);
+ return sprintf(_("The %s is a unique weapon, firing a \"tag\" which then launches a few homing missiles if it collides with a player. "
+ "The homing isn't perfect, so sometimes the missiles can hit an object or a corner\n\n"
+ "The secondary fire launches a rapid barrage of scattered explosives that travel only a short distance\n\n"
+ "It consumes %s ammo, even when the tag doesn't land\n\n"
+ "The %s primary fire deals quite a lot of damage when a tag lands, although it requires skill to aim effectively. "
+ "The secondary fire is only useful in close range combat, and sometimes the explosives can damage yourself too"),
+ COLORED_NAME(Seeker), COLORED_NAME(Rockets), COLORED_NAME(Seeker));
+}
+
+#endif
END()
W_PROPS(X, Seeker, seeker)
#undef X
-#ifdef MENUQC
-METHOD(Seeker, describe, string(Seeker this))
-{
- TC(Seeker, this);
- return sprintf(_("The %s is a unique weapon, firing a \"tag\" which then launches a few homing missiles if it collides with a player. "
- "The homing isn't perfect, so sometimes the missiles can hit an object or a corner\n\n"
- "The secondary fire launches a rapid barrage of scattered explosives that travel only a short distance\n\n"
- "It consumes %s ammo, even when the tag doesn't land\n\n"
- "The %s primary fire deals quite a lot of damage when a tag lands, although it requires skill to aim effectively. "
- "The secondary fire is only useful in close range combat, and sometimes the explosives can damage yourself too"),
- COLORED_NAME(Seeker), COLORED_NAME(Rockets), COLORED_NAME(Seeker));
-}
-#endif
ENDCLASS(Seeker)
REGISTER_WEAPON(SEEKER, NEW(Seeker));
}
#endif
+#ifdef MENUQC
+
+METHOD(Shockwave, describe, string(Shockwave this))
+{
+ TC(Shockwave, this);
+ return sprintf(_("The %s is a unique weapon, firing shockwave blasts that deal damage over a short range\n\n"
+ "Similar to the %s, the secondary fire swings the %s, slapping players close enough with the head of the weapon\n\n"
+ "It doesn't require ammo to work\n\n"
+ "The %s can only deal damage over a short range, so it is not useful for medium and long range combat"),
+ COLORED_NAME(Shockwave), COLORED_NAME(Shotgun), COLORED_NAME(Shockwave), COLORED_NAME(Shockwave));
+}
+
+#endif
END()
W_PROPS(X, Shockwave, shockwave)
#undef X
-#ifdef MENUQC
-METHOD(Shockwave, describe, string(Shockwave this))
-{
- TC(Shockwave, this);
- return sprintf(_("The %s is a unique weapon, firing shockwave blasts that deal damage over a short range\n\n"
- "Similar to the %s, the secondary fire swings the %s, slapping players close enough with the head of the weapon\n\n"
- "It doesn't require ammo to work\n\n"
- "The %s can only deal damage over a short range, so it is not useful for medium and long range combat"),
- COLORED_NAME(Shockwave), COLORED_NAME(Shotgun), COLORED_NAME(Shockwave), COLORED_NAME(Shockwave));
-}
-#endif
ENDCLASS(Shockwave)
REGISTER_WEAPON(SHOCKWAVE, NEW(Shockwave));
}
#endif
+#ifdef MENUQC
+
+METHOD(Shotgun, describe, string(Shotgun this))
+{
+ TC(Shotgun, this);
+ return sprintf(_("The %s is one of the two main default weapons, firing a single shotgun round which spreads into multiple pellets upon exiting the barrel\n\n"
+ "The secondary fire swings the %s, slapping players close enough with the head of the weapon. "
+ "Since the slap takes a moment to land, timing this well is difficult\n\n"
+ "The primary fire consumes %s ammo, although if you spawn in with the %s you will already have some\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(Shotgun), COLORED_NAME(Shotgun), COLORED_NAME(Shells), COLORED_NAME(Shotgun), COLORED_NAME(Shotgun));
+}
+
+#endif
END()
W_PROPS(X, Shotgun, shotgun)
#undef X
-#ifdef MENUQC
-METHOD(Shotgun, describe, string(Shotgun this))
-{
- TC(Shotgun, this);
- return sprintf(_("The %s is one of the two main default weapons, firing a single shotgun round which spreads into multiple pellets upon exiting the barrel\n\n"
- "The secondary fire swings the %s, slapping players close enough with the head of the weapon. "
- "Since the slap takes a moment to land, timing this well is difficult\n\n"
- "The primary fire consumes %s ammo, although if you spawn in with the %s you will already have some\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(Shotgun), COLORED_NAME(Shotgun), COLORED_NAME(Shells), COLORED_NAME(Shotgun), COLORED_NAME(Shotgun));
-}
-#endif
ENDCLASS(Shotgun)
REGISTER_WEAPON(SHOTGUN, NEW(Shotgun));
}
#endif
+#ifdef MENUQC
+
+METHOD(Tuba, describe, string(Tuba this))
+{
+ TC(Tuba, this);
+ return sprintf(_("The %s is unique weapon that makes the ears of nearby enemies bleed by playing awful sounds, also slightly knocking them back\n\n"
+ "The secondary fire works the same way, playing a higher pitch\n\n"
+ "The only ammo it needs to operate is the breath from your lungs\n\n"
+ "Since your enemies need to be close by to hear your awful music, the %s is only effective at very close ranges\n\n"
+ "The pitch the %s plays depends on the movement keys pressed. "
+ "Reloading the weapon switches its model and notes played"),
+ COLORED_NAME(Tuba), COLORED_NAME(Tuba), COLORED_NAME(Tuba));
+}
+
+#endif
END()
W_PROPS(X, Tuba, tuba)
#undef X
-#ifdef MENUQC
-METHOD(Tuba, describe, string(Tuba this))
-{
- TC(Tuba, this);
- return sprintf(_("The %s is unique weapon that makes the ears of nearby enemies bleed by playing awful sounds, also slightly knocking them back\n\n"
- "The secondary fire works the same way, playing a higher pitch\n\n"
- "The only ammo it needs to operate is the breath from your lungs\n\n"
- "Since your enemies need to be close by to hear your awful music, the %s is only effective at very close ranges\n\n"
- "The pitch the %s plays depends on the movement keys pressed. "
- "Reloading the weapon switches its model and notes played"),
- COLORED_NAME(Tuba), COLORED_NAME(Tuba), COLORED_NAME(Tuba));
-}
-#endif
ENDCLASS(Tuba)
REGISTER_WEAPON(TUBA, NEW(Tuba));
}
#endif
+#ifdef MENUQC
+
+METHOD(Vaporizer, describe, string(Vaporizer this))
+{
+ TC(Vaporizer, this);
+ return sprintf(_("The %s is unique weapon, firing a deadly beam of energy dealing a huge amount of damage. "
+ "In InstaGib, the beam has the ability to instantly kill enemies with a single shot, unless they have an %s\n\n"
+ "The secondary fire fires a laser similar to that fired by the %s, with very strong knockback\n\n"
+ "It is a superweapon, so isn't often found in game, except in InstaGib where all players spawn with it\n\n"
+ "It consumes some %s ammo with each shot"),
+ COLORED_NAME(Vaporizer), COLORED_NAME(ExtraLife), COLORED_NAME(Blaster), COLORED_NAME(Cells));
+}
+
+#endif
END()
W_PROPS(X, Vaporizer, vaporizer)
#undef X
-#ifdef MENUQC
-METHOD(Vaporizer, describe, string(Vaporizer this))
-{
- TC(Vaporizer, this);
- return sprintf(_("The %s is unique weapon, firing a deadly beam of energy dealing a huge amount of damage. "
- "In InstaGib, the beam has the ability to instantly kill enemies with a single shot, unless they have an %s\n\n"
- "The secondary fire fires a laser similar to that fired by the %s, with very strong knockback\n\n"
- "It is a superweapon, so isn't often found in game, except in InstaGib where all players spawn with it\n\n"
- "It consumes some %s ammo with each shot"),
- COLORED_NAME(Vaporizer), COLORED_NAME(ExtraLife), COLORED_NAME(Blaster), COLORED_NAME(Cells));
-}
-#endif
ENDCLASS(Vaporizer)
REGISTER_WEAPON(VAPORIZER, NEW(Vaporizer));
}
#endif
+#ifdef MENUQC
+
+METHOD(Vortex, describe, string(Vortex this))
+{
+ TC(Vortex, 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"
+ "The secondary fire zooms in when held, allowing for ease of aiming\n\n"
+ "It consumes %s ammo for each bullet shot\n\n"
+ "Unlike the %s, the %s doesn't need to be reloaded manually, although you have to wait a couple seconds between shots. "
+ "Uniquely, the %s can be fired slightly before it finishes completely reloading, albeit dealing slightly less damage\n\n"
+ "Similar to the %s, the %s can be used at any range, but it stands out at long ranges"),
+ COLORED_NAME(Vortex), COLORED_NAME(Cells), COLORED_NAME(Rifle), COLORED_NAME(Vortex), COLORED_NAME(Vortex), COLORED_NAME(Rifle), COLORED_NAME(Vortex));
+}
+
+#endif
END()
W_PROPS(X, Vortex, vortex)
#undef X
-#ifdef MENUQC
-METHOD(Vortex, describe, string(Vortex this))
-{
- TC(Vortex, 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"
- "The secondary fire zooms in when held, allowing for ease of aiming\n\n"
- "It consumes %s ammo for each bullet shot\n\n"
- "Unlike the %s, the %s doesn't need to be reloaded manually, although you have to wait a couple seconds between shots. "
- "Uniquely, the %s can be fired slightly before it finishes completely reloading, albeit dealing slightly less damage\n\n"
- "Similar to the %s, the %s can be used at any range, but it stands out at long ranges"),
- COLORED_NAME(Vortex), COLORED_NAME(Cells), COLORED_NAME(Rifle), COLORED_NAME(Vortex), COLORED_NAME(Vortex), COLORED_NAME(Rifle), COLORED_NAME(Vortex));
-}
-#endif
ENDCLASS(Vortex)
REGISTER_WEAPON(VORTEX, NEW(Vortex));