From 9d082389d86417823332169584f901f100482bb8 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sat, 30 Apr 2022 17:11:22 +0200 Subject: [PATCH] Clean up music track selection --- Source/diablo.cpp | 2 +- Source/gamemenu.cpp | 4 ++-- Source/menu.cpp | 38 +++++++++++++++++++++----------------- Source/sound.cpp | 24 +++++++++++++++++++++++- Source/sound.h | 2 ++ 5 files changed, 49 insertions(+), 21 deletions(-) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 06712851e..aaca5536b 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -2044,7 +2044,7 @@ void DisableInputWndProc(uint32_t uMsg, int32_t /*wParam*/, int32_t lParam) void LoadGameLevel(bool firstflag, lvl_entry lvldir) { - _music_id neededTrack = static_cast<_music_id>(leveltype); + _music_id neededTrack = GetLevelMusic(leveltype); if (neededTrack != sgnMusicTrack) music_stop(); diff --git a/Source/gamemenu.cpp b/Source/gamemenu.cpp index 441db66ef..cf8cd3e46 100644 --- a/Source/gamemenu.cpp +++ b/Source/gamemenu.cpp @@ -193,7 +193,7 @@ void GamemenuMusicVolume(bool bActivate) } else { gbMusicOn = true; sound_get_or_set_music_volume(VOLUME_MAX); - music_start((_music_id)leveltype); + music_start(GetLevelMusic(leveltype)); } } else { int volume = GamemenuSliderMusicSound(&sgOptionsMenu[0]); @@ -205,7 +205,7 @@ void GamemenuMusicVolume(bool bActivate) } } else if (!gbMusicOn) { gbMusicOn = true; - music_start((_music_id)leveltype); + music_start(GetLevelMusic(leveltype)); } } diff --git a/Source/menu.cpp b/Source/menu.cpp index fda304bdf..3cfba0769 100644 --- a/Source/menu.cpp +++ b/Source/menu.cpp @@ -20,27 +20,31 @@ uint32_t gSaveNumber; namespace { -/** The active music track id for the main menu. */ -_music_id menu_music_track_id = TMUSIC_INTRO; - -void RefreshMusic() +_music_id NextTrack() { - music_start(menu_music_track_id); + if (gbIsSpawn) { + return TMUSIC_INTRO; + } - if (gbIsSpawn && !gbIsHellfire) { - return; + switch (sgnMusicTrack) { + case TMUSIC_INTRO: + return TMUSIC_CATACOMBS; + case TMUSIC_CATACOMBS: + return TMUSIC_CAVES; + case TMUSIC_CAVES: + return TMUSIC_HELL; + case TMUSIC_HELL: + return TMUSIC_NEST; + case TMUSIC_NEST: + return TMUSIC_CRYPT; + default: + return TMUSIC_INTRO; } +} - int nextTrack = (int)menu_music_track_id; - do { - nextTrack++; - if (nextTrack == NUM_MUSIC || (!gbIsHellfire && nextTrack > TMUSIC_HELL)) - nextTrack = TMUSIC_CATACOMBS; - if (gbIsSpawn && nextTrack > TMUSIC_CATHEDRAL) - nextTrack = TMUSIC_NEST; - } while (nextTrack == TMUSIC_TOWN || nextTrack == TMUSIC_CATHEDRAL); - - menu_music_track_id = (_music_id)nextTrack; +void RefreshMusic() +{ + music_start(NextTrack()); } bool InitMenu(_selhero_selections type) diff --git a/Source/sound.cpp b/Source/sound.cpp index fc7b5f075..f856442bf 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -222,6 +222,28 @@ void snd_deinit() gbSndInited = false; } +_music_id GetLevelMusic(dungeon_type dungeonType) +{ + switch (dungeonType) { + case DTYPE_TOWN: + return TMUSIC_TOWN; + case DTYPE_CATHEDRAL: + return TMUSIC_CATHEDRAL; + case DTYPE_CATACOMBS: + return TMUSIC_CATACOMBS; + case DTYPE_CAVES: + return TMUSIC_CAVES; + case DTYPE_HELL: + return TMUSIC_HELL; + case DTYPE_NEST: + return TMUSIC_NEST; + case DTYPE_CRYPT: + return TMUSIC_CRYPT; + default: + return TMUSIC_INTRO; + } +} + void music_stop() { music.Release(); @@ -260,7 +282,7 @@ void music_start(_music_id nTrack) return; } - sgnMusicTrack = (_music_id)nTrack; + sgnMusicTrack = nTrack; } void sound_disable_music(bool disable) diff --git a/Source/sound.h b/Source/sound.h index cdec5e544..4628ce88c 100644 --- a/Source/sound.h +++ b/Source/sound.h @@ -9,6 +9,7 @@ #include #include +#include "gendung.h" #include "miniwin/miniwin.h" #ifndef NOSOUND @@ -58,6 +59,7 @@ void snd_play_snd(TSnd *pSnd, int lVolume, int lPan); std::unique_ptr sound_file_load(const char *path, bool stream = false); void snd_init(); void snd_deinit(); +_music_id GetLevelMusic(dungeon_type dungeonType); void music_stop(); void music_start(_music_id nTrack); void sound_disable_music(bool disable);