diff options
author | Max Horn | 2003-05-03 16:20:18 +0000 |
---|---|---|
committer | Max Horn | 2003-05-03 16:20:18 +0000 |
commit | fb4a6095a6d2ebb0f8eb5304b10282cfd37da987 (patch) | |
tree | cb372360ac80f27e61ebbfc9c6ffe80517bddc41 /scumm | |
parent | f51b4387d1e44942bd10d3ebd2dd6faf28a728c1 (diff) | |
download | scummvm-rg350-fb4a6095a6d2ebb0f8eb5304b10282cfd37da987.tar.gz scummvm-rg350-fb4a6095a6d2ebb0f8eb5304b10282cfd37da987.tar.bz2 scummvm-rg350-fb4a6095a6d2ebb0f8eb5304b10282cfd37da987.zip |
Patch #731760: LOOM: "Bobbin walks backwards" hack
svn-id: r7285
Diffstat (limited to 'scumm')
-rw-r--r-- | scumm/actor.cpp | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp index 975390a21a..eeda5d8e4b 100644 --- a/scumm/actor.cpp +++ b/scumm/actor.cpp @@ -175,22 +175,18 @@ int Actor::remapDirection(int dir, bool is_walking) { bool flipX; bool flipY; - // FIXME - why was this here? It breaks some animations in LoomCD, and logical, - // why should we not honor box flags when ignoreBoxes is on? If this change - // breaks anything, or if you know why the if() was in originally, please - // tell this to Fingolfin. - - // Addendum: it seems that at least in "The Dig" the original code - // does check ignoreBoxes here... - // I am not sure what was broken in LoomCD. I am re-enabling this for now - // If new breakage occurs in LoomCD, we can perform this check - // conditionally depending on the Scumm version being used... - - // Also at least in The Dig, it checks if the actor is in the current room, but - // that's not necessary here because we can never be called if the actor is - // not in the current room anyway. + // FIXME - It seems that at least in The Dig the original code does + // check ignoreBoxes here. However, it breaks some animations in Loom, + // causing Bobbin to face towards the camera instead of away from it + // in some places: After the tree has been destroyed by lightning, and + // when entering the dark tunnels beyond the dragon's lair at the very + // least. Possibly other places as well. + // + // The Dig also checks if the actor is in the current room, but that's + // not necessary here because we never call the function unless the + // actor is in the current room anyway. - if (!ignoreBoxes) { + if (!ignoreBoxes || _vm->_gameId == GID_LOOM || _vm->_gameId == GID_LOOM256) { specdir = _vm->_extraBoxFlags[walkbox]; if (specdir) { if (specdir & 0x8000) { @@ -212,16 +208,16 @@ int Actor::remapDirection(int dir, bool is_walking) { flipX = (walkdata.XYFactor > 0); flipY = (walkdata.YXFactor > 0); - // FIXME - this special cases for the class might be necesary for other - // games besides Loom CD! + // FIXME - this special cases for the class might be necesary + // for other games besides Loom! // Check for X-Flip - if ((flags & kBoxXFlip) || isInClass(_vm->_gameId == GID_LOOM256 ? 19 : 30)) { + if ((flags & kBoxXFlip) || isInClass((_vm->_gameId == GID_LOOM256 || _vm->_gameId == GID_LOOM) ? 19 : 30)) { dir = 360 - dir; flipX = !flipX; } // Check for Y-Flip - if ((flags & kBoxYFlip) || isInClass(_vm->_gameId == GID_LOOM256 ? 18 : 29)) { + if ((flags & kBoxYFlip) || isInClass((_vm->_gameId == GID_LOOM256 || _vm->_gameId == GID_LOOM) ? 18 : 29)) { dir = 180 - dir; flipY = !flipY; } |