diff -ur ScummVM-cvs20021108/scummvm/scumm/actor.cpp ScummVM-cvs20021108+hack/scummvm/scumm/actor.cpp
old
|
new
|
|
899 | 899 | // FIXME - Hack to fix two glitches in the scene where Bobbin |
900 | 900 | // heals Rusty: Bobbin's feet get masked when Rusty shows him |
901 | 901 | // what happens to The Forge, and Rusty gets masked after |
902 | | // Bobbin heals him. |
| 902 | // Bobbin heals him. (Room 34) |
| 903 | // |
| 904 | // It also fixes a much less noticable glitch when Bobbin |
| 905 | // jumps out of Mandible's cage. (Room 43) |
903 | 906 | // |
904 | 907 | // When an actor is moved around without regards to walkboxes, |
905 | 908 | // its walkbox is set to 0. Unfortunately that's a valid |
… |
… |
|
910 | 913 | // to be at the moment or, if it's not in any box, don't mask |
911 | 914 | // at all. |
912 | 915 | // |
913 | | // Checking if ignoreBoxes != 0 isn't enough to fix all the |
914 | | // glitches, so I have to check for walkbox 0. However, that |
915 | | // gives too many false positives -- it breaks masking in a |
916 | | // few other rooms, e.g. when Stoke leaves the room where he |
| 916 | // This is similar to the clipping == 100 check used for AKOS |
| 917 | // costumes, except I haven't been able to figure out the |
| 918 | // proper check here. It's not quite enough to check if |
| 919 | // ignoreBoxes != 0 and checking if walkbox == 0 yields too |
| 920 | // many false positives, e.g. Bobbin leaving the sandy beach |
| 921 | // towards the forest, or Stoke leaving the room where he |
917 | 922 | // locks up "Rusty". |
918 | 923 | // |
919 | 924 | // Until someone can find the proper fix, only apply it to the |
920 | | // one room where it's actually needed. |
| 925 | // rooms where it's actually known to be needed. |
921 | 926 | |
922 | | if (_vm->_gameId == GID_LOOM256 && _vm->_currentRoom == 34 && walkbox == 0) { |
| 927 | if (_vm->_gameId == GID_LOOM256 && (_vm->_currentRoom == 34 || _vm->_currentRoom == 43) && walkbox == 0) { |
923 | 928 | int num_boxes, i; |
924 | 929 | |
925 | 930 | cr._zbuf = 0; |
926 | 931 | num_boxes = _vm->getNumBoxes(); |
927 | 932 | |
928 | | // For this particular room it won't matter in which |
929 | | // direction we loop. In other rooms, looping in the |
930 | | // other direction may pick the wrong box. |
| 933 | // Sometimes boxes overlap, so the direction of this |
| 934 | // loop matters in some rooms. |
931 | 935 | |
932 | 936 | for (i = 0; i < num_boxes; i++) { |
933 | 937 | if (_vm->checkXYInBoxBounds(i, x, y)) { |