From 57e57c49cee547a9b48ebdedeea6b8bc2d9892fa Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 7 Nov 2008 19:43:01 +0000 Subject: Saving a game from GMM is now working for the SAGA engine, though the description is not set correctly yet svn-id: r34932 --- engines/dialogs.cpp | 7 ++++--- engines/saga/detection.cpp | 18 +++++++++++++++++- engines/saga/saga.h | 1 + gui/launcher.cpp | 8 +------- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/engines/dialogs.cpp b/engines/dialogs.cpp index 40cec8e10b..c1d9499583 100644 --- a/engines/dialogs.cpp +++ b/engines/dialogs.cpp @@ -118,6 +118,7 @@ MainMenuDialog::MainMenuDialog(Engine *engine) _aboutDialog = new GUI::AboutDialog(); _optionsDialog = new ConfigDialog(); _loadDialog = new GUI::SaveLoadChooser("Load game:", "Load"); + _loadDialog->setSaveMode(false); _saveDialog = new GUI::SaveLoadChooser("Save game:", "Save"); _saveDialog->setSaveMode(true); } @@ -155,7 +156,6 @@ void MainMenuDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat } break; case kSaveCmd: - /* { Common::String gameId = ConfMan.get("gameid"); @@ -165,7 +165,9 @@ void MainMenuDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat int slot = _saveDialog->runModal(plugin, ConfMan.getActiveDomainName()); if (slot >= 0) { - Common::String result(_saveDialog->getResultString()); + // FIXME: at this point, the save list's selItem is -1! + //Common::String result(_saveDialog->getResultString()); + Common::String result; char *desc; if (result.empty()) { // If the user was lazy and entered no save name, come up with a default name. @@ -180,7 +182,6 @@ void MainMenuDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat } } - */ break; case kOptionsCmd: _optionsDialog->runModal(); diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp index c49661a052..b7503278e7 100644 --- a/engines/saga/detection.cpp +++ b/engines/saga/detection.cpp @@ -187,9 +187,10 @@ SaveStateList SagaMetaEngine::listSaves(const char *target) const { sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..) SaveStateList saveList; + int slotNum = 0; for (Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { // Obtain the last 2 digits of the filename, since they correspond to the save slot - int slotNum = atoi(file->c_str() + file->size() - 2); + slotNum = atoi(file->c_str() + file->size() - 2); if (slotNum >= 0 && slotNum <= 99) { Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str()); @@ -199,10 +200,20 @@ SaveStateList SagaMetaEngine::listSaves(const char *target) const { in->read(saveDesc, SAVE_TITLE_SIZE); saveList.push_back(SaveStateDescriptor(slotNum, saveDesc)); delete in; + } else { + // handle gaps + *saveDesc = 0; + saveList.push_back(SaveStateDescriptor(slotNum, saveDesc)); } } } + // Fill the rest of the list with empty slots + *saveDesc = 0; + for (int i = slotNum + 1; i <= 99; i++) { + saveList.push_back(SaveStateDescriptor(i, saveDesc)); + } + return saveList; } @@ -265,4 +276,9 @@ Common::Error SagaEngine::loadGameState(int slot) { return Common::kNoError; // TODO: return success/failure } +Common::Error SagaEngine::saveGameState(int slot, const char *desc) { + save(calcSaveFileName((uint)slot), desc); + return Common::kNoError; // TODO: return success/failure +} + } // End of namespace Saga diff --git a/engines/saga/saga.h b/engines/saga/saga.h index 6563cd30d6..592336fe98 100644 --- a/engines/saga/saga.h +++ b/engines/saga/saga.h @@ -653,6 +653,7 @@ public: int getDisplayWidth() const; int getDisplayHeight() const; Common::Error loadGameState(int slot); + Common::Error saveGameState(int slot, const char *desc); bool canLoadGameStateCurrently(); bool canSaveGameStateCurrently(); const GameDisplayInfo &getDisplayInfo(); diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 621a664a89..a60aa41510 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -565,7 +565,6 @@ void SaveLoadChooser::handleCommand(CommandSender *sender, uint32 cmd, uint32 da case GUI::kListSelectionChangedCmd: { updateSelection(true); - /* if (_list->isEditable()) { _list->startEditMode(); } @@ -574,7 +573,6 @@ void SaveLoadChooser::handleCommand(CommandSender *sender, uint32 cmd, uint32 da // because we then just assign a default name. _chooseButton->setEnabled(selItem >= 0 && (_list->isEditable() || !getResultString().empty())); _chooseButton->draw(); - */ } break; case kDelCmd: if (selItem >= 0 && _delSupport) { @@ -742,11 +740,7 @@ void SaveLoadChooser::updateSaveList() { StringList saveNames; for (SaveStateList::const_iterator x = _saveList.begin(); x != _saveList.end(); ++x) { - Common::String description = x->save_slot(); - description += ". "; - description += x->description(); - - saveNames.push_back(description); + saveNames.push_back(x->description()); } _list->setList(saveNames); } -- cgit v1.2.3