mirror of
https://github.com/blupi-games/planetblupi
synced 2024-12-30 10:15:36 +01:00
Look music for user dir, fallback to the game dir
Then it's possible to overload the original musicis by providing yours in the user directory (in music subdir).
This commit is contained in:
parent
d2bfd12934
commit
67ea4d0c2e
@ -3362,18 +3362,29 @@ CEvent::ChangePhase (Uint32 phase)
|
||||
music = m_pDecor->GetMusic ();
|
||||
if (music > 0)
|
||||
{
|
||||
const std::string exts[] = {"ogg", "mid"};
|
||||
static const std::string exts[] = {"ogg", "mid"};
|
||||
static const Location locs[] = {LOCATION_USER, LOCATION_BASE};
|
||||
std::string absolute;
|
||||
|
||||
filename = string_format (
|
||||
"music/music%.3d.%s", music - 1,
|
||||
exts[g_restoreMidi ? 1 : 0].c_str ());
|
||||
if (!FileExists (filename))
|
||||
// Look for music in the user directory, then in the game directory.
|
||||
for (size_t i = 0; i < countof (locs); ++i)
|
||||
{
|
||||
filename = string_format (
|
||||
"music/music%.3d.%s", music - 1,
|
||||
exts[g_restoreMidi ? 0 : 1].c_str ());
|
||||
exts[g_restoreMidi ? 1 : 0].c_str ());
|
||||
if (!FileExists (filename, absolute, locs[i]))
|
||||
filename = string_format (
|
||||
"music/music%.3d.%s", music - 1,
|
||||
exts[g_restoreMidi ? 0 : 1].c_str ());
|
||||
|
||||
if (FileExists (filename, absolute, locs[i]))
|
||||
break;
|
||||
|
||||
absolute = "";
|
||||
}
|
||||
|
||||
m_pSound->StopMusic ();
|
||||
m_pSound->PlayMusic (filename);
|
||||
m_pSound->PlayMusic (absolute);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4403,7 +4414,8 @@ CEvent::StartMovie (const std::string & pFilename)
|
||||
if (!m_bMovie)
|
||||
return false;
|
||||
|
||||
if (!FileExists (pFilename))
|
||||
std::string absolute;
|
||||
if (!FileExists (pFilename, absolute))
|
||||
return false;
|
||||
|
||||
HideMouse (true);
|
||||
|
24
src/misc.cxx
24
src/misc.cxx
@ -157,12 +157,28 @@ AddUserPath (std::string & pFilename)
|
||||
}
|
||||
|
||||
bool
|
||||
FileExists (const std::string & filename)
|
||||
FileExists (
|
||||
const std::string & filename, std::string & absolute, enum Location location)
|
||||
{
|
||||
const auto path = GetBaseDir () + filename;
|
||||
FILE * file;
|
||||
absolute = filename;
|
||||
FILE * file;
|
||||
|
||||
file = fopen (path.c_str (), "rb");
|
||||
switch (location)
|
||||
{
|
||||
case LOCATION_BASE:
|
||||
absolute = GetBaseDir () + filename;
|
||||
break;
|
||||
|
||||
case LOCATION_USER:
|
||||
AddUserPath (absolute);
|
||||
break;
|
||||
|
||||
default:
|
||||
case LOCATION_ABSOLUTE:
|
||||
break;
|
||||
}
|
||||
|
||||
file = fopen (absolute.c_str (), "rb");
|
||||
if (file == nullptr)
|
||||
return false;
|
||||
|
||||
|
@ -37,7 +37,11 @@ std::string GetBaseDir ();
|
||||
std::string GetShareDir ();
|
||||
std::string GetLocale ();
|
||||
extern void AddUserPath (std::string & pFilename);
|
||||
bool FileExists (const std::string & filename);
|
||||
|
||||
enum Location { LOCATION_ABSOLUTE, LOCATION_BASE, LOCATION_USER };
|
||||
bool FileExists (
|
||||
const std::string & filename, std::string & absolute,
|
||||
Location location = LOCATION_BASE);
|
||||
|
||||
template <typename... Args>
|
||||
std::string
|
||||
|
@ -326,20 +326,19 @@ CSound::PlayImage (Sounds channel, Point pos, Sint32 rank)
|
||||
bool
|
||||
CSound::PlayMusic (const std::string & lpszMIDIFilename)
|
||||
{
|
||||
std::string path = GetBaseDir ();
|
||||
|
||||
if (m_midiVolume == 0)
|
||||
return true;
|
||||
|
||||
if (lpszMIDIFilename.empty ())
|
||||
return false;
|
||||
|
||||
Mix_VolumeMusic (MIX_MAX_VOLUME * 100 * m_midiVolume / 20 / 100);
|
||||
m_lastMidiVolume = m_midiVolume;
|
||||
|
||||
path += lpszMIDIFilename;
|
||||
|
||||
if (m_pMusic)
|
||||
Mix_FreeMusic (m_pMusic);
|
||||
|
||||
m_pMusic = Mix_LoadMUS (path.c_str ());
|
||||
m_pMusic = Mix_LoadMUS (lpszMIDIFilename.c_str ());
|
||||
if (!m_pMusic)
|
||||
{
|
||||
printf ("%s\n", Mix_GetError ());
|
||||
|
Loading…
x
Reference in New Issue
Block a user