[Scummvm-cvs-logs] scummvm master -> 7c18021c52985aabc4574c633ba6569bbddd648b

eriktorbjorn eriktorbjorn at telia.com
Fri Jun 28 19:34:32 CEST 2013


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7c18021c52 NEVERHOOD: Handle invalid save_slot more gracefully on startup


Commit: 7c18021c52985aabc4574c633ba6569bbddd648b
    https://github.com/scummvm/scummvm/commit/7c18021c52985aabc4574c633ba6569bbddd648b
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2013-06-28T10:32:59-07:00

Commit Message:
NEVERHOOD: Handle invalid save_slot more gracefully on startup

If the specificed savegame doesn't exist, start the game from the
beginning. Before, it would just hang. The error handling is still
quite primitive, though.

Changed paths:
    engines/neverhood/neverhood.cpp
    engines/neverhood/neverhood.h
    engines/neverhood/saveload.cpp



diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 3769117..e7c9f32 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -123,9 +123,10 @@ Common::Error NeverhoodEngine::run() {
 		(*navigationList)[5].middleFlag = 1;
 	}
 	
-	if (ConfMan.hasKey("save_slot"))
-		loadGameState(ConfMan.getInt("save_slot"));
-	else
+	if (ConfMan.hasKey("save_slot")) {
+		if (loadGameState(ConfMan.getInt("save_slot")).getCode() != Common::kNoError)
+			_gameModule->startup();
+	} else
 		_gameModule->startup();
 	
 	mainLoop();
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 39bc9ce..773e80d 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -122,8 +122,8 @@ public:
 	Common::Error loadGameState(int slot);
 	Common::Error saveGameState(int slot, const Common::String &description);
 	Common::Error removeGameState(int slot);
-	void savegame(const char *filename, const char *description);
-	void loadgame(const char *filename);
+	bool savegame(const char *filename, const char *description);
+	bool loadgame(const char *filename);
 	const char *getSavegameFilename(int num);
 	static Common::String getSavegameFilename(const Common::String &target, int num);
 	static kReadSaveHeaderError readSaveHeader(Common::SeekableReadStream *in, bool loadThumbnail, SaveHeader &header);
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
index 578d985..ae93a0c 100644
--- a/engines/neverhood/saveload.cpp
+++ b/engines/neverhood/saveload.cpp
@@ -61,12 +61,12 @@ NeverhoodEngine::kReadSaveHeaderError NeverhoodEngine::readSaveHeader(Common::Se
 	return ((in->eos() || in->err()) ? kRSHEIoError : kRSHENoError);
 }
 
-void NeverhoodEngine::savegame(const char *filename, const char *description) {
+bool NeverhoodEngine::savegame(const char *filename, const char *description) {
 
 	Common::OutSaveFile *out;
 	if (!(out = g_system->getSavefileManager()->openForSaving(filename))) {
 		warning("Can't create file '%s', game not saved", filename);
-		return;
+		return false;
 	}
 
 	TimeDate curTime;
@@ -99,13 +99,14 @@ void NeverhoodEngine::savegame(const char *filename, const char *description) {
 	
 	out->finalize();
 	delete out;
+	return true;
 }
 
-void NeverhoodEngine::loadgame(const char *filename) {
+bool NeverhoodEngine::loadgame(const char *filename) {
 	Common::InSaveFile *in;
 	if (!(in = g_system->getSavefileManager()->openForLoading(filename))) {
 		warning("Can't open file '%s', game not loaded", filename);
-		return;
+		return false;
 	}
 
 	SaveHeader header;
@@ -115,7 +116,7 @@ void NeverhoodEngine::loadgame(const char *filename) {
 	if (errorCode != kRSHENoError) {
 		warning("Error loading savegame '%s'", filename);
 		delete in;
-		return;
+		return false;
 	}
 	
 	g_engine->setTotalPlayTime(header.playTime * 1000);
@@ -128,18 +129,20 @@ void NeverhoodEngine::loadgame(const char *filename) {
 	_gameModule->requestRestoreGame();
 
 	delete in;
-
+	return true;
 }
 
 Common::Error NeverhoodEngine::loadGameState(int slot) {
 	const char *fileName = getSavegameFilename(slot);
-	loadgame(fileName);
+	if (!loadgame(fileName))
+		return Common::kReadingFailed;
 	return Common::kNoError;
 }
 
 Common::Error NeverhoodEngine::saveGameState(int slot, const Common::String &description) {
 	const char *fileName = getSavegameFilename(slot);
-	savegame(fileName, description.c_str());
+	if (!savegame(fileName, description.c_str()))
+		return Common::kWritingFailed;
 	return Common::kNoError;
 }
 






More information about the Scummvm-git-logs mailing list