aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2004-07-10 23:32:31 +0000
committerTravis Howell2004-07-10 23:32:31 +0000
commitebafa060c65acd1c69f55a62879e5dfb050a2527 (patch)
treee1f34b44b057c82d043df97c971daede557e9edc
parent32335f0ea11f95ef54d2b18418fdafb01bd6d33c (diff)
downloadscummvm-rg350-ebafa060c65acd1c69f55a62879e5dfb050a2527.tar.gz
scummvm-rg350-ebafa060c65acd1c69f55a62879e5dfb050a2527.tar.bz2
scummvm-rg350-ebafa060c65acd1c69f55a62879e5dfb050a2527.zip
Always stop actor walkscript when required.
svn-id: r14184
-rw-r--r--scumm/actor.cpp18
-rw-r--r--scumm/script_v6.cpp1
-rw-r--r--scumm/script_v8.cpp1
-rw-r--r--scumm/scumm.cpp2
4 files changed, 9 insertions, 13 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp
index 60d577daee..0925f193b2 100644
--- a/scumm/actor.cpp
+++ b/scumm/actor.cpp
@@ -94,9 +94,7 @@ void Actor::initActor(int mode) {
memset(sound, 0, sizeof(sound));
targetFacing = facing;
- if (walkScript)
- _vm->stopScript(walkScript);
- moving = 0;
+ stopActorMoving();
shadow_mode = 0;
layer = 0;
@@ -138,10 +136,9 @@ void Actor::initActor(int mode) {
}
void Actor::stopActorMoving() {
- if (walkScript)
+ if (_vm->_version >= 7)
_vm->stopScript(walkScript);
moving = 0;
- startAnimActor(standFrame);
}
void Actor::setActorWalkSpeed(uint newSpeedX, uint newSpeedY) {
@@ -593,8 +590,8 @@ void Actor::putActor(int dstX, int dstY, byte newRoom) {
if (visible) {
if (isInCurrentRoom()) {
if (moving) {
+ stopActorMoving();
startAnimActor(standFrame);
- moving = 0;
}
adjustActorPos();
} else {
@@ -708,12 +705,9 @@ void Actor::adjustActorPos() {
walkdata.dest.x = -1;
- moving = 0;
+ stopActorMoving();
cost.soundCounter = 0;
- if (walkScript)
- _vm->stopScript(walkScript);
-
if (walkbox != kInvalidBox) {
byte flags = _vm->getBoxFlags(walkbox);
if (flags & 7) {
@@ -755,8 +749,8 @@ void Actor::hideActor() {
return;
if (moving) {
+ stopActorMoving();
startAnimActor(standFrame);
- moving = 0;
}
visible = false;
cost.soundCounter = 0;
@@ -785,7 +779,7 @@ void Actor::showActor() {
if (!moving && _vm->_version <= 2)
startAnimActor(standFrame);
- moving = 0;
+ stopActorMoving();
visible = true;
needRedraw = true;
}
diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp
index 3c4ccbde12..02613b8e47 100644
--- a/scumm/script_v6.cpp
+++ b/scumm/script_v6.cpp
@@ -1892,6 +1892,7 @@ void ScummEngine_v6::o6_actorOps() {
break;
case 229: // SO_ACTOR_STOP
a->stopActorMoving();
+ a->startAnimActor(a->standFrame);
break;
case 230: /* set direction */
a->moving &= ~MF_TURN;
diff --git a/scumm/script_v8.cpp b/scumm/script_v8.cpp
index dd8e744f3d..0d09074430 100644
--- a/scumm/script_v8.cpp
+++ b/scumm/script_v8.cpp
@@ -1039,6 +1039,7 @@ void ScummEngine_v8::o8_actorOps() {
break;
case 0x80: // SO_ACTOR_STOP
a->stopActorMoving();
+ a->startAnimActor(a->standFrame);
break;
case 0x81: // SO_ACTOR_FACE Make actor face angle
a->moving &= ~MF_TURN;
diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp
index 6003e92f9d..a1bd2728ec 100644
--- a/scumm/scumm.cpp
+++ b/scumm/scumm.cpp
@@ -2222,7 +2222,7 @@ void ScummEngine::startScene(int room, Actor *a, int objectNr) {
getObjectXYPos(objectNr, x, y, dir);
a->putActor(x, y, _currentRoom);
a->setDirection(dir + 180);
- a->moving = 0;
+ a->stopActorMoving();
}
showActors();