[Scummvm-cvs-logs] SF.net SVN: scummvm: [22558] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sun May 21 08:42:04 CEST 2006


Revision: 22558
Author:   lordhoto
Date:     2006-05-21 08:41:32 -0700 (Sun, 21 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22558&view=rev

Log Message:
-----------
- reworks quit handling (no _system->quit() anymore)
- fixes some deinitalization problems

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/gui.cpp
    scummvm/trunk/engines/kyra/kyra.cpp
    scummvm/trunk/engines/kyra/kyra.h
    scummvm/trunk/engines/kyra/script.cpp
    scummvm/trunk/engines/kyra/seqplayer.cpp
    scummvm/trunk/engines/kyra/sequences_v1.cpp
    scummvm/trunk/engines/kyra/text.cpp
    scummvm/trunk/engines/kyra/vqa.cpp
Modified: scummvm/trunk/engines/kyra/gui.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/gui.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -529,7 +529,7 @@
 		processAllMenuButtons();
 	}
 
-	while (_displayMenu) {
+	while (_displayMenu && !_quitFlag) {
 		gui_processHighlights(_menu[_toplevelMenu]);
 		processButtonList(_menuButtonList);
 		gui_getInput();
@@ -830,7 +830,7 @@
 	_displaySubMenu = true;
 	_cancelSubMenu = false;
 
-	while (_displaySubMenu) {
+	while (_displaySubMenu && !_quitFlag) {
 		gui_getInput();
 		gui_processHighlights(_menu[2]);
 		processButtonList(_menuButtonList);
@@ -874,7 +874,7 @@
 	_displaySubMenu = true;
 	_cancelSubMenu = false;
 
-	while (_displaySubMenu) {
+	while (_displaySubMenu && !_quitFlag) {
 		gui_getInput();
 		gui_processHighlights(_menu[2]);
 		processButtonList(_menuButtonList);
@@ -958,7 +958,7 @@
 	}
 	gui_redrawTextfield();
 
-	while (_displaySubMenu) {
+	while (_displaySubMenu && !_quitFlag) {
 		gui_getInput();
 		gui_updateSavegameString();
 		gui_processHighlights(_menu[3]);
@@ -1032,7 +1032,7 @@
 	_displaySubMenu = true;
 	_cancelSubMenu = true;
 
-	while (_displaySubMenu) {
+	while (_displaySubMenu && !_quitFlag) {
 		gui_getInput();
 		gui_processHighlights(_menu[1]);
 		processButtonList(_menuButtonList);
@@ -1096,7 +1096,7 @@
 	_displaySubMenu = true;
 	_cancelSubMenu = false;
 
-	while (_displaySubMenu) {
+	while (_displaySubMenu && !_quitFlag) {
 		gui_getInput();
 		gui_processHighlights(_menu[5]);
 		processButtonList(_menuButtonList);

Modified: scummvm/trunk/engines/kyra/kyra.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/kyra.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -92,6 +92,11 @@
 	_characterList = 0;
 	_movFacingTable = 0;
 	memset(_shapes, 0, sizeof(_shapes));
+	memset(_movieObjects, 0, sizeof(_movieObjects));
+	_finalA = _finalB = _finalC = 0;
+	_endSequenceBackUpRect = 0;
+	memset(_panPagesTable, 0, sizeof(_panPagesTable));
+	_npcScriptData = _scriptClickData = 0;
 	_scrollUpButton.process0PtrShape = _scrollUpButton.process1PtrShape = _scrollUpButton.process2PtrShape = 0;
 	_scrollDownButton.process0PtrShape = _scrollDownButton.process1PtrShape = _scrollDownButton.process2PtrShape = 0;
 	memset(_sceneAnimTable, 0, sizeof(_sceneAnimTable));
@@ -99,11 +104,11 @@
 }
 
 KyraEngine_v1::KyraEngine_v1(OSystem *system)
-	:KyraEngine(system) {
+	: KyraEngine(system) {
 }
 
 KyraEngine_v2::KyraEngine_v2(OSystem *system)
-	:KyraEngine(system) {
+	: KyraEngine(system) {
 }
 
 int KyraEngine::init() {
@@ -320,6 +325,21 @@
 }
 
 KyraEngine::~KyraEngine() {
+	for (int i = 0; i < ARRAYSIZE(_movieObjects); ++i) {
+		if (_movieObjects[i])
+			_movieObjects[i]->close();
+		delete _movieObjects[i];
+		_movieObjects[i] = 0;
+	}
+
+	closeFinalWsa();
+	if (_scriptInterpreter) {
+		_scriptInterpreter->unloadScript(_npcScriptData);
+		_scriptInterpreter->unloadScript(_scriptClickData);
+	}
+
+	Common::clearAllSpecialDebugLevels();
+
 	delete _debugger;
 	delete _sprites;
 	delete _animator;
@@ -351,12 +371,12 @@
 	for (int i = 0; i < ARRAYSIZE(_shapes); ++i) {
 		if (_shapes[i] != 0) {
 			free(_shapes[i]);
-			_shapes[i] = 0;
 			for (int i2 = 0; i2 < ARRAYSIZE(_shapes); i2++) {
 				if (_shapes[i2] == _shapes[i] && i2 != i) {
 					_shapes[i2] = 0;
 				}
 			}
+			_shapes[i] = 0;
 		}
 	}
 	for (int i = 0; i < ARRAYSIZE(_sceneAnimTable); ++i) {
@@ -396,13 +416,14 @@
 		setGameFlag(0xFD);
 		setGameFlag(0xEF);
 		seq_intro();
+		if (_quitFlag)
+			return 0;
 		if (_skipIntroFlag && _abortIntroFlag)
 			resetGameFlag(0xEF);
 		startup();
 		resetGameFlag(0xEF);
 		mainLoop();
 	}
-	quitGame();	// FIXME: You shouldn't quit here, just return to the caller!
 	return 0;
 }
 
@@ -413,7 +434,6 @@
 	loadBitmap("_playfld.cps", 0, 0, 0);
 	_screen->updateScreen();
 	waitForEvent();
-	_system->quit();
 	return 0;
 }
 
@@ -549,23 +569,9 @@
 }
 
 void KyraEngine::quitGame() {
-	// FIXME: The code of this method should probably be moved to the destructor.
 	debugC(9, kDebugLevelMain, "KyraEngine::quitGame()");
-
-	for (int i = 0; i < ARRAYSIZE(_movieObjects); ++i) {
-		_movieObjects[i]->close();
-		delete _movieObjects[i];
-		_movieObjects[i] = 0;
-	}
-
-	closeFinalWsa();
-	_scriptInterpreter->unloadScript(_npcScriptData);
-	_scriptInterpreter->unloadScript(_scriptClickData);
-
-	Common::clearAllSpecialDebugLevels();
-
-	// FIXME: Do not use OSystem::quit() unless you have to !
-	_system->quit();
+	_quitFlag = true;
+	// Nothing to do here
 }
 
 void KyraEngine::delayUntil(uint32 timestamp, bool updateTimers, bool update, bool isMainLoop) {

Modified: scummvm/trunk/engines/kyra/kyra.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra.h	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/kyra.h	2006-05-21 15:41:32 UTC (rev 22558)
@@ -271,6 +271,8 @@
 	Character *currentCharacter() { return _currentCharacter; }
 	Character *characterList() { return _characterList; }
 	uint16 brandonStatus() { return _brandonStatusBit; }
+	
+	bool quit() const { return _quitFlag; }
 
 	int _paletteChanged;
 	Common::RandomSource _rnd;

Modified: scummvm/trunk/engines/kyra/script.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/script.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -157,6 +157,9 @@
 }
 
 void ScriptHelper::unloadScript(ScriptData *data) {
+	if (!data)
+		return;
+
 	if (data->mustBeFreed) {
 		delete [] data->text;
 		delete [] data->ordr;
@@ -188,7 +191,7 @@
 }
 
 bool ScriptHelper::validScript(ScriptState *script) {
-	if (!script->ip || !script->dataPtr)
+	if (!script->ip || !script->dataPtr || _vm->quit())
 		return false;
 	return true;
 }

Modified: scummvm/trunk/engines/kyra/seqplayer.cpp
===================================================================
--- scummvm/trunk/engines/kyra/seqplayer.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/seqplayer.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -595,7 +595,7 @@
 	memset(_seqMovies, 0, sizeof(_seqMovies));
 
 	_screen->_curPage = 0;
-	while (!_seqQuitFlag) {
+	while (!_seqQuitFlag && !_vm->quit()) {
 		if (skipSeq && _vm->seq_skipSequence()) {
 			while (1) {
 				uint8 code = *_seqData;

Modified: scummvm/trunk/engines/kyra/sequences_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_v1.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/sequences_v1.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -1131,6 +1131,7 @@
 				break;
 			case OSystem::EVENT_QUIT:
 				quitGame();
+				finished = true;
 				break;
 			default:
 				break;

Modified: scummvm/trunk/engines/kyra/text.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/text.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -114,6 +114,7 @@
 				break;
 			case OSystem::EVENT_QUIT:
 				quitGame();
+				runLoop = false;
 				break;
 			case OSystem::EVENT_LBUTTONDOWN:
 				runLoop = false;

Modified: scummvm/trunk/engines/kyra/vqa.cpp
===================================================================
--- scummvm/trunk/engines/kyra/vqa.cpp	2006-05-21 15:20:12 UTC (rev 22557)
+++ scummvm/trunk/engines/kyra/vqa.cpp	2006-05-21 15:41:32 UTC (rev 22558)
@@ -703,7 +703,7 @@
 					break;
 				case OSystem::EVENT_QUIT:
 					_vm->quitGame();
-					break;
+					return;
 				default:
 					break;
 				}


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