diff options
author | Filippos Karapetis | 2014-12-23 00:02:30 +0200 |
---|---|---|
committer | Filippos Karapetis | 2014-12-23 00:07:45 +0200 |
commit | 3f36cc94e45d32dc4784c16ec91b6fc44dbf0ff7 (patch) | |
tree | 1b9de91ab1addd74821114073c1ce4cb1c77fd17 | |
parent | 4e60fa705fd22069565cdb17c907f91301a67dc5 (diff) | |
download | scummvm-rg350-3f36cc94e45d32dc4784c16ec91b6fc44dbf0ff7.tar.gz scummvm-rg350-3f36cc94e45d32dc4784c16ec91b6fc44dbf0ff7.tar.bz2 scummvm-rg350-3f36cc94e45d32dc4784c16ec91b6fc44dbf0ff7.zip |
ZVISION: Limit the default engine delay for all animations
This fixes the lag between frames for all in-game animations
with a default frame delay
-rw-r--r-- | engines/zvision/scripting/actions.cpp | 7 | ||||
-rw-r--r-- | engines/zvision/scripting/sidefx/animation_node.cpp | 18 | ||||
-rw-r--r-- | engines/zvision/scripting/sidefx/animation_node.h | 1 |
3 files changed, 8 insertions, 18 deletions
diff --git a/engines/zvision/scripting/actions.cpp b/engines/zvision/scripting/actions.cpp index 0422a2c028..0ada2edf81 100644 --- a/engines/zvision/scripting/actions.cpp +++ b/engines/zvision/scripting/actions.cpp @@ -577,7 +577,7 @@ ActionPreloadAnimation::ActionPreloadAnimation(ZVision *engine, int32 slotkey, c char fileName[25]; - // The two %*u are always 0 and dont seem to have a use + // The two %*u are usually 0 and dont seem to have a use sscanf(line.c_str(), "%25s %*u %*u %d %d", fileName, &_mask, &_framerate); if (_mask > 0) { @@ -1030,9 +1030,8 @@ bool ActionSyncSound::execute() { if (!(fx->getType() & SideFX::SIDEFX_ANIM)) return true; - AnimationNode *animnode = (AnimationNode *)fx; - if (animnode->getFrameDelay() > 200) // Hack for fix incorrect framedelay in some animpreload - animnode->setNewFrameDelay(66); // ~15fps + if (((AnimationNode *)fx)->getFrameDelay() > 200) + warning("ActionSyncSound: animation frame delay is higher than 200"); _engine->getScriptManager()->addSideFX(new SyncSoundNode(_engine, _slotKey, _fileName, _syncto)); return true; diff --git a/engines/zvision/scripting/sidefx/animation_node.cpp b/engines/zvision/scripting/sidefx/animation_node.cpp index 3a21227d1a..56f1fa3e49 100644 --- a/engines/zvision/scripting/sidefx/animation_node.cpp +++ b/engines/zvision/scripting/sidefx/animation_node.cpp @@ -42,6 +42,11 @@ AnimationNode::AnimationNode(ZVision *engine, uint32 controlKey, const Common::S _animation = engine->loadAnimation(fileName); _frmDelay = 1000.0 / _animation->getDuration().framerate(); + // WORKAROUND: We do not allow the engine to delay more than 66 msec + // per frame (15fps max) + if (_frmDelay > 66) + _frmDelay = 66; + if (frate > 0) _frmDelay = 1000.0 / frate; } @@ -190,19 +195,6 @@ bool AnimationNode::stop() { return false; } -void AnimationNode::setNewFrameDelay(int32 newDelay) { - if (newDelay > 0) { - PlayNodes::iterator it = _playList.begin(); - if (it != _playList.end()) { - playnode *nod = &(*it); - float percent = (float)nod->_delay / (float)_frmDelay; - nod->_delay = percent * newDelay; // Scale to new max - } - - _frmDelay = newDelay; - } -} - int32 AnimationNode::getFrameDelay() { return _frmDelay; } diff --git a/engines/zvision/scripting/sidefx/animation_node.h b/engines/zvision/scripting/sidefx/animation_node.h index 3adfd91f32..74941aa764 100644 --- a/engines/zvision/scripting/sidefx/animation_node.h +++ b/engines/zvision/scripting/sidefx/animation_node.h @@ -73,7 +73,6 @@ public: bool stop(); - void setNewFrameDelay(int32 newDelay); int32 getFrameDelay(); }; |