SCI: Fix for bug #3522046 "Detection of SQ4CD as Windows breaks Music"

Fall back to the DOS soundtracks in Windows CD versions if the user picks
a non-General MIDI music device, as the Windows tracks only contain MIDI
music
This commit is contained in:
Filippos Karapetis 2012-04-29 20:43:04 +03:00
parent 24e57808aa
commit e41e412c9e
3 changed files with 15 additions and 1 deletions

View File

@ -45,6 +45,7 @@ GameFeatures::GameFeatures(SegManager *segMan, Kernel *kernel) : _segMan(segMan)
_usesCdTrack = Common::File::exists("cdaudio.map");
if (!ConfMan.getBool("use_cdaudio"))
_usesCdTrack = false;
_forceDOSTracks = false;
}
reg_t GameFeatures::getDetectionAddr(const Common::String &objName, Selector slc, int methodNum) {
@ -642,7 +643,7 @@ MoveCountType GameFeatures::detectMoveCountType() {
}
bool GameFeatures::useAltWinGMSound() {
if (g_sci && g_sci->getPlatform() == Common::kPlatformWindows && g_sci->isCD()) {
if (g_sci && g_sci->getPlatform() == Common::kPlatformWindows && g_sci->isCD() && !_forceDOSTracks) {
SciGameId id = g_sci->getGameId();
return (id == GID_ECOQUEST ||
id == GID_JONES ||

View File

@ -117,6 +117,12 @@ public:
*/
bool useAltWinGMSound();
/**
* Forces DOS soundtracks in Windows CD versions when the user hasn't
* selected a MIDI output device
*/
void forceDOSTracks() { _forceDOSTracks = true; }
private:
reg_t getDetectionAddr(const Common::String &objName, Selector slc, int methodNum = -1);
@ -137,6 +143,7 @@ private:
MoveCountType _moveCountType;
bool _usesCdTrack;
bool _forceDOSTracks;
SegManager *_segMan;
Kernel *_kernel;

View File

@ -88,6 +88,12 @@ void SciMusic::init() {
uint32 dev = MidiDriver::detectDevice(deviceFlags);
_musicType = MidiDriver::getMusicType(dev);
if (g_sci->_features->useAltWinGMSound() && _musicType != MT_GM) {
warning("A Windows CD version with an alternate MIDI soundtrack has been chosen, "
"but no MIDI music device has been selected. Reverting to the DOS soundtrack");
g_sci->_features->forceDOSTracks();
}
switch (_musicType) {
case MT_ADLIB:
// FIXME: There's no Amiga sound option, so we hook it up to AdLib