From c0e782fd0b2ba9de69563e8bcb4fb43e2f311b35 Mon Sep 17 00:00:00 2001
From: athrxx
Date: Tue, 13 Dec 2011 22:04:06 +0100
Subject: KYRA: (EOB) - Start implementing EOB1 party transfer (not working
 yet)

(ScummVM specific solution which allows the selection of save files of all configured EOB1 targets)
---
 engines/kyra/saveload.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'engines/kyra/saveload.cpp')

diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp
index 42c5d3e8a8..e9c61b0761 100644
--- a/engines/kyra/saveload.cpp
+++ b/engines/kyra/saveload.cpp
@@ -122,7 +122,7 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 	return ((in->err() || in->eos()) ? kRSHEIoError : kRSHENoError);
 }
 
-Common::SeekableReadStream *KyraEngine_v1::openSaveForReading(const char *filename, SaveHeader &header) {
+Common::SeekableReadStream *KyraEngine_v1::openSaveForReading(const char *filename, SaveHeader &header, bool checkID) {
 	Common::SeekableReadStream *in = 0;
 	if (!(in = _saveFileMan->openForLoading(filename)))
 		return 0;
@@ -142,7 +142,7 @@ Common::SeekableReadStream *KyraEngine_v1::openSaveForReading(const char *filena
 
 	if (!header.originalSave) {
 		if (!header.oldHeader) {
-			if (header.gameID != _flags.gameID) {
+			if (header.gameID != _flags.gameID && checkID) {
 				warning("Trying to load game state from other game (save game: %u, running game: %u)", header.gameID, _flags.gameID);
 				delete in;
 				return 0;
-- 
cgit v1.2.3


From c96e5de291ed686ea49ba312113d2fc0d343302d Mon Sep 17 00:00:00 2001
From: Johannes Schickel
Date: Tue, 27 Dec 2011 02:23:49 +0100
Subject: KYRA: Some formatting fixes.

---
 engines/kyra/saveload.cpp | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

(limited to 'engines/kyra/saveload.cpp')

diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp
index e9c61b0761..3bca6b0e3c 100644
--- a/engines/kyra/saveload.cpp
+++ b/engines/kyra/saveload.cpp
@@ -44,13 +44,13 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 	header.flags = 0;
 	header.thumbnail = 0;
 
-	if (type == MKTAG('K','Y','R','A') || type == MKTAG('A','R','Y','K')) { // old Kyra1 header ID
+	if (type == MKTAG('K', 'Y', 'R', 'A') || type == MKTAG('A', 'R', 'Y', 'K')) { // old Kyra1 header ID
 		header.gameID = GI_KYRA1;
 		header.oldHeader = true;
-	} else if (type == MKTAG('H','O','F','S')) { // old Kyra2 header ID
+	} else if (type == MKTAG('H', 'O', 'F', 'S')) { // old Kyra2 header ID
 		header.gameID = GI_KYRA2;
 		header.oldHeader = true;
-	} else if (type == MKTAG('W','W','S','V')) {
+	} else if (type == MKTAG('W', 'W', 'S', 'V')) {
 		header.gameID = in->readByte();
 	} else {
 		// try checking for original save header
@@ -68,12 +68,12 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 
 			type = in->readUint32BE();
 			header.version = in->readUint16LE();
-			if (type == MKTAG('M','B','L','3') && header.version == 100) {
+			if (type == MKTAG('M', 'B', 'L', '3') && header.version == 100) {
 				saveOk = true;
 				header.description = descriptionBuffer;
 				header.gameID = GI_KYRA2;
 				break;
-			} else if (type == MKTAG('M','B','L','4') && header.version == 102) {
+			} else if (type == MKTAG('M', 'B', 'L', '4') && header.version == 102) {
 				saveOk = true;
 				header.description = descriptionBuffer;
 				header.gameID = GI_KYRA3;
@@ -91,7 +91,7 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 	}
 
 	header.version = in->readUint32BE();
-	if (header.version > CURRENT_SAVE_VERSION || (header.oldHeader && header.version > 8) || (type == MKTAG('A','R','Y','K') && header.version > 3))
+	if (header.version > CURRENT_SAVE_VERSION || (header.oldHeader && header.version > 8) || (type == MKTAG('A', 'R', 'Y', 'K') && header.version > 3))
 		return kRSHEInvalidVersion;
 
 	// Versions prior to 9 are using a fixed length description field
@@ -182,10 +182,10 @@ Common::WriteStream *KyraEngine_v1::openSaveForWriting(const char *filename, con
 	}
 
 	// Savegame version
-	out->writeUint32BE(MKTAG('W','W','S','V'));
+	out->writeUint32BE(MKTAG('W', 'W', 'S', 'V'));
 	out->writeByte(_flags.gameID);
 	out->writeUint32BE(CURRENT_SAVE_VERSION);
-	out->write(saveName, strlen(saveName)+1);
+	out->write(saveName, strlen(saveName) + 1);
 	if (_flags.isTalkie)
 		out->writeUint32BE(GF_TALKIE);
 	else if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
-- 
cgit v1.2.3


From 75c0036925107a844d211854f7194aebcbedd718 Mon Sep 17 00:00:00 2001
From: athrxx
Date: Tue, 13 Dec 2011 21:56:35 +0100
Subject: KYRA: (LOL) - add support for loading original DOS version save files

---
 engines/kyra/saveload.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

(limited to 'engines/kyra/saveload.cpp')

diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp
index 3bca6b0e3c..9fd470f740 100644
--- a/engines/kyra/saveload.cpp
+++ b/engines/kyra/saveload.cpp
@@ -54,7 +54,7 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 		header.gameID = in->readByte();
 	} else {
 		// try checking for original save header
-		const int descriptionSize[2] = { 30, 80 };
+		const int descriptionSize[3] = { 30, 80, 60 };
 		char descriptionBuffer[81];
 
 		bool saveOk = false;
@@ -78,6 +78,16 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 				header.description = descriptionBuffer;
 				header.gameID = GI_KYRA3;
 				break;
+			} else if (type == MKTAG('C','D','0','4')) {
+				header.version = in->readUint32BE();
+				// We don't check the minor version, since the original doesn't do that either and it isn't required.
+				if (header.version != MKTAG(' ','C','D','1'))
+					continue;
+				saveOk = true;
+				header.description = descriptionBuffer;
+				header.gameID = GI_LOL;
+				in->seek(6, SEEK_CUR);
+				break;
 			}
 		}
 
-- 
cgit v1.2.3


From cbfdd227a173238cd7069264c2f83bdf247ca1d6 Mon Sep 17 00:00:00 2001
From: athrxx
Date: Tue, 13 Dec 2011 22:00:07 +0100
Subject: KYRA: (LOL) - minor reduction of save file size

---
 engines/kyra/saveload.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'engines/kyra/saveload.cpp')

diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp
index 9fd470f740..f4fd4668ee 100644
--- a/engines/kyra/saveload.cpp
+++ b/engines/kyra/saveload.cpp
@@ -29,7 +29,7 @@
 #include "graphics/thumbnail.h"
 #include "graphics/surface.h"
 
-#define CURRENT_SAVE_VERSION 16
+#define CURRENT_SAVE_VERSION 17
 
 #define GF_FLOPPY  (1 <<  0)
 #define GF_TALKIE  (1 <<  1)
-- 
cgit v1.2.3


From ae8ab8d94e53ce94330987705da2353f7e146ba5 Mon Sep 17 00:00:00 2001
From: Johannes Schickel
Date: Wed, 28 Dec 2011 01:39:01 +0100
Subject: KYRA: Silence some valgrind warnings by doing a slight sanity check
 on savefile size.

---
 engines/kyra/saveload.cpp | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'engines/kyra/saveload.cpp')

diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp
index f4fd4668ee..41ba1e5e50 100644
--- a/engines/kyra/saveload.cpp
+++ b/engines/kyra/saveload.cpp
@@ -60,6 +60,9 @@ KyraEngine_v1::kReadSaveHeaderError KyraEngine_v1::readSaveHeader(Common::Seekab
 		bool saveOk = false;
 
 		for (uint i = 0; i < ARRAYSIZE(descriptionSize) && !saveOk; ++i) {
+			if (in->size() < descriptionSize[i] + 6)
+				continue;
+
 			in->seek(0, SEEK_SET);
 			in->read(descriptionBuffer, descriptionSize[i]);
 			descriptionBuffer[descriptionSize[i]] = 0;
-- 
cgit v1.2.3