aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorScott Percival2019-12-22 17:42:24 +0800
committerScott Percival2019-12-23 08:58:14 +0800
commit48499ac10a1f2b72959d763ac23462085276de79 (patch)
tree0174e258e2296c039367dcb73059d202e046375a /engines
parent9bbacd05398cb824c5b2c88991151968a17bdb62 (diff)
downloadscummvm-rg350-48499ac10a1f2b72959d763ac23462085276de79.tar.gz
scummvm-rg350-48499ac10a1f2b72959d763ac23462085276de79.tar.bz2
scummvm-rg350-48499ac10a1f2b72959d763ac23462085276de79.zip
DIRECTOR: Fix _nextFrame from getting clobbered by exitFrame events
Diffstat (limited to 'engines')
-rw-r--r--engines/director/score.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index acbccf145f..062cff06bd 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1351,8 +1351,22 @@ void Score::update() {
}
// For previous frame
- if (_currentFrame > 0)
- _lingo->processEvent(kEventExitFrame);
+ if (_currentFrame > 0) {
+ // When Lingo::func_goto* is called, _nextFrame is set
+ // and _skipFrameAdvance is set to true.
+ // However, the exitFrame event can overwrite the value
+ // for _nextFrame before it can be used.
+ // Because we still want to call exitFrame, we check if
+ // a goto call has been made and if so, cache the value
+ // of _nextFrame so it doesn't get wiped.
+ if (_vm->_skipFrameAdvance) {
+ uint16 nextFrameCache = _nextFrame;
+ _lingo->processEvent(kEventExitFrame);
+ _nextFrame = nextFrameCache;
+ } else {
+ _lingo->processEvent(kEventExitFrame);
+ }
+ }
if (!_vm->_playbackPaused) {
if (_nextFrame)