diff options
author | Christopher Page | 2008-08-15 20:49:56 +0000 |
---|---|---|
committer | Christopher Page | 2008-08-15 20:49:56 +0000 |
commit | 603f0a2f8c9a57f48c6a1d4b3ae7f12ed7e4d25f (patch) | |
tree | 587cc8b9bcbfc36a2c0abcf5c1949874f0b70718 /engines/sword1/sword1.cpp | |
parent | 7e49b2e8a1ab7a856795bffdd1cee44ab5d114e9 (diff) | |
download | scummvm-rg350-603f0a2f8c9a57f48c6a1d4b3ae7f12ed7e4d25f.tar.gz scummvm-rg350-603f0a2f8c9a57f48c6a1d4b3ae7f12ed7e4d25f.tar.bz2 scummvm-rg350-603f0a2f8c9a57f48c6a1d4b3ae7f12ed7e4d25f.zip |
Fixes for Sword1 engine loading from launcher
svn-id: r33915
Diffstat (limited to 'engines/sword1/sword1.cpp')
-rw-r--r-- | engines/sword1/sword1.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp index de346a42dc..1a7ae87f66 100644 --- a/engines/sword1/sword1.cpp +++ b/engines/sword1/sword1.cpp @@ -199,12 +199,20 @@ PluginError SwordMetaEngine::createInstance(OSystem *syst, Engine **engine) cons SaveStateList SwordMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); SaveStateList saveList; + + Common::String pattern = "SAVEGAME.???"; + Common::StringList filenames = saveFileMan->listSavefiles(pattern.c_str()); + sort(filenames.begin(), filenames.end()); + Common::StringList::const_iterator file = filenames.begin(); + Common::InSaveFile *in = saveFileMan->openForLoading("SAVEGAME.INF"); if (in) { uint8 stop; char saveDesc[32]; - int slotNum = 0; do { + // Obtain the last digit of the filename, since they correspond to the save slot + int slotNum = atoi(file->c_str() + file->size() - 1); + uint pos = 0; do { stop = in->readByte(); @@ -218,8 +226,8 @@ SaveStateList SwordMetaEngine::listSaves(const char *target) const { } } while ((stop != 10) && (stop != 255) && (!in->eos())); if (saveDesc[0] != 0) { - saveList.push_back(SaveStateDescriptor(slotNum, saveDesc, "SAVEGAME.INF")); - slotNum++; + saveList.push_back(SaveStateDescriptor(slotNum, saveDesc, *file)); + file++; } } while ((stop != 255) && (!in->eos())); } @@ -688,7 +696,7 @@ int SwordEngine::go() { int saveSlot = ConfMan.getInt("save_slot"); // Savegames are numbered starting from 1 in the dialog window, // but their filenames are numbered starting from 0. - if (saveSlot > 0 && _control->restoreGameFromFile(saveSlot - 1)) { + if (saveSlot >= 0 && _control->savegamesExist() &&_control->restoreGameFromFile(saveSlot)) { _control->doRestore(); } else if (_control->savegamesExist()) { _systemVars.controlPanelMode = CP_NEWGAME; |