From 401c260f9c288178814206f1990167743d99de3f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 10 Oct 2023 20:10:58 +0200 Subject: [PATCH] cleanup of Blood sound playing interface --- source/games/blood/src/actor.cpp | 12 ---------- source/games/blood/src/sfx.cpp | 21 +++++++++------- source/games/blood/src/sound.h | 15 +++++++++--- source/games/blood/src/vmexports.cpp | 24 +++++++++++++++++-- .../static/zscript/games/blood/bloodactor.zs | 1 + 5 files changed, 48 insertions(+), 25 deletions(-) diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index c802a4862..89bde0e3e 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -1947,18 +1947,6 @@ static int checkDamageType(DBloodActor* actor, DAMAGE_TYPE damageType) break; } break; - case kDamageFall: - switch (actor->GetType()) - { - case kDudeCultistTommy: - case kDudeCultistShotgun: - nSeq = 1; - break; - default: - nSeq = 1; - break; - } - break; default: nSeq = 1; break; diff --git a/source/games/blood/src/sfx.cpp b/source/games/blood/src/sfx.cpp index a629cd744..d6c847915 100644 --- a/source/games/blood/src/sfx.cpp +++ b/source/games/blood/src/sfx.cpp @@ -181,11 +181,9 @@ void sfxPlay3DSectorSound(const DVector3& pos, int soundId, sectortype* pSector) // //--------------------------------------------------------------------------- -void sfxPlay3DSoundVolume(DBloodActor* pActor, int soundId, int playchannel, int playflags, int pitch, int volume) +void sfxPlay3DSoundVolume(DBloodActor* pActor, FSoundID sid, int playchannel, int playflags, int pitch, int volume) { - if (!SoundEnabled() || soundId <= 0 || !pActor) return; - auto sid = soundEngine->FindSoundByResID(soundId); - if (!sid.isvalid()) return; + if (!SoundEnabled() || !sid.isvalid() || !pActor) return; auto svec = GetSoundPos(pActor->spr.pos); @@ -224,11 +222,18 @@ void sfxPlay3DSoundVolume(DBloodActor* pActor, int soundId, int playchannel, int soundEngine->StartSound(SOURCE_Actor, pActor, &svec, playchannel, flags, sid, volume * (0.8f / 80.f), attenuation, nullptr, pitch / 65536.f); } -void sfxPlay3DSound(DBloodActor* pActor, int soundId, int a3, int a4) -{ - sfxPlay3DSoundVolume(pActor, soundId, a3, a4, -1); -} +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- +void sfxPlay3DSoundVolume(DBloodActor* pActor, int soundId, int playchannel, int playflags, int pitch, int volume) +{ + if (soundId <= 0) return; + auto sid = soundEngine->FindSoundByResID(soundId); + if (sid.isvalid()) sfxPlay3DSoundVolume(pActor, sid, playchannel, playflags, pitch, volume); +} //--------------------------------------------------------------------------- // diff --git a/source/games/blood/src/sound.h b/source/games/blood/src/sound.h index 8b23c2e7e..ce4ecd41d 100644 --- a/source/games/blood/src/sound.h +++ b/source/games/blood/src/sound.h @@ -29,9 +29,18 @@ void sndTerm(void); void sndInit(void); void sfxPlay3DSectorSound(const DVector3& pos, int soundId, sectortype* pSector); -void sfxPlay3DSound(DBloodActor* pSprite, int soundId, int a3 = -1, int a4 = 0); -void sfxPlay3DSoundVolume(DBloodActor* pSprite, int soundId, int a3 = -1, int a4 = 0, int pitch = 0, int volume = 0); -void sfxKill3DSound(DBloodActor* pSprite, int a2 = -1, int a3 = -1); +void sfxPlay3DSoundVolume(DBloodActor* pActor, FSoundID sid, int playchannel = -1, int playflags = 0, int pitch = 0, int volume = 0); +void sfxPlay3DSoundVolume(DBloodActor* pActor, int soundId, int playchannel = -1, int playflags = 0, int pitch = 0, int volume = 0); + +inline void sfxPlay3DSound(DBloodActor* pActor, FSoundID soundId, int a3 = -1, int a4 = 0) +{ + sfxPlay3DSoundVolume(pActor, soundId, a3, a4, 0, -1); +} +inline void sfxPlay3DSound(DBloodActor* pActor, int soundId, int a3 = -1, int a4 = 0) +{ + sfxPlay3DSoundVolume(pActor, soundId, a3, a4, 0, -1); +} +void sfxKill3DSound(DBloodActor* pActor, int a2 = -1, int a3 = -1); void sfxKillAllSounds(void); void sfxSetReverb(bool toggle); void sfxSetReverb2(bool toggle); diff --git a/source/games/blood/src/vmexports.cpp b/source/games/blood/src/vmexports.cpp index d8dc8a362..0c516cee0 100644 --- a/source/games/blood/src/vmexports.cpp +++ b/source/games/blood/src/vmexports.cpp @@ -327,13 +327,33 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBloodActor, HitScan, bloodactor_HitScan) ACTION_RETURN_INT(bloodactor_HitScan(self, z, x, y, zz, clipmask, clipdist)); } -DEFINE_ACTION_FUNCTION_NATIVE(DBloodActor, play3DSoundID, sfxPlay3DSound) +void blood_play3DSoundID(DBloodActor* actor, int snd, int chn, int flags) +{ + sfxPlay3DSoundVolume(actor, snd, chn, flags, 0, -1); +} + +DEFINE_ACTION_FUNCTION_NATIVE(DBloodActor, play3DSoundID, blood_play3DSoundID) { PARAM_SELF_PROLOGUE(DBloodActor); PARAM_INT(sound); PARAM_INT(chan); PARAM_INT(flags); - sfxPlay3DSound(self, sound, chan, flags); + blood_play3DSoundID(self, sound, chan, flags); + return 0; +} + +void blood_play3DSound(DBloodActor* actor, int snd, int chn, int flags) +{ + sfxPlay3DSoundVolume(actor, FSoundID::fromInt(snd), chn, flags, 0, -1); +} + +DEFINE_ACTION_FUNCTION_NATIVE(DBloodActor, play3DSound, blood_play3DSound) +{ + PARAM_SELF_PROLOGUE(DBloodActor); + PARAM_INT(sound); + PARAM_INT(chan); + PARAM_INT(flags); + blood_play3DSound(self, sound, chan, flags); return 0; } diff --git a/wadsrc/static/zscript/games/blood/bloodactor.zs b/wadsrc/static/zscript/games/blood/bloodactor.zs index c770f8abf..2bae0d369 100644 --- a/wadsrc/static/zscript/games/blood/bloodactor.zs +++ b/wadsrc/static/zscript/games/blood/bloodactor.zs @@ -361,6 +361,7 @@ native void callbackMissileBurst(); native int HitScan(double z, vector3 xyz, int clipmask, double clipdist); native void impactMissile(int hitcode); + native void play3DSound(Sound soundId, int a3 = -1, int a4 = 0); native void play3DSoundID(int soundId, int a3 = -1, int a4 = 0); native void seqSpawnID(int seqID, VMFunction seqCallbackID);