aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/features.h
diff options
context:
space:
mode:
authorColin Snover2017-01-26 13:18:41 -0600
committerColin Snover2017-04-21 19:00:27 -0500
commit3303a881397beff1753fba237a5da735de03edb5 (patch)
tree8c3a682ee12840bfeaa9cb8e80967440d2aad26e /engines/sci/engine/features.h
parentc2e9fee93264468d89de66eccdc0cc712cdb76fe (diff)
downloadscummvm-rg350-3303a881397beff1753fba237a5da735de03edb5.tar.gz
scummvm-rg350-3303a881397beff1753fba237a5da735de03edb5.tar.bz2
scummvm-rg350-3303a881397beff1753fba237a5da735de03edb5.zip
SCI: Improve audio volume & settings sync code
This patch includes enhancements to the ScummVM integration with SCI engine, with particular focus on SCI32 support. 1. Fixes audio volumes syncing erroneously to ScummVM in games that modify the audio volume without user action (e.g. SCI1.1 talkies that reduce music volume during speech playback). Now, volumes will only be synchronised when the user interacts with the game's audio settings. This mechanism works by looking for a known volume control object in the stack, and only syncing when the control object is present. (Ports and planes were researched and found unreliable.) 2. Fixes audio syncing in SCI32 games that do not set game volumes through kDoSoundMasterVolume/kDoAudioVolume, like GK1, GK2, Phant1, and Torin. 3. Fixes speech/subtitles syncing in SCI32 games that do not use global 90, like LSL6hires. 4. Fixes in-game volume controls in SCI32 games reflecting outdated audio volumes when a change is made during the game from the ScummVM launcher. 5. Fixes SCI32 games that would restore volumes from save games or reset volumes on startup, which caused game volumes to be out-of-sync with ScummVM when started. 6. ScummVM integration code for audio sync has been abstracted into a new GuestAdditions class. This keeps the ScummVM- specific code all in one place, with only small hooks into the engine code. ScummVM integrated save/load code should probably also go here in the future. Fixes Trac#9700.
Diffstat (limited to 'engines/sci/engine/features.h')
-rw-r--r--engines/sci/engine/features.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/engines/sci/engine/features.h b/engines/sci/engine/features.h
index 8f84bbacad..044111a43e 100644
--- a/engines/sci/engine/features.h
+++ b/engines/sci/engine/features.h
@@ -40,6 +40,16 @@ enum PseudoMouseAbilityType {
kPseudoMouseAbilityTrue
};
+enum MessageTypeSyncStrategy {
+ kMessageTypeSyncStrategyNone,
+ kMessageTypeSyncStrategyDefault
+#ifdef ENABLE_SCI32
+ ,
+ kMessageTypeSyncStrategyLSL6Hires,
+ kMessageTypeSyncStrategyShivers
+#endif
+};
+
class GameFeatures {
public:
GameFeatures(SegManager *segMan, Kernel *kernel);
@@ -148,6 +158,40 @@ public:
#endif
/**
+ * If true, the current game supports simultaneous speech & subtitles.
+ */
+ bool supportsSpeechWithSubtitles() const;
+
+ /**
+ * If true, the game supports changing text speed.
+ */
+ bool supportsTextSpeed() const {
+ switch (g_sci->getGameId()) {
+#ifdef ENABLE_SCI32
+ case GID_GK1:
+ case GID_SQ6:
+ return true;
+#endif
+ default:
+ break;
+ }
+
+ return false;
+ }
+
+ /**
+ * If true, audio volume sync between the game and ScummVM is done by
+ * monitoring and setting game global variables.
+ */
+ bool audioVolumeSyncUsesGlobals() const;
+
+ /**
+ * The strategy that should be used when synchronising the message type
+ * (text/speech/text+speech) between the game and ScummVM.
+ */
+ MessageTypeSyncStrategy getMessageTypeSyncStrategy() const;
+
+ /**
* Applies to all versions before 0.000.502
* Old SCI versions used to interpret the third DrawPic() parameter inversely,
* with the opposite default value (obviously).