From 0707c9e5ec07d775caa1a7a2d497a2be4bf6dc70 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 7 Mar 2024 00:37:06 -0800 Subject: [PATCH] Add g_musicfade, generic system to fade out the level music for a brief period --- src/doomstat.h | 6 ++++++ src/g_game.c | 1 + src/k_kart.c | 1 + src/p_saveg.c | 10 ++++++++++ src/p_tick.c | 17 +++++++++++++++++ src/typedef.h | 1 + 6 files changed, 36 insertions(+) diff --git a/src/doomstat.h b/src/doomstat.h index c74dda7ac..ce0782cd9 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -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; diff --git a/src/g_game.c b/src/g_game.c index 4a4d25f1a..5d181a536 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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; diff --git a/src/k_kart.c b/src/k_kart.c index 97a6bef56..d3f5f757a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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; diff --git a/src/p_saveg.c b/src/p_saveg.c index b89ee4412..8a1956ba4 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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? diff --git a/src/p_tick.c b/src/p_tick.c index 9f0b33da7..bc78f291a 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -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) { diff --git a/src/typedef.h b/src/typedef.h index e866a22a9..ac9bbff5f 100644 --- a/src/typedef.h +++ b/src/typedef.h @@ -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);