]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/buffs/buffs.qc
Remove uses of WITHSELF
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / buffs / buffs.qc
index b97124a394abd07466e15279ff701587d208dc13..15aa8eeb13d617e7560858e86db1b5eb75996660 100644 (file)
@@ -98,25 +98,25 @@ bool buffs_BuffModel_Customize(entity this)
        bool same_team;
 
        player = WaypointSprite_getviewentity(other);
-       myowner = self.owner;
+       myowner = this.owner;
        same_team = (SAME_TEAM(player, myowner) || SAME_TEAM(player, myowner));
 
        if(myowner.alpha <= 0.5 && !same_team && myowner.alpha != 0)
                return false;
 
-       if(MUTATOR_CALLHOOK(BuffModel_Customize, self, player))
+       if(MUTATOR_CALLHOOK(BuffModel_Customize, this, player))
                return false;
 
        if(player == myowner || (IS_SPEC(other) && other.enemy == myowner))
        {
                // somewhat hide the model, but keep the glow
-               self.effects = 0;
-               self.alpha = -1;
+               this.effects = 0;
+               this.alpha = -1;
        }
        else
        {
-               self.effects = EF_FULLBRIGHT | EF_LOWPRECISION;
-               self.alpha = 1;
+               this.effects = EF_FULLBRIGHT | EF_LOWPRECISION;
+               this.alpha = 1;
        }
        return true;
 }
@@ -142,13 +142,13 @@ vector buff_GlowColor(entity buff)
 }
 
 void buff_Effect(entity player, string eff)
-{SELFPARAM();
+{
        if(!autocvar_g_buffs_effects) { return; }
 
-       if(time >= self.buff_effect_delay)
+       if(time >= player.buff_effect_delay)
        {
                Send_Effect_(eff, player.origin + ((player.mins + player.maxs) * 0.5), '0 0 0', 1);
-               self.buff_effect_delay = time + 0.05; // prevent spam
+               player.buff_effect_delay = time + 0.05; // prevent spam
        }
 }
 
@@ -228,29 +228,30 @@ void buff_Touch(entity this)
 
        if(ITEM_TOUCH_NEEDKILL())
        {
-               buff_Respawn(self);
+               buff_Respawn(this);
                return;
        }
 
-       if((self.team && DIFF_TEAM(other, self))
+       if((this.team && DIFF_TEAM(other, this))
        || (STAT(FROZEN, other))
        || (other.vehicle)
-       || (!self.buff_active)
+       || (!this.buff_active)
        )
        {
                // can't touch this
                return;
        }
 
-       if(MUTATOR_CALLHOOK(BuffTouch, self, other))
+       if(MUTATOR_CALLHOOK(BuffTouch, this, other))
                return;
+       other = M_ARGV(1, entity);
 
        if(!IS_PLAYER(other))
                return; // incase mutator changed other
 
        if (other.buffs)
        {
-               if (other.cvar_cl_buffs_autoreplace && other.buffs != self.buffs)
+               if (other.cvar_cl_buffs_autoreplace && other.buffs != this.buffs)
                {
                        int buffid = buff_FirstFromFlags(other.buffs).m_id;
                        //Send_Notification(NOTIF_ONE, other, MSG_MULTI, ITEM_BUFF_DROP, other.buffs);
@@ -262,16 +263,16 @@ void buff_Touch(entity this)
                else { return; } // do nothing
        }
 
-       self.owner = other;
-       self.buff_active = false;
-       self.lifetime = 0;
-       int buffid = buff_FirstFromFlags(self.buffs).m_id;
+       this.owner = other;
+       this.buff_active = false;
+       this.lifetime = 0;
+       int buffid = buff_FirstFromFlags(this.buffs).m_id;
        Send_Notification(NOTIF_ONE, other, MSG_MULTI, ITEM_BUFF_GOT, buffid);
        Send_Notification(NOTIF_ALL_EXCEPT, other, MSG_INFO, INFO_ITEM_BUFF, other.netname, buffid);
 
-       Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(self), '0 0 0', 1);
+       Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
        sound(other, CH_TRIGGER, SND_SHIELD_RESPAWN, VOL_BASE, ATTN_NORM);
-       other.buffs |= (self.buffs);
+       other.buffs |= (this.buffs);
 }
 
 float buff_Available(entity buff)
@@ -509,7 +510,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_SplitHealthArmor)
        float frag_deathtype = M_ARGV(6, float);
        float frag_damage = M_ARGV(7, float);
 
-       if(frag_deathtype == DEATH_BUFF.m_id) { return false; }
+       if(frag_deathtype == DEATH_BUFF.m_id) { return; }
 
        if(frag_target.buffs & BUFF_RESISTANCE.m_itemid)
        {
@@ -517,8 +518,6 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_SplitHealthArmor)
                M_ARGV(4, float) = v.x; // take
                M_ARGV(5, float) = v.y; // save
        }
-
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_Calculate)
@@ -529,7 +528,7 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_Calculate)
        float frag_damage = M_ARGV(4, float);
        vector frag_force = M_ARGV(6, vector);
 
-       if(frag_deathtype == DEATH_BUFF.m_id) { return false; }
+       if(frag_deathtype == DEATH_BUFF.m_id) { return; }
 
        if(frag_target.buffs & BUFF_SPEED.m_itemid)
        if(frag_target != frag_attacker)
@@ -620,8 +619,6 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_Calculate)
 
        M_ARGV(4, float) = frag_damage;
        M_ARGV(6, vector) = frag_force;
-
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerSpawn)
@@ -632,7 +629,6 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerSpawn)
        // reset timers here to prevent them continuing after re-spawn
        player.buff_disability_time = 0;
        player.buff_disability_effect_time = 0;
-       return false;
 }
 
 .float stat_sv_maxspeed;
@@ -640,45 +636,45 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerSpawn)
 .float stat_sv_jumpvelocity;
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerPhysics)
-{SELFPARAM();
-       if(self.buffs & BUFF_SPEED.m_itemid)
+{
+       entity player = M_ARGV(0, entity);
+
+       if(player.buffs & BUFF_SPEED.m_itemid)
        {
-               self.stat_sv_maxspeed *= autocvar_g_buffs_speed_speed;
-               self.stat_sv_airspeedlimit_nonqw *= autocvar_g_buffs_speed_speed;
+               player.stat_sv_maxspeed *= autocvar_g_buffs_speed_speed;
+               player.stat_sv_airspeedlimit_nonqw *= autocvar_g_buffs_speed_speed;
        }
 
-       if(time < self.buff_disability_time)
+       if(time < player.buff_disability_time)
        {
-               self.stat_sv_maxspeed *= autocvar_g_buffs_disability_speed;
-               self.stat_sv_airspeedlimit_nonqw *= autocvar_g_buffs_disability_speed;
+               player.stat_sv_maxspeed *= autocvar_g_buffs_disability_speed;
+               player.stat_sv_airspeedlimit_nonqw *= autocvar_g_buffs_disability_speed;
        }
 
-       if(self.buffs & BUFF_JUMP.m_itemid)
+       if(player.buffs & BUFF_JUMP.m_itemid)
        {
                // automatically reset, no need to worry
-               self.stat_sv_jumpvelocity = autocvar_g_buffs_jump_height;
+               player.stat_sv_jumpvelocity = autocvar_g_buffs_jump_height;
        }
-
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerJump)
-{SELFPARAM();
-       if(self.buffs & BUFF_JUMP.m_itemid)
-               player_jumpheight = autocvar_g_buffs_jump_height;
+{
+       entity player = M_ARGV(0, entity);
 
-       return false;
+       if(player.buffs & BUFF_JUMP.m_itemid)
+               M_ARGV(1, float) = autocvar_g_buffs_jump_height;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, MonsterMove)
-{SELFPARAM();
-       if(time < self.buff_disability_time)
+{
+       entity mon = M_ARGV(0, entity);
+
+       if(time < mon.buff_disability_time)
        {
-               monster_speed_walk *= autocvar_g_buffs_disability_speed;
-               monster_speed_run *= autocvar_g_buffs_disability_speed;
+               M_ARGV(1, float) *= autocvar_g_buffs_disability_speed; // run speed
+               M_ARGV(2, float) *= autocvar_g_buffs_disability_speed; // walk speed
        }
-
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerDies)
@@ -697,28 +693,29 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDies)
                        frag_target.buff_model = world;
                }
        }
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerUseKey, CBC_ORDER_FIRST)
-{SELFPARAM();
-       if(MUTATOR_RETURNVALUE || gameover) { return false; }
-       if(self.buffs)
+{
+       if(MUTATOR_RETURNVALUE || gameover) { return; }
+
+       entity player = M_ARGV(0, entity);
+
+       if(player.buffs)
        {
-               int buffid = buff_FirstFromFlags(self.buffs).m_id;
-               Send_Notification(NOTIF_ONE, self, MSG_MULTI, ITEM_BUFF_DROP, buffid);
-               Send_Notification(NOTIF_ALL_EXCEPT, self, MSG_INFO, INFO_ITEM_BUFF_LOST, self.netname, buffid);
+               int buffid = buff_FirstFromFlags(player.buffs).m_id;
+               Send_Notification(NOTIF_ONE, player, MSG_MULTI, ITEM_BUFF_DROP, buffid);
+               Send_Notification(NOTIF_ALL_EXCEPT, player, MSG_INFO, INFO_ITEM_BUFF_LOST, player.netname, buffid);
 
-               self.buffs = 0;
-               sound(self, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
+               player.buffs = 0;
+               sound(player, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
                return true;
        }
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, ForbidThrowCurrentWeapon)
 {
-       if(MUTATOR_RETURNVALUE || gameover) { return false; }
+       if(MUTATOR_RETURNVALUE || gameover) { return; }
        entity player = M_ARGV(0, entity);
 
        if(player.buffs & BUFF_SWAPPER.m_itemid)
@@ -783,7 +780,6 @@ MUTATOR_HOOKFUNCTION(buffs, ForbidThrowCurrentWeapon)
                        return true;
                }
        }
-       return false;
 }
 
 bool buffs_RemovePlayer(entity player)
@@ -815,8 +811,6 @@ MUTATOR_HOOKFUNCTION(buffs, CustomizeWaypoint)
        if((wp.owner.flags & FL_CLIENT) && (wp.owner.buffs & BUFF_INVISIBLE.m_itemid) && (e == player))
        if(DIFF_TEAM(wp.owner, e))
                return true;
-
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, OnEntityPreSpawn, CBC_ORDER_LAST)
@@ -834,7 +828,6 @@ MUTATOR_HOOKFUNCTION(buffs, OnEntityPreSpawn, CBC_ORDER_LAST)
                        return true;
                }
        }
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, WeaponRateFactor)
@@ -860,14 +853,16 @@ MUTATOR_HOOKFUNCTION(buffs, WeaponSpeedFactor)
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink)
-{SELFPARAM();
-       if(gameover || IS_DEAD(self)) { return false; }
+{
+       entity player = M_ARGV(0, entity);
 
-       if(time < self.buff_disability_time)
-       if(time >= self.buff_disability_effect_time)
+       if(gameover || IS_DEAD(player)) { return; }
+
+       if(time < player.buff_disability_time)
+       if(time >= player.buff_disability_effect_time)
        {
-               Send_Effect(EFFECT_SMOKING, self.origin + ((self.mins + self.maxs) * 0.5), '0 0 0', 1);
-               self.buff_disability_effect_time = time + 0.5;
+               Send_Effect(EFFECT_SMOKING, player.origin + ((player.mins + player.maxs) * 0.5), '0 0 0', 1);
+               player.buff_disability_effect_time = time + 0.5;
        }
 
        // handle buff lost status
@@ -875,28 +870,28 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink)
        // 2: notify carrier as well
        int buff_lost = 0;
 
-       if(self.buff_time)
-       if(time >= self.buff_time)
+       if(player.buff_time)
+       if(time >= player.buff_time)
                buff_lost = 2;
 
-       if(STAT(FROZEN, self)) { buff_lost = 1; }
+       if(STAT(FROZEN, player)) { buff_lost = 1; }
 
        if(buff_lost)
        {
-               if(self.buffs)
+               if(player.buffs)
                {
-                       int buffid = buff_FirstFromFlags(self.buffs).m_id;
-                       Send_Notification(NOTIF_ALL_EXCEPT, self, MSG_INFO, INFO_ITEM_BUFF_LOST, self.netname, buffid);
+                       int buffid = buff_FirstFromFlags(player.buffs).m_id;
+                       Send_Notification(NOTIF_ALL_EXCEPT, player, MSG_INFO, INFO_ITEM_BUFF_LOST, player.netname, buffid);
                        if(buff_lost >= 2)
                        {
-                               Send_Notification(NOTIF_ONE, self, MSG_MULTI, ITEM_BUFF_DROP, buffid); // TODO: special timeout message?
-                               sound(self, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
+                               Send_Notification(NOTIF_ONE, player, MSG_MULTI, ITEM_BUFF_DROP, buffid); // TODO: special timeout message?
+                               sound(player, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
                        }
-                       self.buffs = 0;
+                       player.buffs = 0;
                }
        }
 
-       if(self.buffs & BUFF_MAGNET.m_itemid)
+       if(player.buffs & BUFF_MAGNET.m_itemid)
        {
                vector pickup_size;
                FOREACH_ENTITY_FLAGS(flags, FL_ITEM,
@@ -906,109 +901,108 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink)
                        else
                                pickup_size = '1 1 1' * autocvar_g_buffs_magnet_range_item;
 
-                       if(boxesoverlap(self.absmin - pickup_size, self.absmax + pickup_size, it.absmin, it.absmax))
+                       if(boxesoverlap(player.absmin - pickup_size, player.absmax + pickup_size, it.absmin, it.absmax))
                        {
                                if(gettouch(it))
                                {
                                        entity oldother = other;
-                                       other = self;
-                                       WITHSELF(it, gettouch(it)(it));
+                                       other = player;
+                                       gettouch(it)(it);
                                        other = oldother;
                                }
                        }
                });
        }
 
-       if(self.buffs & BUFF_AMMO.m_itemid)
-       if(self.clip_size)
-               self.clip_load = self.(weapon_load[PS(self).m_switchweapon.m_id]) = self.clip_size;
+       if(player.buffs & BUFF_AMMO.m_itemid)
+       if(player.clip_size)
+               player.clip_load = player.(weapon_load[PS(player).m_switchweapon.m_id]) = player.clip_size;
 
-       if((self.buffs & BUFF_INVISIBLE.m_itemid) && (self.oldbuffs & BUFF_INVISIBLE.m_itemid))
-       if(self.alpha != autocvar_g_buffs_invisible_alpha)
-               self.alpha = autocvar_g_buffs_invisible_alpha; // powerups reset alpha, so we must enforce this (TODO)
+       if((player.buffs & BUFF_INVISIBLE.m_itemid) && (player.oldbuffs & BUFF_INVISIBLE.m_itemid))
+       if(player.alpha != autocvar_g_buffs_invisible_alpha)
+               player.alpha = autocvar_g_buffs_invisible_alpha; // powerups reset alpha, so we must enforce this (TODO)
 
-       if(self.buffs & BUFF_MEDIC.m_itemid)
-       if(time >= self.buff_medic_healtime)
+       if(player.buffs & BUFF_MEDIC.m_itemid)
+       if(time >= player.buff_medic_healtime)
        {
-               buff_Medic_Heal(self);
-               self.buff_medic_healtime = time + autocvar_g_buffs_medic_heal_delay;
+               buff_Medic_Heal(player);
+               player.buff_medic_healtime = time + autocvar_g_buffs_medic_heal_delay;
        }
 
-#define BUFF_ONADD(b) if ( (self.buffs & (b).m_itemid) && !(self.oldbuffs & (b).m_itemid))
-#define BUFF_ONREM(b) if (!(self.buffs & (b).m_itemid) &&  (self.oldbuffs & (b).m_itemid))
+#define BUFF_ONADD(b) if ( (player.buffs & (b).m_itemid) && !(player.oldbuffs & (b).m_itemid))
+#define BUFF_ONREM(b) if (!(player.buffs & (b).m_itemid) &&  (player.oldbuffs & (b).m_itemid))
 
-       if(self.buffs != self.oldbuffs)
+       if(player.buffs != player.oldbuffs)
        {
-               entity buff = buff_FirstFromFlags(self.buffs);
+               entity buff = buff_FirstFromFlags(player.buffs);
                float bufftime = buff != BUFF_Null ? buff.m_time(buff) : 0;
-               self.buff_time = (bufftime) ? time + bufftime : 0;
+               player.buff_time = (bufftime) ? time + bufftime : 0;
 
                BUFF_ONADD(BUFF_AMMO)
                {
-                       self.buff_ammo_prev_infitems = (self.items & IT_UNLIMITED_WEAPON_AMMO);
-                       self.items |= IT_UNLIMITED_WEAPON_AMMO;
+                       player.buff_ammo_prev_infitems = (player.items & IT_UNLIMITED_WEAPON_AMMO);
+                       player.items |= IT_UNLIMITED_WEAPON_AMMO;
 
-                       if(self.clip_load)
-                               self.buff_ammo_prev_clipload = self.clip_load;
-                       self.clip_load = self.(weapon_load[PS(self).m_switchweapon.m_id]) = self.clip_size;
+                       if(player.clip_load)
+                               player.buff_ammo_prev_clipload = player.clip_load;
+                       player.clip_load = player.(weapon_load[PS(player).m_switchweapon.m_id]) = player.clip_size;
                }
 
                BUFF_ONREM(BUFF_AMMO)
                {
-                       if(self.buff_ammo_prev_infitems)
-                               self.items |= IT_UNLIMITED_WEAPON_AMMO;
+                       if(player.buff_ammo_prev_infitems)
+                               player.items |= IT_UNLIMITED_WEAPON_AMMO;
                        else
-                               self.items &= ~IT_UNLIMITED_WEAPON_AMMO;
+                               player.items &= ~IT_UNLIMITED_WEAPON_AMMO;
 
-                       if(self.buff_ammo_prev_clipload)
-                               self.clip_load = self.buff_ammo_prev_clipload;
+                       if(player.buff_ammo_prev_clipload)
+                               player.clip_load = player.buff_ammo_prev_clipload;
                }
 
                BUFF_ONADD(BUFF_INVISIBLE)
                {
-                       if(time < self.strength_finished && g_instagib)
-                               self.alpha = autocvar_g_instagib_invis_alpha;
+                       if(time < player.strength_finished && g_instagib)
+                               player.alpha = autocvar_g_instagib_invis_alpha;
                        else
-                               self.alpha = self.buff_invisible_prev_alpha;
-                       self.alpha = autocvar_g_buffs_invisible_alpha;
+                               player.alpha = player.buff_invisible_prev_alpha;
+                       player.alpha = autocvar_g_buffs_invisible_alpha;
                }
 
                BUFF_ONREM(BUFF_INVISIBLE)
-                       self.alpha = self.buff_invisible_prev_alpha;
+                       player.alpha = player.buff_invisible_prev_alpha;
 
-               self.oldbuffs = self.buffs;
-               if(self.buffs)
+               player.oldbuffs = player.buffs;
+               if(player.buffs)
                {
-                       if(!self.buff_model)
-                               buffs_BuffModel_Spawn(self);
+                       if(!player.buff_model)
+                               buffs_BuffModel_Spawn(player);
 
-                       self.buff_model.color = buff.m_color;
-                       self.buff_model.glowmod = buff_GlowColor(self.buff_model);
-                       self.buff_model.skin = buff.m_skin;
+                       player.buff_model.color = buff.m_color;
+                       player.buff_model.glowmod = buff_GlowColor(player.buff_model);
+                       player.buff_model.skin = buff.m_skin;
 
-                       self.effects |= EF_NOSHADOW;
+                       player.effects |= EF_NOSHADOW;
                }
                else
                {
-                       remove(self.buff_model);
-                       self.buff_model = world;
+                       remove(player.buff_model);
+                       player.buff_model = world;
 
-                       self.effects &= ~(EF_NOSHADOW);
+                       player.effects &= ~(EF_NOSHADOW);
                }
        }
 
-       if(self.buff_model)
+       if(player.buff_model)
        {
-               self.buff_model.effects = self.effects;
-               self.buff_model.effects |= EF_LOWPRECISION;
-               self.buff_model.effects = self.buff_model.effects & EFMASK_CHEAP; // eat performance
+               player.buff_model.effects = player.effects;
+               player.buff_model.effects |= EF_LOWPRECISION;
+               player.buff_model.effects = player.buff_model.effects & EFMASK_CHEAP; // eat performance
 
-               self.buff_model.alpha = self.alpha;
+               player.buff_model.alpha = player.alpha;
        }
 
 #undef BUFF_ONADD
 #undef BUFF_ONREM
-       return false;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, SpectateCopy)
@@ -1021,49 +1015,51 @@ MUTATOR_HOOKFUNCTION(buffs, SpectateCopy)
 
 MUTATOR_HOOKFUNCTION(buffs, VehicleEnter)
 {
-       vh_vehicle.buffs = vh_player.buffs;
-       vh_player.buffs = 0;
-       vh_vehicle.buff_time = max(0, vh_player.buff_time - time);
-       vh_player.buff_time = 0;
-       return false;
+       entity player = M_ARGV(0, entity);
+       entity veh = M_ARGV(1, entity);
+
+       veh.buffs = player.buffs;
+       player.buffs = 0;
+       veh.buff_time = max(0, player.buff_time - time);
+       player.buff_time = 0;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, VehicleExit)
 {
-       vh_player.buffs = vh_player.oldbuffs = vh_vehicle.buffs;
-       vh_vehicle.buffs = 0;
-       vh_player.buff_time = time + vh_vehicle.buff_time;
-       vh_vehicle.buff_time = 0;
-       return false;
+       entity player = M_ARGV(0, entity);
+       entity veh = M_ARGV(1, entity);
+
+       player.buffs = player.oldbuffs = veh.buffs;
+       veh.buffs = 0;
+       player.buff_time = time + veh.buff_time;
+       veh.buff_time = 0;
 }
 
 MUTATOR_HOOKFUNCTION(buffs, PlayerRegen)
-{SELFPARAM();
-       if(self.buffs & BUFF_MEDIC.m_itemid)
+{
+       entity player = M_ARGV(0, entity);
+
+       if(player.buffs & BUFF_MEDIC.m_itemid)
        {
-               regen_mod_rot = autocvar_g_buffs_medic_rot;
-               regen_mod_limit = regen_mod_max = autocvar_g_buffs_medic_max;
-               regen_mod_regen = autocvar_g_buffs_medic_regen;
+               M_ARGV(2, float) = autocvar_g_buffs_medic_rot; // rot_mod
+               M_ARGV(4, float) = M_ARGV(1, float) = autocvar_g_buffs_medic_max; // limit_mod = max_mod
+               M_ARGV(2, float) = autocvar_g_buffs_medic_regen; // regen_mod
        }
 
-       if(self.buffs & BUFF_SPEED.m_itemid)
-               regen_mod_regen = autocvar_g_buffs_speed_regen;
-
-       return false;
+       if(player.buffs & BUFF_SPEED.m_itemid)
+               M_ARGV(2, float) = autocvar_g_buffs_speed_regen; // regen_mod
 }
 
 REPLICATE(cvar_cl_buffs_autoreplace, bool, "cl_buffs_autoreplace");
 
 MUTATOR_HOOKFUNCTION(buffs, BuildMutatorsString)
 {
-       ret_string = strcat(ret_string, ":Buffs");
-       return false;
+       M_ARGV(0, string) = strcat(M_ARGV(0, string), ":Buffs");
 }
 
 MUTATOR_HOOKFUNCTION(buffs, BuildMutatorsPrettyString)
 {
-       ret_string = strcat(ret_string, ", Buffs");
-       return false;
+       M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Buffs");
 }
 
 void buffs_DelayedInit(entity this)