aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/saga/animation.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp
index d254c69078..eef4e46f1b 100644
--- a/engines/saga/animation.cpp
+++ b/engines/saga/animation.cpp
@@ -166,7 +166,18 @@ void Anim::playCutaway(int cut, bool fade) {
setCycles(MAX_ANIMATIONS + cutawaySlot, _cutawayList[cut].cycles);
setFrameTime(MAX_ANIMATIONS + cutawaySlot, 1000 / _cutawayList[cut].frameRate);
- play(MAX_ANIMATIONS + cutawaySlot, 0);
+ if (_cutAwayMode != kPanelVideo)
+ play(MAX_ANIMATIONS + cutawaySlot, 0);
+ else {
+ Event event;
+ event.type = kEvTOneshot;
+ event.code = kAnimEvent;
+ event.op = kEventPlay;
+ event.param = MAX_ANIMATIONS + cutawaySlot;
+ event.time = (40 / 3) * 1000 / _cutawayList[cut].frameRate;
+
+ _vm->_events->queue(&event);
+ }
}
void Anim::endCutaway(void) {
@@ -236,6 +247,7 @@ void Anim::startVideo(int vid, bool fade) {
_vm->_gfx->getCurrentPal(saved_pal);
_vm->_interface->setStatusText("");
+ _vm->_frameCount = 0;
playCutaway(vid, fade);
}
@@ -363,17 +375,10 @@ void Anim::play(uint16 animId, int vectorTime, bool playing) {
return;
}
- // HACK: When a video is played in IHNM, the animation starts playing before sfwaitframes
- // is called, which causes the game to wait forever. Raise the framecount by 10 to avoid lockup
- // TODO: remove this hack
- if (_vm->_interface->getMode() == kPanelVideo)
- _vm->_frameCount += 10;
-
if (anim->completed < anim->cycles) {
frame = anim->currentFrame;
// FIXME: if start > 0, then this works incorrectly
decodeFrame(anim, anim->frameOffsets[frame], displayBuffer, _vm->getDisplayWidth() * _vm->getDisplayHeight());
-
_vm->_frameCount++;
anim->currentFrame++;
if (anim->completed != 65535) {
@@ -388,6 +393,7 @@ void Anim::play(uint16 animId, int vectorTime, bool playing) {
}
}
} else {
+ _vm->_frameCount++;
// Animation done playing
anim->state = ANIM_PAUSE;
if (anim->linkId == -1) {