summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBerbe <4251220+Berbe@users.noreply.github.com>2019-03-05 05:04:39 +0100
committerMichael Lutz <michi@icosahedron.de>2020-09-24 19:17:18 +0200
commit8f3d1ec970520d5a7d775e173ca1df2dc6867686 (patch)
treecc1bbfe3dc779b15428e10ef7513e7a3ec8c2eda
parent3ad4a6e3dae62395be100ef44ea498f301ae98b1 (diff)
downloadopenttd-8f3d1ec970520d5a7d775e173ca1df2dc6867686.tar.xz
Feature: Improve restart command
When the restart command is issued, a normal map is always spawned. This improvement takes into account the current state of _file_to_saveload to check if a savegame/scenario/heightmap was previously loaded, and loads the same resource again.
-rw-r--r--src/openttd.cpp20
-rw-r--r--src/openttd.h23
2 files changed, 30 insertions, 13 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 94c6f4a98..337bcda4d 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -1032,7 +1032,22 @@ void SwitchToMode(SwitchMode new_mode)
MakeNewEditorWorld();
break;
- case SM_RESTARTGAME: // Restart --> 'Random game' with current settings
+ case SM_RESTARTGAME: // Restart --> Current settings preserved
+ if (_file_to_saveload.abstract_ftype == FT_SAVEGAME || _file_to_saveload.abstract_ftype == FT_SCENARIO) {
+ /* Restart current savegame/scenario */
+ _switch_mode = _game_mode == GM_EDITOR ? SM_LOAD_SCENARIO : SM_LOAD_GAME;
+ SwitchToMode(_switch_mode);
+ break;
+ } else if (_file_to_saveload.abstract_ftype == FT_HEIGHTMAP) {
+ /* Restart current heightmap */
+ _switch_mode = _game_mode == GM_EDITOR ? SM_LOAD_HEIGHTMAP : SM_RESTART_HEIGHTMAP;
+ SwitchToMode(_switch_mode);
+ break;
+ }
+ /* No break here, to enter the next case:
+ * Restart --> 'Random game' with current settings */
+ FALLTHROUGH;
+
case SM_NEWGAME: // New Game --> 'Random game'
if (_network_server) {
seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "Random Map");
@@ -1066,11 +1081,12 @@ void SwitchToMode(SwitchMode new_mode)
break;
}
+ case SM_RESTART_HEIGHTMAP: // Load a heightmap and start a new game from it with current settings
case SM_START_HEIGHTMAP: // Load a heightmap and start a new game from it
if (_network_server) {
seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "%s (Heightmap)", _file_to_saveload.title);
}
- MakeNewGame(true, true);
+ MakeNewGame(true, new_mode == SM_START_HEIGHTMAP);
break;
case SM_LOAD_HEIGHTMAP: // Load heightmap from scenario editor
diff --git a/src/openttd.h b/src/openttd.h
index 6b7401cca..664963a5d 100644
--- a/src/openttd.h
+++ b/src/openttd.h
@@ -23,17 +23,18 @@ enum GameMode {
/** Mode which defines what mode we're switching to. */
enum SwitchMode {
SM_NONE,
- SM_NEWGAME, ///< New Game --> 'Random game'.
- SM_RESTARTGAME, ///< Restart --> 'Random game' with current settings.
- SM_EDITOR, ///< Switch to scenario editor.
- SM_LOAD_GAME, ///< Load game, Play Scenario.
- SM_MENU, ///< Switch to game intro menu.
- SM_SAVE_GAME, ///< Save game.
- SM_SAVE_HEIGHTMAP, ///< Save heightmap.
- SM_GENRANDLAND, ///< Generate random land within scenario editor.
- SM_LOAD_SCENARIO, ///< Load scenario from scenario editor.
- SM_START_HEIGHTMAP, ///< Load a heightmap and start a new game from it.
- SM_LOAD_HEIGHTMAP, ///< Load heightmap from scenario editor.
+ SM_NEWGAME, ///< New Game --> 'Random game'.
+ SM_RESTARTGAME, ///< Restart --> 'Random game' with current settings.
+ SM_EDITOR, ///< Switch to scenario editor.
+ SM_LOAD_GAME, ///< Load game, Play Scenario.
+ SM_MENU, ///< Switch to game intro menu.
+ SM_SAVE_GAME, ///< Save game.
+ SM_SAVE_HEIGHTMAP, ///< Save heightmap.
+ SM_GENRANDLAND, ///< Generate random land within scenario editor.
+ SM_LOAD_SCENARIO, ///< Load scenario from scenario editor.
+ SM_START_HEIGHTMAP, ///< Load a heightmap and start a new game from it.
+ SM_LOAD_HEIGHTMAP, ///< Load heightmap from scenario editor.
+ SM_RESTART_HEIGHTMAP, ///< Load a heightmap and start a new game from it with current settings.
};
/** Display Options */