]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/weapons/throwing.qc
Impulses: migration pathway
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / weapons / throwing.qc
index 676e3f5d57b8d6bba617c9387f05b3834f34a6ed..652ec92005aba884ea26c3955b42644fb33a6726 100644 (file)
@@ -34,13 +34,12 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
 {SELFPARAM();
        float thisammo, i;
        string s;
-       Weapon info = get_weaponinfo(wpn);
+       Weapon info = Weapons_from(wpn);
        var .int ammotype = info.ammo_field;
 
-       entity wep = spawn();
+       entity wep = new(droppedweapon);
 
        setorigin(wep, org);
-       wep.classname = "droppedweapon";
        wep.velocity = velo;
        wep.owner = wep.enemy = own;
        wep.flags |= FL_TOSSED;
@@ -48,7 +47,7 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
 
        W_DropEvent(wr_drop,own,wpn,wep);
 
-       if(WepSet_FromWeapon(wpn) & WEPSET_SUPERWEAPONS)
+       if(WepSet_FromWeapon(Weapons_from(wpn)) & WEPSET_SUPERWEAPONS)
        {
                if(own.items & IT_UNLIMITED_SUPERWEAPONS)
                {
@@ -58,9 +57,10 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
                {
                        float superweapons = 1;
                        for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-                               if(WepSet_FromWeapon(i) & WEPSET_SUPERWEAPONS)
-                                       if(own.weapons & WepSet_FromWeapon(i))
-                                               ++superweapons;
+                       {
+                               WepSet set = WepSet_FromWeapon(Weapons_from(i));
+                               if ((set & WEPSET_SUPERWEAPONS) && (own.weapons & set)) ++superweapons;
+                       }
                        if(superweapons <= 1)
                        {
                                wep.superweapons_finished = own.superweapons_finished;
@@ -148,17 +148,17 @@ bool W_IsWeaponThrowable(bool w)
         return false;
 
        #if 0
-       if(start_weapons & WepSet_FromWeapon(w))
+       if(start_weapons & WepSet_FromWeapon(Weapons_from(w)))
        {
                // start weapons that take no ammo can't be dropped (this prevents dropping the laser, as long as it continues to use no ammo)
                if(start_items & IT_UNLIMITED_WEAPON_AMMO)
                        return false;
-               if((get_weaponinfo(w)).ammo_field == ammo_none)
+               if((Weapons_from(w)).ammo_field == ammo_none)
                        return false;
        }
        return true;
        #else
-       return (get_weaponinfo(w)).weaponthrowable;
+       return (Weapons_from(w)).weaponthrowable;
        #endif
 }
 
@@ -172,15 +172,15 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce)
                return;
        if(!autocvar_g_weapon_throwable)
                return;
-       int slot = 0; // TODO: unhardcode
-       if(self.weaponentity[slot].state != WS_READY)
+       .entity weaponentity = weaponentities[0]; // TODO: unhardcode
+       if(self.(weaponentity).state != WS_READY)
                return;
        if(!W_IsWeaponThrowable(w))
                return;
 
-       if(!(self.weapons & WepSet_FromWeapon(w)))
-               return;
-       self.weapons &= ~WepSet_FromWeapon(w);
+       WepSet set = WepSet_FromWeapon(Weapons_from(w));
+       if(!(self.weapons & set)) return;
+       self.weapons &= ~set;
 
        W_SwitchWeapon_Force(self, w_getbestweapon(self));
        string a = W_ThrowNewWeapon(self, w, doreduce, self.origin + delta, velo);
@@ -191,7 +191,7 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce)
 
 void SpawnThrownWeapon(vector org, float w)
 {SELFPARAM();
-       if(self.weapons & WepSet_FromWeapon(self.weapon))
+       if(self.weapons & WepSet_FromWeapon(Weapons_from(self.weapon)))
                if(W_IsWeaponThrowable(self.weapon))
                        W_ThrowNewWeapon(self, self.weapon, false, org, randomvec() * 125 + '0 0 200');
 }