[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