From: Mario Date: Wed, 7 Oct 2020 12:27:41 +0000 (+1000) Subject: Add a burst option to the Arc secondary (available in testing) X-Git-Tag: xonotic-v0.8.5~686^2~8 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=fa1337d47ea348bf9938c987b71f1d2dea60a404;p=xonotic%2Fxonotic-data.pk3dir.git Add a burst option to the Arc secondary (available in testing) --- diff --git a/bal-wep-mario.cfg b/bal-wep-mario.cfg index e4f2f84f9..218a807bb 100644 --- a/bal-wep-mario.cfg +++ b/bal-wep-mario.cfg @@ -766,6 +766,7 @@ set g_balance_arc_bolt_ammo 1 set g_balance_arc_bolt_bounce_count 0 set g_balance_arc_bolt_bounce_damage 0 set g_balance_arc_bolt_bounce_lifetime 0 +set g_balance_arc_bolt_count 1 set g_balance_arc_bolt_damage 25 set g_balance_arc_bolt_damageforcescale 0 set g_balance_arc_bolt_edgedamage 12.5 @@ -774,6 +775,7 @@ set g_balance_arc_bolt_health 15 set g_balance_arc_bolt_lifetime 5 set g_balance_arc_bolt_radius 65 set g_balance_arc_bolt_refire 0.16667 +set g_balance_arc_bolt_refire2 0.16667 set g_balance_arc_bolt_speed 2300 set g_balance_arc_bolt_spread 0 set g_balance_arc_burst_ammo 15 diff --git a/bal-wep-nexuiz25.cfg b/bal-wep-nexuiz25.cfg index 779104e14..2f68b17cb 100644 --- a/bal-wep-nexuiz25.cfg +++ b/bal-wep-nexuiz25.cfg @@ -766,6 +766,7 @@ set g_balance_arc_bolt_ammo 1 set g_balance_arc_bolt_bounce_count 0 set g_balance_arc_bolt_bounce_damage 0 set g_balance_arc_bolt_bounce_lifetime 0 +set g_balance_arc_bolt_count 1 set g_balance_arc_bolt_damage 25 set g_balance_arc_bolt_damageforcescale 0 set g_balance_arc_bolt_edgedamage 12.5 @@ -774,6 +775,7 @@ set g_balance_arc_bolt_health 15 set g_balance_arc_bolt_lifetime 5 set g_balance_arc_bolt_radius 65 set g_balance_arc_bolt_refire 0.16667 +set g_balance_arc_bolt_refire2 0.16667 set g_balance_arc_bolt_speed 2200 set g_balance_arc_bolt_spread 0.03 set g_balance_arc_burst_ammo 15 diff --git a/bal-wep-samual.cfg b/bal-wep-samual.cfg index 9df95a055..bb231b685 100644 --- a/bal-wep-samual.cfg +++ b/bal-wep-samual.cfg @@ -766,6 +766,7 @@ set g_balance_arc_bolt_ammo 1 set g_balance_arc_bolt_bounce_count 0 set g_balance_arc_bolt_bounce_damage 0 set g_balance_arc_bolt_bounce_lifetime 0 +set g_balance_arc_bolt_count 1 set g_balance_arc_bolt_damage 25 set g_balance_arc_bolt_damageforcescale 0 set g_balance_arc_bolt_edgedamage 12.5 @@ -774,6 +775,7 @@ set g_balance_arc_bolt_health 15 set g_balance_arc_bolt_lifetime 5 set g_balance_arc_bolt_radius 65 set g_balance_arc_bolt_refire 0.16667 +set g_balance_arc_bolt_refire2 0.16667 set g_balance_arc_bolt_speed 2200 set g_balance_arc_bolt_spread 0.03 set g_balance_arc_burst_ammo 0 diff --git a/bal-wep-xdf.cfg b/bal-wep-xdf.cfg index 8b9155abc..7f6237e37 100644 --- a/bal-wep-xdf.cfg +++ b/bal-wep-xdf.cfg @@ -766,6 +766,7 @@ set g_balance_arc_bolt_ammo 1 set g_balance_arc_bolt_bounce_count 0 set g_balance_arc_bolt_bounce_damage 0 set g_balance_arc_bolt_bounce_lifetime 0 +set g_balance_arc_bolt_count 1 set g_balance_arc_bolt_damage 25 set g_balance_arc_bolt_damageforcescale 0 set g_balance_arc_bolt_edgedamage 12.5 @@ -774,6 +775,7 @@ set g_balance_arc_bolt_health 15 set g_balance_arc_bolt_lifetime 5 set g_balance_arc_bolt_radius 65 set g_balance_arc_bolt_refire 0.033333 +set g_balance_arc_bolt_refire2 0.03333 set g_balance_arc_bolt_speed 2300 set g_balance_arc_bolt_spread 0 set g_balance_arc_burst_ammo 15 diff --git a/bal-wep-xonotic.cfg b/bal-wep-xonotic.cfg index 12f108958..69715d558 100644 --- a/bal-wep-xonotic.cfg +++ b/bal-wep-xonotic.cfg @@ -766,6 +766,7 @@ set g_balance_arc_bolt_ammo 1 set g_balance_arc_bolt_bounce_count 0 set g_balance_arc_bolt_bounce_damage 0 set g_balance_arc_bolt_bounce_lifetime 0 +set g_balance_arc_bolt_count 1 set g_balance_arc_bolt_damage 25 set g_balance_arc_bolt_damageforcescale 0 set g_balance_arc_bolt_edgedamage 12.5 @@ -774,6 +775,7 @@ set g_balance_arc_bolt_health 15 set g_balance_arc_bolt_lifetime 5 set g_balance_arc_bolt_radius 65 set g_balance_arc_bolt_refire 0.16667 +set g_balance_arc_bolt_refire2 0.16667 set g_balance_arc_bolt_speed 2300 set g_balance_arc_bolt_spread 0 set g_balance_arc_burst_ammo 15 diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index f8bad1f2b..2f9b84ed5 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -134,17 +134,13 @@ void W_Arc_Bolt_Touch(entity this, entity toucher) } } -void W_Arc_Attack_Bolt(Weapon thiswep, entity actor, .entity weaponentity) +void W_Arc_Attack_Bolt(Weapon thiswep, entity actor, .entity weaponentity, int fire) { - entity missile; - - W_DecreaseAmmo(thiswep, actor, WEP_CVAR(arc, bolt_ammo), weaponentity); - W_SetupShot(actor, weaponentity, false, 2, SND_ELECTRO_FIRE2, CH_WEAPON_A, WEP_CVAR(arc, bolt_damage), thiswep.m_id | HITTYPE_SECONDARY); W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir); - missile = new(missile); + entity missile = new(missile); missile.owner = missile.realowner = actor; missile.bot_dodge = true; IL_PUSH(g_bot_dodge, missile); @@ -179,6 +175,17 @@ void W_Arc_Attack_Bolt(Weapon thiswep, entity actor, .entity weaponentity) CSQCProjectile(missile, true, PROJECTILE_ARC_BOLT, true); MUTATOR_CALLHOOK(EditProjectile, actor, missile); + + actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1; + if(actor.(weaponentity).misc_bulletcounter == 0) + { + ATTACK_FINISHED(actor, weaponentity) = time + WEP_CVAR(arc, bolt_refire2) * W_WeaponRateFactor(actor); + weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR(arc, bolt_refire), w_ready); + } + else + { + weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR(arc, bolt_refire), W_Arc_Attack_Bolt); + } } void W_Arc_Beam_Think(entity this) @@ -671,10 +678,28 @@ METHOD(Arc, wr_think, void(entity thiswep, entity actor, .entity weaponentity, i } else if(fire & 2) { - if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR(arc, bolt_refire))) + if(weapon_prepareattack(thiswep, actor, weaponentity, true, 0)) { - W_Arc_Attack_Bolt(thiswep, actor, weaponentity); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR(arc, bolt_refire), w_ready); + if(!thiswep.wr_checkammo2(thiswep, actor, weaponentity)) + if(!(actor.items & IT_UNLIMITED_AMMO)) + { + W_SwitchWeapon_Force(actor, w_getbestweapon(actor, weaponentity), weaponentity); + w_ready(thiswep, actor, weaponentity, fire); + return; + } + float ammo_available = GetResource(actor, thiswep.ammo_type); + // We don't want to shoot 3 rounds if there's 2 left in the mag, so we'll use a fraction. + // Also keep the fraction <= 1 otherwise we'd mag dump in one burst. + float burst_fraction = min(1, ammo_available / WEP_CVAR(arc, bolt_ammo)); + int to_shoot = floor(WEP_CVAR(arc, bolt_count) * burst_fraction); + + // We also don't want to use 3 rounds if there's only 2 left. + int to_use = min(WEP_CVAR(arc, bolt_ammo), ammo_available); + W_DecreaseAmmo(thiswep, actor, to_use, weaponentity); + + // Bursting counts up to 0 from a negative. + actor.(weaponentity).misc_bulletcounter = -to_shoot; + W_Arc_Attack_Bolt(thiswep, actor, weaponentity, fire); } } diff --git a/qcsrc/common/weapons/weapon/arc.qh b/qcsrc/common/weapons/weapon/arc.qh index 8e56c10df..ec15d8db7 100644 --- a/qcsrc/common/weapons/weapon/arc.qh +++ b/qcsrc/common/weapons/weapon/arc.qh @@ -26,6 +26,7 @@ CLASS(Arc, Weapon) P(class, prefix, bolt_bounce_count, float, NONE) \ P(class, prefix, bolt_bounce_damage, float, NONE) \ P(class, prefix, bolt_bounce_lifetime, float, NONE) \ + P(class, prefix, bolt_count, float, NONE) \ P(class, prefix, bolt_damageforcescale, float, NONE) \ P(class, prefix, bolt_damage, float, NONE) \ P(class, prefix, bolt_edgedamage, float, NONE) \ @@ -34,6 +35,7 @@ CLASS(Arc, Weapon) P(class, prefix, bolt_lifetime, float, NONE) \ P(class, prefix, bolt_radius, float, NONE) \ P(class, prefix, bolt_refire, float, NONE) \ + P(class, prefix, bolt_refire2, float, NONE) \ P(class, prefix, bolt_speed, float, NONE) \ P(class, prefix, bolt_spread, float, NONE) \ P(class, prefix, beam_ammo, float, NONE) \ diff --git a/testing.cfg b/testing.cfg index 2eee874eb..b2ca934a2 100644 --- a/testing.cfg +++ b/testing.cfg @@ -7,11 +7,12 @@ alias test_crylink_sec_horizontal "settemp g_balance_crylink_secondary_linkexplo alias test_rocket_flying "settemp g_balance_devastator_remote_jump 1" alias test_arc_bounce "settemp g_balance_arc_bolt_bounce_count 3 ; settemp g_balance_arc_bolt_bounce_lifetime 0.5 ; settemp g_balance_arc_bolt_bounce_damage 1 ; settemp g_balance_arc_bolt_ammo 2" +alias test_arc_bounce_burst "settemp g_balance_arc_bolt_bounce_count 3 ; settemp g_balance_arc_bolt_bounce_lifetime 0.5 ; settemp g_balance_arc_bolt_bounce_damage 1 ; settemp g_balance_arc_bolt_ammo 3 ; settemp g_balance_arc_bolt_refire2 0.33333 ; settemp g_balance_arc_bolt_count 3" // https://forums.xonotic.org/showthread.php?tid=8192 // https://gitlab.com/xonotic/xonotic-data.pk3dir/merge_requests/736 alias test_ctf_stalemate90 "settemp g_ctf_stalemate_time 90" alias test_ctf_stalemate120 "settemp g_ctf_stalemate_time 120" -alias testing_enable "addvote test_blaster_switch ; addvote test_crylink_sec_horizontal ; addvote test_rocket_flying ; addvote test_ctf_stalemate90 ; addvote test_ctf_stalemate120 ; addvote test_arc_bounce" -alias testing_disable "delvote test_blaster_switch ; delvote test_crylink_sec_horizontal ; delvote test_rocket_flying ; delvote test_ctf_stalemate90 ; delvote test_ctf_stalemate120 ; delvote test_arc_bounce" +alias testing_enable "addvote test_blaster_switch ; addvote test_crylink_sec_horizontal ; addvote test_rocket_flying ; addvote test_ctf_stalemate90 ; addvote test_ctf_stalemate120 ; addvote test_arc_bounce ; addvote test_arc_bounce_burst" +alias testing_disable "delvote test_blaster_switch ; delvote test_crylink_sec_horizontal ; delvote test_rocket_flying ; delvote test_ctf_stalemate90 ; delvote test_ctf_stalemate120 ; delvote test_arc_bounce ; delvote test_arc_bounce_burst"