From 13a08a0bb0ac9153e7f597bf7b906329548024e3 Mon Sep 17 00:00:00 2001 From: Adrian Frühwirth Date: Sat, 5 May 2018 22:59:54 +0200 Subject: PRINCE: Add play time metadata to savegames --- engines/prince/detection.cpp | 2 ++ engines/prince/prince.h | 5 +++-- engines/prince/saveload.cpp | 24 +++++++++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) (limited to 'engines') diff --git a/engines/prince/detection.cpp b/engines/prince/detection.cpp index 8fb63ddeb3..0149a4bb16 100644 --- a/engines/prince/detection.cpp +++ b/engines/prince/detection.cpp @@ -175,6 +175,7 @@ bool PrinceMetaEngine::hasFeature(MetaEngineFeature f) const { (f == kSavesSupportMetaInfo) || (f == kSavesSupportThumbnail) || (f == kSavesSupportCreationDate) || + (f == kSavesSupportPlayTime) || (f == kSupportsListSaves) || (f == kSupportsLoadingDuringStartup) || (f == kSimpleSavesNames); @@ -254,6 +255,7 @@ SaveStateDescriptor PrinceMetaEngine::querySaveMetaInfos(const char *target, int desc.setThumbnail(header.thumbnail); desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay); desc.setSaveTime(header.saveHour, header.saveMinutes); + desc.setPlayTime(header.playTime * 1000); return desc; } diff --git a/engines/prince/prince.h b/engines/prince/prince.h index fcab7ebb41..efebd4c286 100644 --- a/engines/prince/prince.h +++ b/engines/prince/prince.h @@ -86,8 +86,9 @@ struct SavegameHeader { uint8 version; Common::String saveName; Graphics::Surface *thumbnail; - int saveYear, saveMonth, saveDay; - int saveHour, saveMinutes; + int16 saveYear, saveMonth, saveDay; + int16 saveHour, saveMinutes; + uint32 playTime; }; #define kSavegameStrSize 14 diff --git a/engines/prince/saveload.cpp b/engines/prince/saveload.cpp index 39860b8024..e91bc3476b 100644 --- a/engines/prince/saveload.cpp +++ b/engines/prince/saveload.cpp @@ -44,13 +44,22 @@ class InterpreterFlags; class Interpreter; 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(); if (header.version > kSavegameVersion) return false; // Read in the string - header.saveName.clear(); char ch; while ((ch = (char)in->readByte()) != '\0') header.saveName += ch; @@ -61,11 +70,12 @@ WARN_UNUSED_RESULT bool PrinceEngine::readSavegameHeader(Common::InSaveFile *in, } // 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; } @@ -154,6 +164,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) { @@ -413,6 +425,8 @@ bool PrinceEngine::loadGame(int slotNumber) { delete readStream; return false; } + + g_engine->setTotalPlayTime(saveHeader.playTime * 1000); } // Get in the savegame -- cgit v1.2.3