[Scummvm-git-logs] scummvm master -> d1571d0195249de8b5a8206dbbc50e7ce7dda481

bluegr noreply at scummvm.org
Mon Jun 19 05:32:04 UTC 2023


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

Summary:
d1571d0195 ENGINES: Add functions to decompose the date and time values from a savegame header


Commit: d1571d0195249de8b5a8206dbbc50e7ce7dda481
    https://github.com/scummvm/scummvm/commit/d1571d0195249de8b5a8206dbbc50e7ce7dda481
Author: elasota (ejlasota at gmail.com)
Date: 2023-06-19T08:32:01+03:00

Commit Message:
ENGINES: Add functions to decompose the date and time values from a savegame header

Changed paths:
    engines/metaengine.cpp
    engines/metaengine.h
    engines/vcruise/vcruise.cpp


diff --git a/engines/metaengine.cpp b/engines/metaengine.cpp
index 153d0cd9a68..96141c3240d 100644
--- a/engines/metaengine.cpp
+++ b/engines/metaengine.cpp
@@ -246,12 +246,16 @@ void MetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
 }
 
 void MetaEngine::parseSavegameHeader(ExtendedSavegameHeader *header, SaveStateDescriptor *desc) {
-	int day = (header->date >> 24) & 0xFF;
-	int month = (header->date >> 16) & 0xFF;
-	int year = header->date & 0xFFFF;
+	uint8 day = 0;
+	uint8 month = 0;
+	uint16 year = 0;
+	decodeSavegameDate(header, year, month, day);
 	desc->setSaveDate(year, month, day);
-	int hour = (header->time >> 8) & 0xFF;
-	int minutes = header->time & 0xFF;
+
+	uint8 hour = 0;
+	uint8 minutes = 0;
+	decodeSavegameTime(header, hour, minutes);
+
 	desc->setSaveTime(hour, minutes);
 	desc->setPlayTime(header->playtime);
 
@@ -265,6 +269,17 @@ void MetaEngine::fillDummyHeader(ExtendedSavegameHeader *header) {
 	header->playtime = 0;
 }
 
+void MetaEngine::decodeSavegameDate(const ExtendedSavegameHeader *header, uint16 &outYear, uint8 &outMonth, uint8 &outDay) {
+	outYear = static_cast<uint16>(header->date & 0xffff);
+	outMonth = static_cast<uint8>((header->date >> 16) & 0xff);
+	outDay = static_cast<uint8>((header->date >> 24) & 0xff);
+}
+
+void MetaEngine::decodeSavegameTime(const ExtendedSavegameHeader *header, uint8 &outHour, uint8 &outMinute) {
+	outMinute = static_cast<uint16>(header->time & 0xff);
+	outHour = static_cast<uint8>((header->time >> 8) & 0xff);
+}
+
 WARN_UNUSED_RESULT bool MetaEngine::readSavegameHeader(Common::InSaveFile *in, ExtendedSavegameHeader *header, bool skipThumbnail) {
 	uint oldPos = in->pos();
 
diff --git a/engines/metaengine.h b/engines/metaengine.h
index eb32e4423ef..625f53be55e 100644
--- a/engines/metaengine.h
+++ b/engines/metaengine.h
@@ -559,6 +559,17 @@ public:
 	 * This is used when failing to read the header from a savegame file.
 	 */
 	static void fillDummyHeader(ExtendedSavegameHeader *header);
+
+	/**
+	 * Decode the date from a savegame header into a calendar date.  The month and day are both 1-based.
+	 */
+	static void decodeSavegameDate(const ExtendedSavegameHeader *header, uint16 &outYear, uint8 &outMonth, uint8 &outDay);
+
+	/**
+	 * Decode the time from a savegame header into a wall clock time.
+	 */
+	static void decodeSavegameTime(const ExtendedSavegameHeader *header, uint8 &outHour, uint8 &outMinute);
+
 	/**
 	 * Read the extended savegame header from the given savegame file.
 	 */
diff --git a/engines/vcruise/vcruise.cpp b/engines/vcruise/vcruise.cpp
index 0ae81043f39..f6a3ac570a4 100644
--- a/engines/vcruise/vcruise.cpp
+++ b/engines/vcruise/vcruise.cpp
@@ -409,13 +409,15 @@ Common::Error VCruiseEngine::loadMostRecentSave() {
 			continue;
 		}
 
-		// FIXME: Leaky abstraction, date doesn't increase in a way that later dates are always higher numbered so we must do this
-		uint day = (header.date >> 24) & 0xff;
-		uint month = (header.date >> 16) & 0xff;
-		uint year = (header.date & 0xffff);
+		uint8 day = 0;
+		uint8 month = 0;
+		uint16 year = 0;
 
-		uint hour = ((header.time >> 8) & 0xff);
-		uint minute = (header.time & 0xff);
+		uint8 hour = 0;
+		uint8 minute = 0;
+
+		MetaEngine::decodeSavegameDate(&header, year, month, day);
+		MetaEngine::decodeSavegameTime(&header, hour, minute);
 
 		uint64 dateTime = static_cast<uint64>(year) << 32;
 		dateTime |= static_cast<uint64>(month) << 24;




More information about the Scummvm-git-logs mailing list