From 07d6ffd989ce89e52c6381d8c9a2c53ffaa7e05e Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Fri, 7 Jul 2017 11:30:07 -0500 Subject: SCI32: Force General MIDI for games that support nothing else * MGDX has only GM music; * KQ7 1.x's AdLib data is incomplete, so is not usable even though it is partially there Fixes Trac#9789. --- engines/sci/engine/features.cpp | 17 +++++++++++++++++ engines/sci/engine/features.h | 5 +++++ engines/sci/sound/music.cpp | 16 +++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/engines/sci/engine/features.cpp b/engines/sci/engine/features.cpp index 76f3c358d4..bddcac920a 100644 --- a/engines/sci/engine/features.cpp +++ b/engines/sci/engine/features.cpp @@ -694,6 +694,23 @@ bool GameFeatures::useAltWinGMSound() { } } +bool GameFeatures::generalMidiOnly() { +#ifdef ENABLE_SCI32 + switch (g_sci->getGameId()) { + case GID_MOTHERGOOSEHIRES: + return true; + case GID_KQ7: { + SoundResource sound(13, g_sci->getResMan(), detectDoSoundType()); + return (sound.getTrackByType(/* AdLib */ 0) == nullptr); + } + default: + break; + } +#endif + + return false; +} + // PseudoMouse was added during SCI1 // PseudoMouseAbility is about a tiny difference in the keyboard driver, which sets the event type to either // 40h (old behaviour) or 44h (the keyboard driver actually added 40h to the existing value). diff --git a/engines/sci/engine/features.h b/engines/sci/engine/features.h index 4a5b9ebb22..41a4b6014b 100644 --- a/engines/sci/engine/features.h +++ b/engines/sci/engine/features.h @@ -228,6 +228,11 @@ public: */ bool useAltWinGMSound(); + /** + * Checks if the game only supports General MIDI for music playback. + */ + bool generalMidiOnly(); + /** * Forces DOS soundtracks in Windows CD versions when the user hasn't * selected a MIDI output device diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 6df25e1ab0..647f588d1e 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -68,7 +68,16 @@ void SciMusic::init() { _dwTempo = 0; Common::Platform platform = g_sci->getPlatform(); - uint32 deviceFlags = MDT_PCSPK | MDT_PCJR | MDT_ADLIB | MDT_MIDI; + uint32 deviceFlags; +#ifdef ENABLE_SCI32 + if (g_sci->_features->generalMidiOnly()) { + deviceFlags = MDT_MIDI; + } else { +#endif + deviceFlags = MDT_PCSPK | MDT_PCJR | MDT_ADLIB | MDT_MIDI; +#ifdef ENABLE_SCI32 + } +#endif // Default to MIDI for Windows versions of SCI1.1 games, as their // soundtrack is written for GM. @@ -93,6 +102,11 @@ void SciMusic::init() { 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(); +#ifdef ENABLE_SCI32 + } else if (g_sci->_features->generalMidiOnly() && _musicType != MT_GM) { + warning("This game only supports General MIDI, but a non-GM device has " + "been selected. Some music may be wrong or missing"); +#endif } switch (_musicType) { -- cgit v1.2.3