CGE2: Add autosave functionality.

This commit is contained in:
uruk 2014-08-03 14:46:11 +02:00
parent 61083e5cab
commit 60a77ae6d7
4 changed files with 19 additions and 8 deletions

View File

@ -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();

View File

@ -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() {

View File

@ -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;
}
/**

View File

@ -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;
}