Add g_musicfade, generic system to fade out the level music for a brief period

This commit is contained in:
James R 2024-03-07 00:37:06 -08:00
parent 549865ce2d
commit 0707c9e5ec
6 changed files with 36 additions and 0 deletions

View file

@ -811,6 +811,12 @@ extern struct darkness_t
fixed_t value[MAXSPLITSCREENPLAYERS];
} g_darkness;
extern struct musicfade_t
{
tic_t start, end, fade;
boolean ticked;
} g_musicfade;
#define DEFAULT_GRAVITY (4*FRACUNIT/5)
extern fixed_t gravity;
extern fixed_t mapobjectscale;

View file

@ -279,6 +279,7 @@ tic_t racecountdown, exitcountdown, musiccountdown; // for racing
exitcondition_t g_exit;
darkness_t g_darkness;
musicfade_t g_musicfade;
fixed_t gravity;
fixed_t mapobjectscale;

View file

@ -118,6 +118,7 @@ void K_TimerReset(void)
{
starttime = introtime = 0;
memset(&g_darkness, 0, sizeof g_darkness);
memset(&g_musicfade, 0, sizeof g_musicfade);
numbulbs = 1;
inDuel = rainbowstartavailable = false;
linecrossed = 0;

View file

@ -6567,6 +6567,11 @@ static void P_NetArchiveMisc(savebuffer_t *save, boolean resending)
WRITEUINT32(save->p, g_darkness.start);
WRITEUINT32(save->p, g_darkness.end);
WRITEUINT32(save->p, g_musicfade.start);
WRITEUINT32(save->p, g_musicfade.end);
WRITEUINT32(save->p, g_musicfade.fade);
WRITEUINT8(save->p, g_musicfade.ticked);
WRITEUINT16(save->p, numchallengedestructibles);
// Is it paused?
@ -6753,6 +6758,11 @@ static boolean P_NetUnArchiveMisc(savebuffer_t *save, boolean reloading)
g_darkness.start = READUINT32(save->p);
g_darkness.end = READUINT32(save->p);
g_musicfade.start = READUINT32(save->p);
g_musicfade.end = READUINT32(save->p);
g_musicfade.fade = READUINT32(save->p);
g_musicfade.ticked = READUINT8(save->p);
numchallengedestructibles = READUINT16(save->p);
// Is it paused?

View file

@ -808,6 +808,22 @@ static void P_TickDarkness(void)
}
}
static void P_TickMusicFade(void)
{
if (leveltime >= g_musicfade.start && leveltime <= g_musicfade.end)
{
INT32 half = (g_musicfade.end - g_musicfade.start) / 2;
INT32 fade = max(1, g_musicfade.fade);
INT32 mid = half - fade;
INT32 t = abs((INT32)leveltime - (INT32)(g_musicfade.start + half));
Music_LevelVolume((max(t, mid) - mid) * 100 / fade);
}
else if (!g_musicfade.ticked)
Music_LevelVolume(100);
g_musicfade.ticked = true;
}
//
// P_Ticker
//
@ -1102,6 +1118,7 @@ void P_Ticker(boolean run)
racecountdown--;
P_TickDarkness();
P_TickMusicFade();
if (exitcountdown >= 1)
{

View file

@ -143,6 +143,7 @@ TYPEDEF (cupheader_t);
TYPEDEF (unloaded_cupheader_t);
TYPEDEF (exitcondition_t);
TYPEDEF (darkness_t);
TYPEDEF (musicfade_t);
// font.h
TYPEDEF (font_t);