[Scummvm-git-logs] scummvm master -> 6ae964bb61f36e732df6af1f93e0172fb56c1fe1

sev- noreply at scummvm.org
Sun Mar 5 22:19:50 UTC 2023


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

Summary:
252fb66539 ENGINES: Revert setting _saveType value based on slot type
142ad94149 ENGINES: Rename initSaveType() method (#6)
2868b74e30 ENGINES: Use slot test to test where save is stored 
201bed6634 CINE: Use slot test to test where save is stored
1c91baab78 SCI: Use slot test to test where save is stored
95c542e713 ENGINES: Clarify configuration of autosave slot
159f554d20 ENGINES: Improve management of empty autosave slot
8906a0c4a9 ENGINES: Fix invalid double-quote symbols
d507ce499f ENGINES: Allow warning dialog to delete existing save file
414facb1cb ENGINES: Add user support only when autosaving is enabled
6ae964bb61 ENGINES: Remove all user access to autosave slot


Commit: 252fb665396a89eb7786db95b30e13f84a6dfa54
    https://github.com/scummvm/scummvm/commit/252fb665396a89eb7786db95b30e13f84a6dfa54
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Revert setting _saveType value based on slot type

The saveType property is intended to identify the type of save stored in the autosave slot. Setting the saveType property based on slot type identifies any type of save stored in the autosave slot as an autosave.  It's therefore inappropriate for identifying the actual type of save in the slot

Reverting the method prevents an autosave from overwriting a regular save without warning (fixes [#13841](https://bugs.scummvm.org/ticket/13841)).

Changed paths:
    engines/savestate.cpp


diff --git a/engines/savestate.cpp b/engines/savestate.cpp
index 0b730ca827d..369336dd054 100644
--- a/engines/savestate.cpp
+++ b/engines/savestate.cpp
@@ -35,12 +35,12 @@ SaveStateDescriptor::SaveStateDescriptor()
 }
 
 SaveStateDescriptor::SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::U32String &d)
-	: _slot(slot), _description(d), _isLocked(false), _playTimeMSecs(0) {
+	: _slot(slot), _description(d), _isLocked(false), _playTimeMSecs(0), _saveType(kSaveTypeUndetermined) {
 	initSaveType(metaEngine);
 }
 
 SaveStateDescriptor::SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::String &d)
-	: _slot(slot), _description(Common::U32String(d)), _isLocked(false), _playTimeMSecs(0) {
+	: _slot(slot), _description(Common::U32String(d)), _isLocked(false), _playTimeMSecs(0), _saveType(kSaveTypeUndetermined) {
 	initSaveType(metaEngine);
 }
 
@@ -51,7 +51,6 @@ void SaveStateDescriptor::initSaveType(const MetaEngine *metaEngine) {
 	const bool autosave =
 			metaEngine && ConfMan.getInt("autosave_period") && _slot == metaEngine->getAutosaveSlot();
 	_isWriteProtected = autosave;
-	_saveType = autosave ? kSaveTypeAutosave : kSaveTypeRegular;
 	_isDeletable = !autosave;
 }
 


Commit: 142ad9414921f549c6581b71279ac4ea97954d67
    https://github.com/scummvm/scummvm/commit/142ad9414921f549c6581b71279ac4ea97954d67
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Rename initSaveType() method (#6)

Rename method to match its purpose.

Changed paths:
    engines/savestate.cpp
    engines/savestate.h


diff --git a/engines/savestate.cpp b/engines/savestate.cpp
index 369336dd054..0826bf71cb7 100644
--- a/engines/savestate.cpp
+++ b/engines/savestate.cpp
@@ -36,15 +36,15 @@ SaveStateDescriptor::SaveStateDescriptor()
 
 SaveStateDescriptor::SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::U32String &d)
 	: _slot(slot), _description(d), _isLocked(false), _playTimeMSecs(0), _saveType(kSaveTypeUndetermined) {
-	initSaveType(metaEngine);
+	initSaveSlot(metaEngine);
 }
 
 SaveStateDescriptor::SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::String &d)
 	: _slot(slot), _description(Common::U32String(d)), _isLocked(false), _playTimeMSecs(0), _saveType(kSaveTypeUndetermined) {
-	initSaveType(metaEngine);
+	initSaveSlot(metaEngine);
 }
 
-void SaveStateDescriptor::initSaveType(const MetaEngine *metaEngine) {
+void SaveStateDescriptor::initSaveSlot(const MetaEngine *metaEngine) {
 	// Do not allow auto-save slot to be deleted or overwritten.
 	if (!metaEngine && g_engine)
 		metaEngine = g_engine->getMetaEngine();
diff --git a/engines/savestate.h b/engines/savestate.h
index 109f53e3b7a..93bda7868fd 100644
--- a/engines/savestate.h
+++ b/engines/savestate.h
@@ -61,7 +61,7 @@ private:
 		kSaveTypeAutosave
 	};
 
-	void initSaveType(const MetaEngine *metaEngine);
+	void initSaveSlot(const MetaEngine *metaEngine);
 public:
 	SaveStateDescriptor();
 	SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::U32String &d);


Commit: 2868b74e30a4287fbceccc1d178c720a0e016966
    https://github.com/scummvm/scummvm/commit/2868b74e30a4287fbceccc1d178c720a0e016966
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Use slot test to test where save is stored 

Also reinstated desc.setAutosave(header.isAutosave) call in querySaveMetaInfos().
These changes are simply a reversion of the relevant changes made in #3261, including any subsequent changes since then.

Changed paths:
    engines/metaengine.cpp


diff --git a/engines/metaengine.cpp b/engines/metaengine.cpp
index b1a8b05eacb..63b867fb10c 100644
--- a/engines/metaengine.cpp
+++ b/engines/metaengine.cpp
@@ -378,9 +378,11 @@ SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const {
 
 	// Check to see if an autosave is present
 	for (SaveStateList::iterator it = saveList.begin(); it != saveList.end(); ++it) {
-		// It has an autosave
-		if (it->isAutosave())
+		int slot = it->getSaveSlot();
+		if (slot == autosaveSlot) {
+			// It has an autosave
 			return saveList;
+		}
 	}
 
 	// No autosave yet. We want to add a dummy one in so that it can be marked as
@@ -436,6 +438,7 @@ SaveStateDescriptor MetaEngine::querySaveMetaInfos(const char *target, int slot)
 		SaveStateDescriptor desc(this, slot, Common::U32String());
 		parseSavegameHeader(&header, &desc);
 		desc.setThumbnail(header.thumbnail);
+		desc.setAutosave(header.isAutosave);
 		return desc;
 	}
 


Commit: 201bed66341bfda610742807ab398066570b45b3
    https://github.com/scummvm/scummvm/commit/201bed66341bfda610742807ab398066570b45b3
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
CINE: Use slot test to test where save is stored

As an interim measure, also reinstate the setAutosave(true) call in querySaveMetaInfos() for the dummy autosave, though I suspect the call to create the dummy autosave should only appear in listSaves(), since there's no save file attached for autosave testing, so no possible data loss (potential fix [#13432](https://bugs.scummvm.org/ticket/13432)).

Changed paths:
    engines/cine/metaengine.cpp


diff --git a/engines/cine/metaengine.cpp b/engines/cine/metaengine.cpp
index 6a5af025082..b6bf983af78 100644
--- a/engines/cine/metaengine.cpp
+++ b/engines/cine/metaengine.cpp
@@ -154,14 +154,14 @@ SaveStateList CineMetaEngine::listSaves(const char *target) const {
 				SaveStateDescriptor saveStateDesc(this, slotNum, saveDesc);
 
 				if (saveStateDesc.getDescription().empty()) {
-					if (saveStateDesc.isAutosave()) {
+					if (slotNum == getAutosaveSlot()) {
 						saveStateDesc.setDescription(_("Unnamed autosave"));
 					} else {
 						saveStateDesc.setDescription(_("Unnamed savegame"));
 					}
 				}
 
-				if (saveStateDesc.isAutosave()) {
+				if (slotNum == getAutosaveSlot()) {
 					foundAutosave = true;
 				}
 
@@ -237,7 +237,9 @@ SaveStateDescriptor CineMetaEngine::querySaveMetaInfos(const char *target, int s
 
 	// No saving on empty autosave slot
 	if (slot == getAutosaveSlot()) {
-		return SaveStateDescriptor(this, slot, _("Empty autosave"));
+		SaveStateDescriptor desc(this, slot, _("Empty autosave"));
+		desc.setAutosave(true);
+		return desc;
 	}
 
 	return SaveStateDescriptor();


Commit: 1c91baab78498becb85d32c6376372be4207ec98
    https://github.com/scummvm/scummvm/commit/1c91baab78498becb85d32c6376372be4207ec98
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
SCI: Use slot test to test where save is stored

Properly detects if a save is stored in the autosave slot, preventing an overwrite by the dummy autosave, even though ScummVM autosave support is currently revoked.

Changed paths:
    engines/sci/metaengine.cpp


diff --git a/engines/sci/metaengine.cpp b/engines/sci/metaengine.cpp
index 2e16f2c4e2b..84b8b541670 100644
--- a/engines/sci/metaengine.cpp
+++ b/engines/sci/metaengine.cpp
@@ -355,7 +355,8 @@ SaveStateList SciMetaEngine::listSaves(const char *target) const {
 				}
 				SaveStateDescriptor descriptor(this, slotNr, meta.name);
 
-				if (descriptor.isAutosave()) {
+				if (slotNr == 0) {
+					// ScummVM auto-save slot (note however, that autosave support is currently revoked)
 					hasAutosave = true;
 				}
 


Commit: 95c542e71345224c6d2bc991d23b33437f3b3508
    https://github.com/scummvm/scummvm/commit/95c542e71345224c6d2bc991d23b33437f3b3508
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Clarify configuration of autosave slot

Establishes the relationship between the autosave slot and the current autosave status.

Changed paths:
    engines/savestate.cpp


diff --git a/engines/savestate.cpp b/engines/savestate.cpp
index 0826bf71cb7..42565bdb819 100644
--- a/engines/savestate.cpp
+++ b/engines/savestate.cpp
@@ -45,13 +45,19 @@ SaveStateDescriptor::SaveStateDescriptor(const MetaEngine *metaEngine, int slot,
 }
 
 void SaveStateDescriptor::initSaveSlot(const MetaEngine *metaEngine) {
-	// Do not allow auto-save slot to be deleted or overwritten.
 	if (!metaEngine && g_engine)
 		metaEngine = g_engine->getMetaEngine();
-	const bool autosave =
-			metaEngine && ConfMan.getInt("autosave_period") && _slot == metaEngine->getAutosaveSlot();
-	_isWriteProtected = autosave;
-	_isDeletable = !autosave;
+	int autosaveSlot = metaEngine ? metaEngine->getAutosaveSlot() : -1;
+	
+	if (autosaveSlot >= 0 && _slot == autosaveSlot) {
+		const bool autosaveEnabled = ConfMan.getInt("autosave_period");
+		// If autosaving enabled, do not allow autosave slot to be deleted or overwritten
+		_isWriteProtected = autosaveEnabled;
+		_isDeletable = !autosaveEnabled;	
+	} else {
+		_isWriteProtected = false;
+		_isDeletable = true;		
+	}
 }
 
 void SaveStateDescriptor::setThumbnail(Graphics::Surface *t) {


Commit: 159f554d20fc239159d01b9063a26b8d520026fd
    https://github.com/scummvm/scummvm/commit/159f554d20fc239159d01b9063a26b8d520026fd
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Improve management of empty autosave slot

Addresses a vulnerability where the autosave slot may present as a regular empty slot when autosaving is disabled.
By default, an empty autosave slot will always:
- be identified by a dummy autosave.
- display the current autosave state.
- remain clear until an autosave creates the autosave file.

Changed paths:
    engines/metaengine.cpp


diff --git a/engines/metaengine.cpp b/engines/metaengine.cpp
index 63b867fb10c..01e30d879f2 100644
--- a/engines/metaengine.cpp
+++ b/engines/metaengine.cpp
@@ -372,7 +372,7 @@ SaveStateList MetaEngine::listSaves(const char *target) const {
 
 SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const {
 	SaveStateList saveList = listSaves(target);
-	int autosaveSlot = ConfMan.getInt("autosave_period") ? getAutosaveSlot() : -1;
+	int autosaveSlot = getAutosaveSlot();
 	if (!saveMode || autosaveSlot == -1)
 		return saveList;
 
@@ -387,7 +387,11 @@ SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const {
 
 	// No autosave yet. We want to add a dummy one in so that it can be marked as
 	// write protected, and thus be prevented from being saved in
-	SaveStateDescriptor desc(this, autosaveSlot, _("Autosave"));
+	const Common::U32String &dummyAutosave = ConfMan.getInt("autosave_period”) ? _(“Autosave on”) : _(“Autosave off”);
+	SaveStateDescriptor desc(this, autosaveSlot, dummyAutosave);
+	desc.setWriteProtectedFlag(true);
+	desc.setDeletableFlag(false);
+	
 	saveList.push_back(desc);
 	Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
 


Commit: 8906a0c4a99673954d2729dc10ac8f2e6442d616
    https://github.com/scummvm/scummvm/commit/8906a0c4a99673954d2729dc10ac8f2e6442d616
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Fix invalid double-quote symbols

Changed paths:
    engines/metaengine.cpp


diff --git a/engines/metaengine.cpp b/engines/metaengine.cpp
index 01e30d879f2..54e08832ce2 100644
--- a/engines/metaengine.cpp
+++ b/engines/metaengine.cpp
@@ -387,7 +387,7 @@ SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const {
 
 	// No autosave yet. We want to add a dummy one in so that it can be marked as
 	// write protected, and thus be prevented from being saved in
-	const Common::U32String &dummyAutosave = ConfMan.getInt("autosave_period”) ? _(“Autosave on”) : _(“Autosave off”);
+	const Common::U32String &dummyAutosave = (ConfMan.getInt("autosave_period") ? _("Autosave on") : _("Autosave off"));
 	SaveStateDescriptor desc(this, autosaveSlot, dummyAutosave);
 	desc.setWriteProtectedFlag(true);
 	desc.setDeletableFlag(false);


Commit: d507ce499fddb908c6452bf7dcbc8e48a47d7348
    https://github.com/scummvm/scummvm/commit/d507ce499fddb908c6452bf7dcbc8e48a47d7348
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Allow warning dialog to delete existing save file

Presents the autosave with an empty autosave slot after a successful move, or when the Delete option is chosen.
Avoids potential renaming issues for engines which may not allow an existing save file to be renamed.

Changed paths:
    engines/engine.cpp


diff --git a/engines/engine.cpp b/engines/engine.cpp
index b295e90d43f..5db870d7a33 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -585,26 +585,29 @@ bool Engine::warnBeforeOverwritingAutosave() {
 	if (!desc.isValid() || desc.isAutosave())
 		return true;
 	Common::U32StringArray altButtons;
-	altButtons.push_back(_("Overwrite"));
-	altButtons.push_back(_("Cancel autosave"));
+	altButtons.push_back(_("Delete"));
+	altButtons.push_back(_("Skip autosave"));
 	const Common::U32String message = Common::U32String::format(
-				_("WARNING: The autosave slot has a saved game named %S. "
-				  "You can either move the existing save to a new slot, "
-				  "Overwrite the existing save, "
-				  "or cancel autosave (will not prompt again until restart)"), desc.getDescription().c_str());
+				_("WARNING: The autosave slot contains a saved game named %S, and an autosave is pending.\n"
+				  "Please move this saved game to a new slot, or delete it if it's no longer needed.\n"
+				  "Alternatively, you can skip the autosave (will prompt again in 5 minutes)."), desc.getDescription().c_str());
 	GUI::MessageDialog warn(message, _("Move"), altButtons);
 	switch (runDialog(warn)) {
 	case GUI::kMessageOK:
-		if (!getMetaEngine()->copySaveFileToFreeSlot(_targetName.c_str(), getAutosaveSlot())) {
-			GUI::MessageDialog error(_("ERROR: Could not copy the savegame to a new slot"));
-			error.runModal();
-			return false;
+		if (getMetaEngine()->copySaveFileToFreeSlot(_targetName.c_str(), getAutosaveSlot())) {
+				g_system->getSavefileManager()->removeSavefile(
+							getMetaEngine()->getSavegameFile(getAutosaveSlot(), _targetName.c_str()));
+		} else {
+				GUI::MessageDialog error(_("ERROR: Could not copy the savegame to a new slot"));
+				error.runModal();
+				return false;
 		}
 		return true;
-	case GUI::kMessageAlt: // Overwrite
+	case GUI::kMessageAlt: // Delete
+		g_system->getSavefileManager()->removeSavefile(
+					getMetaEngine()->getSavegameFile(getAutosaveSlot(), _targetName.c_str()));
 		return true;
-	case GUI::kMessageAlt + 1: // Cancel autosave
-		_autosaveInterval = 0;
+	case GUI::kMessageAlt + 1: // Skip autosave
 		return false;
 	default: // Hitting Escape returns -1. On this case, don't save but do prompt again later.
 		return false;


Commit: 414facb1cbe2e33ba863196c9123cc1e76f3ce30
    https://github.com/scummvm/scummvm/commit/414facb1cbe2e33ba863196c9123cc1e76f3ce30
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Add user support only when autosaving is enabled

Allows autosave file to be:
- deleted,
- manually overwritten,
- tested when autosave fails or produces unexpected results.

Changed paths:
    engines/savestate.cpp


diff --git a/engines/savestate.cpp b/engines/savestate.cpp
index 42565bdb819..c5c351ca5da 100644
--- a/engines/savestate.cpp
+++ b/engines/savestate.cpp
@@ -51,9 +51,10 @@ void SaveStateDescriptor::initSaveSlot(const MetaEngine *metaEngine) {
 	
 	if (autosaveSlot >= 0 && _slot == autosaveSlot) {
 		const bool autosaveEnabled = ConfMan.getInt("autosave_period");
-		// If autosaving enabled, do not allow autosave slot to be deleted or overwritten
-		_isWriteProtected = autosaveEnabled;
-		_isDeletable = !autosaveEnabled;	
+		// When autosaving enabled, add user support for managing autosave file.
+		// If autosaving disabled, do not allow autosave slot to be deleted or overwritten (no changes unless autosave tests are active).
+		_isWriteProtected = !autosaveEnabled;
+		_isDeletable = autosaveEnabled;	
 	} else {
 		_isWriteProtected = false;
 		_isDeletable = true;		


Commit: 6ae964bb61f36e732df6af1f93e0172fb56c1fe1
    https://github.com/scummvm/scummvm/commit/6ae964bb61f36e732df6af1f93e0172fb56c1fe1
Author: macca8 (brugenerol at tpg.com.au)
Date: 2023-03-05T23:19:40+01:00

Commit Message:
ENGINES: Remove all user access to autosave slot

Changed paths:
    engines/savestate.cpp


diff --git a/engines/savestate.cpp b/engines/savestate.cpp
index c5c351ca5da..a9231af1a19 100644
--- a/engines/savestate.cpp
+++ b/engines/savestate.cpp
@@ -50,11 +50,9 @@ void SaveStateDescriptor::initSaveSlot(const MetaEngine *metaEngine) {
 	int autosaveSlot = metaEngine ? metaEngine->getAutosaveSlot() : -1;
 	
 	if (autosaveSlot >= 0 && _slot == autosaveSlot) {
-		const bool autosaveEnabled = ConfMan.getInt("autosave_period");
-		// When autosaving enabled, add user support for managing autosave file.
-		// If autosaving disabled, do not allow autosave slot to be deleted or overwritten (no changes unless autosave tests are active).
-		_isWriteProtected = !autosaveEnabled;
-		_isDeletable = autosaveEnabled;	
+		// Do not allow autosave slot to be deleted or overwritten
+		_isWriteProtected = true;
+		_isDeletable = false;	
 	} else {
 		_isWriteProtected = false;
 		_isDeletable = true;		




More information about the Scummvm-git-logs mailing list