aboutsummaryrefslogtreecommitdiff
path: root/engines/zvision/scripting
diff options
context:
space:
mode:
authorFilippos Karapetis2014-12-23 00:02:30 +0200
committerFilippos Karapetis2014-12-23 00:07:45 +0200
commit3f36cc94e45d32dc4784c16ec91b6fc44dbf0ff7 (patch)
tree1b9de91ab1addd74821114073c1ce4cb1c77fd17 /engines/zvision/scripting
parent4e60fa705fd22069565cdb17c907f91301a67dc5 (diff)
downloadscummvm-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
Diffstat (limited to 'engines/zvision/scripting')
-rw-r--r--engines/zvision/scripting/actions.cpp7
-rw-r--r--engines/zvision/scripting/sidefx/animation_node.cpp18
-rw-r--r--engines/zvision/scripting/sidefx/animation_node.h1
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();
};