diff options
Diffstat (limited to 'engines/prince/saveload.cpp')
-rw-r--r-- | engines/prince/saveload.cpp | 67 |
1 files changed, 54 insertions, 13 deletions
diff --git a/engines/prince/saveload.cpp b/engines/prince/saveload.cpp index 14f6078910..b1d9fc49fd 100644 --- a/engines/prince/saveload.cpp +++ b/engines/prince/saveload.cpp @@ -30,22 +30,63 @@ #include "common/system.h" #include "common/config-manager.h" #include "common/memstream.h" +#include "common/translation.h" #include "graphics/thumbnail.h" #include "graphics/surface.h" #include "graphics/palette.h" #include "graphics/scaler.h" +#include "gui/saveload.h" + namespace Prince { -#define kBadSVG 99 #define kSavegameVersion 1 class InterpreterFlags; class Interpreter; -bool PrinceEngine::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &header) { - header.thumbnail = nullptr; +bool PrinceEngine::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()) { + desc = dialog->createDefaultSaveDescription(slot); + } + } else { + dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false); + slot = dialog->runModalWithCurrentTarget(); + } + + delete dialog; + + if (slot < 0) + return false; + + if (isSave) { + return saveGameState(slot, desc).getCode() == Common::kNoError; + } else { + return loadGameState(slot).getCode() == Common::kNoError; + } +} + +WARN_UNUSED_RESULT bool PrinceEngine::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &header, bool skipThumbnail) { + header.version = 0; + header.saveName.clear(); + header.thumbnail = nullptr; + header.saveYear = 0; + header.saveMonth = 0; + header.saveDay = 0; + header.saveHour = 0; + header.saveMinutes = 0; + header.playTime = 0; // Get the savegame version header.version = in->readByte(); @@ -53,22 +94,22 @@ bool PrinceEngine::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &he 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) + if (!Graphics::loadThumbnail(*in, header.thumbnail, skipThumbnail)) { return false; + } // Read in save date/time - header.saveYear = in->readSint16LE(); - header.saveMonth = in->readSint16LE(); - header.saveDay = in->readSint16LE(); - header.saveHour = in->readSint16LE(); + header.saveYear = in->readSint16LE(); + header.saveMonth = in->readSint16LE(); + header.saveDay = in->readSint16LE(); + header.saveHour = in->readSint16LE(); header.saveMinutes = in->readSint16LE(); + header.playTime = in->readUint32LE(); return true; } @@ -157,6 +198,8 @@ void PrinceEngine::writeSavegameHeader(Common::OutSaveFile *out, SavegameHeader out->writeSint16LE(td.tm_mday); out->writeSint16LE(td.tm_hour); out->writeSint16LE(td.tm_min); + + out->writeUint32LE(g_engine->getTotalPlayTime() / 1000); } void PrinceEngine::syncGame(Common::SeekableReadStream *readStream, Common::WriteStream *writeStream) { @@ -417,9 +460,7 @@ bool PrinceEngine::loadGame(int slotNumber) { return false; } - // Delete the thumbnail - saveHeader.thumbnail->free(); - delete saveHeader.thumbnail; + g_engine->setTotalPlayTime(saveHeader.playTime * 1000); } // Get in the savegame |