[Scummvm-git-logs] scummvm master -> 2d09358030146d0205e7818d88d6a80d9cec9383

dreammaster paulfgilbert at gmail.com
Wed Feb 5 03:05:36 UTC 2020


This automated email contains information about 11 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6c419d7d32 ENGINES: Adding new save wrappers to better support extended saves
31f4bc74ab GRIFFON: Update save code to use new engine save methods
866cc57d64 ULTIMA: Move methods for showing save/restore dialogs into Engine class
6850c92617 CRUISE: Use Engine save/load dialog methods
cc689fd16a CGE: Use Engine save/load dialog methods
b7797bc475 CGE2: Use Engine save/load dialog methods
0186bbae31 TITANIC: Use Engine save/load dialog methods
055a9effc2 ENGINES: Adding an isAutosave flag to the new saveGameStream method
318c7003fc GRIFFON: Implement autosaves
4b8d509cfe ENGINES: Added GUI message to save/load dialog methods if unavailable
2d09358030 ENGINES: Change load/save game dialog message to OSD


Commit: 6c419d7d3286e02f8f2ccd19134f0e82140bc75d
    https://github.com/scummvm/scummvm/commit/6c419d7d3286e02f8f2ccd19134f0e82140bc75d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
ENGINES: Adding new save wrappers to better support extended saves

Changed paths:
    engines/engine.cpp
    engines/engine.h


diff --git a/engines/engine.cpp b/engines/engine.cpp
index 5f2c5ef..a289fb1 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -31,6 +31,7 @@
 #include "engines/engine.h"
 #include "engines/dialogs.h"
 #include "engines/util.h"
+#include "engines/metaengine.h"
 
 #include "common/config-manager.h"
 #include "common/events.h"
@@ -40,6 +41,7 @@
 #include "common/error.h"
 #include "common/list.h"
 #include "common/memstream.h"
+#include "common/savefile.h"
 #include "common/scummsys.h"
 #include "common/taskbar.h"
 #include "common/textconsole.h"
@@ -631,8 +633,25 @@ void Engine::flipMute() {
 }
 
 Common::Error Engine::loadGameState(int slot) {
-	// Do nothing by default
-	return Common::kNoError;
+	Common::InSaveFile *saveFile = _saveFileMan->openForLoading(getSaveStateName(slot));
+
+	if (!saveFile)
+		return Common::kReadingFailed;
+
+	Common::Error result = loadGameStream(saveFile);
+	if (result.getCode() == Common::kNoError) {
+		ExtendedSavegameHeader header;
+		if (MetaEngine::readSavegameHeader(saveFile, &header))
+			setTotalPlayTime(header.playtime);
+	}
+
+	delete saveFile;
+	return result;
+}
+
+Common::Error Engine::loadGameStream(Common::SeekableReadStream *stream) {
+	// Default to returning an error when not implemented
+	return Common::kReadingFailed;
 }
 
 bool Engine::canLoadGameStateCurrently() {
@@ -641,8 +660,25 @@ bool Engine::canLoadGameStateCurrently() {
 }
 
 Common::Error Engine::saveGameState(int slot, const Common::String &desc) {
-	// Do nothing by default
-	return Common::kNoError;
+	Common::OutSaveFile *saveFile = _saveFileMan->openForSaving(getSaveStateName(slot));
+
+	if (!saveFile)
+		return Common::kWritingFailed;
+
+	Common::Error result = saveGameStream(saveFile);
+	if (result.getCode() == Common::kNoError) {
+		MetaEngine::appendExtendedSave(saveFile, getTotalPlayTime() / 1000, desc);
+
+		saveFile->finalize();
+	}
+
+	delete saveFile;
+	return result;
+}
+
+Common::Error Engine::saveGameStream(Common::WriteStream *stream) {
+	// Default to returning an error when not implemented
+	return Common::kWritingFailed;
 }
 
 bool Engine::canSaveGameStateCurrently() {
diff --git a/engines/engine.h b/engines/engine.h
index 6f2c7fd..8e9ce9f 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -41,6 +41,8 @@ class EventManager;
 class SaveFileManager;
 class TimerManager;
 class FSNode;
+class SeekableReadStream;
+class WriteStream;
 }
 namespace GUI {
 class Debugger;
@@ -203,6 +205,13 @@ public:
 	virtual void flipMute();
 
 	/**
+	 * Generates the savegame filename
+	 */
+	virtual Common::String getSaveStateName(int slot) const {
+		return Common::String::format("%s.%03d", _targetName.c_str(), slot);
+	}
+
+	/**
 	 * Load a game state.
 	 * @param slot	the slot from which a savestate should be loaded
 	 * @return returns kNoError on success, else an error code.
@@ -210,6 +219,13 @@ public:
 	virtual Common::Error loadGameState(int slot);
 
 	/**
+	 * Load a game state.
+	 * @param stream	the stream to load the savestate from
+	 * @return returns kNoError on success, else an error code.
+	 */
+	virtual Common::Error loadGameStream(Common::SeekableReadStream *stream);
+
+	/**
 	 * Sets the game slot for a savegame to be loaded after global
 	 * main menu execution. This is to avoid loading a savegame from
 	 * inside the menu loop which causes bugs like #2822778.
@@ -232,6 +248,13 @@ public:
 	virtual Common::Error saveGameState(int slot, const Common::String &desc);
 
 	/**
+	 * Save a game state.
+	 * @param stream	The write stream to save the savegame data to
+	 * @return returns kNoError on success, else an error code.
+	 */
+	virtual Common::Error saveGameStream(Common::WriteStream *stream);
+
+	/**
 	 * Indicates whether a game state can be saved.
 	 */
 	virtual bool canSaveGameStateCurrently();


Commit: 31f4bc74ab2ec4db17a24c594a00a6c6ed739101
    https://github.com/scummvm/scummvm/commit/31f4bc74ab2ec4db17a24c594a00a6c6ed739101
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
GRIFFON: Update save code to use new engine save methods

Changed paths:
    engines/griffon/dialogs.cpp
    engines/griffon/griffon.h
    engines/griffon/saveload.cpp


diff --git a/engines/griffon/dialogs.cpp b/engines/griffon/dialogs.cpp
index be21015..f955a26 100644
--- a/engines/griffon/dialogs.cpp
+++ b/engines/griffon/dialogs.cpp
@@ -630,7 +630,7 @@ void GriffonEngine::saveLoadNew() {
 						}
 					}
 					if (lowerLock && tickPause < _ticks) {
-						if ((curCol == 1) && saveState(curRow - 1)) {
+						if ((curCol == 1) && saveGameState(curRow - 1, "").getCode() == Common::kNoError) {
 							_secStart += _secsInGame;
 							_secsInGame = 0;
 							lowerLock = false;
@@ -638,7 +638,7 @@ void GriffonEngine::saveLoadNew() {
 							curRow = 0;
 
 							renderSaveStates();
-						} else if ((curCol == 2) && loadState(curRow - 1)) {
+						} else if ((curCol == 2) && loadGameState(curRow - 1).getCode() == Common::kNoError) {
 
 							return;
 						}
diff --git a/engines/griffon/griffon.h b/engines/griffon/griffon.h
index febc9e6..80798cf 100644
--- a/engines/griffon/griffon.h
+++ b/engines/griffon/griffon.h
@@ -413,10 +413,12 @@ private:
 	void loadObjectDB();
 
 	// saveload.cpp
-	Common::String makeSaveGameName(int slot);
-	int loadState(int slotnum);
+	virtual Common::String getSaveStateName(int slot) const override;
 	int loadPlayer(int slotnum);
-	int saveState(int slotnum);
+	virtual Common::Error loadGameState(int slot) override;
+	virtual Common::Error saveGameState(int slot, const Common::String &desc) override;
+	virtual Common::Error loadGameStream(Common::SeekableReadStream *file) override;
+	virtual Common::Error saveGameStream(Common::WriteStream *file) override;
 
 	// sound.cpp
 	void setChannelVolume(int channel, int volume);
@@ -429,13 +431,6 @@ private:
 	void setupAudio();
 	void updateMusic();
 
-	Common::Error loadGameState(int slot) {
-		return loadState(slot) ? Common::kNoError : Common::kUnknownError;
-	}
-	Common::Error saveGameState(int slot, const Common::String &description) {
-		return saveState(slot) ? Common::kNoError : Common::kUnknownError;
-	}
-
 	virtual bool canLoadGameStateCurrently() { return true; }
 	virtual bool canSaveGameStateCurrently() { return _gameMode == kGameModePlay; }
 	virtual bool hasFeature(EngineFeature f) const;
diff --git a/engines/griffon/saveload.cpp b/engines/griffon/saveload.cpp
index 3052005..117f519 100644
--- a/engines/griffon/saveload.cpp
+++ b/engines/griffon/saveload.cpp
@@ -55,16 +55,26 @@ namespace Griffon {
 		sscanf(line.c_str(), A, B); \
 	} while(0)
 
-Common::String GriffonEngine::makeSaveGameName(int slot) {
+Common::String GriffonEngine::getSaveStateName(int slot) const {
 	return (_targetName + Common::String::format(".s%02d", slot));
 }
 
-int GriffonEngine::loadState(int slotnum) {
-	Common::String filename = makeSaveGameName(slotnum);
-	Common::InSaveFile *file;
-	if (!(file = _saveFileMan->openForLoading(filename)))
-		return 0;
+Common::Error GriffonEngine::loadGameState(int slot) {
+	Common::Error result = Engine::loadGameState(slot);
+	if (result.getCode() == Common::kNoError) {
+		_saveSlot = slot;
+		_gameMode = kGameModeLoadGame;
+	}
 
+	return result;
+}
+
+Common::Error GriffonEngine::saveGameState(int slot, const Common::String &desc) {
+	Common::String saveDesc = Common::String::format("Level: %d Map: %d", _player.level, _curMap);
+	return Engine::saveGameState(slot, saveDesc);
+}
+
+Common::Error GriffonEngine::loadGameStream(Common::SeekableReadStream *file) {
 	INPUT("%i", &_player.level);
 
 	if (_player.level > 0) {
@@ -123,18 +133,15 @@ int GriffonEngine::loadState(int slotnum) {
 
 		INPUT("%f", &_player.spellStrength);
 
-		_saveSlot = slotnum;
-		_gameMode = kGameModeLoadGame;
-
-		return 1; // success
+		return Common::kNoError;
 	}
 
-	return 0; // failure
+	return Common::kReadingFailed;
 }
 
 /* fill PLAYERTYPE _playera; */
 int GriffonEngine::loadPlayer(int slotnum) {
-	Common::String filename = makeSaveGameName(slotnum);
+	Common::String filename = getSaveStateName(slotnum);
 	Common::InSaveFile *file;
 
 	_playera.level = 0;
@@ -186,15 +193,7 @@ int GriffonEngine::loadPlayer(int slotnum) {
 	return 0; // fail
 }
 
-int GriffonEngine::saveState(int slotnum) {
-	Common::String filename = makeSaveGameName(slotnum);
-	Common::OutSaveFile *file;
-
-	if (!(file = _saveFileMan->openForSaving(filename))) {
-		warning("Cannot open %s for saving", filename.c_str());
-		return 0;
-	}
-
+Common::Error GriffonEngine::saveGameStream(Common::WriteStream *file) {
 	PRINT("%i", _player.level);
 
 	if (_player.level > 0) {
@@ -254,13 +253,7 @@ int GriffonEngine::saveState(int slotnum) {
 
 	drawView();
 
-	Common::String desc = Common::String::format("Level: %d Map: %d", _player.level, _curMap);
-
-	MetaEngine::appendExtendedSave(file, (_secStart + _secsInGame) * 1000, desc);
-
-	file->finalize();
-
-	return 1; // success
+	return Common::kNoError;
 }
 
 } // end of namespace Griffon


Commit: 866cc57d64ecade7bfda89bfb2fce58cf2b51864
    https://github.com/scummvm/scummvm/commit/866cc57d64ecade7bfda89bfb2fce58cf2b51864
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
ULTIMA: Move methods for showing save/restore dialogs into Engine class

Changed paths:
    engines/engine.cpp
    engines/engine.h
    engines/ultima/nuvie/keybinding/key_actions.cpp
    engines/ultima/nuvie/menus/game_menu_dialog.cpp
    engines/ultima/shared/engine/ultima.cpp
    engines/ultima/shared/engine/ultima.h
    engines/ultima/ultima1/actions/quit.cpp
    engines/ultima/ultima1/u1gfx/view_char_gen.cpp
    engines/ultima/ultima1/u1gfx/view_title.cpp
    engines/ultima/ultima8/ultima8.cpp
    engines/ultima/ultima8/ultima8.h


diff --git a/engines/engine.cpp b/engines/engine.cpp
index a289fb1..519de1b 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -56,6 +56,7 @@
 #include "gui/debugger.h"
 #include "gui/dialog.h"
 #include "gui/message.h"
+#include "gui/saveload.h"
 
 #include "audio/mixer.h"
 
@@ -686,6 +687,43 @@ bool Engine::canSaveGameStateCurrently() {
 	return false;
 }
 
+bool Engine::loadGameDialog() {
+	if (!canLoadGameStateCurrently())
+		return false;
+
+	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false);
+	pauseEngine(true);
+	int slotNum = dialog->runModalWithCurrentTarget();
+	pauseEngine(false);
+	delete dialog;
+
+	if (slotNum != -1)
+		return loadGameState(slotNum).getCode() == Common::kNoError;
+
+	return false;
+}
+
+bool Engine::saveGameDialog() {
+	if (!canSaveGameStateCurrently())
+		return false;
+
+	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
+	pauseEngine(true);
+	int slotNum = dialog->runModalWithCurrentTarget();
+	pauseEngine(false);
+
+	Common::String desc = dialog->getResultString();
+	if (desc.empty())
+		desc = dialog->createDefaultSaveDescription(slotNum);
+
+	delete dialog;
+
+	if (slotNum != -1)
+		return saveGameState(slotNum, desc).getCode() == Common::kNoError;
+
+	return false;
+}
+
 void Engine::quitGame() {
 	Common::Event event;
 
diff --git a/engines/engine.h b/engines/engine.h
index 8e9ce9f..2babc50 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -259,6 +259,16 @@ public:
 	 */
 	virtual bool canSaveGameStateCurrently();
 
+	/**
+	 * Shows the ScummVM save dialog, allowing users to save their game
+	 */
+	bool saveGameDialog();
+
+	/**
+	 * Shows the ScummVM Restore dialog, allowing users to load a game
+	 */
+	bool loadGameDialog();
+
 protected:
 
 	/**
diff --git a/engines/ultima/nuvie/keybinding/key_actions.cpp b/engines/ultima/nuvie/keybinding/key_actions.cpp
index 0314b52..f029151 100644
--- a/engines/ultima/nuvie/keybinding/key_actions.cpp
+++ b/engines/ultima/nuvie/keybinding/key_actions.cpp
@@ -313,7 +313,7 @@ void ActionPartyMode(int const *params) {
 }
 
 void ActionSaveDialog(int const *params) {
-	g_engine->saveGame();
+	g_engine->saveGameDialog();
 }
 
 void ActionLoadLatestSave(int const *params) {
diff --git a/engines/ultima/nuvie/menus/game_menu_dialog.cpp b/engines/ultima/nuvie/menus/game_menu_dialog.cpp
index efccfb7..701bf38 100644
--- a/engines/ultima/nuvie/menus/game_menu_dialog.cpp
+++ b/engines/ultima/nuvie/menus/game_menu_dialog.cpp
@@ -146,9 +146,9 @@ GUI_status GameMenuDialog::callback(uint16 msg, GUI_CallBack *caller, void *data
 	if (caller == this) {
 		close_dialog();
 	} else if (caller == save_button) {
-		g_engine->saveGame();
+		g_engine->saveGameDialog();
 	} else if (caller == load_button) {
-		g_engine->loadGame();
+		g_engine->loadGameDialog();
 	} else if (caller == video_button) {
 		GUI_Widget *video_dialog;
 		video_dialog = (GUI_Widget *) new VideoDialog(this);
diff --git a/engines/ultima/shared/engine/ultima.cpp b/engines/ultima/shared/engine/ultima.cpp
index decf3cc..ce6b55a 100644
--- a/engines/ultima/shared/engine/ultima.cpp
+++ b/engines/ultima/shared/engine/ultima.cpp
@@ -28,7 +28,6 @@
 #include "common/debug-channels.h"
 #include "common/file.h"
 #include "common/translation.h"
-#include "gui/saveload.h"
 
 namespace Ultima {
 namespace Shared {
@@ -107,35 +106,6 @@ Common::FSNode UltimaEngine::getGameDirectory() const {
 	return Common::FSNode(ConfMan.get("path"));
 }
 
-bool UltimaEngine::loadGame() {
-	if (!canLoadGameStateCurrently())
-		return false;
-
-	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false);
-	int slotNum = dialog->runModalWithCurrentTarget();
-	delete dialog;
-
-	if (slotNum != -1)
-		return loadGameState(slotNum).getCode() == Common::kNoError;
-
-	return false;
-}
-
-bool UltimaEngine::saveGame() {
-	if (!canSaveGameStateCurrently())
-		return false;
-
-	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-	int slotNum = dialog->runModalWithCurrentTarget();
-	Common::String saveName = dialog->getResultString();
-	delete dialog;
-
-	if (slotNum != -1)
-		return saveGameState(slotNum, saveName).getCode() == Common::kNoError;
-
-	return false;
-}
-
 UltimaMetaEngine *UltimaEngine::getMetaEngine() const {
 	return g_metaEngine;
 }
diff --git a/engines/ultima/shared/engine/ultima.h b/engines/ultima/shared/engine/ultima.h
index 403de9d..7ea0695 100644
--- a/engines/ultima/shared/engine/ultima.h
+++ b/engines/ultima/shared/engine/ultima.h
@@ -150,16 +150,6 @@ public:
 	Common::FSNode getGameDirectory() const;
 
 	/**
-	 * Shows the ScummVM save dialog, allowing users to save their game
-	 */
-	virtual bool saveGame();
-
-	/**
-	 * Shows the ScummVM Restore dialog, allowing users to restore a game
-	 */
-	virtual bool loadGame();
-
-	/**
 	 * Indicates whether a game state can be loaded.
 	 * @param isAutosave	Flags whether it's an autosave check
 	 */
diff --git a/engines/ultima/ultima1/actions/quit.cpp b/engines/ultima/ultima1/actions/quit.cpp
index 539bb61..d67fe6f 100644
--- a/engines/ultima/ultima1/actions/quit.cpp
+++ b/engines/ultima/ultima1/actions/quit.cpp
@@ -37,7 +37,7 @@ END_MESSAGE_MAP()
 bool Quit::QuitMsg(CQuitMsg &msg) {
 	Ultima1Game *game = static_cast<Ultima1Game *>(getGame());
 	addInfoMsg(game->_res->ACTION_NAMES[16]);
-	g_vm->saveGame();
+	g_vm->saveGameDialog();
 
 	return true;
 }
diff --git a/engines/ultima/ultima1/u1gfx/view_char_gen.cpp b/engines/ultima/ultima1/u1gfx/view_char_gen.cpp
index 50edaf2..8d10e07 100644
--- a/engines/ultima/ultima1/u1gfx/view_char_gen.cpp
+++ b/engines/ultima/ultima1/u1gfx/view_char_gen.cpp
@@ -398,7 +398,7 @@ bool ViewCharacterGeneration::save() {
 	_character->_armour[1]->_quantity = 1;			// Leather armour
 	_character->_equippedSpell = 0;
 
-	return g_vm->saveGame();
+	return g_vm->saveGameDialog();
 }
 
 } // End of namespace U1Gfx
diff --git a/engines/ultima/ultima1/u1gfx/view_title.cpp b/engines/ultima/ultima1/u1gfx/view_title.cpp
index a662e18..8666d6d 100644
--- a/engines/ultima/ultima1/u1gfx/view_title.cpp
+++ b/engines/ultima/ultima1/u1gfx/view_title.cpp
@@ -304,7 +304,7 @@ bool ViewTitle::KeypressMsg(CKeypressMsg &msg) {
 			if (msg._keyState.keycode == Common::KEYCODE_a) {
 				setView("CharGen");
 			} else {
-				if (!g_vm->loadGame())
+				if (!g_vm->loadGameDialog())
 					textCursor->setVisible(true);
 			}
 		}
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 6eb6fda..85be648 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1291,33 +1291,6 @@ void Ultima8Engine::writeSaveInfo(ODataSource *ods) {
 	game->writeSaveInfo(ods);
 }
 
-bool Ultima8Engine::saveGame() {
-	if (!canSaveGameStateCurrently(false))
-		return false;
-
-	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-	bool result = false;
-
-	pauseEngine(true);
-	int slot = dialog->runModalWithCurrentTarget();
-	pauseEngine(false);
-
-	if (slot >= 0) {
-		Common::String desc = dialog->getResultString();
-
-		if (desc.empty()) {
-			// create our own description for the saved game, the user didn't enter it
-			desc = dialog->createDefaultSaveDescription(slot);
-		}
-
-		// Save the game
-		result = saveGameState(slot, desc, false).getCode() == Common::kNoError;
-	}
-
-	delete dialog;
-	return result;
-}
-
 bool Ultima8Engine::canSaveGameStateCurrently(bool isAutosave) {
 	if (desktopGump->FindGump<ModalGump>())
 		// Can't save when a modal gump is open
@@ -1563,25 +1536,6 @@ void Ultima8Engine::syncSoundSettings() {
 		midiPlayer->setVolume(_mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType));
 }
 
-bool Ultima8Engine::loadGame() {
-	if (!canLoadGameStateCurrently())
-		return false;
-
-	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
-	bool result = false;
-
-	pauseEngine(true);
-	int slot = dialog->runModalWithCurrentTarget();
-	pauseEngine(false);
-
-	if (slot >= 0) {
-		result = loadGameState(slot).getCode() == Common::kNoError;
-	}
-
-	delete dialog;
-	return result;
-}
-
 Common::Error Ultima8Engine::loadGameState(int slot) {
 	return loadGame(Std::string::format("@save/%d", slot)) ?
 		Common::kNoError : Common::kReadingFailed;
@@ -1849,7 +1803,7 @@ void Ultima8Engine::ConCmd_saveGame(const Console::ArgvType &argv) {
 		// Save a game with the given name into the quicksave slot
 		Ultima8Engine::get_instance()->saveGame("@save/1", argv[1]);
 	} else {
-		Ultima8Engine::get_instance()->saveGame();
+		Ultima8Engine::get_instance()->saveGameDialog();
 	}
 }
 
@@ -1859,7 +1813,7 @@ void Ultima8Engine::ConCmd_loadGame(const Console::ArgvType &argv) {
 		// it just needs to be present to differentiate from showing the GUI load dialog
 		Ultima8Engine::get_instance()->loadGame("@save/1");
 	} else {
-		Ultima8Engine::get_instance()->loadGame();
+		Ultima8Engine::get_instance()->loadGameDialog();
 	}
 }
 
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 350ebe0..2a2e65f 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -337,16 +337,12 @@ public:
 	 */
 	virtual Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override;
 
-	bool saveGame() override;
-
 	//! save a game
 	//! \param filename the file to save to
 	//! \return true if succesful
 	bool saveGame(Std::string filename, Std::string desc,
 	              bool ignore_modals = false);
 
-	bool loadGame() override;
-
 	//! load a game
 	//! \param filename the savegame to load
 	//! \return true if succesful.


Commit: 6850c92617b8c1061dda22d3e817903c81affba3
    https://github.com/scummvm/scummvm/commit/6850c92617b8c1061dda22d3e817903c81affba3
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
CRUISE: Use Engine save/load dialog methods

Changed paths:
  R engines/cruise/POTFILES
    engines/cruise/menu.cpp


diff --git a/engines/cruise/POTFILES b/engines/cruise/POTFILES
deleted file mode 100644
index e3b25bd..0000000
--- a/engines/cruise/POTFILES
+++ /dev/null
@@ -1 +0,0 @@
-engines/cruise/menu.cpp
diff --git a/engines/cruise/menu.cpp b/engines/cruise/menu.cpp
index 1abc7df..295eef4 100644
--- a/engines/cruise/menu.cpp
+++ b/engines/cruise/menu.cpp
@@ -27,7 +27,6 @@
 #include "engines/metaengine.h"
 #include "gui/saveload.h"
 #include "common/system.h"
-#include "common/translation.h"
 
 namespace Cruise {
 
@@ -207,29 +206,10 @@ int processMenu(menuStruct *pMenu) {
 }
 
 static void handleSaveLoad(bool saveFlag) {
-	GUI::SaveLoadChooser *dialog;
 	if (saveFlag)
-		dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
+		_vm->saveGameDialog();
 	else
-		dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false);
-
-	int slot = dialog->runModalWithCurrentTarget();
-
-	if (slot >= 0) {
-		if (!saveFlag)
-			_vm->loadGameState(slot);
-		else {
-			Common::String result(dialog->getResultString());
-			if (result.empty()) {
-				// If the user was lazy and entered no save name, come up with a default name.
-				result = Common::String::format("Save %d", slot + 1);
-			}
-
-			_vm->saveGameState(slot, result);
-		}
-	}
-
-	delete dialog;
+		_vm->loadGameDialog();
 }
 
 int playerMenu(int menuX, int menuY) {


Commit: cc689fd16a36ed9858158351c4e9c0c5de746e55
    https://github.com/scummvm/scummvm/commit/cc689fd16a36ed9858158351c4e9c0c5de746e55
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
CGE: Use Engine save/load dialog methods

Changed paths:
  R engines/cge/POTFILES
    engines/cge/events.cpp


diff --git a/engines/cge/POTFILES b/engines/cge/POTFILES
deleted file mode 100644
index f8aef49..0000000
--- a/engines/cge/POTFILES
+++ /dev/null
@@ -1,3 +0,0 @@
-engines/cge/detection.cpp
-engines/cge/events.cpp
-
diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp
index 0cc32ce..5291ced 100644
--- a/engines/cge/events.cpp
+++ b/engines/cge/events.cpp
@@ -28,7 +28,6 @@
 #include "gui/saveload.h"
 #include "common/config-manager.h"
 #include "common/events.h"
-#include "common/translation.h"
 #include "engines/advancedDetector.h"
 #include "cge/events.h"
 #include "cge/events.h"
@@ -68,25 +67,10 @@ bool Keyboard::getKey(Common::Event &event) {
 			_vm->_commandHandler->addCommand(kCmdInf, 1, kShowScummVMVersion + i, NULL);
 		return false;
 	case Common::KEYCODE_F5:
-		if (_vm->canSaveGameStateCurrently()) {
-			GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-			int16 savegameId = dialog->runModalWithCurrentTarget();
-			Common::String savegameDescription = dialog->getResultString();
-			delete dialog;
-
-			if (savegameId != -1)
-				_vm->saveGameState(savegameId, savegameDescription);
-			}
+		_vm->saveGameDialog();
 		return false;
 	case Common::KEYCODE_F7:
-		if (_vm->canLoadGameStateCurrently()) {
-			GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
-			int16 savegameId = dialog->runModalWithCurrentTarget();
-			delete dialog;
-
-			if (savegameId != -1)
-				_vm->loadGameState(savegameId);
-		}
+		_vm->loadGameDialog();
 		return false;
 	case Common::KEYCODE_d:
 		if (event.kbd.flags & Common::KBD_CTRL) {


Commit: b7797bc475da25156bd3a5a655b9a3bcfe45732a
    https://github.com/scummvm/scummvm/commit/b7797bc475da25156bd3a5a655b9a3bcfe45732a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
CGE2: Use Engine save/load dialog methods

Changed paths:
  R engines/cge2/POTFILES
    engines/cge2/events.cpp


diff --git a/engines/cge2/POTFILES b/engines/cge2/POTFILES
deleted file mode 100644
index 3bff325..0000000
--- a/engines/cge2/POTFILES
+++ /dev/null
@@ -1,2 +0,0 @@
-engines/cge2/detection.cpp
-engines/cge2/events.cpp
diff --git a/engines/cge2/events.cpp b/engines/cge2/events.cpp
index 3493363..5ab7f59 100644
--- a/engines/cge2/events.cpp
+++ b/engines/cge2/events.cpp
@@ -60,25 +60,10 @@ bool Keyboard::getKey(Common::Event &event) {
 			_vm->_commandHandler->addCommand(kCmdInf, 1, kShowScummVMVersion + i, NULL);
 		return false;
 	case Common::KEYCODE_F5:
-		if (_vm->canSaveGameStateCurrently()) {
-			GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-			int16 savegameId = dialog->runModalWithCurrentTarget();
-			Common::String savegameDescription = dialog->getResultString();
-			delete dialog;
-
-			if (savegameId != -1)
-				_vm->saveGameState(savegameId, savegameDescription);
-		}
+		_vm->saveGameDialog();
 		return false;
 	case Common::KEYCODE_F7:
-		if (_vm->canLoadGameStateCurrently()) {
-			GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
-			int16 savegameId = dialog->runModalWithCurrentTarget();
-			delete dialog;
-
-			if (savegameId != -1)
-				_vm->loadGameState(savegameId);
-		}
+		_vm->loadGameDialog();
 		return false;
 	case Common::KEYCODE_d:
 		if (event.kbd.flags & Common::KBD_CTRL) {


Commit: 0186bbae31fc644a38e57edd9b45547b2b87d60c
    https://github.com/scummvm/scummvm/commit/0186bbae31fc644a38e57edd9b45547b2b87d60c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
TITANIC: Use Engine save/load dialog methods

Changed paths:
    engines/titanic/main_game_window.cpp
    engines/titanic/titanic.cpp
    engines/titanic/titanic.h


diff --git a/engines/titanic/main_game_window.cpp b/engines/titanic/main_game_window.cpp
index 2b026f9..ab2c8be7 100644
--- a/engines/titanic/main_game_window.cpp
+++ b/engines/titanic/main_game_window.cpp
@@ -359,10 +359,10 @@ void CMainGameWindow::keyDown(Common::KeyState keyState) {
 
 	} else if (keyState.keycode == Common::KEYCODE_F5) {
 		// Show the GMM save dialog
-		g_vm->showScummVMSaveDialog();
+		g_vm->saveGameDialog();
 	} else if (keyState.keycode == Common::KEYCODE_F7) {
 		// Show the GMM load dialog
-		g_vm->showScummVMRestoreDialog();
+		g_vm->loadGameDialog();
 	} else if (_inputAllowed) {
 		_gameManager->_inputTranslator.keyDown(keyState);
 	}
diff --git a/engines/titanic/titanic.cpp b/engines/titanic/titanic.cpp
index 3318459..4bde64c 100644
--- a/engines/titanic/titanic.cpp
+++ b/engines/titanic/titanic.cpp
@@ -46,7 +46,6 @@
 #include "common/debug-channels.h"
 #include "common/events.h"
 #include "common/scummsys.h"
-#include "common/translation.h"
 #include "engines/util.h"
 #include "graphics/scaler.h"
 #include "graphics/screen.h"
@@ -276,47 +275,4 @@ void TitanicEngine::syncSoundSettings() {
 	}
 }
 
-
-void TitanicEngine::showScummVMSaveDialog() {
-	if (!canSaveGameStateCurrently())
-		return;
-
-	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-
-	pauseEngine(true);
-	int slot = dialog->runModalWithCurrentTarget();
-	pauseEngine(false);
-
-	if (slot >= 0) {
-		Common::String desc = dialog->getResultString();
-
-		if (desc.empty()) {
-			// create our own description for the saved game, the user didn't enter it
-			desc = dialog->createDefaultSaveDescription(slot);
-		}
-
-		// Save the game
-		saveGameState(slot, desc);
-	}
-
-	delete dialog;
-}
-
-void TitanicEngine::showScummVMRestoreDialog() {
-	if (!canLoadGameStateCurrently())
-		return;
-
-	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
-
-	pauseEngine(true);
-	int slot = dialog->runModalWithCurrentTarget();
-	pauseEngine(false);
-
-	if (slot >= 0) {
-		loadGameState(slot);
-	}
-
-	delete dialog;
-}
-
 } // End of namespace Titanic
diff --git a/engines/titanic/titanic.h b/engines/titanic/titanic.h
index b879d49..a796719 100644
--- a/engines/titanic/titanic.h
+++ b/engines/titanic/titanic.h
@@ -194,16 +194,6 @@ public:
 	 * and if it exists, returns it's description
 	 */
 	CString getSavegameName(int slot);
-
-	/**
-	 * Shows the ScummVM GMM save dialog
-	 */
-	void showScummVMSaveDialog();
-
-	/**
-	 * Shows the ScummVM GMM load dialog
-	 */
-	void showScummVMRestoreDialog();
 };
 
 extern TitanicEngine *g_vm;


Commit: 055a9effc2a04c0e5f10910c1aa66769320cf670
    https://github.com/scummvm/scummvm/commit/055a9effc2a04c0e5f10910c1aa66769320cf670
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
ENGINES: Adding an isAutosave flag to the new saveGameStream method

This is primarily future-proofing. Many games either show a message
or do some other UI action like closing an open game menu, and
obviously that should only be done when a savegame created by the
user is done, rather than for regular autosaves. By making this a
flag, when engines override saveGameStream, they'll be able to
tell if it's an autosave, and only do UI changes if not

Changed paths:
    engines/engine.cpp
    engines/engine.h
    engines/griffon/griffon.h
    engines/griffon/saveload.cpp
    engines/ultima/shared/early/ultima_early.cpp
    engines/ultima/shared/early/ultima_early.h
    engines/ultima/shared/engine/ultima.h


diff --git a/engines/engine.cpp b/engines/engine.cpp
index 519de1b..d2f339c 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -661,12 +661,16 @@ bool Engine::canLoadGameStateCurrently() {
 }
 
 Common::Error Engine::saveGameState(int slot, const Common::String &desc) {
+	return saveGameState(slot, desc, false);
+}
+
+Common::Error Engine::saveGameState(int slot, const Common::String &desc, bool isAutosave) {
 	Common::OutSaveFile *saveFile = _saveFileMan->openForSaving(getSaveStateName(slot));
 
 	if (!saveFile)
 		return Common::kWritingFailed;
 
-	Common::Error result = saveGameStream(saveFile);
+	Common::Error result = saveGameStream(saveFile, isAutosave);
 	if (result.getCode() == Common::kNoError) {
 		MetaEngine::appendExtendedSave(saveFile, getTotalPlayTime() / 1000, desc);
 
@@ -677,7 +681,7 @@ Common::Error Engine::saveGameState(int slot, const Common::String &desc) {
 	return result;
 }
 
-Common::Error Engine::saveGameStream(Common::WriteStream *stream) {
+Common::Error Engine::saveGameStream(Common::WriteStream *stream, bool isAutosave) {
 	// Default to returning an error when not implemented
 	return Common::kWritingFailed;
 }
diff --git a/engines/engine.h b/engines/engine.h
index 2babc50..b819721 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -249,10 +249,20 @@ public:
 
 	/**
 	 * Save a game state.
+	 * @param slot	the slot into which the savestate should be stored
+	 * @param desc	a description for the savestate, entered by the user
+	 * @param isAutosave	Expected to be true if an autosave is being created
+	 * @return returns kNoError on success, else an error code.
+	 */
+	virtual Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave);
+
+	/**
+	 * Save a game state.
 	 * @param stream	The write stream to save the savegame data to
+	 * @param isAutosave	Expected to be true if an autosave is being created
 	 * @return returns kNoError on success, else an error code.
 	 */
-	virtual Common::Error saveGameStream(Common::WriteStream *stream);
+	virtual Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false);
 
 	/**
 	 * Indicates whether a game state can be saved.
diff --git a/engines/griffon/griffon.h b/engines/griffon/griffon.h
index 80798cf..2565cdc 100644
--- a/engines/griffon/griffon.h
+++ b/engines/griffon/griffon.h
@@ -418,7 +418,7 @@ private:
 	virtual Common::Error loadGameState(int slot) override;
 	virtual Common::Error saveGameState(int slot, const Common::String &desc) override;
 	virtual Common::Error loadGameStream(Common::SeekableReadStream *file) override;
-	virtual Common::Error saveGameStream(Common::WriteStream *file) override;
+	virtual Common::Error saveGameStream(Common::WriteStream *file, bool autoSave) override;
 
 	// sound.cpp
 	void setChannelVolume(int channel, int volume);
diff --git a/engines/griffon/saveload.cpp b/engines/griffon/saveload.cpp
index 117f519..59e98c9 100644
--- a/engines/griffon/saveload.cpp
+++ b/engines/griffon/saveload.cpp
@@ -193,7 +193,7 @@ int GriffonEngine::loadPlayer(int slotnum) {
 	return 0; // fail
 }
 
-Common::Error GriffonEngine::saveGameStream(Common::WriteStream *file) {
+Common::Error GriffonEngine::saveGameStream(Common::WriteStream *file, bool) {
 	PRINT("%i", _player.level);
 
 	if (_player.level > 0) {
diff --git a/engines/ultima/shared/early/ultima_early.cpp b/engines/ultima/shared/early/ultima_early.cpp
index bc12672..476e48f 100644
--- a/engines/ultima/shared/early/ultima_early.cpp
+++ b/engines/ultima/shared/early/ultima_early.cpp
@@ -125,33 +125,17 @@ Game *UltimaEarlyEngine::createGame() const {
 	}
 }
 
-Common::Error UltimaEarlyEngine::loadGameState(int slot) {
-	Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(
-		Common::String::format("%s.%.3d", _targetName.c_str(), slot));
-	if (!saveFile)
-		return Common::kReadingFailed;
-
+Common::Error UltimaEarlyEngine::loadGameStream(Common::SeekableReadStream *stream) {
 	// Read in the game's data
-	Common::Serializer s(saveFile, nullptr);
+	Common::Serializer s(stream, nullptr);
 	_game->synchronize(s);
-
-	delete saveFile;
 	return Common::kNoError;
 }
 
-Common::Error UltimaEarlyEngine::saveGameState(int slot, const Common::String &desc, bool isAutosave) {
-	Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(
-		Common::String::format("%s.%.3d", _targetName.c_str(), slot));
-	if (!saveFile)
-		return Common::kCreatingFileFailed;
-
+Common::Error UltimaEarlyEngine::saveGameStream(Common::WriteStream *stream, bool) {
 	// Write out the game's data
-	Common::Serializer s(nullptr, saveFile);
+	Common::Serializer s(nullptr, stream);
 	_game->synchronize(s);
-
-	saveFile->finalize();
-	delete saveFile;
-
 	return Common::kNoError;
 }
 
diff --git a/engines/ultima/shared/early/ultima_early.h b/engines/ultima/shared/early/ultima_early.h
index fefb35e..f52869a 100644
--- a/engines/ultima/shared/early/ultima_early.h
+++ b/engines/ultima/shared/early/ultima_early.h
@@ -120,16 +120,12 @@ public:
 	/**
 	 * Load a savegame
 	 */
-	virtual Common::Error loadGameState(int slot) override;
+	virtual Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
 
 	/**
 	 * Save a game state.
-	 * @param slot	the slot into which the savestate should be stored
-	 * @param desc	a description for the savestate, entered by the user
-	 * @param isAutosave If true, autosave is being created
-	 * @return returns kNoError on success, else an error code.
 	 */
-	virtual Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override;
+	virtual Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
 
 	/*
 	 * Creates a new hierarchy for the game, that contains all the logic for playing that particular game.
diff --git a/engines/ultima/shared/engine/ultima.h b/engines/ultima/shared/engine/ultima.h
index 7ea0695..f0c71d7 100644
--- a/engines/ultima/shared/engine/ultima.h
+++ b/engines/ultima/shared/engine/ultima.h
@@ -174,26 +174,6 @@ public:
 	virtual bool canSaveGameStateCurrently() override {
 		return canSaveGameStateCurrently(false);
 	}
-
-	/**
-	 * Save a game state.
-	 * @param slot	the slot into which the savestate should be stored
-	 * @param desc	a description for the savestate, entered by the user
-	 * @param isAutosave If true, autosave is being created
-	 * @return returns kNoError on success, else an error code.
-	 */
-	virtual Common::Error saveGameState(int slot, const Common::String &desc) override {
-		return saveGameState(slot, desc, false);
-	}
-
-	/**
-	 * Save a game state.
-	 * @param slot	the slot into which the savestate should be stored
-	 * @param desc	a description for the savestate, entered by the user
-	 * @param isAutosave If true, autosave is being created
-	 * @return returns kNoError on success, else an error code.
-	 */
-	virtual Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) = 0;
 };
 
 extern UltimaEngine *g_ultima;


Commit: 318c7003fc4dae982d796b99fa434b9b455825a7
    https://github.com/scummvm/scummvm/commit/318c7003fc4dae982d796b99fa434b9b455825a7
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
GRIFFON: Implement autosaves

Changed paths:
  A engines/griffon/POTFILES
    engines/griffon/detection.cpp
    engines/griffon/dialogs.cpp
    engines/griffon/engine.cpp
    engines/griffon/griffon.cpp
    engines/griffon/griffon.h
    engines/griffon/saveload.cpp


diff --git a/engines/griffon/POTFILES b/engines/griffon/POTFILES
new file mode 100644
index 0000000..63a6c01
--- /dev/null
+++ b/engines/griffon/POTFILES
@@ -0,0 +1 @@
+engines/griffon/griffon.cpp
diff --git a/engines/griffon/detection.cpp b/engines/griffon/detection.cpp
index 02b2d5c..8c65573 100644
--- a/engines/griffon/detection.cpp
+++ b/engines/griffon/detection.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "base/plugins.h"
+#include "common/config-manager.h"
 #include "engines/advancedDetector.h"
 
 #include "griffon/griffon.h"
@@ -59,7 +60,9 @@ public:
 		return "Griffon Engine";
 	}
 
-	virtual int getMaximumSaveSlot() const { return 3; }
+	virtual int getMaximumSaveSlot() const {
+		return ConfMan.getInt("autosave_period") ? 4 : 3;
+	}
 
 	virtual const char *getOriginalCopyright() const {
 		return "The Griffon Legend (c) 2005 Syn9 (Daniel Kennedy)";
diff --git a/engines/griffon/dialogs.cpp b/engines/griffon/dialogs.cpp
index f955a26..84fd40e 100644
--- a/engines/griffon/dialogs.cpp
+++ b/engines/griffon/dialogs.cpp
@@ -630,7 +630,7 @@ void GriffonEngine::saveLoadNew() {
 						}
 					}
 					if (lowerLock && tickPause < _ticks) {
-						if ((curCol == 1) && saveGameState(curRow - 1, "").getCode() == Common::kNoError) {
+						if ((curCol == 1) && saveGameState(curRow - 1, "", false).getCode() == Common::kNoError) {
 							_secStart += _secsInGame;
 							_secsInGame = 0;
 							lowerLock = false;
diff --git a/engines/griffon/engine.cpp b/engines/griffon/engine.cpp
index 1f4b7cf..ae781b5 100644
--- a/engines/griffon/engine.cpp
+++ b/engines/griffon/engine.cpp
@@ -97,6 +97,7 @@ void GriffonEngine::mainLoop() {
 
 		checkTrigger();
 		checkInputs();
+		autoSaveCheck();
 
 		if (!_forcePause)
 			handleWalking();
diff --git a/engines/griffon/griffon.cpp b/engines/griffon/griffon.cpp
index 2383150..e869d7b 100644
--- a/engines/griffon/griffon.cpp
+++ b/engines/griffon/griffon.cpp
@@ -40,6 +40,7 @@
 #include "common/file.h"
 #include "common/fs.h"
 #include "common/system.h"
+#include "common/translation.h"
 #include "graphics/pixelformat.h"
 
 #include "engines/util.h"
@@ -60,6 +61,7 @@ GriffonEngine::GriffonEngine(OSystem *syst) : Engine(syst) {
 
 	_shouldQuit = false;
 	_gameMode = kGameModeIntro;
+	_lastAutosaveTime = g_system->getMillis();
 
 	_musicChannel = -1;
 	_menuChannel = -1;
@@ -183,4 +185,11 @@ Common::Error GriffonEngine::run() {
 	return Common::kNoError;
 }
 
+void GriffonEngine::autoSaveCheck() {
+	if (shouldPerformAutoSave(_lastAutosaveTime) && canSaveGameStateCurrently()) {
+		saveGameState(4, _("Autosave"), true);
+		_lastAutosaveTime = g_system->getMillis();
+	}
+}
+
 }
diff --git a/engines/griffon/griffon.h b/engines/griffon/griffon.h
index 2565cdc..ddee6b1 100644
--- a/engines/griffon/griffon.h
+++ b/engines/griffon/griffon.h
@@ -340,6 +340,7 @@ private:
 	Common::RandomSource *_rnd;
 	bool _shouldQuit;
 	int _gameMode;
+	uint32 _lastAutosaveTime;
 
 	Console *_console;
 
@@ -416,9 +417,10 @@ private:
 	virtual Common::String getSaveStateName(int slot) const override;
 	int loadPlayer(int slotnum);
 	virtual Common::Error loadGameState(int slot) override;
-	virtual Common::Error saveGameState(int slot, const Common::String &desc) override;
+	virtual Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override;
 	virtual Common::Error loadGameStream(Common::SeekableReadStream *file) override;
-	virtual Common::Error saveGameStream(Common::WriteStream *file, bool autoSave) override;
+	virtual Common::Error saveGameStream(Common::WriteStream *file, bool isAutosave) override;
+	void autoSaveCheck();
 
 	// sound.cpp
 	void setChannelVolume(int channel, int volume);
diff --git a/engines/griffon/saveload.cpp b/engines/griffon/saveload.cpp
index 59e98c9..d5067dd 100644
--- a/engines/griffon/saveload.cpp
+++ b/engines/griffon/saveload.cpp
@@ -69,9 +69,9 @@ Common::Error GriffonEngine::loadGameState(int slot) {
 	return result;
 }
 
-Common::Error GriffonEngine::saveGameState(int slot, const Common::String &desc) {
+Common::Error GriffonEngine::saveGameState(int slot, const Common::String &desc, bool isAutosave) {
 	Common::String saveDesc = Common::String::format("Level: %d Map: %d", _player.level, _curMap);
-	return Engine::saveGameState(slot, saveDesc);
+	return Engine::saveGameState(slot, isAutosave ? desc : saveDesc, isAutosave);
 }
 
 Common::Error GriffonEngine::loadGameStream(Common::SeekableReadStream *file) {


Commit: 4b8d509cfe82ea2a56b826d06ef21fe6d6ec6c5a
    https://github.com/scummvm/scummvm/commit/4b8d509cfe82ea2a56b826d06ef21fe6d6ec6c5a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
ENGINES: Added GUI message to save/load dialog methods if unavailable

Changed paths:
    engines/engine.cpp


diff --git a/engines/engine.cpp b/engines/engine.cpp
index d2f339c..f2bf7ad 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -692,8 +692,11 @@ bool Engine::canSaveGameStateCurrently() {
 }
 
 bool Engine::loadGameDialog() {
-	if (!canLoadGameStateCurrently())
+	if (!canLoadGameStateCurrently()) {
+		GUI::MessageDialog dialog(_("Loading game is currently unavailable"));
+		dialog.runModal();
 		return false;
+	}
 
 	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false);
 	pauseEngine(true);
@@ -708,8 +711,11 @@ bool Engine::loadGameDialog() {
 }
 
 bool Engine::saveGameDialog() {
-	if (!canSaveGameStateCurrently())
+	if (!canSaveGameStateCurrently()) {
+		GUI::MessageDialog dialog(_("Saving game is currently unavailable"));
+		dialog.runModal();
 		return false;
+	}
 
 	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
 	pauseEngine(true);


Commit: 2d09358030146d0205e7818d88d6a80d9cec9383
    https://github.com/scummvm/scummvm/commit/2d09358030146d0205e7818d88d6a80d9cec9383
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-04T19:05:26-08:00

Commit Message:
ENGINES: Change load/save game dialog message to OSD

Changed paths:
    engines/engine.cpp


diff --git a/engines/engine.cpp b/engines/engine.cpp
index f2bf7ad..30b304f 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -693,8 +693,7 @@ bool Engine::canSaveGameStateCurrently() {
 
 bool Engine::loadGameDialog() {
 	if (!canLoadGameStateCurrently()) {
-		GUI::MessageDialog dialog(_("Loading game is currently unavailable"));
-		dialog.runModal();
+		g_system->displayMessageOnOSD(_("Loading game is currently unavailable"));
 		return false;
 	}
 
@@ -712,8 +711,7 @@ bool Engine::loadGameDialog() {
 
 bool Engine::saveGameDialog() {
 	if (!canSaveGameStateCurrently()) {
-		GUI::MessageDialog dialog(_("Saving game is currently unavailable"));
-		dialog.runModal();
+		g_system->displayMessageOnOSD(_("Saving game is currently unavailable"));
 		return false;
 	}
 




More information about the Scummvm-git-logs mailing list