From bb7e19120826837c65c3b6b37bffa940967bbefe Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 26 Feb 2017 14:50:02 +0100 Subject: [PATCH] - allow specification of intermission music based on the destination map. --- src/g_level.h | 1 + src/g_mapinfo.cpp | 12 ++++++++++++ src/wi_stuff.cpp | 5 ++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/g_level.h b/src/g_level.h index d59a4fc09..c356476a4 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -324,6 +324,7 @@ struct level_info_t FString ExitPic; FString InterMusic; int intermusicorder; + TMap > MapInterMusic; FString SoundInfo; FString SndSeq; diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index f83e18ece..89fe27ddf 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -915,6 +915,18 @@ DEFINE_MAP_OPTION(intermusic, true) parse.ParseMusic(info->InterMusic, info->intermusicorder); } +DEFINE_MAP_OPTION(mapintermusic, true) +{ + parse.ParseAssign(); + parse.sc.MustGetString(); + FString mapname = parse.sc.String; + FString music; + int order; + parse.ParseComma(); + parse.ParseMusic(music, order); + info->MapInterMusic[FName(mapname)] = std::make_pair(music, order); +} + DEFINE_MAP_OPTION(fadetable, true) { parse.ParseAssign(); diff --git a/src/wi_stuff.cpp b/src/wi_stuff.cpp index d5c5554da..736384e62 100644 --- a/src/wi_stuff.cpp +++ b/src/wi_stuff.cpp @@ -2020,7 +2020,10 @@ public: if (bcnt == 1) { // intermission music - use the defaults if none specified - if (level.info->InterMusic.IsNotEmpty()) + auto mus = level.info->MapInterMusic.CheckKey(wbs->next); + if (mus != nullptr) + S_ChangeMusic(mus->first, mus->second); + else if (level.info->InterMusic.IsNotEmpty()) S_ChangeMusic(level.info->InterMusic, level.info->intermusicorder); else S_ChangeMusic (gameinfo.intermissionMusic.GetChars(), gameinfo.intermissionOrder);