diff --git a/src/s_sound.c b/src/s_sound.c index 91d857464..8f2e4a359 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -530,7 +530,9 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume) // Initialize sound parameters pitch = NORM_PITCH; priority = NORM_PRIORITY; - volume /= (splitscreen+1); + + if (origin) + volume = FixedDiv(volume<>FRACBITS; if (splitscreen && listenmobj2) // Copy the sound for the split player { @@ -1008,10 +1010,13 @@ void S_UpdateSounds(void) if (I_SoundIsPlaying(c->handle)) { // initialize parameters - volume = 255/(splitscreen+1); // 8 bits internal volume precision + volume = 255; // 8 bits internal volume precision pitch = NORM_PITCH; sep = NORM_SEP; + if (c->origin) + volume = FixedDiv(volume<>FRACBITS; + // check non-local sounds for distance clipping // or modify their params if (c->origin && ((c->origin != players[consoleplayer].mo) @@ -1326,7 +1331,7 @@ INT32 S_AdjustSoundParams(const mobj_t *listener, const mobj_t *source, INT32 *v *vol = (15 * ((S_CLIPPING_DIST - approx_dist)>>FRACBITS)) / S_ATTENUATOR; } - *vol /= (splitscreen+1); + *vol = FixedDiv((*vol)<>FRACBITS; return (*vol > 0); }