set g_lms_start_ammo_cells 180
set g_lms_start_ammo_plasma 180
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 200
-set g_mayhem_start_armor 200
-set g_mayhem_start_ammo_shells 60
-set g_mayhem_start_ammo_nails 320
-set g_mayhem_start_ammo_rockets 160
-set g_mayhem_start_ammo_cells 180
-set g_mayhem_start_ammo_plasma 180
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 200
-set g_tmayhem_start_armor 200
-set g_tmayhem_start_ammo_shells 60
-set g_tmayhem_start_ammo_nails 320
-set g_tmayhem_start_ammo_rockets 160
-set g_tmayhem_start_ammo_cells 180
-set g_tmayhem_start_ammo_plasma 180
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 60
set g_lms_start_ammo_cells 50
set g_lms_start_ammo_plasma 50
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 250
-set g_mayhem_start_armor 100
-set g_mayhem_start_ammo_shells 50
-set g_mayhem_start_ammo_nails 150
-set g_mayhem_start_ammo_rockets 50
-set g_mayhem_start_ammo_cells 50
-set g_mayhem_start_ammo_plasma 50
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 250
-set g_tmayhem_start_armor 100
-set g_tmayhem_start_ammo_shells 50
-set g_tmayhem_start_ammo_nails 150
-set g_tmayhem_start_ammo_rockets 50
-set g_tmayhem_start_ammo_cells 50
-set g_tmayhem_start_ammo_plasma 50
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 15
set g_lms_start_ammo_cells 180
set g_lms_start_ammo_plasma 180
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 200
-set g_mayhem_start_armor 100
-set g_mayhem_start_ammo_shells 60
-set g_mayhem_start_ammo_nails 320
-set g_mayhem_start_ammo_rockets 160
-set g_mayhem_start_ammo_cells 180
-set g_mayhem_start_ammo_plasma 180
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 200
-set g_tmayhem_start_armor 100
-set g_tmayhem_start_ammo_shells 60
-set g_tmayhem_start_ammo_nails 320
-set g_tmayhem_start_ammo_rockets 160
-set g_tmayhem_start_ammo_cells 180
-set g_tmayhem_start_ammo_plasma 180
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 60
set g_lms_start_ammo_cells 180
set g_lms_start_ammo_plasma 180
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 200
-set g_mayhem_start_armor 200
-set g_mayhem_start_ammo_shells 60
-set g_mayhem_start_ammo_nails 320
-set g_mayhem_start_ammo_rockets 160
-set g_mayhem_start_ammo_cells 180
-set g_mayhem_start_ammo_plasma 180
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 200
-set g_tmayhem_start_armor 200
-set g_tmayhem_start_ammo_shells 60
-set g_tmayhem_start_ammo_nails 320
-set g_tmayhem_start_ammo_rockets 160
-set g_tmayhem_start_ammo_cells 180
-set g_tmayhem_start_ammo_plasma 180
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 60
set g_lms_start_ammo_cells 180
set g_lms_start_ammo_plasma 180
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 200
-set g_mayhem_start_armor 200
-set g_mayhem_start_ammo_shells 60
-set g_mayhem_start_ammo_nails 320
-set g_mayhem_start_ammo_rockets 160
-set g_mayhem_start_ammo_cells 180
-set g_mayhem_start_ammo_plasma 180
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 200
-set g_tmayhem_start_armor 200
-set g_tmayhem_start_ammo_shells 60
-set g_tmayhem_start_ammo_nails 320
-set g_tmayhem_start_ammo_rockets 160
-set g_tmayhem_start_ammo_cells 180
-set g_tmayhem_start_ammo_plasma 180
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 60
set g_lms_start_ammo_cells 180
set g_lms_start_ammo_plasma 180
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 200
-set g_mayhem_start_armor 200
-set g_mayhem_start_ammo_shells 60
-set g_mayhem_start_ammo_nails 320
-set g_mayhem_start_ammo_rockets 160
-set g_mayhem_start_ammo_cells 180
-set g_mayhem_start_ammo_plasma 180
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 200
-set g_tmayhem_start_armor 200
-set g_tmayhem_start_ammo_shells 60
-set g_tmayhem_start_ammo_nails 320
-set g_tmayhem_start_ammo_rockets 160
-set g_tmayhem_start_ammo_cells 180
-set g_tmayhem_start_ammo_plasma 180
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 60
set g_lms_start_ammo_cells 180
set g_lms_start_ammo_plasma 180
set g_lms_start_ammo_fuel 0
-set g_mayhem_start_health 200
-set g_mayhem_start_armor 200
-set g_mayhem_start_ammo_shells 60
-set g_mayhem_start_ammo_nails 320
-set g_mayhem_start_ammo_rockets 160
-set g_mayhem_start_ammo_cells 180
-set g_mayhem_start_ammo_plasma 180
-set g_mayhem_start_ammo_fuel 0
-set g_tmayhem_start_health 200
-set g_tmayhem_start_armor 200
-set g_tmayhem_start_ammo_shells 60
-set g_tmayhem_start_ammo_nails 320
-set g_tmayhem_start_ammo_rockets 160
-set g_tmayhem_start_ammo_cells 180
-set g_tmayhem_start_ammo_plasma 180
-set g_tmayhem_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
set g_balance_nix_ammo_shells 60
alias cl_hook_gamestart_inv
alias cl_hook_gamestart_duel
alias cl_hook_gamestart_mmm //LegendGuard adds mmm client hook for MMM 20-02-2021
-alias cl_hook_gamestart_mayhem
-alias cl_hook_gamestart_tmayhem
alias cl_hook_gameend "rpn /cl_matchcount dup load 1 + =" // increase match count every time a game ends
alias cl_hook_shutdown
alias cl_hook_activeweapon
alias sv_hook_gamestart_inv
alias sv_hook_gamestart_duel
alias sv_hook_gamestart_mmm //LegendGuard adds mmm hook for MMM 20-02-2021
-alias sv_hook_gamestart_mayhem
-alias sv_hook_gamestart_tmayhem
// there is currently no hook for when the match is restarted
// see sv_hook_readyrestart for previous uses of this hook
//alias sv_hook_gamerestart
alias sv_vote_gametype_hook_tdm
alias sv_vote_gametype_hook_duel
alias sv_vote_gametype_hook_mmm //LegendGuard adds mmm hook for MMM 20-02-2021
-alias sv_vote_gametype_hook_mayhem
-alias sv_vote_gametype_hook_tmayhem
// Example preset to allow 1v1ctf to be used for the gametype voting screen.
// Aliases can have max 31 chars so the gametype can have max 9 chars.
set g_mmm_respawn_delay_max 0
set g_mmm_respawn_waves 0
set g_mmm_weapon_stay 0
-set g_mayhem_respawn_delay_small 0
-set g_mayhem_respawn_delay_small_count 0
-set g_mayhem_respawn_delay_large 0
-set g_mayhem_respawn_delay_large_count 0
-set g_mayhem_respawn_delay_max 0
-set g_mayhem_respawn_waves 0
-set g_mayhem_weapon_stay 0
-set g_tmayhem_respawn_delay_small 0
-set g_tmayhem_respawn_delay_small_count 0
-set g_tmayhem_respawn_delay_large 0
-set g_tmayhem_respawn_delay_large_count 0
-set g_tmayhem_respawn_delay_max 0
-set g_tmayhem_respawn_waves 0
-set g_tmayhem_weapon_stay 0
// =========
set g_mmm_karma_damageactive 1 "enable karma damage rule. If a player's karma is low, they will not do as much damage as a player who has high or full karma"
set g_mmm_karma_damagepunishmentdeal 20 "punishment damage points when player kills an ally"
set g_mmm_karma_severity 0.25 "how severe karma is to decrease karma points to the players [0.1 - 1.0]"
-set g_mmm_reward_sleuth 1 "give a point to all sleuth players if investigated corpses"
-
-// ======================
-// mayhem (ffa or team)
-// ======================
-set g_mayhem 0 "Mayhem: the player with the most frags in total mayhem wins"
-set g_mayhem_regenerate 0 "allow players to regenerate hp. rates controlled by hp regeneration and rotting cvars"
-set g_mayhem_weaponarena "most_available" "starting weapons - takes the same options as g_weaponarena"
-set g_mayhem_powerups 1 "Allow powerups in mayhem. Only checked if g_powerups is -1 therefore this will be overridden by g_powerups 1 or 0"
-set g_mayhem_selfdamage 0 "0 = disable selfdamage in mayhem, 1 = enable selfdamage in mayhem"
-set g_mayhem_frags2score 1 "enable frags counting towards score"
-set g_mayhem_damage2score 0 "enable damage counting towards score"
-set g_mayhem_damage2score_multiplier 0.0025 "how much score is given for damage dealt. 0.01 -> 1k dmg = 10 score, 0.001 1k dmg = 1 score, 0.0025 400 dmg = 1 score"
-
-set g_tmayhem 0 "Team Mayhem: the team with the most frags in total mayhem wins"
-set g_tmayhem_teams 2 "how many teams are in team mayhem (set by mapinfo)"
-set g_tmayhem_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any"
-set g_tmayhem_teams_override 0 "how many teams are in team mayhem"
-set g_tmayhem_point_limit -1 "Team Mayhem point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-set g_tmayhem_point_leadlimit -1 "Team Mayhem point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-set g_tmayhem_weaponarena "most_available" "starting weapons - takes the same options as g_weaponarena"
-set g_tmayhem_powerups 1 "Allow powerups in team mayhem. Only checked if g_powerups is -1 therefore this will be overridden by g_powerups 1 or 0"
-set g_tmayhem_regenerate 0 "allow players to regenerate hp. rates controlled by hp regeneration and rotting cvars"
-set g_tmayhem_selfdamage 0 "0 = disable selfdamage in tmayhem, 1 = enable selfdamage in tmayhem"
-set g_tmayhem_frags2score 1 "enable frags counting towards score"
-set g_tmayhem_damage2score 0 "enable damage counting towards score"
-set g_tmayhem_damage2score_multiplier 0.0025 "how much score is given for damage dealt. 0.01 -> 1k dmg = 10 score, 0.001 1k dmg = 1 score, 0.0025 400 dmg = 1 score"
-
+set g_mmm_reward_sleuth 1 "give a point to all sleuth players if investigated corpses"
\ No newline at end of file
#include <common/gamemodes/gamemode/keyhunt/_mod.inc>
#include <common/gamemodes/gamemode/lms/_mod.inc>
#include <common/gamemodes/gamemode/mmm/_mod.inc> //LegendGuard adds _mod.inc for Murder in Megaerebus Manor 20-02-2021
-#include <common/gamemodes/gamemode/mayhem/_mod.inc>
#include <common/gamemodes/gamemode/nexball/_mod.inc>
#include <common/gamemodes/gamemode/onslaught/_mod.inc>
#include <common/gamemodes/gamemode/race/_mod.inc>
#include <common/gamemodes/gamemode/tdm/_mod.inc>
-#include <common/gamemodes/gamemode/tmayhem/_mod.inc>
#include <common/gamemodes/gamemode/keyhunt/_mod.qh>
#include <common/gamemodes/gamemode/lms/_mod.qh>
#include <common/gamemodes/gamemode/mmm/_mod.qh> //LegendGuard adds _mod.qh for Murder in Megaerebus Manor 20-02-2021
-#include <common/gamemodes/gamemode/mayhem/_mod.qh>
#include <common/gamemodes/gamemode/nexball/_mod.qh>
#include <common/gamemodes/gamemode/onslaught/_mod.qh>
#include <common/gamemodes/gamemode/race/_mod.qh>
#include <common/gamemodes/gamemode/tdm/_mod.qh>
-#include <common/gamemodes/gamemode/tmayhem/_mod.qh>
+++ /dev/null
-// generated file; do not modify
-#include <common/gamemodes/gamemode/mayhem/mayhem.qc>
-#ifdef SVQC
- #include <common/gamemodes/gamemode/mayhem/sv_mayhem.qc>
-#endif
+++ /dev/null
-// generated file; do not modify
-#include <common/gamemodes/gamemode/mayhem/mayhem.qh>
-#ifdef SVQC
- #include <common/gamemodes/gamemode/mayhem/sv_mayhem.qh>
-#endif
+++ /dev/null
-#include "mayhem.qh"
+++ /dev/null
-#pragma once
-
-#include <common/gamemodes/gamemode/deathmatch/deathmatch.qh>
-#include <common/gamemodes/gamemode/tdm/tdm.qh>
-#include <common/mapinfo.qh>
-
-CLASS(mayhem, Gametype)
- INIT(mayhem)
- {
- this.gametype_init(this, _("Mayhem"),"mayhem","g_mayhem",GAMETYPE_FLAG_USEPOINTS | GAMETYPE_FLAG_PREFERRED,"","timelimit=15 pointlimit=30 leadlimit=0",_("The player with the most frags in total mayhem wins!"));
- }
- METHOD(mayhem, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
- {
- return true;
- }
- METHOD(mayhem, m_isForcedSupported, bool(Gametype this))
- {
- if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags)){
- return true;
- }
- if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH.m_flags)){
- return true;
- }
- return false;
- }
- ATTRIB(mayhem, m_legacydefaults, string, "30 20 0");
-ENDCLASS(mayhem)
-REGISTER_GAMETYPE(MAYHEM, NEW(mayhem));
+++ /dev/null
-#include "sv_mayhem.qh"
-
-bool autocvar_g_mayhem_regenerate;
-string autocvar_g_mayhem_weaponarena;
-bool autocvar_g_mayhem_powerups;
-bool autocvar_g_mayhem_selfdamage;
-bool autocvar_g_mayhem_frags2score;
-bool autocvar_g_mayhem_damage2score;
-float autocvar_g_mayhem_damage2score_multiplier;
-
-MUTATOR_HOOKFUNCTION(mayhem, Scores_CountFragsRemaining)
-{
- // announce remaining frags
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, SetStartItems)
-{
- start_items &= ~(IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS);
- start_health = warmup_start_health = cvar("g_mayhem_start_health");
- start_armorvalue = warmup_start_armorvalue = cvar("g_mayhem_start_armor");
- start_ammo_shells = warmup_start_ammo_shells = cvar("g_mayhem_start_ammo_shells");
- start_ammo_nails = warmup_start_ammo_nails = cvar("g_mayhem_start_ammo_nails");
- start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_mayhem_start_ammo_rockets");
- start_ammo_cells = warmup_start_ammo_cells = cvar("g_mayhem_start_ammo_cells");
- start_ammo_plasma = warmup_start_ammo_plasma = cvar("g_mayhem_start_ammo_plasma");
- start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_mayhem_start_ammo_fuel");
-}
-
-//this hook also enables rotting, as players spawn with more hp and armor than what default rot limits are set to this is a bad idea as of now
-MUTATOR_HOOKFUNCTION(mayhem, PlayerRegen)
-{
- if(autocvar_g_mayhem_regenerate)
- return false;
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, ForbidThrowCurrentWeapon)
-{
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, SetWeaponArena)
-{
- if (M_ARGV(0, string) == "0" || M_ARGV(0, string) == "")
- M_ARGV(0, string) = autocvar_g_mayhem_weaponarena;
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, FilterItem)
-{
- entity item = M_ARGV(0, entity);
- if (autocvar_g_powerups == 1){
- if (item.flags & FL_POWERUP){
- return false;
- }
- }
- else if (autocvar_g_powerups == -1){
- if (item.flags & FL_POWERUP){
- if (autocvar_g_mayhem_powerups){
- return false;
- }
- }
- }
- if (autocvar_g_pickup_items <= 0)
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, Damage_Calculate)
-{
- entity frag_attacker = M_ARGV(1, entity);
- entity frag_target = M_ARGV(2, entity);
- float frag_deathtype = M_ARGV(3, float);
- float frag_damage = M_ARGV(4, float);
-
- if ((autocvar_g_mayhem_selfdamage == 0 && frag_target == frag_attacker) || frag_deathtype == DEATH_FALL.m_id)
- frag_damage = 0;
-
- M_ARGV(4, float) = frag_damage;
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, PlayerDamage_SplitHealthArmor)
-{
- if(autocvar_g_mayhem_damage2score){
- entity frag_attacker = M_ARGV(1, entity);
- entity frag_target = M_ARGV(2, entity);
- float frag_deathtype = M_ARGV(6, float);
- float frag_damage = M_ARGV(7, float);
- float damage_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH));
- float damage_save = bound(0, M_ARGV(5, float), GetResource(frag_target, RES_ARMOR));
-
- float excess = max(0, frag_damage - damage_take - damage_save);
-
- if (frag_target != frag_attacker && IS_PLAYER(frag_attacker))
- GameRules_scoring_add_team(frag_attacker, SCORE, (frag_damage - excess) * autocvar_g_mayhem_damage2score_multiplier);
-
- if (frag_target == frag_attacker && IS_PLAYER(frag_attacker))
- GameRules_scoring_add_team(frag_target, SCORE, (-1 * (frag_damage - excess)) * autocvar_g_mayhem_damage2score_multiplier);
-
- //handle hazard suiciding, check first if player has a registered attacker who most likely pushed them there
- if (!IS_PLAYER(frag_attacker) && (
- frag_deathtype == DEATH_DROWN.m_id ||
- frag_deathtype == DEATH_HURTTRIGGER.m_id ||
- frag_deathtype == DEATH_CAMP.m_id ||
- frag_deathtype == DEATH_LAVA.m_id ||
- frag_deathtype == DEATH_SLIME.m_id))
- GameRules_scoring_add_team(frag_target, SCORE, (-1 * (frag_damage - excess)) * autocvar_g_mayhem_damage2score_multiplier);
-
- //autocvar_g_mayhem_frags2score is checked to avoid punishing twice for a suicide
- //when hp and armor values are checked when suiciding for some reason they are 0.9 hp and 0 armor regardless that player suicided with 200+200
- //AFAIK dynamic hp value checking is not possible, hardcoded start hp and armor
- //FIXME: ^ , might require fixing hp+a check for suicides as a whole
- if (frag_deathtype == DEATH_KILL.m_id && !autocvar_g_mayhem_frags2score)
- GameRules_scoring_add_team(frag_target, SCORE, (-1 * (start_health + start_armorvalue)) * autocvar_g_mayhem_damage2score_multiplier);
- }
-}
-
-MUTATOR_HOOKFUNCTION(mayhem, GiveFragsForKill, CBC_ORDER_FIRST)
-{
- if(!autocvar_g_mayhem_frags2score){
- M_ARGV(2, float) = 0;
- return true;
- }
-}
+++ /dev/null
-#pragma once
-
-#include <common/mutators/base.qh>
-REGISTER_MUTATOR(mayhem, false)
-{
- MUTATOR_STATIC();
- return 0;
-}
+++ /dev/null
-// generated file; do not modify
-#include <common/gamemodes/gamemode/tmayhem/tmayhem.qc>
-#ifdef SVQC
- #include <common/gamemodes/gamemode/tmayhem/sv_tmayhem.qc>
-#endif
+++ /dev/null
-// generated file; do not modify
-#include <common/gamemodes/gamemode/tmayhem/tmayhem.qh>
-#ifdef SVQC
- #include <common/gamemodes/gamemode/tmayhem/sv_tmayhem.qh>
-#endif
+++ /dev/null
-#include "sv_tmayhem.qh"
-
-// TODO? rename to teamdeathmatch
-int autocvar_g_tmayhem_teams;
-int autocvar_g_tmayhem_teams_override;
-
-bool autocvar_g_tmayhem_regenerate;
-string autocvar_g_tmayhem_weaponarena;
-bool autocvar_g_tmayhem_powerups;
-bool autocvar_g_tmayhem_selfdamage;
-bool autocvar_g_tmayhem_frags2score;
-bool autocvar_g_tmayhem_damage2score;
-float autocvar_g_tmayhem_damage2score_multiplier;
-
-// code from here on is just to support maps that don't have team entities
-void tmayhem_SpawnTeam (string teamname, int teamcolor)
-{
- entity this = new_pure(tmayhem_team);
- this.netname = teamname;
- this.cnt = teamcolor - 1;
- this.team = teamcolor;
- this.spawnfunc_checked = true;
- //spawnfunc_tmayhem_team(this);
-}
-
-void tmayhem_DelayedInit(entity this)
-{
- // if no teams are found, spawn defaults
- if(find(NULL, classname, "tmayhem_team") == NULL)
- {
- LOG_TRACE("No \"tmayhem_team\" entities found on this map, creating them anyway.");
-
- int numteams = autocvar_g_tmayhem_teams_override;
- if(numteams < 2) { numteams = autocvar_g_tmayhem_teams; }
-
- int teams = BITS(bound(2, numteams, 4));
- if(teams & BIT(0))
- tmayhem_SpawnTeam("Red", NUM_TEAM_1);
- if(teams & BIT(1))
- tmayhem_SpawnTeam("Blue", NUM_TEAM_2);
- if(teams & BIT(2))
- tmayhem_SpawnTeam("Yellow", NUM_TEAM_3);
- if(teams & BIT(3))
- tmayhem_SpawnTeam("Pink", NUM_TEAM_4);
- }
-}
-
-void tmayhem_Initialize()
-{
- GameRules_teams(true);
- GameRules_spawning_teams(autocvar_g_tmayhem_team_spawns);
- GameRules_limit_score(autocvar_g_tmayhem_point_limit);
- GameRules_limit_lead(autocvar_g_tmayhem_point_leadlimit);
-
- InitializeEntity(NULL, tmayhem_DelayedInit, INITPRIO_GAMETYPE);
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, TeamBalance_CheckAllowedTeams, CBC_ORDER_EXCLUSIVE)
-{
- M_ARGV(1, string) = "tmayhem_team";
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, Scores_CountFragsRemaining)
-{
- // announce remaining frags
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, SetStartItems)
-{
- start_items &= ~(IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS);
- start_health = warmup_start_health = cvar("g_tmayhem_start_health");
- start_armorvalue = warmup_start_armorvalue = cvar("g_tmayhem_start_armor");
- start_ammo_shells = warmup_start_ammo_shells = cvar("g_tmayhem_start_ammo_shells");
- start_ammo_nails = warmup_start_ammo_nails = cvar("g_tmayhem_start_ammo_nails");
- start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_tmayhem_start_ammo_rockets");
- start_ammo_cells = warmup_start_ammo_cells = cvar("g_tmayhem_start_ammo_cells");
- start_ammo_plasma = warmup_start_ammo_plasma = cvar("g_tmayhem_start_ammo_plasma");
- start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_tmayhem_start_ammo_fuel");
-}
-
-//this hook also enables rotting, as players spawn with more hp and armor than what default rot limits are set to this is a bad idea as of now
-MUTATOR_HOOKFUNCTION(tmayhem, PlayerRegen)
-{
- if(autocvar_g_tmayhem_regenerate)
- return false;
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, ForbidThrowCurrentWeapon)
-{
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, SetWeaponArena)
-{
- if (M_ARGV(0, string) == "0" || M_ARGV(0, string) == "")
- M_ARGV(0, string) = autocvar_g_tmayhem_weaponarena;
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, FilterItem)
-{
- entity item = M_ARGV(0, entity);
- if (autocvar_g_powerups == 1){
- if (item.flags & FL_POWERUP){
- return false;
- }
- }
- else if (autocvar_g_powerups == -1){
- if (item.flags & FL_POWERUP){
- if (autocvar_g_tmayhem_powerups){
- return false;
- }
- }
- }
- if (autocvar_g_pickup_items <= 0)
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, Damage_Calculate)
-{
- entity frag_attacker = M_ARGV(1, entity);
- entity frag_target = M_ARGV(2, entity);
- float frag_deathtype = M_ARGV(3, float);
- float frag_damage = M_ARGV(4, float);
- float frag_mirrordamage = M_ARGV(5, float);
-
- if (IS_PLAYER(frag_target))
- if (!IS_DEAD(frag_target))
- if ((autocvar_g_tmayhem_selfdamage == 0 && frag_target == frag_attacker) || frag_deathtype == DEATH_FALL.m_id)
- frag_damage = 0;
-
- frag_mirrordamage = 0;
-
- M_ARGV(4, float) = frag_damage;
- M_ARGV(5, float) = frag_mirrordamage;
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, PlayerDamage_SplitHealthArmor)
-{
- if(autocvar_g_tmayhem_damage2score){
- entity frag_attacker = M_ARGV(1, entity);
- entity frag_target = M_ARGV(2, entity);
- float frag_deathtype = M_ARGV(6, float);
- float frag_damage = M_ARGV(7, float);
- float damage_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH));
- float damage_save = bound(0, M_ARGV(5, float), GetResource(frag_target, RES_ARMOR));
-
- float excess = max(0, frag_damage - damage_take - damage_save);
-
- if (frag_target != frag_attacker && IS_PLAYER(frag_attacker) && DIFF_TEAM(frag_target, frag_attacker))
- GameRules_scoring_add_team(frag_attacker, SCORE, (frag_damage - excess) * autocvar_g_tmayhem_damage2score_multiplier);
-
- if (frag_target == frag_attacker && IS_PLAYER(frag_attacker) || SAME_TEAM(frag_target, frag_attacker))
- GameRules_scoring_add_team(frag_attacker, SCORE, (-1 * (frag_damage - excess)) * autocvar_g_tmayhem_damage2score_multiplier);
-
- //handle hazard suiciding, check first if player has a registered attacker who most likely pushed them there
- if (!IS_PLAYER(frag_attacker) && (
- frag_deathtype == DEATH_DROWN.m_id ||
- frag_deathtype == DEATH_HURTTRIGGER.m_id ||
- frag_deathtype == DEATH_CAMP.m_id ||
- frag_deathtype == DEATH_LAVA.m_id ||
- frag_deathtype == DEATH_SLIME.m_id))
- GameRules_scoring_add_team(frag_target, SCORE, (-1 * (frag_damage - excess)) * autocvar_g_tmayhem_damage2score_multiplier);
-
- //autocvar_g_tmayhem_frags2score is checked to avoid punishing twice for a suicide
- //when hp and armor values are checked when suiciding for some reason they are 0.9 hp and 0 armor regardless that player suicided with 200+200
- //AFAIK dynamic hp value checking is not possible, hardcoded start hp and armor
- //FIXME: ^ , might require fixing hp+a check for suicides as a whole
- if (frag_deathtype == DEATH_KILL.m_id && !autocvar_g_tmayhem_frags2score)
- GameRules_scoring_add_team(frag_target, SCORE, (-1 * (start_health + start_armorvalue)) * autocvar_g_tmayhem_damage2score_multiplier);
- }
-}
-
-MUTATOR_HOOKFUNCTION(tmayhem, GiveFragsForKill, CBC_ORDER_FIRST)
-{
- if(!autocvar_g_tmayhem_frags2score){
- M_ARGV(2, float) = 0;
- return true;
- }
-}
+++ /dev/null
-#pragma once
-
-#include <common/mutators/base.qh>
-int autocvar_g_tmayhem_point_limit;
-int autocvar_g_tmayhem_point_leadlimit;
-bool autocvar_g_tmayhem_team_spawns;
-void tmayhem_Initialize();
-
-REGISTER_MUTATOR(tmayhem, false)
-{
- MUTATOR_STATIC();
- MUTATOR_ONADD
- {
- tmayhem_Initialize();
- }
- return 0;
-}
+++ /dev/null
-#include "tmayhem.qh"
+++ /dev/null
-#pragma once
-
-#include <common/gamemodes/gamemode/deathmatch/deathmatch.qh>
-#include <common/gamemodes/gamemode/tdm/tdm.qh>
-#include <common/mapinfo.qh>
-
-CLASS(tmayhem, Gametype)
- INIT(tmayhem)
- {
- this.gametype_init(this, _("Team Mayhem"),"tmayhem","g_tmayhem",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS | GAMETYPE_FLAG_PRIORITY,"","timelimit=15 pointlimit=50 teams=2 leadlimit=0",_("The team with the most frags in total mayhem wins!"));
- }
- METHOD(tmayhem, m_parse_mapinfo, bool(string k, string v))
- {
- if (!k) {
- cvar_set("g_tmayhem_teams", cvar_defstring("g_tmayhem_teams"));
- return true;
- }
- switch (k) {
- case "teams":
- cvar_set("g_tmayhem_teams", v);
- return true;
- }
- return false;
- }
- METHOD(tmayhem, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
- {
- return true;
- }
- METHOD(tmayhem, m_isForcedSupported, bool(Gametype this))
- {
- if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags)){
- return true;
- }
- if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH.m_flags)){
- return true;
- }
- return false;
- }
- METHOD(tmayhem, m_setTeams, void(string sa))
- {
- cvar_set("g_tmayhem_teams", sa);
- }
- METHOD(tmayhem, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
- {
- TC(Gametype, this);
- returns(menu, _("Point limit:"), 5, 100, 5, "g_tmayhem_point_limit", "g_tmayhem_teams_override", _("The amount of points needed before the match will end"));
- }
- ATTRIB(tmayhem, m_legacydefaults, string, "50 20 2 0");
-ENDCLASS(tmayhem)
-REGISTER_GAMETYPE(TEAM_MAYHEM, NEW(tmayhem));
-#define g_tmayhem IS_GAMETYPE(TEAM_MAYHEM)
GAMETYPE(MAPINFO_TYPE_CTF) \
GAMETYPE(MAPINFO_TYPE_CA) \
GAMETYPE(MAPINFO_TYPE_FREEZETAG) \
- GAMETYPE(MAPINFO_TYPE_TEAM_MAYHEM) \
- GAMETYPE(MAPINFO_TYPE_MAYHEM) \
GAMETYPE(MAPINFO_TYPE_KEEPAWAY) \
GAMETYPE(MAPINFO_TYPE_KEYHUNT) \
GAMETYPE(MAPINFO_TYPE_LMS) \