diff options
author | Berbe <4251220+Berbe@users.noreply.github.com> | 2019-03-05 05:04:39 +0100 |
---|---|---|
committer | Michael Lutz <michi@icosahedron.de> | 2020-09-24 19:17:18 +0200 |
commit | 8f3d1ec970520d5a7d775e173ca1df2dc6867686 (patch) | |
tree | cc1bbfe3dc779b15428e10ef7513e7a3ec8c2eda /src | |
parent | 3ad4a6e3dae62395be100ef44ea498f301ae98b1 (diff) | |
download | openttd-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/openttd.cpp | 20 | ||||
-rw-r--r-- | src/openttd.h | 23 |
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 */ |