]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/nix/nix.qc
Merge branch 'master' into Mario/entrap_nade
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / nix / nix.qc
index a6d42d58e8fc650911d0b80926e515143dfeb5e5..f52d75a9e93c769c195d066279cf85c31593701f 100644 (file)
@@ -43,11 +43,7 @@ REGISTER_MUTATOR(nix, cvar("g_nix") && !cvar("g_instagib") && !cvar("g_overkill"
                nix_nextchange = 0;
                nix_nextweapon = 0;
 
-               for (int i = WEP_FIRST; i <= WEP_LAST; ++i)
-                       if (NIX_CanChooseWeapon(i)) {
-                               Weapon w = Weapons_from(i);
-                               w.wr_init(w);
-                       }
+               FOREACH(Weapons, it != WEP_Null && NIX_CanChooseWeapon(it.m_id), LAMBDA(it.wr_init(it)));
        }
 
        MUTATOR_ONROLLBACK_OR_REMOVE
@@ -58,22 +54,20 @@ REGISTER_MUTATOR(nix, cvar("g_nix") && !cvar("g_instagib") && !cvar("g_overkill"
        MUTATOR_ONREMOVE
        {
                // as the PlayerSpawn hook will no longer run, NIX is turned off by this!
-               entity e;
-               FOR_EACH_PLAYER(e) if(e.deadflag == DEAD_NO)
-               {
-                       e.ammo_cells = start_ammo_cells;
-                       e.ammo_plasma = start_ammo_plasma;
-                       e.ammo_shells = start_ammo_shells;
-                       e.ammo_nails = start_ammo_nails;
-                       e.ammo_rockets = start_ammo_rockets;
-                       e.ammo_fuel = start_ammo_fuel;
-                       e.weapons = start_weapons;
-                       if(!client_hasweapon(e, PS(e).m_weapon, true, false))
-                               PS(e).m_switchweapon = w_getbestweapon(self);
-               }
+               FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), {
+                       it.ammo_cells = start_ammo_cells;
+                       it.ammo_plasma = start_ammo_plasma;
+                       it.ammo_shells = start_ammo_shells;
+                       it.ammo_nails = start_ammo_nails;
+                       it.ammo_rockets = start_ammo_rockets;
+                       it.ammo_fuel = start_ammo_fuel;
+                       it.weapons = start_weapons;
+                       if(!client_hasweapon(it, PS(it).m_weapon, true, false))
+                               PS(it).m_switchweapon = w_getbestweapon(it);
+               });
        }
 
-       return 0;
+       return false;
 }
 
 bool NIX_CanChooseWeapon(int wpn)
@@ -98,16 +92,16 @@ bool NIX_CanChooseWeapon(int wpn)
 }
 void NIX_ChooseNextWeapon()
 {
-       float j;
        RandomSelection_Init();
-       for(j = WEP_FIRST; j <= WEP_LAST; ++j)
-               if(NIX_CanChooseWeapon(j))
-                       RandomSelection_Add(world, j, string_null, 1, (j != nix_weapon));
+       FOREACH(Weapons, it != WEP_Null, LAMBDA(
+               if(NIX_CanChooseWeapon(it.m_id))
+                       RandomSelection_Add(NULL, it.m_id, string_null, 1, (it.m_id != nix_weapon));
+       ));
        nix_nextweapon = RandomSelection_chosen_float;
 }
 
-void NIX_GiveCurrentWeapon()
-{SELFPARAM();
+void NIX_GiveCurrentWeapon(entity this)
+{
        float dt;
 
        if(!nix_nextweapon)
@@ -130,114 +124,114 @@ void NIX_GiveCurrentWeapon()
        // get weapon info
        entity e = Weapons_from(nix_weapon);
 
-       if(nix_nextchange != self.nix_lastchange_id) // this shall only be called once per round!
+       if(nix_nextchange != this.nix_lastchange_id) // this shall only be called once per round!
        {
-               self.ammo_shells = self.ammo_nails = self.ammo_rockets = self.ammo_cells = self.ammo_plasma = self.ammo_fuel = 0;
+               this.ammo_shells = this.ammo_nails = this.ammo_rockets = this.ammo_cells = this.ammo_plasma = this.ammo_fuel = 0;
 
-               if(self.items & IT_UNLIMITED_WEAPON_AMMO)
+               if(this.items & IT_UNLIMITED_WEAPON_AMMO)
                {
                        switch(e.ammo_field)
                        {
-                               case ammo_shells:  self.ammo_shells  = autocvar_g_pickup_shells_max;  break;
-                               case ammo_nails:   self.ammo_nails   = autocvar_g_pickup_nails_max;   break;
-                               case ammo_rockets: self.ammo_rockets = autocvar_g_pickup_rockets_max; break;
-                               case ammo_cells:   self.ammo_cells   = autocvar_g_pickup_cells_max;   break;
-                               case ammo_plasma:  self.ammo_plasma  = autocvar_g_pickup_plasma_max;   break;
-                               case ammo_fuel:    self.ammo_fuel    = autocvar_g_pickup_fuel_max;    break;
+                               case ammo_shells:  this.ammo_shells  = autocvar_g_pickup_shells_max;  break;
+                               case ammo_nails:   this.ammo_nails   = autocvar_g_pickup_nails_max;   break;
+                               case ammo_rockets: this.ammo_rockets = autocvar_g_pickup_rockets_max; break;
+                               case ammo_cells:   this.ammo_cells   = autocvar_g_pickup_cells_max;   break;
+                               case ammo_plasma:  this.ammo_plasma  = autocvar_g_pickup_plasma_max;   break;
+                               case ammo_fuel:    this.ammo_fuel    = autocvar_g_pickup_fuel_max;    break;
                        }
                }
                else
                {
                        switch(e.ammo_field)
                        {
-                               case ammo_shells:  self.ammo_shells  = autocvar_g_balance_nix_ammo_shells;  break;
-                               case ammo_nails:   self.ammo_nails   = autocvar_g_balance_nix_ammo_nails;   break;
-                               case ammo_rockets: self.ammo_rockets = autocvar_g_balance_nix_ammo_rockets; break;
-                               case ammo_cells:   self.ammo_cells   = autocvar_g_balance_nix_ammo_cells;   break;
-                               case ammo_plasma:  self.ammo_plasma  = autocvar_g_balance_nix_ammo_plasma;   break;
-                               case ammo_fuel:    self.ammo_fuel    = autocvar_g_balance_nix_ammo_fuel;    break;
+                               case ammo_shells:  this.ammo_shells  = autocvar_g_balance_nix_ammo_shells;  break;
+                               case ammo_nails:   this.ammo_nails   = autocvar_g_balance_nix_ammo_nails;   break;
+                               case ammo_rockets: this.ammo_rockets = autocvar_g_balance_nix_ammo_rockets; break;
+                               case ammo_cells:   this.ammo_cells   = autocvar_g_balance_nix_ammo_cells;   break;
+                               case ammo_plasma:  this.ammo_plasma  = autocvar_g_balance_nix_ammo_plasma;   break;
+                               case ammo_fuel:    this.ammo_fuel    = autocvar_g_balance_nix_ammo_fuel;    break;
                        }
                }
 
-               self.nix_nextincr = time + autocvar_g_balance_nix_incrtime;
+               this.nix_nextincr = time + autocvar_g_balance_nix_incrtime;
                if(dt >= 1 && dt <= 5)
-                       self.nix_lastinfotime = -42;
+                       this.nix_lastinfotime = -42;
                else
-                       Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_NIX_NEWWEAPON, nix_weapon);
+                       Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_NIX_NEWWEAPON, nix_weapon);
 
-               e.wr_resetplayer(e);
+               e.wr_resetplayer(e, this);
 
                // all weapons must be fully loaded when we spawn
                if(e.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars
-                       self.(weapon_load[nix_weapon]) = e.reloading_ammo;
+                       this.(weapon_load[nix_weapon]) = e.reloading_ammo;
 
                // vortex too
                if(WEP_CVAR(vortex, charge))
                {
                        if(WEP_CVAR_SEC(vortex, chargepool))
-                               self.vortex_chargepool_ammo = 1;
-                       self.vortex_charge = WEP_CVAR(vortex, charge_start);
+                               this.vortex_chargepool_ammo = 1;
+                       this.vortex_charge = WEP_CVAR(vortex, charge_start);
                }
 
                // set last change info
-               self.nix_lastchange_id = nix_nextchange;
+               this.nix_lastchange_id = nix_nextchange;
        }
-       if(self.nix_lastinfotime != dt)
+       if(this.nix_lastinfotime != dt)
        {
-               self.nix_lastinfotime = dt; // initial value 0 should count as "not seen"
+               this.nix_lastinfotime = dt; // initial value 0 should count as "not seen"
                if(dt >= 1 && dt <= 5)
-                       Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_NIX_COUNTDOWN, nix_nextweapon, dt);
+                       Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_NIX_COUNTDOWN, nix_nextweapon, dt);
        }
 
-       if(!(self.items & IT_UNLIMITED_WEAPON_AMMO) && time > self.nix_nextincr)
+       if(!(this.items & IT_UNLIMITED_WEAPON_AMMO) && time > this.nix_nextincr)
        {
                switch(e.ammo_field)
                {
-                       case ammo_shells:  self.ammo_shells  += autocvar_g_balance_nix_ammoincr_shells;  break;
-                       case ammo_nails:   self.ammo_nails   += autocvar_g_balance_nix_ammoincr_nails;   break;
-                       case ammo_rockets: self.ammo_rockets += autocvar_g_balance_nix_ammoincr_rockets; break;
-                       case ammo_cells:   self.ammo_cells   += autocvar_g_balance_nix_ammoincr_cells;   break;
-                       case ammo_plasma:  self.ammo_plasma  += autocvar_g_balance_nix_ammoincr_plasma;   break;
-                       case ammo_fuel:    self.ammo_fuel    += autocvar_g_balance_nix_ammoincr_fuel;    break;
+                       case ammo_shells:  this.ammo_shells  += autocvar_g_balance_nix_ammoincr_shells;  break;
+                       case ammo_nails:   this.ammo_nails   += autocvar_g_balance_nix_ammoincr_nails;   break;
+                       case ammo_rockets: this.ammo_rockets += autocvar_g_balance_nix_ammoincr_rockets; break;
+                       case ammo_cells:   this.ammo_cells   += autocvar_g_balance_nix_ammoincr_cells;   break;
+                       case ammo_plasma:  this.ammo_plasma  += autocvar_g_balance_nix_ammoincr_plasma;   break;
+                       case ammo_fuel:    this.ammo_fuel    += autocvar_g_balance_nix_ammoincr_fuel;    break;
                }
 
-               self.nix_nextincr = time + autocvar_g_balance_nix_incrtime;
+               this.nix_nextincr = time + autocvar_g_balance_nix_incrtime;
        }
 
-       self.weapons = '0 0 0';
+       this.weapons = '0 0 0';
        if(g_nix_with_blaster)
-               self.weapons |= WEPSET(BLASTER);
-       self.weapons |= e.m_wepset;
+               this.weapons |= WEPSET(BLASTER);
+       this.weapons |= e.m_wepset;
 
     Weapon w = Weapons_from(nix_weapon);
-       if(PS(self).m_switchweapon != w)
-               if(!client_hasweapon(self, PS(self).m_switchweapon, true, false))
+       if(PS(this).m_switchweapon != w)
+               if(!client_hasweapon(this, PS(this).m_switchweapon, true, false))
                {
-                       if(client_hasweapon(self, w, true, false))
-                               W_SwitchWeapon(w);
+                       if(client_hasweapon(this, w, true, false))
+                               W_SwitchWeapon(this, w);
                }
 }
 
 MUTATOR_HOOKFUNCTION(nix, ForbidThrowCurrentWeapon)
 {
-       return 1; // no throwing in NIX
+       return true; // no throwing in NIX
 }
 
 MUTATOR_HOOKFUNCTION(nix, BuildMutatorsString)
 {
-       ret_string = strcat(ret_string, ":NIX");
-       return 0;
+       M_ARGV(0, string) = strcat(M_ARGV(0, string), ":NIX");
 }
 
 MUTATOR_HOOKFUNCTION(nix, BuildMutatorsPrettyString)
 {
-       ret_string = strcat(ret_string, ", NIX");
-       return 0;
+       M_ARGV(0, string) = strcat(M_ARGV(0, string), ", NIX");
 }
 
 MUTATOR_HOOKFUNCTION(nix, FilterItem)
-{SELFPARAM();
-       switch (self.items)
+{
+       entity item = M_ARGV(0, entity);
+
+       switch (item.items)
        {
                case ITEM_HealthSmall.m_itemid:
                case ITEM_HealthMedium.m_itemid:
@@ -248,45 +242,47 @@ MUTATOR_HOOKFUNCTION(nix, FilterItem)
                case ITEM_ArmorLarge.m_itemid:
                case ITEM_ArmorMega.m_itemid:
                        if (autocvar_g_nix_with_healtharmor)
-                               return 0;
+                               return false;
                        break;
                case ITEM_Strength.m_itemid:
                case ITEM_Shield.m_itemid:
                        if (autocvar_g_nix_with_powerups)
-                               return 0;
+                               return false;
                        break;
        }
 
-       return 1; // delete all other items
+       return true; // delete all other items
 }
 
 MUTATOR_HOOKFUNCTION(nix, OnEntityPreSpawn)
-{SELFPARAM();
-       if(self.classname == "target_items") // items triggers cannot work in nix (as they change weapons/ammo)
-               return 1;
-       return 0;
+{
+       entity ent = M_ARGV(0, entity);
+
+       if(ent.classname == "target_items") // items triggers cannot work in nix (as they change weapons/ammo)
+               return true;
 }
 
 MUTATOR_HOOKFUNCTION(nix, PlayerPreThink)
-{SELFPARAM();
+{
+       entity player = M_ARGV(0, entity);
+
        if(!intermission_running)
-       if(self.deadflag == DEAD_NO)
-       if(IS_PLAYER(self))
-               NIX_GiveCurrentWeapon();
-       return 0;
+       if(!IS_DEAD(player))
+       if(IS_PLAYER(player))
+               NIX_GiveCurrentWeapon(player);
 }
 
 MUTATOR_HOOKFUNCTION(nix, PlayerSpawn)
-{SELFPARAM();
-       self.nix_lastchange_id = -1;
-       NIX_GiveCurrentWeapon(); // overrides the weapons you got when spawning
-       self.items |= IT_UNLIMITED_SUPERWEAPONS;
-       return 0;
+{
+       entity player = M_ARGV(0, entity);
+
+       player.nix_lastchange_id = -1;
+       NIX_GiveCurrentWeapon(player); // overrides the weapons you got when spawning
+       player.items |= IT_UNLIMITED_SUPERWEAPONS;
 }
 
 MUTATOR_HOOKFUNCTION(nix, SetModname, CBC_ORDER_LAST)
 {
-       modname = "NIX";
-       return 0;
+       M_ARGV(0, string) = "NIX";
 }
 #endif