diff --git a/engine/Quake/q_sound.h b/engine/Quake/q_sound.h index f9f5018..1230917 100644 --- a/engine/Quake/q_sound.h +++ b/engine/Quake/q_sound.h @@ -189,6 +189,10 @@ extern portable_samplepair_t s_rawsamples[MAX_RAW_SAMPLES]; extern cvar_t bgmvolume; +extern cvar_t nosound; +extern cvar_t ambient_level; +extern cvar_t ambient_fade; + void S_LocalSound (const char *name); sfxcache_t *S_LoadSound (sfx_t *s); diff --git a/engine/Quake/snd_dma.c b/engine/Quake/snd_dma.c index a2e9945..3f5b065 100644 --- a/engine/Quake/snd_dma.c +++ b/engine/Quake/snd_dma.c @@ -76,7 +76,13 @@ static qboolean snd_initialized = false; cvar_t bgmvolume = {"bgmvolume", "1", CVAR_ARCHIVE}; cvar_t sfxvolume = {"volume", "0.7", CVAR_ARCHIVE}; -cvar_t precache = {"precache", "1", CVAR_NONE}; +cvar_t precache = { "precache", "1", CVAR_NONE }; +cvar_t nosound = { "nosound", "0", CVAR_NONE }; +cvar_t ambient_level = { "ambient_level", "0.3", CVAR_NONE }; +cvar_t ambient_fade = { "ambient_fade", "100", CVAR_NONE }; + +#ifndef USE_FMOD + cvar_t loadas8bit = {"loadas8bit", "0", CVAR_NONE}; cvar_t sndspeed = {"sndspeed", "11025", CVAR_NONE}; @@ -91,15 +97,10 @@ cvar_t snd_mixspeed = {"snd_mixspeed", "44100", CVAR_NONE}; cvar_t snd_filterquality = {"snd_filterquality", SND_FILTERQUALITY_DEFAULT, CVAR_NONE}; -static cvar_t nosound = {"nosound", "0", CVAR_NONE}; -static cvar_t ambient_level = {"ambient_level", "0.3", CVAR_NONE}; -static cvar_t ambient_fade = {"ambient_fade", "100", CVAR_NONE}; static cvar_t snd_noextraupdate = {"snd_noextraupdate", "0", CVAR_NONE}; static cvar_t snd_show = {"snd_show", "0", CVAR_NONE}; static cvar_t _snd_mixahead = {"_snd_mixahead", "0.1", CVAR_ARCHIVE}; -#ifndef USE_FMOD - static void S_SoundInfo_f (void) { if (!sound_started || !shm) @@ -177,16 +178,19 @@ void S_Init (void) Cvar_RegisterVariable(&nosound); Cvar_RegisterVariable(&sfxvolume); Cvar_RegisterVariable(&precache); - Cvar_RegisterVariable(&loadas8bit); Cvar_RegisterVariable(&bgmvolume); Cvar_RegisterVariable(&ambient_level); Cvar_RegisterVariable(&ambient_fade); + +#ifndef USE_FMOD + Cvar_RegisterVariable(&loadas8bit); Cvar_RegisterVariable(&snd_noextraupdate); Cvar_RegisterVariable(&snd_show); Cvar_RegisterVariable(&_snd_mixahead); Cvar_RegisterVariable(&sndspeed); Cvar_RegisterVariable(&snd_mixspeed); Cvar_RegisterVariable(&snd_filterquality); +#endif // USE_FMOD if (safemode || COM_CheckParm("-nosound")) return; @@ -199,7 +203,6 @@ void S_Init (void) Cmd_AddCommand("stopsound", S_StopAllSoundsC); Cmd_AddCommand("soundlist", S_SoundList); Cmd_AddCommand("soundinfo", S_SoundInfo_f); -#endif // USE_FMOD i = COM_CheckParm("-sndspeed"); if (i && i < com_argc-1) @@ -219,7 +222,6 @@ void S_Init (void) Con_Printf ("loading all sounds as 8bit\n"); } -#ifndef USE_FMOD Cvar_SetCallback(&sfxvolume, SND_Callback_sfxvolume); Cvar_SetCallback(&snd_filterquality, &SND_Callback_snd_filterquality); @@ -235,6 +237,7 @@ void S_Init (void) if (sound_started == 0) return; +#ifndef USE_FMOD // provides a tick sound until washed clean // if (shm->buffer) // shm->buffer[4] = shm->buffer[5] = 0x7f; // force a pop for debugging @@ -243,6 +246,7 @@ void S_Init (void) ambient_sfx[AMBIENT_SKY] = S_PrecacheSound ("ambience/wind2.wav"); S_CodecInit (); +#endif // USE_FMOD S_StopAllSounds (true); } diff --git a/engine/Quake/snd_fmod.c b/engine/Quake/snd_fmod.c index 731bbd0..70ad1fd 100644 --- a/engine/Quake/snd_fmod.c +++ b/engine/Quake/snd_fmod.c @@ -112,8 +112,7 @@ void S_Startup(void) return; } - // Could use System::set3DRolloffCallback to set up a (attenuation / sound_nominal_clip_dist) distance multiplier (would need to use ChannelControl::setUserData to hold ref to attn value) - // Note: sound_nominal_clip_dist could be dynamic to allow a small sound 'bubble' for local multiplayer + // Set up custom distance attenuation system FMOD_ChannelGroup_Set3DMinMaxDistance(sfx_channelGroup, 0.0f, sound_nominal_clip_dist); FMOD_System_Set3DRolloffCallback(fmod_system, &SND_FMOD_Attenuation); @@ -268,7 +267,8 @@ void S_StartSound(int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float f if (!fmod_system || !sfx) return; - // TODO: check nosound cvar + if (nosound.value) + return; S_LoadSound(sfx); if (!sfx->sound)