ENGINES: Streamline auto-save write/delete protection
Some engines call setAutosave and some don't. isAutosave is used to determine if a saved game is an autosave, but in fact, on most cases it just falls back to comparing the name to "Autosave". This is wrong for several reasons: * Older versions of ScummVM used Autosave 0. * The name "Autosave" is translated, so if you change the language, it won't be detected. Instead of relying on the name, use the well-known getAutosaveSlot() from Engine/MetaEngine. Fixes #12735.
This commit is contained in:
parent
c4e58093d7
commit
7adad5aaf5
27 changed files with 45 additions and 177 deletions
|
@ -331,21 +331,14 @@ 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) {
|
||||
int slot = it->getSaveSlot();
|
||||
if (slot == autosaveSlot) {
|
||||
// It has an autosave
|
||||
it->setWriteProtectedFlag(true);
|
||||
// It has an autosave
|
||||
if (it->isAutosave())
|
||||
return saveList;
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
desc.setDescription(_("Autosave"));
|
||||
desc.setSaveSlot(autosaveSlot);
|
||||
desc.setWriteProtectedFlag(true);
|
||||
|
||||
SaveStateDescriptor desc(autosaveSlot, _("Autosave"));
|
||||
saveList.push_back(desc);
|
||||
Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
|
||||
|
||||
|
@ -393,16 +386,9 @@ SaveStateDescriptor MetaEngine::querySaveMetaInfos(const char *target, int slot)
|
|||
}
|
||||
|
||||
// Create the return descriptor
|
||||
SaveStateDescriptor desc;
|
||||
|
||||
SaveStateDescriptor desc(slot, Common::U32String());
|
||||
parseSavegameHeader(&header, &desc);
|
||||
|
||||
desc.setSaveSlot(slot);
|
||||
desc.setThumbnail(header.thumbnail);
|
||||
desc.setAutosave(header.isAutosave);
|
||||
if (slot == getAutosaveSlot())
|
||||
desc.setWriteProtectedFlag(true);
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue