- fixed ambient sounds not restarting in DN3D and RR.

This commit is contained in:
Christoph Oelckers 2019-12-28 12:59:19 +01:00
parent d6c129b825
commit 2b95808d42
5 changed files with 28 additions and 12 deletions

View File

@ -52,6 +52,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "st_start.h"
#include "s_music.h"
#include "i_video.h"
#include "c_dispatch.h"
#include "glbackend/glbackend.h"
#ifndef NETCODE_DISABLE
#include "enet.h"
@ -603,7 +604,8 @@ int RunGame()
M_Init();
SetDefaultStrings();
if (g_gameType & GAMEFLAG_RR) InitRREndMap(); // this needs to be done better later
//C_DoCommand("stat sounddebug");
if (Args->CheckParm("-sounddebug"))
C_DoCommand("stat sounddebug");
if (enginePreInit())
{

View File

@ -1736,7 +1736,7 @@ extern ReverbContainer* ForcedEnvironment;
CVAR(Bool, snd_reverb, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
void FX_SetReverb(int strength)
{
if (snd_reverb)
if (snd_reverb && strength > 0)
{
// todo: optimize environments. The original "reverb" was garbage and not usable as reference.
if (strength < 64) strength = 0x1400;
@ -1744,6 +1744,7 @@ void FX_SetReverb(int strength)
else strength = 0x1900;
ForcedEnvironment = S_FindEnvironment(strength);
}
else ForcedEnvironment = nullptr;
}

View File

@ -475,8 +475,8 @@ int S_PlaySound(int num, int channel, EChanFlags flags)
int A_PlaySound(int soundNum, int spriteNum, int channel, EChanFlags flags)
{
return (unsigned)spriteNum >= MAXSPRITES ? S_PlaySound(soundNum, flags) :
S_PlaySound3D(soundNum, spriteNum, &sprite[spriteNum].pos, flags);
return (unsigned)spriteNum >= MAXSPRITES ? S_PlaySound(soundNum, channel, flags) :
S_PlaySound3D(soundNum, spriteNum, &sprite[spriteNum].pos, channel, flags);
}
void S_StopEnvSound(int sndNum, int sprNum, int channel)
@ -484,8 +484,15 @@ void S_StopEnvSound(int sndNum, int sprNum, int channel)
if (sprNum < -1 || sprNum >= MAXSPRITES) return;
if (sprNum == -1) soundEngine->StopSoundID(sndNum+1);
else if (channel == -1) soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], -1, sndNum+1);
else soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], channel, -1);
else
{
if (channel == -1) soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], -1, sndNum + 1);
else soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], channel, -1);
// StopSound kills the actor reference so this cannot be delayed until ChannelEnded gets called. At that point the actor may also not be valid anymore.
if ( S_IsAmbientSFX(sprNum) && sector[SECT(sprNum)].lotag < 3) // ST_2_UNDERWATER
actor[sprNum].t_data[0] = 0;
}
}
void S_ChangeSoundPitch(int soundNum, int spriteNum, int pitchoffset)

View File

@ -1843,7 +1843,6 @@ void CheckCommandLine(int argc, char const* const* argv, int &doTitle)
int GameInterface::app_main()
{
C_DoCommand("stat sounddebug");
int i;
//int esi = 1;
//int edi = esi;

View File

@ -473,17 +473,24 @@ int S_PlaySound(int sndnum, int channel, EChanFlags flags)
int A_PlaySound(int soundNum, int spriteNum, int channel, EChanFlags flags)
{
return (unsigned)spriteNum >= MAXSPRITES ? S_PlaySound(soundNum, flags) :
S_PlaySound3D(soundNum, spriteNum, &sprite[spriteNum].pos, flags);
return (unsigned)spriteNum >= MAXSPRITES ? S_PlaySound(soundNum, channel, flags) :
S_PlaySound3D(soundNum, spriteNum, &sprite[spriteNum].pos, channel, flags);
}
void S_StopEnvSound(int sndNum, int sprNum, int flags)
void S_StopEnvSound(int sndNum, int sprNum, int channel)
{
if (sprNum < -1 || sprNum >= MAXSPRITES) return;
if (sprNum == -1) soundEngine->StopSoundID(sndNum+1);
else if (flags == -1) soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], -1, sndNum+1);
else soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], flags, -1);
else
{
if (channel == -1) soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], -1, sndNum + 1);
else soundEngine->StopSound(SOURCE_Actor, &sprite[sprNum], channel, -1);
// StopSound kills the actor reference so this cannot be delayed until ChannelEnded gets called. At that point the actor may also not be valid anymore.
if (S_IsAmbientSFX(sprNum) && sector[SECT(sprNum)].lotag < 3) // ST_2_UNDERWATER
actor[sprNum].t_data[0] = 0;
}
}
void S_ChangeSoundPitch(int soundNum, int spriteNum, int pitchoffset)