aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorColin Snover2017-07-07 11:30:07 -0500
committerColin Snover2017-07-07 13:28:54 -0500
commit07d6ffd989ce89e52c6381d8c9a2c53ffaa7e05e (patch)
treef6c1673105ceb475d099e972e9ae465425e40f1d /engines/sci
parent90cd56e4b6f008c9dbb3f9d1b34bca4a786c40ac (diff)
downloadscummvm-rg350-07d6ffd989ce89e52c6381d8c9a2c53ffaa7e05e.tar.gz
scummvm-rg350-07d6ffd989ce89e52c6381d8c9a2c53ffaa7e05e.tar.bz2
scummvm-rg350-07d6ffd989ce89e52c6381d8c9a2c53ffaa7e05e.zip
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.
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/engine/features.cpp17
-rw-r--r--engines/sci/engine/features.h5
-rw-r--r--engines/sci/sound/music.cpp16
3 files changed, 37 insertions, 1 deletions
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
@@ -229,6 +229,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) {