From 51e9a7d85180616a1a66511d1af59b29f18196cd Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Fri, 5 Aug 2022 14:10:04 -0700 Subject: [PATCH] Shared: WEAPON_PYTHON, WEAPON_EGON, WEAPON_GAUSS, WEAPON_MP5, WEAPON_SHOTGUN and WEAPON_SNARK no longer allow for firing underwater. --- src/client/hud_weaponselect.qc | 7 +++-- src/shared/w_egon.qc | 5 ++-- src/shared/w_gauss.qc | 35 +++++++++++++++++------ src/shared/w_mp5.qc | 27 +++++++++++------ src/shared/w_python.qc | 13 ++++++--- src/shared/w_shotgun.qc | 23 +++++++++++++++ src/shared/w_snark.qc | 10 +++---- zpak001.pk3dir/sound/weapons_valve.sndshd | 17 +++++++++++ 8 files changed, 104 insertions(+), 33 deletions(-) diff --git a/src/client/hud_weaponselect.qc b/src/client/hud_weaponselect.qc index c0a6fcd..907bdde 100644 --- a/src/client/hud_weaponselect.qc +++ b/src/client/hud_weaponselect.qc @@ -82,9 +82,12 @@ void HUD_DrawWeaponSelect_Trigger(void) { player pl = (player)pSeat->m_ePlayer; + + if (pl.activeweapon != pSeat->m_iHUDWeaponSelected) + sendevent("PlayerSwitchWeapon", "i", pSeat->m_iHUDWeaponSelected); + pl.activeweapon = pSeat->m_iHUDWeaponSelected; - - sendevent("PlayerSwitchWeapon", "i", pSeat->m_iHUDWeaponSelected); + sound(pSeat->m_ePlayer, CHAN_ITEM, "common/wpn_select.wav", 0.5f, ATTN_NONE); pSeat->m_iHUDWeaponSelected = pSeat->m_flHUDWeaponSelectTime = 0; } diff --git a/src/shared/w_egon.qc b/src/shared/w_egon.qc index 8be8cd9..2751393 100644 --- a/src/shared/w_egon.qc +++ b/src/shared/w_egon.qc @@ -115,12 +115,11 @@ void w_egon_release(player pl); void w_egon_primary(player pl) { - if (pl.w_attack_next > 0.0) { + if (pl.w_attack_next > 0.0) return; - } /* Ammo check */ - if (pl.ammo_uranium <= 0) { + if ((pl.ammo_uranium <= 0) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { w_egon_release(pl); return; } diff --git a/src/shared/w_gauss.qc b/src/shared/w_gauss.qc index f175810..26c2072 100644 --- a/src/shared/w_gauss.qc +++ b/src/shared/w_gauss.qc @@ -48,6 +48,7 @@ void w_gauss_precache(void) precache_sound("weapons/electro5.wav"); precache_sound("weapons/electro6.wav"); precache_sound("weapons/gauss2.wav"); + Sound_Precache("weapon_gauss.empty"); #else precache_sound("ambience/pulsemachine.wav"); precache_model("models/v_gauss.mdl"); @@ -116,7 +117,7 @@ void w_gauss_fire(player pl, int one) } if (trace_ent.takedamage == DAMAGE_YES) { - Damage_Apply(trace_ent, self, iDamage, WEAPON_GAUSS, DMG_ELECTRO); + Damage_Apply(trace_ent, pl, iDamage, WEAPON_GAUSS, DMG_ELECTRO); sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); } @@ -144,7 +145,7 @@ void w_gauss_fire(player pl, int one) traceline(src, endpos, FALSE, pl); iLoop--; if (trace_ent.takedamage == DAMAGE_YES) { - Damage_Apply(trace_ent, self, iDamage, WEAPON_GAUSS, DMG_ELECTRO); + Damage_Apply(trace_ent, pl, iDamage, WEAPON_GAUSS, DMG_ELECTRO); sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); } } @@ -153,12 +154,17 @@ void w_gauss_fire(player pl, int one) void w_gauss_primary(player pl) { - if (pl.w_attack_next > 0.0) { + if (pl.w_attack_next > 0.0) + return; + if (pl.gflags & GF_SEMI_TOGGLED) return; - } /* Ammo check */ - if (pl.ammo_uranium < 2) { + if ((pl.ammo_uranium < 2) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_gauss.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; return; } @@ -171,7 +177,7 @@ void w_gauss_primary(player pl) pl.ammo_uranium -= 2; - if (self.flags & FL_CROUCHING) + if (pl.flags & FL_CROUCHING) Animation_PlayerTop(pl, ANIM_CR_SHOOTGAUSS, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTGAUSS, 0.43f); @@ -198,7 +204,7 @@ void w_gauss_release(player pl) } else if (pl.mode_tempstate == 2) { Weapons_ViewAnimation(pl, GAUSS_FIRE1); - if (self.flags & FL_CROUCHING) + if (pl.flags & FL_CROUCHING) Animation_PlayerTop(pl, ANIM_CR_SHOOTGAUSS, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTGAUSS, 0.43f); @@ -235,9 +241,20 @@ void w_gauss_release(player pl) void w_gauss_secondary(player pl) { - if (pl.w_attack_next) { + if (pl.w_attack_next > 0.0) + return; + if (pl.gflags & GF_SEMI_TOGGLED) + return; + + /* Ammo check */ + if ((pl.ammo_uranium <= 0) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_gauss.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; return; } + pl.w_attack_next = 0.1f; /* Ammo check */ @@ -311,7 +328,7 @@ void w_gauss_crosshair(player pl) float w_gauss_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS; } void w_gauss_hudpic(player pl, int selected, vector pos, float a) diff --git a/src/shared/w_mp5.qc b/src/shared/w_mp5.qc index 4534b5f..004b9d1 100644 --- a/src/shared/w_mp5.qc +++ b/src/shared/w_mp5.qc @@ -89,6 +89,7 @@ w_mp5_precache(void) #ifdef SERVER Sound_Precache("weapon_mp5.shoot"); Sound_Precache("weapon_mp5.gl"); + Sound_Precache("weapon_mp5.empty"); precache_model("models/w_9mmar.mdl"); precache_model("models/grenade.mdl"); #else @@ -162,13 +163,17 @@ w_mp5_holster(player pl) void w_mp5_primary(player pl) { - - if (pl.w_attack_next > 0.0) { + if (pl.w_attack_next > 0.0) + return; + if (pl.gflags & GF_SEMI_TOGGLED) return; - } /* Ammo check */ - if (pl.mp5_mag <= 0) { + if ((pl.mp5_mag <= 0) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; return; } @@ -216,13 +221,17 @@ w_mp5_primary(player pl) void w_mp5_secondary(player pl) { - - if (pl.w_attack_next > 0.0) { + if (pl.w_attack_next > 0.0) + return; + if (pl.gflags & GF_SEMI_TOGGLED) return; - } - - if (pl.ammo_m203_grenade <= 0) { + /* Ammo check */ + if ((pl.ammo_m203_grenade <= 0) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; return; } diff --git a/src/shared/w_python.qc b/src/shared/w_python.qc index 18b7f12..8058da2 100644 --- a/src/shared/w_python.qc +++ b/src/shared/w_python.qc @@ -51,6 +51,7 @@ w_python_precache(void) { #ifdef SERVER Sound_Precache("weapon_357.shoot"); + Sound_Precache("weapon_357.empty"); Sound_Precache("weapon_357.reload"); precache_model("models/w_357.mdl"); #else @@ -127,13 +128,17 @@ w_python_holster(player pl) void w_python_primary(player pl) { - - if (pl.w_attack_next > 0.0) { + if (pl.w_attack_next > 0.0) + return; + if (pl.gflags & GF_SEMI_TOGGLED) return; - } /* Ammo check */ - if (pl.python_mag <= 0) { + if ((pl.python_mag <= 0) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_357.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; return; } diff --git a/src/shared/w_shotgun.qc b/src/shared/w_shotgun.qc index deea6c5..c921f0e 100644 --- a/src/shared/w_shotgun.qc +++ b/src/shared/w_shotgun.qc @@ -82,6 +82,7 @@ void w_shotgun_precache(void) { #ifdef SERVER Sound_Precache("weapon_shotgun.single"); + Sound_Precache("weapon_shotgun.empty"); Sound_Precache("weapon_shotgun.double"); Sound_Precache("weapon_shotgun.reload"); Sound_Precache("weapon_shotgun.cock"); @@ -177,6 +178,17 @@ w_shotgun_reload(player pl) void w_shotgun_primary(player pl) { + if (pl.gflags & GF_SEMI_TOGGLED) + return; + + /* Ammo check */ + if ((pl.shotgun_mag <= 0) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_shotgun.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; + return; + } if (pl.w_attack_next) { w_shotgun_release(pl); @@ -232,6 +244,17 @@ w_shotgun_primary(player pl) void w_shotgun_secondary(player pl) { + if (pl.gflags & GF_SEMI_TOGGLED) + return; + + /* Ammo check */ + if ((pl.shotgun_mag <= 1) || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { +#ifdef SERVER + Sound_Play(pl, CHAN_WEAPON, "weapon_shotgun.empty"); +#endif + pl.gflags |= GF_SEMI_TOGGLED; + return; + } if (pl.w_attack_next) { w_shotgun_release(pl); diff --git a/src/shared/w_snark.qc b/src/shared/w_snark.qc index 2d3148f..c6250ff 100644 --- a/src/shared/w_snark.qc +++ b/src/shared/w_snark.qc @@ -184,14 +184,12 @@ void w_snark_deploy(void) void w_snark_primary(player pl) { - if (pl.w_attack_next > 0.0) { + if (pl.WaterLevel() >= WATERLEVEL_SUBMERGED) return; - } - - /* Ammo check */ - if (pl.ammo_snark <= 0) { + if (pl.w_attack_next > 0.0) + return; + if (pl.ammo_snark <= 0) return; - } pl.ammo_snark--; diff --git a/zpak001.pk3dir/sound/weapons_valve.sndshd b/zpak001.pk3dir/sound/weapons_valve.sndshd index 54f0929..3daf5b0 100644 --- a/zpak001.pk3dir/sound/weapons_valve.sndshd +++ b/zpak001.pk3dir/sound/weapons_valve.sndshd @@ -7,6 +7,10 @@ weapon_357.shoot sample weapons/357_shot2.wav distshader weapon_357.shoot_dist } +weapon_357.empty +{ + sample weapons/357_cock1.wav +} weapon_357.shoot_dist { volume 0.1 @@ -115,6 +119,10 @@ weapon_mp5.gl alerts sample weapons/glauncher.wav } +weapon_mp5.empty +{ + sample weapons/357_cock1.wav +} weapon_satchel.bounce { @@ -159,6 +167,10 @@ weapon_shotgun.double sample weapons/dbarrel1.wav distshader weapon_shotgun.distance } +weapon_shotgun.empty +{ + sample weapons/357_cock1.wav +} weapon_shotgun.distance { volume 0.15 @@ -198,3 +210,8 @@ weapon_snark.hunt sample squeek/sqk_hunt2.wav sample squeek/sqk_hunt3.wav } + +weapon_gauss.empty +{ + sample weapons/357_cock1.wav +}