[Scummvm-git-logs] scummvm master -> 057fb9bc6eb0afe9349ebe17bbcd819b003c078c

bonki bonki at users.noreply.github.com
Sat May 5 22:19:42 CEST 2018


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
03312fba61 CGE2: Add play time metadata to savegames
057fb9bc6e CGE: Add play time metadata to savegames


Commit: 03312fba61d65fed96ff4f7dad0112c0db2187a5
    https://github.com/scummvm/scummvm/commit/03312fba61d65fed96ff4f7dad0112c0db2187a5
Author: Adrian Frühwirth (bonki at users.noreply.github.com)
Date: 2018-05-05T22:19:03+02:00

Commit Message:
CGE2: Add play time metadata to savegames

Changed paths:
    engines/cge2/cge2.h
    engines/cge2/detection.cpp
    engines/cge2/saveload.cpp


diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h
index 381d42b..1fa23ad 100644
--- a/engines/cge2/cge2.h
+++ b/engines/cge2/cge2.h
@@ -106,7 +106,7 @@ struct SavegameHeader;
 #define kQuitText         201
 #define kNoQuitText       202
 
-#define kSavegameVersion    1
+#define kSavegameVersion    2
 #define kSavegameStrSize   12
 #define kSavegameStr       "SCUMMVM_CGE2"
 
@@ -116,8 +116,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;
 };
 
 enum ColorBank { kCBRel, kCBStd, kCBSay, kCBInf, kCBMnu, kCBWar };
diff --git a/engines/cge2/detection.cpp b/engines/cge2/detection.cpp
index 68f16d8..54c3240 100644
--- a/engines/cge2/detection.cpp
+++ b/engines/cge2/detection.cpp
@@ -185,6 +185,7 @@ bool CGE2MetaEngine::hasFeature(MetaEngineFeature f) const {
 		(f == kSavesSupportMetaInfo) ||
 		(f == kSavesSupportThumbnail) ||
 		(f == kSavesSupportCreationDate) ||
+		(f == kSavesSupportPlayTime) ||
 		(f == kSupportsListSaves) ||
 		(f == kSupportsLoadingDuringStartup) ||
 		(f == kSimpleSavesNames);
@@ -263,6 +264,10 @@ SaveStateDescriptor CGE2MetaEngine::querySaveMetaInfos(const char *target, int s
 			desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
 			desc.setSaveTime(header.saveHour, header.saveMinutes);
 
+			if (header.playTime) {
+				desc.setPlayTime(header.playTime * 1000);
+			}
+
 			// Slot 0 is used for the 'automatic save on exit' save in Soltys, thus
 			// we prevent it from being deleted or overwritten by accident.
 			desc.setDeletableFlag(slot != 0);
diff --git a/engines/cge2/saveload.cpp b/engines/cge2/saveload.cpp
index 83cba53..a8120c1 100644
--- a/engines/cge2/saveload.cpp
+++ b/engines/cge2/saveload.cpp
@@ -117,6 +117,8 @@ bool CGE2Engine::loadGame(int slotNumber) {
 			delete readStream;
 			return false;
 		}
+
+		g_engine->setTotalPlayTime(saveHeader.playTime * 1000);
 	}
 
 	resetGame();
@@ -174,16 +176,27 @@ void CGE2Engine::writeSavegameHeader(Common::OutSaveFile *out, SavegameHeader &h
 	out->writeSint16LE(td.tm_mday);
 	out->writeSint16LE(td.tm_hour);
 	out->writeSint16LE(td.tm_min);
+
+	out->writeUint32LE(g_engine->getTotalPlayTime() / 1000);
 }
 
 WARN_UNUSED_RESULT bool CGE2Engine::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;
@@ -194,12 +207,17 @@ WARN_UNUSED_RESULT bool CGE2Engine::readSavegameHeader(Common::InSaveFile *in, S
 	}
 
 	// 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();
 
+	if (header.version >= 2) {
+		header.playTime = in->readUint32LE();
+	}
+
+
 	return true;
 }
 


Commit: 057fb9bc6eb0afe9349ebe17bbcd819b003c078c
    https://github.com/scummvm/scummvm/commit/057fb9bc6eb0afe9349ebe17bbcd819b003c078c
Author: Adrian Frühwirth (bonki at users.noreply.github.com)
Date: 2018-05-05T22:19:03+02:00

Commit Message:
CGE: Add play time metadata to savegames

Changed paths:
    engines/cge/cge.h
    engines/cge/cge_main.cpp
    engines/cge/detection.cpp


diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index 668224d..9a8ea0d 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -56,7 +56,7 @@ class Walk;
 class Text;
 class Talk;
 
-#define kSavegameVersion 2
+#define kSavegameVersion 3
 #define kSavegameStrSize 11
 #define kPocketX    174
 #define kPocketY    176
@@ -99,8 +99,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;
 };
 
 extern const char *savegameStr;
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index fcbbf34..05461e3 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -242,6 +242,8 @@ bool CGEEngine::loadGame(int slotNumber, SavegameHeader *header, bool tiny) {
 			delete readStream;
 			return true;
 		}
+
+		g_engine->setTotalPlayTime(saveHeader.playTime * 1000);
 	}
 
 	// Get in the savegame
@@ -367,6 +369,8 @@ void CGEEngine::writeSavegameHeader(Common::OutSaveFile *out, SavegameHeader &he
 	out->writeSint16LE(td.tm_mday);
 	out->writeSint16LE(td.tm_hour);
 	out->writeSint16LE(td.tm_min);
+
+	out->writeUint32LE(g_engine->getTotalPlayTime() / 1000);
 }
 
 void CGEEngine::syncGame(Common::SeekableReadStream *readStream, Common::WriteStream *writeStream, bool tiny) {
@@ -421,13 +425,22 @@ void CGEEngine::syncGame(Common::SeekableReadStream *readStream, Common::WriteSt
 }
 
 WARN_UNUSED_RESULT bool CGEEngine::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;
@@ -438,12 +451,16 @@ WARN_UNUSED_RESULT bool CGEEngine::readSavegameHeader(Common::InSaveFile *in, Sa
 	}
 
 	// 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();
 
+	if (header.version >= 3) {
+		header.playTime = in->readUint32LE();
+	}
+
 	return true;
 }
 
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp
index cae2e03..4c23939 100644
--- a/engines/cge/detection.cpp
+++ b/engines/cge/detection.cpp
@@ -176,12 +176,13 @@ const ADGameDescription *CGEMetaEngine::fallbackDetect(const FileMap &allFiles,
 
 bool CGEMetaEngine::hasFeature(MetaEngineFeature f) const {
 	return
-	    (f == kSupportsListSaves) ||
-	    (f == kSupportsLoadingDuringStartup) ||
-	    (f == kSupportsDeleteSave) ||
-	    (f == kSavesSupportMetaInfo) ||
-	    (f == kSavesSupportThumbnail) ||
-	    (f == kSavesSupportCreationDate) ||
+		(f == kSupportsListSaves) ||
+		(f == kSupportsLoadingDuringStartup) ||
+		(f == kSupportsDeleteSave) ||
+		(f == kSavesSupportMetaInfo) ||
+		(f == kSavesSupportThumbnail) ||
+		(f == kSavesSupportCreationDate) ||
+		(f == kSavesSupportPlayTime) ||
 		(f == kSimpleSavesNames);
 }
 
@@ -263,6 +264,10 @@ SaveStateDescriptor CGEMetaEngine::querySaveMetaInfos(const char *target, int sl
 			desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
 			desc.setSaveTime(header.saveHour, header.saveMinutes);
 
+			if (header.playTime) {
+				desc.setPlayTime(header.playTime * 1000);
+			}
+
 			// Slot 0 is used for the 'automatic save on exit' save in Soltys, thus
 			// we prevent it from being deleted or overwritten by accident.
 			desc.setDeletableFlag(slot != 0);





More information about the Scummvm-git-logs mailing list