diff --git a/engines/titanic/support/avi_surface.cpp b/engines/titanic/support/avi_surface.cpp index 69c006e6e8f..11b6b68ca41 100644 --- a/engines/titanic/support/avi_surface.cpp +++ b/engines/titanic/support/avi_surface.cpp @@ -472,11 +472,20 @@ Graphics::ManagedSurface *AVISurface::duplicateTransparency() const { } void AVISurface::playCutscene(const Rect &r, uint startFrame, uint endFrame) { - bool isDifferent = _movieFrameSurface[0]->w != r.width() || - _movieFrameSurface[0]->h != r.height(); + bool isDifferent = false; + + if (_currentFrame != ((int)startFrame - 1) || startFrame == 0) { + // Start video playback at the desired starting frame + setFrame(startFrame); + isDifferent = _movieFrameSurface[0]->w != r.width() || + _movieFrameSurface[0]->h != r.height(); - startAtFrame(startFrame); - _currentFrame = startFrame; + startAtFrame(startFrame); + _currentFrame = startFrame; + } else { + // Already in position, so pick up where we left off + _decoder->start(); + } while (_currentFrame < (int)endFrame && !g_vm->shouldQuit()) { if (isNextFrame()) { diff --git a/engines/titanic/support/movie.cpp b/engines/titanic/support/movie.cpp index 3095715bc9c..eb65cf1a8a0 100644 --- a/engines/titanic/support/movie.cpp +++ b/engines/titanic/support/movie.cpp @@ -124,7 +124,6 @@ void OSMovie::playCutscene(const Rect &drawRect, uint startFrame, uint endFrame) CEventTarget eventTarget; g_vm->_events->addTarget(&eventTarget); - _aviSurface.setFrame(startFrame); _aviSurface.playCutscene(drawRect, startFrame, endFrame); g_vm->_events->removeTarget();