aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/kfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/kfile.cpp')
-rw-r--r--engines/sci/engine/kfile.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp
index 5d325b1076..d922374a6b 100644
--- a/engines/sci/engine/kfile.cpp
+++ b/engines/sci/engine/kfile.cpp
@@ -800,11 +800,31 @@ reg_t kFileIO(EngineState *s, int argc, reg_t *argv) {
}
case K_FILEIO_UNLINK : {
Common::String name = s->_segMan->getString(argv[1]);
+ Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager();
+ // SQ4 floppy prepends /\ to the filenames
+ if (name.hasPrefix("/\\")) {
+ name.deleteChar(0);
+ name.deleteChar(0);
+ }
+
+ // Special case for SQ4 floppy: This game has hardcoded names for all of its
+ // savegames, and they are all named "sq4sg.xxx", where xxx is the slot. We just
+ // take the slot number here, and delete the appropriate save game
+ if (name.hasPrefix("sq4sg.")) {
+ // Special handling for SQ4... get the slot number and construct the save game name
+ int slotNum = atoi(name.c_str() + name.size() - 3);
+ Common::Array<SavegameDesc> saves;
+ listSavegames(saves);
+ int savedir_nr = saves[slotNum].id;
+ name = ((Sci::SciEngine*)g_engine)->getSavegameName(savedir_nr);
+ saveFileMan->removeSavefile(name);
+ } else {
+ const Common::String wrappedName = ((Sci::SciEngine*)g_engine)->wrapFilename(name);
+ saveFileMan->removeSavefile(wrappedName);
+ }
+
debug(3, "K_FILEIO_UNLINK(%s)", name.c_str());
- Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager();
- const Common::String wrappedName = ((Sci::SciEngine*)g_engine)->wrapFilename(name);
- saveFileMan->removeSavefile(wrappedName);
// TODO/FIXME: Should we return something (like, a bool indicating
// whether deleting the save succeeded or failed)?
break;