[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