return strcat(draw_currentSkin, "/", pic);
}
+void mut_set_active(int mut)
+{
+ if (mut >= 24)
+ active_mutators[1] |= BIT(mut - 24);
+ else
+ active_mutators[0] |= BIT(mut);
+}
+
+bool mut_is_active(int mut)
+{
+ if (mut >= 24)
+ return (active_mutators[1] & (BIT(mut - 24)));
+ else
+ return (active_mutators[0] & BIT(mut));
+}
+
// if s == "" (MENUQC) builds the mutator list for the Mutators dialog based on local cvar values
// otherwise (CSQC) translates the mutator list (s) that client has received from server
// NOTE: this function merges MENUQC and CSQC code in order to avoid duplicating and separating strings
for (string arg = ""; i < n; i++)
{
if (i >= 0) arg = argv(i);
- if(arg == "Dodging" || (!n && cvar("g_dodging"))) s2 = cons_mid(s2, ", ", _("Dodging"));
- if(arg == "InstaGib" || (!n && cvar("g_instagib"))) s2 = cons_mid(s2, ", ", _("InstaGib"));
- if(arg == "New Toys" || (!n && cvar("g_new_toys"))) s2 = cons_mid(s2, ", ", _("New Toys"));
- if(arg == "NIX" || (!n && cvar("g_nix"))) s2 = cons_mid(s2, ", ", _("NIX"));
- if(arg == "Rocket Flying" || (!n && cvar("g_rocket_flying"))) s2 = cons_mid(s2, ", ", _("Rocket Flying"));
- if(arg == "Invincible Projectiles" || (!n && cvar("g_invincible_projectiles"))) s2 = cons_mid(s2, ", ", _("Invincible Projectiles"));
- if(arg == "Low gravity" || (!n && cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))) s2 = cons_mid(s2, ", ", _("Low gravity"));
- if(arg == "Cloaked" || (!n && cvar("g_cloaked"))) s2 = cons_mid(s2, ", ", _("Cloaked"));
- if(arg == "Hook" || (!n && cvar("g_grappling_hook"))) s2 = cons_mid(s2, ", ", _("Hook"));
- if(arg == "Midair" || (!n && cvar("g_midair"))) s2 = cons_mid(s2, ", ", _("Midair"));
- if(arg == "Melee only" || (!n && cvar("g_melee_only"))) s2 = cons_mid(s2, ", ", _("Melee only"));
- if(arg == "Vampire" || (!n && cvar("g_vampire"))) s2 = cons_mid(s2, ", ", _("Vampire"));
- if(arg == "Piñata" || (!n && cvar("g_pinata"))) s2 = cons_mid(s2, ", ", _("Piñata"));
- if(arg == "Weapons stay" || (!n && cvar("g_weapon_stay"))) s2 = cons_mid(s2, ", ", _("Weapons stay"));
- if(arg == "Blood loss" || (!n && cvar("g_bloodloss") > 0)) s2 = cons_mid(s2, ", ", _("Blood loss"));
- if(arg == "Jetpack" || (!n && cvar("g_jetpack"))) s2 = cons_mid(s2, ", ", _("Jetpack"));
- if(arg == "Buffs" || (!n && cvar("g_buffs") > 0)) s2 = cons_mid(s2, ", ", _("Buffs"));
- if(arg == "Overkill" || (!n && cvar("g_overkill"))) s2 = cons_mid(s2, ", ", _("Overkill"));
- if(arg == "No powerups" || (!n && cvar("g_powerups") == 0)) s2 = cons_mid(s2, ", ", _("No powerups"));
- if(arg == "Powerups" || (!n && cvar("g_powerups") > 0)) s2 = cons_mid(s2, ", ", _("Powerups"));
- if(arg == "Touch explode" || (!n && cvar("g_touchexplode") > 0)) s2 = cons_mid(s2, ", ", _("Touch explode"));
- if(arg == "Wall jumping" || (!n && cvar("g_walljump"))) s2 = cons_mid(s2, ", ", _("Wall jumping"));
- if(arg == "No start weapons" || (!n && cvar_string("g_weaponarena") == "0" && cvar("g_balance_blaster_weaponstartoverride") == 0)) s2 = cons_mid(s2, ", ", _("No start weapons"));
+ #define X(name, translated_name, mut, cond) \
+ if(arg == name || (!n && (cond))) { s2 = cons_mid(s2, ", ", translated_name); mut_set_active(mut); }
+ X("Dodging" , _("Dodging") , MUT_DODGING , cvar("g_dodging"))
+ X("InstaGib" , _("InstaGib") , MUT_INSTAGIB , cvar("g_instagib"))
+ X("New Toys" , _("New Toys") , MUT_NEW_TOYS , cvar("g_new_toys"))
+ X("NIX" , _("NIX") , MUT_NIX , cvar("g_nix"))
+ X("Rocket Flying" , _("Rocket Flying") , MUT_ROCKET_FLYING , cvar("g_rocket_flying"))
+ X("Invincible Projectiles" , _("Invincible Projectiles") , MUT_INVINCIBLE_PROJECTILES , cvar("g_invincible_projectiles"))
+ X("Low gravity" , _("Low gravity") , MUT_GRAVITY , cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))
+ X("Cloaked" , _("Cloaked") , MUT_CLOAKED , cvar("g_cloaked"))
+ X("Hook" , _("Hook") , MUT_GRAPPLING_HOOK , cvar("g_grappling_hook"))
+ X("Midair" , _("Midair") , MUT_MIDAIR , cvar("g_midair"))
+ X("Melee only" , _("Melee only") , MUT_MELEE_ONLY , cvar("g_melee_only"))
+ X("Vampire" , _("Vampire") , MUT_VAMPIRE , cvar("g_vampire"))
+ X("Piñata" , _("Piñata") , MUT_PINATA , cvar("g_pinata"))
+ X("Weapons stay" , _("Weapons stay") , MUT_WEAPON_STAY , cvar("g_weapon_stay"))
+ X("Blood loss" , _("Blood loss") , MUT_BLOODLOSS , cvar("g_bloodloss") > 0)
+ X("Jetpack" , _("Jetpack") , MUT_JETPACK , cvar("g_jetpack"))
+ X("Buffs" , _("Buffs") , MUT_BUFFS , cvar("g_buffs") > 0)
+ X("Overkill" , _("Overkill") , MUT_OVERKILL , cvar("g_overkill"))
+ X("No powerups" , _("No powerups") , MUT_NO_POWERUPS , cvar("g_powerups") == 0)
+ X("Powerups" , _("Powerups") , MUT_POWERUPS , cvar("g_powerups") > 0)
+ X("Touch explode" , _("Touch explode") , MUT_TOUCHEXPLODE , cvar("g_touchexplode") > 0)
+ X("Wall jumping" , _("Wall jumping") , MUT_WALLJUMP , cvar("g_walljump"))
+ X("No start weapons" , _("No start weapons") , MUT_WEAPONARENA , cvar_string("g_weaponarena") == "0" && cvar("g_balance_blaster_weaponstartoverride") == 0)
+ X("Nades" , _("Nades") , MUT_NADES , cvar("g_nades"))
+ X("Offhand blaster" , _("Offhand blaster") , MUT_OFFHAND_BLASTER , cvar("g_offhand_blaster"))
+ #undef X
}
return s2;
}
string draw_currentSkin;
string draw_UseSkinFor(string pic);
+// some of these aren't proper mutators, e.g. jetpack
+const int MUT_DODGING = 0;
+const int MUT_INSTAGIB = 1;
+const int MUT_NEW_TOYS = 2;
+const int MUT_NIX = 3;
+const int MUT_ROCKET_FLYING = 4;
+const int MUT_INVINCIBLE_PROJECTILES = 5;
+const int MUT_GRAVITY = 6;
+const int MUT_CLOAKED = 7;
+const int MUT_GRAPPLING_HOOK = 8;
+const int MUT_MIDAIR = 9;
+const int MUT_MELEE_ONLY = 10;
+const int MUT_VAMPIRE = 11;
+const int MUT_PINATA = 12;
+const int MUT_WEAPON_STAY = 13;
+const int MUT_BLOODLOSS = 14;
+const int MUT_JETPACK = 15;
+const int MUT_BUFFS = 16;
+const int MUT_OVERKILL = 17;
+const int MUT_NO_POWERUPS = 18;
+const int MUT_POWERUPS = 19;
+const int MUT_TOUCHEXPLODE = 20;
+const int MUT_WALLJUMP = 21;
+const int MUT_WEAPONARENA = 22;
+const int MUT_NADES = 23;
+const int MUT_OFFHAND_BLASTER = 24;
+
+const int MUT_MAX = 47;
+
+int active_mutators[2];
+bool mut_is_active(int mut);
string build_mutator_list(string s);
#endif