Merge remote-tracking branch 'refs/remotes/origin/sal-misc'

This commit is contained in:
TehRealSalt 2018-03-24 08:03:55 -04:00
commit a980e8b0d9

View file

@ -585,6 +585,8 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
channels[cnum].handle = I_StartSound(sfx_id, volume, sep, pitch, priority); channels[cnum].handle = I_StartSound(sfx_id, volume, sep, pitch, priority);
} }
dontplay:
if (splitscreen > 1 && listenmobj3) // Copy the sound for the third player if (splitscreen > 1 && listenmobj3) // Copy the sound for the third player
{ {
// Check to see if it is audible, and if not, modify the params // Check to see if it is audible, and if not, modify the params
@ -594,7 +596,7 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
rc = S_AdjustSoundParams(listenmobj3, origin, &volume, &sep, &pitch, sfx); rc = S_AdjustSoundParams(listenmobj3, origin, &volume, &sep, &pitch, sfx);
if (!rc) if (!rc)
goto dontplay; // Maybe the other player can hear it... goto dontplay3; // Maybe the other player can hear it...
if (origin->x == listener3.x && origin->y == listener3.y) if (origin->x == listener3.x && origin->y == listener3.y)
sep = NORM_SEP; sep = NORM_SEP;
@ -603,7 +605,7 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
// Do not play origin-less sounds for the second player. // Do not play origin-less sounds for the second player.
// The first player will be able to hear it just fine, // The first player will be able to hear it just fine,
// we really don't want it playing twice. // we really don't want it playing twice.
goto dontplay; goto dontplay3;
else else
sep = NORM_SEP; sep = NORM_SEP;
@ -639,6 +641,8 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
channels[cnum].handle = I_StartSound(sfx_id, volume, sep, pitch, priority); channels[cnum].handle = I_StartSound(sfx_id, volume, sep, pitch, priority);
} }
dontplay3:
if (splitscreen > 2 && listenmobj4) // Copy the sound for the split player if (splitscreen > 2 && listenmobj4) // Copy the sound for the split player
{ {
// Check to see if it is audible, and if not, modify the params // Check to see if it is audible, and if not, modify the params
@ -648,7 +652,7 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
rc = S_AdjustSoundParams(listenmobj4, origin, &volume, &sep, &pitch, sfx); rc = S_AdjustSoundParams(listenmobj4, origin, &volume, &sep, &pitch, sfx);
if (!rc) if (!rc)
goto dontplay; // Maybe the other player can hear it... goto dontplay4; // Maybe the other player can hear it...
if (origin->x == listener4.x && origin->y == listener4.y) if (origin->x == listener4.x && origin->y == listener4.y)
sep = NORM_SEP; sep = NORM_SEP;
@ -657,7 +661,7 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
// Do not play origin-less sounds for the second player. // Do not play origin-less sounds for the second player.
// The first player will be able to hear it just fine, // The first player will be able to hear it just fine,
// we really don't want it playing twice. // we really don't want it playing twice.
goto dontplay; goto dontplay4;
else else
sep = NORM_SEP; sep = NORM_SEP;
@ -693,7 +697,7 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
channels[cnum].handle = I_StartSound(sfx_id, volume, sep, pitch, priority); channels[cnum].handle = I_StartSound(sfx_id, volume, sep, pitch, priority);
} }
dontplay: dontplay4:
// Check to see if it is audible, and if not, modify the params // Check to see if it is audible, and if not, modify the params
if (origin && origin != listenmobj) if (origin && origin != listenmobj)
@ -1015,83 +1019,69 @@ void S_UpdateSounds(void)
|| (splitscreen > 2 && c->origin != players[fourthdisplayplayer].mo))) || (splitscreen > 2 && c->origin != players[fourthdisplayplayer].mo)))
{ {
// Whomever is closer gets the sound, but only in splitscreen. // Whomever is closer gets the sound, but only in splitscreen.
if (listenmobj && listenmobj2 && splitscreen) if (splitscreen)
{ {
const mobj_t *soundmobj = c->origin; const mobj_t *soundmobj = c->origin;
fixed_t recdist;
INT32 i, p = -1;
fixed_t dist1, dist2; for (i = 0; i < 4; i++)
dist1 = P_AproxDistance(listener.x-soundmobj->x, listener.y-soundmobj->y); {
dist2 = P_AproxDistance(listener2.x-soundmobj->x, listener2.y-soundmobj->y); fixed_t thisdist;
if (dist1 <= dist2) if (i > splitscreen)
{ break;
// Player 1 gets the sound
audible = S_AdjustSoundParams(listenmobj, c->origin, &volume, &sep, &pitch, if (i == 0 && listenmobj)
c->sfxinfo); thisdist = P_AproxDistance(listener.x-soundmobj->x, listener.y-soundmobj->y);
} else if (i == 1 && listenmobj2)
else thisdist = P_AproxDistance(listener2.x-soundmobj->x, listener2.y-soundmobj->y);
{ else if (i == 2 && listenmobj3)
// Player 2 gets the sound thisdist = P_AproxDistance(listener3.x-soundmobj->x, listener3.y-soundmobj->y);
audible = S_AdjustSoundParams(listenmobj2, c->origin, &volume, &sep, &pitch, else if (i == 3 && listenmobj4)
c->sfxinfo); thisdist = P_AproxDistance(listener4.x-soundmobj->x, listener4.y-soundmobj->y);
else
continue;
if (recdist == NULL || (thisdist != NULL && thisdist < recdist))
{
recdist = thisdist;
p = i;
}
} }
if (audible) if (p != -1)
I_UpdateSoundParams(c->handle, volume, sep, pitch);
else
S_StopChannel(cnum);
}
else if (listenmobj && listenmobj3 && splitscreen > 1) // TODO: make 3/4P compare their distances with all players, not just the first player and themselves V:
{
const mobj_t *soundmobj = c->origin;
fixed_t dist1, dist2;
dist1 = P_AproxDistance(listener.x-soundmobj->x, listener.y-soundmobj->y);
dist2 = P_AproxDistance(listener3.x-soundmobj->x, listener3.y-soundmobj->y);
if (dist1 <= dist2)
{ {
// Player 1 gets the sound if (p == 0)
audible = S_AdjustSoundParams(listenmobj, c->origin, &volume, &sep, &pitch, {
// Player 1 gets the sound
audible = S_AdjustSoundParams(listenmobj, c->origin, &volume, &sep, &pitch,
c->sfxinfo);
}
else if (p == 1)
{
// Player 2 gets the sound
audible = S_AdjustSoundParams(listenmobj2, c->origin, &volume, &sep, &pitch,
c->sfxinfo);
}
else if (p == 2)
{
// Player 3 gets the sound
audible = S_AdjustSoundParams(listenmobj3, c->origin, &volume, &sep, &pitch,
c->sfxinfo); c->sfxinfo);
} }
else else if (p == 3)
{ {
// Player 3 gets the sound // Player 4 gets the sound
audible = S_AdjustSoundParams(listenmobj3, c->origin, &volume, &sep, &pitch, audible = S_AdjustSoundParams(listenmobj4, c->origin, &volume, &sep, &pitch,
c->sfxinfo); c->sfxinfo);
} }
if (audible) if (audible)
I_UpdateSoundParams(c->handle, volume, sep, pitch); I_UpdateSoundParams(c->handle, volume, sep, pitch);
else else
S_StopChannel(cnum); S_StopChannel(cnum);
}
else if (listenmobj && listenmobj4 && splitscreen > 2)
{
const mobj_t *soundmobj = c->origin;
fixed_t dist1, dist2;
dist1 = P_AproxDistance(listener.x-soundmobj->x, listener.y-soundmobj->y);
dist2 = P_AproxDistance(listener4.x-soundmobj->x, listener4.y-soundmobj->y);
if (dist1 <= dist2)
{
// Player 1 gets the sound
audible = S_AdjustSoundParams(listenmobj, c->origin, &volume, &sep, &pitch,
c->sfxinfo);
} }
else
{
// Player 4 gets the sound
audible = S_AdjustSoundParams(listenmobj4, c->origin, &volume, &sep, &pitch,
c->sfxinfo);
}
if (audible)
I_UpdateSoundParams(c->handle, volume, sep, pitch);
else
S_StopChannel(cnum);
} }
else if (listenmobj && !splitscreen) else if (listenmobj && !splitscreen)
{ {