aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/saveload.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2013-06-28 19:32:59 +0200
committerTorbjörn Andersson2013-06-28 19:32:59 +0200
commit7c18021c52985aabc4574c633ba6569bbddd648b (patch)
treee093f783b5b79c396782635060c2d73de1406beb /engines/neverhood/saveload.cpp
parent0658a88737a205b5edacb662a3161e2acd8b7d51 (diff)
downloadscummvm-rg350-7c18021c52985aabc4574c633ba6569bbddd648b.tar.gz
scummvm-rg350-7c18021c52985aabc4574c633ba6569bbddd648b.tar.bz2
scummvm-rg350-7c18021c52985aabc4574c633ba6569bbddd648b.zip
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.
Diffstat (limited to 'engines/neverhood/saveload.cpp')
-rw-r--r--engines/neverhood/saveload.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/engines/neverhood/saveload.cpp b/engines/neverhood/saveload.cpp
index 578d9858ff..ae93a0cea4 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;
}