mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
fix #1269037 Rif walks off-screen when looking at screen at desk
svn-id: r18774
This commit is contained in:
+2
-2
@@ -1975,13 +1975,14 @@ bool Actor::actorWalkTo(uint16 actorId, const Location &toLocation) {
|
||||
|
||||
pointBest = actor->_walkStepsPoints[actor->_walkStepsCount - 1];
|
||||
|
||||
pointBest.x &= ~1;
|
||||
delta.x = ABS(pointFrom.x - pointTo.x);
|
||||
delta.y = ABS(pointFrom.y - pointTo.y);
|
||||
|
||||
bestDelta.x = ABS(pointBest.x - pointTo.x);
|
||||
bestDelta.y = ABS(pointBest.y - pointTo.y);
|
||||
|
||||
if (delta.x + delta.y <= bestDelta.x + bestDelta.y && (actor->_flags & kFollower)) {
|
||||
if ((delta.x + delta.y <= bestDelta.x + bestDelta.y) && (actor->_flags & kFollower)) {
|
||||
actor->_actorFlags |= kActorNoFollow;
|
||||
}
|
||||
|
||||
@@ -2542,7 +2543,6 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be
|
||||
bestRating = currentRating;
|
||||
bestPath = nextPoint;
|
||||
}
|
||||
pathDirection = &_pathDirectionList[i];
|
||||
}
|
||||
++i;
|
||||
} while (i < _pathDirectionListCount);
|
||||
|
||||
+1
-1
@@ -752,7 +752,7 @@ public:
|
||||
|
||||
inline int16 quickDistance(const Point &point1, const Point &point2) {
|
||||
Point delta;
|
||||
delta.x = ABS(point1.x - point2.x);
|
||||
delta.x = ABS(point1.x - point2.x) / 2;
|
||||
delta.y = ABS(point1.y - point2.y);
|
||||
return ((delta.x < delta.y) ? (delta.y + delta.x / 2) : (delta.x + delta.y / 2));
|
||||
}
|
||||
|
||||
+20
-20
@@ -1416,40 +1416,40 @@ void IsoMap::findDragonTilePath(ActorData* actor,const Location &start, const Lo
|
||||
|
||||
switch (tilePoint->direction) {
|
||||
case kDirUpRight:
|
||||
if (checkDragonPoint( tilePoint->u + 1, tilePoint->v + 0, 1)) {
|
||||
pushDragonPoint( tilePoint->u + 2, tilePoint->v + 0, 1);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, 7);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, 3);
|
||||
if (checkDragonPoint( tilePoint->u + 1, tilePoint->v + 0, kDirUpRight)) {
|
||||
pushDragonPoint( tilePoint->u + 2, tilePoint->v + 0, kDirUpRight);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, kDirUpLeft);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, kDirDownRight);
|
||||
}
|
||||
break;
|
||||
case kDirDownRight:
|
||||
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v - 1, 3)) {
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 2, 3);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, 1);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, 5);
|
||||
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v - 1, kDirDownRight)) {
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 2, kDirDownRight);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v - 1, kDirUpRight);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, kDirDownLeft);
|
||||
}
|
||||
break;
|
||||
case kDirDownLeft:
|
||||
if (checkDragonPoint( tilePoint->u - 1, tilePoint->v + 0, 5)) {
|
||||
pushDragonPoint( tilePoint->u - 2, tilePoint->v + 0, 5);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, 3);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, 7);
|
||||
if (checkDragonPoint( tilePoint->u - 1, tilePoint->v + 0, kDirDownLeft)) {
|
||||
pushDragonPoint( tilePoint->u - 2, tilePoint->v + 0, kDirDownLeft);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v - 1, kDirDownRight);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, kDirUpLeft);
|
||||
}
|
||||
break;
|
||||
case kDirUpLeft:
|
||||
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v + 1, 7)) {
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 2, 7);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, 5);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, 1);
|
||||
if (checkDragonPoint( tilePoint->u + 0, tilePoint->v + 1, kDirUpLeft)) {
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 2, kDirUpLeft);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 1, kDirDownLeft);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 1, kDirUpRight);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (first && (_queueCount == _readCount)) {
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 0, 1);
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 1, 3);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 0, 5);
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 1, 7);
|
||||
pushDragonPoint( tilePoint->u + 1, tilePoint->v + 0, kDirUpRight);
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v - 1, kDirDownRight);
|
||||
pushDragonPoint( tilePoint->u - 1, tilePoint->v + 0, kDirDownLeft);
|
||||
pushDragonPoint( tilePoint->u + 0, tilePoint->v + 1, kDirUpLeft);
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user