diff options
-rw-r--r-- | engines/kyra/kyra_lok.cpp | 12 | ||||
-rw-r--r-- | engines/kyra/script_lok.cpp | 19 |
2 files changed, 16 insertions, 15 deletions
diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp index 74db67d22b..d7e79575ec 100644 --- a/engines/kyra/kyra_lok.cpp +++ b/engines/kyra/kyra_lok.cpp @@ -510,14 +510,10 @@ void KyraEngine_LoK::delay(uint32 amount, bool update, bool isMainLoop) { updateTextFade(); updateMousePointer(); } else { - // We call OSystem::updateScreen here and not Screen::updateScreen - // to avoid new graphics changes to be copied to the screen. - // This assures the workaround of bug #1498221 - // "KYRA1: Glitches when meeting Zanthia" is working correctly. - // Since we only call updateScreen here to let systems with frame - // update count limitations not miss any graphics updates it - // should not cause any problems. - _system->updateScreen(); + // We need to do Screen::updateScreen here, since client code + // relies on this method to copy screen changes to the actual + // screen since at least 0af418e7ea3a41f93fcc551a45ee5bae822d812a. + _screen->updateScreen(); } _isSaveAllowed = isMainLoop; diff --git a/engines/kyra/script_lok.cpp b/engines/kyra/script_lok.cpp index 135925afd9..8342bccab6 100644 --- a/engines/kyra/script_lok.cpp +++ b/engines/kyra/script_lok.cpp @@ -720,14 +720,19 @@ int KyraEngine_LoK::o1_displayWSASequentialFrames(EMCState *script) { if (maxTime - 1 <= 0) maxTime = 1; - // Workaround for bug #1498221 "KYRA1: Glitches when meeting Zanthia" - // the original didn't do a forced screen update after displaying a wsa frame - // while we have to do it, which make brandon disappear for a short moment, - // what shouldn't happen. So we're not updating the screen for this special - // case too. - if (startFrame == 18 && endFrame == 18 && _currentRoom == 45) { + // WORKAROUND for bug #1498221 "KYRA1: Glitches when meeting Zanthia". + // The original did not do a forced screen update after displaying a WSA + // frame while we have to do it, which makes Brandon disappear for a short + // moment. That is not supposed to happen. So we're not updating the + // screen for this special case. + // This is only an issue for the CD version, but since the floppy version + // does not use the specified paramaeters like these, it is safe to enable + // it for all versions. + if (startFrame == 18 && endFrame == 18 && waitTime == 10 && wsaIndex == 0 && _currentRoom == 45) { _movieObjects[wsaIndex]->displayFrame(18, 0, xpos, ypos, 0, 0, 0); - delay(waitTime * _tickLength); + // We call delayMillis manually here to avoid the screen getting + // updated. + _system->delayMillis(waitTime * _tickLength); return 0; } |