From 4bbc308eaf9ba829cc185a5e90f75eb5c9d8dabb Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sat, 28 Sep 2019 21:24:37 +0200 Subject: [PATCH] Fix the "weapon sounds stuck playing after death/drop" problem at the core UTWeapon class. --- zscript/chainsaw.zsc | 3 ++- zscript/impacthammer.zsc | 5 ----- zscript/pulsegun.zsc | 2 -- zscript/utcommon.zsc | 9 ++++++++- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/zscript/chainsaw.zsc b/zscript/chainsaw.zsc index 72a1d14..1651db0 100644 --- a/zscript/chainsaw.zsc +++ b/zscript/chainsaw.zsc @@ -219,7 +219,8 @@ Class UTChainsaw : UTWeapon override void DetachFromOwner() { if ( Owner ) Owner.A_StopSound(CHAN_6); - A_PlaySound("chainsaw/lower",CHAN_6); + if ( !Ammo1 || (Ammo1.Amount > 0) ) + A_PlaySound("chainsaw/lower",CHAN_6); Super.DetachFromOwner(); } action void A_Vibrate( bool bAlt = false ) diff --git a/zscript/impacthammer.zsc b/zscript/impacthammer.zsc index 65e2a29..4df4e52 100644 --- a/zscript/impacthammer.zsc +++ b/zscript/impacthammer.zsc @@ -199,11 +199,6 @@ Class ImpactHammer : UTWeapon s.scale *= 0.4; } } - override void DetachFromOwner() - { - if ( Owner ) Owner.A_StopSound(CHAN_WEAPON); - Super.DetachFromOwner(); - } Default { diff --git a/zscript/pulsegun.zsc b/zscript/pulsegun.zsc index 3bdd9b7..5ee4be1 100644 --- a/zscript/pulsegun.zsc +++ b/zscript/pulsegun.zsc @@ -673,12 +673,10 @@ Class PulseGun : UTWeapon { Super.OwnerDied(); if ( beam ) beam.Destroy(); - Owner.A_StopSound(CHAN_WEAPON); } override void DetachFromOwner() { if ( beam ) beam.Destroy(); - Owner.A_StopSound(CHAN_WEAPON); Super.DetachFromOwner(); } override void OnDestroy() diff --git a/zscript/utcommon.zsc b/zscript/utcommon.zsc index 78a5817..15bfbe8 100644 --- a/zscript/utcommon.zsc +++ b/zscript/utcommon.zsc @@ -1336,10 +1336,17 @@ Class UTWeapon : Weapon if ( amp ) amp.FireEffect(); } + override void DetachFromOwner() + { + Owner.A_StopSound(CHAN_WEAPON); + Super.DetachFromOwner(); + } override void OwnerDied() { - Super.OwnerDied(); + if ( Owner.player && (Owner.player.ReadyWeapon == self) ) + Owner.A_StopSound(CHAN_WEAPON); A_ClearRefire(); + Super.OwnerDied(); } override bool HandlePickup( Inventory item )