From cbc0d615bb189bfd197b7b21e00a80175469b368 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Wed, 15 Sep 2021 22:59:32 +0300 Subject: [PATCH] GROOVIE: Use the ScummVM save/load dialogs for the in-game menu --- engines/groovie/script.cpp | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/engines/groovie/script.cpp b/engines/groovie/script.cpp index 70ba473e9ed..e1f22f0b090 100644 --- a/engines/groovie/script.cpp +++ b/engines/groovie/script.cpp @@ -655,9 +655,9 @@ void Script::o_videofromref() { // 0x09 } break; - case 0x2420: // load from main menu + case 0x2420: // load from the main menu if (_version == kGroovieT7G && !ConfMan.getBool("originalsaveload")) { - GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false); + GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false); int slot = dialog->runModalWithCurrentTarget(); delete dialog; @@ -673,6 +673,42 @@ void Script::o_videofromref() { // 0x09 } break; + case 0x2422: // save from the in-game menu + if (_version == kGroovieT7G && !ConfMan.getBool("originalsaveload")) { + GUI::MessageDialog saveOrLoad(_("Would you like to save or restore a game?"), _("Save"), _("Restore")); + + int choice = saveOrLoad.runModal(); + if (choice == GUI::kMessageOK) { + // Save + GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true); + int slot = dialog->runModalWithCurrentTarget(); + Common::String saveName = dialog->getResultString(); + delete dialog; + + if (slot >= 0) { + directGameSave(slot, saveName); + } + + _currentInstruction = 0x17C8; // back to game menu + } else { + // Restore + GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false); + int slot = dialog->runModalWithCurrentTarget(); + delete dialog; + + if (slot >= 0) { + _currentInstruction = 0x287; + _bitflags = 0; + setVariable(0x19, slot); + } else { + _currentInstruction = 0x17C8; // back to game menu + } + } + + return; + } + break; + default: break; }