aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/actor.cpp13
-rw-r--r--engines/scumm/actor.h20
-rw-r--r--engines/scumm/scumm.cpp10
3 files changed, 18 insertions, 25 deletions
diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index df143f6288..8c211ed59d 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -42,18 +42,10 @@
namespace Scumm {
byte Actor::kInvalidBox = 0;
-ScummEngine *Actor::_vm = 0;
-void Actor::initActorClass(ScummEngine *scumm) {
- _vm = scumm;
- if (_vm->_game.features & GF_SMALL_HEADER) {
- kInvalidBox = 255;
- }
-}
-
-Actor::Actor(int id) {
+Actor::Actor(ScummEngine *scumm, int id) :
+ _vm(scumm), _number(id) {
assert(_vm != 0);
- _number = id;
}
void Actor::initActor(int mode) {
@@ -492,7 +484,6 @@ void Actor::walkActor() {
_moving &= ~MF_NEW_LEG;
do {
-
if (_walkbox == kInvalidBox) {
setBox(_walkdata.destbox);
_walkdata.curbox = _walkdata.destbox;
diff --git a/engines/scumm/actor.h b/engines/scumm/actor.h
index 61c5216133..2beccf3a72 100644
--- a/engines/scumm/actor.h
+++ b/engines/scumm/actor.h
@@ -77,14 +77,18 @@ struct AdjustBoxResult { /* Result type of AdjustBox functions */
byte box;
};
-class Actor : public Serializable {
+enum {
+ kOldInvalidBox = 255, // For small header games
+ kNewInavlidBox = 0
+};
+class Actor : public Serializable {
public:
static byte kInvalidBox;
- static void initActorClass(ScummEngine *scumm);
-
protected:
+ ScummEngine *_vm;
+
/** The position of the actor inside the virtual screen. */
Common::Point _pos;
@@ -175,11 +179,9 @@ protected:
ActorWalkData _walkdata;
int16 _animVariable[27];
- static ScummEngine *_vm;
-
public:
- Actor(int id);
+ Actor(ScummEngine *scumm, int id);
virtual ~Actor() {}
//protected:
@@ -334,7 +336,7 @@ protected:
class Actor_v3 : public Actor {
public:
- Actor_v3(int id) : Actor(id) {}
+ Actor_v3(ScummEngine *scumm, int id) : Actor(scumm, id) {}
virtual void walkActor();
@@ -345,7 +347,7 @@ protected:
class Actor_v2 : public Actor_v3 {
public:
- Actor_v2(int id) : Actor_v3(id) {}
+ Actor_v2(ScummEngine *scumm, int id) : Actor_v3(scumm, id) {}
virtual void initActor(int mode);
virtual void walkActor();
@@ -361,7 +363,7 @@ public:
byte _miscflags;
public:
- ActorC64(int id) : Actor_v2(id) {}
+ ActorC64(ScummEngine *scumm, int id) : Actor_v2(scumm, id) {}
virtual void initActor(int mode) {
Actor_v2::initActor(mode);
if (mode == -1) {
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index b808ccb061..267b78d1f7 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -1295,18 +1295,18 @@ void ScummEngine::resetScumm() {
_cursor.animate = 1;
// Allocate and Initialize actors
- Actor::initActorClass(this);
+ Actor::kInvalidBox = ((_game.features & GF_SMALL_HEADER) ? kOldInvalidBox : kNewInavlidBox);
_actors = new Actor * [_numActors];
_sortedActors = new Actor * [_numActors];
for (i = 0; i < _numActors; ++i) {
if (_game.version == 0)
- _actors[i] = new ActorC64(i);
+ _actors[i] = new ActorC64(this, i);
else if (_game.version <= 2)
- _actors[i] = new Actor_v2(i);
+ _actors[i] = new Actor_v2(this, i);
else if (_game.version == 3)
- _actors[i] = new Actor_v3(i);
+ _actors[i] = new Actor_v3(this, i);
else
- _actors[i] = new Actor(i);
+ _actors[i] = new Actor(this, i);
_actors[i]->initActor(-1);
// this is from IDB