diff options
Diffstat (limited to 'scumm')
-rw-r--r-- | scumm/actor.cpp | 19 | ||||
-rw-r--r-- | scumm/scumm.h | 1 | ||||
-rw-r--r-- | scumm/scummvm.cpp | 2 |
3 files changed, 22 insertions, 0 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp index 9daa547bbd..e2ab510cf3 100644 --- a/scumm/actor.cpp +++ b/scumm/actor.cpp @@ -868,6 +868,8 @@ void Scumm::processActors() // Make a list of all actors in this room for (i = 1; i < NUM_ACTORS; i++) { a = derefActor(i); + if ((_features & GF_AFTER_V8) && a->layer < 0) + continue; if (a->isInCurrentRoom()) actors[numactors++] = a; } @@ -903,6 +905,23 @@ void Scumm::processActors() delete [] actors; } +// Used in Scumm v8, to allow the verb coin to be drawn over the inventory +// chest. I'm assuming that draw order won't matter here. +void Scumm::processUpperActors() +{ + Actor *a; + int i; + + for (i = 1; i < NUM_ACTORS; i++) { + a = derefActor(i); + if (a->isInCurrentRoom() && a->costume && a->layer < 0) { + CHECK_HEAP getMaskFromBox(a->walkbox); + a->drawActorCostume(); + CHECK_HEAP a->animateCostume(); + } + } +} + void Actor::drawActorCostume() { if (!needRedraw) diff --git a/scumm/scumm.h b/scumm/scumm.h index eeb8c7b208..e2547d65c0 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -673,6 +673,7 @@ public: void setActorRedrawFlags(bool fg, bool bg); void resetActorBgs(); void processActors(); + void processUpperActors(); int getActorFromPos(int x, int y); void actorFollowCamera(int act); diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index 2472dc70a1..f603579892 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -562,6 +562,8 @@ int Scumm::scummLoop(int delta) } drawBlastObjects(); + if (_features & GF_AFTER_V8) + processUpperActors(); drawBlastTexts(); drawDirtyScreenParts(); removeBlastObjects(); |