mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-14 08:30:58 +00:00
- added SWP's parser for theme music definitions.
Because, why not? The SWCustom I use already contains them. However, since the original source does not play theme MIDIs - only CDA, there's a switch to disable them.
This commit is contained in:
parent
e62f6cbc20
commit
6ef1f96b40
5 changed files with 69 additions and 26 deletions
|
@ -1027,20 +1027,8 @@ LEVEL_INFO LevelInfo[MAX_LEVELS+2] = // Shareware
|
||||||
};
|
};
|
||||||
#endif*/
|
#endif*/
|
||||||
|
|
||||||
const char *ThemeSongs[6] =
|
FString ThemeSongs[6];
|
||||||
{
|
int ThemeTrack[6];
|
||||||
"THEME.MID",
|
|
||||||
"ENDLEV3.VOC",
|
|
||||||
"SERPENT.MID",
|
|
||||||
"SUMO.MID",
|
|
||||||
"ZILLA.MID"
|
|
||||||
"ENDING.MID"
|
|
||||||
};
|
|
||||||
|
|
||||||
int ThemeTrack[6] =
|
|
||||||
{
|
|
||||||
2,3,13,13,13,14
|
|
||||||
};
|
|
||||||
|
|
||||||
void InitNewGame(void)
|
void InitNewGame(void)
|
||||||
{
|
{
|
||||||
|
@ -1575,7 +1563,7 @@ void ResetKeyRange(uint8_t* kb, uint8_t* ke)
|
||||||
void PlayTheme()
|
void PlayTheme()
|
||||||
{
|
{
|
||||||
// start music at logo
|
// start music at logo
|
||||||
PlaySong(nullptr, "theme.mid", RedBookSong[0]);
|
PlaySong(nullptr, ThemeSongs[0], ThemeTrack[0]);
|
||||||
|
|
||||||
DSPRINTF(ds,"After music stuff...");
|
DSPRINTF(ds,"After music stuff...");
|
||||||
MONO_PRINT(ds);
|
MONO_PRINT(ds);
|
||||||
|
@ -1679,7 +1667,7 @@ void CreditsLevel(void)
|
||||||
while (FX_SoundActive(handle)) ;
|
while (FX_SoundActive(handle)) ;
|
||||||
|
|
||||||
// try 14 then 2 then quit
|
// try 14 then 2 then quit
|
||||||
if (!PlaySong(nullptr, nullptr, 14, true))
|
if (!PlaySong(nullptr, ThemeSongs[5], ThemeTrack[5], true))
|
||||||
{
|
{
|
||||||
if (!PlaySong(nullptr, nullptr, 2, true))
|
if (!PlaySong(nullptr, nullptr, 2, true))
|
||||||
{
|
{
|
||||||
|
@ -2220,7 +2208,7 @@ void BonusScreen(PLAYERp pp)
|
||||||
totalclock = ototalclock = 0;
|
totalclock = ototalclock = 0;
|
||||||
limit = synctics;
|
limit = synctics;
|
||||||
|
|
||||||
PlaySong(nullptr, voc[DIGI_ENDLEV].name, 3);
|
PlaySong(nullptr, ThemeSongs[1], ThemeTrack[1]);
|
||||||
|
|
||||||
// special case code because I don't care any more!
|
// special case code because I don't care any more!
|
||||||
if (FinishAnim)
|
if (FinishAnim)
|
||||||
|
@ -2535,7 +2523,7 @@ void StatScreen(PLAYERp mpp)
|
||||||
inputState.ClearKeyStatus(KEYSC_SPACE);
|
inputState.ClearKeyStatus(KEYSC_SPACE);
|
||||||
inputState.ClearKeyStatus(KEYSC_ENTER);
|
inputState.ClearKeyStatus(KEYSC_ENTER);
|
||||||
|
|
||||||
PlaySong(nullptr, voc[DIGI_ENDLEV].name, 3);
|
PlaySong(nullptr, ThemeSongs[1], ThemeTrack[1]);
|
||||||
|
|
||||||
while (!inputState.GetKeyStatus(KEYSC_SPACE) && !inputState.GetKeyStatus(KEYSC_ENTER))
|
while (!inputState.GetKeyStatus(KEYSC_SPACE) && !inputState.GetKeyStatus(KEYSC_ENTER))
|
||||||
{
|
{
|
||||||
|
|
|
@ -953,7 +953,7 @@ typedef struct
|
||||||
|
|
||||||
extern LEVEL_INFO LevelInfo[MAX_LEVELS_REG+2];
|
extern LEVEL_INFO LevelInfo[MAX_LEVELS_REG+2];
|
||||||
extern int ThemeTrack[6]; // w
|
extern int ThemeTrack[6]; // w
|
||||||
extern const char *ThemeSongs[6]; //
|
extern FString ThemeSongs[6]; //
|
||||||
|
|
||||||
#define MAX_EPISODE_NAME_LEN 24
|
#define MAX_EPISODE_NAME_LEN 24
|
||||||
extern char EpisodeNames[3][MAX_EPISODE_NAME_LEN+2];
|
extern char EpisodeNames[3][MAX_EPISODE_NAME_LEN+2];
|
||||||
|
|
|
@ -404,6 +404,7 @@ enum
|
||||||
CM_MAXAMMO,
|
CM_MAXAMMO,
|
||||||
CM_DAMAGEMIN,
|
CM_DAMAGEMIN,
|
||||||
CM_DAMAGEMAX,
|
CM_DAMAGEMAX,
|
||||||
|
CM_THEME,
|
||||||
CM_SECRET,
|
CM_SECRET,
|
||||||
CM_QUIT,
|
CM_QUIT,
|
||||||
};
|
};
|
||||||
|
@ -424,6 +425,7 @@ static const struct _tokset
|
||||||
{ "inventory", CM_INVENTORY },
|
{ "inventory", CM_INVENTORY },
|
||||||
{ "weapon", CM_WEAPON },
|
{ "weapon", CM_WEAPON },
|
||||||
{ "needkey", CM_NEEDKEY },
|
{ "needkey", CM_NEEDKEY },
|
||||||
|
{ "theme", CM_THEME },
|
||||||
{ "secret", CM_SECRET },
|
{ "secret", CM_SECRET },
|
||||||
{ "quit", CM_QUIT },
|
{ "quit", CM_QUIT },
|
||||||
},
|
},
|
||||||
|
@ -475,14 +477,20 @@ static const struct _tokset
|
||||||
{ "maxdamage", CM_DAMAGEMAX },
|
{ "maxdamage", CM_DAMAGEMAX },
|
||||||
{ "pickup", CM_AMOUNT },
|
{ "pickup", CM_AMOUNT },
|
||||||
{ "weaponpickup",CM_WEAPON },
|
{ "weaponpickup",CM_WEAPON },
|
||||||
}
|
},
|
||||||
;
|
cm_theme_tokens[] = {
|
||||||
|
{ "song", CM_SONG },
|
||||||
|
{ "music", CM_SONG },
|
||||||
|
{ "cdatrack", CM_CDATRACK },
|
||||||
|
{ "cdtrack", CM_CDATRACK },
|
||||||
|
};
|
||||||
#define cm_numtokens (sizeof(cm_tokens)/sizeof(cm_tokens[0]))
|
#define cm_numtokens (sizeof(cm_tokens)/sizeof(cm_tokens[0]))
|
||||||
#define cm_map_numtokens (sizeof(cm_map_tokens)/sizeof(cm_map_tokens[0]))
|
#define cm_map_numtokens (sizeof(cm_map_tokens)/sizeof(cm_map_tokens[0]))
|
||||||
#define cm_episode_numtokens (sizeof(cm_episode_tokens)/sizeof(cm_episode_tokens[0]))
|
#define cm_episode_numtokens (sizeof(cm_episode_tokens)/sizeof(cm_episode_tokens[0]))
|
||||||
#define cm_skill_numtokens (sizeof(cm_skill_tokens)/sizeof(cm_skill_tokens[0]))
|
#define cm_skill_numtokens (sizeof(cm_skill_tokens)/sizeof(cm_skill_tokens[0]))
|
||||||
#define cm_inventory_numtokens (sizeof(cm_inventory_tokens)/sizeof(cm_inventory_tokens[0]))
|
#define cm_inventory_numtokens (sizeof(cm_inventory_tokens)/sizeof(cm_inventory_tokens[0]))
|
||||||
#define cm_weapons_numtokens (sizeof(cm_weapons_tokens)/sizeof(cm_weapons_tokens[0]))
|
#define cm_weapons_numtokens (sizeof(cm_weapons_tokens)/sizeof(cm_weapons_tokens[0]))
|
||||||
|
#define cm_theme_numtokens (sizeof(cm_theme_tokens)/sizeof(cm_theme_tokens[0]))
|
||||||
|
|
||||||
|
|
||||||
static int cm_transtok(const char *tok, const struct _tokset *set, const unsigned num)
|
static int cm_transtok(const char *tok, const struct _tokset *set, const unsigned num)
|
||||||
|
@ -964,6 +972,51 @@ void LoadCustomInfoFromScript(const char *filename)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CM_THEME:
|
||||||
|
{
|
||||||
|
char *epnumptr;
|
||||||
|
char *name = NULL;
|
||||||
|
int trak = -1;
|
||||||
|
|
||||||
|
if (scriptfile_getnumber(script, &curmap)) break; epnumptr = script->ltextptr;
|
||||||
|
if (scriptfile_getbraces(script, &braceend)) break;
|
||||||
|
if ((unsigned)--curmap >= 6u)
|
||||||
|
{
|
||||||
|
initprintf("Error: theme number %d not in range 1-6 on line %s:%d\n",
|
||||||
|
curmap, script->filename,
|
||||||
|
scriptfile_getlinum(script,epnumptr));
|
||||||
|
script->textptr = braceend;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (script->textptr < braceend)
|
||||||
|
{
|
||||||
|
if (!(token = scriptfile_gettoken(script))) break;
|
||||||
|
if (token == braceend) break;
|
||||||
|
switch (cm_transtok(token, cm_theme_tokens, cm_theme_numtokens))
|
||||||
|
{
|
||||||
|
case CM_SONG:
|
||||||
|
if (scriptfile_getstring(script, &name)) break;
|
||||||
|
break;
|
||||||
|
case CM_CDATRACK:
|
||||||
|
if (scriptfile_getnumber(script, &trak)) break;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
initprintf("Error on line %s:%d\n",
|
||||||
|
script->filename,
|
||||||
|
scriptfile_getlinum(script,script->ltextptr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
ThemeSongs[curmap] = name;
|
||||||
|
}
|
||||||
|
if (trak >= 2)
|
||||||
|
{
|
||||||
|
ThemeTrack[curmap] = trak;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case CM_SECRET:
|
case CM_SECRET:
|
||||||
case CM_QUIT:
|
case CM_QUIT:
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -308,6 +308,7 @@ InitFX(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern short Level;
|
extern short Level;
|
||||||
|
CVAR(Bool, sw_nothememidi, false, CVAR_ARCHIVE)
|
||||||
|
|
||||||
SWBOOL PlaySong(const char* mapname, const char* song_file_name, int cdaudio_track, bool isThemeTrack) //(nullptr, nullptr, -1, false) starts the normal level music.
|
SWBOOL PlaySong(const char* mapname, const char* song_file_name, int cdaudio_track, bool isThemeTrack) //(nullptr, nullptr, -1, false) starts the normal level music.
|
||||||
{
|
{
|
||||||
|
@ -316,8 +317,8 @@ SWBOOL PlaySong(const char* mapname, const char* song_file_name, int cdaudio_tra
|
||||||
// Get the music defined for the current level.
|
// Get the music defined for the current level.
|
||||||
|
|
||||||
}
|
}
|
||||||
// Play CD audio if enabled or if this is a theme track.
|
// Play CD audio if enabled.
|
||||||
if (cdaudio_track >= 0 && (mus_redbook || isThemeTrack))
|
if (cdaudio_track >= 0 && mus_redbook)
|
||||||
{
|
{
|
||||||
FStringf trackname("track%02d.ogg", cdaudio_track);
|
FStringf trackname("track%02d.ogg", cdaudio_track);
|
||||||
if (!Mus_Play(nullptr, trackname, true))
|
if (!Mus_Play(nullptr, trackname, true))
|
||||||
|
@ -325,6 +326,7 @@ SWBOOL PlaySong(const char* mapname, const char* song_file_name, int cdaudio_tra
|
||||||
buildprintf("Can't find CD track %i!\n", cdaudio_track);
|
buildprintf("Can't find CD track %i!\n", cdaudio_track);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (isThemeTrack && sw_nothememidi) return false; // The original SW source only used CD Audio for theme tracks, so this is optional.
|
||||||
return Mus_Play(nullptr, song_file_name, true);
|
return Mus_Play(nullptr, song_file_name, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -883,7 +883,7 @@ BossHealthMeter(void)
|
||||||
serpwasseen = TRUE;
|
serpwasseen = TRUE;
|
||||||
if (!SW_SHAREWARE)
|
if (!SW_SHAREWARE)
|
||||||
{
|
{
|
||||||
PlaySong(nullptr, nullptr, ThemeTrack[2], true);
|
PlaySong(nullptr, ThemeSongs[2], ThemeTrack[2], true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i == 1 && !sumowasseen)
|
else if (i == 1 && !sumowasseen)
|
||||||
|
@ -891,7 +891,7 @@ BossHealthMeter(void)
|
||||||
sumowasseen = TRUE;
|
sumowasseen = TRUE;
|
||||||
if (!SW_SHAREWARE)
|
if (!SW_SHAREWARE)
|
||||||
{
|
{
|
||||||
PlaySong(nullptr, nullptr, ThemeTrack[3], true);
|
PlaySong(nullptr, ThemeSongs[3], ThemeTrack[3], true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i == 2 && !zillawasseen)
|
else if (i == 2 && !zillawasseen)
|
||||||
|
@ -899,7 +899,7 @@ BossHealthMeter(void)
|
||||||
zillawasseen = TRUE;
|
zillawasseen = TRUE;
|
||||||
if (!SW_SHAREWARE)
|
if (!SW_SHAREWARE)
|
||||||
{
|
{
|
||||||
PlaySong(nullptr, nullptr, ThemeTrack[4], true);
|
PlaySong(nullptr, ThemeSongs[4], ThemeTrack[4], true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue