]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
more proper use of weapon sets
authorRudolf Polzer <divverent@alientrap.org>
Sun, 4 Mar 2012 15:08:44 +0000 (16:08 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Sun, 4 Mar 2012 15:08:44 +0000 (16:08 +0100)
qcsrc/common/items.qh
qcsrc/server/bot/havocbot/havocbot.qc
qcsrc/server/bot/havocbot/role_onslaught.qc
qcsrc/server/bot/havocbot/roles.qc
qcsrc/server/cheats.qc
qcsrc/server/cl_client.qc

index 2256e4d0e4818bd14eae857c1de8524548958d72..1cae4d133d918788dbfd3d2ecd4c6bbad4205eb3 100644 (file)
@@ -90,43 +90,63 @@ void register_weapon(float id, float(float) func, float ammotype, float i, float
 void register_weapons_done();
 
 #if 1
-# define WEPBITS_CLEAR_E(e) ((e).weapons = 0)
-# define WEPBITS_CLEAR_A(a) ((a) = 0)
-
-# define WEPBITS_COPY_EE(e,e2) ((e).weapons = (e2).weapons)
-# define WEPBITS_EQ_EE(e,e2) ((e).weapons == (e2).weapons)
-# define WEPBITS_OR_EE(e,e2) ((e).weapons |= (e2).weapons)
-# define WEPBITS_AND_EE(e,e2) ((e).weapons &= (e2).weapons)
-# define WEPBITS_ANDNOT_EE(e,e2) ((e).weapons &~= (e2).weapons)
-# define WEPBITS_TEST_EE(e,e2) ((e).weapons & (e2).weapons)
-
-# define WEPBITS_COPY_EA(e,a) ((e).weapons = (a))
-# define WEPBITS_EQ_EA(e,a) ((e).weapons == (a))
-# define WEPBITS_OR_EA(e,a) ((e).weapons |= (a))
-# define WEPBITS_AND_EA(e,a) ((e).weapons &= (a))
-# define WEPBITS_ANDNOT_EA(e,a) ((e).weapons &~= (a))
-# define WEPBITS_TEST_EA(e,a) ((e).weapons & (a))
-
-# define WEPBITS_COPY_AA(a,a2) ((a) = (a2))
-# define WEPBITS_EQ_AA(a,a2) ((a) == (a2))
-# define WEPBITS_OR_AA(a,a2) ((a) |= (a2))
-# define WEPBITS_AND_AA(a,a2) ((a) &= (a2))
-# define WEPBITS_ANDNOT_AA(a,a2) ((a) &~= (a2))
-# define WEPBITS_TEST_AA(a,a2) ((a) & (a2))
-
-# define WEPBITS_COPY_EW(e,w) ((e).weapons = power2of((w) - WEP_FIRST))
-# define WEPBITS_EQ_EW(e,w) ((e).weapons == power2of((w) - WEP_FIRST))
-# define WEPBITS_OR_EW(e,w) ((e).weapons |= power2of((w) - WEP_FIRST))
-# define WEPBITS_AND_EW(e,w) ((e).weapons &= power2of((w) - WEP_FIRST))
-# define WEPBITS_ANDNOT_EW(e,w) ((e).weapons &~= power2of((w) - WEP_FIRST))
-# define WEPBITS_TEST_EW(e,w) ((e).weapons & power2of((w) - WEP_FIRST))
-
-# define WEPBITS_COPY_AW(a,w) ((a) = power2of((w) - WEP_FIRST))
-# define WEPBITS_EQ_AW(a,w) ((a) == power2of((w) - WEP_FIRST))
-# define WEPBITS_OR_AW(a,w) ((a) |= power2of((w) - WEP_FIRST))
-# define WEPBITS_AND_AW(a,w) ((a) &= power2of((w) - WEP_FIRST))
-# define WEPBITS_ANDNOT_AW(a,w) ((a) &~= power2of((w) - WEP_FIRST))
-# define WEPBITS_TEST_AW(a,w) ((a) & power2of((w) - WEP_FIRST))
+# define WEPSET_CLEAR_E(e) ((e).weapons = 0)
+# define WEPSET_CLEAR_A(a) ((a) = 0)
+
+# define WEPSET_EMPTY_E(e) ((e).weapons == 0)
+# define WEPSET_EMPTY_A(a) ((a) == 0)
+
+# define WEPSET_COPY_EE(e,o) ((e).weapons = (o).weapons)
+# define WEPSET_EQ_EE(e,o) ((e).weapons == (o).weapons)
+# define WEPSET_OR_EE(e,o) ((e).weapons |= (o).weapons)
+# define WEPSET_AND_EE(e,o) ((e).weapons &= (o).weapons)
+# define WEPSET_ANDNOT_EE(e,o) ((e).weapons &~= (o).weapons)
+# define WEPSET_TEST_EE(e,o) ((e).weapons & (o).weapons)
+# define WEPSET_CONTAINS_EE(e,o) (((e).weapons & (o).weapons) == (e).weapons)
+
+# define WEPSET_COPY_EA(e,a) ((e).weapons = (a))
+# define WEPSET_EQ_EA(e,a) ((e).weapons == (a))
+# define WEPSET_OR_EA(e,a) ((e).weapons |= (a))
+# define WEPSET_AND_EA(e,a) ((e).weapons &= (a))
+# define WEPSET_ANDNOT_EA(e,a) ((e).weapons &~= (a))
+# define WEPSET_TEST_EA(e,a) ((e).weapons & (a))
+# define WEPSET_CONTAINS_EA(e,a) (((e).weapons & (a)) == (a))
+
+# define WEPSET_COPY_EW(e,w) ((e).weapons = power2of((w) - WEP_FIRST))
+# define WEPSET_EQ_EW(e,w) ((e).weapons == power2of((w) - WEP_FIRST))
+# define WEPSET_OR_EW(e,w) ((e).weapons |= power2of((w) - WEP_FIRST))
+# define WEPSET_AND_EW(e,w) ((e).weapons &= power2of((w) - WEP_FIRST))
+# define WEPSET_ANDNOT_EW(e,w) ((e).weapons &~= power2of((w) - WEP_FIRST))
+// no TEST necessary here, CONTAINS does the same
+# define WEPSET_TEST_EW(e,w) ((e).weapons & power2of((w) - WEP_FIRST))
+
+# define WEPSET_COPY_AE(a,e) ((a) = (e).weapons)
+# define WEPSET_EQ_AE(a,e) ((a) == (e).weapons)
+# define WEPSET_OR_AE(a,e) ((a) |= (e).weapons)
+# define WEPSET_AND_AE(a,e) ((a) &= (e).weapons)
+# define WEPSET_ANDNOT_AE(a,e) ((a) &~= (e).weapons)
+# define WEPSET_TEST_AE(a,e) ((a) & (e).weapons)
+# define WEPSET_CONTAINS_AE(a,e) (((a) & (e).weapons) == (e))
+
+# define WEPSET_COPY_AA(a,b) ((a) = (b))
+# define WEPSET_EQ_AA(a,b) ((a) == (b))
+# define WEPSET_OR_AA(a,b) ((a) |= (b))
+# define WEPSET_AND_AA(a,b) ((a) &= (b))
+# define WEPSET_ANDNOT_AA(a,b) ((a) &~= (b))
+# define WEPSET_TEST_AA(a,b) ((a) & (b))
+# define WEPSET_CONTAINS_AA(a,b) (((a) & (b)) == (b))
+
+# define WEPSET_COPY_AW(a,w) ((a) = power2of((w) - WEP_FIRST))
+# define WEPSET_EQ_AW(a,w) ((a) == power2of((w) - WEP_FIRST))
+# define WEPSET_OR_AW(a,w) ((a) |= power2of((w) - WEP_FIRST))
+# define WEPSET_AND_AW(a,w) ((a) &= power2of((w) - WEP_FIRST))
+# define WEPSET_ANDNOT_AW(a,w) ((a) &~= power2of((w) - WEP_FIRST))
+// no TEST necessary here, CONTAINS does the same
+# define WEPSET_CONTAINS_AW(a,w) ((a) & power2of((w) - WEP_FIRST))
+
+# ifdef CSQC
+#  define WEPSET_COPY_AS(a) ((a) = getstatf(STAT_WEAPONS))
+# endif
 #endif
 
 float WEP_COUNT;
@@ -143,9 +163,9 @@ float WEPBIT_SUPERWEAPONS;
        void RegisterWeapons_##id() \
        { \
                WEP_LAST = (id = WEP_FIRST + WEP_COUNT); \
-               WEPBITS_OR_AW(WEPBIT_ALL, id); \
+               WEPSET_OR_AW(WEPBIT_ALL, id); \
                if(fabs(weapontype & WEP_FLAG_SUPERWEAPON)) \
-                       WEPBITS_OR_AW(WEPBIT_SUPERWEAPONS, id); \
+                       WEPSET_OR_AW(WEPBIT_SUPERWEAPONS, id); \
                ++WEP_COUNT; \
                register_weapon(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \
        } \
index 3aefc45a75323b45782bea68f59dacc6b986e490..42b829ffd401213e1b0c2cbad0a78c8e2f8fcc27 100644 (file)
@@ -94,7 +94,7 @@ void havocbot_ai()
                self.aistatus |= AI_STATUS_ATTACKING;
                self.aistatus &~= AI_STATUS_ROAMING;
 
-               if(self.weapons)
+               if(!WEPSET_EMPTY_E(self))
                {
                        weapon_action(self.weapon, WR_AIM);
                        if (autocvar_bot_nofire || IS_INDEPENDENT_PLAYER(self))
@@ -168,7 +168,7 @@ void havocbot_ai()
                        for(i = WEP_FIRST; i <= WEP_LAST; ++i)
                        {
                                e = get_weaponinfo(i);
-                               if ((self.weapons & W_WeaponBit(i)) && (e.spawnflags & WEP_FLAG_RELOADABLE) && (self.weapon_load[i] < cvar(strcat("g_balance_", e.netname, "_reload_ammo"))))
+                               if (WEPSET_TEST_EE(self, e) && (e.spawnflags & WEP_FLAG_RELOADABLE) && (self.weapon_load[i] < cvar(strcat("g_balance_", e.netname, "_reload_ammo"))))
                                        self.switchweapon = i;
                        }
                }
@@ -930,7 +930,7 @@ void havocbot_chooseenemy()
 
                // I want to do a second scan if no enemy was found or I don't have weapons
                // TODO: Perform the scan when using the rifle (requires changes on the rifle code)
-               if(best || self.weapons) // || self.weapon == WEP_RIFLE
+               if(best || !WEPSET_EMPTY_E(self)) // || self.weapon == WEP_RIFLE
                        break;
                if(i)
                        break;
@@ -979,7 +979,7 @@ void havocbot_chooseweapon()
        float i;
 
        // ;)
-       if(g_weaponarena == WEPBIT_TUBA)
+       if(WEPSET_EQ_AW(g_weaponarena, WEP_TUBA))
        {
                self.switchweapon = WEP_TUBA;
                return;
index 3ae7379be757278c00478a55b39854b410027096..f37f821f118e595a1aae8088c2112f40bf0957f3 100644 (file)
@@ -38,7 +38,7 @@ void havocbot_goalrating_ons_offenseitems(float ratingscale, vector org, float s
        for(i = WEP_FIRST; i <= WEP_LAST ; ++i)
        {
                // Find weapon
-               if(power2of(i-1) & self.weapons)
+               if(WEPSET_TEST_EW(self, i))
                if(++c>=4)
                        break;
        }
@@ -58,7 +58,7 @@ void havocbot_goalrating_ons_offenseitems(float ratingscale, vector org, float s
        {
                // gather health and armor only
                if (head.solid)
-               if ( ((head.health || head.armorvalue) && needarmor) || (head.weapons && needweapons ) )
+               if ( ((head.health || head.armorvalue) && needarmor) || (!WEPSET_EMPTY_E(head) && needweapons ) )
                if (vlen(head.origin - org) < sradius)
                {
                        t = head.bot_pickupevalfunc(self, head);
index 91eb2ec1a5afbce4132a566baa3c2d115f480edc..d9cddacbd2ed4b9907ec236f074f344b01128160 100644 (file)
@@ -85,8 +85,8 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius)
                                        if( head.armorvalue && player.armorvalue > self.armorvalue)
                                                continue;
 
-                                       if( head.weapons )
-                                       if( (player.weapons & head.weapons) != head.weapons)
+                                       if( !WEPSET_EMPTY_E(head) )
+                                       if( !WEPSET_CONTAINS_EE(player, head) )
                                                continue;
 
                                        if (head.ammo_shells && player.ammo_shells > self.ammo_shells)
index 5ba860940a014344a3338f27551448ddbce0ad31..19ee93868a59f04b69c5dd061a80a79e7e668ca9 100644 (file)
@@ -145,7 +145,7 @@ float CheatImpulse(float i)
                        self.personal.ammo_fuel = self.ammo_fuel;
                        self.personal.health = self.health;
                        self.personal.armorvalue = self.armorvalue;
-                       self.personal.weapons = self.weapons;
+                       WEPSET_COPY_EE(self.personal, self);
                        self.personal.items = self.items;
                        self.personal.pauserotarmor_finished = self.pauserotarmor_finished;
                        self.personal.pauserothealth_finished = self.pauserothealth_finished;
@@ -206,7 +206,7 @@ float CheatImpulse(float i)
                                        self.ammo_fuel = 999;
                                        self.health = start_health;
                                        self.armorvalue = start_armorvalue;
-                                       self.weapons |= weaponsInMap;
+                                       WEPSET_OR_EA(self.personal, weaponsInMap);
                                        self.pauserotarmor_finished = time + autocvar_g_balance_pause_armor_rot_spawn;
                                        self.pauserothealth_finished = time + autocvar_g_balance_pause_health_rot_spawn;
                                        self.pauserotfuel_finished = time + autocvar_g_balance_pause_fuel_rot_spawn;
@@ -223,7 +223,7 @@ float CheatImpulse(float i)
                                        self.ammo_fuel = self.personal.ammo_fuel;
                                        self.health = self.personal.health;
                                        self.armorvalue = self.personal.armorvalue;
-                                       self.weapons = self.personal.weapons;
+                                       WEPSET_COPY_EE(self, self.personal);
                                        self.items = self.personal.items;
                                        self.pauserotarmor_finished = time + self.personal.pauserotarmor_finished - self.personal.teleport_time;
                                        self.pauserothealth_finished = time + self.personal.pauserothealth_finished - self.personal.teleport_time;
index c213f7adbde7a74c315df885526899b3e11438c8..bf4a25950f49749cc2510ff1eebe87bd065c3272 100644 (file)
@@ -485,7 +485,7 @@ void PutObserverInServer (void)
        setorigin (self, (spot.origin + PL_VIEW_OFS)); // offset it so that the spectator spawns higher off the ground, looks better this way
        self.prevorigin = self.origin;
        self.items = 0;
-       self.weapons = 0;
+       WEPSET_CLEAR_E(self);
        self.model = "";
        FixPlayermodel();
        setmodel(self, "null");
@@ -735,7 +735,7 @@ void PutClientInServer (void)
                        self.ammo_fuel = warmup_start_ammo_fuel;
                        self.health = warmup_start_health;
                        self.armorvalue = warmup_start_armorvalue;
-                       self.weapons = warmup_start_weapons;
+                       WEPSET_COPY_EA(self, warmup_start_weapons);
                }
                else
                {
@@ -746,10 +746,10 @@ void PutClientInServer (void)
                        self.ammo_fuel = start_ammo_fuel;
                        self.health = start_health;
                        self.armorvalue = start_armorvalue;
-                       self.weapons = start_weapons;
+                       WEPSET_COPY_EA(self, start_weapons);
                }
 
-               if(WEPBITS_TEST_EA(self, WEPBIT_SUPERWEAPONS)) // exception for minstagib, as minstanex is a superweapon
+               if(WEPSET_TEST_EA(self, WEPBIT_SUPERWEAPONS)) // exception for minstagib, as minstanex is a superweapon
                        self.superweapons_finished = time + autocvar_g_balance_superweapons_time;
                else
                        self.superweapons_finished = 0;
@@ -757,10 +757,10 @@ void PutClientInServer (void)
                if(g_weaponarena_random)
                {
                        if(g_weaponarena_random_with_laser)
-                               WEPBITS_ANDNOT_EW(self, WEPBIT_LASER);
+                               WEPSET_ANDNOT_EW(self, WEPBIT_LASER);
                        self.weapons = randombits(self.weapons, g_weaponarena_random, FALSE);
                        if(g_weaponarena_random_with_laser)
-                               WEPBITS_OR_EW(self, WEPBIT_LASER);
+                               WEPSET_OR_EW(self, WEPBIT_LASER);
                }
 
                self.items = start_items;
@@ -1532,7 +1532,7 @@ void ClientConnect (void)
 
        if(clienttype(self) == CLIENTTYPE_REAL)
        {
-               if(autocvar_g_bugrigs || g_weaponarena == WEPBIT_TUBA)
+               if(autocvar_g_bugrigs || WEPSET_EQ_AW(g_weaponarena, WEP_TUBA))
                        stuffcmd(self, "cl_cmd settemp chase_active 1\n");
        }
 
@@ -1895,9 +1895,7 @@ void player_powerups (void)
                }
                if (self.items & IT_SUPERWEAPON)
                {
-                       //if(W_WeaponBit(self.weapon) & WEPBIT_SUPERWEAPONS)
-                       //      self.effects = self.effects | EF_RED;
-                       if (!(self.weapons & WEPBIT_SUPERWEAPONS))
+                       if (!WEPSET_TEST_EA(self, WEPBIT_SUPERWEAPONS))
                        {
                                self.superweapons_finished = 0;
                                self.items = self.items - (self.items & IT_SUPERWEAPON);
@@ -1913,12 +1911,12 @@ void player_powerups (void)
                                if (time > self.superweapons_finished)
                                {
                                        self.items = self.items - (self.items & IT_SUPERWEAPON);
-                                       self.weapons &~= WEPBIT_SUPERWEAPONS;
+                                       WEPSET_ANDNOT_EA(self, WEPBIT_SUPERWEAPONS);
                                        sprint(self, "^3Superweapons have broken down\n");
                                }
                        }
                }
-               else if(self.weapons & WEPBIT_SUPERWEAPONS)
+               else if(WEPSET_TEST_EA(self, WEPBIT_SUPERWEAPONS))
                {
                        if (time < self.superweapons_finished || (self.items & IT_UNLIMITED_SUPERWEAPONS))
                        {
@@ -1928,7 +1926,7 @@ void player_powerups (void)
                        else
                        {
                                self.superweapons_finished = 0;
-                               self.weapons &~= WEPBIT_SUPERWEAPONS; // just in case
+                               WEPSET_ANDNOT_EA(self, WEPBIT_SUPERWEAPONS);
                        }
                }
                else
@@ -2155,7 +2153,7 @@ void SpectateCopy(entity spectatee) {
        self.strength_finished = spectatee.strength_finished;
        self.invincible_finished = spectatee.invincible_finished;
        self.pressedkeys = spectatee.pressedkeys;
-       self.weapons = spectatee.weapons;
+       WEPSET_COPY_EE(self, spectatee);
        self.switchweapon = spectatee.switchweapon;
        self.switchingweapon = spectatee.switchingweapon;
        self.weapon = spectatee.weapon;