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
This commit is contained in:
Fabian Greffrath 2022-11-30 12:52:11 +01:00 committed by GitHub
parent c338701fea
commit b596220967
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 21 deletions

View File

@ -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
{

View File

@ -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();
}
//----------------------------------------------------------------------------

View File

@ -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 },

View File

@ -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,