aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/game/service_elevator_window.cpp6
-rw-r--r--engines/titanic/support/avi_surface.cpp8
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