Port tunes command to new music system

The tunes command basically operates the Stereo now, with
the distinction that the song loops forever.

tunes -none will stop music indefinitely. Only the Stereo
can override it.

tunes -default restores level music to the correct time.
This commit is contained in:
James R 2023-08-05 16:51:09 -07:00
parent feada89364
commit d3577c02b9

View file

@ -2207,19 +2207,27 @@ static void PrintSongAuthors(const musicdef_t *def, UINT8 i)
PrintMusicDefField("Original Composers: ", def->composers); PrintMusicDefField("Original Composers: ", def->composers);
} }
static void PrintMusicDef(const char *song)
{
UINT8 i = 0;
const musicdef_t *def = S_FindMusicDef(song, &i);
if (def != NULL)
{
PrintSongAuthors(def, i);
}
}
// TODO: fix this function, needs better support for map names // TODO: fix this function, needs better support for map names
static void Command_Tunes_f(void) static void Command_Tunes_f(void)
{ {
const char *tunearg; const char *tunearg;
UINT16 track = 0;
UINT32 position = 0;
const size_t argc = COM_Argc(); const size_t argc = COM_Argc();
if (argc < 2) //tunes slot ... if (argc < 2) //tunes slot ...
{ {
CONS_Printf("tunes <name/num> [track] [speed] [position] / <-show> / <-default> / <-none>:\n"); CONS_Printf("tunes <name> [speed] [position] / <-show> / <-showdefault> / <-default> / <-none>:\n");
CONS_Printf(M_GetText("Play an arbitrary music lump. If a map number is used, 'MAP##M' is played.\n")); CONS_Printf(M_GetText("Play an arbitrary music lump.\n\n"));
CONS_Printf(M_GetText("If the format supports multiple songs, you can specify which one to play.\n\n"));
CONS_Printf(M_GetText("* With \"-show\", shows the currently playing tune and track.\n")); CONS_Printf(M_GetText("* With \"-show\", shows the currently playing tune and track.\n"));
CONS_Printf(M_GetText("* With \"-showdefault\", shows the current music for the level.\n")); CONS_Printf(M_GetText("* With \"-showdefault\", shows the current music for the level.\n"));
CONS_Printf(M_GetText("* With \"-default\", returns to the default music for the map.\n")); CONS_Printf(M_GetText("* With \"-default\", returns to the default music for the map.\n"));
@ -2228,70 +2236,48 @@ static void Command_Tunes_f(void)
} }
tunearg = COM_Argv(1); tunearg = COM_Argv(1);
track = 0;
if (!strcasecmp(tunearg, "-show")) if (!strcasecmp(tunearg, "-show"))
{ {
UINT8 i = 0; CONS_Printf(M_GetText("The current tune is: %s\n"), Music_CurrentSong());
const musicdef_t *def = S_FindMusicDef(music_name, &i); PrintMusicDef(Music_CurrentSong());
CONS_Printf(M_GetText("The current tune is: %s [track %d]\n"),
music_name, (music_flags & MUSIC_TRACKMASK));
if (def != NULL)
{
PrintSongAuthors(def, i);
}
return; return;
} }
if (!strcasecmp(tunearg, "-showdefault")) if (!strcasecmp(tunearg, "-showdefault"))
{ {
UINT8 i = 0; CONS_Printf(M_GetText("The default tune is: %s\n"), Music_Song("level"));
const musicdef_t *def = S_FindMusicDef(mapmusname, &i); PrintMusicDef(Music_Song("level"));
CONS_Printf(M_GetText("The default tune is: %s [track %d]\n"),
mapmusname, (mapmusflags & MUSIC_TRACKMASK));
if (def != NULL)
{
PrintSongAuthors(def, i);
}
return; return;
} }
S_SoundTestStop();
if (!strcasecmp(tunearg, "-none")) if (!strcasecmp(tunearg, "-none"))
{ {
S_StopMusic(); Music_Remap("stereo", "");
Music_Play("stereo");
return; return;
} }
else if (!strcasecmp(tunearg, "-default"))
if (!strcasecmp(tunearg, "-default"))
{ {
tunearg = mapheaderinfo[gamemap-1]->musname[mapmusrng]; Music_Stop("stereo");
track = mapheaderinfo[gamemap-1]->mustrack; return;
} }
if (strlen(tunearg) > 6) // This is automatic -- just show the error just in case Music_Remap("stereo", tunearg);
CONS_Alert(CONS_NOTICE, M_GetText("Music name too long - truncated to six characters.\n")); Music_Loop("stereo", true);
Music_Play("stereo");
if (argc > 2)
track = (UINT16)atoi(COM_Argv(2))-1;
strncpy(mapmusname, tunearg, 7);
if (argc > 4)
position = (UINT32)atoi(COM_Argv(4));
mapmusname[6] = 0;
mapmusflags = (track & MUSIC_TRACKMASK);
mapmusposition = position;
mapmusresume = 0;
S_ChangeMusicEx(mapmusname, mapmusflags, true, mapmusposition, 0, 0);
if (argc > 3) if (argc > 3)
Music_Seek("stereo", (atoi(COM_Argv(3)) * TICRATE) / 1000);
if (argc > 2)
{ {
float speed = (float)atof(COM_Argv(3)); float speed = (float)atof(COM_Argv(2));
if (speed > 0.0f) if (speed > 0.0f)
S_SpeedMusic(speed); I_SetSongSpeed(speed);
} }
} }