]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add legendary akimbo mutator, you can have 2 or 3 weapons holding. Refactor DUAL...
authorLegendaryGuard <rootuser999@gmail.com>
Sat, 8 Apr 2023 18:10:33 +0000 (20:10 +0200)
committerLegendaryGuard <rootuser999@gmail.com>
Sat, 8 Apr 2023 18:13:44 +0000 (20:13 +0200)
55 files changed:
qcsrc/client/hud/crosshair.qc
qcsrc/client/view.qc
qcsrc/client/view.qh
qcsrc/common/gamemodes/gamemode/nexball/sv_nexball.qc
qcsrc/common/mapobjects/trigger/magicear.qc
qcsrc/common/monsters/sv_monsters.qc
qcsrc/common/mutators/mutator/_mod.inc
qcsrc/common/mutators/mutator/_mod.qh
qcsrc/common/mutators/mutator/buffs/sv_buffs.qc
qcsrc/common/mutators/mutator/legendary_akimbo/_mod.inc [new file with mode: 0644]
qcsrc/common/mutators/mutator/legendary_akimbo/_mod.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/legendary_akimbo/akimbo.qc [new file with mode: 0644]
qcsrc/common/mutators/mutator/legendary_akimbo/akimbo.qh [new file with mode: 0644]
qcsrc/common/mutators/mutator/nix/sv_nix.qc
qcsrc/common/mutators/mutator/overkill/oknex.qc
qcsrc/common/mutators/mutator/overkill/sv_overkill.qc
qcsrc/common/mutators/mutator/pinata/sv_pinata.qc
qcsrc/common/physics/player.qc
qcsrc/common/vehicles/sv_vehicles.qc
qcsrc/common/vehicles/vehicle/bumblebee.qc
qcsrc/common/vehicles/vehicle/spiderbot.qc
qcsrc/common/weapons/calculations.qc
qcsrc/common/weapons/weapon.qh
qcsrc/common/weapons/weapon/arc.qc
qcsrc/common/weapons/weapon/devastator.qc
qcsrc/common/weapons/weapon/fireball.qc
qcsrc/common/weapons/weapon/fireball.qh
qcsrc/common/weapons/weapon/hagar.qc
qcsrc/common/weapons/weapon/hook.qc
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/common/weapons/weapon/porto.qc
qcsrc/common/weapons/weapon/porto.qh
qcsrc/common/weapons/weapon/rifle.qc
qcsrc/common/weapons/weapon/tuba.qh
qcsrc/common/weapons/weapon/vaporizer.qh
qcsrc/common/weapons/weapon/vortex.qc
qcsrc/server/bot/default/havocbot/havocbot.qc
qcsrc/server/bot/default/scripting.qc
qcsrc/server/client.qc
qcsrc/server/client.qh
qcsrc/server/damage.qc
qcsrc/server/hook.qc
qcsrc/server/impulse.qc
qcsrc/server/intermission.qc
qcsrc/server/items/items.qc
qcsrc/server/main.qc
qcsrc/server/player.qc
qcsrc/server/portals.qc
qcsrc/server/weapons/common.qc
qcsrc/server/weapons/common.qh
qcsrc/server/weapons/selection.qc
qcsrc/server/weapons/selection.qh
qcsrc/server/weapons/tracing.qc
qcsrc/server/weapons/weaponsystem.qc
qcsrc/server/weapons/weaponsystem.qh

index 229a6024084df01cbabefa97a02de385a558a86a..d35da5fd7fcf5852b5049477bce3653196473a22 100644 (file)
@@ -685,7 +685,7 @@ void DrawReticle(entity this)
        float is_dead = (STAT(HEALTH) <= 0);
        string reticle_image = string_null;
        bool wep_zoomed = false;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                entity wepe = viewmodels[slot];
                Weapon wep = wepe.activeweapon;
index a9ad0a76bd7e612d58fdeaafa49a40cc27d8fa66..79060ed5dc42cf473a2bbe303912ea5564cbeae6 100644 (file)
@@ -346,7 +346,7 @@ void viewmodel_draw(entity this)
 }
 
 STATIC_INIT(viewmodel) {
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        viewmodels[slot] = new(viewmodel);
 }
 
@@ -420,7 +420,7 @@ vector GetCurrentFov(float fov)
 
        if(hud == HUD_NORMAL && !spectatee_status)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        entity wepent = viewmodels[slot];
                        if(wepent.switchweapon != wepent.activeweapon)
@@ -784,7 +784,7 @@ void HitSound()
        // varying sound pitch
 
        bool have_arc = false;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                entity wepent = viewmodels[slot];
 
@@ -1385,7 +1385,7 @@ void View_CheckButtonStatus()
                minigame_wasactive = false;
        }
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                entity wepent = viewmodels[slot];
 
@@ -1604,7 +1604,7 @@ void CSQC_UpdateView(entity this, float w, float h)
        // run viewmodel_draw before updating view_angles to the angles calculated by WarpZone_FixView
        // viewmodel_draw needs to use the view_angles set by the engine on every CSQC_UpdateView call
        if(autocvar_r_drawviewmodel)
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                        if(viewmodels[slot].activeweapon)
                                viewmodel_draw(viewmodels[slot]);
 
index cd33ebfb6a1201e41f9caa706209c1cc2fcb3d92..44abaf8d09710fa7e872d2c799a510bff06a5dc6 100644 (file)
@@ -102,7 +102,7 @@ void update_mousepos();
 
 void CSQC_Demo_Camera();
 
-entity viewmodels[MAX_WEAPONSLOTS];
+entity viewmodels[MAX_WEAPON_PER_SLOT];
 
 vector viewloc_mousepos;
 
index 5fed894b9685e6ae088035b84cf2020c7f6e99cb..e560c5baa3802e74acfeef4ff8da7e92c6bdf971 100644 (file)
@@ -817,7 +817,7 @@ MUTATOR_HOOKFUNCTION(nb, PlayerPreThink)
                }
                else
                {
-                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                        {
                                .entity weaponentity = weaponentities[slot];
 
@@ -852,7 +852,7 @@ MUTATOR_HOOKFUNCTION(nb, PlayerSpawn)
        entity player = M_ARGV(0, entity);
 
        STAT(NB_METERSTART, player) = 0;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                STAT(WEAPONS, player.(weaponentity)) = '0 0 0';
index 7321fe23f996a4e50b885194fb3c98fd26e2d8a3..937144cb50f6b634511298016ec9472a3c045449 100644 (file)
@@ -22,7 +22,7 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay,
                if (!(ear.spawnflags & MAGICEAR_TUBA))
                        return msgin;
 
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(!W_Tuba_HasPlayed(source, weaponentity, ear.message, ear.movedir_x, !(ear.spawnflags & MAGICEAR_TUBA_EXACTPITCH), ear.movedir_y, ear.movedir_z))
index 1635b5cb0d235c6eeb84dac673c18d98e9421e96..088e49077bd477799a26880033a5cfe6ef51e690 100644 (file)
@@ -838,7 +838,7 @@ void Monster_Remove(entity this)
        if(!MUTATOR_CALLHOOK(MonsterRemove, this))
                Send_Effect(EFFECT_ITEM_PICKUP, this.origin, '0 0 0', 1);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(this.(weaponentity))
index c463c429f0c0eec1c0c1ffa89487a79158a9ae1a..7b6a9640954c898bdd7b500385755702c3675c1a 100644 (file)
@@ -16,6 +16,7 @@
 #include <common/mutators/mutator/invincibleproj/_mod.inc>
 #include <common/mutators/mutator/itemstime/_mod.inc>
 #include <common/mutators/mutator/kick_teamkiller/_mod.inc>
+#include <common/mutators/mutator/legendary_akimbo/_mod.inc>
 #include <common/mutators/mutator/melee_only/_mod.inc>
 #include <common/mutators/mutator/midair/_mod.inc>
 #include <common/mutators/mutator/multijump/_mod.inc>
index 3b4eba7cb65a6a4fa93d97e515d6bb19a7f7b347..be56e0408d5322a86423f1664eb64406d304a04b 100644 (file)
@@ -16,6 +16,7 @@
 #include <common/mutators/mutator/invincibleproj/_mod.qh>
 #include <common/mutators/mutator/itemstime/_mod.qh>
 #include <common/mutators/mutator/kick_teamkiller/_mod.qh>
+#include <common/mutators/mutator/legendary_akimbo/_mod.qh>
 #include <common/mutators/mutator/melee_only/_mod.qh>
 #include <common/mutators/mutator/midair/_mod.qh>
 #include <common/mutators/mutator/multijump/_mod.qh>
index 6ce016e5681046730193233a5c281c1b7a835165..33d7fbf988aadbf2d94b235067e683c469e6b256 100644 (file)
@@ -557,7 +557,7 @@ METHOD(AmmoBuff, m_apply, void(StatusEffects this, entity actor, float eff_time,
     {
         actor.buff_ammo_prev_infitems = (actor.items & IT_UNLIMITED_AMMO);
         actor.items |= IT_UNLIMITED_AMMO;
-        for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+        for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(!actor.(weaponentity))
@@ -576,7 +576,7 @@ METHOD(AmmoBuff, m_remove, void(StatusEffects this, entity actor, int removal_ty
        if(wasactive)
        {
                actor.items = BITSET(actor.items, IT_UNLIMITED_AMMO, actor.buff_ammo_prev_infitems);
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(!actor.(weaponentity))
@@ -595,7 +595,7 @@ METHOD(AmmoBuff, m_tick, void(StatusEffects this, entity actor))
 {
        if(IS_PLAYER(actor))
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(actor.(weaponentity).clip_size)
diff --git a/qcsrc/common/mutators/mutator/legendary_akimbo/_mod.inc b/qcsrc/common/mutators/mutator/legendary_akimbo/_mod.inc
new file mode 100644 (file)
index 0000000..b456436
--- /dev/null
@@ -0,0 +1,4 @@
+// generated file; do not modify
+#ifdef SVQC
+    #include <common/mutators/mutator/legendary_akimbo/akimbo.qc>
+#endif
diff --git a/qcsrc/common/mutators/mutator/legendary_akimbo/_mod.qh b/qcsrc/common/mutators/mutator/legendary_akimbo/_mod.qh
new file mode 100644 (file)
index 0000000..34235ed
--- /dev/null
@@ -0,0 +1,4 @@
+// generated file; do not modify
+#ifdef SVQC
+    #include <common/mutators/mutator/legendary_akimbo/akimbo.qh>
+#endif
diff --git a/qcsrc/common/mutators/mutator/legendary_akimbo/akimbo.qc b/qcsrc/common/mutators/mutator/legendary_akimbo/akimbo.qc
new file mode 100644 (file)
index 0000000..46ddf01
--- /dev/null
@@ -0,0 +1,29 @@
+#include "akimbo.qh"
+
+//FEATURE: Akimbo mutator for all your dual wielding needs
+
+AUTOCVAR(g_akimbo, bool, false, "Enable Akimbo mutator (requires g_weaponswitch_debug 2)");
+AUTOCVAR(g_akimbo_atspawns, bool, false, "Allow Akimbo items to be collected from item spawnpoints, not just dropped items");
+
+REGISTER_MUTATOR(akimbo, autocvar_g_akimbo && !g_nexball && autocvar_g_weaponswitch_debug == 2);
+
+MUTATOR_HOOKFUNCTION(akimbo, ItemTouch)
+{
+       if(MUTATOR_RETURNVALUE == MUT_ITEMTOUCH_RETURN)
+               return false; // already handled, probably didn't pick it up
+
+       entity item = M_ARGV(0, entity);
+       entity player = M_ARGV(1, entity);
+
+       if((Item_IsLoot(item) || autocvar_g_akimbo_atspawns) && item.weapon && 
+                                                       (STAT(WEAPONS, player) & item.itemdef.m_weapon.m_wepset) && item.owner != player && !(item.itemdef.m_weapon.spawnflags & WEP_FLAG_NOMULTI))
+               PS(player).multi_weapons |= item.itemdef.m_weapon.m_wepset; // dual it up!
+}
+
+MUTATOR_HOOKFUNCTION(akimbo, FilterItem)
+{
+       entity item = M_ARGV(0, entity);
+
+       if((Item_IsLoot(item) || autocvar_g_akimbo_atspawns) && item.weapon && item.owner && IS_PLAYER(item.owner))
+               PS(item.owner).multi_weapons &= ~item.itemdef.m_weapon.m_wepset; // no longer akimbo'd (we don't check blacklist here, no need)
+}
diff --git a/qcsrc/common/mutators/mutator/legendary_akimbo/akimbo.qh b/qcsrc/common/mutators/mutator/legendary_akimbo/akimbo.qh
new file mode 100644 (file)
index 0000000..6f70f09
--- /dev/null
@@ -0,0 +1 @@
+#pragma once
index c53c76eb777e1773700264ca807ae9b6e4a55f3d..2f9350f4a6e68fdf5b7a8660207576c22af0b6ba 100644 (file)
@@ -67,7 +67,7 @@ REGISTER_MUTATOR(nix, expr_evaluate(cvar_string("g_nix")) && !MUTATOR_IS_ENABLED
                        SetResource(it, RES_PLASMA, start_ammo_plasma);
                        SetResource(it, RES_FUEL, start_ammo_fuel);
                        STAT(WEAPONS, it) = start_weapons;
-                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                        {
                                .entity weaponentity = weaponentities[slot];
                                if(it.(weaponentity).m_weapon == WEP_Null && slot != 0)
@@ -180,7 +180,7 @@ void NIX_GiveCurrentWeapon(entity this)
                // all weapons must be fully loaded when we spawn
                if (wpn.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars
                {
-                       for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       for (int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                        {
                                .entity weaponentity = weaponentities[slot];
                                this.(weaponentity).(weapon_load[nix_weapon]) = wpn.reloading_ammo;
@@ -217,7 +217,7 @@ void NIX_GiveCurrentWeapon(entity this)
                STAT(WEAPONS, this) |= WEPSET(BLASTER);
        STAT(WEAPONS, this) |= wpn.m_wepset;
 
-       for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for (int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if (this.(weaponentity).m_weapon == WEP_Null && slot != 0)
index b24aac74f5a25d196fd955d144fe07637c9093b9..ac1668a683a77a28361a275088c0c1fc4a8b60a0 100644 (file)
@@ -38,7 +38,7 @@ MUTATOR_HOOKFUNCTION(oknex_charge, GetPressedKeys)
        if(!WEP_CVAR(oknex, charge) || !WEP_CVAR(oknex, charge_velocity_rate))
                return;
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
 
@@ -291,7 +291,7 @@ METHOD(OverkillNex, wr_checkammo2, bool(entity thiswep, entity actor, .entity we
 METHOD(OverkillNex, wr_resetplayer, void(entity thiswep, entity actor))
 {
        if (WEP_CVAR(oknex, charge)) {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        actor.(weaponentity).oknex_charge = WEP_CVAR(oknex, charge_start);
index 009acc355738fd80fd235d59e5a1bc3bae663d01..dc530c3b9e3ae8215649697c9c252df8f16d29ba 100644 (file)
@@ -8,7 +8,7 @@ bool autocvar_g_overkill_powerups_replace;
 
 bool autocvar_g_overkill_itemwaypoints = true;
 
-.Weapon ok_lastwep[MAX_WEAPONSLOTS];
+.Weapon ok_lastwep[MAX_WEAPON_PER_SLOT];
 
 /// \brief Returns a random classname of the overkill item.
 /// \param[in] prefix Prefix of the cvars that hold probabilities.
@@ -94,7 +94,7 @@ MUTATOR_HOOKFUNCTION(ok, PlayerDies)
 
        ok_DropItem(frag_target, targ);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
 
@@ -137,7 +137,7 @@ MUTATOR_HOOKFUNCTION(ok, PlayerPreThink)
                return;
        }
        // Allow secondary blaster during countdown.
-       for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for (int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                Weapon weapon = player.(weaponentity).m_weapon;
@@ -159,7 +159,7 @@ MUTATOR_HOOKFUNCTION(ok, PlayerWeaponSelect)
 {
        entity player = M_ARGV(0, entity);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                entity thiswep = player.(weaponentity);
index fa8045101e55b3b94f83f83e5437390ce8f213dc..9886e60231ffc6690fa0b92c675fcdd96ad56ba3 100644 (file)
@@ -8,7 +8,7 @@ MUTATOR_HOOKFUNCTION(pinata, PlayerDies)
 {
        entity frag_target = M_ARGV(2, entity);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
 
index 8f681ce5f9d12b9b7559fd330d8b1a169485add7..02df2c7ea75d239d7c1003c47fb481b371a5b530 100644 (file)
@@ -128,7 +128,7 @@ void PM_ClientMovement_UpdateStatus(entity this)
                return;
 
        bool have_hook = false;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
        #if defined(CSQC)
                entity wepent = viewmodels[slot];
@@ -631,7 +631,7 @@ void PM_check_hitground(entity this)
        this.wasFlying = false;
        if (this.waterlevel >= WATERLEVEL_SWIMMING) return;
        if (this.ladder_entity) return;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(this.(weaponentity).hook)
index 302b39a0d16d66c12b6c328d992a710cd2d0c373..b0f642aecb2291e5591505fcde7316fc34517e0b 100644 (file)
@@ -832,7 +832,7 @@ void vehicles_exit(entity vehic, bool eject)
                player.view_ofs                 = STAT(PL_VIEW_OFS, player);
                player.event_damage             = PlayerDamage;
                STAT(HUD, player)               = HUD_NORMAL;
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++ slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++ slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        player.(weaponentity).m_switchweapon = vehic.(weaponentity).m_switchweapon;
@@ -1020,7 +1020,7 @@ void vehicles_enter(entity pl, entity veh)
        veh.colormap            = pl.colormap;
        if(veh.tur_head)
                veh.tur_head.colormap = pl.colormap;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                veh.(weaponentity) = new(temp_wepent);
@@ -1154,7 +1154,7 @@ void vehicles_spawn(entity this)
 
        FOREACH_CLIENT(IS_PLAYER(it),
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
            {
                .entity weaponentity = weaponentities[slot];
                if(it.(weaponentity).hook.aiment == this)
index 8b34473e398a5894256e386200459a00eec45ada..c1c94e995cfa8a355d35117703098186af2bca44 100644 (file)
@@ -250,7 +250,7 @@ void bumblebee_gunner_exit(entity this, int _exitflag)
        player.event_damage   = PlayerDamage;
        STAT(HUD, player)     = HUD_NORMAL;
        player.teleportable       = TELEPORT_NORMAL;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                player.(weaponentity).m_switchweapon = gunner.(weaponentity).m_switchweapon;
@@ -325,7 +325,7 @@ bool bumblebee_gunner_enter(entity this, entity player)
 
        RemoveGrapplingHooks(player);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
 
index d6a371b7652767b703c0493e3c87e31f4db7a5dc..a11edcd4f2b14d7ad05dcd3736ef44f33919ff28 100644 (file)
@@ -64,7 +64,7 @@ bool spiderbot_frame(entity this, float dt)
 
        PHYS_INPUT_BUTTON_ZOOM(this) = false;
        PHYS_INPUT_BUTTON_CROUCH(this) = false;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                this.(weaponentity).m_switchweapon = WEP_Null;
index cd2d925bc56004223c86899c0c1b66e07db0c8f5..468524b5436a2534530a2295c314f30611fd0651 100644 (file)
@@ -148,7 +148,7 @@ vector findperpendicular(vector v)
                for(int j = 4; j > 1; --j) // > 1 as 1 is just center again
                {
                        int taken = 0;
-                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                        {
                                .entity weaponentity = weaponentities[slot];
                                if(own.(weaponentity).m_gunalign == j) // we know it can't be ours thanks to the above check
index cf0f637f0324d614da2ffe5212cf408a5988f357..217da8f924fa779dada77eacc267219ec89e72d0 100644 (file)
 
 USING(WepSet, vector);
 
-const int MAX_WEAPONSLOTS = 2;
-.entity weaponentities[MAX_WEAPONSLOTS];
+// TODO: Change this into a multiple weapon slot, it cannot be constant
+int autocvar_g_max_weaponslots = 3;
+
+const int MAX_WEAPON_PER_SLOT = 3;
+.entity weaponentities[MAX_WEAPON_PER_SLOT];
 
 int weaponslot(.entity weaponentity)
 {
-       for (int i = 0; i < MAX_WEAPONSLOTS; ++i)
+       for (int i = 0; i < autocvar_g_max_weaponslots; ++i)
        {
                if (weaponentities[i] == weaponentity)
                {
@@ -205,8 +208,8 @@ const int WEP_FLAG_SUPERWEAPON    =  BIT(7); // powerup timer
 const int WEP_FLAG_MUTATORBLOCKED =  BIT(8); // hides from impulse 99 etc. (mutators are allowed to clear this flag)
 const int WEP_TYPE_MELEE_PRI      =  BIT(9); // primary attack is melee swing (for animation)
 const int WEP_TYPE_MELEE_SEC      =  BIT(10); // secondary attack is melee swing (for animation)
-const int WEP_FLAG_DUALWIELD      =  BIT(11); // weapon can be dual wielded
-const int WEP_FLAG_NODUAL         =  BIT(12); // weapon doesn't work well with dual wielding (fireball etc just explode on fire), doesn't currently prevent anything
+const int WEP_FLAG_MULTIWIELD      =  BIT(11); // weapon can be dual wielded
+const int WEP_FLAG_NOMULTI         =  BIT(12); // weapon doesn't work well with dual wielding (fireball etc just explode on fire), doesn't currently prevent anything
 const int WEP_FLAG_PENETRATEWALLS =  BIT(13); // weapon has high calibur bullets that can penetrate thick walls (WEAPONTODO)
 const int WEP_FLAG_BLEED          =  BIT(14); // weapon pierces and causes bleeding (used for damage effects)
 const int WEP_FLAG_NOTRUEAIM      =  BIT(15); // weapon doesn't aim directly at targets
index aa1a637c908a5b55f5fe754da206d8163e26e5b9..9a3c5d68947adc566c3e5427417b8cb917f33a9b 100644 (file)
@@ -52,7 +52,7 @@ bool W_Arc_Beam_Send(entity this, entity to, int sf)
 
 void Reset_ArcBeam(entity player, vector forward)
 {
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(!player.(weaponentity).arc_beam)
@@ -772,7 +772,7 @@ METHOD(Arc, wr_resetplayer, void(entity thiswep, entity actor))
 {
     actor.arc_overheat = 0;
     actor.arc_cooldown = 0;
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
        .entity weaponentity = weaponentities[slot];
        actor.(weaponentity).arc_BUTTON_ATCK_prev = false;
index 9ad68db2741d4e73f2c3514e15177b5e5f4ec14d..37fd536ec16d54d8403425b5a7404136761c29a9 100644 (file)
@@ -6,7 +6,7 @@
 
 void W_Devastator_Unregister(entity this)
 {
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(this.realowner.(weaponentity).lastrocket == this)
@@ -241,7 +241,7 @@ void W_Devastator_Think(entity this)
 
                        vector dv = v_right * -vecs.y + v_up * vecs.z;
 
-                       if(!W_DualWielding(this.realowner))
+                       if(!W_MultiWielding(this.realowner))
                                dv = '0 0 0'; // don't override!
 
                        velspeed = vlen(this.velocity);
@@ -558,7 +558,7 @@ METHOD(Devastator, wr_checkammo2, bool(entity thiswep, entity actor, .entity wea
 }
 METHOD(Devastator, wr_resetplayer, void(entity thiswep, entity actor))
 {
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
        .entity weaponentity = weaponentities[slot];
        actor.(weaponentity).lastrocket = NULL; // stop rocket guiding, no revenge from the grave!
index 363b1d694141a6e571b16060722c77fbdc5c1811..85e5dfb73a81c0c8897c2a1115df03808aaed673 100644 (file)
@@ -387,7 +387,7 @@ METHOD(Fireball, wr_checkammo2, bool(entity thiswep, entity actor, .entity weapo
 }
 METHOD(Fireball, wr_resetplayer, void(entity thiswep, entity actor))
 {
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
        actor.(weaponentity).fireball_primarytime = time;
index c3dd73a2eb8bab5eea5d70b2288896533bdf9650..d401f6e2cc931385ccf239675835a649fc399fd8 100644 (file)
@@ -4,7 +4,7 @@ CLASS(Fireball, Weapon)
 /* spawnfunc */ ATTRIB(Fireball, m_canonical_spawnfunc, string, "weapon_fireball");
 /* ammotype  */ //ATTRIB(Fireball, ammo_type, Resource, RES_NONE);
 /* impulse   */ ATTRIB(Fireball, impulse, int, 9);
-/* flags     */ ATTRIB(Fireball, spawnflags, int, WEP_FLAG_SUPERWEAPON | WEP_TYPE_SPLASH | WEP_FLAG_NODUAL);
+/* flags     */ ATTRIB(Fireball, spawnflags, int, WEP_FLAG_SUPERWEAPON | WEP_TYPE_SPLASH | WEP_FLAG_NOMULTI);
 /* rating    */ ATTRIB(Fireball, bot_pickupbasevalue, float, 5000);
 /* color     */ ATTRIB(Fireball, wpcolor, vector, '1 0.5 0');
 /* modelname */ ATTRIB(Fireball, mdl, string, "fireball");
index 82f75f3633e63e70dc68792a7611ce701f0f5c5d..d5602e5d72cffbedb761484b9f7e3c8097a58672 100644 (file)
@@ -447,7 +447,7 @@ METHOD(Hagar, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponen
 }
 METHOD(Hagar, wr_resetplayer, void(entity thiswep, entity actor))
 {
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
        .entity weaponentity = weaponentities[slot];
        actor.(weaponentity).hagar_load = 0;
index d9e11dc012fb9d2736a0f04a56853d4ab9c9e14d..68eab9bea8829a282d1b99c2896b958bdab8812d 100644 (file)
@@ -226,7 +226,7 @@ METHOD(Hook, wr_checkammo2, bool(Hook thiswep, entity actor, .entity weaponentit
 METHOD(Hook, wr_resetplayer, void(entity thiswep, entity actor))
 {
     RemoveGrapplingHooks(actor);
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
        .entity weaponentity = weaponentities[slot];
        actor.(weaponentity).hook_time = 0;
@@ -425,7 +425,7 @@ void Remove_GrapplingHook(entity this)
 {
        sound (this, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                entity wep = viewmodels[slot];
                if(wep.hook == this)
index 9026521d62dfe40347290ee67318b1ed47f968f7..f111296fb7db061ecff5822449c426b4333608b2 100644 (file)
@@ -470,7 +470,7 @@ METHOD(MineLayer, wr_checkammo2, bool(entity thiswep, entity actor, .entity weap
 }
 METHOD(MineLayer, wr_resetplayer, void(entity thiswep, entity actor))
 {
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
        .entity weaponentity = weaponentities[slot];
        actor.(weaponentity).minelayer_mines = 0;
index 7ee4162157077a97024dc710403f51ff8e845df1..66909d7c1ade905c23a2f822ad8d679d421946e5 100644 (file)
@@ -15,7 +15,7 @@ void Porto_Draw(entity this)
 {
        if (spectatee_status || intermission == 1 || intermission == 2 || STAT(HEALTH) <= 0 || WEP_CVAR(porto, secondary)) return;
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                entity wepent = viewmodels[slot];
 
index 757386b5c3f9dd65db332d5ed948619f3cc74b12..18267c911607b8ac16ac0f7c4b19c979d208fc97 100644 (file)
@@ -4,7 +4,7 @@ CLASS(PortoLaunch, Weapon)
 /* spawnfunc */ ATTRIB(PortoLaunch, m_canonical_spawnfunc, string, "weapon_porto");
 /* ammotype  */ ATTRIB(PortoLaunch, ammo_type, Resource, RES_NONE);
 /* impulse   */ ATTRIB(PortoLaunch, impulse, int, 0);
-/* flags     */ ATTRIB(PortoLaunch, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_SUPERWEAPON | WEP_FLAG_NODUAL | WEP_FLAG_NOTRUEAIM);
+/* flags     */ ATTRIB(PortoLaunch, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_SUPERWEAPON | WEP_FLAG_NOMULTI | WEP_FLAG_NOTRUEAIM);
 /* rating    */ ATTRIB(PortoLaunch, bot_pickupbasevalue, float, 0);
 /* color     */ ATTRIB(PortoLaunch, wpcolor, vector, '0.5 0.5 0.5');
 /* modelname */ ATTRIB(PortoLaunch, mdl, string, "porto");
index aa4a980623a4168791f700cdd21b523967bc1796..144fe6fdf02d4cf89dcc348ddf88c28a1160ab00 100644 (file)
@@ -158,7 +158,7 @@ METHOD(Rifle, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponen
 }
 METHOD(Rifle, wr_resetplayer, void(entity thiswep, entity actor))
 {
-    for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+    for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
         .entity weaponentity = weaponentities[slot];
         actor.(weaponentity).rifle_accumulator = time - WEP_CVAR(rifle, bursttime);
index 8855fc7527d50cc8bb4fa50965b25f1cfd45cdb4..52a9b4d48efcfcc6d095e3ac55bbdf743b827521 100644 (file)
@@ -3,7 +3,7 @@
 CLASS(Tuba, Weapon)
 /* spawnfunc */ ATTRIB(Tuba, m_canonical_spawnfunc, string, "weapon_tuba");
 /* impulse   */ ATTRIB(Tuba, impulse, int, 1);
-/* flags     */ ATTRIB(Tuba, spawnflags, int, WEP_FLAG_HIDDEN | WEP_TYPE_SPLASH | WEP_FLAG_NODUAL | WEP_FLAG_NOTRUEAIM);
+/* flags     */ ATTRIB(Tuba, spawnflags, int, WEP_FLAG_HIDDEN | WEP_TYPE_SPLASH | WEP_FLAG_NOMULTI | WEP_FLAG_NOTRUEAIM);
 /* rating    */ ATTRIB(Tuba, bot_pickupbasevalue, float, 2000);
 /* color     */ ATTRIB(Tuba, wpcolor, vector, '0 1 0');
 /* modelname */ ATTRIB(Tuba, mdl, string, "tuba");
index 87249f7364b9b6525e9ac74153d4d3902cecd1dd..d5d356f84e709ef69f446357772ca4d03dd4c7ca 100644 (file)
@@ -4,7 +4,7 @@ CLASS(Vaporizer, Weapon)
 /* spawnfunc */ ATTRIB(Vaporizer, m_canonical_spawnfunc, string, "weapon_vaporizer");
 /* ammotype  */ ATTRIB(Vaporizer, ammo_type, Resource, RES_CELLS);
 /* impulse   */ ATTRIB(Vaporizer, impulse, int, 7);
-/* flags     */ ATTRIB(Vaporizer, spawnflags, int, WEP_FLAG_RELOADABLE | WEP_FLAG_CANCLIMB | WEP_FLAG_SUPERWEAPON | WEP_TYPE_HITSCAN | WEP_FLAG_NODUAL);
+/* flags     */ ATTRIB(Vaporizer, spawnflags, int, WEP_FLAG_RELOADABLE | WEP_FLAG_CANCLIMB | WEP_FLAG_SUPERWEAPON | WEP_TYPE_HITSCAN | WEP_FLAG_NOMULTI);
 /* rating    */ ATTRIB(Vaporizer, bot_pickupbasevalue, float, 10000);
 /* color     */ ATTRIB(Vaporizer, wpcolor, vector, '0.5 1 1');
 /* modelname */ ATTRIB(Vaporizer, mdl, string, "minstanex");
index 5c9ae23a1806d6b4b04801b61a16f8c8ea0c1534..ca09f95601da392508e3a599b480d685e2eb0749 100644 (file)
@@ -72,7 +72,7 @@ MUTATOR_HOOKFUNCTION(vortex_charge, GetPressedKeys)
        if(!WEP_CVAR(vortex, charge) || !WEP_CVAR(vortex, charge_velocity_rate))
                return;
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
 
@@ -287,7 +287,7 @@ METHOD(Vortex, wr_checkammo2, bool(entity thiswep, entity actor, .entity weapone
 METHOD(Vortex, wr_resetplayer, void(entity thiswep, entity actor))
 {
        if (WEP_CVAR(vortex, charge)) {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        actor.(weaponentity).vortex_charge = WEP_CVAR(vortex, charge_start);
index 57c18f096f219b702a8e72cac6e66d1fc891cd93..62bf834120495839c01200e335e47608ab51d76a 100644 (file)
@@ -120,7 +120,7 @@ void havocbot_ai(entity this)
 
        havocbot_chooseenemy(this);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(this.(weaponentity).m_weapon != WEP_Null || slot == 0)
@@ -146,7 +146,7 @@ void havocbot_ai(entity this)
                        }
                        else
                        {
-                               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                                {
                                        .entity weaponentity = weaponentities[slot];
                                        Weapon w = this.(weaponentity).m_weapon;
@@ -183,7 +183,7 @@ void havocbot_ai(entity this)
        // if the bot is not attacking, consider reloading weapons
        if (!(this.aistatus & AI_STATUS_ATTACKING))
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
 
@@ -635,7 +635,7 @@ void havocbot_movetogoal(entity this)
                {
                        if(this.velocity.z < 0)
                        {
-                               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                                {
                                        .entity weaponentity = weaponentities[slot];
 
index 5a13330652f576268b6ce42a2939716d4517a66f..ac622b65bb4b0d78bf4f7626bd5e245449e805f8 100644 (file)
@@ -579,7 +579,7 @@ float bot_cmd_select_weapon(entity this)
 
        bool success = false;
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(this.(weaponentity).m_weapon == WEP_Null && slot != 0)
index 5b7509e484d5fecec7e6f49a852de6ea218e39e9..dd6e3605da283281af206dc019d3e9b7da55d411 100644 (file)
@@ -375,7 +375,7 @@ void PutObserverInServer(entity this, bool is_forced, bool use_spawnpoint)
        //this.spawnpoint_targ = NULL; // keep it so they can return to where they were?
 
        this.weaponmodel = "";
-       for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for (int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                this.weaponentities[slot] = NULL;
        }
@@ -612,7 +612,7 @@ void PutPlayerInServer(entity this)
        }
        SetSpectatee_status(this, 0);
 
-       PS(this).dual_weapons = '0 0 0';
+       PS(this).multi_weapons = '0 0 0';
 
        if(STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS)
                StatusEffects_apply(STATUSEFFECT_Superweapons, this, time + autocvar_g_balance_superweapons_time, 0);
@@ -741,7 +741,7 @@ void PutPlayerInServer(entity this)
                CS(this).startplaytime = time;
        }
 
-       for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for (int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                CL_SpawnWeaponentity(this, weaponentity);
@@ -762,7 +762,7 @@ void PutPlayerInServer(entity this)
                it.wr_resetplayer(it, this);
                        // reload all reloadable weapons
                if (it.spawnflags & WEP_FLAG_RELOADABLE) {
-                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                        {
                                .entity weaponentity = weaponentities[slot];
                                this.(weaponentity).weapon_load[it.m_id] = it.reloading_ammo;
@@ -788,7 +788,7 @@ void PutPlayerInServer(entity this)
                delete(spot); // usefull for checking if there are spawnpoints, that let drop through the floor
        }
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                entity w_ent = this.(weaponentity);
@@ -807,7 +807,7 @@ void PutPlayerInServer(entity this)
        if (CS(this).impulse) ImpulseCommands(this);
 
        W_ResetGunAlign(this, CS_CVAR(this).cvar_cl_gunalign);
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_WeaponFrame(this, weaponentity);
@@ -1844,7 +1844,7 @@ void SetSpectatee(entity this, entity spectatee)
        // these are required to fix the spectator bug with arc
        if(old_spectatee)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(old_spectatee.(weaponentity).arc_beam)
@@ -1853,7 +1853,7 @@ void SetSpectatee(entity this, entity spectatee)
        }
        if(spectatee)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(spectatee.(weaponentity).arc_beam)
@@ -2061,7 +2061,7 @@ bool joinAllowed(entity this)
 }
 
 .string shootfromfixedorigin;
-.bool dualwielding_prev;
+.bool MULTIWIELDing_prev;
 bool PlayerThink(entity this)
 {
        if (game_stopped || intermission_running) {
@@ -2166,17 +2166,17 @@ bool PlayerThink(entity this)
 
        // reset gun alignment when dual wielding status changes
        // to ensure guns are always aligned right and left
-       bool dualwielding = W_DualWielding(this);
-       if(this.dualwielding_prev != dualwielding)
+       bool MULTIWIELDing = W_MultiWielding(this);
+       if(this.MULTIWIELDing_prev != MULTIWIELDing)
        {
                W_ResetGunAlign(this, CS_CVAR(this).cvar_cl_gunalign);
-               this.dualwielding_prev = dualwielding;
+               this.MULTIWIELDing_prev = MULTIWIELDing;
        }
 
        // LordHavoc: allow firing on move frames (sub-ticrate), this gives better timing on slow servers
        //if(frametime)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(WEP_CVAR(vortex, charge_always))
@@ -2189,7 +2189,7 @@ bool PlayerThink(entity this)
        {
                // WEAPONTODO: Add a weapon request for this
                // rot vortex charge to the charge limit
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if (WEP_CVAR(vortex, charge_rot_rate) && this.(weaponentity).vortex_charge > WEP_CVAR(vortex, charge_limit) && this.(weaponentity).vortex_charge_rottime < time)
@@ -2515,7 +2515,7 @@ void PlayerPreThink (entity this)
        // WEAPONTODO: Add weapon request for this
        if (!zoomstate_set) {
                bool wep_zoomed = false;
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        Weapon thiswep = this.(weaponentity).m_weapon;
index 33b9d4511967c5c0834fdc9f0190c78b78d10df3..5f05807ef96dabff8a4f57928874555d751ad05f 100644 (file)
@@ -271,7 +271,7 @@ CLASS(Player, Client)
 
     // custom
 
-    ATTRIB(Player, dual_weapons, vector, this.dual_weapons); // TODO: actually WepSet!
+    ATTRIB(Player, multi_weapons, vector, this.multi_weapons); // TODO: actually WepSet!
     ATTRIB(Player, itemkeys, int, this.itemkeys);
     ATTRIB(Player, ballistics_density, float, this.ballistics_density);
 
index f94f25fe6b8f9d73f61de7df06c0cdaa9c6423b0..0361ad2ec0a8c441386846dc638410acb5e946b6 100644 (file)
@@ -86,7 +86,7 @@ void GiveFrags(entity attacker, entity targ, float f, int deathtype, .entity wea
 
 string AppendItemcodes(string s, entity player)
 {
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                int w = player.(weaponentity).m_weapon.m_id;
@@ -530,7 +530,7 @@ void Freeze(entity targ, float revivespeed, int frozen_type, bool show_waypoint)
 
        FOREACH_CLIENT(IS_PLAYER(it),
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
            {
                .entity weaponentity = weaponentities[slot];
                if(it.(weaponentity).hook.aiment == targ)
@@ -564,7 +564,7 @@ void Unfreeze(entity targ, bool reset_health)
 
        FOREACH_CLIENT(IS_PLAYER(it),
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
            {
                .entity weaponentity = weaponentities[slot];
                if(it.(weaponentity).hook.aiment == targ)
@@ -709,7 +709,7 @@ void Damage(entity targ, entity inflictor, entity attacker, float damage, int de
 
                if(IS_PLAYER(targ) && damage > 0 && attacker)
                {
-                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                    {
                        .entity went = weaponentities[slot];
                        if(targ.(went).hook && targ.(went).hook.aiment == attacker)
index a50830348a49caaf109b60fd7269ca3fc02c1554..6927f5d108a763edb4af95f83f70251b4f866830 100644 (file)
@@ -80,7 +80,7 @@ void RemoveGrapplingHooks(entity pl)
        if(pl.move_movetype == MOVETYPE_FLY)
                set_movetype(pl, MOVETYPE_WALK);
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
     {
        .entity weaponentity = weaponentities[slot];
        if(!pl.(weaponentity))
index be66fe968c2b6a2eadc8ac35b8390805ad519289..f0fa8222115ccfd889c10c8b3c445480decef3e1 100644 (file)
@@ -58,7 +58,7 @@ void weapon_group_handle(entity this, int number, int imp)
                this.impulse = imp;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_NextWeaponOnImpulse(this, number, weaponentity);
@@ -94,7 +94,7 @@ void weapon_priority_handle(entity this, int dir, int number, int imp)
                this.impulse = imp;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_CycleWeapon(this, CS_CVAR(this).cvar_cl_weaponpriorities[number], dir, weaponentity);
@@ -155,7 +155,7 @@ void weapon_byid_handle(entity this, int number, int imp)
                this.impulse = imp;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_SwitchWeapon_TryOthers(this, REGISTRY_GET(Weapons, WEP_FIRST + number), weaponentity);
@@ -203,7 +203,7 @@ IMPULSE(weapon_next_byid)
                this.impulse = IMP_weapon_next_byid.impulse;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_NextWeapon(this, 0, weaponentity);
@@ -221,7 +221,7 @@ IMPULSE(weapon_prev_byid)
                this.impulse = IMP_weapon_prev_byid.impulse;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_PreviousWeapon(this, 0, weaponentity);
@@ -239,7 +239,7 @@ IMPULSE(weapon_next_bygroup)
                this.impulse = IMP_weapon_next_bygroup.impulse;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_NextWeapon(this, 1, weaponentity);
@@ -257,7 +257,7 @@ IMPULSE(weapon_prev_bygroup)
                this.impulse = IMP_weapon_prev_bygroup.impulse;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_PreviousWeapon(this, 1, weaponentity);
@@ -275,7 +275,7 @@ IMPULSE(weapon_next_bypriority)
                this.impulse = IMP_weapon_next_bypriority.impulse;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_NextWeapon(this, 2, weaponentity);
@@ -293,7 +293,7 @@ IMPULSE(weapon_prev_bypriority)
                this.impulse = IMP_weapon_prev_bypriority.impulse;
                return;
        }
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_PreviousWeapon(this, 2, weaponentity);
@@ -307,7 +307,7 @@ IMPULSE(weapon_last)
 {
        if (this.vehicle) return;
        if (IS_DEAD(this)) return;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_LastWeapon(this, weaponentity);
@@ -321,7 +321,7 @@ IMPULSE(weapon_best)
 {
        if (this.vehicle) return;
        if (IS_DEAD(this)) return;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                W_SwitchWeapon(this, w_getbestweapon(this, weaponentity), weaponentity);
@@ -335,14 +335,14 @@ IMPULSE(weapon_drop)
 {
        if (this.vehicle) return;
        if (IS_DEAD(this)) return;
-       bool is_dualwielding = W_DualWielding(this);
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       bool is_multiwielding = W_MultiWielding(this);
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                vector md = this.(weaponentity).movedir;
                vector vecs = ((md.x > 0) ? md : '0 0 0');
                vector dv = v_right * -vecs.y;
-               if(!is_dualwielding)
+               if(!is_multiwielding)
                        dv = '0 0 0'; // don't override!
                W_ThrowWeapon(this, weaponentity, W_CalculateProjectileVelocity(this, this.velocity, v_forward * 750, false), dv, true);
 
@@ -357,7 +357,7 @@ IMPULSE(weapon_reload)
        if (IS_DEAD(this)) return;
        if (weaponLocked(this)) return;
        entity actor = this;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                Weapon w = this.(weaponentity).m_weapon;
index b2652f7d8d9b27cc0da41d128d31bccf88383603..6c631b1809f7473a14765ecb2429afea65b63ee2 100644 (file)
@@ -457,7 +457,7 @@ void FixIntermissionClient(entity e)
        {
                e.autoscreenshot = time + 0.8;  // used for autoscreenshot
                SetResourceExplicit(e, RES_HEALTH, -2342); // health in the first intermission phase
-               for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for (int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(e.(weaponentity))
index 6b653d9c33ebde54776661e4481371a217239eec..308ea7c909d520a74a7aedd6202a735f2ca3ab1f 100644 (file)
@@ -495,7 +495,7 @@ bool Item_GiveTo(entity item, entity player)
 
        if(CS_CVAR(player).cvar_cl_autoswitch)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
@@ -532,7 +532,7 @@ bool Item_GiveTo(entity item, entity player)
 
                                if(wp & (it.m_wepset))
                                {
-                                       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                                       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                                        {
                                                .entity weaponentity = weaponentities[slot];
                                                if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
@@ -617,7 +617,7 @@ bool Item_GiveTo(entity item, entity player)
        // crude hack to enforce switching weapons
        if(g_cts && item.itemdef.instanceOfWeaponPickup && !CS_CVAR(player).cvar_cl_cts_noautoswitch)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
@@ -628,7 +628,7 @@ bool Item_GiveTo(entity item, entity player)
 
        if(_switchweapon)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(_switchweapon & BIT(slot))
@@ -1532,7 +1532,7 @@ float GiveItems(entity e, float beginarg, float endarg)
 
        if(CS_CVAR(e).cvar_cl_autoswitch)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(e.(weaponentity).m_weapon != WEP_Null || slot == 0)
@@ -1727,7 +1727,7 @@ float GiveItems(entity e, float beginarg, float endarg)
                StatusEffects_update(e);
        }
 
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(e.(weaponentity).m_weapon != WEP_Null || slot == 0)
@@ -1737,7 +1737,7 @@ float GiveItems(entity e, float beginarg, float endarg)
 
        if(_switchweapon)
        {
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
                        if(_switchweapon & BIT(slot))
index 2b29422b8969362356b6a552106158c9b881d0e7..2883d5a70eade661a3790c3429b9aa7d62597876 100644 (file)
@@ -140,7 +140,7 @@ void CreatureFrame_FallDamage(entity this)
 
        // check for falling damage
        bool have_hook = false;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
            .entity weaponentity = weaponentities[slot];
            if(this.(weaponentity).hook && this.(weaponentity).hook.state)
index ad3ba94e4a21d18c9aa7c293a1c68cfa9a04edeb..5620ac485096e32bcf3dac56009df5f231e01e82 100644 (file)
@@ -490,7 +490,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage,
                excess = max(0, damage - take - save);
 
                //Weapon wep = this.(weaponentity).m_weapon;
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity went = weaponentities[slot];
                        if(!this.(went))
@@ -523,7 +523,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage,
                // clear waypoints
                WaypointSprite_PlayerDead(this);
                // throw a weapon
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                {
                        .entity went = weaponentities[slot];
                        SpawnThrownWeapon(this, this.origin + (this.mins + this.maxs) * 0.5, this.(went).m_weapon, went);
@@ -595,7 +595,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage,
                        FOREACH(Weapons, it != WEP_Null,
                        {
                                it.wr_resetplayer(it, this);
-                               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+                               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
                                {
                                        ATTACK_FINISHED_FOR(this, it.m_id, slot) = 0;
                                }
index 2cf8db682f950e179f85f559d0997d6792765823..991734961c26654cd35ca228873a7a11ac21ef34 100644 (file)
@@ -492,7 +492,7 @@ void Portal_Think(entity this)
                if(it != o || time >= this.portal_activatetime)
                        Portal_Think_TryTeleportPlayer(this, it, g, o);
 
-               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
            {
                .entity weaponentity = weaponentities[slot];
                if(it.(weaponentity).hook)
index a0dd86f5199e3afde64ff2cf7782ee167c28dd39..2bc3b2c70020031f2e9fc4682a460baa496ae07f 100644 (file)
 #include <server/mutators/_mod.qh>
 #include <server/weapons/csqcprojectile.qh>
 
-bool W_DualWielding(entity player)
+bool W_MultiWielding(entity player)
 {
        int held_weapons = 0;
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if(player.(weaponentity) && player.(weaponentity).m_switchweapon != WEP_Null)
index 779226be3dfc98ded7bb21b56042e9ac54265b40..228821fcd25ba5332194d2b511a258e9cb9f7b59 100644 (file)
@@ -5,7 +5,7 @@ bool autocvar_g_projectiles_keep_owner;
 float autocvar_sv_strengthsound_antispam_refire_threshold;
 float autocvar_sv_strengthsound_antispam_time;
 
-bool W_DualWielding(entity player);
+bool W_MultiWielding(entity player);
 void W_GiveWeapon (entity e, float wep);
 void W_PlayStrengthSound(entity player);
 float W_CheckProjectileDamage(entity inflictor, entity projowner, int deathtype, float exception);
index 0368f7f5f9cb9a51c2157793c8724e98713e510e..bcfa0482f23fb9e106965229b2a99e30c5afbc35 100644 (file)
@@ -66,7 +66,7 @@ bool client_hasweapon(entity this, Weapon wpn, .entity weaponentity, float andam
                        sprint(this, "Invalid weapon\n");
                return false;
        }
-       if (autocvar_g_weaponswitch_debug == 2 && weaponslot(weaponentity) > 0 && !(wpn.spawnflags & WEP_FLAG_DUALWIELD) && !(PS(this).dual_weapons & wpn.m_wepset))
+       if (autocvar_g_weaponswitch_debug == 2 && weaponslot(weaponentity) > 0 && !(wpn.spawnflags & WEP_FLAG_MULTIWIELD) && !(PS(this).multi_weapons & wpn.m_wepset))
                return false; // no complaints needed
        if (STAT(WEAPONS, this) & WepSet_FromWeapon(wpn))
        {
@@ -349,7 +349,7 @@ void W_LastWeapon(entity this, .entity weaponentity)
 
 // fix switchweapon (needed when spectating is disabled, as PutClientInServer comes too early)
 REPLICATE_APPLYCHANGE("cl_weaponpriority",
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if (this.(weaponentity) && (this.(weaponentity).m_weapon != WEP_Null || slot == 0))
index 093d6612b348052416bbf609e26217583914b398..ee06f5d9542eb87e2459acb7b5b80f594abb25e4 100644 (file)
@@ -9,7 +9,7 @@ bool autocvar_g_weaponswitch_debug_alternate;
 
 .int selectweapon; // last selected weapon of the player
 
-.WepSet dual_weapons;
+.WepSet multi_weapons;
 
 // switch between weapons
 void Send_WeaponComplain(entity e, float wpn, float type);
index 9a36035a74bc3382122c73038dd00f18ad3fdef0..aa22ecc74d07338c90b9aeeb1ceb02b1017be9b6 100644 (file)
@@ -97,7 +97,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vect
                tracebox(w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent);
        w_shotorg = trace_endpos - forward * nudge;
        // calculate the shotdir from the chosen shotorg
-       if(W_DualWielding(ent))
+       if(W_MultiWielding(ent))
                w_shotdir = s_forward;
        else
                w_shotdir = normalize(w_shotend - w_shotorg);
@@ -155,7 +155,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vect
                ent.punchangle_x = recoil * -1;
 
        if (snd != SND_Null) {
-               sound(ent, chan, snd, (W_DualWielding(ent) ? VOL_BASE * 0.7 : VOL_BASE), ATTN_NORM);
+               sound(ent, chan, snd, (W_MultiWielding(ent) ? VOL_BASE * 0.7 : VOL_BASE), ATTN_NORM);
                W_PlayStrengthSound(ent);
        }
 
index fc2c3979c2b15226d5242fc95fdc641ad658b53e..6033cf91b953f31421e6c386bcba0f7b3526c0d1 100644 (file)
@@ -316,10 +316,10 @@ void weapon_prepareattack_do(entity actor, .entity weaponentity, bool secondary,
                float arate = W_WeaponRateFactor(actor);
                ATTACK_FINISHED(actor, weaponentity) = ATTACK_FINISHED(actor, weaponentity) + attacktime * arate;
 
-               if(autocvar_g_weaponswitch_debug_alternate && W_DualWielding(actor))
+               if(autocvar_g_weaponswitch_debug_alternate && W_MultiWielding(actor))
                {
                        int slot = weaponslot(weaponentity);
-                       for(int wepslot = 0; wepslot < MAX_WEAPONSLOTS; ++wepslot)
+                       for(int wepslot = 0; wepslot < autocvar_g_max_weaponslots; ++wepslot)
                        {
                                if(slot == wepslot)
                                        continue;
@@ -330,7 +330,7 @@ void weapon_prepareattack_do(entity actor, .entity weaponentity, bool secondary,
                                                continue; // still cooling down!
                                        if (ATTACK_FINISHED(actor, wepent) < time - actor.(wepent).weapon_frametime * 1.5)
                                                ATTACK_FINISHED(actor, wepent) = time;
-                                       ATTACK_FINISHED(actor, wepent) = ATTACK_FINISHED(actor, wepent) + (attacktime * arate) / MAX_WEAPONSLOTS;
+                                       ATTACK_FINISHED(actor, wepent) = ATTACK_FINISHED(actor, wepent) + (attacktime * arate) / autocvar_g_max_weaponslots;
                                }
                        }
                }
@@ -435,11 +435,11 @@ bool weaponLocked(entity player)
 
 void W_ResetGunAlign(entity player, int preferred_alignment)
 {
-       if(W_DualWielding(player))
+       if(W_MultiWielding(player))
                preferred_alignment = 3; // right align, the second gun will default to left
 
        // clear current weapon slots' alignments so we can redo the calculations!
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if (player.(weaponentity))
@@ -447,7 +447,7 @@ void W_ResetGunAlign(entity player, int preferred_alignment)
        }
 
        // now set the new values
-       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       for(int slot = 0; slot < autocvar_g_max_weaponslots; ++slot)
        {
                .entity weaponentity = weaponentities[slot];
                if (player.(weaponentity))
@@ -488,7 +488,7 @@ void W_WeaponFrame(Player actor, .entity weaponentity)
                entity wep1 = actor.(wepe1);
                this.m_switchweapon = wep1.m_switchweapon;
                entity store = IS_PLAYER(actor) ? PS(actor) : actor;
-               if(!(this.m_switchweapon.spawnflags & WEP_FLAG_DUALWIELD) && !(store.dual_weapons & wep1.m_switchweapon.m_wepset))
+               if(!(this.m_switchweapon.spawnflags & WEP_FLAG_MULTIWIELD) && !(store.multi_weapons & wep1.m_switchweapon.m_wepset))
                {
                        this.m_weapon = WEP_Null;
                        this.m_switchingweapon = WEP_Null;
index c0e0c221fff9124a3a5bc81a4f6c66a9e184c760..773f00d17599306bc83f295d598e777c12ac808c 100644 (file)
@@ -32,10 +32,10 @@ entity weapon_dropevent_item;
 .int old_clip_load;
 .int clip_size;
 
-.float attack_finished_for[REGISTRY_MAX(Weapons) * MAX_WEAPONSLOTS];
-.float attack_finished_single[MAX_WEAPONSLOTS];
+.float attack_finished_for[REGISTRY_MAX(Weapons) * MAX_WEAPON_PER_SLOT];
+.float attack_finished_single[MAX_WEAPON_PER_SLOT];
 #if INDEPENDENT_ATTACK_FINISHED
-#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).(attack_finished_for[((w) - WEP_FIRST) * MAX_WEAPONSLOTS + (slot)]))
+#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).(attack_finished_for[((w) - WEP_FIRST) * autocvar_g_max_weaponslots + (slot)]))
 #else
 #define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).attack_finished_single[slot])
 #endif