diff --git a/scihunt.fmf b/scihunt.fmf index 2a1f2bd2..527a8650 100644 --- a/scihunt.fmf +++ b/scihunt.fmf @@ -22,6 +22,7 @@ BASEGAME scihunt -seta gameinfo_svonly "0" -seta gameinfo_url_info "www.richwhitehouse.com" -seta gameinfo_url_dl "http://www.frag-net.com/mods/scihunt.fmf" +-seta gameinfo_menutrack "sound/Hondo2/pca.wav" // download/update packaging information PACKAGE scihunt/pak0.pk3 0xc1cbd5c1 "http://www.frag-net.com/files/scihunt_pak0.pk3" diff --git a/src/client/music.c b/src/client/music.c index 3be3f161..53aec500 100644 --- a/src/client/music.c +++ b/src/client/music.c @@ -14,74 +14,13 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* we're forced to support a few different paths */ -enum -{ - MUSIC_AUTO, - MUSIC_FLAC, /* requires fteplug_ffmpeg */ - MUSIC_STEAMHL -}; - -string g_steamhltracks[27] = { - "media/Half-Life01.mp3", - "media/Prospero01.mp3", - "media/Half-Life12.mp3", - "media/Half-Life07.mp3", - "media/Half-Life10.mp3", - "media/Suspense01.mp3", - "media/Suspense03.mp3", - "media/Half-Life09.mp3", - "media/Half-Life02.mp3", - "media/Half-Life13.mp3", - "media/Half-Life04.mp3", - "media/Half-Life15.mp3", - "media/Half-Life14.mp3", - "media/Half-Life16.mp3", - "media/Suspense02.mp3", - "media/Half-Life03.mp3", - "media/Half-Life08.mp3", - "media/Prospero02.mp3", - "media/Half-Life05.mp3", - "media/Prospero04.mp3", - "media/Half-Life11.mp3", - "media/Half-Life06.mp3", - "media/Prospero03.mp3", - "media/Half-Life17.mp3", - "media/Prospero05.mp3", - "media/Suspense05.mp3", - "media/Suspense07.mp3" -}; - -var int autocvar_cl_musicstyle = MUSIC_AUTO; - -/* some installs may have the music in media/, others may be in music/ */ -string -Music_GetPath(int id) -{ - if (autocvar_cl_musicstyle == MUSIC_AUTO) { - return sprintf("%i", id); - } else if (autocvar_cl_musicstyle == MUSIC_FLAC) { - return sprintf("music/track%02i.flac", id); - } else if (autocvar_cl_musicstyle == MUSIC_STEAMHL) { - if (id >= 2 && id <= 28) { - return g_steamhltracks[id - 2]; - } - } - - return ""; -} - /* EV_MUSICTRACK */ void Music_ParseTrack(void) { int track; - string path; - track = readbyte(); - path = Music_GetPath(track); - dprint(sprintf("^2Music_ParseTrack:^7 Single track %i from %s\n", track, path)); - localcmd(sprintf("music %s -\n", path)); + localcmd(sprintf("menu_musictrack %i\n", track)); } /* EV_MUSICLOOP */ @@ -89,10 +28,6 @@ void Music_ParseLoop(void) { int track; - string path; - track = readbyte(); - path = Music_GetPath(track); - dprint(sprintf("^2Music_ParseLoop:^7 Looping track %i from %s\n", track, path)); - localcmd(sprintf("music %s\n", path)); + localcmd(sprintf("menu_musicloop %i\n", track)); } diff --git a/src/menu-fn/entry.cpp b/src/menu-fn/entry.cpp index 0d5e1930..4eef34af 100644 --- a/src/menu-fn/entry.cpp +++ b/src/menu-fn/entry.cpp @@ -85,6 +85,7 @@ void m_init(void) if (cvar_string("game") != "valve") { m_intro_skip(); + Music_MenuStart(); } } @@ -209,6 +210,12 @@ float m_consolecommand(string cmd) { tokenize(cmd); switch (argv(0)) { + case "menu_musictrack": + Music_ParseTrack(argv(1)); + break; + case "menu_musicloop": + Music_ParseLoop(argv(1)); + break; case "menu_customgame": g_menupage = PAGE_CUSTOMGAME; m_intro_skip(); diff --git a/src/menu-fn/m_customgame.cpp b/src/menu-fn/m_customgame.cpp index 03759ec0..0344ea4e 100644 --- a/src/menu-fn/m_customgame.cpp +++ b/src/menu-fn/m_customgame.cpp @@ -143,6 +143,9 @@ void games_init(void) case "gameinfo_trainingmap": games[id].trainingmap = argv(i+1); break; + case "gameinfo_menutrack": + cvar_set("gameinfo_menutrack", argv(i+1)); + break; default: break; } diff --git a/src/menu-fn/m_intro.cpp b/src/menu-fn/m_intro.cpp index 3e2263a2..4ff89ed1 100644 --- a/src/menu-fn/m_intro.cpp +++ b/src/menu-fn/m_intro.cpp @@ -52,7 +52,7 @@ void m_intro_draw(void) if (g_intro_stage != INTRO_FADETOWHITE) { localcmd("play debris/beamstart5.wav\n"); - localcmd("music music/track03.flac\n"); + localcmd("menu_musicloop 3\n"); g_intro_stage = INTRO_FADETOWHITE; } } else { diff --git a/src/menu-fn/music.cpp b/src/menu-fn/music.cpp new file mode 100644 index 00000000..8c3bed14 --- /dev/null +++ b/src/menu-fn/music.cpp @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2016-2019 Marco Hladik + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* we're forced to support a few different paths */ +enum +{ + MUSIC_AUTO, + MUSIC_FLAC, /* requires fteplug_ffmpeg */ + MUSIC_STEAMHL +}; + +string g_steamhltracks[27] = { + "media/Half-Life01.mp3", + "media/Prospero01.mp3", + "media/Half-Life12.mp3", + "media/Half-Life07.mp3", + "media/Half-Life10.mp3", + "media/Suspense01.mp3", + "media/Suspense03.mp3", + "media/Half-Life09.mp3", + "media/Half-Life02.mp3", + "media/Half-Life13.mp3", + "media/Half-Life04.mp3", + "media/Half-Life15.mp3", + "media/Half-Life14.mp3", + "media/Half-Life16.mp3", + "media/Suspense02.mp3", + "media/Half-Life03.mp3", + "media/Half-Life08.mp3", + "media/Prospero02.mp3", + "media/Half-Life05.mp3", + "media/Prospero04.mp3", + "media/Half-Life11.mp3", + "media/Half-Life06.mp3", + "media/Prospero03.mp3", + "media/Half-Life17.mp3", + "media/Prospero05.mp3", + "media/Suspense05.mp3", + "media/Suspense07.mp3" +}; + +var int autocvar_cl_musicstyle = MUSIC_AUTO; + +/* some installs may have the music in media/, others may be in music/ */ +string +Music_GetPath(int id) +{ + if (autocvar_cl_musicstyle == MUSIC_AUTO) { + return sprintf("%i", id); + } else if (autocvar_cl_musicstyle == MUSIC_FLAC) { + return sprintf("music/track%02i.flac", id); + } else if (autocvar_cl_musicstyle == MUSIC_STEAMHL) { + if (id >= 2 && id <= 28) { + return g_steamhltracks[id - 2]; + } + } + + return ""; +} + +/* EV_MUSICTRACK */ +void +Music_ParseTrack(string parm) +{ + int track; + string path; + + track = stof(parm); + path = Music_GetPath(track); + dprint(sprintf("^2Music_ParseTrack:^7 Single track %i from %s\n", track, path)); + localcmd(sprintf("music %s -\n", path)); +} + +/* EV_MUSICLOOP */ +void +Music_ParseLoop(string parm) +{ + int track; + string path; + + track = stof(parm); + path = Music_GetPath(track); + dprint(sprintf("^2Music_ParseLoop:^7 Looping track %i from %s\n", track, path)); + localcmd(sprintf("music %s\n", path)); +} + +void +Music_MenuStart(void) +{ + string tinfo = cvar_string("gameinfo_menutrack"); + if (tinfo) { + localcmd(sprintf("music %s\n", tinfo)); + } +} diff --git a/src/menu-fn/progs.src b/src/menu-fn/progs.src index 2530acea..c9ad3f7f 100644 --- a/src/menu-fn/progs.src +++ b/src/menu-fn/progs.src @@ -62,7 +62,7 @@ m_viewgameinfo.cpp m_viewreadme.cpp m_intro.cpp m_main.cpp - +music.cpp menu.cpp entry.cpp #endlist