aboutsummaryrefslogtreecommitdiff
path: root/scumm/actor.cpp
diff options
context:
space:
mode:
authorJames Brown2002-11-09 10:05:43 +0000
committerJames Brown2002-11-09 10:05:43 +0000
commitcc14b87f25f13535bfd37d2f01a8dbebd1f34ea5 (patch)
tree0738772e474a9f44e8c15ac9b9db6771225a80fc /scumm/actor.cpp
parent7eb9753a9ccc950b7ad64c2ac1e9ef0994379b31 (diff)
downloadscummvm-rg350-cc14b87f25f13535bfd37d2f01a8dbebd1f34ea5.tar.gz
scummvm-rg350-cc14b87f25f13535bfd37d2f01a8dbebd1f34ea5.tar.bz2
scummvm-rg350-cc14b87f25f13535bfd37d2f01a8dbebd1f34ea5.zip
Patch 635873: Loom Masking Hack - update
svn-id: r5473
Diffstat (limited to 'scumm/actor.cpp')
-rw-r--r--scumm/actor.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp
index 7188b25c18..1f1e658b54 100644
--- a/scumm/actor.cpp
+++ b/scumm/actor.cpp
@@ -899,7 +899,10 @@ void Actor::drawActorCostume()
// FIXME - Hack to fix two glitches in the scene where Bobbin
// heals Rusty: Bobbin's feet get masked when Rusty shows him
// what happens to The Forge, and Rusty gets masked after
- // Bobbin heals him.
+ // Bobbin heals him. (Room 34)
+ //
+ // It also fixes a much less noticable glitch when Bobbin
+ // jumps out of Mandible's cage. (Room 43)
//
// When an actor is moved around without regards to walkboxes,
// its walkbox is set to 0. Unfortunately that's a valid
@@ -910,24 +913,25 @@ void Actor::drawActorCostume()
// to be at the moment or, if it's not in any box, don't mask
// at all.
//
- // Checking if ignoreBoxes != 0 isn't enough to fix all the
- // glitches, so I have to check for walkbox 0. However, that
- // gives too many false positives -- it breaks masking in a
- // few other rooms, e.g. when Stoke leaves the room where he
+ // This is similar to the clipping == 100 check used for AKOS
+ // costumes, except I haven't been able to figure out the
+ // proper check here. It's not quite enough to check if
+ // ignoreBoxes != 0 and checking if walkbox == 0 yields too
+ // many false positives, e.g. Bobbin leaving the sandy beach
+ // towards the forest, or Stoke leaving the room where he
// locks up "Rusty".
//
// Until someone can find the proper fix, only apply it to the
- // one room where it's actually needed.
+ // rooms where it's actually known to be needed.
- if (_vm->_gameId == GID_LOOM256 && _vm->_currentRoom == 34 && walkbox == 0) {
+ if (_vm->_gameId == GID_LOOM256 && (_vm->_currentRoom == 34 || _vm->_currentRoom == 43) && walkbox == 0) {
int num_boxes, i;
cr._zbuf = 0;
num_boxes = _vm->getNumBoxes();
- // For this particular room it won't matter in which
- // direction we loop. In other rooms, looping in the
- // other direction may pick the wrong box.
+ // Sometimes boxes overlap, so the direction of this
+ // loop matters in some rooms.
for (i = 0; i < num_boxes; i++) {
if (_vm->checkXYInBoxBounds(i, x, y)) {