aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorAdrian Frühwirth2018-05-05 22:59:54 +0200
committerAdrian Frühwirth2018-05-06 00:00:38 +0200
commit13a08a0bb0ac9153e7f597bf7b906329548024e3 (patch)
treee8ac5a0c904b27c379dedb19c05d0cd5b079cffb /engines
parentf5c45e5ca435ce4d7bfaedc1f47518eb49055635 (diff)
downloadscummvm-rg350-13a08a0bb0ac9153e7f597bf7b906329548024e3.tar.gz
scummvm-rg350-13a08a0bb0ac9153e7f597bf7b906329548024e3.tar.bz2
scummvm-rg350-13a08a0bb0ac9153e7f597bf7b906329548024e3.zip
PRINCE: Add play time metadata to savegames
Diffstat (limited to 'engines')
-rw-r--r--engines/prince/detection.cpp2
-rw-r--r--engines/prince/prince.h5
-rw-r--r--engines/prince/saveload.cpp24
3 files changed, 24 insertions, 7 deletions
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