Added ifdef MENUQC checks around describe methods for the currently added: items, monsters, vehicles, weapons, buffs/powerups, and nades.
Skipped gamemodes since they're used elsewhere (I think?), and skipped the free-text guide since that's in qcsrc/menu/.
This change prevents the csprogs from increasing in size unnecessarily, with minimal readability cost.
ATTRIB(GameItem, m_glow, bool, false);
ATTRIB(GameItem, m_respawnsound, Sound, SND_ITEMRESPAWN);
#endif
+#ifdef MENUQC
METHOD(GameItem, describe, string(GameItem this))
{
TC(GameItem, this);
return SUPER(Object).describe(this);
}
+#endif
METHOD(GameItem, display, void(GameItem this, void(string name, string icon) returns))
{
TC(GameItem, this);
ATTRIB(Ammo, m_respawntimejitter, float(), GET(g_pickup_respawntimejitter_ammo));
ATTRIB(Ammo, m_pickupanyway, float(), GET(g_pickup_ammo_anyway));
#endif
+#ifdef MENUQC
METHOD(Ammo, describe, string(Ammo this))
{
TC(Ammo, this);
return SUPER(Pickup).describe(this);
}
+#endif
ENDCLASS(Ammo)
#endif
CLASS(Shells, Ammo)
+#ifdef MENUQC
METHOD(Shells, describe, string(Shells this))
{
TC(Shells, this);
return _("The Shells ammo type is used by the Shotgun and Overkill Shotgun");
}
+#endif
ENDCLASS(Shells)
REGISTER_ITEM(Shells, NEW(Shells)) {
#endif
CLASS(Bullets, Ammo)
+#ifdef MENUQC
METHOD(Bullets, describe, string(Bullets this))
{
TC(Bullets, this);
return _("The Bullets ammo type is used by the MachineGun, Rifle, Overkill MachineGun, and Overkill Heavy Machine Gun");
}
+#endif
ENDCLASS(Bullets)
REGISTER_ITEM(Bullets, NEW(Bullets)) {
#endif
CLASS(Rockets, Ammo)
+#ifdef MENUQC
METHOD(Rockets, describe, string(Rockets this))
{
TC(Rockets, this);
return _("The Rockets ammo type is used by the Devastator, Mortar, Mine Layer, Hagar, T.A.G. Seeker, and Overkill Rocket Propelled Chainsaw");
}
+#endif
ENDCLASS(Rockets)
REGISTER_ITEM(Rockets, NEW(Rockets)) {
#endif
CLASS(Cells, Ammo)
+#ifdef MENUQC
METHOD(Cells, describe, string(Cells this))
{
TC(Cells, this);
return _("The Cells ammo type is used by the Vortex, Crylink, Electro, Heavy Laser Assault Cannon, Arc, and Vaporizer");
}
+#endif
ENDCLASS(Cells)
REGISTER_ITEM(Cells, NEW(Cells)) {
#endif
CLASS(ArmorSmall, Armor)
+#ifdef MENUQC
METHOD(ArmorSmall, describe, string(ArmorSmall this))
{
TC(ArmorSmall, this);
return _("The Small armor provides you a small amount of armor when picked up, "
"protecting you from damage by absorbing incoming hits until it is depleted");
}
+#endif
ENDCLASS(ArmorSmall)
REGISTER_ITEM(ArmorSmall, NEW(ArmorSmall)) {
#endif
CLASS(ArmorMedium, Armor)
+#ifdef MENUQC
METHOD(ArmorMedium, describe, string(ArmorMedium this))
{
TC(ArmorMedium, this);
return _("The Medium armor provides you a medium amount of armor when picked up, "
"protecting you from damage by absorbing incoming hits until it is depleted");
}
+#endif
ENDCLASS(ArmorMedium)
REGISTER_ITEM(ArmorMedium, NEW(ArmorMedium)) {
#endif
CLASS(ArmorBig, Armor)
+#ifdef MENUQC
METHOD(ArmorBig, describe, string(ArmorBig this))
{
TC(ArmorBig, this);
return _("The Big armor provides you a large amount of armor when picked up, "
"protecting you from damage by absorbing incoming hits until it is depleted");
}
+#endif
ENDCLASS(ArmorBig)
REGISTER_ITEM(ArmorBig, NEW(ArmorBig)) {
#endif
CLASS(ArmorMega, Armor)
+#ifdef MENUQC
METHOD(ArmorMega, describe, string(ArmorMega this))
{
TC(ArmorMega, this);
"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");
}
+#endif
ENDCLASS(ArmorMega)
REGISTER_ITEM(ArmorMega, NEW(ArmorMega)) {
#endif
CLASS(HealthSmall, Health)
+#ifdef MENUQC
METHOD(HealthSmall, describe, string(HealthSmall this))
{
TC(HealthSmall, this);
return _("The Small health restores a small amount of health when picked up, "
"helping you recover from damage taken during combat");
}
+#endif
ENDCLASS(HealthSmall)
REGISTER_ITEM(HealthSmall, NEW(HealthSmall)) {
#endif
CLASS(HealthMedium, Health)
+#ifdef MENUQC
METHOD(HealthMedium, describe, string(HealthMedium this))
{
TC(HealthMedium, this);
return _("The Medium health restores a medium amount of health when picked up, "
"helping you recover from damage taken during combat");
}
+#endif
ENDCLASS(HealthMedium)
REGISTER_ITEM(HealthMedium, NEW(HealthMedium)) {
#endif
CLASS(HealthBig, Health)
+#ifdef MENUQC
METHOD(HealthBig, describe, string(HealthBig this))
{
TC(HealthBig, this);
return _("The Big health restores a large amount of health when picked up, "
"helping you recover from damage taken during combat");
}
+#endif
ENDCLASS(HealthBig)
REGISTER_ITEM(HealthBig, NEW(HealthBig)) {
#endif
CLASS(HealthMega, Health)
+#ifdef MENUQC
METHOD(HealthMega, describe, string(HealthMega this))
{
TC(HealthMega, this);
"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");
}
+#endif
ENDCLASS(HealthMega)
REGISTER_ITEM(HealthMega, NEW(HealthMega)) {
#endif
CLASS(Jetpack, Powerup)
+#ifdef MENUQC
METHOD(Jetpack, describe, string(Jetpack this))
{
TC(Jetpack, this);
"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!");
}
+#endif
ENDCLASS(Jetpack)
REGISTER_ITEM(Jetpack, NEW(Jetpack)) {
#endif
CLASS(JetpackFuel, Ammo)
+#ifdef MENUQC
METHOD(JetpackFuel, describe, string(JetpackFuel this))
{
TC(JetpackFuel, this);
return _("The Fuel ammo type is used by the Jetpack");
}
+#endif
ENDCLASS(JetpackFuel)
#ifdef SVQC
#endif
CLASS(JetpackRegen, Powerup)
+#ifdef MENUQC
METHOD(JetpackRegen, describe, string(JetpackRegen this))
{
TC(JetpackRegen, this);
"so you can continue flying around for longer"
"Since it is a powerup, it will drop if you die while holding it");
}
+#endif
ENDCLASS(JetpackRegen)
REGISTER_ITEM(JetpackRegen, NEW(JetpackRegen)) {
METHOD(Monster, mr_pain, float(Monster this, entity actor, float damage_take, entity attacker, float deathtype)) { TC(Monster, this); return damage_take; }
/** (BOTH?) sets animations for monster */
METHOD(Monster, mr_anim, bool(Monster this, entity actor)) { TC(Monster, this); return false; }
-
+#ifdef MENUQC
METHOD(Monster, describe, string(Monster this)) { TC(Monster, this); return SUPER(Object).describe(this); }
+#endif
ENDCLASS(Monster)
#endif
ATTRIB(Golem, netname, string, "golem");
ATTRIB(Golem, monster_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));
#endif
ATTRIB(Mage, netname, string, "mage");
ATTRIB(Mage, monster_name, string, _("Mage"));
+#ifdef MENUQC
METHOD(Mage, describe, string(Mage this))
{
TC(Mage, this);
"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));
#endif
ATTRIB(Spider, netname, string, "spider");
ATTRIB(Spider, monster_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));
#endif
ATTRIB(Wyvern, netname, string, "wyvern");
ATTRIB(Wyvern, monster_name, string, _("Wyvern"));
+#ifdef MENUQC
METHOD(Wyvern, describe, string(Wyvern this))
{
TC(Wyvern, this);
"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));
#endif
ATTRIB(Zombie, netname, string, "zombie");
ATTRIB(Zombie, monster_name, string, _("Zombie"));
+#ifdef MENUQC
METHOD(Zombie, describe, string(Zombie this))
{
TC(Zombie, this);
"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));
ATTRIB(AmmoBuff, m_icon, string, "buff_ammo");
ATTRIB(AmmoBuff, m_skin, int, 3);
ATTRIB(AmmoBuff, m_color, vector, '0.76 1 0.1');
+#ifdef MENUQC
METHOD(AmmoBuff, describe, string(AmmoBuff this))
{
TC(AmmoBuff, this);
return _("The Ammo Buff gives you infinite ammo until the buff expires, so you don't need to worry about running out of ammo");
}
+#endif
ENDCLASS(AmmoBuff)
REGISTER_BUFF(AMMO, NEW(AmmoBuff));
BUFF_SPAWNFUNCS(ammo, BUFF_AMMO)
ATTRIB(ResistanceBuff, m_icon, string, "buff_resistance");
ATTRIB(ResistanceBuff, m_skin, int, 0);
ATTRIB(ResistanceBuff, m_color, vector, '0.36 1 0.07');
+#ifdef MENUQC
METHOD(ResistanceBuff, describe, string(ResistanceBuff this))
{
TC(ResistanceBuff, this);
return _("The Resistance Buff greatly reduces your damage taken while the buff is active");
}
+#endif
ENDCLASS(ResistanceBuff)
REGISTER_BUFF(RESISTANCE, NEW(ResistanceBuff));
BUFF_SPAWNFUNCS(resistance, BUFF_RESISTANCE)
ATTRIB(MedicBuff, m_icon, string, "buff_medic");
ATTRIB(MedicBuff, m_skin, int, 1);
ATTRIB(MedicBuff, m_color, vector, '1 0.12 0');
+#ifdef MENUQC
METHOD(MedicBuff, describe, string(MedicBuff this))
{
TC(MedicBuff, this);
return _("The Medic Buff increases health regeneration speed, increases the maximum health you can have before health starts to rot, and reduces health rot speed until the buff expires\n\n"
"It also gives you a chance to survive a fatal hit, with a small amount of health left over");
}
+#endif
ENDCLASS(MedicBuff)
REGISTER_BUFF(MEDIC, NEW(MedicBuff));
BUFF_SPAWNFUNCS(medic, BUFF_MEDIC)
ATTRIB(BashBuff, m_icon, string, "buff_bash");
ATTRIB(BashBuff, m_skin, int, 5);
ATTRIB(BashBuff, m_color, vector, '1 0.39 0');
+#ifdef MENUQC
METHOD(BashBuff, describe, string(BashBuff this))
{
TC(BashBuff, this);
return _("The Bash Buff increases knockback force you deal, and makes you immune to knockback while the buff is active\n\n"
"It also slightly increases knockback you deal to yourself");
}
+#endif
ENDCLASS(BashBuff)
REGISTER_BUFF(BASH, NEW(BashBuff));
BUFF_SPAWNFUNCS(bash, BUFF_BASH)
ATTRIB(VampireBuff, m_icon, string, "buff_vampire");
ATTRIB(VampireBuff, m_skin, int, 2);
ATTRIB(VampireBuff, m_color, vector, '1 0 0.24');
+#ifdef MENUQC
METHOD(VampireBuff, describe, string(VampireBuff this))
{
TC(VampireBuff, this);
return _("The Vampire Buff converts some of the damage you deal to enemies and monsters into health for yourself, until the buff expires");
}
+#endif
ENDCLASS(VampireBuff)
REGISTER_BUFF(VAMPIRE, NEW(VampireBuff));
BUFF_SPAWNFUNCS(vampire, BUFF_VAMPIRE)
ATTRIB(DisabilityBuff, m_icon, string, "buff_disability");
ATTRIB(DisabilityBuff, m_skin, int, 7);
ATTRIB(DisabilityBuff, m_color, vector, '0.94 0.3 1');
+#ifdef MENUQC
METHOD(DisabilityBuff, describe, string(DisabilityBuff this))
{
TC(DisabilityBuff, this);
return _("The Disability Buff causes your enemies and monsters to slow down for a few seconds when you attack them, while the buff is active\n\n"
"This is particularly useful against speedy players, especially in Capture The Flag");
}
+#endif
ENDCLASS(DisabilityBuff)
REGISTER_BUFF(DISABILITY, NEW(DisabilityBuff));
BUFF_SPAWNFUNCS(disability, BUFF_DISABILITY)
ATTRIB(VengeanceBuff, m_icon, string, "buff_vengeance");
ATTRIB(VengeanceBuff, m_skin, int, 15);
ATTRIB(VengeanceBuff, m_color, vector, '1 0.23 0.61');
+#ifdef MENUQC
METHOD(VengeanceBuff, describe, string(VengeanceBuff this))
{
TC(VengeanceBuff, this);
return _("The Vengeance Buff reciprocates a portion of the damage enemies deal to you onto them, until the buff expires");
}
+#endif
ENDCLASS(VengeanceBuff)
REGISTER_BUFF(VENGEANCE, NEW(VengeanceBuff));
BUFF_SPAWNFUNCS(vengeance, BUFF_VENGEANCE)
ATTRIB(JumpBuff, m_icon, string, "buff_jump");
ATTRIB(JumpBuff, m_skin, int, 10);
ATTRIB(JumpBuff, m_color, vector, '0.24 0.78 1');
+#ifdef MENUQC
METHOD(JumpBuff, describe, string(JumpBuff this))
{
TC(JumpBuff, this);
return _("The Jump Buff greatly increases your jump height, while the buff is active");
}
+#endif
ENDCLASS(JumpBuff)
REGISTER_BUFF(JUMP, NEW(JumpBuff));
BUFF_SPAWNFUNCS(jump, BUFF_JUMP)
ATTRIB(InfernoBuff, m_icon, string, "buff_inferno");
ATTRIB(InfernoBuff, m_skin, int, 16);
ATTRIB(InfernoBuff, m_color, vector, '1 0.62 0');
+#ifdef MENUQC
METHOD(InfernoBuff, describe, string(InfernoBuff this))
{
TC(InfernoBuff, this);
return _("The Inferno Buff sets any enemies or monsters you attack alight, dealing burn damage to them for several seconds until the buff expires");
}
+#endif
ENDCLASS(InfernoBuff)
REGISTER_BUFF(INFERNO, NEW(InfernoBuff));
BUFF_SPAWNFUNCS(inferno, BUFF_INFERNO)
ATTRIB(SwapperBuff, m_icon, string, "buff_swapper");
ATTRIB(SwapperBuff, m_skin, int, 17);
ATTRIB(SwapperBuff, m_color, vector, '0.63 0.36 1');
+#ifdef MENUQC
METHOD(SwapperBuff, describe, string(SwapperBuff this))
{
TC(SwapperBuff, this);
return _("The Swapper Buff allows you to press the \"dropweapon\" bind to switch places with a nearby enemy once\n\n"
"A common usage of this Buff is to jump over the map's void, then swap with an enemy, to cause them to fall into the void");
}
+#endif
ENDCLASS(SwapperBuff)
REGISTER_BUFF(SWAPPER, NEW(SwapperBuff));
BUFF_SPAWNFUNCS(swapper, BUFF_SWAPPER)
ATTRIB(MagnetBuff, m_icon, string, "buff_magnet");
ATTRIB(MagnetBuff, m_skin, int, 18);
ATTRIB(MagnetBuff, m_color, vector, '1 0.95 0.18');
+#ifdef MENUQC
METHOD(MagnetBuff, describe, string(MagnetBuff this))
{
TC(MagnetBuff, this);
return _("The Magnet Buff greatly increases your item pickup range, collecting nearby items for you while the buff is active");
}
+#endif
ENDCLASS(MagnetBuff)
REGISTER_BUFF(MAGNET, NEW(MagnetBuff));
BUFF_SPAWNFUNCS(magnet, BUFF_MAGNET)
ATTRIB(LuckBuff, m_icon, string, "buff_luck");
ATTRIB(LuckBuff, m_skin, int, 19);
ATTRIB(LuckBuff, m_color, vector, '1 0.23 0.44');
+#ifdef MENUQC
METHOD(LuckBuff, describe, string(LuckBuff this))
{
TC(LuckBuff, this);
return _("While you have the Luck Buff, each attack has a chance of being a critical hit with greatly increased damage");
}
+#endif
ENDCLASS(LuckBuff)
REGISTER_BUFF(LUCK, NEW(LuckBuff));
BUFF_SPAWNFUNCS(luck, BUFF_LUCK)
ATTRIB(FlightBuff, m_icon, string, "buff_flight");
ATTRIB(FlightBuff, m_skin, int, 11);
ATTRIB(FlightBuff, m_color, vector, '0.23 0.44 1');
+#ifdef MENUQC
METHOD(FlightBuff, describe, string(FlightBuff this))
{
TC(FlightBuff, this);
return _("While you have the Flight Buff, you can crouch while midair to switch your gravity, allowing flight");
}
+#endif
ENDCLASS(FlightBuff)
REGISTER_BUFF(FLIGHT, NEW(FlightBuff));
BUFF_SPAWNFUNCS(flight, BUFF_FLIGHT)
return cvar(strcat("g_buffs_", this.netname, "_time"));
}
#endif
+#ifdef MENUQC
METHOD(Buff, describe, string(Buff this)) {
TC(Buff, this);
return SUPER(Object).describe(this);
}
+#endif
ENDCLASS(Buff)
STATIC_INIT(REGISTER_BUFFS) {
#endif
CLASS(VaporizerCells, Ammo)
+#ifdef MENUQC
METHOD(VaporizerCells, describe, string(VaporizerCells this))
{
TC(VaporizerCells, this);
return _("The Vaporizer ammo is sometimes present on maps when InstaGib is enabled, providing ammo for the Vaporizer");
}
+#endif
ENDCLASS(VaporizerCells)
REGISTER_ITEM(VaporizerCells, NEW(VaporizerCells)) {
#endif
CLASS(ExtraLife, Powerup)
+#ifdef MENUQC
METHOD(ExtraLife, describe, string(ExtraLife this))
{
TC(ExtraLife, this);
return _("The Extra Life 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");
}
+#endif
ENDCLASS(ExtraLife)
REGISTER_ITEM(ExtraLife, NEW(ExtraLife)) {
#endif
CLASS(NormalNade, Nade)
+#ifdef MENUQC
METHOD(NormalNade, describe, string(NormalNade this))
{
TC(NormalNade, this);
return _("The (normal) Grenade explodes after a short delay, dealing damage to nearby players\n\n"
"Make sure you remember to throw it, or else it will blow up in your hands!");
}
+#endif
ENDCLASS(NormalNade)
REGISTER_NADE(NORMAL, NEW(NormalNade)) {
this.m_color = '1 1 1';
}
CLASS(NapalmNade, Nade)
+#ifdef MENUQC
METHOD(NapalmNade, describe, string(NapalmNade this))
{
TC(NapalmNade, this);
return _("The Napalm grenade explodes after a short delay, spreading fiery napalm globs around in the fountain. "
"The napalm fire balls burn for a while, and damage players who get too close");
}
+#endif
ENDCLASS(NapalmNade)
REGISTER_NADE(NAPALM, NEW(NapalmNade)) {
this.m_color = '2 0.5 0';
}
CLASS(IceNade, Nade)
+#ifdef MENUQC
METHOD(IceNade, describe, string(IceNade this))
{
TC(IceNade, this);
return _("The Ice grenade detonates after a short delay, freezing any enemies who walk within the explosion radius for a few seconds after the explosion. "
"While frozen, enemies are progressively dealt damage");
}
+#endif
ENDCLASS(IceNade)
REGISTER_NADE(ICE, NEW(IceNade)) {
this.m_color = '0 0.5 2';
}
CLASS(TranslocateNade, Nade)
+#ifdef MENUQC
METHOD(TranslocateNade, describe, string(TranslocateNade this))
{
TC(TranslocateNade, this);
return _("The Translocate grenade detonates after a short delay, teleporting you to where it detonated");
}
+#endif
ENDCLASS(TranslocateNade)
REGISTER_NADE(TRANSLOCATE, NEW(TranslocateNade)) {
this.m_color = '1 0 1';
}
CLASS(SpawnNade, Nade)
+#ifdef MENUQC
METHOD(SpawnNade, describe, string(SpawnNade this))
{
TC(SpawnNade, this);
return _("The Spawn grenade detonates after a short delay, temporarily setting your spawn point to where it detonated. "
"It is useful for cases where you want to go back to some point on the map after you die");
}
+#endif
ENDCLASS(SpawnNade)
REGISTER_NADE(SPAWN, NEW(SpawnNade)) {
this.m_color = '1 0.9 0';
}
CLASS(HealNade, Nade)
+#ifdef MENUQC
METHOD(HealNade, describe, string(HealNade this))
{
TC(HealNade, this);
return _("The Heal grenade detonates after a short delay, temporarily creating a healing orb around the point where it detonated for several seconds. "
"If your team members enter the orb they will recover health, and if enemies enter the sphere they will be harmed");
}
+#endif
ENDCLASS(HealNade)
REGISTER_NADE(HEAL, NEW(HealNade)) {
this.m_color = '1 0 0';
}
CLASS(MonsterNade, Nade)
+#ifdef MENUQC
METHOD(MonsterNade, describe, string(MonsterNade this))
{
TC(MonsterNade, this);
return _("The Monster grenade explodes after a short delay, spawning one of four monster types");
}
+#endif
ENDCLASS(MonsterNade)
REGISTER_NADE(MONSTER, NEW(MonsterNade)) {
this.m_color = '0.25 0.75 0';
}
CLASS(EntrapNade, Nade)
+#ifdef MENUQC
METHOD(EntrapNade, describe, string(EntrapNade this))
{
TC(EntrapNade, this);
return _("The Entrap grenade detonates after a short delay, temporarily creating an orb around the point where it detonated for several seconds. "
"Players and projectiles that enter the sphere will be slowed down, including yourself");
}
+#endif
ENDCLASS(EntrapNade)
REGISTER_NADE(ENTRAP, NEW(EntrapNade)) {
this.m_color = '0.15 0.85 0';
}
CLASS(VeilNade, Nade)
+#ifdef MENUQC
METHOD(VeilNade, describe, string(VeilNade this))
{
TC(VeilNade, this);
return _("The Veil grenade detonates after a short delay, temporarily creating an orb around the point where it detonated for several seconds. "
"Players inside the orb will be invisible to those outside it");
}
+#endif
ENDCLASS(VeilNade)
REGISTER_NADE(VEIL, NEW(VeilNade)) {
this.m_color = '0.65 0.85 0.65';
}
CLASS(AmmoNade, Nade)
+#ifdef MENUQC
METHOD(AmmoNade, describe, string(AmmoNade this))
{
TC(AmmoNade, this);
"If your team members enter the orb they will recover ammo, and if enemies enter the sphere they will lose ammo\n\n"
"This does not impact weapon magazines, so it won't reload your weapons for you");
}
+#endif
ENDCLASS(AmmoNade)
REGISTER_NADE(AMMO, NEW(AmmoNade)) {
this.m_color = '0.66 0.33 0';
}
CLASS(DarknessNade, Nade)
+#ifdef MENUQC
METHOD(DarknessNade, describe, string(DarknessNade this))
{
TC(DarknessNade, this);
return _("The Darkness grenade detonates after a short delay, creating a dark field which temporarily blinds enemies who enter it");
}
+#endif
ENDCLASS(DarknessNade)
REGISTER_NADE(DARKNESS, NEW(DarknessNade)) {
this.m_color = '0.23 0 0.23';
METHOD(Nade, display, void(entity this, void(string name, string icon) returns)) {
returns(this.m_name, sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.m_icon));
}
+#ifdef MENUQC
METHOD(Nade, describe, string(Nade this)) {
TC(Nade, this);
return SUPER(Object).describe(this);
}
+#endif
ENDCLASS(Nade)
CLASS(NullNade, Nade)
END()
W_PROPS(X, OverkillHeavyMachineGun, okhmg)
#undef X
-
-METHOD(OverkillHeavyMachineGun, describe, string(OverkillHeavyMachineGun this)) {
+#ifdef MENUQC
+METHOD(OverkillHeavyMachineGun, describe, string(OverkillHeavyMachineGun this))
+{
TC(OverkillHeavyMachineGun, this);
return _("The Overkill Heavy Machine Gun 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"
"The Overkill Heavy Machine Gun 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 Overkill MachineGun's bullets, it is often heavily contested when it spawns in");
}
+#endif
ENDCLASS(OverkillHeavyMachineGun)
REGISTER_WEAPON(OVERKILL_HMG, NEW(OverkillHeavyMachineGun));
END()
W_PROPS(X, OverkillMachineGun, okmachinegun)
#undef X
-
-METHOD(OverkillMachineGun, describe, string(OverkillMachineGun this)) {
+#ifdef MENUQC
+METHOD(OverkillMachineGun, describe, string(OverkillMachineGun this))
+{
TC(OverkillMachineGun, this);
return _("The Overkill MachineGun 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"
"It has a limited magazine size, so needs reloading after several shots\n\n"
"The Overkill MachineGun can be used in a lot of situations, and it works particularly well at long ranges since the bullets pierce the sky instantaneously");
}
+#endif
ENDCLASS(OverkillMachineGun)
REGISTER_WEAPON(OVERKILL_MACHINEGUN, NEW(OverkillMachineGun));
END()
W_PROPS(X, OverkillNex, oknex)
#undef X
-
-METHOD(OverkillNex, describe, string(OverkillNex this)) {
+#ifdef MENUQC
+METHOD(OverkillNex, describe, string(OverkillNex this))
+{
TC(OverkillNex, this);
return _("The Overkill Nex 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"
"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 Overkill Nex stands out at long ranges");
}
+#endif
ENDCLASS(OverkillNex)
REGISTER_WEAPON(OVERKILL_NEX, NEW(OverkillNex));
END()
W_PROPS(X, OverkillRocketPropelledChainsaw, okrpc)
#undef X
-
-METHOD(OverkillRocketPropelledChainsaw, describe, string(OverkillRocketPropelledChainsaw this)) {
+#ifdef MENUQC
+METHOD(OverkillRocketPropelledChainsaw, describe, string(OverkillRocketPropelledChainsaw this))
+{
TC(OverkillRocketPropelledChainsaw, this);
return _("As the name suggests, the Overkill Rocket Propelled Chainsaw 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"
"The primary fire consumes Rockets 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 Overkill Rocket Propelled Chainsaw is a good choice of weapon for attacking groups of enemies");
}
+#endif
ENDCLASS(OverkillRocketPropelledChainsaw)
REGISTER_WEAPON(OVERKILL_RPC, NEW(OverkillRocketPropelledChainsaw));
END()
W_PROPS(X, OverkillShotgun, okshotgun)
#undef X
-
-METHOD(OverkillShotgun, describe, string(OverkillShotgun this)) {
+#ifdef MENUQC
+METHOD(OverkillShotgun, describe, string(OverkillShotgun this))
+{
TC(OverkillShotgun, this);
return _("The Overkill Shotgun 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"
"It has a limited magazine size, so needs reloading after several shots\n\n"
"The Shotgun's damage drops off quickly as the range increases, so it is only useful for close combat or sometimes medium range combat");
}
+#endif
ENDCLASS(OverkillShotgun)
REGISTER_WEAPON(OVERKILL_SHOTGUN, NEW(OverkillShotgun));
ATTRIB(Invisibility, m_name, string, _("Invisibility"));
ATTRIB(Invisibility, m_color, vector, '0.5 0.5 1');
ATTRIB(Invisibility, m_icon, string, "buff_invisible");
+#ifdef MENUQC
METHOD(Invisibility, describe, string(Invisibility this))
{
TC(Invisibility, this);
"This powerup is often present in InstaGib\n\n"
"Since it is a powerup, it will drop if you die while holding it");
}
+#endif
ENDCLASS(Invisibility)
REGISTER_STATUSEFFECT(Invisibility, NEW(Invisibility));
ATTRIB(Shield, netname, string, "invincible"); // NOTE: referring to as invincible so that it matches the powerup item
ATTRIB(Shield, m_name, string, _("Shield"));
ATTRIB(Shield, m_icon, string, "shield");
+#ifdef MENUQC
METHOD(Shield, describe, string(Shield this))
{
TC(Shield, this);
"It also makes you more resistant to knockback\n\n"
"Since it is a powerup, it will drop if you die while holding it");
}
+#endif
ENDCLASS(Shield)
REGISTER_STATUSEFFECT(Shield, NEW(Shield));
ATTRIB(Speed, m_name, string, _("Speed"));
ATTRIB(Speed, m_color, vector, '0.1 1 0.84');
ATTRIB(Speed, m_icon, string, "buff_speed");
+#ifdef MENUQC
METHOD(Speed, describe, string(Speed this))
{
TC(Speed, this);
"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");
}
+#endif
ENDCLASS(Speed)
REGISTER_STATUSEFFECT(Speed, NEW(Speed));
ATTRIB(Strength, netname, string, "strength");
ATTRIB(Strength, m_name, string, _("Strength"));
ATTRIB(Strength, m_icon, string, "strength");
+#ifdef MENUQC
METHOD(Strength, describe, string(Strength this))
{
TC(Strength, this);
"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");
}
+#endif
ENDCLASS(Strength)
REGISTER_STATUSEFFECT(Strength, NEW(Strength));
#ifdef GAMEQC
ATTRIB(Powerups, m_sound_rm, Sound, SND_POWEROFF);
#endif
+#ifdef MENUQC
METHOD(Powerups, describe, string(Powerups this))
{
TC(Powerups, this);
return SUPER(Object).describe(this);
}
+#endif
ENDCLASS(Powerups)
/** vehicle 3rd person view distance */
ATTRIB(Vehicle, height, float, 0);
+#ifdef MENUQC
METHOD(Vehicle, describe, string(Vehicle this)) {
TC(Vehicle, this);
return SUPER(Object).describe(this);
}
+#endif
METHOD(Vehicle, display, void(entity this, void(string name, string icon) returns)) {
returns(this.vehicle_name, this.m_icon ? sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.m_icon) : string_null);
}
/* netname */ ATTRIB(Bumblebee, netname, string, "bumblebee");
/* fullname */ ATTRIB(Bumblebee, vehicle_name, string, _("Bumblebee"));
/* icon */ ATTRIB(Bumblebee, m_icon, string, "vehicle_bumble");
-METHOD(Bumblebee, describe, string(Bumblebee this)) {
+#ifdef MENUQC
+METHOD(Bumblebee, describe, string(Bumblebee this))
+{
TC(Bumblebee, this);
return _("The Bumblebee 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 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");
}
+#endif
ENDCLASS(Bumblebee)
REGISTER_VEHICLE(BUMBLEBEE, NEW(Bumblebee));
/* netname */ ATTRIB(Racer, netname, string, "racer");
/* fullname */ ATTRIB(Racer, vehicle_name, string, _("Racer"));
/* icon */ ATTRIB(Racer, m_icon, string, "vehicle_racer");
-METHOD(Racer, describe, string(Racer this)) {
+#ifdef MENUQC
+METHOD(Racer, describe, string(Racer this))
+{
TC(Racer, this);
return _("The Racer 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 \"+jump\" bind, which consumes power from the same source as the primary weapon\n\n"
"The Racer's primary weapon is a laser and the secondary weapon is energy balls that explode on impact");
}
+#endif
ENDCLASS(Racer)
REGISTER_VEHICLE(RACER, NEW(Racer));
/* netname */ ATTRIB(Raptor, netname, string, "raptor");
/* fullname */ ATTRIB(Raptor, vehicle_name, string, _("Raptor"));
/* icon */ ATTRIB(Raptor, m_icon, string, "vehicle_raptor");
-METHOD(Raptor, describe, string(Raptor this)) {
+#ifdef MENUQC
+METHOD(Raptor, describe, string(Raptor this))
+{
TC(Raptor, this);
return _("The Raptor 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 Spiderbot. "
"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");
}
+#endif
ENDCLASS(Raptor)
REGISTER_VEHICLE(RAPTOR, NEW(Raptor));
/* netname */ ATTRIB(Spiderbot, netname, string, "spiderbot");
/* fullname */ ATTRIB(Spiderbot, vehicle_name, string, _("Spiderbot"));
/* icon */ ATTRIB(Spiderbot, m_icon, string, "vehicle_spider");
-METHOD(Spiderbot, describe, string(Spiderbot this)) {
+#ifdef MENUQC
+METHOD(Spiderbot, describe, string(Spiderbot this))
+{
TC(Spiderbot, this);
return _("The Spiderbot 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"
"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 Spiderbot rotates");
}
+#endif
ENDCLASS(Spiderbot)
REGISTER_VEHICLE(SPIDERBOT, NEW(Spiderbot));
METHOD(Weapon, display, void(entity this, void(string name, string icon) returns)) {
returns(this.m_name, this.model2 ? sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.model2) : string_null);
}
+#ifdef MENUQC
METHOD(Weapon, describe, string(Weapon this)) {
TC(Weapon, this);
return SUPER(Object).describe(this);
}
+#endif
ENDCLASS(Weapon)
#ifdef SVQC
END()
W_PROPS(X, Arc, arc)
#undef X
-
-METHOD(Arc, describe, string(Arc this)) {
+#ifdef MENUQC
+METHOD(Arc, describe, string(Arc this))
+{
TC(Arc, this);
return _("The Arc 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 Cells ammo, steadily churning through your supply to maintain the stream\n\n"
"The Arc is quite a versatile weapon, however it is more effective at close to medium ranges, since the stream is not instantaneous");
}
+#endif
ENDCLASS(Arc)
REGISTER_WEAPON(ARC, NEW(Arc));
END()
W_PROPS(X, Blaster, blaster)
#undef X
-
-METHOD(Blaster, describe, string(Blaster this)) {
+#ifdef MENUQC
+METHOD(Blaster, describe, string(Blaster this))
+{
TC(Blaster, this);
return _("The Blaster 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"
"One of the most common uses of the Blaster 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 Blaster to throw the enemy's aim off");
}
+#endif
ENDCLASS(Blaster)
REGISTER_WEAPON(BLASTER, NEW(Blaster));
END()
W_PROPS(X, Crylink, crylink)
#undef X
-
-METHOD(Crylink, describe, string(Crylink this)) {
+#ifdef MENUQC
+METHOD(Crylink, describe, string(Crylink this))
+{
TC(Crylink, this);
return _("The Crylink 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, "
"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 Crylink is \"crylink running\", where you partially angle down and use the secondary fire to pull yourself forwards, in order to gain speed");
}
+#endif
ENDCLASS(Crylink)
REGISTER_WEAPON(CRYLINK, NEW(Crylink));
END()
W_PROPS(X, Devastator, devastator)
#undef X
-
-METHOD(Devastator, describe, string(Devastator this)) {
+#ifdef MENUQC
+METHOD(Devastator, describe, string(Devastator this))
+{
TC(Devastator, this);
return _("The Devastator 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"
"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");
}
+#endif
ENDCLASS(Devastator)
REGISTER_WEAPON(DEVASTATOR, NEW(Devastator));
END()
W_PROPS(X, Electro, electro)
#undef X
-
-METHOD(Electro, describe, string(Electro this)) {
+#ifdef MENUQC
+METHOD(Electro, describe, string(Electro this))
+{
TC(Electro, this);
return _("The Electro 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, "
"The Electro 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 Electro is not useful in many other situations");
}
+#endif
ENDCLASS(Electro)
REGISTER_WEAPON(ELECTRO, NEW(Electro));
END()
W_PROPS(X, Fireball, fireball)
#undef X
-
-METHOD(Fireball, describe, string(Fireball this)) {
+#ifdef MENUQC
+METHOD(Fireball, describe, string(Fireball this))
+{
TC(Fireball, this);
return _("The Fireball 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"
"Since the Fireball 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");
}
+#endif
ENDCLASS(Fireball)
REGISTER_WEAPON(FIREBALL, NEW(Fireball));
END()
W_PROPS(X, Hagar, hagar)
#undef X
-
-METHOD(Hagar, describe, string(Hagar this)) {
+#ifdef MENUQC
+METHOD(Hagar, describe, string(Hagar this))
+{
TC(Hagar, this);
return _("The Hagar 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. "
"The Hagar 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");
}
+#endif
ENDCLASS(Hagar)
REGISTER_WEAPON(HAGAR, NEW(Hagar));
END()
W_PROPS(X, HLAC, hlac)
#undef X
-
-METHOD(HLAC, describe, string(HLAC this)) {
+#ifdef MENUQC
+METHOD(HLAC, describe, string(HLAC this))
+{
TC(HLAC, this);
return _("The Heavy Assualt Laser Cannon (or HLAC for short) fires lasers in quick succession. "
"The projectiles it fires are similar to those of the Blaster\n\n"
"This means releasing primary fire every now and then is important to restore accuracy. "
"Also, the HLAC has less spread when used while crouching");
}
+#endif
ENDCLASS(HLAC)
REGISTER_WEAPON(HLAC, NEW(HLAC));
END()
W_PROPS(X, Hook, hook)
#undef X
-
-METHOD(Hook, describe, string(Hook this)) {
+#ifdef MENUQC
+METHOD(Hook, describe, string(Hook this))
+{
TC(Hook, this);
return _("The Grappling Hook 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"
"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 +hook bind");
}
+#endif
ENDCLASS(Hook)
REGISTER_WEAPON(HOOK, NEW(Hook));
END()
W_PROPS(X, MachineGun, machinegun)
#undef X
-
-METHOD(MachineGun, describe, string(MachineGun this)) {
+#ifdef MENUQC
+METHOD(MachineGun, describe, string(MachineGun this))
+{
TC(MachineGun, this);
return _("The MachineGun 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"
"The MachineGun 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");
}
+#endif
ENDCLASS(MachineGun)
REGISTER_WEAPON(MACHINEGUN, NEW(MachineGun));
END()
W_PROPS(X, MineLayer, minelayer)
#undef X
-
-METHOD(MineLayer, describe, string(MineLayer this)) {
+#ifdef MENUQC
+METHOD(MineLayer, describe, string(MineLayer this))
+{
TC(MineLayer, this);
return _("The Mine Layer 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 mines are not launched very far before they hit the ground, so the Mine Layer 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");
}
+#endif
ENDCLASS(MineLayer)
REGISTER_WEAPON(MINE_LAYER, NEW(MineLayer));
END()
W_PROPS(X, Mortar, mortar)
#undef X
-
-METHOD(Mortar, describe, string(Mortar this)) {
+#ifdef MENUQC
+METHOD(Mortar, describe, string(Mortar this))
+{
TC(Mortar, this);
return _("The Mortar 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"
"The Mortar 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");
}
+#endif
ENDCLASS(Mortar)
REGISTER_WEAPON(MORTAR, NEW(Mortar));
END()
W_PROPS(X, PortoLaunch, porto)
#undef X
-
-METHOD(PortoLaunch, describe, string(PortoLaunch this)) {
+#ifdef MENUQC
+METHOD(PortoLaunch, describe, string(PortoLaunch this))
+{
TC(PortoLaunch, this);
return _("The Port-O-Launch 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"
"The portals will close either after the player who shot them dies or after some time period"
"The Port-O-Launch isn't often placed on maps, but if used well it can make for some interesting gameplay");
}
+#endif
ENDCLASS(PortoLaunch)
REGISTER_WEAPON(PORTO, NEW(PortoLaunch));
END()
W_PROPS(X, Rifle, rifle)
#undef X
-
-METHOD(Rifle, describe, string(Rifle this)) {
+#ifdef MENUQC
+METHOD(Rifle, describe, string(Rifle this))
+{
TC(Rifle, this);
return _("The Rifle 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"
"Also, it needs to be reloaded after its magazine is emptied\n\n"
"Similar to the Vortex, the Rifle can be used at any range, but it stands out at long ranges");
}
+#endif
ENDCLASS(Rifle)
REGISTER_WEAPON(RIFLE, NEW(Rifle));
END()
W_PROPS(X, Seeker, seeker)
#undef X
-
-METHOD(Seeker, describe, string(Seeker this)) {
+#ifdef MENUQC
+METHOD(Seeker, describe, string(Seeker this))
+{
TC(Seeker, this);
return _("The T.A.G. Seeker 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 T.A.G. Seeker 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");
}
+#endif
ENDCLASS(Seeker)
REGISTER_WEAPON(SEEKER, NEW(Seeker));
END()
W_PROPS(X, Shockwave, shockwave)
#undef X
-
-METHOD(Shockwave, describe, string(Shockwave this)) {
+#ifdef MENUQC
+METHOD(Shockwave, describe, string(Shockwave this))
+{
TC(Shockwave, this);
return _("The Shockwave is a unique weapon, firing shockwave blasts that deal damage over a short range\n\n"
"Similar to the Shotgun, the secondary fire swings the Shockwave, slapping players close enough with the head of the weapon\n\n"
"It doesn't require ammo to work\n\n"
"The Shockwave can only deal damage over a short range, so it is not useful for medium and long range combat");
}
+#endif
ENDCLASS(Shockwave)
REGISTER_WEAPON(SHOCKWAVE, NEW(Shockwave));
END()
W_PROPS(X, Shotgun, shotgun)
#undef X
-
-METHOD(Shotgun, describe, string(Shotgun this)) {
+#ifdef MENUQC
+METHOD(Shotgun, describe, string(Shotgun this))
+{
TC(Shotgun, this);
return _("The Shotgun 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 Shotgun, slapping players close enough with the head of the weapon. "
"The primary fire consumes Shells ammo, although if you spawn in with the Shotgun you will already have some\n\n"
"The Shotgun's damage drops off quickly as the range increases, so it is only useful for close combat or sometimes medium range combat");
}
+#endif
ENDCLASS(Shotgun)
REGISTER_WEAPON(SHOTGUN, NEW(Shotgun));
END()
W_PROPS(X, Tuba, tuba)
#undef X
-
-METHOD(Tuba, describe, string(Tuba this)) {
+#ifdef MENUQC
+METHOD(Tuba, describe, string(Tuba this))
+{
TC(Tuba, this);
return _("The @!#%'n Tuba 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 pitch the @!#%'n Tuba plays depends on the movement keys pressed. "
"Reloading the weapon switches its model and notes played");
}
+#endif
ENDCLASS(Tuba)
REGISTER_WEAPON(TUBA, NEW(Tuba));
END()
W_PROPS(X, Vaporizer, vaporizer)
#undef X
-
-METHOD(Vaporizer, describe, string(Vaporizer this)) {
+#ifdef MENUQC
+METHOD(Vaporizer, describe, string(Vaporizer this))
+{
TC(Vaporizer, this);
return _("The Vaporizer 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 Extra Life\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 Cells ammo with each shot");
}
+#endif
ENDCLASS(Vaporizer)
REGISTER_WEAPON(VAPORIZER, NEW(Vaporizer));
END()
W_PROPS(X, Vortex, vortex)
#undef X
-
-METHOD(Vortex, describe, string(Vortex this)) {
+#ifdef MENUQC
+METHOD(Vortex, describe, string(Vortex this))
+{
TC(Vortex, this);
return _("The Vortex 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"
"Uniquely, the Vortex can be fired slightly before it finishes completely reloading, albeit dealing slightly less damage\n\n"
"Similar to the Rifle, the Vortex can be used at any range, but it stands out at long ranges");
}
+#endif
ENDCLASS(Vortex)
REGISTER_WEAPON(VORTEX, NEW(Vortex));