[Scummvm-cvs-logs] SF.net SVN: scummvm: [24169] scummvm/trunk/engines/scumm

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sat Oct 7 15:57:21 CEST 2006


Revision: 24169
          http://svn.sourceforge.net/scummvm/?rev=24169&view=rev
Author:   fingolfin
Date:     2006-10-07 06:57:06 -0700 (Sat, 07 Oct 2006)

Log Message:
-----------
Moved all INSANE and SMUSH related code into ScummEngine_v7 (resp. ScummEngine_v6 in a few cases)

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp
    scummvm/trunk/engines/scumm/imuse_digi/dimuse.h
    scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp
    scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
    scummvm/trunk/engines/scumm/insane/insane.h
    scummvm/trunk/engines/scumm/intern.h
    scummvm/trunk/engines/scumm/script_v6.cpp
    scummvm/trunk/engines/scumm/scumm.cpp
    scummvm/trunk/engines/scumm/scumm.h
    scummvm/trunk/engines/scumm/smush/chunk.cpp
    scummvm/trunk/engines/scumm/smush/smush_player.cpp
    scummvm/trunk/engines/scumm/smush/smush_player.h

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -25,7 +25,7 @@
 
 #include "scumm/actor.h"
 #include "scumm/saveload.h"
-#include "scumm/scumm.h"
+#include "scumm/intern.h"
 #include "scumm/sound.h"
 #include "scumm/imuse_digi/dimuse.h"
 #include "scumm/imuse_digi/dimuse_bndmgr.h"
@@ -44,7 +44,7 @@
 	imuseDigital->callback();
 }
 
-IMuseDigital::IMuseDigital(ScummEngine *scumm, int fps)
+IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, int fps)
 	: _vm(scumm) {
 	_pause = false;
 	_sound = new ImuseDigiSndMgr(_vm);

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse.h
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse.h	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse.h	2006-10-07 13:57:06 UTC (rev 24169)
@@ -42,6 +42,7 @@
 struct imuseDigTable;
 struct imuseComiTable;
 class Serializer;
+class ScummEngine_v7;
 
 class IMuseDigital : public MusicEngine {
 private:
@@ -88,7 +89,7 @@
 	Track *_track[MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS];
 
 	Common::Mutex _mutex;
-	ScummEngine *_vm;
+	ScummEngine_v7 *_vm;
 	ImuseDigiSndMgr *_sound;
 
 	char *_audioNames;
@@ -130,7 +131,7 @@
 	void playDigMusic(const char *songName, const imuseDigTable *table, int atribPos, bool sequence);
 
 public:
-	IMuseDigital(ScummEngine *scumm, int fps);
+	IMuseDigital(ScummEngine_v7 *scumm, int fps);
 	virtual ~IMuseDigital();
 
 	void setAudioNames(int32 num, char *names);

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_script.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -24,7 +24,7 @@
 #include "common/timer.h"
 
 #include "scumm/actor.h"
-#include "scumm/scumm.h"
+#include "scumm/intern.h"
 #include "scumm/sound.h"
 #include "scumm/imuse_digi/dimuse.h"
 #include "scumm/imuse_digi/dimuse_bndmgr.h"

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -23,7 +23,7 @@
 #include "common/timer.h"
 
 #include "scumm/actor.h"
-#include "scumm/scumm.h"
+#include "scumm/intern.h"
 #include "scumm/sound.h"
 #include "scumm/imuse_digi/dimuse.h"
 #include "scumm/imuse_digi/dimuse_bndmgr.h"

Modified: scummvm/trunk/engines/scumm/insane/insane.h
===================================================================
--- scummvm/trunk/engines/scumm/insane/insane.h	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/insane/insane.h	2006-10-07 13:57:06 UTC (rev 24169)
@@ -70,7 +70,7 @@
 
  private:
 
-	ScummEngine_v6 *_vm;
+	ScummEngine_v7 *_vm;
 	SmushPlayer *_player;
 
 	int32 _speed;

Modified: scummvm/trunk/engines/scumm/intern.h
===================================================================
--- scummvm/trunk/engines/scumm/intern.h	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/intern.h	2006-10-07 13:57:06 UTC (rev 24169)
@@ -538,8 +538,6 @@
 
 	const OpcodeEntryV6 *_opcodesV6;
 
-	int _smushFrameRate;
-
 	struct TextObject {
 		int16 xpos, ypos;
 		byte color;
@@ -577,7 +575,26 @@
 	int16 _akosQueuePos;
 
 
+	int _smushFrameRate;
+
+	/**
+	 * Flag which signals that the SMUSH video playback should end now
+	 * (e.g. because it was aborted by the user or it's simply finished).
+	 */
+	bool _smushVideoShouldFinish;
+
+	/** This flag is a hack to allow the pause dialog to pause SMUSH playback, too. */
+	bool _smushPaused;
+
+	Insane *_insane;
+
 public:
+	/** This flag tells IMuseDigital that INSANE is running. */
+	bool _insaneRunning;	// Used by IMuseDigital::flushTracks()
+
+	SmushMixer *_smixer;
+
+public:
 	ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
 
 	virtual void resetScumm();
@@ -817,6 +834,8 @@
 
 #ifndef DISABLE_SCUMM_7_8
 class ScummEngine_v7 : public ScummEngine_v6 {
+	friend class SmushPlayer;
+	friend class Insane;
 public:
 	ScummEngine_v7(OSystem *syst, const DetectorResult &dr);
 	~ScummEngine_v7();
@@ -855,10 +874,14 @@
 	void clearSubtitleQueue();
 
 protected:
+	virtual int runDialog(Dialog &dialog);
+
 	virtual void scummLoop_handleSound();
 	virtual void scummLoop_handleDrawing();
 	virtual void processKeyboard(bool smushMode);
 
+	virtual void setupScumm();
+
 	virtual void setupScummVars();
 	virtual void resetScummVars();
 

Modified: scummvm/trunk/engines/scumm/script_v6.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_v6.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/script_v6.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -2526,7 +2526,7 @@
 					if (strcmp((char *)getStringAddressVar(VAR_VIDEONAME), "sq3.san") == 0)
 						_smushFrameRate = 14;
 
-					SmushPlayer *sp = new SmushPlayer(this, _smushFrameRate);
+					SmushPlayer *sp = new SmushPlayer((ScummEngine_v7 *)this, _smushFrameRate);
 
 					// Correct incorrect smush filename in Macintosh FT demo
 					if ((_game.id == GID_FT) && (_game.features & GF_DEMO) && (_game.platform == Common::kPlatformMacintosh) &&

Modified: scummvm/trunk/engines/scumm/scumm.cpp
===================================================================
--- scummvm/trunk/engines/scumm/scumm.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/scumm.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -248,16 +248,12 @@
 	// Init all vars
 	_imuse = NULL;
 	_imuseDigital = NULL;
-	_smixer = NULL;
 	_musicEngine = NULL;
 	_verbs = NULL;
 	_objs = NULL;
 	_debugFlags = 0;
 	_sound = NULL;
 	memset(&vm, 0, sizeof(vm));
-	_smushVideoShouldFinish = false;
-	_smushPaused = false;
-	_insaneRunning = false;
 	_quit = false;
 	_pauseDialog = NULL;
 	_mainMenuDialog = NULL;
@@ -663,12 +659,6 @@
 		delete _musicEngine;
 	}
 
-#ifndef DISABLE_SCUMM_7_8
-	if (_smixer) {
-		_smixer->stop();
-		delete _smixer;
-	}
-#endif
 	_mixer->stopAll();
 
 	delete [] _actors;
@@ -790,8 +780,6 @@
 	_blastTextQueuePos = 0;
 	memset(_blastTextQueue, 0, sizeof(_blastTextQueue));
 
-	_smushFrameRate = 0;
-
 	memset(_akosQueue, 0, sizeof(_akosQueue));
 	_akosQueuePos = 0;
 
@@ -926,6 +914,13 @@
 	: ScummEngine_v6(syst, dr) {
 	_verbCharset = 0;
 	_verbLineSpacing = 10;
+
+	_smushFrameRate = 0;
+	_smushVideoShouldFinish = false;
+	_smushPaused = false;
+	_insaneRunning = false;
+	_smixer = NULL;
+
 	_existLanguageFile = false;
 	_languageBuffer = NULL;
 	_languageIndex = NULL;
@@ -933,6 +928,11 @@
 }
 
 ScummEngine_v7::~ScummEngine_v7() {
+	if (_smixer) {
+		_smixer->stop();
+		delete _smixer;
+	}
+
 	free(_languageBuffer);
 	free(_languageIndex);
 }
@@ -992,7 +992,6 @@
 	return 0;
 }
 
-
 void ScummEngine::setupScumm() {
 	// On some systems it's not safe to run CD audio games from the CD.
 	if (_game.features & GF_AUDIOTRACKS) {
@@ -1024,14 +1023,6 @@
 	// Create the costume renderer
 	setupCostumeRenderer();
 
-#ifndef DISABLE_SCUMM_7_8
-	// Create FT INSANE object
-	if (_game.id == GID_FT)
-		_insane = new Insane((ScummEngine_v7 *)this);
-	else
-#endif
-		_insane = 0;
-
 	// Load game from specified slot, if any
 	if (ConfMan.hasKey("save_slot")) {
 		requestLoad(ConfMan.getInt("save_slot"));
@@ -1096,6 +1087,27 @@
 #endif
 }
 
+#ifndef DISABLE_SCUMM_7_8
+void ScummEngine_v7::setupScumm() {
+
+	if (_game.features & GF_DIGI_IMUSE) {
+#ifndef DISABLE_SCUMM_7_8
+		_musicEngine = _imuseDigital = new IMuseDigital(this, 10);
+#endif
+	}
+
+	ScummEngine::setupScumm();
+
+	// Create FT INSANE object
+	if (_game.id == GID_FT)
+		_insane = new Insane((ScummEngine_v7 *)this);
+	else
+		_insane = 0;
+
+	_smixer = new SmushMixer(_mixer);
+}
+#endif
+
 void ScummEngine::setupCharsetRenderer() {
 	if (_game.platform == Common::kPlatformNES)
 		_charset = new CharsetRendererNES(this);
@@ -1433,10 +1445,7 @@
 
 	// Init iMuse
 	if (_game.features & GF_DIGI_IMUSE) {
-#ifndef DISABLE_SCUMM_7_8
-		_musicEngine = _imuseDigital = new IMuseDigital(this, 10);
-		_smixer = new SmushMixer(_mixer);
-#endif
+		// Setup for digital iMuse is performed in another place
 	} else if (_game.platform == Common::kPlatformC64) {
 		// TODO
 		_musicEngine = NULL;
@@ -2058,8 +2067,6 @@
 	// Pause sound & video
 	bool old_soundsPaused = _sound->_soundsPaused;
 	_sound->pauseSounds(true);
-	bool oldSmushPaused = _smushPaused;
-	_smushPaused = true;
 
 	// Open & run the dialog
 	int result = dialog.runModal();
@@ -2069,7 +2076,6 @@
 
 	// Resume sound & video
 	_sound->pauseSounds(old_soundsPaused);
-	_smushPaused = oldSmushPaused;
 
 	_engineStartTime += (_system->getMillis() / 1000) - _dialogStartTime;
 	_dialogStartTime = 0;
@@ -2078,6 +2084,17 @@
 	return result;
 }
 
+int ScummEngine_v7::runDialog(Dialog &dialog) {
+	bool oldSmushPaused = _smushPaused;
+	_smushPaused = true;
+
+	int result = ScummEngine::runDialog(dialog);
+
+	_smushPaused = oldSmushPaused;
+
+	return result;
+}
+
 void ScummEngine::pauseDialog() {
 	if (!_pauseDialog)
 		_pauseDialog = new PauseDialog(this, 4);

Modified: scummvm/trunk/engines/scumm/scumm.h
===================================================================
--- scummvm/trunk/engines/scumm/scumm.h	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/scumm.h	2006-10-07 13:57:06 UTC (rev 24169)
@@ -412,8 +412,6 @@
  */
 class ScummEngine : public Engine {
 	friend class ScummDebugger;
-	friend class SmushPlayer;
-	friend class Insane;
 	friend class CharsetRenderer;
 	friend class ResourceManager;
 
@@ -428,7 +426,6 @@
 	IMuseDigital *_imuseDigital;
 	MusicEngine *_musicEngine;
 	Sound *_sound;
-	SmushMixer *_smixer;
 
 	VerbSlot *_verbs;
 	ObjectData *_objs;
@@ -506,21 +503,7 @@
 	virtual void animateCursor() {}
 	virtual void updatePalette();
 
-	/**
-	 * Flag which signals that the SMUSH video playback should end now
-	 * (e.g. because it was aborted by the user or it's simply finished).
-	 */
-	bool _smushVideoShouldFinish;
-	/** This flag is a hack to allow the pause dialog to pause SMUSH playback, too. */
-	bool _smushPaused;
 public:
-	/** This flag tells IMuseDigital that INSANE is running. */
-	bool _insaneRunning;	// Used by IMuseDigital::flushTracks()
-
-protected:
-	Insane *_insane;
-
-public:
 	void pauseGame();
 	void restart();
 	void shutDown();
@@ -533,7 +516,7 @@
 	Dialog *_versionDialog;
 	Dialog *_mainMenuDialog;
 
-	int runDialog(Dialog &dialog);
+	virtual int runDialog(Dialog &dialog);
 	void confirmExitDialog();
 	void confirmRestartDialog();
 	void pauseDialog();

Modified: scummvm/trunk/engines/scumm/smush/chunk.cpp
===================================================================
--- scummvm/trunk/engines/scumm/smush/chunk.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/smush/chunk.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -84,9 +84,10 @@
 	}
 
 	if (_curPos > _size) {
-		if (g_scumm->_insaneRunning) {
-			warning("Looks like you compressed file %s in wrong way. It has FLU index which was not updated", _name.c_str());
-		}
+// FIXME: This is an evil hack, can't we do better?!
+//		if (g_scumm->_insaneRunning) {
+//			warning("Looks like you compressed file %s in wrong way. It has FLU index which was not updated", _name.c_str());
+//		}
 		error("invalid seek request : %d > %d (delta == %d)", _curPos, _size, delta);
 	}
 	return true;

Modified: scummvm/trunk/engines/scumm/smush/smush_player.cpp
===================================================================
--- scummvm/trunk/engines/scumm/smush/smush_player.cpp	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/smush/smush_player.cpp	2006-10-07 13:57:06 UTC (rev 24169)
@@ -235,7 +235,7 @@
 #endif
 }
 
-SmushPlayer::SmushPlayer(ScummEngine_v6 *scumm, int speed) {
+SmushPlayer::SmushPlayer(ScummEngine_v7 *scumm, int speed) {
 	_vm = scumm;
 	_version = -1;
 	_nbframes = 0;

Modified: scummvm/trunk/engines/scumm/smush/smush_player.h
===================================================================
--- scummvm/trunk/engines/scumm/smush/smush_player.h	2006-10-07 13:33:41 UTC (rev 24168)
+++ scummvm/trunk/engines/scumm/smush/smush_player.h	2006-10-07 13:57:06 UTC (rev 24169)
@@ -31,7 +31,7 @@
 
 namespace Scumm {
 
-class ScummEngine_v6;
+class ScummEngine_v7;
 class SmushFont;
 class SmushMixer;
 class StringResource;
@@ -39,7 +39,7 @@
 class SmushPlayer {
 	friend class Insane;
 private:
-	ScummEngine_v6 *_vm;
+	ScummEngine_v7 *_vm;
 	int _version;
 	int32 _nbframes;
 	SmushMixer *_smixer;
@@ -95,7 +95,7 @@
 	Common::Mutex _mutex;
 
 public:
-	SmushPlayer(ScummEngine_v6 *scumm, int speed);
+	SmushPlayer(ScummEngine_v7 *scumm, int speed);
 	~SmushPlayer();
 
 	void play(const char *filename, int32 offset = 0, int32 startFrame = 0);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list