diff options
author | uruk | 2014-08-03 14:46:11 +0200 |
---|---|---|
committer | uruk | 2014-08-03 14:46:11 +0200 |
commit | 60a77ae6d76195180707dfe67a3d34eb95b8ca74 (patch) | |
tree | 82f10e0bc1ba1121009e3eef91f82e7f7cb6ba39 | |
parent | 61083e5caba5d28689aaec8fd1f912df37eb0cf0 (diff) | |
download | scummvm-rg350-60a77ae6d76195180707dfe67a3d34eb95b8ca74.tar.gz scummvm-rg350-60a77ae6d76195180707dfe67a3d34eb95b8ca74.tar.bz2 scummvm-rg350-60a77ae6d76195180707dfe67a3d34eb95b8ca74.zip |
CGE2: Add autosave functionality.
-rw-r--r-- | engines/cge2/cge2.h | 1 | ||||
-rw-r--r-- | engines/cge2/cge2_main.cpp | 2 | ||||
-rw-r--r-- | engines/cge2/saveload.cpp | 18 | ||||
-rw-r--r-- | engines/cge2/snail.cpp | 6 |
4 files changed, 19 insertions, 8 deletions
diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h index 4043f15b16..fc097b9416 100644 --- a/engines/cge2/cge2.h +++ b/engines/cge2/cge2.h @@ -142,6 +142,7 @@ private: void writeSavegameHeader(Common::OutSaveFile *out, SavegameHeader &header); void syncGame(Common::SeekableReadStream *readStream, Common::WriteStream *writeStream); void syncHeader(Common::Serializer &s); + void saveGame(int slotNumber, const Common::String &desc); bool loadGame(int slotNumber); void resetGame(); void syncSpeechSettings(); diff --git a/engines/cge2/cge2_main.cpp b/engines/cge2/cge2_main.cpp index a7cbe01c74..e945fbfdec 100644 --- a/engines/cge2/cge2_main.cpp +++ b/engines/cge2/cge2_main.cpp @@ -645,8 +645,6 @@ void CGE2Engine::runGame() { _commandHandler->addCommand(kCmdClear, -1, 0, nullptr); _commandHandlerTurbo->addCommand(kCmdClear, -1, 0, nullptr); _mouse->off(); - - _vga->sunset(); } void CGE2Engine::loadUser() { diff --git a/engines/cge2/saveload.cpp b/engines/cge2/saveload.cpp index 4a9da882d5..b95210eea0 100644 --- a/engines/cge2/saveload.cpp +++ b/engines/cge2/saveload.cpp @@ -129,6 +129,11 @@ SaveStateDescriptor CGE2MetaEngine::querySaveMetaInfos(const char *target, int s desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay); desc.setSaveTime(header.saveHour, header.saveMinutes); + // Slot 0 is used for the 'automatic save on exit' save in Soltys, thus + // we prevent it from being deleted or overwritten by accident. + desc.setDeletableFlag(slot != 0); + desc.setWriteProtectedFlag(slot == 0); + return desc; } } @@ -186,8 +191,15 @@ bool CGE2Engine::canLoadGameStateCurrently() { } Common::Error CGE2Engine::saveGameState(int slot, const Common::String &desc) { + storeHeroPos(); + saveGame(slot, desc); + sceneUp(_now); + return Common::kNoError; +} + +void CGE2Engine::saveGame(int slotNumber, const Common::String &desc) { // Set up the serializer - Common::String slotName = generateSaveName(slot); + Common::String slotName = generateSaveName(slotNumber); Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(slotName); // Write out the ScummVM savegame header @@ -197,16 +209,12 @@ Common::Error CGE2Engine::saveGameState(int slot, const Common::String &desc) { writeSavegameHeader(saveFile, header); // Write out the data of the savegame - storeHeroPos(); sceneDown(); syncGame(nullptr, saveFile); - sceneUp(_now); // Finish writing out game data saveFile->finalize(); delete saveFile; - - return Common::kNoError; } /** diff --git a/engines/cge2/snail.cpp b/engines/cge2/snail.cpp index 48e8ffdb70..29747672ba 100644 --- a/engines/cge2/snail.cpp +++ b/engines/cge2/snail.cpp @@ -691,7 +691,11 @@ Sprite *CGE2Engine::expandSprite(Sprite *spr) { } void CGE2Engine::qGame() { - warning("STUB: CGE2Engine::qGame()"); + // Write out the user's progress + saveGame(0, Common::String("Automatic Savegame")); + + busy(false); + _vga->sunset(); _endGame = true; } |