From 27b6cb2f723fd8137f40e1b29306e3005666b473 Mon Sep 17 00:00:00 2001 From: nashmuhandes Date: Thu, 23 Jan 2025 23:52:02 +0800 Subject: [PATCH] Allow passing sound volume to PlayBounceSound in ZScript --- src/playsim/actor.h | 2 +- src/playsim/p_map.cpp | 4 ++-- src/playsim/p_mobj.cpp | 13 +++++++------ src/scripting/vmthunks_actors.cpp | 3 ++- wadsrc/static/zscript/actors/actor.zs | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/playsim/actor.h b/src/playsim/actor.h index 586ec377c8..5185172622 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -863,7 +863,7 @@ public: void Howl (); // plays bouncing sound - void PlayBounceSound(bool onfloor); + void PlayBounceSound(bool onfloor, double volume); // plays pushing sound void PlayPushSound(); diff --git a/src/playsim/p_map.cpp b/src/playsim/p_map.cpp index d10a193191..aaa45e4dc6 100644 --- a/src/playsim/p_map.cpp +++ b/src/playsim/p_map.cpp @@ -3753,7 +3753,7 @@ bool P_BounceActor(AActor *mo, AActor *BlockingMobj, bool ontop) if (fabs(speed) < EQUAL_EPSILON) speed = 0; mo->Angles.Yaw = angle; mo->VelFromAngle(speed); - mo->PlayBounceSound(true); + mo->PlayBounceSound(true, 1.0); } else { @@ -3781,7 +3781,7 @@ bool P_BounceActor(AActor *mo, AActor *BlockingMobj, bool ontop) mo->Vel *= mo->bouncefactor; } - mo->PlayBounceSound(true); + mo->PlayBounceSound(true, 1.0); if (mo->BounceFlags & BOUNCE_MBF) // Bring it to rest below a certain speed { if (fabs(mo->Vel.Z) < mo->Mass * mo->GetGravity() / 64) diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index 09c97d2ff4..5c31523250 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -1708,7 +1708,7 @@ DEFINE_ACTION_FUNCTION(AActor, ExplodeMissile) } -void AActor::PlayBounceSound(bool onfloor) +void AActor::PlayBounceSound(bool onfloor, double volume) { if (!onfloor && (BounceFlags & BOUNCE_NoWallSound)) { @@ -1717,17 +1717,18 @@ void AActor::PlayBounceSound(bool onfloor) if (!(BounceFlags & BOUNCE_Quiet)) { + volume = clamp(volume, 0.0, 1.0); if (BounceFlags & BOUNCE_UseSeeSound) { - S_Sound (this, CHAN_VOICE, 0, SeeSound, 1, ATTN_IDLE); + S_Sound (this, CHAN_VOICE, 0, SeeSound, (float)volume, ATTN_IDLE); } else if (onfloor || !WallBounceSound.isvalid()) { - S_Sound (this, CHAN_VOICE, 0, BounceSound, 1, ATTN_IDLE); + S_Sound (this, CHAN_VOICE, 0, BounceSound, (float)volume, ATTN_IDLE); } else { - S_Sound (this, CHAN_VOICE, 0, WallBounceSound, 1, ATTN_IDLE); + S_Sound (this, CHAN_VOICE, 0, WallBounceSound, (float)volume, ATTN_IDLE); } } } @@ -1841,7 +1842,7 @@ bool AActor::FloorBounceMissile (secplane_t &plane, bool is3DFloor) AngleFromVel(); } - PlayBounceSound(true); + PlayBounceSound(true, 1.0); // Set bounce state if (BounceFlags & BOUNCE_UseBounceState) @@ -2321,7 +2322,7 @@ static double P_XYMovement (AActor *mo, DVector2 scroll) // Struck a wall if (P_BounceWall (mo)) { - mo->PlayBounceSound(false); + mo->PlayBounceSound(false, 1.0); return Oldfloorz; } } diff --git a/src/scripting/vmthunks_actors.cpp b/src/scripting/vmthunks_actors.cpp index 2cf04fd80a..0180255776 100644 --- a/src/scripting/vmthunks_actors.cpp +++ b/src/scripting/vmthunks_actors.cpp @@ -1860,8 +1860,9 @@ DEFINE_ACTION_FUNCTION(AActor, PlayBounceSound) { PARAM_SELF_PROLOGUE(AActor); PARAM_BOOL(onFloor); + PARAM_FLOAT(volume); - self->PlayBounceSound(onFloor); + self->PlayBounceSound(onFloor, volume); return 0; } diff --git a/wadsrc/static/zscript/actors/actor.zs b/wadsrc/static/zscript/actors/actor.zs index edd9d48e1d..2d44000ab5 100644 --- a/wadsrc/static/zscript/actors/actor.zs +++ b/wadsrc/static/zscript/actors/actor.zs @@ -871,7 +871,7 @@ class Actor : Thinker native native bool BounceActor(Actor blocking, bool onTop); native bool BounceWall(Line l = null); native bool BouncePlane(readonly plane, bool is3DFloor = false); - native void PlayBounceSound(bool onFloor); + native void PlayBounceSound(bool onFloor, double volume = 1.0); native bool ReflectOffActor(Actor blocking); clearscope double PitchTo(Actor target, double zOfs = 0, double targZOfs = 0, bool absolute = false) const