aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2006-04-29 13:01:35 +0000
committerMax Horn2006-04-29 13:01:35 +0000
commit1735b0421bbbc1fcd2a6d0126a152ceef39b6b43 (patch)
treee8abcdb9a8c58b8014022284aee2f9e3ea6df32f
parentcc3fac2ead745876f618a904d2029080730a2baf (diff)
downloadscummvm-rg350-1735b0421bbbc1fcd2a6d0126a152ceef39b6b43.tar.gz
scummvm-rg350-1735b0421bbbc1fcd2a6d0126a152ceef39b6b43.tar.bz2
scummvm-rg350-1735b0421bbbc1fcd2a6d0126a152ceef39b6b43.zip
Make use of the new scummLoop_* functions to move some SCUMM version specific stuff around
svn-id: r22219
-rw-r--r--engines/scumm/gfx.cpp3
-rw-r--r--engines/scumm/he/intern_he.h2
-rw-r--r--engines/scumm/intern.h16
-rw-r--r--engines/scumm/scumm.cpp53
-rw-r--r--engines/scumm/scumm.h11
5 files changed, 53 insertions, 32 deletions
diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp
index 46255ef245..663edcdf30 100644
--- a/engines/scumm/gfx.cpp
+++ b/engines/scumm/gfx.cpp
@@ -790,7 +790,6 @@ void ScummEngine::redrawBGAreas() {
redrawBGStrip(0, 1);
} else if (_fullRedraw || diff != 0) {
_bgNeedsRedraw = false;
- _flashlight.isDrawn = false;
redrawBGStrip(0, gdi._numStrips);
}
}
@@ -1090,7 +1089,7 @@ void ScummEngine::drawBox(int x, int y, int x2, int y2, int color) {
}
}
-void ScummEngine::drawFlashlight() {
+void ScummEngine_v5::drawFlashlight() {
int i, j, x, y;
VirtScreen *vs = &virtscr[kMainVirtScreen];
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h
index 7c3baba193..f06214e1fc 100644
--- a/engines/scumm/he/intern_he.h
+++ b/engines/scumm/he/intern_he.h
@@ -447,6 +447,8 @@ protected:
virtual void executeOpcode(byte i);
virtual const char *getOpcodeDesc(byte i);
+ virtual void scummLoop_handleDrawing();
+
virtual void setupScummVars();
virtual void initScummVars();
diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h
index 58bca67183..029e347dec 100644
--- a/engines/scumm/intern.h
+++ b/engines/scumm/intern.h
@@ -49,6 +49,13 @@ protected:
uint16 _cursorImages[4][17];
byte _cursorHotspots[2 * 4];
+ struct {
+ int x, y, w, h;
+ byte *buffer;
+ uint16 xStrips, yStrips;
+ bool isDrawn;
+ } _flashlight;
+
public:
ScummEngine_v5(OSystem *syst, const DetectorResult &dr);
@@ -57,6 +64,8 @@ protected:
virtual void executeOpcode(byte i);
virtual const char *getOpcodeDesc(byte i);
+ virtual void scummLoop_handleActors();
+
virtual void setupScummVars();
virtual void initScummVars();
virtual void decodeParseString();
@@ -79,6 +88,8 @@ protected:
void redefineBuiltinCursorFromChar(int index, int chr);
void redefineBuiltinCursorHotspot(int index, int x, int y);
+ void drawFlashlight();
+
/* Version 5 script opcodes */
void o5_actorFollowCamera();
void o5_actorFromPos();
@@ -564,6 +575,8 @@ protected:
virtual void executeOpcode(byte i);
virtual const char *getOpcodeDesc(byte i);
+ virtual void scummLoop_handleActors();
+
virtual void setupScummVars();
virtual void decodeParseString(int a, int b);
virtual void readArrayFromIndexFile();
@@ -821,6 +834,9 @@ public:
void clearSubtitleQueue();
protected:
+ virtual void scummLoop_handleSound();
+ virtual void scummLoop_handleDrawing();
+
virtual void setupScummVars();
virtual void initScummVars();
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 75097da6e9..c6fc1a04b6 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -371,7 +371,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
_doEffect = false;
_currentLights = 0;
- memset(&_flashlight, 0, sizeof(_flashlight));
_bompActorPalettePtr = NULL;
_shakeEnabled = false;
_shakeFrame = 0;
@@ -740,6 +739,12 @@ ScummEngine_v5::ScummEngine_v5(OSystem *syst, const DetectorResult &dr)
memcpy(_cursorImages[i], default_cursor_images[i], 32);
}
memcpy(_cursorHotspots, default_cursor_hotspots, 8);
+
+ // Setup flashlight
+ memset(&_flashlight, 0, sizeof(_flashlight));
+ _flashlight.xStrips = 7;
+ _flashlight.yStrips = 7;
+ _flashlight.buffer = NULL;
}
ScummEngine_v4::ScummEngine_v4(OSystem *syst, const DetectorResult &dr)
@@ -1228,13 +1233,6 @@ void ScummEngine::scummInit() {
virtscr[0].xstart = 0;
- if (_game.version <= 5) {
- // Setup light
- _flashlight.xStrips = 7;
- _flashlight.yStrips = 7;
- _flashlight.buffer = NULL;
- }
-
_mouse.x = 104;
_mouse.y = 56;
@@ -1554,7 +1552,7 @@ int ScummEngine::go() {
diff = _system->getMillis();
delta = scummLoop(delta);
- if (delta < 1) // Ensure we don't get into a loop
+ if (delta < 1) // Ensure we don't get into an endless loop
delta = 1; // by not decreasing sleepers.
if (_quit) {
@@ -1869,32 +1867,44 @@ void ScummEngine::scummLoop_handleSaveLoad() {
}
void ScummEngine::scummLoop_handleDrawing() {
- // FIXME / TODO: Do we really have to check for GF_NEW_CAMERA?
- // Since old games simply don't use the y coord, we should be able to safely
- // use "camera._cur != camera._last" here...
- if (camera._cur.x != camera._last.x || _bgNeedsRedraw || _fullRedraw
- || ((_game.features & GF_NEW_CAMERA) && camera._cur.y != camera._last.y)) {
+ if (camera._cur != camera._last || _bgNeedsRedraw || _fullRedraw) {
redrawBGAreas();
}
processDrawQue();
+}
- if (_game.heversion >= 99)
- _fullRedraw = false;
+#ifndef DISABLE_SCUMM_7_8
+void ScummEngine_v7::scummLoop_handleDrawing() {
+ ScummEngine_v6::scummLoop_handleDrawing();
// Full Throttle always redraws verbs and draws verbs before actors
if (_game.version >= 7)
redrawVerbs();
+}
+#endif
#ifndef DISABLE_HE
+void ScummEngine_v90he::scummLoop_handleDrawing() {
+ ScummEngine_v80he::scummLoop_handleDrawing();
+
+ if (_game.heversion >= 99)
+ _fullRedraw = false;
+
if (_game.heversion >= 90) {
- ((ScummEngine_v90he *)this)->_sprite->resetBackground();
- ((ScummEngine_v90he *)this)->_sprite->sortActiveSprites();
+ _sprite->resetBackground();
+ _sprite->sortActiveSprites();
}
+}
#endif
+
+void ScummEngine_v6::scummLoop_handleActors() {
+ setActorRedrawFlags();
+ resetActorBgs();
+ processActors();
}
-void ScummEngine::scummLoop_handleActors() {
+void ScummEngine_v5::scummLoop_handleActors() {
setActorRedrawFlags();
resetActorBgs();
@@ -1920,8 +1930,11 @@ void ScummEngine::scummLoop_handleEffects() {
void ScummEngine::scummLoop_handleSound() {
_sound->processSound();
+}
#ifndef DISABLE_SCUMM_7_8
+void ScummEngine_v7::scummLoop_handleSound() {
+ ScummEngine_v6::scummLoop_handleSound();
if (_imuseDigital) {
_imuseDigital->flushTracks();
if ( ((_game.id == GID_DIG) && (!(_game.features & GF_DEMO))) || (_game.id == GID_CMI) )
@@ -1930,8 +1943,8 @@ void ScummEngine::scummLoop_handleSound() {
if (_smixer) {
_smixer->flush();
}
-#endif
}
+#endif
#pragma mark -
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 8f9a7ec759..98db99fccf 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -475,7 +475,7 @@ protected:
virtual void scummLoop_updateScummVars();
virtual void scummLoop_handleSaveLoad();
virtual void scummLoop_handleDrawing();
- virtual void scummLoop_handleActors();
+ virtual void scummLoop_handleActors() = 0;
virtual void scummLoop_handleEffects();
virtual void scummLoop_handleSound();
@@ -997,13 +997,6 @@ protected:
byte *_scrollBuffer;
- struct {
- int x, y, w, h;
- byte *buffer;
- uint16 xStrips, yStrips;
- bool isDrawn;
- } _flashlight;
-
public:
bool isLightOn() const;
@@ -1088,8 +1081,6 @@ public:
byte *getMaskBuffer(int x, int y, int z);
protected:
- void drawFlashlight();
-
void fadeIn(int effect);
void fadeOut(int effect);