[Scummvm-cvs-logs] SF.net SVN: scummvm:[34657] scummvm/trunk/engines/sword1

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Sat Sep 27 19:47:22 CEST 2008


Revision: 34657
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34657&view=rev
Author:   eriktorbjorn
Date:     2008-09-27 17:47:22 +0000 (Sat, 27 Sep 2008)

Log Message:
-----------
Allow quitting or returning to the launcher while cutscenes are playing.

Modified Paths:
--------------
    scummvm/trunk/engines/sword1/animation.cpp
    scummvm/trunk/engines/sword1/animation.h
    scummvm/trunk/engines/sword1/logic.cpp
    scummvm/trunk/engines/sword1/logic.h
    scummvm/trunk/engines/sword1/sword1.cpp

Modified: scummvm/trunk/engines/sword1/animation.cpp
===================================================================
--- scummvm/trunk/engines/sword1/animation.cpp	2008-09-27 17:25:40 UTC (rev 34656)
+++ scummvm/trunk/engines/sword1/animation.cpp	2008-09-27 17:47:22 UTC (rev 34657)
@@ -66,8 +66,8 @@
 // Basic movie player
 ///////////////////////////////////////////////////////////////////////////////
 
-MoviePlayer::MoviePlayer(Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system)
-	: _screen(screen), _textMan(textMan), _snd(snd), _system(system) {
+MoviePlayer::MoviePlayer(SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system)
+	: _vm(vm), _screen(screen), _textMan(textMan), _snd(snd), _system(system) {
 	_bgSoundStream = NULL;
 	_ticks = 0;
 	_textSpriteBuf = NULL;
@@ -265,7 +265,7 @@
 	_currentFrame = 0;
 	bool terminated = false;
 	Common::EventManager *eventMan = _system->getEventManager();
-	while (!terminated && decodeFrame()) {
+	while (!terminated && decodeFrame() && !_vm->quit()) {
 		if (!_movieTexts.empty()) {
 			if (_currentFrame == _movieTexts[0]->_startFrame) {
 				_textMan->makeTextSprite(2, (uint8 *)_movieTexts[0]->_text, 600, LETTER_COL);
@@ -306,6 +306,9 @@
 		}
 	}
 
+	if (_vm->quit())
+		_snd->stopHandle(_bgSoundHandle);
+
 	while (!_movieTexts.empty()) {
 		delete _movieTexts.remove_at(_movieTexts.size() - 1);
 	}
@@ -390,8 +393,8 @@
 // Movie player for the new DXA movies
 ///////////////////////////////////////////////////////////////////////////////
 
-MoviePlayerDXA::MoviePlayerDXA(Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system)
-	: MoviePlayer(screen, textMan, snd, system) {
+MoviePlayerDXA::MoviePlayerDXA(SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system)
+	: MoviePlayer(vm, screen, textMan, snd, system) {
 	debug(0, "Creating DXA cutscene player");
 }
 
@@ -492,8 +495,8 @@
 // Movie player for the old MPEG movies
 ///////////////////////////////////////////////////////////////////////////////
 
-MoviePlayerMPEG::MoviePlayerMPEG(Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system)
-	: MoviePlayer(screen, textMan, snd, system) {
+MoviePlayerMPEG::MoviePlayerMPEG(SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system)
+	: MoviePlayer(vm, screen, textMan, snd, system) {
 #ifdef BACKEND_8BIT
 	debug(0, "Creating MPEG cutscene player (8-bit)");
 #else
@@ -625,7 +628,7 @@
 // Factory function for creating the appropriate cutscene player
 ///////////////////////////////////////////////////////////////////////////////
 
-MoviePlayer *makeMoviePlayer(uint32 id, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system) {
+MoviePlayer *makeMoviePlayer(uint32 id, SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system) {
 #if defined(USE_ZLIB) || defined(USE_MPEG2)
 	char filename[20];
 #endif
@@ -634,7 +637,7 @@
 	snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]);
 
 	if (Common::File::exists(filename)) {
-		return new MoviePlayerDXA(screen, textMan, snd, system);
+		return new MoviePlayerDXA(vm, screen, textMan, snd, system);
 	}
 #endif
 
@@ -642,7 +645,7 @@
 	snprintf(filename, sizeof(filename), "%s.mp2", sequenceList[id]);
 
 	if (Common::File::exists(filename)) {
-		return new MoviePlayerMPEG(screen, textMan, snd, system);
+		return new MoviePlayerMPEG(vm, screen, textMan, snd, system);
 	}
 #endif
 

Modified: scummvm/trunk/engines/sword1/animation.h
===================================================================
--- scummvm/trunk/engines/sword1/animation.h	2008-09-27 17:25:40 UTC (rev 34656)
+++ scummvm/trunk/engines/sword1/animation.h	2008-09-27 17:47:22 UTC (rev 34657)
@@ -78,7 +78,7 @@
 
 class MoviePlayer {
 public:
-	MoviePlayer(Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
+	MoviePlayer(SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
 	virtual ~MoviePlayer(void);
 	virtual bool load(uint32 id);
 	void play(void);
@@ -86,6 +86,7 @@
 private:
 	bool checkSkipFrame(void);
 protected:
+	SwordEngine *_vm;
 	Screen *_screen;
 	Text *_textMan;
 	Audio::Mixer *_snd;
@@ -122,7 +123,7 @@
 protected:
 	virtual void setPalette(byte *pal);
 public:
-	MoviePlayerDXA(Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
+	MoviePlayerDXA(SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
 	virtual ~MoviePlayerDXA(void);
 	bool load(uint32 id);
 protected:
@@ -159,7 +160,7 @@
 
 class MoviePlayerMPEG : public MoviePlayer {
 public:
-	MoviePlayerMPEG(Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
+	MoviePlayerMPEG(SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
 	virtual ~MoviePlayerMPEG(void);
 	bool load(uint32 id);
 protected:
@@ -195,7 +196,7 @@
 	FileQueue *_queue;
 };
 
-MoviePlayer *makeMoviePlayer(uint32 id, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
+MoviePlayer *makeMoviePlayer(uint32 id, SwordEngine *vm, Screen *screen, Text *textMan, Audio::Mixer *snd, OSystem *system);
 
 } // End of namespace Sword1
 

Modified: scummvm/trunk/engines/sword1/logic.cpp
===================================================================
--- scummvm/trunk/engines/sword1/logic.cpp	2008-09-27 17:25:40 UTC (rev 34656)
+++ scummvm/trunk/engines/sword1/logic.cpp	2008-09-27 17:47:22 UTC (rev 34657)
@@ -55,9 +55,10 @@
 
 uint32 Logic::_scriptVars[NUM_SCRIPT_VARS];
 
-Logic::Logic(ObjectMan *pObjMan, ResMan *resMan, Screen *pScreen, Mouse *pMouse, Sound *pSound, Music *pMusic, Menu *pMenu, OSystem *system, Audio::Mixer *mixer) {
+Logic::Logic(SwordEngine *vm, ObjectMan *pObjMan, ResMan *resMan, Screen *pScreen, Mouse *pMouse, Sound *pSound, Music *pMusic, Menu *pMenu, OSystem *system, Audio::Mixer *mixer) {
 	g_system->getEventManager()->registerRandomSource(_rnd, "sword1");
 
+	_vm = vm;
 	_objMan = pObjMan;
 	_resMan = resMan;
 	_screen = pScreen;
@@ -963,7 +964,7 @@
 		CreditsPlayer player(_system, _mixer);
 		player.play();
 	} else {
-		MoviePlayer *player = makeMoviePlayer(sequenceId, _screen, _textMan, _mixer, _system);
+		MoviePlayer *player = makeMoviePlayer(sequenceId, _vm, _screen, _textMan, _mixer, _system);
 		if (player) {
 			if (player->load(sequenceId))
 				player->play();

Modified: scummvm/trunk/engines/sword1/logic.h
===================================================================
--- scummvm/trunk/engines/sword1/logic.h	2008-09-27 17:25:40 UTC (rev 34656)
+++ scummvm/trunk/engines/sword1/logic.h	2008-09-27 17:47:22 UTC (rev 34657)
@@ -37,6 +37,7 @@
 #define NON_ZERO_SCRIPT_VARS 95
 #define NUM_SCRIPT_VARS		 1179
 
+class SwordEngine;
 class Text;
 class Sound;
 class EventManager;
@@ -51,7 +52,7 @@
 
 class Logic {
 public:
-	Logic(ObjectMan *pObjMan, ResMan *resMan, Screen *pScreen, Mouse *pMouse, Sound *pSound, Music *pMusic, Menu *pMenu, OSystem *system, Audio::Mixer *mixer);
+	Logic(SwordEngine *vm, ObjectMan *pObjMan, ResMan *resMan, Screen *pScreen, Mouse *pMouse, Sound *pSound, Music *pMusic, Menu *pMenu, OSystem *system, Audio::Mixer *mixer);
 	~Logic(void);
 	void initialize(void);
 	void newScreen(uint32 screen);
@@ -64,6 +65,7 @@
 // public for mouse (menu looking)
 	int cfnPresetScript	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 private:
+	SwordEngine *_vm;
 	ObjectMan *_objMan;
 	OSystem *_system;
 	Audio::Mixer *_mixer;

Modified: scummvm/trunk/engines/sword1/sword1.cpp
===================================================================
--- scummvm/trunk/engines/sword1/sword1.cpp	2008-09-27 17:25:40 UTC (rev 34656)
+++ scummvm/trunk/engines/sword1/sword1.cpp	2008-09-27 17:47:22 UTC (rev 34657)
@@ -303,7 +303,7 @@
 	_music = new Music(_mixer);
 	_sound = new Sound("", _mixer, _resMan);
 	_menu = new Menu(_screen, _mouse);
-	_logic = new Logic(_objectMan, _resMan, _screen, _mouse, _sound, _music, _menu, _system, _mixer);
+	_logic = new Logic(this, _objectMan, _resMan, _screen, _mouse, _sound, _music, _menu, _system, _mixer);
 	_mouse->useLogicAndMenu(_logic, _menu);
 
 	syncSoundSettings();


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