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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sun Nov 9 14:00:41 CET 2008


Revision: 34952
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34952&view=rev
Author:   lordhoto
Date:     2008-11-09 13:00:40 +0000 (Sun, 09 Nov 2008)

Log Message:
-----------
- Implemented Engine::saveGameState for KYRA
- Changed internal save/load API to use slots instead of filename strings
- Changed internal save/load API to use Common::Error

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/detection.cpp
    scummvm/trunk/engines/kyra/gui_hof.cpp
    scummvm/trunk/engines/kyra/gui_lok.cpp
    scummvm/trunk/engines/kyra/gui_mr.cpp
    scummvm/trunk/engines/kyra/gui_v2.cpp
    scummvm/trunk/engines/kyra/kyra_hof.cpp
    scummvm/trunk/engines/kyra/kyra_hof.h
    scummvm/trunk/engines/kyra/kyra_lok.cpp
    scummvm/trunk/engines/kyra/kyra_lok.h
    scummvm/trunk/engines/kyra/kyra_mr.cpp
    scummvm/trunk/engines/kyra/kyra_mr.h
    scummvm/trunk/engines/kyra/kyra_v1.h
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v2.h
    scummvm/trunk/engines/kyra/lol.h
    scummvm/trunk/engines/kyra/saveload.cpp
    scummvm/trunk/engines/kyra/saveload_hof.cpp
    scummvm/trunk/engines/kyra/saveload_lok.cpp
    scummvm/trunk/engines/kyra/saveload_mr.cpp
    scummvm/trunk/engines/kyra/script_mr.cpp
    scummvm/trunk/engines/kyra/timer_mr.cpp

Modified: scummvm/trunk/engines/kyra/detection.cpp
===================================================================
--- scummvm/trunk/engines/kyra/detection.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/detection.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -1083,7 +1083,8 @@
 bool Kyra::KyraEngine_v1::hasFeature(EngineFeature f) const {
 	return
 		(f == kSupportsRTL) ||
-		(f == kSupportsLoadingDuringRuntime);
+		(f == kSupportsLoadingDuringRuntime) ||
+		(f == kSupportsSavingDuringRuntime);
 }
 
 bool KyraMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const {

Modified: scummvm/trunk/engines/kyra/gui_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_hof.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/gui_hof.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -785,8 +785,8 @@
 
 	if (!_loadedSave && _reloadTemporarySave) {
 		_vm->_unkSceneScreenFlag1 = true;
-		_vm->loadGame(_vm->getSavegameFilename(999));
-		_vm->_saveFileMan->removeSavefile(_vm->getSavegameFilename(999));
+		_vm->loadGameState(999);
+		//_vm->_saveFileMan->removeSavefile(_vm->getSavegameFilename(999));
 		_vm->_unkSceneScreenFlag1 = false;
 	}
 
@@ -1004,7 +1004,14 @@
 
 	if (_vm->_lang != lang) {
 		_reloadTemporarySave = true;
-		_vm->saveGame(_vm->getSavegameFilename(999), "Temporary Kyrandia 2 Savegame", 0);
+	
+		Graphics::Surface thumb;
+		createScreenThumbnail(thumb);
+		_vm->saveGameState(999, "Autosave", &thumb);
+		thumb.free();
+
+		_vm->_lastAutosave = _vm->_system->getMillis();
+
 		_vm->loadCCodeBuffer("C_CODE.XXX");
 		if (_vm->_flags.isTalkie)
 			_vm->loadOptionsBuffer("OPTIONS.XXX");
@@ -1188,7 +1195,7 @@
 	} else if (_vm->_gameToLoad >= 0) {
 		restorePage1(_vm->_screenBuffer);
 		restorePalette();
-		_vm->loadGame(_vm->getSavegameFilename(_vm->_gameToLoad));
+		_vm->loadGameState(_vm->_gameToLoad);
 		if (_vm->_gameToLoad == 0) {
 			_restartGame = true;
 			for (int i = 0; i < 23; ++i)

Modified: scummvm/trunk/engines/kyra/gui_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lok.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/gui_lok.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -658,7 +658,7 @@
 	} else {
 		restorePalette();
 		if (_vm->_gameToLoad != -1)
-			_vm->loadGame(_vm->getSavegameFilename(_vm->_gameToLoad));
+			_vm->loadGameState(_vm->_gameToLoad);
 		_displayMenu = false;
 		_menuRestoreScreen = false;
 	}
@@ -749,7 +749,7 @@
 		if (_vm->_gameToLoad > 0) {
 			Graphics::Surface thumb;
 			createScreenThumbnail(thumb);
-			_vm->saveGame(_vm->getSavegameFilename(_vm->_gameToLoad), _savegameName, &thumb);
+			_vm->saveGameState(_vm->_gameToLoad, _savegameName, &thumb);
 			thumb.free();
 		}
 	}

Modified: scummvm/trunk/engines/kyra/gui_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_mr.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/gui_mr.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -1366,8 +1366,8 @@
 
 	if (!_loadedSave && _reloadTemporarySave) {
 		_vm->_unkSceneScreenFlag1 = true;
-		_vm->loadGame(_vm->getSavegameFilename(999));
-		_vm->_saveFileMan->removeSavefile(_vm->getSavegameFilename(999));
+		_vm->loadGameState(999);
+		//_vm->_saveFileMan->removeSavefile(_vm->getSavegameFilename(999));
 		_vm->_unkSceneScreenFlag1 = false;
 	}
 
@@ -1408,7 +1408,7 @@
 		restorePage1(_vm->_screenBuffer);
 		restorePalette();
 		_vm->_menuDirectlyToLoad = false;
-		_vm->loadGame(_vm->getSavegameFilename(_vm->_gameToLoad));
+		_vm->loadGameState(_vm->_gameToLoad);
 		if (_vm->_gameToLoad == 0) {
 			_restartGame = true;
 			_vm->runStartupScript(1, 1);
@@ -1425,7 +1425,7 @@
 
 	_vm->_gameToLoad = 999;
 	restorePage1(_vm->_screenBuffer);
-	_vm->loadGame(_vm->getSavegameFilename(_vm->_gameToLoad));
+	_vm->loadGameState(_vm->_gameToLoad);
 	_displayMenu = false;
 	_loadedSave = true;
 	return 0;
@@ -1458,7 +1458,14 @@
 
 	if (_vm->_lang != lang) {
 		_reloadTemporarySave = true;
-		_vm->saveGame(_vm->getSavegameFilename(999), "Temporary Kyrandia 3 Savegame", 0);
+
+		Graphics::Surface thumb;
+		createScreenThumbnail(thumb);
+		_vm->saveGameState(999, "Autosave", &thumb);
+		thumb.free();
+
+		_vm->_lastAutosave = _vm->_system->getMillis();
+
 		if (!_vm->loadLanguageFile("ITEMS.", _vm->_itemFile))
 			error("Couldn't load ITEMS");
 		if (!_vm->loadLanguageFile("SCORE.", _vm->_scoreFile))

Modified: scummvm/trunk/engines/kyra/gui_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_v2.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/gui_v2.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -622,7 +622,7 @@
 
 	Graphics::Surface thumb;
 	createScreenThumbnail(thumb);
-	_vm->saveGame(_vm->getSavegameFilename(_saveSlot), _saveDescription, &thumb);
+	_vm->saveGameState(_saveSlot, _saveDescription, &thumb);
 	thumb.free();
 
 	_displayMenu = false;

Modified: scummvm/trunk/engines/kyra/kyra_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_hof.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_hof.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -437,9 +437,9 @@
 	if (_gameToLoad == -1) {
 		snd_playWanderScoreViaMap(52, 1);
 		enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1);
-		saveGame(getSavegameFilename(0), "New Game", 0);
+		saveGameState(0, "New Game", 0);
 	} else {
-		loadGame(getSavegameFilename(_gameToLoad));
+		loadGameState(_gameToLoad);
 	}
 
 	_screen->showMouse();

Modified: scummvm/trunk/engines/kyra/kyra_hof.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_hof.h	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_hof.h	2008-11-09 13:00:40 UTC (rev 34952)
@@ -907,8 +907,8 @@
 	int _dbgPass;
 
 	// save/load specific
-	void saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumbnail);
-	void loadGame(const char *fileName);
+	Common::Error saveGameState(int slot, const char *saveName, const Graphics::Surface *thumbnail);
+	Common::Error loadGameState(int slot);
 };
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/kyra_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_lok.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -391,10 +391,10 @@
 			_gui->buttonMenuCallback(0);
 			_menuDirectlyToLoad = false;
 		} else
-			saveGame(getSavegameFilename(0), "New game", 0);
+			saveGameState(0, "New game", 0);
 	} else {
 		_screen->setFont(Screen::FID_8_FNT);
-		loadGame(getSavegameFilename(_gameToLoad));
+		loadGameState(_gameToLoad);
 		_gameToLoad = -1;
 	}
 }
@@ -473,14 +473,14 @@
 			case Common::EVENT_KEYDOWN:
 				if (event.kbd.keycode >= '1' && event.kbd.keycode <= '9' &&
 						(event.kbd.flags == Common::KBD_CTRL || event.kbd.flags == Common::KBD_ALT) && isMainLoop) {
-					const char *saveLoadSlot = getSavegameFilename(9 - (event.kbd.keycode - '0') + 990);
+					int saveLoadSlot = 9 - (event.kbd.keycode - '0') + 990;
 
 					if (event.kbd.flags == Common::KBD_CTRL)
-						loadGame(saveLoadSlot);
+						loadGameState(saveLoadSlot);
 					else {
 						char savegameName[14];
 						sprintf(savegameName, "Quicksave %d", event.kbd.keycode - '0');
-						saveGame(saveLoadSlot, savegameName, 0);
+						saveGameState(saveLoadSlot, savegameName, 0);
 					}
 				} else if (event.kbd.flags == Common::KBD_CTRL) {
 					if (event.kbd.keycode == 'd')

Modified: scummvm/trunk/engines/kyra/kyra_lok.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.h	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_lok.h	2008-11-09 13:00:40 UTC (rev 34952)
@@ -214,9 +214,8 @@
 protected:
 	int32 _speechPlayTime;
 
-	void saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumbnail);
-	void loadGame(const char *fileName);
-
+	Common::Error saveGameState(int slot, const char *saveName, const Graphics::Surface *thumbnail);
+	Common::Error loadGameState(int slot);
 protected:
 	// input
 	void processInput();

Modified: scummvm/trunk/engines/kyra/kyra_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_mr.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_mr.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -684,13 +684,13 @@
 	assert(_invWsa);
 	_invWsa->open("MOODOMTR.WSA", 1, 0);
 	_invWsaFrame = 6;
-	saveGame(getSavegameFilename(0), "New Game", 0);
+	saveGameState(0, "New Game", 0);
 	_soundDigital->beginFadeOut(_musicSoundChannel, 60);
 	delayWithTicks(60);
 	if (_gameToLoad == -1)
 		enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1);
 	else
-		loadGame(getSavegameFilename(_gameToLoad));
+		loadGameState(_gameToLoad);
 
 	if (_menuDirectlyToLoad)
 		(*_mainButtonData[0].buttonCallback)(&_mainButtonData[0]);

Modified: scummvm/trunk/engines/kyra/kyra_mr.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_mr.h	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_mr.h	2008-11-09 13:00:40 UTC (rev 34952)
@@ -583,8 +583,8 @@
 	int albumClose(Button *caller);
 
 	// save/load
-	void saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumbnail);
-	void loadGame(const char *fileName);
+	Common::Error saveGameState(int slot, const char *saveName, const Graphics::Surface *thumbnail);
+	Common::Error loadGameState(int slot);
 
 	// opcodes
 	int o3_getMalcolmShapes(EMCState *script);

Modified: scummvm/trunk/engines/kyra/kyra_v1.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v1.h	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_v1.h	2008-11-09 13:00:40 UTC (rev 34952)
@@ -306,9 +306,9 @@
 
 	static kReadSaveHeaderError readSaveHeader(Common::SeekableReadStream *file, bool loadThumbnail, SaveHeader &header);
 
-	Common::Error loadGameState(int slot);
-	virtual void loadGame(const char *fileName) = 0;
-	virtual void saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumbnail) = 0;
+	virtual Common::Error loadGameState(int slot) = 0;
+	Common::Error saveGameState(int slot, const char *saveName) { return saveGameState(slot, saveName, 0); }
+	virtual Common::Error saveGameState(int slot, const char *saveName, const Graphics::Surface *thumbnail) = 0;
 
 	Common::SeekableReadStream *openSaveForReading(const char *filename, SaveHeader &header);
 	Common::WriteStream *openSaveForWriting(const char *filename, const char *saveName, const Graphics::Surface *thumbnail) const;

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -182,16 +182,16 @@
 		case Common::EVENT_KEYDOWN:
 			if (event.kbd.keycode >= '1' && event.kbd.keycode <= '9' &&
 					(event.kbd.flags == Common::KBD_CTRL || event.kbd.flags == Common::KBD_ALT) && mainLoop) {
-				const char *saveLoadSlot = getSavegameFilename(9 - (event.kbd.keycode - '0') + 990);
+				int saveLoadSlot = 9 - (event.kbd.keycode - '0') + 990;
 
 				if (event.kbd.flags == Common::KBD_CTRL) {
-					loadGame(saveLoadSlot);
+					loadGameState(saveLoadSlot);
 					_eventList.clear();
 					breakLoop = true;
 				} else {
 					char savegameName[14];
 					sprintf(savegameName, "Quicksave %d", event.kbd.keycode - '0');
-					saveGame(saveLoadSlot, savegameName, 0);
+					saveGameState(saveLoadSlot, savegameName, 0);
 				}
 			} else if (event.kbd.flags == Common::KBD_CTRL) {
 				if (event.kbd.keycode == 'd')

Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/kyra_v2.h	2008-11-09 13:00:40 UTC (rev 34952)
@@ -417,10 +417,6 @@
 	int o2_setTimerCountdown(EMCState *script);
 	int o2_setVocHigh(EMCState *script);
 	int o2_getVocHigh(EMCState *script);
-
-	// save/load specific
-	virtual void saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumbnail) = 0;
-	virtual void loadGame(const char *fileName) = 0;
 };
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/lol.h	2008-11-09 13:00:40 UTC (rev 34952)
@@ -149,8 +149,8 @@
 	bool lineIsPassable(int, int) { return false; }
 
 	// save
-	void loadGame(const char *fileName) {}
-	void saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumbnail) {}
+	Common::Error loadGameState(int slot) { return Common::kNoError; }
+	Common::Error saveGameState(int slot, const char *saveName, const Graphics::Surface *thumbnail) { return Common::kNoError; }
 };
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/saveload.cpp
===================================================================
--- scummvm/trunk/engines/kyra/saveload.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/saveload.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -244,19 +244,9 @@
 	return false;
 }
 
-Common::Error KyraEngine_v1::loadGameState(int slot) {
-	if (!_isSaveAllowed)
-		return Common::kUnknownError;	// FIXME
-	
-	const char *filename = getSavegameFilename(slot);
-	loadGame(filename);
-
-	return Common::kNoError;
-}
-
 void KyraEngine_v1::checkAutosave() {
 	if (shouldPerformAutoSave(_lastAutosave)) {
-		saveGame(getSavegameFilename(999), "Autosave", 0);
+		saveGameState(999, "Autosave", 0);
 		_lastAutosave = _system->getMillis();
 	}
 }

Modified: scummvm/trunk/engines/kyra/saveload_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/saveload_hof.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/saveload_hof.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -35,14 +35,14 @@
 
 namespace Kyra {
 
-void KyraEngine_HoF::saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumb) {
-	debugC(9, kDebugLevelMain, "KyraEngine_LoK::saveGame('%s', '%s', %p)", fileName, saveName, (const void *)thumb);
+Common::Error KyraEngine_HoF::saveGameState(int slot, const char *saveName, const Graphics::Surface *thumb) {
+	debugC(9, kDebugLevelMain, "KyraEngine_HoF::saveGame(%d, '%s', %p)", slot, saveName, (const void *)thumb);
 
+	const char *fileName = getSavegameFilename(slot);
+
 	Common::OutSaveFile *out = openSaveForWriting(fileName, saveName, thumb);
-	if (!out) {
-		warning("Can't open file '%s', game not loadable", fileName);
-		return;
-	}
+	if (!out)
+		return _saveFileMan->getError();
 
 	_timer->saveDataToFile(*out);
 
@@ -118,23 +118,28 @@
 	out->finalize();
 
 	// check for errors
-	if (out->err())
+	if (out->err()) {
 		warning("Can't write file '%s'. (Disk full?)", fileName);
-	else
+		return Common::kUnknownError;
+	} else {
 		debugC(1, kDebugLevelMain, "Saved game '%s.'", saveName);
+	}
 
 	delete out;
+	return Common::kNoError;
 }
 
-void KyraEngine_HoF::loadGame(const char *fileName) {
-	debugC(9, kDebugLevelMain, "KyraEngine_HoF::loadGame('%s')", fileName);
+Common::Error KyraEngine_HoF::loadGameState(int slot) {
+	debugC(9, kDebugLevelMain, "KyraEngine_HoF::loadGame(%d)", slot);
 
+	const char *fileName = getSavegameFilename(slot);
+
 	SaveHeader header;
 	Common::InSaveFile *saveFile = openSaveForReading(fileName, header);
 	if (!saveFile) {
 		showMessageFromCCode(0x35, 0x84, 0);
 		snd_playSoundEffect(0x0D);
-		return;
+		return Common::kUnknownError;
 	}
 
 	if (header.originalSave)
@@ -279,10 +284,12 @@
 	_sceneExit3 = in.readUint16();
 	_sceneExit4 = in.readUint16();
 
-	if (saveFile->err() || saveFile->eos())
-		error("Load failed ('%s', '%s').", fileName, header.description.c_str());
-	else
+	if (saveFile->err() || saveFile->eos()) {
+		warning("Load failed ('%s', '%s').", fileName, header.description.c_str());
+		return Common::kUnknownError;
+	} else {
 		debugC(1, kDebugLevelMain, "Loaded savegame '%s.'", header.description.c_str());
+	}
 
 	if (loadedZTable != _characterShapeFile)
 		loadCharacterShapes(_characterShapeFile);
@@ -325,6 +332,8 @@
 	// We didn't explicitly set the walk speed, but it's saved as part of
 	// the _timers array, so we need to re-sync it with _configWalkspeed.
 	setWalkspeed(_configWalkspeed);
+
+	return Common::kNoError;
 }
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/saveload_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/saveload_lok.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/saveload_lok.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -35,20 +35,21 @@
 #include "kyra/timer.h"
 
 namespace Kyra {
-void KyraEngine_LoK::loadGame(const char *fileName) {
-	debugC(9, kDebugLevelMain, "KyraEngine_LoK::loadGame('%s')", fileName);
 
+Common::Error KyraEngine_LoK::loadGameState(int slot) {
+	debugC(9, kDebugLevelMain, "KyraEngine_LoK::loadGame(%d)", slot);
+
+	const char *fileName = getSavegameFilename(slot);
+
 	SaveHeader header;
 	Common::InSaveFile *in = openSaveForReading(fileName, header);
-	if (!in) {
-		warning("Can't open file '%s', game not loadable", fileName);
-		return;
-	}
+	if (!in)
+		return _saveFileMan->getError();
 
 	if (header.originalSave) {
 		// no support for original savefile in Kyrandia 1 (yet)
 		delete in;
-		return;
+		return Common::kUnknownError;
 	}
 
 	snd_playSoundEffect(0x0A);
@@ -206,27 +207,32 @@
 	_mousePressFlag = false;
 	setMousePos(brandonX, brandonY);
 	
-	if (in->err() || in->eos())
-		error("Load failed ('%s', '%s').", fileName, header.description.c_str());
-	else
+	if (in->err() || in->eos()) {
+		warning("Load failed ('%s', '%s').", fileName, header.description.c_str());
+		return Common::kUnknownError;
+	} else {
 		debugC(1, kDebugLevelMain, "Loaded savegame '%s.'", header.description.c_str());
+	}
 
 	// We didn't explicitly set the walk speed, but it's saved as part of
 	// the _timers array, so we need to re-sync it with _configWalkspeed.
 	setWalkspeed(_configWalkspeed);
 
 	delete in;
+	return Common::kNoError;
 }
 
-void KyraEngine_LoK::saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumb) {
-	debugC(9, kDebugLevelMain, "KyraEngine_LoK::saveGame('%s', '%s', %p)", fileName, saveName, (const void *)thumb);
+Common::Error KyraEngine_LoK::saveGameState(int slot, const char *saveName, const Graphics::Surface *thumb) {
+	debugC(9, kDebugLevelMain, "KyraEngine_LoK::saveGame(%d, '%s', %p)", slot, saveName, (const void *)thumb);
+
+	const char *fileName = getSavegameFilename(slot);
 	
 	if (shouldQuit())
-		return;
+		return Common::kNoError;
 
 	Common::OutSaveFile *out = openSaveForWriting(fileName, saveName, thumb);
 	if (!out)
-		return;
+		return _saveFileMan->getError();
 	
 	for (int i = 0; i < 11; i++) {
 		out->writeUint16BE(_characterList[i].sceneId);
@@ -289,12 +295,15 @@
 	out->finalize();
 
 	// check for errors
-	if (out->err())
+	if (out->err()) {
 		warning("Can't write file '%s'. (Disk full?)", fileName);
-	else
+		return Common::kUnknownError;
+	} else {
 		debugC(1, kDebugLevelMain, "Saved game '%s.'", saveName);
+	}
 
 	delete out;
+	return Common::kNoError;
 }
 } // end of namespace Kyra
 

Modified: scummvm/trunk/engines/kyra/saveload_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/saveload_mr.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/saveload_mr.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -32,14 +32,14 @@
 
 namespace Kyra {
 
-void KyraEngine_MR::saveGame(const char *fileName, const char *saveName, const Graphics::Surface *thumb) {
-	debugC(9, kDebugLevelMain, "KyraEngine_LoK::saveGame('%s', '%s', %p)", fileName, saveName, (const void *)thumb);
+Common::Error KyraEngine_MR::saveGameState(int slot, const char *saveName, const Graphics::Surface *thumb) {
+	debugC(9, kDebugLevelMain, "KyraEngine_MR::saveGame(%d, '%s', %p)", slot, saveName, (const void *)thumb);
 
+	const char *fileName = getSavegameFilename(slot);
+
 	Common::OutSaveFile *out = openSaveForWriting(fileName, saveName, thumb);
-	if (!out) {
-		warning("Can't open file '%s', game not loadable", fileName);
-		return;
-	}
+	if (!out)
+		return _saveFileMan->getError();
 
 	_timer->saveDataToFile(*out);
 
@@ -112,23 +112,28 @@
 	out->finalize();
 
 	// check for errors
-	if (out->err())
+	if (out->err()) {
 		warning("Can't write file '%s'. (Disk full?)", fileName);
-	else
+		return Common::kUnknownError;
+	} else {
 		debugC(1, kDebugLevelMain, "Saved game '%s.'", saveName);
+	}
 
 	delete out;
+	return Common::kNoError;
 }
 
-void KyraEngine_MR::loadGame(const char *fileName) {
-	debugC(9, kDebugLevelMain, "KyraEngine_MR::loadGame('%s')", fileName);
+Common::Error KyraEngine_MR::loadGameState(int slot) {
+	debugC(9, kDebugLevelMain, "KyraEngine_MR::loadGame(%d)", slot);
 
+	const char *fileName = getSavegameFilename(slot);
+
 	SaveHeader header;
 	Common::InSaveFile *saveFile = openSaveForReading(fileName, header);
 	if (!saveFile) {
 		showMessageFromCCode(17, 0xB3, 0);
 		snd_playSoundEffect(0x0D, 0xC8);
-		return;
+		return Common::kUnknownError;
 	}
 
 	if (header.originalSave)
@@ -283,10 +288,12 @@
 	_sceneExit3 = in.readUint16();
 	_sceneExit4 = in.readUint16();
 
-	if (saveFile->err() || saveFile->eos())
-		error("Load failed ('%s', '%s').", fileName, header.description.c_str());
-	else
+	if (saveFile->err() || saveFile->eos()) {
+		warning("Load failed ('%s', '%s').", fileName, header.description.c_str());
+		return Common::kUnknownError;
+	} else {
 		debugC(1, kDebugLevelMain, "Loaded savegame '%s.'", header.description.c_str());
+	}
 
 	_loadingState = true;
 	updateCharacterAnim(0);
@@ -321,6 +328,8 @@
 	// We didn't explicitly set the walk speed, but it's saved as part of
 	// the _timers array, so we need to re-sync it with _configWalkspeed.
 	setWalkspeed(_configWalkspeed);
+
+	return Common::kNoError;
 }
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/script_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_mr.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/script_mr.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -293,7 +293,7 @@
 
 int KyraEngine_MR::o3_makeSecondChanceSave(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_makeSecondChanceSave(%p) ()", (const void *)script);
-	saveGame(getSavegameFilename(999), "Autosave", 0);
+	saveGameState(999, "Autosave", 0);
 	return 0;
 }
 

Modified: scummvm/trunk/engines/kyra/timer_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/timer_mr.cpp	2008-11-09 12:38:30 UTC (rev 34951)
+++ scummvm/trunk/engines/kyra/timer_mr.cpp	2008-11-09 13:00:40 UTC (rev 34952)
@@ -65,7 +65,7 @@
 void KyraEngine_MR::timerFleaDeath(int arg) {
 	debugC(9, kDebugLevelMain | kDebugLevelTimer, "KyraEngine_MR::timerFleaDeath(%d)", arg);
 	_timer->setCountdown(4, 5400);
-	saveGame(getSavegameFilename(999), "Autosave", 0);
+	saveGameState(999, "Autosave", 0);
 	_screen->hideMouse();
 	_timer->disable(4);
 	runAnimationScript("FLEADTH1.EMC", 0, 0, 1, 1);


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