aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorColin Snover2016-12-01 12:53:02 -0600
committerColin Snover2016-12-03 12:00:58 -0600
commit68023904a4c4138cdd87e8f86ebddb19be802309 (patch)
tree9a45a95c596e985841273df0c1f8da79890a8edd /engines
parent3d83ab2cf01867fdb98362cdd4589c02ebde0e11 (diff)
downloadscummvm-rg350-68023904a4c4138cdd87e8f86ebddb19be802309.tar.gz
scummvm-rg350-68023904a4c4138cdd87e8f86ebddb19be802309.tar.bz2
scummvm-rg350-68023904a4c4138cdd87e8f86ebddb19be802309.zip
SCI32: Fix LSL6hires text speed slider
For whatever reason, this game uses a different global for specifying the text speed.
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/vm.cpp23
-rw-r--r--engines/sci/engine/vm.h1
-rw-r--r--engines/sci/sci.cpp15
3 files changed, 32 insertions, 7 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 01051ebdd4..92228fd38a 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -199,6 +199,23 @@ static void write_var(EngineState *s, int type, int index, reg_t value) {
s->variables[type][index] = value;
+#ifdef ENABLE_SCI32
+ if (type == VAR_GLOBAL && getSciVersion() >= SCI_VERSION_2 && g_sci->getEngineState()->_syncedAudioOptions) {
+
+ switch (g_sci->getGameId()) {
+ case GID_LSL6HIRES:
+ if (index == kGlobalVarLSL6HiresTextSpeed) {
+ ConfMan.setInt("talkspeed", (14 - value.toSint16()) * 255 / 13);
+ }
+ break;
+ default:
+ if (index == kGlobalVarTextSpeed) {
+ ConfMan.setInt("talkspeed", (8 - value.toSint16()) * 255 / 8);
+ }
+ }
+ }
+#endif
+
if (type == VAR_GLOBAL && index == kGlobalVarMessageType) {
// The game is trying to change its speech/subtitle settings
if (!g_sci->getEngineState()->_syncedAudioOptions || s->variables[VAR_GLOBAL][kGlobalVarQuit] == TRUE_REG) {
@@ -212,12 +229,6 @@ static void write_var(EngineState *s, int type, int index, reg_t value) {
g_sci->updateScummVMAudioOptions();
}
}
-
-#ifdef ENABLE_SCI32
- if (type == VAR_GLOBAL && index == kGlobalVarTextSpeed && getSciVersion() >= SCI_VERSION_2) {
- ConfMan.setInt("talkspeed", (8 - value.toSint16()) * 255 / 8);
- }
-#endif
}
}
diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h
index cec9e1528c..13f60fd49c 100644
--- a/engines/sci/engine/vm.h
+++ b/engines/sci/engine/vm.h
@@ -150,6 +150,7 @@ enum GlobalVar {
kGlobalVarFastCast = 84, // SCI16
kGlobalVarMessageType = 90,
kGlobalVarTextSpeed = 94, // SCI32; 0 is fastest, 8 is slowest
+ kGlobalVarLSL6HiresTextSpeed = 167, // 1 is fastest, 14 is slowest
kGlobalVarShivers1Score = 349
};
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index e89d05217c..1e3ab2ae34 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -1123,7 +1123,20 @@ void SciEngine::syncIngameAudioOptions() {
#ifdef ENABLE_SCI32
if (getSciVersion() >= SCI_VERSION_2) {
- _gamestate->variables[VAR_GLOBAL][kGlobalVarTextSpeed] = make_reg(0, 8 - ConfMan.getInt("talkspeed") * 8 / 255);
+ GlobalVar index;
+ uint16 textSpeed;
+
+ switch (g_sci->getGameId()) {
+ case GID_LSL6HIRES:
+ index = kGlobalVarLSL6HiresTextSpeed;
+ textSpeed = 14 - ConfMan.getInt("talkspeed") * 14 / 255 + 1;
+ break;
+ default:
+ index = kGlobalVarTextSpeed;
+ textSpeed = 8 - ConfMan.getInt("talkspeed") * 8 / 255;
+ }
+
+ _gamestate->variables[VAR_GLOBAL][index] = make_reg(0, textSpeed);
}
#endif