From b596220967ad40eb39eada7d9a04da7bdea88c13 Mon Sep 17 00:00:00 2001 From: Fabian Greffrath Date: Wed, 30 Nov 2022 12:52:11 +0100 Subject: [PATCH] support dedicated music for Episode 4 of Ultimate Doom (#818) * support dedicated music for Episode 4 of Ultimate Doom * suppoer UMAPINFO music in the IDMUS cheat --- src/m_cheat.c | 25 ++++++++++++++++++++++-- src/s_sound.c | 53 +++++++++++++++++++++++++++++++++------------------ src/sounds.c | 9 +++++++++ src/sounds.h | 9 +++++++++ 4 files changed, 75 insertions(+), 21 deletions(-) diff --git a/src/m_cheat.c b/src/m_cheat.c index 44cbcf2a..6e0c877f 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -307,6 +307,7 @@ static void cheat_autoaim() static void cheat_mus(char *buf) { int musnum; + mapentry_t* entry; //jff 3/20/98 note: this cheat allowed in netgame/demorecord @@ -316,12 +317,32 @@ static void cheat_mus(char *buf) plyr->message = s_STSTR_MUS; // Ty 03/27/98 - externalized + // First check if we have a mapinfo entry for the requested level. + if (gamemode == commercial) + entry = G_LookupMapinfo(1, 10*(buf[0]-'0') + (buf[1]-'0')); + else + entry = G_LookupMapinfo(buf[0]-'0', buf[1]-'0'); + + if (entry && entry->music[0]) + { + musnum = W_CheckNumForName(entry->music); + + if (musnum == -1) + plyr->message = s_STSTR_NOMUS; + else + { + S_ChangeMusInfoMusic(musnum, 1); + idmusnum = -1; + } + return; + } + if (gamemode == commercial) { musnum = mus_runnin + (buf[0]-'0')*10 + buf[1]-'0' - 1; //jff 4/11/98 prevent IDMUS00 in DOOMII and IDMUS36 or greater - if (musnum < mus_runnin || ((buf[0]-'0')*10 + buf[1]-'0') > 35) + if (musnum < mus_runnin || musnum >= NUMMUSIC) plyr->message = s_STSTR_NOMUS; // Ty 03/27/98 - externalized else { @@ -334,7 +355,7 @@ static void cheat_mus(char *buf) musnum = mus_e1m1 + (buf[0]-'1')*9 + (buf[1]-'1'); //jff 4/11/98 prevent IDMUS0x IDMUSx0 in DOOMI and greater than introa - if (buf[0] < '1' || buf[1] < '1' || ((buf[0]-'1')*9 + buf[1]-'1') > 31) + if (musnum < mus_e1m1 || musnum >= mus_runnin) plyr->message = s_STSTR_NOMUS; // Ty 03/27/98 - externalized else { diff --git a/src/s_sound.c b/src/s_sound.c index 14e6ca0c..f98369e0 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -827,25 +827,7 @@ void S_Start(void) if (gamemode == commercial) mnum = mus_runnin + WRAP(gamemap - 1, NUMMUSIC - mus_runnin); else - { - static const int spmus[] = // Song - Who? - Where? - { - mus_e3m4, // American e4m1 - mus_e3m2, // Romero e4m2 - mus_e3m3, // Shawn e4m3 - mus_e1m5, // American e4m4 - mus_e2m7, // Tim e4m5 - mus_e2m4, // Romero e4m6 - mus_e2m6, // J.Anderson e4m7 CHIRON.WAD - mus_e2m5, // Shawn e4m8 - mus_e1m9 // Tim e4m9 - }; - - if(gameepisode < 4) - mnum = mus_e1m1 + WRAP((gameepisode-1)*9 + gamemap-1, mus_runnin - mus_e1m1); - else - mnum = spmus[WRAP(gamemap-1, 9)]; - } + mnum = mus_e1m1 + WRAP((gameepisode-1)*9 + gamemap-1, mus_runnin - mus_e1m1); } // [crispy] reset musinfo data at the start of a new map @@ -860,6 +842,36 @@ void S_Start(void) // allocates channel buffer, sets S_sfx lookup. // +static void InitE4Music (void) +{ + int i, j; + static const int spmus[] = // Song - Who? - Where? + { + mus_e3m4, // American e4m1 + mus_e3m2, // Romero e4m2 + mus_e3m3, // Shawn e4m3 + mus_e1m5, // American e4m4 + mus_e2m7, // Tim e4m5 + mus_e2m4, // Romero e4m6 + mus_e2m6, // J.Anderson e4m7 CHIRON.WAD + mus_e2m5, // Shawn e4m8 + mus_e1m9 // Tim e4m9 + }; + + for (i = mus_e4m1, j = 0; i <= mus_e4m9; i++, j++) + { + musicinfo_t *music = &S_music[i]; + char namebuf[9]; + + sprintf(namebuf, "d_%s", music->name); + + if (W_CheckNumForName(namebuf) == -1) + { + music->name = S_music[spmus[j]].name; + } + } +} + void S_Init(int sfxVolume, int musicVolume) { //jff 1/22/98 skip sound init if sound not enabled @@ -880,6 +892,9 @@ void S_Init(int sfxVolume, int musicVolume) // no sounds are playing, and they are not mus_paused mus_paused = 0; + + if (gamemode != commercial) + InitE4Music(); } //---------------------------------------------------------------------------- diff --git a/src/sounds.c b/src/sounds.c index a95c1c6d..0a2c1de2 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -66,6 +66,15 @@ musicinfo_t S_music[] = { { "e3m7", 0 }, { "e3m8", 0 }, { "e3m9", 0 }, + { "e4m1", 0 }, + { "e4m2", 0 }, + { "e4m3", 0 }, + { "e4m4", 0 }, + { "e4m5", 0 }, + { "e4m6", 0 }, + { "e4m7", 0 }, + { "e4m8", 0 }, + { "e4m9", 0 }, { "inter", 0 }, { "intro", 0 }, { "bunny", 0 }, diff --git a/src/sounds.h b/src/sounds.h index 228b958c..b9ae9946 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -139,6 +139,15 @@ typedef enum { mus_e3m7, mus_e3m8, mus_e3m9, + mus_e4m1, + mus_e4m2, + mus_e4m3, + mus_e4m4, + mus_e4m5, + mus_e4m6, + mus_e4m7, + mus_e4m8, + mus_e4m9, mus_inter, mus_intro, mus_bunny,