mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-14 08:30:58 +00:00
Hacks for the splitscreen mod: play sounds from both players.
The sound distance is the minimum of the two. Both point sources as well as MUSICANDSFX ambient sound is handled. git-svn-id: https://svn.eduke32.com/eduke32@2885 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
af05fe18be
commit
8039db5ff2
2 changed files with 61 additions and 11 deletions
|
@ -1217,7 +1217,6 @@ BOLT:
|
||||||
ACTOR_STATIC void G_MoveFX(void)
|
ACTOR_STATIC void G_MoveFX(void)
|
||||||
{
|
{
|
||||||
int32_t i = headspritestat[STAT_FX], j, nexti;
|
int32_t i = headspritestat[STAT_FX], j, nexti;
|
||||||
int32_t x, ht;
|
|
||||||
spritetype *s;
|
spritetype *s;
|
||||||
|
|
||||||
while (i >= 0)
|
while (i >= 0)
|
||||||
|
@ -1240,8 +1239,8 @@ ACTOR_STATIC void G_MoveFX(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MUSICANDSFX__STATIC:
|
case MUSICANDSFX__STATIC:
|
||||||
|
{
|
||||||
ht = s->hitag;
|
const int32_t ht = s->hitag;
|
||||||
|
|
||||||
if (T2 != ud.config.SoundToggle)
|
if (T2 != ud.config.SoundToggle)
|
||||||
{
|
{
|
||||||
|
@ -1251,7 +1250,15 @@ ACTOR_STATIC void G_MoveFX(void)
|
||||||
|
|
||||||
if (s->lotag >= 1000 && s->lotag < 2000)
|
if (s->lotag >= 1000 && s->lotag < 2000)
|
||||||
{
|
{
|
||||||
x = ldist(&sprite[g_player[screenpeek].ps->i],s);
|
int32_t x = ldist(&sprite[g_player[screenpeek].ps->i],s);
|
||||||
|
|
||||||
|
if (g_fakeMultiMode && ud.multimode==2)
|
||||||
|
{
|
||||||
|
// HACK for splitscreen mod
|
||||||
|
int32_t otherdist = ldist(&sprite[g_player[1].ps->i],s);
|
||||||
|
x = min(x, otherdist);
|
||||||
|
}
|
||||||
|
|
||||||
if (x < ht && T1 == 0)
|
if (x < ht && T1 == 0)
|
||||||
{
|
{
|
||||||
FX_SetReverb(s->lotag - 1000);
|
FX_SetReverb(s->lotag - 1000);
|
||||||
|
@ -1268,7 +1275,15 @@ ACTOR_STATIC void G_MoveFX(void)
|
||||||
{
|
{
|
||||||
if ((g_sounds[s->lotag].m&2))
|
if ((g_sounds[s->lotag].m&2))
|
||||||
{
|
{
|
||||||
x = dist(&sprite[g_player[screenpeek].ps->i],s);
|
int32_t x = dist(&sprite[g_player[screenpeek].ps->i],s);
|
||||||
|
|
||||||
|
if (g_fakeMultiMode && ud.multimode==2)
|
||||||
|
{
|
||||||
|
// HACK for splitscreen mod
|
||||||
|
int32_t otherdist = dist(&sprite[g_player[1].ps->i],s);
|
||||||
|
x = min(x, otherdist);
|
||||||
|
}
|
||||||
|
|
||||||
if (x < ht && T1 == 0 && FX_VoiceAvailable(g_sounds[s->lotag].pr-1))
|
if (x < ht && T1 == 0 && FX_VoiceAvailable(g_sounds[s->lotag].pr-1))
|
||||||
{
|
{
|
||||||
if (g_numEnvSoundsPlaying == ud.config.NumVoices)
|
if (g_numEnvSoundsPlaying == ud.config.NumVoices)
|
||||||
|
@ -1312,6 +1327,7 @@ ACTOR_STATIC void G_MoveFX(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
BOLT:
|
BOLT:
|
||||||
i = nexti;
|
i = nexti;
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,6 +400,13 @@ static inline int32_t find_free_slot(int32_t num)
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int32_t get_sound_ang(int32_t camang, const vec3_t *cam, const vec3_t *pos)
|
||||||
|
{
|
||||||
|
int32_t sndang = 2048 + camang - getangle(cam->x-pos->x, cam->y-pos->y);
|
||||||
|
sndang &= 2047;
|
||||||
|
return sndang;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t S_CalcDistAndAng(int32_t i, int32_t num, int32_t camsect, int32_t camang,
|
static int32_t S_CalcDistAndAng(int32_t i, int32_t num, int32_t camsect, int32_t camang,
|
||||||
const vec3_t *cam, const vec3_t *pos,
|
const vec3_t *cam, const vec3_t *pos,
|
||||||
int32_t *sndistptr, int32_t *sndangptr)
|
int32_t *sndistptr, int32_t *sndangptr)
|
||||||
|
@ -410,17 +417,44 @@ static int32_t S_CalcDistAndAng(int32_t i, int32_t num, int32_t camsect, int32_t
|
||||||
if (PN == APLAYER && sprite[i].yvel == screenpeek)
|
if (PN == APLAYER && sprite[i].yvel == screenpeek)
|
||||||
{
|
{
|
||||||
sndang = sndist = 0;
|
sndang = sndist = 0;
|
||||||
|
goto sound_further_processing;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
sndang = get_sound_ang(camang, cam, pos);
|
||||||
sndang = 2048 + camang - getangle(cam->x-pos->x, cam->y-pos->y);
|
|
||||||
sndang &= 2047;
|
|
||||||
|
|
||||||
sndist = FindDistance3D(cam->x-pos->x, cam->y-pos->y, (cam->z-pos->z)>>4);
|
sndist = FindDistance3D(cam->x-pos->x, cam->y-pos->y, (cam->z-pos->z)>>4);
|
||||||
if ((g_sounds[num].m&16) == 0 && PN == MUSICANDSFX && SLT < 999 && (sector[SECT].lotag&0xff) < 9)
|
|
||||||
sndist = divscale14(sndist, SHT+1);
|
if (g_fakeMultiMode && ud.multimode==2)
|
||||||
|
{
|
||||||
|
// HACK for splitscreen mod: take the min of sound distances
|
||||||
|
// to 1st and 2nd player.
|
||||||
|
|
||||||
|
if (PN == APLAYER && sprite[i].yvel==1)
|
||||||
|
{
|
||||||
|
sndist = sndang = 0;
|
||||||
|
goto sound_further_processing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const vec3_t *cam2 = &g_player[1].ps->pos;
|
||||||
|
int32_t sndist2 = FindDistance3D(cam2->x-pos->x, cam2->y-pos->y, (cam2->z-pos->z)>>4);
|
||||||
|
|
||||||
|
if (sndist2 < sndist)
|
||||||
|
{
|
||||||
|
cam = cam2;
|
||||||
|
camsect = g_player[1].ps->cursectnum;
|
||||||
|
camang = g_player[1].ps->ang;
|
||||||
|
|
||||||
|
sndist = sndist2;
|
||||||
|
sndang = get_sound_ang(camang, cam, pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((g_sounds[num].m&16) == 0 && PN == MUSICANDSFX && SLT < 999 && (sector[SECT].lotag&0xff) < 9)
|
||||||
|
sndist = divscale14(sndist, SHT+1);
|
||||||
|
|
||||||
|
sound_further_processing:
|
||||||
sndist += g_sounds[num].vo;
|
sndist += g_sounds[num].vo;
|
||||||
if (sndist < 0)
|
if (sndist < 0)
|
||||||
sndist = 0;
|
sndist = 0;
|
||||||
|
|
Loading…
Reference in a new issue