Add: allow loading heightmaps from command-line (#11870)
If you want to load a file from tar, you have to give the file inside the tar in order for it to work: <tar-file>/<dir-in-tar>/<file>.png
This commit is contained in:
@@ -165,7 +165,7 @@ static void ShowHelp()
|
||||
" -t year = Set starting year\n"
|
||||
" -d [[fac=]lvl[,...]]= Debug mode\n"
|
||||
" -e = Start Editor\n"
|
||||
" -g [savegame] = Start new/save game immediately\n"
|
||||
" -g [savegame|scenario|heightmap] = Start new/savegame/scenario/heightmap immediately\n"
|
||||
" -G seed = Set random seed\n"
|
||||
" -n host[:port][#company]= Join network game\n"
|
||||
" -p password = Password to join server\n"
|
||||
@@ -577,21 +577,37 @@ int openttd_main(int argc, char *argv[])
|
||||
if (mgo.opt != nullptr) SetDebugString(mgo.opt, ShowInfoI);
|
||||
break;
|
||||
}
|
||||
case 'e': _switch_mode = (_switch_mode == SM_LOAD_GAME || _switch_mode == SM_LOAD_SCENARIO ? SM_LOAD_SCENARIO : SM_EDITOR); break;
|
||||
case 'e':
|
||||
/* Allow for '-e' before or after '-g'. */
|
||||
switch (_switch_mode) {
|
||||
case SM_MENU: _switch_mode = SM_EDITOR; break;
|
||||
case SM_LOAD_GAME: _switch_mode = SM_LOAD_SCENARIO; break;
|
||||
case SM_START_HEIGHTMAP: _switch_mode = SM_LOAD_HEIGHTMAP; break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
case 'g':
|
||||
if (mgo.opt != nullptr) {
|
||||
_file_to_saveload.name = mgo.opt;
|
||||
bool is_scenario = _switch_mode == SM_EDITOR || _switch_mode == SM_LOAD_SCENARIO;
|
||||
_switch_mode = is_scenario ? SM_LOAD_SCENARIO : SM_LOAD_GAME;
|
||||
_file_to_saveload.SetMode(SLO_LOAD, is_scenario ? FT_SCENARIO : FT_SAVEGAME, DFT_GAME_FILE);
|
||||
|
||||
/* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */
|
||||
auto t = _file_to_saveload.name.find_last_of('.');
|
||||
if (t != std::string::npos) {
|
||||
auto [ft, _] = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, _file_to_saveload.name.substr(t));
|
||||
if (ft != FIOS_TYPE_INVALID) _file_to_saveload.SetMode(ft);
|
||||
std::string extension = std::filesystem::path(_file_to_saveload.name).extension().string();
|
||||
auto [ft, _] = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, extension);
|
||||
if (ft == FIOS_TYPE_INVALID) {
|
||||
std::tie(ft, _) = FiosGetScenarioListCallback(SLO_LOAD, _file_to_saveload.name, extension);
|
||||
}
|
||||
if (ft == FIOS_TYPE_INVALID) {
|
||||
std::tie(ft, _) = FiosGetHeightmapListCallback(SLO_LOAD, _file_to_saveload.name, extension);
|
||||
}
|
||||
|
||||
/* Allow for '-e' before or after '-g'. */
|
||||
switch (GetAbstractFileType(ft)) {
|
||||
case FT_SAVEGAME: _switch_mode = (_switch_mode == SM_EDITOR ? SM_LOAD_SCENARIO : SM_LOAD_GAME); break;
|
||||
case FT_SCENARIO: _switch_mode = (_switch_mode == SM_EDITOR ? SM_LOAD_SCENARIO : SM_LOAD_GAME); break;
|
||||
case FT_HEIGHTMAP: _switch_mode = (_switch_mode == SM_EDITOR ? SM_LOAD_HEIGHTMAP : SM_START_HEIGHTMAP); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
_file_to_saveload.SetMode(SLO_LOAD, GetAbstractFileType(ft), GetDetailedFileType(ft));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1131,6 +1147,8 @@ void SwitchToMode(SwitchMode new_mode)
|
||||
case SM_LOAD_HEIGHTMAP: // Load heightmap from scenario editor
|
||||
SetLocalCompany(OWNER_NONE);
|
||||
|
||||
_game_mode = GM_EDITOR;
|
||||
|
||||
GenerateWorld(GWM_HEIGHTMAP, 1 << _settings_game.game_creation.map_x, 1 << _settings_game.game_creation.map_y);
|
||||
GenerateSavegameId();
|
||||
MarkWholeScreenDirty();
|
||||
|
Reference in New Issue
Block a user