diff options
author | Torbjörn Andersson | 2013-06-28 19:32:59 +0200 |
---|---|---|
committer | Torbjörn Andersson | 2013-06-28 19:32:59 +0200 |
commit | 7c18021c52985aabc4574c633ba6569bbddd648b (patch) | |
tree | e093f783b5b79c396782635060c2d73de1406beb /engines/neverhood/saveload.cpp | |
parent | 0658a88737a205b5edacb662a3161e2acd8b7d51 (diff) | |
download | scummvm-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.cpp | 19 |
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; } |