]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/nades/nades.qc
Fix up more mutator hooks
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / nades / nades.qc
index 699a83d3a057c85ff7ad4aa9454cbfe95111ce92..0c458e379b186fb05070c9f4e27f77fd1271dcaa 100644 (file)
@@ -45,53 +45,55 @@ MUTATOR_HOOKFUNCTION(cl_nades, HUD_Draw_overlay)
 }
 MUTATOR_HOOKFUNCTION(cl_nades, Ent_Projectile)
 {
-    SELFPARAM();
-       if (self.cnt == PROJECTILE_NAPALM_FOUNTAIN)
+       entity proj = M_ARGV(0, entity);
+
+       if (proj.cnt == PROJECTILE_NAPALM_FOUNTAIN)
        {
-               self.modelindex = 0;
-               self.traileffect = EFFECT_FIREBALL.m_id;
+               proj.modelindex = 0;
+               proj.traileffect = EFFECT_FIREBALL.m_id;
                return true;
        }
-       if (Nade_FromProjectile(self.cnt) != NADE_TYPE_Null)
+       if (Nade_FromProjectile(proj.cnt) != NADE_TYPE_Null)
        {
-               setmodel(self, MDL_PROJECTILE_NADE);
-               entity trail = Nade_TrailEffect(self.cnt, self.team);
-               if (trail.eent_eff_name) self.traileffect = trail.m_id;
+               setmodel(proj, MDL_PROJECTILE_NADE);
+               entity trail = Nade_TrailEffect(proj.cnt, proj.team);
+               if (trail.eent_eff_name) proj.traileffect = trail.m_id;
                return true;
        }
 }
 MUTATOR_HOOKFUNCTION(cl_nades, EditProjectile)
 {
-    SELFPARAM();
-       if (self.cnt == PROJECTILE_NAPALM_FOUNTAIN)
+       entity proj = M_ARGV(0, entity);
+
+       if (proj.cnt == PROJECTILE_NAPALM_FOUNTAIN)
        {
-               loopsound(self, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM);
-               self.mins = '-16 -16 -16';
-               self.maxs = '16 16 16';
+               loopsound(proj, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM);
+               proj.mins = '-16 -16 -16';
+               proj.maxs = '16 16 16';
        }
 
-       entity nade_type = Nade_FromProjectile(self.cnt);
+       entity nade_type = Nade_FromProjectile(proj.cnt);
        if (nade_type == NADE_TYPE_Null) return;
        if(STAT(NADES_SMALL, NULL))
        {
-               self.mins = '-8 -8 -8';
-               self.maxs = '8 8 8';
+               proj.mins = '-8 -8 -8';
+               proj.maxs = '8 8 8';
        }
        else
        {
-               self.mins = '-16 -16 -16';
-               self.maxs = '16 16 16';
+               proj.mins = '-16 -16 -16';
+               proj.maxs = '16 16 16';
        }
-       self.colormod = nade_type.m_color;
-       self.move_movetype = MOVETYPE_BOUNCE;
-       settouch(self, func_null);
-       self.scale = 1.5;
-       self.avelocity = randomvec() * 720;
+       proj.colormod = nade_type.m_color;
+       proj.move_movetype = MOVETYPE_BOUNCE;
+       settouch(proj, func_null);
+       proj.scale = 1.5;
+       proj.avelocity = randomvec() * 720;
 
        if (nade_type == NADE_TYPE_TRANSLOCATE || nade_type == NADE_TYPE_SPAWN)
-               self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
+               proj.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
        else
-               self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY;
+               proj.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY;
 }
 bool Projectile_isnade(int p)
 {
@@ -811,7 +813,7 @@ void nade_damage(entity this, entity inflictor, entity attacker, float damage, i
 }
 
 void toss_nade(entity e, bool set_owner, vector _velocity, float _time)
-{SELFPARAM();
+{
        if(e.nade == world)
                return;
 
@@ -847,14 +849,14 @@ void toss_nade(entity e, bool set_owner, vector _velocity, float _time)
        if (trace_startsolid)
                setorigin(_nade, e.origin);
 
-       if(self.v_angle.x >= 70 && self.v_angle.x <= 110 && PHYS_INPUT_BUTTON_CROUCH(self))
+       if(e.v_angle.x >= 70 && e.v_angle.x <= 110 && PHYS_INPUT_BUTTON_CROUCH(e))
                _nade.velocity = '0 0 100';
        else if(autocvar_g_nades_nade_newton_style == 1)
                _nade.velocity = e.velocity + _velocity;
        else if(autocvar_g_nades_nade_newton_style == 2)
                _nade.velocity = _velocity;
        else
-               _nade.velocity = W_CalculateProjectileVelocity(e.velocity, _velocity, true);
+               _nade.velocity = W_CalculateProjectileVelocity(e, e.velocity, _velocity, true);
 
        if(set_owner)
                _nade.realowner = e;
@@ -926,8 +928,9 @@ void nades_RemoveBonus(entity player)
 
 MUTATOR_HOOKFUNCTION(nades, PutClientInServer)
 {
-    SELFPARAM();
-       nades_RemoveBonus(self);
+    entity player = M_ARGV(0, entity);
+
+       nades_RemoveBonus(player);
 }
 
 float nade_customize(entity this)
@@ -1136,9 +1139,10 @@ NadeOffhand OFFHAND_NADE; STATIC_INIT(OFFHAND_NADE) { OFFHAND_NADE = NEW(NadeOff
 
 MUTATOR_HOOKFUNCTION(nades, ForbidThrowCurrentWeapon, CBC_ORDER_LAST)
 {
-    SELFPARAM();
-       if (self.offhand != OFFHAND_NADE || (self.weapons & WEPSET(HOOK)) || autocvar_g_nades_override_dropweapon) {
-               nades_CheckThrow();
+    entity player = M_ARGV(0, entity);
+
+       if (player.offhand != OFFHAND_NADE || (player.weapons & WEPSET(HOOK)) || autocvar_g_nades_override_dropweapon) {
+               WITHSELF(player, nades_CheckThrow());
                return true;
        }
        return false;
@@ -1235,28 +1239,30 @@ MUTATOR_HOOKFUNCTION(nades, PlayerPreThink)
 }
 
 MUTATOR_HOOKFUNCTION(nades, PlayerSpawn)
-{SELFPARAM();
+{
+       entity player = M_ARGV(0, entity);
+
        if(autocvar_g_nades_spawn)
-               self.nade_refire = time + autocvar_g_spawnshieldtime;
+               player.nade_refire = time + autocvar_g_spawnshieldtime;
        else
-               self.nade_refire  = time + autocvar_g_nades_nade_refire;
+               player.nade_refire  = time + autocvar_g_nades_nade_refire;
 
        if(autocvar_g_nades_bonus_client_select)
-               self.nade_type = self.cvar_cl_nade_type;
+               player.nade_type = player.cvar_cl_nade_type;
 
-       self.nade_timer = 0;
+       player.nade_timer = 0;
 
-       if (!self.offhand) self.offhand = OFFHAND_NADE;
+       if (!player.offhand) player.offhand = OFFHAND_NADE;
 
-       if(self.nade_spawnloc)
+       if(player.nade_spawnloc)
        {
-               setorigin(self, self.nade_spawnloc.origin);
-               self.nade_spawnloc.cnt -= 1;
+               setorigin(player, player.nade_spawnloc.origin);
+               player.nade_spawnloc.cnt -= 1;
 
-               if(self.nade_spawnloc.cnt <= 0)
+               if(player.nade_spawnloc.cnt <= 0)
                {
-                       remove(self.nade_spawnloc);
-                       self.nade_spawnloc = world;
+                       remove(player.nade_spawnloc);
+                       player.nade_spawnloc = world;
                }
        }
 
@@ -1265,6 +1271,9 @@ MUTATOR_HOOKFUNCTION(nades, PlayerSpawn)
 
 MUTATOR_HOOKFUNCTION(nades, PlayerDies, CBC_ORDER_LAST)
 {
+       entity frag_attacker = M_ARGV(1, entity);
+       entity frag_target = M_ARGV(2, entity);
+
        if(frag_target.nade)
        if(!STAT(FROZEN, frag_target) || !autocvar_g_freezetag_revive_nade)
                toss_nade(frag_target, true, '0 0 100', max(frag_target.nade.wait, time + 0.05));
@@ -1293,17 +1302,14 @@ MUTATOR_HOOKFUNCTION(nades, PlayerDies, CBC_ORDER_LAST)
        }
 
        nades_RemoveBonus(frag_target);
-
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(nades, PlayerDamage_Calculate)
 {
+       entity frag_inflictor = M_ARGV(0, entity);
        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);
-       vector frag_force = M_ARGV(6, vector);
 
        if(STAT(FROZEN, frag_target))
        if(autocvar_g_freezetag_revive_nade)
@@ -1314,13 +1320,10 @@ MUTATOR_HOOKFUNCTION(nades, PlayerDamage_Calculate)
                Unfreeze(frag_target);
                frag_target.health = autocvar_g_freezetag_revive_nade_health;
                Send_Effect(EFFECT_ICEORGLASS, frag_target.origin, '0 0 0', 3);
-               frag_damage = 0;
-               frag_force = '0 0 0';
+               M_ARGV(4, float) = 0;
+               M_ARGV(6, vector) = '0 0 0';
                Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_NADE, frag_target.netname);
                Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_FREEZETAG_REVIVE_SELF);
-
-               M_ARGV(4, float) = frag_damage;
-               M_ARGV(6, vector) = frag_force;
        }
 
        return false;
@@ -1328,6 +1331,9 @@ MUTATOR_HOOKFUNCTION(nades, PlayerDamage_Calculate)
 
 MUTATOR_HOOKFUNCTION(nades, MonsterDies)
 {
+       entity frag_target = M_ARGV(0, entity);
+       entity frag_attacker = M_ARGV(1, entity);
+
        if(IS_PLAYER(frag_attacker))
        if(DIFF_TEAM(frag_attacker, frag_target))
        if(!(frag_target.spawnflags & MONSTERFLAG_SPAWNED))
@@ -1338,33 +1344,42 @@ MUTATOR_HOOKFUNCTION(nades, MonsterDies)
 
 MUTATOR_HOOKFUNCTION(nades, DropSpecialItems)
 {
+       entity frag_target = M_ARGV(0, entity);
+       
        if(frag_target.nade)
                toss_nade(frag_target, true, '0 0 0', time + 0.05);
 
        return false;
 }
 
-bool nades_RemovePlayer()
-{SELFPARAM();
-       nades_Clear(self);
-       nades_RemoveBonus(self);
-       return false;
+void nades_RemovePlayer(entity this)
+{
+       nades_Clear(this);
+       nades_RemoveBonus(this);
 }
 
-MUTATOR_HOOKFUNCTION(nades, MakePlayerObserver) { nades_RemovePlayer(); }
-MUTATOR_HOOKFUNCTION(nades, ClientDisconnect) { nades_RemovePlayer(); }
-MUTATOR_HOOKFUNCTION(nades, reset_map_global) { nades_RemovePlayer(); }
+MUTATOR_HOOKFUNCTION(nades, MakePlayerObserver) { entity player = M_ARGV(0, entity); nades_RemovePlayer(player); }
+MUTATOR_HOOKFUNCTION(nades, ClientDisconnect) { entity player = M_ARGV(0, entity); nades_RemovePlayer(player); }
+MUTATOR_HOOKFUNCTION(nades, reset_map_global)
+{
+       FOREACH_CLIENT(IS_PLAYER(it),
+       {
+               nades_RemovePlayer(it);
+       });
+}
 
 MUTATOR_HOOKFUNCTION(nades, SpectateCopy)
-{SELFPARAM();
-       self.nade_timer = other.nade_timer;
-       self.nade_type = other.nade_type;
-       self.pokenade_type = other.pokenade_type;
-       self.bonus_nades = other.bonus_nades;
-       self.bonus_nade_score = other.bonus_nade_score;
-       self.stat_healing_orb = other.stat_healing_orb;
-       self.stat_healing_orb_alpha = other.stat_healing_orb_alpha;
-       return false;
+{
+       entity spectatee = M_ARGV(0, entity);
+       entity client = M_ARGV(1, entity);
+
+       client.nade_timer = spectatee.nade_timer;
+       client.nade_type = spectatee.nade_type;
+       client.pokenade_type = spectatee.pokenade_type;
+       client.bonus_nades = spectatee.bonus_nades;
+       client.bonus_nade_score = spectatee.bonus_nade_score;
+       client.stat_healing_orb = spectatee.stat_healing_orb;
+       client.stat_healing_orb_alpha = spectatee.stat_healing_orb_alpha;
 }
 
 REPLICATE(cvar_cl_nade_type, int, "cl_nade_type");