diff --git a/engines/scumm/gfx_gui.cpp b/engines/scumm/gfx_gui.cpp index 876411166f3..b188dead47a 100644 --- a/engines/scumm/gfx_gui.cpp +++ b/engines/scumm/gfx_gui.cpp @@ -1156,9 +1156,9 @@ bool ScummEngine::executeMainMenuOperation(int op, int mouseX) { ScummEngine::drawDirtyScreenParts(); break; case GUI_CTRL_TEXT_SPEED_SLIDER: - _defaultTalkDelay = CLIP(9 - (mouseX - 108) / 9, 0, 9); - ConfMan.setInt("original_gui_text_speed", _defaultTalkDelay); - setTalkSpeed(9 - _defaultTalkDelay); + _defaultTextSpeed = CLIP((mouseX - 108) / 9, 0, 9); + ConfMan.setInt("original_gui_text_speed", _defaultTextSpeed); + setTalkSpeed(_defaultTextSpeed); syncSoundSettings(); ConfMan.flushToDisk(); updateMainMenuControls(); diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp index cc2e43a254e..bac29ae0de1 100644 --- a/engines/scumm/input.cpp +++ b/engines/scumm/input.cpp @@ -563,6 +563,10 @@ void ScummEngine_v7::processKeyboard(Common::KeyState lastKeyHit) { VAR(VAR_CHARINC) = 9; } + _defaultTextSpeed = 9 - VAR(VAR_CHARINC); + ConfMan.setInt("original_gui_text_speed", _defaultTextSpeed); + setTalkSpeed(_defaultTextSpeed); + getSliderString(gsTextSpeedSlider, VAR(VAR_CHARINC), sliderString, sizeof(sliderString)); showBannerAndPause(0, 0, sliderString); ks = Common::KEYCODE_INVALID; @@ -949,20 +953,20 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) { syncSoundSettings(); } else if (optionKeysEnabled && (lastKeyHit.ascii == '-' || lastKeyHit.ascii == '+')) { // Change text speed - if (lastKeyHit.ascii == '+' && _defaultTalkDelay > 0) - _defaultTalkDelay--; - else if (lastKeyHit.ascii == '-' && _defaultTalkDelay < 9) - _defaultTalkDelay++; + if (lastKeyHit.ascii == '-' && _defaultTextSpeed > 0) + _defaultTextSpeed--; + else if (lastKeyHit.ascii == '+' && _defaultTextSpeed < 9) + _defaultTextSpeed++; // Display the talk speed - ValueDisplayDialog dlg(_("Subtitle speed: "), 0, 9, 9 - _defaultTalkDelay, '+', '-'); - _defaultTalkDelay = 9 - runDialog(dlg); + ValueDisplayDialog dlg(_("Subtitle speed: "), 0, 9, _defaultTextSpeed, '+', '-'); + _defaultTextSpeed = runDialog(dlg); // Save the new talkspeed value to ConfMan - setTalkSpeed(_defaultTalkDelay); + setTalkSpeed(_defaultTextSpeed); if (VAR_CHARINC != 0xFF) - VAR(VAR_CHARINC) = _defaultTalkDelay; + VAR(VAR_CHARINC) = 9 - _defaultTextSpeed; } else { diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index 487f46a3480..080b0ec68d6 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -789,7 +789,7 @@ bool ScummEngine::loadState(int slot, bool compat, Common::String &filename) { if (_game.version == 8) _scummVars[VAR_CHARINC] = (_game.features & GF_DEMO) ? 3 : 1; // Needed due to subtitle speed changes - _defaultTalkDelay /= 20; + _defaultTextSpeed /= 20; } // For a long time, we used incorrect locations for some camera related @@ -1325,7 +1325,7 @@ void ScummEngine::saveLoadWithSerializer(Common::Serializer &s) { s.syncAsByte(_useTalkAnims, VER(8)); s.syncAsSint16LE(_talkDelay, VER(8)); - s.syncAsSint16LE(_defaultTalkDelay, VER(8)); + s.syncAsSint16LE(_defaultTextSpeed, VER(8)); s.skip(2, VER(8), VER(27)); // _numInMsgStack s.syncAsByte(_sentenceNum, VER(8)); diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 3e9e06b0f39..6c16194881e 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -1240,6 +1240,11 @@ Common::Error ScummEngine::init() { ConfMan.setBool("subtitles", true); } + // While most games set their own default talkspeed at start-up, + // some don't, so let's preventively set a default one. + if (!ConfMan.hasKey("talkspeed", _targetName)) + setTalkSpeed(_defaultTextSpeed); + syncSoundSettings(); return Common::kNoError; @@ -1674,7 +1679,7 @@ void ScummEngine::resetScumm() { _varwatch = -1; _screenStartStrip = 0; - _defaultTalkDelay = 3; + _defaultTextSpeed = 6; _talkDelay = 0; _keepText = false; _nextLeft = 0; @@ -2116,16 +2121,10 @@ void ScummEngine::syncSoundSettings() { ConfMan.setInt("original_gui_text_speed", getTalkSpeed()); } - _defaultTalkDelay = ConfMan.getInt("original_gui_text_speed"); + _defaultTextSpeed = ConfMan.getInt("original_gui_text_speed"); - // In the original games the talk delay is represented as text speed, - // so we have to invert the value: - // - 9 is the highest text speed possible; - // - 0 is the lowest text speed possible. if (VAR_CHARINC != 0xFF) - VAR(VAR_CHARINC) = 9 - _defaultTalkDelay; - } else if (_game.version != 8) { - ConfMan.setInt("original_gui_text_speed", getTalkSpeed()); + VAR(VAR_CHARINC) = 9 - _defaultTextSpeed; } if (_game.version >= 7 && _imuseDigital) { @@ -2168,14 +2167,10 @@ void ScummEngine::syncSoundSettings() { VAR(VAR_VOICE_MODE) = _voiceMode; if (ConfMan.hasKey("talkspeed", _targetName)) { - _defaultTalkDelay = getTalkSpeed(); + _defaultTextSpeed = getTalkSpeed(); - // In the original games the talk delay is represented as text speed, - // so we have to invert the value: - // - 9 is the highest text speed possible; - // - 0 is the lowest text speed possible. if (VAR_CHARINC != 0xFF) - VAR(VAR_CHARINC) = 9 - _defaultTalkDelay; + VAR(VAR_CHARINC) = 9 - _defaultTextSpeed; } // Backyard Baseball 2003 uses a unique subtitle variable, @@ -2871,7 +2866,7 @@ void ScummEngine_v5::scummLoop_handleSaveLoad() { // For LOOM VGA Talkie, we restore the text glyphs on top of the note verbs // and also restore the text description on top of the image of the selected - // object in the bottom right corner. + // object in the bottom right corner. // These text parts are not actually connected to the verbs (which are image // verbs only). redrawVerbs() will not restore them. They require some script // work. The original interpreter just sets this variable after loading. diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 4f74d275ec2..ba82305e47f 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -1345,7 +1345,7 @@ protected: bool _haveActorSpeechMsg = false; bool _useTalkAnims = false; - uint16 _defaultTalkDelay = 0; + uint16 _defaultTextSpeed = 0; int _saveSound = 0; bool _native_mt32 = false; bool _enable_gs = false; diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp index 2a79c4da053..8e9e41f8ed7 100644 --- a/engines/scumm/string.cpp +++ b/engines/scumm/string.cpp @@ -790,7 +790,7 @@ void ScummEngine::CHARSET_1() { restoreCharsetBg(); _msgCount = 0; } else if (_game.version <= 2) { - _talkDelay += _msgCount * _defaultTalkDelay; + _talkDelay += _msgCount * _defaultTextSpeed; } if (_game.version > 3) { @@ -892,7 +892,7 @@ void ScummEngine::CHARSET_1() { mac_drawIndy3TextBox(); if (_game.version <= 2) { - _talkDelay += _defaultTalkDelay; + _talkDelay += _defaultTextSpeed; VAR(VAR_CHARCOUNT)++; } else { _talkDelay += (int)VAR(VAR_CHARINC);