[Scummvm-git-logs] scummvm branch-2-3 -> e8a3bf7b40867295bc7c57d447f2355bc47174e4

antoniou79 a.antoniou79 at gmail.com
Fri Sep 17 20:03:53 UTC 2021


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

Summary:
e70908f7d4 SKY: Make autosave slot (0) write protected
a1f2881c0d SKY: Fix savegame deletion via GMM
e8a3bf7b40 SKY: Display message at attempt to delete autosave slot


Commit: e70908f7d4593393eb0c76a71a291de4da5d746a
    https://github.com/scummvm/scummvm/commit/e70908f7d4593393eb0c76a71a291de4da5d746a
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2021-09-17T22:57:46+03:00

Commit Message:
SKY: Make autosave slot (0) write protected

This prevents the user trying to overwrite it manually using GMM

Changed paths:
    engines/sky/metaengine.cpp


diff --git a/engines/sky/metaengine.cpp b/engines/sky/metaengine.cpp
index 32a52dc1e3..a9de4ec377 100644
--- a/engines/sky/metaengine.cpp
+++ b/engines/sky/metaengine.cpp
@@ -47,6 +47,7 @@ class SkyMetaEngine : public MetaEngine {
 	SaveStateList listSaves(const char *target) const override;
 	int getMaximumSaveSlot() const override;
 	void removeSaveState(const char *target, int slot) const override;
+	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
 
 	Common::KeymapArray initKeymaps(const char *target) const override;
 };
@@ -55,7 +56,8 @@ bool SkyMetaEngine::hasFeature(MetaEngineFeature f) const {
 	return
 		(f == kSupportsListSaves) ||
 		(f == kSupportsLoadingDuringStartup) ||
-		(f == kSupportsDeleteSave);
+		(f == kSupportsDeleteSave) ||
+		(f == kSavesSupportMetaInfo);
 }
 
 bool Sky::SkyEngine::hasFeature(EngineFeature f) const {
@@ -232,6 +234,54 @@ void SkyMetaEngine::removeSaveState(const char *target, int slot) const {
 		warning("Unable to store Savegame names to file SKY-VM.SAV. (%s)", saveFileMan->popErrorDesc().c_str());
 }
 
+SaveStateDescriptor SkyMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
+	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+
+	if (slot > 0) {
+		// Search current save game descriptions
+		// for the description of the specified slot, if any
+		Common::String tmpSavename;
+		Common::InSaveFile *inf;
+		inf = saveFileMan->openForLoading("SKY-VM.SAV");
+		if (inf != NULL) {
+			char *tmpBuf =  new char[MAX_SAVE_GAMES * MAX_TEXT_LEN];
+			char *tmpPtr = tmpBuf;
+			inf->read(tmpBuf, MAX_SAVE_GAMES * MAX_TEXT_LEN);
+			for (int i = 0; i < MAX_SAVE_GAMES; ++i) {
+				tmpSavename = tmpPtr;
+				tmpPtr += tmpSavename.size() + 1;
+				if (i == slot - 1) {
+					break;
+				}
+			}
+			delete inf;
+			delete[] tmpBuf;
+		}
+
+		// Make sure the file exists
+		// Note: there can be valid saved file names with empty savename
+		char fName[20];
+		sprintf(fName,"SKY-VM.%03d", slot);
+		Common::InSaveFile *in = saveFileMan->openForLoading(fName);
+		if (in) {
+			delete in;
+			SaveStateDescriptor descriptor(slot, tmpSavename);
+			return descriptor;
+		}
+	}
+
+	// Reaching here, means we selected an empty save slot, that does not correspond to a save file
+	SaveStateDescriptor emptySave;
+	// Do not allow save slot 0 (used for auto-saving) to be overwritten.
+	if (slot == 0) {
+		emptySave.setAutosave(true);
+		emptySave.setWriteProtectedFlag(true);
+	} else {
+		emptySave.setWriteProtectedFlag(false);
+	}
+	return emptySave;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(SKY)
 	REGISTER_PLUGIN_DYNAMIC(SKY, PLUGIN_TYPE_ENGINE, SkyMetaEngine);
 #else


Commit: a1f2881c0de6685b1684243c033a2df35c6fe653
    https://github.com/scummvm/scummvm/commit/a1f2881c0de6685b1684243c033a2df35c6fe653
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2021-09-17T22:58:02+03:00

Commit Message:
SKY: Fix savegame deletion via GMM

Changed paths:
    engines/sky/metaengine.cpp


diff --git a/engines/sky/metaengine.cpp b/engines/sky/metaengine.cpp
index a9de4ec377..fe0ed4f5b7 100644
--- a/engines/sky/metaengine.cpp
+++ b/engines/sky/metaengine.cpp
@@ -214,7 +214,7 @@ void SkyMetaEngine::removeSaveState(const char *target, int slot) const {
 	}
 
 	// Update the save game description at the given slot
-	savenames[slot] = "";
+	savenames[slot - 1] = "";
 
 	// Save the updated descriptions
 	Common::OutSaveFile *outf;


Commit: e8a3bf7b40867295bc7c57d447f2355bc47174e4
    https://github.com/scummvm/scummvm/commit/e8a3bf7b40867295bc7c57d447f2355bc47174e4
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2021-09-17T22:58:19+03:00

Commit Message:
SKY: Display message at attempt to delete autosave slot

Sky engine does not allow autosave file deletion

Changed paths:
    engines/sky/metaengine.cpp


diff --git a/engines/sky/metaengine.cpp b/engines/sky/metaengine.cpp
index fe0ed4f5b7..16e3d7c77d 100644
--- a/engines/sky/metaengine.cpp
+++ b/engines/sky/metaengine.cpp
@@ -32,6 +32,8 @@
 #include "common/file.h"
 #include "common/fs.h"
 
+#include "gui/message.h"
+
 #include "sky/control.h"
 #include "sky/sky.h"
 
@@ -188,8 +190,15 @@ SaveStateList SkyMetaEngine::listSaves(const char *target) const {
 int SkyMetaEngine::getMaximumSaveSlot() const { return MAX_SAVE_GAMES; }
 
 void SkyMetaEngine::removeSaveState(const char *target, int slot) const {
-	if (slot == 0)	// do not delete the auto save
+	if (slot == 0)	{
+		// Do not delete the auto save
+		// Note: Setting the autosave slot as write protected (with setWriteProtectedFlag())
+		//       does not disable the delete action on the slot.
+		const Common::U32String message = _("WARNING: Deleting the autosave slot is not supported by this engine");
+		GUI::MessageDialog warn(message);
+		warn.runModal();
 		return;
+	}
 
 	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
 	char fName[20];




More information about the Scummvm-git-logs mailing list