aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/actor.cpp10
-rw-r--r--engines/scumm/akos.cpp10
-rw-r--r--engines/scumm/intern.h17
-rw-r--r--engines/scumm/scumm.cpp6
-rw-r--r--engines/scumm/scumm.h14
5 files changed, 32 insertions, 25 deletions
diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index 903d5d007b..2574ab1bec 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -1014,6 +1014,10 @@ void ScummEngine::processActors() {
a->animateCostume();
}
}
+}
+
+void ScummEngine_v6::processActors() {
+ ScummEngine::processActors();
if (_game.features & GF_NEW_COSTUMES)
akos_processQueue();
@@ -1024,7 +1028,7 @@ void ScummEngine_v71he::processActors() {
preProcessAuxQueue();
if (!_skipProcessActors)
- ScummEngine::processActors();
+ ScummEngine_v6::processActors();
_fullRedraw = false;
@@ -1038,7 +1042,7 @@ void ScummEngine_v90he::processActors() {
_sprite->processImages(true);
if (!_skipProcessActors)
- ScummEngine::processActors();
+ ScummEngine_v6::processActors();
_fullRedraw = false;
@@ -1240,7 +1244,7 @@ void Actor::animateLimb(int limb, int f) {
while (f--) {
if (_cost.active[limb] != 0)
- _vm->akos_increaseAnim(this, limb, aksq, (const uint16 *)akfo, size);
+ ((ScummEngine_v6 *)_vm)->akos_increaseAnim(this, limb, aksq, (const uint16 *)akfo, size);
}
// _needRedraw = true;
diff --git a/engines/scumm/akos.cpp b/engines/scumm/akos.cpp
index 563855bf4d..bce6a872cb 100644
--- a/engines/scumm/akos.cpp
+++ b/engines/scumm/akos.cpp
@@ -1334,10 +1334,10 @@ byte AkosRenderer::codec32(int xmoveCur, int ymoveCur) {
}
byte AkosCostumeLoader::increaseAnims(Actor *a) {
- return _vm->akos_increaseAnims(_akos, a);
+ return ((ScummEngine_v6 *)_vm)->akos_increaseAnims(_akos, a);
}
-bool ScummEngine::akos_increaseAnims(const byte *akos, Actor *a) {
+bool ScummEngine_v6::akos_increaseAnims(const byte *akos, Actor *a) {
const byte *aksq, *akfo;
int i;
uint size;
@@ -1360,7 +1360,7 @@ bool ScummEngine::akos_increaseAnims(const byte *akos, Actor *a) {
#define GUW(o) READ_LE_UINT16(aksq+curpos+(o))
#define GB(o) aksq[curpos+(o)]
-bool ScummEngine::akos_increaseAnim(Actor *a, int chan, const byte *aksq, const uint16 *akfo, int numakfo) {
+bool ScummEngine_v6::akos_increaseAnim(Actor *a, int chan, const byte *aksq, const uint16 *akfo, int numakfo) {
byte active;
uint old_curpos, curpos, end;
uint code;
@@ -1721,7 +1721,7 @@ bool ScummEngine::akos_increaseAnim(Actor *a, int chan, const byte *aksq, const
return curpos != old_curpos;
}
-void ScummEngine::akos_queCommand(byte cmd, Actor *a, int param_1, int param_2) {
+void ScummEngine_v6::akos_queCommand(byte cmd, Actor *a, int param_1, int param_2) {
_akosQueuePos++;
checkRange(31, 0, _akosQueuePos, "akos_queCommand overflow");
@@ -1731,7 +1731,7 @@ void ScummEngine::akos_queCommand(byte cmd, Actor *a, int param_1, int param_2)
_akosQueue[_akosQueuePos].param2 = param_2;
}
-void ScummEngine::akos_processQueue() {
+void ScummEngine_v6::akos_processQueue() {
byte cmd;
int actor, param_1, param_2;
diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h
index 2318aae4c1..b58d4fe9c6 100644
--- a/engines/scumm/intern.h
+++ b/engines/scumm/intern.h
@@ -564,6 +564,15 @@ protected:
int _blastTextQueuePos;
BlastText _blastTextQueue[50];
+ // Akos Class
+ struct {
+ int16 cmd;
+ int16 actor;
+ int16 param1;
+ int16 param2;
+ } _akosQueue[32];
+ int16 _akosQueuePos;
+
public:
ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
@@ -620,6 +629,14 @@ protected:
virtual void clearDrawQueues();
+public:
+ bool akos_increaseAnims(const byte *akos, Actor *a);
+ bool akos_increaseAnim(Actor *a, int i, const byte *aksq, const uint16 *akfo, int numakfo);
+protected:
+ void akos_queCommand(byte cmd, Actor *a, int param_1, int param_2);
+ virtual void akos_processQueue();
+
+ virtual void processActors();
/* Version 6 script opcodes */
void o6_setBlastObjectWindow();
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index ade41b8675..b98d47e391 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -428,9 +428,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
_skipDrawObject = 0;
- memset(_akosQueue, 0, sizeof(_akosQueue));
- _akosQueuePos = 0;
-
//
// Init all VARS to 0xFF
//
@@ -789,6 +786,9 @@ ScummEngine_v6::ScummEngine_v6(OSystem *syst, const DetectorResult &dr)
_smushFrameRate = 0;
+ memset(_akosQueue, 0, sizeof(_akosQueue));
+ _akosQueuePos = 0;
+
VAR_VIDEONAME = 0xFF;
VAR_RANDOM_NR = 0xFF;
VAR_STRING2DRAW = 0xFF;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index eef0254cf1..e5833ca109 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -947,22 +947,8 @@ public:
// Generic costume code
bool isCostumeInUse(int i) const;
- // Akos Class
- struct {
- int16 cmd;
- int16 actor;
- int16 param1;
- int16 param2;
- } _akosQueue[32];
- int16 _akosQueuePos;
-
Common::Rect _actorClipOverride;
- bool akos_increaseAnims(const byte *akos, Actor *a);
- bool akos_increaseAnim(Actor *a, int i, const byte *aksq, const uint16 *akfo, int numakfo);
- void akos_queCommand(byte cmd, Actor *a, int param_1, int param_2);
- virtual void akos_processQueue();
-
protected:
/* Should be in Graphics class? */
uint16 _screenB, _screenH;