aboutsummaryrefslogtreecommitdiff
path: root/engines/gnap/grid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gnap/grid.cpp')
-rw-r--r--engines/gnap/grid.cpp169
1 files changed, 84 insertions, 85 deletions
diff --git a/engines/gnap/grid.cpp b/engines/gnap/grid.cpp
index ec90cf1e8a..31b7934f42 100644
--- a/engines/gnap/grid.cpp
+++ b/engines/gnap/grid.cpp
@@ -73,7 +73,7 @@ bool GnapEngine::isPointBlocked(int gridX, int gridY) {
if (gridX < 0 || gridX >= _gridMaxX || gridY < 0 || gridY >= _gridMaxY)
return true;
- if ((_gnap->_pos == Common::Point(gridX, gridY)) || (gridX == _platX && gridY == _platY))
+ if ((_gnap->_pos == Common::Point(gridX, gridY)) || (gridX == _plat->_pos.x && gridY == _plat->_pos.y))
return true;
const int x = _gridMinX + 75 * gridX;
@@ -557,7 +557,7 @@ bool GnapEngine::gnapWalkTo(int gridX, int gridY, int animationIndex, int sequen
_gnapWalkDestX = CLIP(gridX, 0, _gridMaxX - 1);
_gnapWalkDestY = CLIP(gridY, 0, _gridMaxY - 1);
- if (animationIndex >= 0 && _gnapWalkDestX == _platX && _gnapWalkDestY == _platY)
+ if (animationIndex >= 0 && _gnapWalkDestX == _plat->_pos.x && _gnapWalkDestY == _plat->_pos.y)
platypusMakeRoom();
// TODO: Simplify the cascade of Ifs
@@ -1032,160 +1032,160 @@ bool GnapEngine::platFindPath3(int gridX, int gridY) {
bool done = false;
while (!done && gridIncr < _gridMaxX) {
- if (!isPointBlocked(_platX + gridIncr, _platY) && gridSub423CC1(_platX + gridIncr, _platY, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x + gridIncr, _plat->_pos.y) && gridSub423CC1(_plat->_pos.x + gridIncr, _plat->_pos.y, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX + i;
- _platWalkNodes[i]._gridY1 = _platY;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x + i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y;
_platWalkNodes[i]._deltaX = 1;
_platWalkNodes[i]._deltaY = 0;
}
done = true;
break;
}
- if (!isPointBlocked(_platX - gridIncr, _platY) && gridSub423CC1(_platX - gridIncr, _platY, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x - gridIncr, _plat->_pos.y) && gridSub423CC1(_plat->_pos.x - gridIncr, _plat->_pos.y, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX - i;
- _platWalkNodes[i]._gridY1 = _platY;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x - i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y;
_platWalkNodes[i]._deltaX = -1;
_platWalkNodes[i]._deltaY = 0;
}
done = true;
break;
}
- if (!isPointBlocked(_platX, _platY + gridIncr) && gridSub423CC1(_platX, _platY + gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x, _plat->_pos.y + gridIncr) && gridSub423CC1(_plat->_pos.x, _plat->_pos.y + gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX;
- _platWalkNodes[i]._gridY1 = _platY + i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y + i;
_platWalkNodes[i]._deltaX = 0;
_platWalkNodes[i]._deltaY = 1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX, _platY - gridIncr) && gridSub423CC1(_platX, _platY - gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x, _plat->_pos.y - gridIncr) && gridSub423CC1(_plat->_pos.x, _plat->_pos.y - gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX;
- _platWalkNodes[i]._gridY1 = _platY - i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y - i;
_platWalkNodes[i]._deltaX = 0;
_platWalkNodes[i]._deltaY = -1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX + gridIncr, _platY + gridIncr) && gridSub423CC1(_platX + gridIncr, _platY + gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x + gridIncr, _plat->_pos.y + gridIncr) && gridSub423CC1(_plat->_pos.x + gridIncr, _plat->_pos.y + gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX + i;
- _platWalkNodes[i]._gridY1 = _platY + i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x + i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y + i;
_platWalkNodes[i]._deltaX = 1;
_platWalkNodes[i]._deltaY = 1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX - gridIncr, _platY + gridIncr) && gridSub423CC1(_platX - gridIncr, _platY + gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x - gridIncr, _plat->_pos.y + gridIncr) && gridSub423CC1(_plat->_pos.x - gridIncr, _plat->_pos.y + gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX - i;
- _platWalkNodes[i]._gridY1 = _platY + i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x - i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y + i;
_platWalkNodes[i]._deltaX = -1;
_platWalkNodes[i]._deltaY = 1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX + gridIncr, _platY - gridIncr) && gridSub423CC1(_platX + gridIncr, _platY - gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x + gridIncr, _plat->_pos.y - gridIncr) && gridSub423CC1(_plat->_pos.x + gridIncr, _plat->_pos.y - gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX + i;
- _platWalkNodes[i]._gridY1 = _platY - i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x + i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y - i;
_platWalkNodes[i]._deltaX = 1;
_platWalkNodes[i]._deltaY = -1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX - gridIncr, _platY - gridIncr) && gridSub423CC1(_platX - gridIncr, _platY - gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x - gridIncr, _plat->_pos.y - gridIncr) && gridSub423CC1(_plat->_pos.x - gridIncr, _plat->_pos.y - gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX - i;
- _platWalkNodes[i]._gridY1 = _platY - i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x - i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y - i;
_platWalkNodes[i]._deltaX = -1;
_platWalkNodes[i]._deltaY = -1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX + gridIncr, _platY) && gridSub42419A(_platX + gridIncr, _platY, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x + gridIncr, _plat->_pos.y) && gridSub42419A(_plat->_pos.x + gridIncr, _plat->_pos.y, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX + i;
- _platWalkNodes[i]._gridY1 = _platY;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x + i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y;
_platWalkNodes[i]._deltaX = 1;
_platWalkNodes[i]._deltaY = 0;
}
done = true;
break;
}
- if (!isPointBlocked(_platX - gridIncr, _platY) && gridSub42419A(_platX - gridIncr, _platY, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x - gridIncr, _plat->_pos.y) && gridSub42419A(_plat->_pos.x - gridIncr, _plat->_pos.y, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX - i;
- _platWalkNodes[i]._gridY1 = _platY;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x - i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y;
_platWalkNodes[i]._deltaX = -1;
_platWalkNodes[i]._deltaY = 0;
}
done = true;
break;
}
- if (!isPointBlocked(_platX, _platY + gridIncr) && gridSub42419A(_platX, _platY + gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x, _plat->_pos.y + gridIncr) && gridSub42419A(_plat->_pos.x, _plat->_pos.y + gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX;
- _platWalkNodes[i]._gridY1 = _platY + i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y + i;
_platWalkNodes[i]._deltaX = 0;
_platWalkNodes[i]._deltaY = 1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX, _platY - gridIncr) && gridSub42419A(_platX, _platY - gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x, _plat->_pos.y - gridIncr) && gridSub42419A(_plat->_pos.x, _plat->_pos.y - gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX;
- _platWalkNodes[i]._gridY1 = _platY - i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y - i;
_platWalkNodes[i]._deltaX = 0;
_platWalkNodes[i]._deltaY = -1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX + gridIncr, _platY + gridIncr) && gridSub42419A(_platX + gridIncr, _platY + gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x + gridIncr, _plat->_pos.y + gridIncr) && gridSub42419A(_plat->_pos.x + gridIncr, _plat->_pos.y + gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX + i;
- _platWalkNodes[i]._gridY1 = _platY + i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x + i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y + i;
_platWalkNodes[i]._deltaX = 1;
_platWalkNodes[i]._deltaY = 1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX - gridIncr, _platY + gridIncr) && gridSub42419A(_platX - gridIncr, _platY + gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x - gridIncr, _plat->_pos.y + gridIncr) && gridSub42419A(_plat->_pos.x - gridIncr, _plat->_pos.y + gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX - i;
- _platWalkNodes[i]._gridY1 = _platY + i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x - i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y + i;
_platWalkNodes[i]._deltaX = -1;
_platWalkNodes[i]._deltaY = 1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX + gridIncr, _platY - gridIncr) && gridSub42419A(_platX + gridIncr, _platY - gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x + gridIncr, _plat->_pos.y - gridIncr) && gridSub42419A(_plat->_pos.x + gridIncr, _plat->_pos.y - gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX + i;
- _platWalkNodes[i]._gridY1 = _platY - i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x + i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y - i;
_platWalkNodes[i]._deltaX = 1;
_platWalkNodes[i]._deltaY = -1;
}
done = true;
break;
}
- if (!isPointBlocked(_platX - gridIncr, _platY - gridIncr) && gridSub42419A(_platX - gridIncr, _platY - gridIncr, gridIncr)) {
+ if (!isPointBlocked(_plat->_pos.x - gridIncr, _plat->_pos.y - gridIncr) && gridSub42419A(_plat->_pos.x - gridIncr, _plat->_pos.y - gridIncr, gridIncr)) {
for (int i = 0; i < gridIncr; ++i) {
- _platWalkNodes[i]._gridX1 = _platX - i;
- _platWalkNodes[i]._gridY1 = _platY - i;
+ _platWalkNodes[i]._gridX1 = _plat->_pos.x - i;
+ _platWalkNodes[i]._gridY1 = _plat->_pos.y - i;
_platWalkNodes[i]._deltaX = -1;
_platWalkNodes[i]._deltaY = -1;
}
@@ -1217,17 +1217,17 @@ bool GnapEngine::platypusWalkTo(int gridX, int gridY, int animationIndex, int se
if (animationIndex >= 0 && _gnap->_pos == Common::Point(_platWalkDestX, _platWalkDestY))
gnapWalkStep();
- if (gridSub423CC1(_platX, _platY, 0))
+ if (gridSub423CC1(_plat->_pos.x, _plat->_pos.y, 0))
done = true;
- if (!done && gridSub42419A(_platX, _platY, 0))
+ if (!done && gridSub42419A(_plat->_pos.x, _plat->_pos.y, 0))
done = true;
- if (!done && platFindPath3(_platX, _platY))
+ if (!done && platFindPath3(_plat->_pos.x, _plat->_pos.y))
done = true;
if (!done)
- gridSub423750(_platX, _platY);
+ gridSub423750(_plat->_pos.x, _plat->_pos.y);
int platSequenceId = _platypusSequenceId;
int platId = _platypusId;
@@ -1286,13 +1286,13 @@ bool GnapEngine::platypusWalkTo(int gridX, int gridY, int animationIndex, int se
_platypusSequenceDatNum = datNum;
// CHECKME Not sure if this is correct...
if (_platWalkNodes[_platWalkNodesCount - 1]._deltaX > 0)
- _platypusFacing = kDirNone;
+ _plat->_idleFacing = kDirNone;
else if (_platWalkNodes[_platWalkNodesCount - 1]._deltaX < 0)
- _platypusFacing = kDirUnk4;
+ _plat->_idleFacing = kDirUnk4;
else if (_platWalkNodes[_platWalkNodesCount - 1]._gridX1 % 2)
- _platypusFacing = kDirUnk4;
+ _plat->_idleFacing = kDirUnk4;
else
- _platypusFacing = kDirNone;
+ _plat->_idleFacing = kDirNone;
if (animationIndex >= 0)
_gameSys->setAnimation(makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, animationIndex);
} else if (animationIndex >= 0) {
@@ -1304,29 +1304,29 @@ bool GnapEngine::platypusWalkTo(int gridX, int gridY, int animationIndex, int se
_platypusSequenceId = ridToEntryIndex(sequenceId);
_platypusSequenceDatNum = ridToDatIndex(sequenceId);
if (_platypusSequenceId == 0x7C2) {
- _platypusFacing = kDirNone;
+ _plat->_idleFacing = kDirNone;
} else if (_platypusSequenceId == 0x7D2) {
- _platypusFacing = kDirUnk4;
+ _plat->_idleFacing = kDirUnk4;
}
} else {
if (_platWalkNodesCount > 0) {
if (_platWalkNodes[_platWalkNodesCount - 1]._deltaX > 0) {
_platypusSequenceId = 0x7C2;
- _platypusFacing = kDirNone;
+ _plat->_idleFacing = kDirNone;
} else if (_platWalkNodes[_platWalkNodesCount - 1]._deltaX < 0) {
_platypusSequenceId = 0x7D2;
- _platypusFacing = kDirUnk4;
+ _plat->_idleFacing = kDirUnk4;
} else if (_platWalkNodes[0]._deltaX > 0) {
_platypusSequenceId = 0x7C2;
- _platypusFacing = kDirNone;
+ _plat->_idleFacing = kDirNone;
} else if (_platWalkNodes[0]._deltaX < 0) {
_platypusSequenceId = 0x7D2;
- _platypusFacing = kDirUnk4;
+ _plat->_idleFacing = kDirUnk4;
} else {
_platypusSequenceId = 0x7D2;
- _platypusFacing = kDirUnk4;
+ _plat->_idleFacing = kDirUnk4;
}
- } else if (_platypusFacing != kDirNone) {
+ } else if (_plat->_idleFacing != kDirNone) {
_platypusSequenceId = 0x7D2;
} else {
_platypusSequenceId = 0x7C2;
@@ -1351,8 +1351,7 @@ bool GnapEngine::platypusWalkTo(int gridX, int gridY, int animationIndex, int se
9, 0, 75 * _platWalkDestX - _platGridX, 48 * _platWalkDestY - _platGridY);
}
- _platX = _platWalkDestX;
- _platY = _platWalkDestY;
+ _plat->_pos = Common::Point(_platWalkDestX, _platWalkDestY);
return done;
}
@@ -1361,22 +1360,22 @@ void GnapEngine::platypusWalkStep() {
bool done = false;
for (int i = 1; !done && i < _gridMaxX; ++i) {
done = true;
- if (!isPointBlocked(_platX + i, _platY))
- platypusWalkTo(_platX + i, _platY, -1, -1, 1);
- else if (!isPointBlocked(_platX - i, _platY))
- platypusWalkTo(_platX - i, _platY, -1, -1, 1);
- else if (!isPointBlocked(_platX, _platY + 1))
- platypusWalkTo(_platX, _platY + 1, -1, -1, 1);
- else if (!isPointBlocked(_platX, _platY - 1))
- platypusWalkTo(_platX, _platY - 1, -1, -1, 1);
- else if (!isPointBlocked(_platX + 1, _platY + 1))
- platypusWalkTo(_platX + 1, _platY + 1, -1, -1, 1);
- else if (!isPointBlocked(_platX - 1, _platY + 1))
- platypusWalkTo(_platX - 1, _platY + 1, -1, -1, 1);
- else if (!isPointBlocked(_platX + 1, _platY - 1))
- platypusWalkTo(_platX + 1, _platY - 1, -1, -1, 1);
- else if (!isPointBlocked(_platX - 1, _platY - 1))
- platypusWalkTo(_platX - 1, _platY - 1, -1, -1, 1);
+ if (!isPointBlocked(_plat->_pos.x + i, _plat->_pos.y))
+ platypusWalkTo(_plat->_pos.x + i, _plat->_pos.y, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x - i, _plat->_pos.y))
+ platypusWalkTo(_plat->_pos.x - i, _plat->_pos.y, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x, _plat->_pos.y + 1))
+ platypusWalkTo(_plat->_pos.x, _plat->_pos.y + 1, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x, _plat->_pos.y - 1))
+ platypusWalkTo(_plat->_pos.x, _plat->_pos.y - 1, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x + 1, _plat->_pos.y + 1))
+ platypusWalkTo(_plat->_pos.x + 1, _plat->_pos.y + 1, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x - 1, _plat->_pos.y + 1))
+ platypusWalkTo(_plat->_pos.x - 1, _plat->_pos.y + 1, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x + 1, _plat->_pos.y - 1))
+ platypusWalkTo(_plat->_pos.x + 1, _plat->_pos.y - 1, -1, -1, 1);
+ else if (!isPointBlocked(_plat->_pos.x - 1, _plat->_pos.y - 1))
+ platypusWalkTo(_plat->_pos.x - 1, _plat->_pos.y - 1, -1, -1, 1);
else
done = false;
}
@@ -1387,7 +1386,7 @@ void GnapEngine::platypusMakeRoom() {
do {
rndGridY = getRandom(_gridMaxY);
rndGridX = getRandom(_gridMaxX);
- } while (ABS(rndGridX - _platX) > 4 || ABS(rndGridY - _platY) > 3 ||
+ } while (ABS(rndGridX - _plat->_pos.x) > 4 || ABS(rndGridY - _plat->_pos.y) > 3 ||
isPointBlocked(rndGridX, rndGridY));
platypusWalkTo(rndGridX, rndGridY, -1, -1, 1);
}