diff --git a/src/settings.cpp b/src/settings.cpp --- a/src/settings.cpp +++ b/src/settings.cpp @@ -57,6 +57,8 @@ #include "ini_type.h" #include "ai/ai_config.hpp" #include "ai/ai.hpp" +#include "game/game_config.hpp" +#include "game/game.hpp" #include "ship.h" #include "smallmap_gui.h" #include "roadveh.h" @@ -1362,6 +1364,32 @@ static void AILoadConfig(IniFile *ini, c } } +static void GameLoadConfig(IniFile *ini, const char *grpname) +{ + IniGroup *group = ini->GetGroup(grpname); + IniItem *item; + + /* Clean any configured GameScript */ + GameConfig::GetConfig(GameConfig::SSS_FORCE_NEWGAME)->Change(NULL); + + /* If no group exists, return */ + if (group == NULL) return; + + item = group->item; + if (item == NULL) return; + + GameConfig *config = GameConfig::GetConfig(AIConfig::SSS_FORCE_NEWGAME); + + config->Change(item->name); + if (!config->HasScript()) { + if (strcmp(item->name, "none") != 0) { + DEBUG(script, 0, "The GameScript by the name '%s' was no longer found, and removed from the list.", item->name); + return; + } + } + if (item->value != NULL) config->StringToSettings(item->value); +} + /** * Load a GRF configuration * @param ini The configuration to read from. @@ -1480,6 +1508,28 @@ static void AISaveConfig(IniFile *ini, c } } +static void GameSaveConfig(IniFile *ini, const char *grpname) +{ + IniGroup *group = ini->GetGroup(grpname); + + if (group == NULL) return; + group->Clear(); + + GameConfig *config = GameConfig::GetConfig(AIConfig::SSS_FORCE_NEWGAME); + const char *name; + char value[1024]; + config->SettingsToString(value, lengthof(value)); + + if (config->HasScript()) { + name = config->GetName(); + } else { + name = "none"; + } + + IniItem *item = new IniItem(group, name, strlen(name)); + item->SetValue(value); +} + /** * Save the version of OpenTTD to the ini file. * @param ini the ini to write to @@ -1563,6 +1613,7 @@ void LoadFromConfig(bool minimal) _grfconfig_static = GRFLoadConfig(ini, "newgrf-static", true); NewsDisplayLoadConfig(ini, "news_display"); AILoadConfig(ini, "ai_players"); + GameLoadConfig(ini, "game_scripts"); PrepareOldDiffCustom(); IniLoadSettings(ini, _gameopt_settings, "gameopt", &_settings_newgame); @@ -1589,6 +1640,7 @@ void SaveToConfig() GRFSaveConfig(ini, "newgrf-static", _grfconfig_static); NewsDisplaySaveConfig(ini, "news_display"); AISaveConfig(ini, "ai_players"); + GameSaveConfig(ini, "game_scripts"); SaveVersionInConfig(ini); ini->SaveToDisk(_config_file); delete ini;