From 7b5673470828224c85bbbceedf6994f77d68a4a5 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Thu, 17 Apr 2008 15:39:34 +0000 Subject: Properly implemented KyraEngine_v3::lineIsPassable. svn-id: r31538 --- engines/kyra/kyra_v3.cpp | 1 + engines/kyra/kyra_v3.h | 4 +++- engines/kyra/scene_v3.cpp | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) (limited to 'engines/kyra') 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 -- cgit v1.2.3