From 15e93d619b8c2a346badd59ebf0207a55bc97130 Mon Sep 17 00:00:00 2001 From: Xylemon Date: Tue, 25 Apr 2023 23:51:18 -0700 Subject: [PATCH] weapon_gauss: Secondary fire improvements - move around velocity code so it's predicted and simpler, since we can't read gamerules here a simple MP check will do for now @eukara - make sure we fire immediately if we release secondary fire after first spin cycle, with these changes the gauss should be nearly identical to Half-Life, minus the OP damage @xylemon --- src/shared/w_gauss.qc | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/src/shared/w_gauss.qc b/src/shared/w_gauss.qc index 018537f..a6f8742 100644 --- a/src/shared/w_gauss.qc +++ b/src/shared/w_gauss.qc @@ -137,28 +137,6 @@ void w_gauss_fire(player pl, int one) sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); } - HLGameRules rules = (HLGameRules) g_grMode; - - /* You should not be able to fling yourself in single player */ - if (rules.IsMultiplayer() == true) { - if (one) { - return; - } else { - int iForce = (int)rint((bound(5, pl.ammo_gauss_volume, 10) * 20)); - - /* Apply force */ - if (pl.flags & FL_ONGROUND) { - pl.velocity += v_forward * (-iForce * 2); - } else { - pl.velocity += v_forward * (-iForce * 4); - } - } - } else { - if (one) { - return; - } - } - // reflection equation: Weapons_MakeVectors(pl); vecDir = v_forward; @@ -226,6 +204,18 @@ void w_gauss_release(player pl) return; } + /* if multiplayer then always fling the player + * FIXME need a check for coop */ + if (serverkeyfloat("sv_playerslots") > 1) { + if (pl.mode_tempstate != GAUSSTATE_IDLE) { + int iForce = (int)rint((bound(5, pl.ammo_gauss_volume, 10) * 20)); + Weapons_MakeVectors(pl); + + /* Apply force */ + pl.velocity += v_forward * (-iForce * 4); + } + } + if (pl.mode_tempstate == GAUSSTATE_REVVINGUP) { pl.w_attack_next = 0.0f; pl.w_idle_next = 0.5f; @@ -321,7 +311,7 @@ void w_gauss_secondary(player pl) if (pl.mode_tempstate == GAUSSTATE_REVVINGUP) { Weapons_ViewAnimation(pl, GAUSS_SPIN); pl.mode_tempstate = GAUSSTATE_FULL; - pl.w_idle_next = 0.5f; + pl.w_idle_next = 0.0f; // fire immediately if we let go pl.w_attack_next = 0.5f; } else if (!pl.mode_tempstate) { Weapons_ViewAnimation(pl, GAUSS_SPINUP); @@ -329,7 +319,7 @@ void w_gauss_secondary(player pl) #ifdef SERVER sound(pl, CHAN_WEAPON, "ambience/pulsemachine.wav", 2, ATTN_NORM); #endif - pl.w_idle_next = 0.5f; + pl.w_idle_next = 0.5f; // delay if we let go pl.w_attack_next = 0.5f; } }