diff options
author | Paul Gilbert | 2017-06-30 22:59:29 -0400 |
---|---|---|
committer | Paul Gilbert | 2017-06-30 22:59:29 -0400 |
commit | 28c461e2f93819ab3a524023d5453ad5f32943e9 (patch) | |
tree | 8b0b07ff24476b6bbf44c8750e0eac1575dc192a /engines | |
parent | e4ba3fccc3b3c231849e1304dd8ab2c9a37d8ee6 (diff) | |
download | scummvm-rg350-28c461e2f93819ab3a524023d5453ad5f32943e9.tar.gz scummvm-rg350-28c461e2f93819ab3a524023d5453ad5f32943e9.tar.bz2 scummvm-rg350-28c461e2f93819ab3a524023d5453ad5f32943e9.zip |
TITANIC: Don't set movie framerate until after movie has started
Diffstat (limited to 'engines')
-rw-r--r-- | engines/titanic/game/service_elevator_window.cpp | 6 | ||||
-rw-r--r-- | engines/titanic/support/avi_surface.cpp | 8 |
2 files changed, 11 insertions, 3 deletions
diff --git a/engines/titanic/game/service_elevator_window.cpp b/engines/titanic/game/service_elevator_window.cpp index d548bbf37e..887fd3d086 100644 --- a/engines/titanic/game/service_elevator_window.cpp +++ b/engines/titanic/game/service_elevator_window.cpp @@ -68,17 +68,19 @@ bool CServiceElevatorWindow::ServiceElevatorFloorChangeMsg(CServiceElevatorFloor return true; int count = clip->_endFrame - clip->_startFrame; - setMovieFrameRate(1.0 * count / fps); - int startFrame = clip->_startFrame + count * FACTORS[msg->_startFloor] / 100; int endFrame = clip->_startFrame + count * FACTORS[msg->_endFloor] / 100; + double rate = (startFrame < endFrame ? 1.0 : -1.0) * count / fps; if (_notifyFlag) { // Service elevator indicator playMovie(startFrame, endFrame, MOVIE_NOTIFY_OBJECT); + setMovieFrameRate(rate); } else { // Background outside elevator playMovie(startFrame, endFrame, 0); + setMovieFrameRate(rate); + if (_intoSpace) playClip("Into Space"); } diff --git a/engines/titanic/support/avi_surface.cpp b/engines/titanic/support/avi_surface.cpp index 0308465bc6..97cc68fc1a 100644 --- a/engines/titanic/support/avi_surface.cpp +++ b/engines/titanic/support/avi_surface.cpp @@ -147,8 +147,10 @@ bool AVISurface::startAtFrame(int frameNumber) { seekToFrame(frameNumber); // If we're in reverse playback, set the decoder to play in reverse - if (_isReversed) + if (_isReversed) { + _decoder->setReverse(true); _decoder->setRate(Common::Rational(-1)); + } renderFrame(); @@ -436,6 +438,10 @@ bool AVISurface::addEvent(int *frameNumber, CGameObject *obj) { } void AVISurface::setFrameRate(double rate) { + // Assert that the decoder is already playing, since otherwise setting + // the decoder rate would prematurely start playback + assert(_decoder->isPlaying()); + // Convert rate from fps to relative to 1.0 (normal speed) const int PRECISION = 10000; double playRate = rate / 15.0; // Standard 15 FPS |