From 92c451538af75896793d48384b1aca0a62123e54 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 15 Jan 2024 16:30:12 -0800 Subject: [PATCH] Special Stages: fade out music near the finish line --- src/k_kart.c | 6 ++++++ src/k_specialstage.c | 23 +++++++++++++++++++++++ src/k_specialstage.h | 12 ++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index fb519e521..b5ae9b39e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10663,6 +10663,12 @@ void K_KartUpdatePosition(player_t *player) player->topinfirst = 0; } + // Special stages: fade out music near the finish line + if (P_IsLocalPlayer(player)) + { + K_FadeOutSpecialMusic(player->distancetofinish); + } + player->position = position; } diff --git a/src/k_specialstage.c b/src/k_specialstage.c index efcfea382..910147a05 100644 --- a/src/k_specialstage.c +++ b/src/k_specialstage.c @@ -21,6 +21,7 @@ #include "z_zone.h" #include "k_waypoint.h" #include "k_objects.h" +#include "music.h" struct specialstageinfo specialstageinfo; @@ -127,6 +128,11 @@ void K_TickSpecialStage(void) K_MoveExitBeam(); } +/*-------------------------------------------------- + mobj_t *K_GetPossibleSpecialTarget(void) + + See header file for description. +--------------------------------------------------*/ mobj_t *K_GetPossibleSpecialTarget(void) { if (specialstageinfo.valid == false) @@ -141,3 +147,20 @@ mobj_t *K_GetPossibleSpecialTarget(void) return specialstageinfo.ufo; } + +/*-------------------------------------------------- + void K_FadeOutSpecialMusic(UINT32 distance) + + See header file for description. +--------------------------------------------------*/ +void K_FadeOutSpecialMusic(UINT32 distance) +{ + if (specialstageinfo.valid == false) + { + return; + } + + const UINT32 threshold = FixedMul(16000, mapobjectscale); + + Music_LevelVolume(min(distance, threshold) * 100 / threshold); +} diff --git a/src/k_specialstage.h b/src/k_specialstage.h index 329d7f99f..cc26ca352 100644 --- a/src/k_specialstage.h +++ b/src/k_specialstage.h @@ -68,6 +68,18 @@ void K_TickSpecialStage(void); mobj_t *K_GetPossibleSpecialTarget(void); +/*-------------------------------------------------- + void K_FadeOutSpecialMusic(UINT32 distance) + + Fade level music out at the end of a special stage. + + Input Arguments:- + distance - Distance from the finish line. + +--------------------------------------------------*/ + +void K_FadeOutSpecialMusic(UINT32 distance); + #ifdef __cplusplus } // extern "C" #endif