diff options
author | Martin Kiewitz | 2009-10-08 09:29:14 +0000 |
---|---|---|
committer | Martin Kiewitz | 2009-10-08 09:29:14 +0000 |
commit | bac0c769475bde85a240c557b7dab28c345dae4a (patch) | |
tree | e9ccd67224773d253413fb3b97ded372908958a6 /engines/sci | |
parent | 633463b1ddd9c5fce57dff2c03a32edd4701e693 (diff) | |
download | scummvm-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.cpp | 14 |
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); } |