diff options
-rw-r--r-- | engines/scumm/actor.cpp | 13 | ||||
-rw-r--r-- | engines/scumm/actor.h | 20 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 10 |
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 |