aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/gob/goblin_v1.cpp30
-rw-r--r--engines/gob/goblin_v2.cpp30
-rw-r--r--engines/gob/goblin_v4.cpp24
-rw-r--r--engines/gob/map.cpp7
-rw-r--r--engines/gob/map.h22
-rw-r--r--engines/gob/map_v1.cpp4
-rw-r--r--engines/gob/map_v2.cpp2
7 files changed, 80 insertions, 39 deletions
diff --git a/engines/gob/goblin_v1.cpp b/engines/gob/goblin_v1.cpp
index a11134b05c..3dc4c6611d 100644
--- a/engines/gob/goblin_v1.cpp
+++ b/engines/gob/goblin_v1.cpp
@@ -154,8 +154,10 @@ void Goblin_v1::initiateMove(Mult::Mult_Object *obj) {
_vm->_map->_nearestWayPoint, _vm->_map->_nearestDest) == 0) {
_pathExistence = 0;
} else {
- _vm->_map->_destX = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x;
- _vm->_map->_destY = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y;
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint);
+
+ _vm->_map->_destX = wayPoint.x;
+ _vm->_map->_destY = wayPoint.y;
}
}
}
@@ -199,20 +201,20 @@ void Goblin_v1::movePathFind(Mult::Mult_Object *obj,
if (_vm->_map->_nearestWayPoint > _vm->_map->_nearestDest) {
_vm->_map->optimizePoints(0, 0, 0);
- _vm->_map->_destX =
- _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x;
- _vm->_map->_destY =
- _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y;
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint);
+
+ _vm->_map->_destX = wayPoint.x;
+ _vm->_map->_destY = wayPoint.y;
if (_vm->_map->_nearestWayPoint > _vm->_map->_nearestDest)
_vm->_map->_nearestWayPoint--;
} else if (_vm->_map->_nearestWayPoint < _vm->_map->_nearestDest) {
_vm->_map->optimizePoints(0, 0, 0);
- _vm->_map->_destX =
- _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x;
- _vm->_map->_destY =
- _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y;
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint);
+
+ _vm->_map->_destX = wayPoint.x;
+ _vm->_map->_destY = wayPoint.y;
if (_vm->_map->_nearestWayPoint < _vm->_map->_nearestDest)
_vm->_map->_nearestWayPoint++;
@@ -220,8 +222,12 @@ void Goblin_v1::movePathFind(Mult::Mult_Object *obj,
if ((_vm->_map->checkDirectPath(0, _vm->_map->_curGoblinX,
_vm->_map->_curGoblinY, _gobDestX, _gobDestY) == 3) &&
(_vm->_map->getPass(_pressedMapX, _pressedMapY) != 0)) {
- _vm->_map->_destX = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x;
- _vm->_map->_destY = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint);
+
+ _vm->_map->_destX = wayPoint.x;
+ _vm->_map->_destY = wayPoint.y;
+
} else {
_pathExistence = 1;
_vm->_map->_destX = _pressedMapX;
diff --git a/engines/gob/goblin_v2.cpp b/engines/gob/goblin_v2.cpp
index c2fc4ad166..81888f7c02 100644
--- a/engines/gob/goblin_v2.cpp
+++ b/engines/gob/goblin_v2.cpp
@@ -121,8 +121,10 @@ void Goblin_v2::initiateMove(Mult::Mult_Object *obj) {
obj->pAnimData->pathExistence = _vm->_map->checkDirectPath(obj,
obj->goblinX, obj->goblinY, obj->gobDestX, obj->gobDestY);
if (obj->pAnimData->pathExistence == 3) {
- obj->destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- obj->destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ obj->destX = wayPoint.x;
+ obj->destY = wayPoint.y;
}
}
@@ -162,8 +164,12 @@ void Goblin_v2::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16
if (obj->nearestWayPoint > obj->nearestDest) {
_vm->_map->optimizePoints(obj, gobX, gobY);
- destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ destX = wayPoint.x;
+ destY = wayPoint.y;
+
if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {
WRITE_VAR(56, 1);
animData->pathExistence = 0;
@@ -172,8 +178,12 @@ void Goblin_v2::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16
obj->nearestWayPoint--;
} else if (obj->nearestWayPoint < obj->nearestDest) {
_vm->_map->optimizePoints(obj, gobX, gobY);
- destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ destX = wayPoint.x;
+ destY = wayPoint.y;
+
if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {
WRITE_VAR(56, 1);
animData->pathExistence = 0;
@@ -183,8 +193,12 @@ void Goblin_v2::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16
} else {
if ((_vm->_map->checkDirectPath(obj, gobX, gobY, gobDestX, gobDestY) == 3) &&
(_vm->_map->getPass(gobDestX, gobDestY) != 0)) {
- destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ destX = wayPoint.x;
+ destY = wayPoint.y;
+
WRITE_VAR(56, 1);
} else {
animData->pathExistence = 1;
diff --git a/engines/gob/goblin_v4.cpp b/engines/gob/goblin_v4.cpp
index 7758170332..f4b0ecdd20 100644
--- a/engines/gob/goblin_v4.cpp
+++ b/engines/gob/goblin_v4.cpp
@@ -77,8 +77,12 @@ void Goblin_v4::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16
if ((gobX == destX) && (gobY == destY)) {
if (obj->nearestWayPoint > obj->nearestDest) {
_vm->_map->optimizePoints(obj, gobX, gobY);
- destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ destX = wayPoint.x;
+ destY = wayPoint.y;
+
if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {
WRITE_VAR(56, 1);
animData->pathExistence = 0;
@@ -87,8 +91,12 @@ void Goblin_v4::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16
obj->nearestWayPoint--;
} else if (obj->nearestWayPoint < obj->nearestDest) {
_vm->_map->optimizePoints(obj, gobX, gobY);
- destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ destX = wayPoint.x;
+ destY = wayPoint.y;
+
if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {
WRITE_VAR(56, 1);
animData->pathExistence = 0;
@@ -98,8 +106,12 @@ void Goblin_v4::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16
} else {
if ((_vm->_map->checkDirectPath(obj, gobX, gobY, gobDestX, gobDestY) == 3) &&
(_vm->_map->getPass(gobDestX, gobDestY) != 0)) {
- destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x;
- destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y;
+
+ const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint);
+
+ destX = wayPoint.x;
+ destY = wayPoint.y;
+
WRITE_VAR(56, 1);
} else {
animData->pathExistence = 1;
diff --git a/engines/gob/map.cpp b/engines/gob/map.cpp
index e20a51b0c6..1310798d2d 100644
--- a/engines/gob/map.cpp
+++ b/engines/gob/map.cpp
@@ -106,6 +106,13 @@ void Map::setPass(int x, int y, int8 pass, int width) {
_passMap[y * width + x] = pass;
}
+const WayPoint &Map::getWayPoint(int n) const {
+ assert(_wayPoints);
+ assert(n < _wayPointCount);
+
+ return _wayPoints[n];
+}
+
void Map::placeItem(int16 x, int16 y, int16 id) {
if ((getItem(x, y) & 0xFF00) != 0)
setItem(x, y, (getItem(x, y) & 0xFF00) | id);
diff --git a/engines/gob/map.h b/engines/gob/map.h
index f1cd91d6d0..a04fe43283 100644
--- a/engines/gob/map.h
+++ b/engines/gob/map.h
@@ -57,18 +57,18 @@ enum Direction {
kDirSE = 0x5100
};
+struct WayPoint {
+ int16 x;
+ int16 y;
+ int16 notWalkable;
+};
+
+
class Map {
public:
#include "common/pack-start.h" // START STRUCT PACKING
- struct Point {
- int16 x;
- int16 y;
- int16 notWalkable;
- } PACKED_STRUCT;
-
#define szMap_ItemPos 3
-
struct ItemPos {
int8 x;
int8 y;
@@ -91,9 +91,6 @@ public:
bool _mapUnknownBool;
- int16 _wayPointCount;
- Point *_wayPoints;
-
int16 _nearestWayPoint;
int16 _nearestDest;
@@ -113,6 +110,8 @@ public:
int8 getPass(int x, int y, int width = -1) const;
void setPass(int x, int y, int8 pass, int width = -1);
+ const WayPoint &getWayPoint(int n) const;
+
void findNearestWalkable(int16 &gobDestX, int16 &gobDestY,
int16 mouseX, int16 mouseY);
@@ -143,6 +142,9 @@ protected:
int16 _passWidth;
int8 *_passMap; // [y * _mapWidth + x], getPass(x, y);
+ int16 _wayPointCount;
+ WayPoint *_wayPoints;
+
int16 findNearestWayPoint(int16 x, int16 y);
private:
diff --git a/engines/gob/map_v1.cpp b/engines/gob/map_v1.cpp
index 92e1d3a03b..1f007dbf34 100644
--- a/engines/gob/map_v1.cpp
+++ b/engines/gob/map_v1.cpp
@@ -58,8 +58,8 @@ void Map_v1::init() {
}
_wayPointCount = 40;
- _wayPoints = new Point[40];
- memset(_wayPoints, 0, sizeof(Point));
+ _wayPoints = new WayPoint[40];
+ memset(_wayPoints, 0, sizeof(WayPoint));
}
void Map_v1::loadMapObjects(const char *avjFile) {
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 7460128ca9..968663a4b4 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -138,7 +138,7 @@ void Map_v2::loadMapObjects(const char *avjFile) {
wayPointsCount = _wayPointCount == 0 ? 1 : _wayPointCount;
delete[] _wayPoints;
- _wayPoints = new Point[wayPointsCount];
+ _wayPoints = new WayPoint[wayPointsCount];
for (int i = 0; i < _wayPointCount; i++) {
_wayPoints[i].x = mapData.readSByte();
_wayPoints[i].y = mapData.readSByte();