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