float autocvar_g_balance_crylink_secondary_spreadtype;
float autocvar_g_balance_crylink_reload_ammo;
float autocvar_g_balance_crylink_reload_time;
- float autocvar_g_balance_curse_empathy_minhealth;
- float autocvar_g_balance_curse_empathy_takedamage;
- float autocvar_g_balance_curse_slow_atkrate;
- float autocvar_g_balance_curse_slow_highspeed;
- float autocvar_g_balance_curse_venom_hpmod;
- float autocvar_g_balance_curse_venom_limitmod;
- float autocvar_g_balance_curse_venom_rotrate;
- float autocvar_g_balance_curse_vulner_takedamage;
- float autocvar_g_balance_curse_weak_damage;
- float autocvar_g_balance_curse_weak_force;
float autocvar_g_balance_damagepush_speedfactor;
float autocvar_g_balance_electro_combo_comboradius;
float autocvar_g_balance_electro_combo_damage;
float autocvar_g_balance_rocketlauncher_speedstart;
float autocvar_g_balance_rocketlauncher_reload_ammo;
float autocvar_g_balance_rocketlauncher_reload_time;
- float autocvar_g_balance_rune_defense_combo_takedamage;
- float autocvar_g_balance_rune_defense_takedamage;
- float autocvar_g_balance_rune_regen_combo_hpmod;
- float autocvar_g_balance_rune_regen_combo_limitmod;
- float autocvar_g_balance_rune_regen_combo_regenrate;
- float autocvar_g_balance_rune_regen_combo_rotrate;
- float autocvar_g_balance_rune_regen_hpmod;
- float autocvar_g_balance_rune_regen_limitmod;
- float autocvar_g_balance_rune_regen_regenrate;
- float autocvar_g_balance_rune_speed_atkrate;
- float autocvar_g_balance_rune_speed_combo_atkrate;
- float autocvar_g_balance_rune_speed_combo_highspeed;
- float autocvar_g_balance_rune_speed_highspeed;
- float autocvar_g_balance_rune_strength_combo_damage;
- float autocvar_g_balance_rune_strength_combo_force;
- float autocvar_g_balance_rune_strength_damage;
- float autocvar_g_balance_rune_strength_force;
- float autocvar_g_balance_rune_vampire_absorb;
- float autocvar_g_balance_rune_vampire_combo_absorb;
- float autocvar_g_balance_rune_vampire_maxhealth;
float autocvar_g_balance_seeker_type;
float autocvar_g_balance_seeker_flac_ammo;
float autocvar_g_balance_seeker_flac_animtime;
float autocvar_g_midair_shieldtime;
#define autocvar_g_minstagib cvar("g_minstagib")
float autocvar_g_minstagib_ammo_drop;
-float autocvar_g_minstagib_extralives;
+//float autocvar_g_minstagib_extralives;
float autocvar_g_minstagib_speed_highspeed;
#define autocvar_g_mirrordamage cvar("g_mirrordamage")
#define autocvar_g_mirrordamage_virtual cvar("g_mirrordamage_virtual")
float autocvar_g_respawn_ghosts_maxtime;
float autocvar_g_respawn_ghosts_speed;
float autocvar_g_respawn_waves;
- float autocvar_g_runematch_allow_same;
- float autocvar_g_runematch_drop_runes_max;
- float autocvar_g_runematch_fixedspawns;
- float autocvar_g_runematch_frags_killed_runeholder;
- float autocvar_g_runematch_frags_killedby_runeholder;
- float autocvar_g_runematch_frags_norune;
- float autocvar_g_runematch_point_leadlimit;
- #define autocvar_g_runematch_point_limit cvar("g_runematch_point_limit")
- float autocvar_g_runematch_pointamt;
- float autocvar_g_runematch_pointrate;
- float autocvar_g_runematch_respawntime;
- float autocvar_g_runematch_rune_alpha;
- float autocvar_g_runematch_rune_color_strength;
- float autocvar_g_runematch_rune_effects;
- float autocvar_g_runematch_shuffletime;
float autocvar_g_running_guns;
float autocvar_g_shootfromcenter;
float autocvar_g_shootfromclient;
WriteEntity(MSG_ONE, self);
}
- DropAllRunes(self);
MUTATOR_CALLHOOK(MakePlayerObserver);
- minstagib_stop_countdown(self);
-
Portal_ClearAll(self);
if(self.alivetime)
self.think = func_null;
self.nextthink = 0;
self.hook_time = 0;
- self.runes = 0;
self.deadflag = DEAD_NO;
self.angles = spot.angles;
self.angles_z = 0;
if(autocvar__notarget)
self.flags |= FL_NOTARGET;
self.takedamage = DAMAGE_AIM;
- if(g_minstagib)
- self.effects = EF_FULLBRIGHT;
- else
- self.effects = 0;
+ self.effects = 0;
self.effects |= EF_TELEPORT_BIT | EF_RESTARTANIM_BIT;
self.air_finished = time + 12;
self.dmg = 2;
self.metertime = 0;
- self.runes = 0;
-
self.deadflag = DEAD_NO;
self.angles = spot.angles;
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_QUIT_DISCONNECT, self.netname);
- DropAllRunes(self);
MUTATOR_CALLHOOK(ClientDisconnect);
Portal_ClearAll(self);
Fire_ApplyDamage(self);
Fire_ApplyEffect(self);
- if (g_minstagib)
- {
- self.effects |= EF_FULLBRIGHT;
-
- if (self.items & IT_STRENGTH)
- {
- play_countdown(self.strength_finished, "misc/poweroff.wav");
- if (time > self.strength_finished)
- {
- self.alpha = default_player_alpha;
- self.exteriorweaponentity.alpha = default_weapon_alpha;
- self.items &~= IT_STRENGTH;
- //Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERDOWN_INVISIBILITY, self.netname);
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_INVISIBILITY);
- }
- }
- else
- {
- if (time < self.strength_finished)
- {
- self.alpha = g_minstagib_invis_alpha;
- self.exteriorweaponentity.alpha = g_minstagib_invis_alpha;
- self.items |= IT_STRENGTH;
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_INVISIBILITY, self.netname);
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_INVISIBILITY);
- }
- }
-
- if (self.items & IT_INVINCIBLE)
- {
- play_countdown(self.invincible_finished, "misc/poweroff.wav");
- if (time > self.invincible_finished)
- {
- self.items = self.items - (self.items & IT_INVINCIBLE);
- //Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERDOWN_SPEED, self.netname);
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SPEED);
- }
- }
- else
- {
- if (time < self.invincible_finished)
- {
- self.items = self.items | IT_INVINCIBLE;
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SPEED, self.netname);
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SPEED);
- }
- }
- }
- else // if we're not in minstagib, continue. I added this else to replace the "return" which was here that broke the callhook for this function -- This code is nasty.
+ if not(g_minstagib)
{
if (self.items & IT_STRENGTH)
{
max_mod = regen_mod = rot_mod = limit_mod = 1;
- if (self.runes & RUNE_REGEN)
- {
- if (self.runes & CURSE_VENOM) // do we have both rune/curse?
- {
- regen_mod = autocvar_g_balance_rune_regen_combo_regenrate;
- max_mod = autocvar_g_balance_rune_regen_combo_hpmod;
- limit_mod = autocvar_g_balance_rune_regen_combo_limitmod;
- }
- else
- {
- regen_mod = autocvar_g_balance_rune_regen_regenrate;
- max_mod = autocvar_g_balance_rune_regen_hpmod;
- limit_mod = autocvar_g_balance_rune_regen_limitmod;
- }
- }
- else if (self.runes & CURSE_VENOM)
- {
- max_mod = autocvar_g_balance_curse_venom_hpmod;
- if (self.runes & RUNE_REGEN) // do we have both rune/curse?
- rot_mod = autocvar_g_balance_rune_regen_combo_rotrate;
- else
- rot_mod = autocvar_g_balance_curse_venom_rotrate;
- limit_mod = autocvar_g_balance_curse_venom_limitmod;
- //if (!self.runes & RUNE_REGEN)
- // rot_mod = autocvar_g_balance_curse_venom_rotrate;
- }
maxh = maxh * max_mod;
//maxa = maxa * max_mod;
//maxf = maxf * max_mod;
player_powerups();
}
- if (g_minstagib)
- minstagib_ammocheck();
-
if (self.deadflag != DEAD_NO)
{
float button_pressed, force_respawn;
WarpZone_PlayerPhysics_FixVAngle();
maxspd_mod = 1;
- if(g_minstagib && (self.items & IT_INVINCIBLE))
- maxspd_mod *= autocvar_g_minstagib_speed_highspeed;
if(self.ballcarried)
if(g_nexball)
maxspd_mod *= autocvar_g_nexball_basketball_carrier_highspeed;
else if(g_keepaway)
maxspd_mod *= autocvar_g_keepaway_ballcarrier_highspeed;
- if(g_runematch)
- {
- if(self.runes & RUNE_SPEED)
- {
- if(self.runes & CURSE_SLOW)
- maxspd_mod *= autocvar_g_balance_rune_speed_combo_highspeed;
- else
- maxspd_mod *= autocvar_g_balance_rune_speed_highspeed;
- }
- else if(self.runes & CURSE_SLOW)
- {
- maxspd_mod *= autocvar_g_balance_curse_slow_highspeed;
- }
- }
maxspd_mod *= autocvar_g_movement_highspeed;
// fix physics stats for g_movement_highspeed
void SpawnThrownWeapon (vector org, float w)
{
- if(g_minstagib)
- if(self.ammo_cells <= 0)
- return;
-
if(g_pinata)
{
float j;
else
Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
- if (!g_minstagib)
- {
- v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
- take = v_x;
- save = v_y;
- }
- else
- {
- save = 0;
- take = damage;
- }
+
+ v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+ take = v_x;
+ save = v_y;
if(attacker == self)
{
// print an obituary message
Obituary (attacker, inflictor, self, deathtype);
race_PreDie();
- DropAllRunes(self);
// increment frag counter for used weapon type
float w;
if(clienttype(self) == CLIENTTYPE_REAL)
{
- stuffcmd(self, "-zoom\n");
self.fixangle = TRUE;
//msg_entity = self;
//WriteByte (MSG_ONE, SVC_SETANGLE);
float t;
t = 1.0 / g_weaponratefactor;
- if(g_runematch)
- {
- if(self.runes & RUNE_SPEED)
- {
- if(self.runes & CURSE_SLOW)
- t = t * autocvar_g_balance_rune_speed_combo_atkrate;
- else
- t = t * autocvar_g_balance_rune_speed_atkrate;
- }
- else if(self.runes & CURSE_SLOW)
- {
- t = t * autocvar_g_balance_curse_slow_atkrate;
- }
- }
-
return t;
}
.float prevstrengthsoundattempt;
void W_PlayStrengthSound(entity player) // void W_PlayStrengthSound
{
- if((!g_minstagib)
- && (player.items & IT_STRENGTH)
+ if(MUTATOR_CALLHOOK(PlayStrengthSound))
+ return;
+
+ if((player.items & IT_STRENGTH)
&& ((time > player.prevstrengthsound + autocvar_sv_strengthsound_antispam_time) // prevent insane sound spam
|| (time > player.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold)))
{
else
{
self = oldself;
- if(g_runematch)
- {
- f = RunematchHandleFrags(attacker, targ, f);
- }
- else if(g_lms)
+ if(g_lms)
{
// remove a life
float tl;
s = strcat(s, "T");
if(player.kh_next)
s = strcat(s, "K");
- if(player.runes)
- s = strcat(s, "|", ftos(player.runes));
return s;
}
if(complainteamdamage > 0 && !g_ca) // FIXME why is g_ca ruled out here? Why not just g_mirrordamage 0 on CA servers?
mirrordamage = autocvar_g_mirrordamage * complainteamdamage;
mirrorforce = autocvar_g_mirrordamage * vlen(force);
- if(g_minstagib)
- {
- if(autocvar_g_friendlyfire == 0)
- damage = 0;
- }
- else if(g_ca)
+ if(g_ca)
damage = 0;
else
damage = autocvar_g_friendlyfire * damage;
attacker.lms_traveled_distance = autocvar_g_lms_campcheck_distance;
}
- if(targ.classname == "player")
- if (g_minstagib)
- {
- if ((deathtype == DEATH_FALL) ||
- (deathtype == DEATH_DROWN) ||
- (deathtype == DEATH_SLIME) ||
- (deathtype == DEATH_LAVA) ||
- (!DEATH_ISWEAPON(deathtype, WEP_LASER) && damage > 0 && damage < 100))
- {
- self = oldself;
- return;
- }
- if(damage > 0)
- damage = 10000;
- if (targ.armorvalue && (deathtype == WEP_MINSTANEX) && damage)
- {
- targ.armorvalue -= 1;
- centerprint(targ, strcat("^3Remaining extra lives: ",ftos(targ.armorvalue)));
- damage = 0;
- targ.hitsound += 1;
- attacker.hitsound += 1; // TODO change this to a future specific hitsound for armor hit
- }
- if (DEATH_ISWEAPON(deathtype, WEP_LASER))
- {
- damage = 0;
- mirrordamage = 0;
- complainteamdamage = 0;
- if (targ != attacker)
- {
- if ((targ.health >= 1) && (targ.classname == "player"))
- centerprint(attacker, "Secondary fire inflicts no damage!");
- force = '0 0 0';
- // keep mirrorforce
- attacker = targ;
- }
- }
- }
-
if not(DEATH_ISSPECIAL(deathtype))
{
damage *= g_weapondamagefactor;
frag_damage = damage;
frag_force = force;
frag_deathtype = deathtype;
+ frag_mirrordamage = mirrordamage;
MUTATOR_CALLHOOK(PlayerDamage_Calculate);
damage = frag_damage;
+ mirrordamage = frag_mirrordamage;
force = frag_force;
- // apply strength multiplier
- if ((attacker.items & IT_STRENGTH) && !g_minstagib)
+ if not(g_minstagib)
{
- if(targ == attacker)
+ // apply strength multiplier
+ if (attacker.items & IT_STRENGTH)
{
- damage = damage * autocvar_g_balance_powerup_strength_selfdamage;
- force = force * autocvar_g_balance_powerup_strength_selfforce;
- }
- else
- {
- damage = damage * autocvar_g_balance_powerup_strength_damage;
- force = force * autocvar_g_balance_powerup_strength_force;
+ if(targ == attacker)
+ {
+ damage = damage * autocvar_g_balance_powerup_strength_selfdamage;
+ force = force * autocvar_g_balance_powerup_strength_selfforce;
+ }
+ else
+ {
+ damage = damage * autocvar_g_balance_powerup_strength_damage;
+ force = force * autocvar_g_balance_powerup_strength_force;
+ }
}
- }
- // apply invincibility multiplier
- if (targ.items & IT_INVINCIBLE && !g_minstagib)
- damage = damage * autocvar_g_balance_powerup_invincible_takedamage;
+ // apply invincibility multiplier
+ if (targ.items & IT_INVINCIBLE)
+ damage = damage * autocvar_g_balance_powerup_invincible_takedamage;
+ }
if (targ == attacker)
{
damage = damage * autocvar_g_balance_selfdamagepercent; // Partial damage if the attacker hits himself
}
- if(g_runematch)
- {
- // apply strength rune
- if (attacker.runes & RUNE_STRENGTH)
- {
- if(attacker.runes & CURSE_WEAK) // have both curse & rune
- {
- damage = damage * autocvar_g_balance_rune_strength_combo_damage;
- force = force * autocvar_g_balance_rune_strength_combo_force;
- }
- else
- {
- damage = damage * autocvar_g_balance_rune_strength_damage;
- force = force * autocvar_g_balance_rune_strength_force;
- }
- }
- else if (attacker.runes & CURSE_WEAK)
- {
- damage = damage * autocvar_g_balance_curse_weak_damage;
- force = force * autocvar_g_balance_curse_weak_force;
- }
-
- // apply defense rune
- if (targ.runes & RUNE_DEFENSE)
- {
- if (targ.runes & CURSE_VULNER) // have both curse & rune
- damage = damage * autocvar_g_balance_rune_defense_combo_takedamage;
- else
- damage = damage * autocvar_g_balance_rune_defense_takedamage;
- }
- else if (targ.runes & CURSE_VULNER)
- damage = damage * autocvar_g_balance_curse_vulner_takedamage;
- }
-
// count the damage
if(attacker)
if(!targ.deadflag)
if not(DEATH_ISSPECIAL(deathtype))
{
if(targ.classname == "player") // don't do this for vehicles
- if(!g_minstagib)
if(IsFlying(victim))
yoda = 1;
-
- if(g_minstagib)
- if(victim.items & IT_STRENGTH)
- yoda = 1;
}
}
}
self.event_damage (inflictor, attacker, damage, deathtype, hitloc, force);
self = oldself;
- if(targ.classname == "player" && attacker.classname == "player" && attacker != targ && attacker.health > 2)
- {
- if(g_runematch)
- {
- if (attacker.runes & RUNE_VAMPIRE)
- {
- // apply vampire rune
- if (attacker.runes & CURSE_EMPATHY) // have the curse too
- {
- //attacker.health = attacker.health + damage * autocvar_g_balance_rune_vampire_combo_absorb;
- attacker.health = bound(
- autocvar_g_balance_curse_empathy_minhealth, // LA: was 3, now 40
- attacker.health + damage * autocvar_g_balance_rune_vampire_combo_absorb,
- autocvar_g_balance_rune_vampire_maxhealth); // LA: was 1000, now 500
- }
- else
- {
- //attacker.health = attacker.health + damage * autocvar_g_balance_rune_vampire_absorb;
- attacker.health = bound(
- attacker.health, // LA: was 3, but changed so that you can't lose health
- // empathy won't let you gain health in the same way...
- attacker.health + damage * autocvar_g_balance_rune_vampire_absorb,
- autocvar_g_balance_rune_vampire_maxhealth); // LA: was 1000, now 500
- }
- }
- // apply empathy curse
- else if (attacker.runes & CURSE_EMPATHY)
- {
- attacker.health = bound(
- autocvar_g_balance_curse_empathy_minhealth, // LA: was 3, now 20
- attacker.health + damage * autocvar_g_balance_curse_empathy_takedamage,
- attacker.health);
- }
- }
- }
-
// apply mirror damage if any
if(mirrordamage > 0 || mirrorforce > 0)
{
attacker = attacker_save;
- if(g_minstagib)
- if(mirrordamage > 0)
- {
- // just lose extra LIVES, don't kill the player for mirror damage
- if(attacker.armorvalue > 0)
- {
- attacker.armorvalue = attacker.armorvalue - 1;
- centerprint(attacker, strcat("^3Remaining extra lives: ",ftos(attacker.armorvalue)));
- attacker.hitsound += 1;
- }
- mirrordamage = 0;
- }
force = normalize(attacker.origin + attacker.view_ofs - hitloc) * mirrorforce;
Damage(attacker, inflictor, attacker, mirrordamage, DEATH_MIRRORDAMAGE, attacker.origin, force);
BADCVAR("g_onslaught");
BADCVAR("g_race");
BADCVAR("g_race_qualifying_timelimit");
- BADCVAR("g_runematch");
BADCVAR("g_tdm");
BADCVAR("g_tdm_teams");
BADCVAR("leadlimit");
BADCVAR("g_keyhunt_point_leadlimit");
BADPREFIX("g_mod_");
BADCVAR("g_nexball_goalleadlimit");
- BADCVAR("g_runematch_point_leadlimit");
BADCVAR("leadlimit_and_fraglimit");
BADCVAR("leadlimit_override");
BADCVAR("pausable");
BADCVAR("g_mirrordamage");
BADCVAR("g_nexball_goallimit");
BADCVAR("g_powerups");
- BADCVAR("g_runematch_point_limit");
BADCVAR("g_start_delay");
BADCVAR("g_warmup");
BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay");
BADCVAR("g_minstagib");
BADCVAR("g_new_toys");
BADCVAR("g_nix");
-
- if(autocvar_g_minstagib)
- {
- BADCVAR("g_grappling_hook");
- BADCVAR("g_jetpack");
- }
+ BADCVAR("g_grappling_hook");
+ BADCVAR("g_jetpack");
+
#undef BADPREFIX
#undef BADCVAR
if(autocvar_g_midair)
s = strcat(s, ":midair");
- // TODO to mutator system
- if(autocvar_g_minstagib)
- s = strcat(s, ":minstagib");
-
// TODO to mutator system
if(autocvar_g_powerups == 0)
s = strcat(s, ":no_powerups");
modname = cvar_string("g_mod_balance");
if(cvar_string("g_mod_config") != cvar_defstring("g_mod_config"))
modname = cvar_string("g_mod_config");
- // weird mutators that deserve to count as mod
- if(autocvar_g_minstagib)
- modname = "MinstaGib";
// extra mutators that deserve to count as mod
MUTATOR_CALLHOOK(SetModname);
if(!(g_lms || g_ca))
start_items |= IT_UNLIMITED_AMMO;
}
- else if (g_minstagib)
- {
- g_pinata = 0; // incompatible
- g_weapon_stay = 0; // incompatible
- g_bloodloss = 0; // incompatible
- start_health = 100;
- start_armorvalue = 0;
- WEPSET_COPY_AW(start_weapons, WEP_MINSTANEX);
- g_minstagib_invis_alpha = cvar("g_minstagib_invis_alpha");
- start_items |= IT_UNLIMITED_SUPERWEAPONS;
-
- if (g_minstagib_invis_alpha <= 0)
- g_minstagib_invis_alpha = -1;
- }
else
{
for (i = WEP_FIRST; i <= WEP_LAST; ++i)
if(cvar("g_nexball"))
start_items |= IT_UNLIMITED_SUPERWEAPONS; // FIXME BAD BAD BAD BAD HACK, NEXBALL SHOULDN'T ABUSE PORTO'S WEAPON SLOT
- if(g_minstagib)
- {
- start_ammo_cells = cvar("g_minstagib_ammo_start");
- start_ammo_fuel = cvar("g_start_ammo_fuel");
- }
- else if(start_items & IT_UNLIMITED_WEAPON_AMMO)
+ if(start_items & IT_UNLIMITED_WEAPON_AMMO)
{
start_ammo_rockets = 999;
start_ammo_shells = 999;
MUTATOR_ADD(mutator_spawn_near_teammate);
if(cvar("g_physical_items"))
MUTATOR_ADD(mutator_physical_items);
+ if(cvar("g_minstagib"))
+ MUTATOR_ADD(mutator_minstagib);
+
if(!g_minstagib)
{
if(cvar("g_invincible_projectiles"))
g_warmup_allguns = cvar("g_warmup_allguns");
g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
- if ((g_race && g_race_qualifying == 2) || g_runematch || g_arena || g_assault || cvar("g_campaign"))
+ if ((g_race && g_race_qualifying == 2) || g_arena || g_assault || cvar("g_campaign"))
inWarmupStage = 0; // these modes cannot work together, sorry
g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
{
// gamemode related things
precache_model ("models/misc/chatbubble.spr");
- if (g_runematch)
- {
- precache_model ("models/runematch/curse.mdl");
- precache_model ("models/runematch/rune.mdl");
- }
#ifdef TTURRETS_ENABLED
if (autocvar_g_turrets)
// INPUT:
float get_cvars_f;
string get_cvars_s;
+
+MUTATOR_HOOKABLE(PlayStrengthSound);
+ // called when a player fires a weapon with the strength powerup
MUTATOR_HOOKABLE(EditProjectile);
// can edit any "just fired" projectile
float damage_save;
MUTATOR_HOOKABLE(PlayerDamage_Calculate);
- // called to adjust damage and force values which are applied to the player, used for e.g. strength damage/force multiplier or runematch runes
+ // called to adjust damage and force values which are applied to the player, used for e.g. strength damage/force multiplier
// i'm not sure if I should change this around slightly (Naming of the entities, and also how they're done in g_damage).
// INPUT:
entity frag_attacker;
float frag_deathtype;
// INPUT, OUTPUT:
float frag_damage;
+ float frag_mirrordamage;
vector frag_force;
MUTATOR_HOOKABLE(PlayerPowerups);
entity other; // weapon info
// IN+OUT
string ret_string;
+
+MUTATOR_HOOKABLE(Item_RespawnCountdown);
+ // called when an item is about to respawn
+ // INPUT+OUTPUT:
+ string item_name;
+ vector item_color;
+
+MUTATOR_HOOKABLE(Item_GiveTo);
+ // called when an item is given to a player
+ entity giveplayer;
+ entity giveitem;
+ float player_wswitch;
+ float player_pickedup;
+
+MUTATOR_HOOKABLE(BotShouldAttack);
+ // called when a bot checks a target to attack
+ // INPUT
+ entity checkentity;
MUTATOR_HOOKABLE(PortalTeleport);
// called whenever a player goes through a portal gun teleport
g_tetris.qc
- runematch.qc
+ //runematch.qc
arena.qc
g_violence.qc
mutators/mutator_physical_items.qc
mutators/sandbox.qc
mutators/mutator_superspec.qc
+mutators/mutator_minstagib.qc
../warpzonelib/anglestransform.qc
../warpzonelib/mathlib.qc
PlayerScore_Clear(e);
}
- void runematch_init();
void tdm_init();
void entcs_init();
have_team_spawns = -1; // request team spawns
}
- if(g_runematch)
- {
- // ActivateTeamplay();
- fraglimit_override = autocvar_g_runematch_point_limit;
- leadlimit_override = autocvar_g_runematch_point_leadlimit;
- runematch_init();
- }
-
if(g_lms)
{
fraglimit_override = autocvar_g_lms_lives_override;
ret_string = "";
MUTATOR_CALLHOOK(BuildMutatorsPrettyString);
modifications = ret_string;
-
- if(g_minstagib)
- modifications = strcat(modifications, ", MinstaGib");
+
if(g_weaponarena)
{
if(g_weaponarena_random)