aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2008-04-17 15:39:34 +0000
committerJohannes Schickel2008-04-17 15:39:34 +0000
commit7b5673470828224c85bbbceedf6994f77d68a4a5 (patch)
tree77dd9866a60d3afcbf5a70a2530f7feb531835e6 /engines/kyra
parent66328be342c3b82b121744e52e6f55583e8309b4 (diff)
downloadscummvm-rg350-7b5673470828224c85bbbceedf6994f77d68a4a5.tar.gz
scummvm-rg350-7b5673470828224c85bbbceedf6994f77d68a4a5.tar.bz2
scummvm-rg350-7b5673470828224c85bbbceedf6994f77d68a4a5.zip
Properly implemented KyraEngine_v3::lineIsPassable.
svn-id: r31538
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/kyra_v3.cpp1
-rw-r--r--engines/kyra/kyra_v3.h4
-rw-r--r--engines/kyra/scene_v3.cpp35
3 files changed, 39 insertions, 1 deletions
diff --git a/engines/kyra/kyra_v3.cpp b/engines/kyra/kyra_v3.cpp
index 848f062eab..6a4c2ee2d0 100644
--- a/engines/kyra/kyra_v3.cpp
+++ b/engines/kyra/kyra_v3.cpp
@@ -95,6 +95,7 @@ KyraEngine_v3::KyraEngine_v3(OSystem *system, const GameFlags &flags) : KyraEngi
_noStartupChat = false;
_lastProcessedSceneScript = 0;
_specialSceneScriptRunFlag = false;
+ _pathfinderFlag = 0;
}
KyraEngine_v3::~KyraEngine_v3() {
diff --git a/engines/kyra/kyra_v3.h b/engines/kyra/kyra_v3.h
index f5a0f282c0..0b56f0da13 100644
--- a/engines/kyra/kyra_v3.h
+++ b/engines/kyra/kyra_v3.h
@@ -140,7 +140,9 @@ private:
void timerFleaDeath(int arg);
// pathfinder
- bool lineIsPassable(int, int) { return false; }
+ int _pathfinderFlag;
+
+ bool lineIsPassable(int x, int y);
private:
// main menu
diff --git a/engines/kyra/scene_v3.cpp b/engines/kyra/scene_v3.cpp
index 1b4378fdde..426b689f03 100644
--- a/engines/kyra/scene_v3.cpp
+++ b/engines/kyra/scene_v3.cpp
@@ -688,4 +688,39 @@ bool KyraEngine_v3::checkSpecialSceneExit(int index, int x, int y) {
return false;
}
+bool KyraEngine_v3::lineIsPassable(int x, int y) {
+ debugC(9, kDebugLevelMain, "KyraEngine_v3::lineIsPassable(%d, %d)", x, y);
+ static const uint8 widthTable[] = { 1, 1, 1, 1, 1, 2, 4, 6, 8 };
+
+ if ((_pathfinderFlag & 2) && x >= 320)
+ return false;
+ if ((_pathfinderFlag & 4) && y >= 188)
+ return false;
+ if ((_pathfinderFlag & 8) && x < 0)
+ return false;
+ if (y > 187)
+ return false;
+
+ uint width = widthTable[getScale(x, y) >> 5];
+
+ if (y < 0)
+ y = 0;
+ x -= width >> 1;
+ if (x < 0)
+ x = 0;
+ int x2 = x + width;
+ if (x2 > 320)
+ x2 = 320;
+
+ for (; x < x2; ++x) {
+ if (y < _maskPageMinY || y > _maskPageMinY)
+ return false;
+
+ if (!_screen->getShapeFlag1(x, y))
+ return false;
+ }
+
+ return true;
+}
+
} // end of namespace Kyra