aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2013-01-24 23:22:31 +0200
committerFilippos Karapetis2013-01-24 23:23:48 +0200
commit5691a40380653af1d76fcdd30d1ec2f5996abf11 (patch)
tree68531981cdc56d1ade8c27a9050432b87a93b343
parent498fe75dc5fbb6ec52f0d437b5c1301331023715 (diff)
downloadscummvm-rg350-5691a40380653af1d76fcdd30d1ec2f5996abf11.tar.gz
scummvm-rg350-5691a40380653af1d76fcdd30d1ec2f5996abf11.tar.bz2
scummvm-rg350-5691a40380653af1d76fcdd30d1ec2f5996abf11.zip
SCI: Update documentation on bug #3585189 and remove an invalid TODO
Thanks wjp for pointing out some extra parameters related to pathfinding in SCI
-rw-r--r--engines/sci/engine/script_patches.cpp25
1 files changed, 9 insertions, 16 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index f6e64bbd6e..c928cf3569 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -883,22 +883,15 @@ const uint16 qfg1vgaPatchDialogHeader[] = {
PATCH_END
};
-// When clicking on the crusher in room 331, Ego approaches him to talk to him.
-// There is a block placed in front of the crusher, where Ego stops. Script 331
-// is responsible for moving Ego, in moveToCrusher::changeState. Apparently,
-// the script parameters are an edge case, since the script sets Ego to move
-// much closer to the crusher than is possible, because of the block in front of
-// him, thus the scripts wait forever for MoveTo to move Ego to the requested
-// location, which never happens, and the game freezes. Normally, the scripts
-// ask to move Ego close to 79, 165. We change that to 85, 165, which is
-// possible and prevents the freeze. Fixes bug #3585189.
-//
-// TODO: Our pathfinding algorithm stops Ego one step further away from the
-// crusher than where SSCI is placing him. Since this is an edge case, and since
-// it also happens in SSCI, it is easier to just patch the target coordinates.
-// However, we should investigate our movement related functions. In this case,
-// kInitBresen, kDoBresen, kGetAngle and kGetDistance are called, among others.
-// kAvoidPath is not used in this case.
+// When clicking on the crusher in room 331, Ego approaches him to talk to him,
+// an action that is handled by moveToCrusher::changeState in script 331. The
+// scripts set Ego to move close to the crusher, but when Ego is running instead
+// of walking, the target coordinates specified by script 331 are never reached,
+// as Ego is making larger steps, and never reaches the required spot. This is an
+// edge case that can occur when Ego is set to run. Normally, when clicking on
+// the crusher, ego is supposed to move close to position 79, 165. We change it
+// to 85, 165, which is not an edge case thus the freeze is avoided.
+// Fixes bug #3585189.
const byte qfg1vgaSignatureMoveToCrusher[] = {
9,
0x51, 0x1f, // class Motion