aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2012-10-22 13:17:57 +0300
committerFilippos Karapetis2012-10-22 13:17:57 +0300
commite7d4f88a57efc354cceb34e69acada84600c693d (patch)
tree2ee087035ba5717ec24416e18ba3cdf6a3d4e4ee
parent1286710248730db63149169c8e482f633fa9ccad (diff)
downloadscummvm-rg350-e7d4f88a57efc354cceb34e69acada84600c693d.tar.gz
scummvm-rg350-e7d4f88a57efc354cceb34e69acada84600c693d.tar.bz2
scummvm-rg350-e7d4f88a57efc354cceb34e69acada84600c693d.zip
SCI: Add a workaround for bug #3568452 - "SCI: QFG1VGA - Path finding bug in the forest"
This workaround has been added for now to stop the game from freezing. A more correct solution would be to match our pathfinding algorithm to what SSCI is doing, but with this workaround we can stop the more immediate problem (game freezing) now.
-rw-r--r--engines/sci/engine/kpathing.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp
index 4061795f82..b839ac51c3 100644
--- a/engines/sci/engine/kpathing.cpp
+++ b/engines/sci/engine/kpathing.cpp
@@ -1366,7 +1366,16 @@ static void AStar(PathfindingState *s) {
// other, while we apply a penalty to paths traversing it.
// This difference might lead to problems, but none are
// known at the time of writing.
- if (s->pointOnScreenBorder(vertex->v))
+
+ // WORKAROUND: This check fails in QFG1VGA, room 81 (bug report #3568452).
+ // However, it is needed in other SCI1.1 games, such as LB2. Therefore, we
+ // add this workaround for that scene in QFG1VGA, until our algorithm matches
+ // better what SSCI is doing. With this workaround, QFG1VGA no longer freezes
+ // in that scene.
+ bool qfg1VgaWorkaround = (g_sci->getGameId() == GID_QFG1VGA &&
+ g_sci->getEngineState()->currentRoomNumber() == 81);
+
+ if (s->pointOnScreenBorder(vertex->v) && !qfg1VgaWorkaround)
new_dist += 10000;
if (new_dist < vertex->costG) {