aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2005-04-29 01:36:30 +0000
committerTravis Howell2005-04-29 01:36:30 +0000
commit2f262b3c3e4425a7851f02aa3e712c1401505e79 (patch)
tree9b9af15a1359fea13b76eb616d254dab728bd25c
parent4b4242e97316ff1959279d630533366c71219b2a (diff)
downloadscummvm-rg350-2f262b3c3e4425a7851f02aa3e712c1401505e79.tar.gz
scummvm-rg350-2f262b3c3e4425a7851f02aa3e712c1401505e79.tar.bz2
scummvm-rg350-2f262b3c3e4425a7851f02aa3e712c1401505e79.zip
Add HE90 version of processActors().
Add HE71 class, for HE71+ specifics. svn-id: r17859
-rw-r--r--scumm/actor.cpp39
-rw-r--r--scumm/gfx.cpp7
-rw-r--r--scumm/intern.h23
-rw-r--r--scumm/scumm.cpp6
4 files changed, 41 insertions, 34 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp
index 24e74ec8cb..ea761c538d 100644
--- a/scumm/actor.cpp
+++ b/scumm/actor.cpp
@@ -1016,30 +1016,31 @@ void ScummEngine::processActors() {
akos_processQueue();
}
-void ScummEngine_v70he::processActors() {
- // TODO: The HE 90 stuff should be moved to a new method, too,
- // if possible (ScummEngine_v90he::processActors).
- if (_heversion >= 71) {
- preProcessAuxQueue();
- }
- if (_heversion >= 90) {
- ((ScummEngine_v90he *)this)->spritesMarkDirty(0);
- ((ScummEngine_v90he *)this)->spritesProcessWiz(true);
- }
+void ScummEngine_v71he::processActors() {
+ preProcessAuxQueue();
if (!_skipProcessActors)
ScummEngine::processActors();
- if (_heversion >= 71) {
- postProcessAuxQueue();
- }
- if (_heversion >= 90) {
- ((ScummEngine_v90he *)this)->spritesMarkDirty(1);
- ((ScummEngine_v90he *)this)->spritesProcessWiz(false);
- }
+ postProcessAuxQueue();
}
+void ScummEngine_v90he::processActors() {
+ preProcessAuxQueue();
+
+ spritesMarkDirty(0);
+ spritesProcessWiz(true);
+
+ if (!_skipProcessActors)
+ ScummEngine::processActors();
+
+ postProcessAuxQueue();
+
+ spritesMarkDirty(1);
+ spritesProcessWiz(false);
+}
+
// 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 ScummEngine::processUpperActors() {
@@ -1969,7 +1970,7 @@ bool Actor::isTalkConditionSet(int slot) const {
return (_heCondMask & (1 << (slot - 1))) != 0;
}
-void ScummEngine_v70he::preProcessAuxQueue() {
+void ScummEngine_v71he::preProcessAuxQueue() {
if (!_skipProcessActors) {
for (int i = 0; i < _auxBlocksNum; ++i) {
AuxBlock *ab = &_auxBlocks[i];
@@ -1982,7 +1983,7 @@ void ScummEngine_v70he::preProcessAuxQueue() {
_auxBlocksNum = 0;
}
-void ScummEngine_v70he::postProcessAuxQueue() {
+void ScummEngine_v71he::postProcessAuxQueue() {
if (!_skipProcessActors) {
for (int i = 0; i < _auxEntriesNum; ++i) {
AuxEntry *ae = &_auxEntries[i];
diff --git a/scumm/gfx.cpp b/scumm/gfx.cpp
index 46e94b626d..14031f2898 100644
--- a/scumm/gfx.cpp
+++ b/scumm/gfx.cpp
@@ -798,12 +798,7 @@ void ScummEngine::redrawBGAreas() {
_bgNeedsRedraw = false;
}
-void ScummEngine_v70he::redrawBGAreas() {
- if (_heversion == 70) {
- ScummEngine::redrawBGAreas();
- return;
- }
-
+void ScummEngine_v71he::redrawBGAreas() {
if (camera._cur.x != camera._last.x && _charset->_hasMask)
stopTalk();
diff --git a/scumm/intern.h b/scumm/intern.h
index c55661793f..41b101f678 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -758,12 +758,6 @@ protected:
virtual void readGlobalObjects();
virtual void readIndexBlock(uint32 blocktype, uint32 itemsize);
- virtual void redrawBGAreas();
-
- virtual void processActors();
- void preProcessAuxQueue();
- void postProcessAuxQueue();
-
int getStringCharWidth(byte chr);
virtual int setupStringArray(int size);
void appendSubstring(int dst, int src, int len2, int len);
@@ -798,7 +792,20 @@ protected:
byte VAR_NUM_SOUND_CHANNELS;
};
-class ScummEngine_v72he : public ScummEngine_v70he {
+class ScummEngine_v71he : public ScummEngine_v70he {
+public:
+ ScummEngine_v71he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]) : ScummEngine_v70he(detector, syst, gs, md5sum) {}
+
+protected:
+ virtual void redrawBGAreas();
+
+ virtual void processActors();
+ void preProcessAuxQueue();
+ void postProcessAuxQueue();
+
+};
+
+class ScummEngine_v72he : public ScummEngine_v71he {
protected:
typedef void (ScummEngine_v72he::*OpcodeProcV72he)();
struct OpcodeEntryV72he {
@@ -1049,6 +1056,8 @@ protected:
virtual void readMAXS(int blockSize);
+ virtual void processActors();
+
void createWizEmptyImage(const WizParameters *params);
void fillWizRect(const WizParameters *params);
void fillWizParallelogram(const WizParameters *params);
diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp
index ebc720f800..9ac888760f 100644
--- a/scumm/scumm.cpp
+++ b/scumm/scumm.cpp
@@ -1276,7 +1276,7 @@ ScummEngine_v70he::~ScummEngine_v70he() {
}
ScummEngine_v72he::ScummEngine_v72he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16])
- : ScummEngine_v70he(detector, syst, gs, md5sum) {
+ : ScummEngine_v71he(detector, syst, gs, md5sum) {
VAR_NUM_ACTIVE_SOUND_CHANNELS = 0xFF;
VAR_NUM_ROOMS = 0xFF;
@@ -2762,9 +2762,9 @@ Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst) {
case 99:
engine = new ScummEngine_v99he(detector, syst, game, md5sum);
break;
- case 90:
case 98:
case 95:
+ case 90:
engine = new ScummEngine_v90he(detector, syst, game, md5sum);
break;
case 80:
@@ -2774,6 +2774,8 @@ Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst) {
engine = new ScummEngine_v72he(detector, syst, game, md5sum);
break;
case 71:
+ engine = new ScummEngine_v71he(detector, syst, game, md5sum);
+ break;
case 70:
engine = new ScummEngine_v70he(detector, syst, game, md5sum);
break;