diff options
author | Johannes Schickel | 2008-04-17 15:39:34 +0000 |
---|---|---|
committer | Johannes Schickel | 2008-04-17 15:39:34 +0000 |
commit | 7b5673470828224c85bbbceedf6994f77d68a4a5 (patch) | |
tree | 77dd9866a60d3afcbf5a70a2530f7feb531835e6 /engines/kyra | |
parent | 66328be342c3b82b121744e52e6f55583e8309b4 (diff) | |
download | scummvm-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.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/kyra_v3.h | 4 | ||||
-rw-r--r-- | engines/kyra/scene_v3.cpp | 35 |
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 |