aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorMartin Kiewitz2009-10-08 09:29:14 +0000
committerMartin Kiewitz2009-10-08 09:29:14 +0000
commitbac0c769475bde85a240c557b7dab28c345dae4a (patch)
treee9ccd67224773d253413fb3b97ded372908958a6 /engines/sci
parent633463b1ddd9c5fce57dff2c03a32edd4701e693 (diff)
downloadscummvm-rg350-bac0c769475bde85a240c557b7dab28c345dae4a.tar.gz
scummvm-rg350-bac0c769475bde85a240c557b7dab28c345dae4a.tar.bz2
scummvm-rg350-bac0c769475bde85a240c557b7dab28c345dae4a.zip
SCI/newgui: kAnimate - resolved previously unknown code functionality
svn-id: r44777
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/gui/gui_gfx.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/engines/sci/gui/gui_gfx.cpp b/engines/sci/gui/gui_gfx.cpp
index 76ade972d7..80f5a3807f 100644
--- a/engines/sci/gui/gui_gfx.cpp
+++ b/engines/sci/gui/gui_gfx.cpp
@@ -1067,21 +1067,25 @@ void SciGuiGfx::AnimateDisposeLastCast() {
//_lastCast->DeleteList();
}
+enum {
+ SCI_ANIMATE_SIGNAL_FROZEN = 0x0100
+};
+
void SciGuiGfx::AnimateInvoke(List *list, int argc, reg_t *argv) {
+ SegManager *segMan = _s->_segMan;
reg_t curAddress = list->first;
Node *curNode = _s->_segMan->lookupNode(curAddress);
reg_t curObject;
- //uint16 mask;
+ uint16 signal;
while (curNode) {
curObject = curNode->value;
-// FIXME: check what this code does and remove it or fix it, gregs engine had this check included
-// mask = cobj[_objOfs[2]];
-// if ((mask & 0x100) == 0) {
+ signal = GET_SEL32V(curObject, signal);
+ if (!(signal & SCI_ANIMATE_SIGNAL_FROZEN)) {
invoke_selector(_s, curObject, _s->_kernel->_selectorCache.doit, kContinueOnInvalidSelector, argv, argc, __FILE__, __LINE__, 0);
// Lookup node again, since the nodetable it was in may have been reallocated
curNode = _s->_segMan->lookupNode(curAddress);
-// }
+ }
curAddress = curNode->succ;
curNode = _s->_segMan->lookupNode(curAddress);
}