From 91aca8fa08a86615b8253e4459fab968db35be05 Mon Sep 17 00:00:00 2001
From: Tarek Soliman <tarek@bashasoliman.com>
Date: Mon, 28 Feb 2011 22:39:43 -0600
Subject: [PATCH] SCI: prefer MT32 in some older SCI games

---
 engines/sci/console.cpp                |    2 +-
 engines/sci/sound/drivers/midi.cpp     |   10 +++++-----
 engines/sci/sound/drivers/mididriver.h |    2 +-
 engines/sci/sound/music.cpp            |    5 ++++-
 4 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index f3c3657..ef2acb3 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -898,7 +898,7 @@ bool Console::cmdShowInstruments(int argc, const char **argv) {
 		songNumber = atoi(argv[1]);
 
 	SciVersion doSoundVersion = _engine->_features->detectDoSoundType();
-	MidiPlayer *player = MidiPlayer_Midi_create(doSoundVersion);
+	MidiPlayer *player = MidiPlayer_Midi_create(doSoundVersion, 0);
 	MidiParser_SCI *parser = new MidiParser_SCI(doSoundVersion, 0);
 	parser->setMidiDriver(player);
 	
diff --git a/engines/sci/sound/drivers/midi.cpp b/engines/sci/sound/drivers/midi.cpp
index 65ccaec..bf87fd8 100644
--- a/engines/sci/sound/drivers/midi.cpp
+++ b/engines/sci/sound/drivers/midi.cpp
@@ -50,7 +50,7 @@ public:
 		kMaxSysExSize = 264
 	};
 
-	MidiPlayer_Midi(SciVersion version);
+	MidiPlayer_Midi(SciVersion version, int flags);
 	virtual ~MidiPlayer_Midi();
 
 	int open(ResourceManager *resMan);
@@ -130,8 +130,8 @@ private:
 	byte _sysExBuf[kMaxSysExSize];
 };
 
-MidiPlayer_Midi::MidiPlayer_Midi(SciVersion version) : MidiPlayer(version), _playSwitch(true), _masterVolume(15), _isMt32(false), _hasReverb(false), _useMT32Track(true) {
-	MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI);
+MidiPlayer_Midi::MidiPlayer_Midi(SciVersion version, int flags) : MidiPlayer(version), _playSwitch(true), _masterVolume(15), _isMt32(false), _hasReverb(false), _useMT32Track(true) {
+	MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | flags);
 	_driver = createMidi(dev);
 
 	if (MidiDriver::getMusicType(dev) == MT_MT32 || ConfMan.getBool("native_mt32"))
@@ -1042,8 +1042,8 @@ byte MidiPlayer_Midi::getPlayId() const {
 	}
 }
 
-MidiPlayer *MidiPlayer_Midi_create(SciVersion version) {
-	return new MidiPlayer_Midi(version);
+MidiPlayer *MidiPlayer_Midi_create(SciVersion version, int flags) {
+	return new MidiPlayer_Midi(version, flags);
 }
 
 } // End of namespace Sci
diff --git a/engines/sci/sound/drivers/mididriver.h b/engines/sci/sound/drivers/mididriver.h
index f745d62..8a5f927 100644
--- a/engines/sci/sound/drivers/mididriver.h
+++ b/engines/sci/sound/drivers/mididriver.h
@@ -133,7 +133,7 @@ extern MidiPlayer *MidiPlayer_AmigaMac_create(SciVersion version);
 extern MidiPlayer *MidiPlayer_PCJr_create(SciVersion version);
 extern MidiPlayer *MidiPlayer_PCSpeaker_create(SciVersion version);
 extern MidiPlayer *MidiPlayer_CMS_create(SciVersion version);
-extern MidiPlayer *MidiPlayer_Midi_create(SciVersion version);
+extern MidiPlayer *MidiPlayer_Midi_create(SciVersion version, int flags);
 extern MidiPlayer *MidiPlayer_Fb01_create(SciVersion version);
 
 } // End of namespace Sci
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index 2331f2f..b291880 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -73,6 +73,9 @@ void SciMusic::init() {
 
 	if (getSciVersion() >= SCI_VERSION_2_1)
 		deviceFlags |= MDT_PREFER_GM;
+	else
+		deviceFlags |= MDT_PREFER_MT32;
+
 
 	// Currently our CMS implementation only supports SCI1(.1)
 	if (getSciVersion() >= SCI_VERSION_1_EGA_ONLY && getSciVersion() <= SCI_VERSION_1_1)
@@ -102,7 +105,7 @@ void SciMusic::init() {
 		if (ConfMan.getBool("native_fb01"))
 			_pMidiDrv = MidiPlayer_Fb01_create(_soundVersion);
 		else
-			_pMidiDrv = MidiPlayer_Midi_create(_soundVersion);
+			_pMidiDrv = MidiPlayer_Midi_create(_soundVersion, deviceFlags);
 	}
 
 	if (_pMidiDrv && !_pMidiDrv->open()) {
-- 
1.7.4.1

