ENGINES: Warn when overwriting a non-autosave on autosave

This commit is contained in:
Orgad Shaneh 2021-08-16 23:38:35 +03:00 committed by Eugene Sandulenko
parent a0c818bde6
commit 6aeda12247
6 changed files with 131 additions and 31 deletions

View file

@ -209,6 +209,15 @@ void MetaEngine::appendExtendedSaveToStream(Common::WriteStream *saveFile, uint3
saveFile->writeUint32LE(headerPos); // Store where the header starts
}
bool MetaEngine::copySaveFileToFreeSlot(const char *target, int slot)
{
const int emptySlot = findEmptySaveSlot(target);
if (emptySlot == -1)
return false;
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
return saveFileMan->copySavefile(getSavegameFile(slot, target), getSavegameFile(emptySlot, target));
}
void MetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
::createThumbnailFromScreen(&thumb);
}
@ -295,6 +304,23 @@ WARN_UNUSED_RESULT bool MetaEngine::readSavegameHeader(Common::InSaveFile *in, E
// MetaEngine default implementations
//////////////////////////////////////////////
int MetaEngine::findEmptySaveSlot(const char *target) {
if (!hasFeature(kSavesUseExtendedFormat))
return -1;
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
const int maxSaveSlot = getMaximumSaveSlot();
const int autosaveSlot = getAutosaveSlot();
for (int slot = 0; slot <= maxSaveSlot; ++slot) {
if (slot == autosaveSlot)
continue;
const Common::String filename = getSavegameFile(slot, target);
if (!saveFileMan->exists(filename))
return slot;
}
return -1;
}
SaveStateList MetaEngine::listSaves(const char *target) const {
if (!hasFeature(kSavesUseExtendedFormat))
return SaveStateList();
@ -336,7 +362,7 @@ SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const {
return saveList;
}
// No autosave yet. We want to add a dummy one in so that it can be marked as'
// 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(autosaveSlot, _("Autosave"));
saveList.push_back(desc);