]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/fruitiex/fruitbalance'
authorRudolf Polzer <divverent@alientrap.org>
Sun, 7 Nov 2010 14:39:34 +0000 (15:39 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Sun, 7 Nov 2010 14:39:34 +0000 (15:39 +0100)
14 files changed:
balance25.cfg
balanceLeeStricklin.cfg
balanceNexSVN.cfg
balanceSamual.cfg
balanceTest.cfg
balanceXonotic.cfg
balancetZork.cfg
defaultXonotic.cfg
gfx/crosshair_ring_inner.tga [new file with mode: 0644]
qcsrc/client/Defs.qc
qcsrc/client/View.qc
qcsrc/server/cl_client.qc
qcsrc/server/g_damage.qc
qcsrc/server/w_nex.qc

index 1df67732efaff258f9ea300ca2b4d9e8fd0ba3a2..09e987a5ecc24cb06d5385eb74650be53b05294e 100644 (file)
@@ -224,6 +224,8 @@ set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.05
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -237,6 +239,8 @@ set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 0
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -446,6 +450,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index b1c267342275ccf9f8fa8841d6c6d0183be0b915..e56a0c9d6e5a755f707054b628e5b4834509f169 100644 (file)
@@ -235,6 +235,8 @@ set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.03
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 25
 set g_balance_laser_secondary_edgedamage 10
@@ -248,6 +250,8 @@ set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle -90
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 0
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 5
@@ -457,6 +461,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index bb704d3ca9064277bedd981c25cdde73b5d4d8d0..80049f339617f49a067af0065029d0ffbf32f4e5 100644 (file)
@@ -224,6 +224,8 @@ set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.03
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -237,6 +239,8 @@ set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 0
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -445,6 +449,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index 4b4a91c624cd70aaedffaf1ae7c7fb44784f8e0f..f9f04722cb8143c3656aedba56a1797661d98b35 100644 (file)
@@ -224,6 +224,8 @@ set g_balance_laser_primary_lifetime 30
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0.03
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 25
 set g_balance_laser_secondary_edgedamage 10
@@ -237,6 +239,8 @@ set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle -90
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 0
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 6
@@ -446,6 +450,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0.5
 set g_balance_nex_charge_velocity_rate 0.2
 set g_balance_nex_charge_minspeed 400
index 7defd001f794853cd137d0b40e8184d751276465..33a79aca256c4c0fa990a114a9c00bd0f4d8d026 100644 (file)
@@ -222,8 +222,10 @@ set g_balance_laser_primary_refire 0.6
 set g_balance_laser_primary_animtime 0.6
 set g_balance_laser_primary_lifetime 5
 set g_balance_laser_primary_shotangle 0
-set g_balance_laser_primary_delay 0.03
+set g_balance_laser_primary_delay 0
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 0.25
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -237,6 +239,8 @@ set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 0
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0.25
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 10
@@ -446,6 +450,7 @@ set g_balance_nex_charge_mindmg 10
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.35
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0
 set g_balance_nex_charge_velocity_rate 0
 set g_balance_nex_charge_minspeed 400
index d50669f3a00875831821987dd17098175c51560f..9d268a34c58ef5336129242d9de01b5bcc0cf32b 100644 (file)
@@ -31,8 +31,8 @@ set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
 set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
 set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
 set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
-set g_lms_start_health 200
-set g_lms_start_armor 100
+set g_lms_start_health 250
+set g_lms_start_armor 250
 set g_lms_start_ammo_shells 30
 set g_lms_start_ammo_nails 250
 set g_lms_start_ammo_rockets 100
@@ -66,34 +66,34 @@ set g_pickup_rockets_weapon 15
 set g_pickup_rockets_max 150
 set g_pickup_cells 30
 set g_pickup_cells_weapon 20
-set g_pickup_cells_max 200
+set g_pickup_cells_max 150
 set g_pickup_fuel 25
 set g_pickup_fuel_weapon 15
 set g_pickup_fuel_jetpack 50
 set g_pickup_fuel_max 100
 set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 200
+set g_pickup_armorsmall_max 250
 set g_pickup_armorsmall_anyway 1
 set g_pickup_armormedium 25
-set g_pickup_armormedium_max 200
+set g_pickup_armormedium_max 250
 set g_pickup_armormedium_anyway 1
 set g_pickup_armorbig 50
-set g_pickup_armorbig_max 200
+set g_pickup_armorbig_max 250
 set g_pickup_armorbig_anyway 1
 set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 200
+set g_pickup_armorlarge_max 250
 set g_pickup_armorlarge_anyway 1
 set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 200
+set g_pickup_healthsmall_max 250
 set g_pickup_healthsmall_anyway 1
 set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 100
+set g_pickup_healthmedium_max 150
 set g_pickup_healthmedium_anyway 0
 set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 100
+set g_pickup_healthlarge_max 150
 set g_pickup_healthlarge_anyway 0
 set g_pickup_healthmega 100
-set g_pickup_healthmega_max 200
+set g_pickup_healthmega_max 250
 set g_pickup_healthmega_anyway 1
 set g_pickup_respawntime_short 15
 set g_pickup_respawntime_medium 20
@@ -155,7 +155,7 @@ set g_balance_firetransfer_time 0.9
 set g_balance_firetransfer_damage 0.8
 set g_throughfloor_damage 0.5
 set g_throughfloor_force 0.7
-set g_projectiles_newton_style 0
+set g_projectiles_newton_style 2
 // possible values:
 // 0: absolute velocity projectiles (like Quake)
 // 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
@@ -164,7 +164,7 @@ set g_projectiles_newton_style 0
 // 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.7
 set g_projectiles_newton_style_2_maxfactor 5
-set g_projectiles_spread_style 4
+set g_projectiles_spread_style 7
 // possible values:
 // 0: forward + solid sphere (like Quake) - varies velocity
 // 1: forward + flattened solid sphere
@@ -214,7 +214,7 @@ set g_balance_grapplehook_health 130
 // {{{ laser
 set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high
 set g_balance_laser_primary_edgedamage 20
-set g_balance_laser_primary_force 235
+set g_balance_laser_primary_force 150 // this looks insanely low, but actually isn't with zscale and velocitybias
 set g_balance_laser_primary_radius 60
 set g_balance_laser_primary_speed 4000
 set g_balance_laser_primary_spread 0
@@ -224,6 +224,8 @@ set g_balance_laser_primary_lifetime 5
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 2
+set g_balance_laser_primary_force_velocitybias 0.3
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 200 // dps
 set g_balance_laser_secondary_edgedamage 0
@@ -237,6 +239,8 @@ set g_balance_laser_secondary_lifetime 0
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 1
+set g_balance_laser_secondary_force_zscale 1.25
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 20
@@ -446,6 +450,7 @@ set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0.2
 set g_balance_nex_charge_rate 0.05
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0.01
 set g_balance_nex_charge_shot_multiplier 0.675
 set g_balance_nex_charge_velocity_rate 0.15
 set g_balance_nex_charge_minspeed 400
@@ -460,7 +465,7 @@ set g_balance_minstanex_ammo 10
 set g_balance_hagar_primary_damage 12
 set g_balance_hagar_primary_edgedamage 6
 set g_balance_hagar_primary_force 70
-set g_balance_hagar_primary_radius 100
+set g_balance_hagar_primary_radius 125
 set g_balance_hagar_primary_spread 0.1
 set g_balance_hagar_primary_speed 1800
 set g_balance_hagar_primary_lifetime 5
@@ -470,7 +475,7 @@ set g_balance_hagar_secondary 1
 set g_balance_hagar_secondary_damage 12
 set g_balance_hagar_secondary_edgedamage 6
 set g_balance_hagar_secondary_force 70
-set g_balance_hagar_secondary_radius 100
+set g_balance_hagar_secondary_radius 135
 set g_balance_hagar_secondary_spread 0.15
 set g_balance_hagar_secondary_speed 1800
 set g_balance_hagar_secondary_lifetime_min 5
@@ -479,7 +484,7 @@ set g_balance_hagar_secondary_refire 0.12
 set g_balance_hagar_secondary_ammo 1
 // }}}
 // {{{ rocketlauncher // TODO
-set g_balance_rocketlauncher_damage 100
+set g_balance_rocketlauncher_damage 90
 set g_balance_rocketlauncher_edgedamage 33
 set g_balance_rocketlauncher_force 350
 set g_balance_rocketlauncher_radius 125
index 7ab11edf78a184a3eb860e52ddea580a174842bd..38b77306f2257e103d7fa7bc2fec6745c58bb8bd 100644 (file)
@@ -224,6 +224,8 @@ set g_balance_laser_primary_lifetime 5
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
 set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 1
+set g_balance_laser_primary_force_velocitybias 0
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 35
 set g_balance_laser_secondary_edgedamage 10
@@ -237,6 +239,8 @@ set g_balance_laser_secondary_lifetime 30
 set g_balance_laser_secondary_shotangle 0
 set g_balance_laser_secondary_delay 0
 set g_balance_laser_secondary_gauntlet 0
+set g_balance_laser_secondary_force_zscale 1
+set g_balance_laser_secondary_force_velocitybias 0
 // }}}
 // {{{ shotgun
 set g_balance_shotgun_primary_bullets 10
@@ -447,6 +451,7 @@ set g_balance_nex_charge_mindmg 10
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.35
 set g_balance_nex_charge_limit 0.5
+set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_shot_multiplier 0
 set g_balance_nex_charge_velocity_rate 0
 set g_balance_nex_charge_minspeed 400
index dea1f3790e365eae4450b820ab726371e0bc59e3..ea4b42fcc7510436b16b57fa3fff6724226473f2 100644 (file)
@@ -217,7 +217,15 @@ seta crosshair_fireball_alpha 1    "crosshair alpha value to display when wielding
 seta crosshair_fireball_size 1 "crosshair size when wielding the fireball"
 seta crosshair_ring_size 2     "bullet counter ring size for Rifle, velocity ring for Nex"
 seta crosshair_campingrifle_bulletcounter_alpha 0.15
+
 seta crosshair_nexvelocity_alpha 0.15
+seta crosshair_nexvelocity_currentcharge_scale 30
+seta crosshair_nexvelocity_currentcharge_alpha 0.15
+seta crosshair_nexvelocity_currentcharge_color_red 0.8
+seta crosshair_nexvelocity_currentcharge_color_green 0
+seta crosshair_nexvelocity_currentcharge_color_blue 0
+seta crosshair_nexvelocity_currentcharge_movingavg_rate 0.05
+
 seta cl_reticle_stretch 0 "whether to stretch reticles so they fit the screen (brakes image proportions)"
 seta cl_reticle_item_nex 1 "draw aiming recticle for the nex weapon's zoom, 0 disables and values between 0 and 1 change alpha"
 seta cl_reticle_item_normal 1 "draw recticle when zooming with the zoom button, 0 disables and values between 0 and 1 change alpha"
diff --git a/gfx/crosshair_ring_inner.tga b/gfx/crosshair_ring_inner.tga
new file mode 100644 (file)
index 0000000..3bf51b5
Binary files /dev/null and b/gfx/crosshair_ring_inner.tga differ
index 0d822e1642777a5c6e586394b8f4e99cfa61d26e..959d593a393e49170882a4863a9e6b7ac7134ce9 100644 (file)
@@ -267,3 +267,5 @@ float bgmtime;
 
 string weaponorder_byimpulse;
 string weaponorder_bypriority;
+
+float nex_charge_movingavg;
index 074a3be5eec6f8d63eb1e671e48e70ca44189980..235b3aedf0a2eab8b1353e031756e07cc25a4334 100644 (file)
@@ -858,6 +858,9 @@ void CSQC_UpdateView(float w, float h)
                        float nex_charge;
                        nex_charge = getstatf(STAT_NEX_CHARGE);
 
+                       if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
+                               nex_charge_movingavg = nex_charge;
+
                        // ring around crosshair representing bullets left in camping rifle clip
                        if (activeweapon == WEP_CAMPINGRIFLE && cr_maxbullets)
                        {
@@ -869,6 +872,15 @@ void CSQC_UpdateView(float w, float h)
                        }
                        else if (activeweapon == WEP_NEX && nex_charge) // ring around crosshair representing velocity-dependent damage for the nex
                        {
+                               vector rgb;
+                               // indicate how much we're charging right now with an inner circle
+                               a = cvar("crosshair_nexvelocity_currentcharge_alpha");
+                               nex_charge_movingavg = (1 - cvar("crosshair_nexvelocity_currentcharge_movingavg_rate")) * nex_charge_movingavg + cvar("crosshair_nexvelocity_currentcharge_movingavg_rate") * nex_charge;
+
+                               rgb = eX * cvar("crosshair_nexvelocity_currentcharge_color_red") + eY * cvar("crosshair_nexvelocity_currentcharge_color_green") + eZ * cvar("crosshair_nexvelocity_currentcharge_color_blue");
+                               DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring_inner.tga", bound(0, cvar("crosshair_nexvelocity_currentcharge_scale") * (nex_charge - nex_charge_movingavg), 1), rgb, wcross_alpha * a, DRAWFLAG_ADDITIVE);
+
+                               // draw the charge
                                a = cvar("crosshair_nexvelocity_alpha");
                                DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, "gfx/crosshair_ring.tga", nex_charge, wcross_color, wcross_alpha * a, DRAWFLAG_ADDITIVE);
                        }
index 66a838a31cfa0e2ebdfb8aee4ccad1a6e197bc68..35eff19e6619e9ddcd6646918c0794616d139f63 100644 (file)
@@ -2808,6 +2808,11 @@ void PlayerPreThink (void)
                }
 
                player_regen();
+
+               // rot nex charge to the charge limit
+               if(cvar("g_balance_nex_charge_rot_rate") && self.nex_charge > cvar("g_balance_nex_charge_limit"))
+                       self.nex_charge = bound(cvar("g_balance_nex_charge_limit"), self.nex_charge - cvar("g_balance_nex_charge_rot_rate") * frametime / W_TICSPERFRAME, 1);
+
                if(frametime)
                        player_anim();
 
index 6f8c9490ef907175c088a5c51315dcaef1ce8f38..1246d2681cebedb8775c03fee96cd48898337b55 100644 (file)
@@ -993,6 +993,39 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e
                                                finaldmg = finaldmg * a;
                                                a = bound(0, tfloorforce + (1-tfloorforce) * hitratio, 1);
                                                force = force * a;
+
+                                               // laser force adjustments :P
+                                               if(DEATH_WEAPONOF(deathtype) == WEP_LASER)
+                                               {
+                                                       vector vel;
+
+                                                       float force_zscale;
+                                                       float force_velocitybiasramp;
+                                                       float force_velocitybias;
+
+                                                       force_velocitybiasramp = cvar("sv_maxspeed");
+                                                       if(deathtype & HITTYPE_SECONDARY)
+                                                       {
+                                                               force_zscale = cvar("g_balance_laser_secondary_force_zscale");
+                                                               force_velocitybias = cvar("g_balance_laser_secondary_force_velocitybias");
+                                                       }
+                                                       else
+                                                       {
+                                                               force_zscale = cvar("g_balance_laser_primary_force_zscale");
+                                                               force_velocitybias = cvar("g_balance_laser_primary_force_velocitybias");
+                                                       }
+
+                                                       vel = targ.velocity;
+                                                       vel_z = 0;
+                                                       vel = normalize(vel) * bound(0, vlen(vel) / force_velocitybiasramp, 1) * force_velocitybias;
+                                                       force =
+                                                               vlen(force)
+                                                               *
+                                                               normalize(normalize(force) + vel);
+
+                                                       force_z *= force_zscale;
+                                               }
+
                                                //if (targ == attacker)
                                                //{
                                                //      print("hits ", ftos(hits), " / ", ftos(total));
index 29b8be7ef0e6efd823fb934de4afd5eac1f959fe..493fd005bea62bfd546c6b66949c7b0bd5a3ed94 100644 (file)
@@ -47,6 +47,7 @@ void W_Nex_Attack (float issecondary)
        {
                charge = cvar("g_balance_nex_charge_mindmg") / mydmg + (1 - cvar("g_balance_nex_charge_mindmg") / mydmg) * self.nex_charge;
                self.nex_charge *= cvar("g_balance_nex_charge_shot_multiplier"); // do this AFTER setting mydmg/myforce
+                                                                                // O RLY? -- divVerent
        }
        else
                charge = 1;
@@ -86,6 +87,7 @@ float w_nex(float req)
        {
                if(cvar("g_balance_nex_charge") && self.nex_charge < cvar("g_balance_nex_charge_limit"))
                        self.nex_charge = min(1, self.nex_charge + cvar("g_balance_nex_charge_rate") * frametime / W_TICSPERFRAME);
+
                if (self.BUTTON_ATCK)
                {
                        if (weapon_prepareattack(0, cvar("g_balance_nex_primary_refire")))