aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/actor.cpp30
1 files changed, 9 insertions, 21 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp
index bd475348b2..0e81f7062a 100644
--- a/scumm/actor.cpp
+++ b/scumm/actor.cpp
@@ -148,12 +148,6 @@ void Actor::setActorWalkSpeed(uint newSpeedX, uint newSpeedY) {
speedx = newSpeedX;
speedy = newSpeedY;
-if (newSpeedX == 10 && newSpeedY == 5) {
- speedx = 5;
- speedy = 5;
-}
-
-
if (moving) {
calcMovementFactor(walkdata.next);
}
@@ -177,15 +171,17 @@ int ScummEngine::getAngleFromPos(int x, int y) const {
}
int Actor::calcMovementFactor(Common::Point next) {
- int deltaXFactor, deltaYFactor;
+ Common::Point actorPos(_pos);
+ int diffX, diffY;
+ int32 deltaXFactor, deltaYFactor;
- if (_pos == next)
+ if (actorPos == next)
return 0;
- const int diffX = next.x - _pos.x;
- const int diffY = next.y - _pos.y;
-
+ diffX = next.x - actorPos.x;
+ diffY = next.y - actorPos.y;
deltaYFactor = speedy << 16;
+
if (diffY < 0)
deltaYFactor = -deltaYFactor;
@@ -196,7 +192,7 @@ int Actor::calcMovementFactor(Common::Point next) {
deltaYFactor = 0;
}
- if ((uint) abs(deltaXFactor >> 16) > speedx) {
+ if ((uint) abs((int)(deltaXFactor >> 16)) > speedx) {
deltaXFactor = speedx << 16;
if (diffX < 0)
deltaXFactor = -deltaXFactor;
@@ -209,7 +205,7 @@ int Actor::calcMovementFactor(Common::Point next) {
}
}
- walkdata.cur = _pos;
+ walkdata.cur = actorPos;
walkdata.next = next;
walkdata.deltaXFactor = deltaXFactor;
walkdata.deltaYFactor = deltaYFactor;
@@ -383,11 +379,8 @@ int Actor::actorWalkStep() {
distX = abs(walkdata.next.x - walkdata.cur.x);
distY = abs(walkdata.next.y - walkdata.cur.y);
-if (number == 6) printf("actorWalkStep: actor %d at (%d,%d); ", number, actorPos.x, actorPos.y);
if (abs(actorPos.x - walkdata.cur.x) >= distX && abs(actorPos.y - walkdata.cur.y) >= distY) {
moving &= ~MF_IN_LEG;
-if (number == 6) printf("MF_IN_LEG: walkdata.cur=(%d,%d), walkdata.next=(%d,%d)\n",
- walkdata.cur.x, walkdata.cur.y, walkdata.next.x, walkdata.next.y);
return 0;
}
@@ -407,11 +400,6 @@ if (number == 6) printf("MF_IN_LEG: walkdata.cur=(%d,%d), walkdata.next=(%d,%d)\
actorPos.y = walkdata.next.y;
}
-if (number == 6) printf("new pos (%d,%d): delta=(%d,%d), delta>>8=(%d,%d)\n",
- actorPos.x, actorPos.y,
- walkdata.deltaXFactor, walkdata.deltaYFactor,
- (walkdata.deltaXFactor >> 8), (walkdata.deltaYFactor >> 8));
-
_pos = actorPos;
return 1;
}