diff options
Diffstat (limited to 'engines/xeen/xeen.cpp')
-rw-r--r-- | engines/xeen/xeen.cpp | 124 |
1 files changed, 4 insertions, 120 deletions
diff --git a/engines/xeen/xeen.cpp b/engines/xeen/xeen.cpp index 39e5f4b7b5..9a0e42e44c 100644 --- a/engines/xeen/xeen.cpp +++ b/engines/xeen/xeen.cpp @@ -25,8 +25,6 @@ #include "common/debug-channels.h" #include "common/events.h" #include "engines/util.h" -#include "graphics/scaler.h" -#include "graphics/thumbnail.h" #include "xeen/xeen.h" #include "xeen/files.h" #include "xeen/resources.h" @@ -99,14 +97,14 @@ void XeenEngine::initialize() { _locations = new LocationManager(); _map = new Map(this); _party = new Party(this); - _saves = new SavesManager(this, *_party); + _saves = new SavesManager(_targetName); _screen = new Screen(this); _scripts = new Scripts(this); _sound = new Sound(this, _mixer); _spells = new Spells(this); _windows = new Windows(); - File f("029.obj"); + File f("029.obj", 1); _eventData = f.readStream(f.size()); // Set graphics mode @@ -137,51 +135,11 @@ int XeenEngine::getRandomNumber(int minNumber, int maxNumber) { } Common::Error XeenEngine::saveGameState(int slot, const Common::String &desc) { - Common::OutSaveFile *out = g_system->getSavefileManager()->openForSaving( - generateSaveName(slot)); - if (!out) - return Common::kCreatingFileFailed; - - XeenSavegameHeader header; - header._saveName = desc; - writeSavegameHeader(out, header); - - Common::Serializer s(nullptr, out); - synchronize(s); - - out->finalize(); - delete out; - - return Common::kNoError; + return _saves->saveGameState(slot, desc); } Common::Error XeenEngine::loadGameState(int slot) { - Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading( - generateSaveName(slot)); - if (!saveFile) - return Common::kReadingFailed; - - Common::Serializer s(saveFile, nullptr); - - // Load the savaegame header - XeenSavegameHeader header; - if (!readSavegameHeader(saveFile, header)) - error("Invalid savegame"); - - if (header._thumbnail) { - header._thumbnail->free(); - delete header._thumbnail; - } - - // Load most of the savegame data - synchronize(s); - delete saveFile; - - return Common::kNoError; -} - -Common::String XeenEngine::generateSaveName(int slot) { - return Common::String::format("%s.%03d", _targetName.c_str(), slot); + return _saves->loadGameState(slot); } bool XeenEngine::canLoadGameStateCurrently() { @@ -192,81 +150,7 @@ bool XeenEngine::canSaveGameStateCurrently() { return true; } -void XeenEngine::synchronize(Common::Serializer &s) { - // TODO -} - -const char *const SAVEGAME_STR = "XEEN"; -#define SAVEGAME_STR_SIZE 6 - -bool XeenEngine::readSavegameHeader(Common::InSaveFile *in, XeenSavegameHeader &header) { - char saveIdentBuffer[SAVEGAME_STR_SIZE + 1]; - header._thumbnail = nullptr; - - // Validate the header Id - in->read(saveIdentBuffer, SAVEGAME_STR_SIZE + 1); - if (strncmp(saveIdentBuffer, SAVEGAME_STR, SAVEGAME_STR_SIZE)) - return false; - - header._version = in->readByte(); - if (header._version > XEEN_SAVEGAME_VERSION) - return false; - - // Read in the string - 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._year = in->readSint16LE(); - header._month = in->readSint16LE(); - header._day = in->readSint16LE(); - header._hour = in->readSint16LE(); - header._minute = in->readSint16LE(); - header._totalFrames = in->readUint32LE(); - - return true; -} - -void XeenEngine::writeSavegameHeader(Common::OutSaveFile *out, XeenSavegameHeader &header) { - // Write out a savegame header - out->write(SAVEGAME_STR, SAVEGAME_STR_SIZE + 1); - - out->writeByte(XEEN_SAVEGAME_VERSION); - - // Write savegame name - out->writeString(header._saveName); - out->writeByte('\0'); - - // Write a thumbnail of the screen -/* - uint8 thumbPalette[768]; - _screen->getPalette(thumbPalette); - Graphics::Surface saveThumb; - ::createThumbnail(&saveThumb, (const byte *)_screen->getPixels(), - _screen->w, _screen->h, thumbPalette); - Graphics::saveThumbnail(*out, saveThumb); - saveThumb.free(); -*/ - // Write out the save date/time - TimeDate td; - g_system->getTimeAndDate(td); - out->writeSint16LE(td.tm_year + 1900); - out->writeSint16LE(td.tm_mon + 1); - out->writeSint16LE(td.tm_mday); - out->writeSint16LE(td.tm_hour); - out->writeSint16LE(td.tm_min); -// out->writeUint32LE(_events->getFrameCounter()); -} - void XeenEngine::playGame() { - _saves->reset(); _files->setGameCc(0); _sound->stopAllAudio(); |