aboutsummaryrefslogtreecommitdiff
path: root/engines/zvision/core
diff options
context:
space:
mode:
authorFilippos Karapetis2014-12-26 04:03:20 +0200
committerFilippos Karapetis2014-12-26 04:03:20 +0200
commit4d0ebfaa2285e2741a134db36fb4f5bd0317784d (patch)
tree30cf5b4da71ad7ab3da987ab65c6431f9373dd17 /engines/zvision/core
parent00a252fdc561b31379ddc5f568121b8040986add (diff)
downloadscummvm-rg350-4d0ebfaa2285e2741a134db36fb4f5bd0317784d.tar.gz
scummvm-rg350-4d0ebfaa2285e2741a134db36fb4f5bd0317784d.tar.bz2
scummvm-rg350-4d0ebfaa2285e2741a134db36fb4f5bd0317784d.zip
ZVISION: Move the save manager together with the other file classes
Diffstat (limited to 'engines/zvision/core')
-rw-r--r--engines/zvision/core/save_manager.cpp294
-rw-r--r--engines/zvision/core/save_manager.h106
2 files changed, 0 insertions, 400 deletions
diff --git a/engines/zvision/core/save_manager.cpp b/engines/zvision/core/save_manager.cpp
deleted file mode 100644
index b45742154d..0000000000
--- a/engines/zvision/core/save_manager.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "common/scummsys.h"
-
-#include "zvision/core/save_manager.h"
-#include "zvision/zvision.h"
-#include "zvision/scripting/script_manager.h"
-#include "zvision/graphics/render_manager.h"
-
-#include "common/system.h"
-#include "common/translation.h"
-
-#include "graphics/surface.h"
-#include "graphics/thumbnail.h"
-
-#include "gui/message.h"
-#include "gui/saveload.h"
-
-namespace ZVision {
-
-const uint32 SaveManager::SAVEGAME_ID = MKTAG('Z', 'E', 'N', 'G');
-
-bool SaveManager::scummVMSaveLoadDialog(bool isSave) {
- GUI::SaveLoadChooser *dialog;
- Common::String desc;
- int slot;
-
- if (isSave) {
- dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-
- slot = dialog->runModalWithCurrentTarget();
- desc = dialog->getResultString();
-
- if (desc.empty()) {
- // create our own description for the saved game, the user didnt enter it
- desc = dialog->createDefaultSaveDescription(slot);
- }
-
- if (desc.size() > 28)
- desc = Common::String(desc.c_str(), 28);
- } else {
- dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
- slot = dialog->runModalWithCurrentTarget();
- }
-
- delete dialog;
-
- if (slot < 0)
- return false;
-
- if (isSave) {
- saveGame(slot, desc);
- return true;
- } else {
- Common::ErrorCode result = loadGame(slot).getCode();
- return (result == Common::kNoError);
- }
-}
-
-void SaveManager::saveGame(uint slot, const Common::String &saveName) {
- Common::SaveFileManager *saveFileManager = g_system->getSavefileManager();
- Common::OutSaveFile *file = saveFileManager->openForSaving(_engine->generateSaveFileName(slot));
-
- writeSaveGameHeader(file, saveName);
-
- _engine->getScriptManager()->serialize(file);
-
- file->finalize();
- delete file;
-}
-
-void SaveManager::saveGame(uint slot, const Common::String &saveName, Common::MemoryWriteStreamDynamic *stream) {
- Common::SaveFileManager *saveFileManager = g_system->getSavefileManager();
- Common::OutSaveFile *file = saveFileManager->openForSaving(_engine->generateSaveFileName(slot));
-
- writeSaveGameHeader(file, saveName);
-
- file->write(stream->getData(), stream->size());
-
- file->finalize();
- delete file;
-}
-
-void SaveManager::saveGameBuffered(uint slot, const Common::String &saveName) {
- if (_tempSave) {
- saveGame(slot, saveName, _tempSave);
- flushSaveBuffer();
- }
-}
-
-void SaveManager::autoSave() {
- Common::OutSaveFile *file = g_system->getSavefileManager()->openForSaving(_engine->generateAutoSaveFileName());
-
- writeSaveGameHeader(file, "auto");
-
- _engine->getScriptManager()->serialize(file);
-
- // Cleanup
- file->finalize();
- delete file;
-}
-
-void SaveManager::writeSaveGameHeader(Common::OutSaveFile *file, const Common::String &saveName) {
- file->writeUint32BE(SAVEGAME_ID);
-
- // Write version
- file->writeByte(SAVE_VERSION);
-
- // Write savegame name
- file->writeString(saveName);
- file->writeByte(0);
-
- // Create a thumbnail and save it
- Graphics::saveThumbnail(*file);
-
- // Write out the save date/time
- TimeDate td;
- g_system->getTimeAndDate(td);
- file->writeSint16LE(td.tm_year + 1900);
- file->writeSint16LE(td.tm_mon + 1);
- file->writeSint16LE(td.tm_mday);
- file->writeSint16LE(td.tm_hour);
- file->writeSint16LE(td.tm_min);
-}
-
-Common::Error SaveManager::loadGame(uint slot) {
- Common::SeekableReadStream *saveFile = getSlotFile(slot);
- if (saveFile == 0) {
- return Common::kPathDoesNotExist;
- }
-
- // Read the header
- SaveGameHeader header;
- if (!readSaveGameHeader(saveFile, header)) {
- return Common::kUnknownError;
- }
-
- ScriptManager *scriptManager = _engine->getScriptManager();
- // Update the state table values
- scriptManager->deserialize(saveFile);
-
- delete saveFile;
- if (header.thumbnail)
- delete header.thumbnail;
-
- return Common::kNoError;
-}
-
-Common::Error SaveManager::loadGame(const Common::String &saveName) {
- Common::File *saveFile = _engine->getSearchManager()->openFile(saveName);
- if (saveFile == NULL) {
- saveFile = new Common::File;
- if (!saveFile->open(saveName)) {
- delete saveFile;
- return Common::kPathDoesNotExist;
- }
- }
-
- // Read the header
- SaveGameHeader header;
- if (!readSaveGameHeader(saveFile, header)) {
- return Common::kUnknownError;
- }
-
- ScriptManager *scriptManager = _engine->getScriptManager();
- // Update the state table values
- scriptManager->deserialize(saveFile);
-
- delete saveFile;
- if (header.thumbnail)
- delete header.thumbnail;
-
- return Common::kNoError;
-}
-
-bool SaveManager::readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header) {
- uint32 tag = in->readUint32BE();
- // Check if it's original savegame than fill header structure
- if (tag == MKTAG('Z', 'N', 'S', 'G')) {
- header.saveYear = 0;
- header.saveMonth = 0;
- header.saveDay = 0;
- header.saveHour = 0;
- header.saveMinutes = 0;
- header.saveName = "Original Save";
- header.thumbnail = NULL;
- header.version = SAVE_ORIGINAL;
- in->seek(-4, SEEK_CUR);
- return true;
- }
- if (tag != SAVEGAME_ID) {
- warning("File is not a ZVision save file. Aborting load");
- return false;
- }
-
- // Read in the version
- header.version = in->readByte();
-
- // Check that the save version isn't newer than this binary
- if (header.version > SAVE_VERSION) {
- uint tempVersion = header.version;
- GUI::MessageDialog dialog(
- Common::String::format(
- "This save file uses version %u, but this engine only "
- "supports up to version %d. You will need an updated version "
- "of the engine to use this save file.", tempVersion, SAVE_VERSION
- ),
- "OK");
- dialog.runModal();
- }
-
- // Read in the save name
- header.saveName.clear();
- char ch;
- while ((ch = (char)in->readByte()) != '\0')
- header.saveName += ch;
-
- // Get the thumbnail
- header.thumbnail = Graphics::loadThumbnail(*in);
- if (!header.thumbnail)
- return false;
-
- // Read in save date/time
- header.saveYear = in->readSint16LE();
- header.saveMonth = in->readSint16LE();
- header.saveDay = in->readSint16LE();
- header.saveHour = in->readSint16LE();
- header.saveMinutes = in->readSint16LE();
-
- return true;
-}
-
-Common::SeekableReadStream *SaveManager::getSlotFile(uint slot) {
- Common::SeekableReadStream *saveFile = g_system->getSavefileManager()->openForLoading(_engine->generateSaveFileName(slot));
- if (saveFile == NULL) {
- // Try to load standard save file
- Common::String filename;
- if (_engine->getGameId() == GID_GRANDINQUISITOR)
- filename = Common::String::format("inqsav%u.sav", slot);
- else if (_engine->getGameId() == GID_NEMESIS)
- filename = Common::String::format("nemsav%u.sav", slot);
-
- saveFile = _engine->getSearchManager()->openFile(filename);
- if (saveFile == NULL) {
- Common::File *tmpFile = new Common::File;
- if (!tmpFile->open(filename)) {
- delete tmpFile;
- } else {
- saveFile = tmpFile;
- }
- }
-
- }
-
- return saveFile;
-}
-
-void SaveManager::prepareSaveBuffer() {
- if (_tempSave)
- delete _tempSave;
-
- _tempSave = new Common::MemoryWriteStreamDynamic;
-
- _engine->getScriptManager()->serialize(_tempSave);
-}
-
-void SaveManager::flushSaveBuffer() {
- if (_tempSave)
- delete _tempSave;
-
- _tempSave = NULL;
-}
-
-} // End of namespace ZVision
diff --git a/engines/zvision/core/save_manager.h b/engines/zvision/core/save_manager.h
deleted file mode 100644
index 75841331e7..0000000000
--- a/engines/zvision/core/save_manager.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef ZVISION_SAVE_MANAGER_H
-#define ZVISION_SAVE_MANAGER_H
-
-#include "common/savefile.h"
-#include "common/memstream.h"
-
-namespace Common {
-class String;
-}
-
-namespace Graphics {
-struct Surface;
-}
-
-namespace ZVision {
-
-class ZVision;
-
-struct SaveGameHeader {
- byte version;
- Common::String saveName;
- Graphics::Surface *thumbnail;
- int saveYear, saveMonth, saveDay;
- int saveHour, saveMinutes;
-};
-
-class SaveManager {
-public:
- SaveManager(ZVision *engine) : _engine(engine), _tempSave(NULL) {}
- ~SaveManager() {
- flushSaveBuffer();
- }
-
-private:
- ZVision *_engine;
- static const uint32 SAVEGAME_ID;
-
- enum {
- SAVE_ORIGINAL = 0,
- SAVE_VERSION = 1
- };
-
- Common::MemoryWriteStreamDynamic *_tempSave;
-
-public:
- /**
- * Called every room change. Saves the state of the room just before
- * we switched rooms. Uses ZVision::generateAutoSaveFileName() to
- * create the save file name.
- */
- void autoSave();
- /**
- * Copies the data from the last auto-save into a new save file. We
- * can't use the current state data because the save menu *IS* a room.
- * The file is named using ZVision::generateSaveFileName(slot)
- *
- * @param slot The save slot this save pertains to. Must be [1, 20]
- * @param saveName The internal name for this save. This is NOT the name of the actual save file.
- */
- void saveGame(uint slot, const Common::String &saveName);
- void saveGame(uint slot, const Common::String &saveName, Common::MemoryWriteStreamDynamic *stream);
- void saveGameBuffered(uint slot, const Common::String &saveName);
- /**
- * Loads the state data from the save file that slot references. Uses
- * ZVision::generateSaveFileName(slot) to get the save file name.
- *
- * @param slot The save slot to load. Must be [1, 20]
- */
- Common::Error loadGame(uint slot);
- Common::Error loadGame(const Common::String &saveName);
-
- Common::SeekableReadStream *getSlotFile(uint slot);
- bool readSaveGameHeader(Common::SeekableReadStream *in, SaveGameHeader &header);
-
- void prepareSaveBuffer();
- void flushSaveBuffer();
- bool scummVMSaveLoadDialog(bool isSave);
-private:
- void writeSaveGameHeader(Common::OutSaveFile *file, const Common::String &saveName);
-};
-
-} // End of namespace ZVision
-
-#endif