aboutsummaryrefslogtreecommitdiff
path: root/engines/cge2
diff options
context:
space:
mode:
authoruruk2014-08-03 14:46:11 +0200
committeruruk2014-08-03 14:46:11 +0200
commit60a77ae6d76195180707dfe67a3d34eb95b8ca74 (patch)
tree82f10e0bc1ba1121009e3eef91f82e7f7cb6ba39 /engines/cge2
parent61083e5caba5d28689aaec8fd1f912df37eb0cf0 (diff)
downloadscummvm-rg350-60a77ae6d76195180707dfe67a3d34eb95b8ca74.tar.gz
scummvm-rg350-60a77ae6d76195180707dfe67a3d34eb95b8ca74.tar.bz2
scummvm-rg350-60a77ae6d76195180707dfe67a3d34eb95b8ca74.zip
CGE2: Add autosave functionality.
Diffstat (limited to 'engines/cge2')
-rw-r--r--engines/cge2/cge2.h1
-rw-r--r--engines/cge2/cge2_main.cpp2
-rw-r--r--engines/cge2/saveload.cpp18
-rw-r--r--engines/cge2/snail.cpp6
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;
}