From 9ef1c5f4c36ddfc4f0d61e79d1645964f3bfda2c Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 5 Dec 2012 19:36:04 +0000 Subject: [PATCH] (svn r24789) -Add: Separate setting to control the default settings of newly added scripts and random AIs. --- src/ai/ai_config.cpp | 2 +- src/lang/english.txt | 6 ++++++ src/saveload/afterload.cpp | 5 +++++ src/saveload/saveload.cpp | 3 ++- src/script/script_info.cpp | 2 +- src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/gameopt_settings.ini | 1 + src/table/settings.ini | 15 +++++++++++++++ 9 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp index 7241eab0a0..3b3c09a429 100644 --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -82,7 +82,7 @@ int AIConfig::GetSetting(const char *name) const SettingValueList::const_iterator it = this->settings.find(name); if (it == this->settings.end()) { assert(strcmp("start_date", name) == 0); - switch (GetGameSettings().difficulty.diff_level) { + switch (GetGameSettings().script.settings_profile) { case SP_EASY: return AI::START_NEXT_EASY; case SP_MEDIUM: return AI::START_NEXT_MEDIUM; case SP_HARD: return AI::START_NEXT_HARD; diff --git a/src/lang/english.txt b/src/lang/english.txt index 33564eebb1..4a36b3b8c2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1409,6 +1409,12 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Enabling this s STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Disable ships for computer: {STRING2} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Enabling this setting makes building ships impossible for a computer player +STR_CONFIG_SETTING_AI_PROFILE :Default settings profile: {STRING2} +STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Choose which settings profile to use for random AIs or for initial values when adding a new AI or Game Script +STR_CONFIG_SETTING_AI_PROFILE_EASY :Easy +STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Medium +STR_CONFIG_SETTING_AI_PROFILE_HARD :Hard + STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Allow AIs in multiplayer: {STRING2} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Allow AI computer players to participate in multiplayer games STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING2} diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 5d02ed1d11..5937318aa2 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2755,6 +2755,11 @@ bool AfterLoadGame() } } + if (IsSavegameVersionBefore(178)) { + /* Initialise script settings profile */ + _settings_game.script.settings_profile = IsInsideMM(_settings_game.difficulty.diff_level, SP_BEGIN, SP_END) ? _settings_game.difficulty.diff_level : (uint)SP_MEDIUM; + } + /* Road stops is 'only' updating some caches */ AfterLoadRoadStops(); AfterLoadLabelMaps(); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 1e64c83f50..7d74798bdb 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -241,8 +241,9 @@ * 175 24136 * 176 24446 * 177 24619 + * 178 TODO */ -extern const uint16 SAVEGAME_VERSION = 177; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 178; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index 94c977225f..a1db9e13e0 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -293,7 +293,7 @@ int ScriptInfo::GetSettingDefaultValue(const char *name) const for (ScriptConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { if (strcmp((*it).name, name) != 0) continue; /* The default value depends on the difficulty level */ - switch (GetGameSettings().difficulty.diff_level) { + switch (GetGameSettings().script.settings_profile) { case SP_EASY: return (*it).easy_value; case SP_MEDIUM: return (*it).medium_value; case SP_HARD: return (*it).hard_value; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index ee21d8d280..938106b686 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1845,6 +1845,7 @@ static SettingEntry _settings_economy[] = { static SettingsPage _settings_economy_page = {_settings_economy, lengthof(_settings_economy)}; static SettingEntry _settings_ai_npc[] = { + SettingEntry("script.settings_profile"), SettingEntry("ai.ai_in_multiplayer"), SettingEntry("ai.ai_disable_veh_train"), SettingEntry("ai.ai_disable_veh_roadveh"), diff --git a/src/settings_type.h b/src/settings_type.h index 00bb56654b..934e44733c 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -288,6 +288,7 @@ struct AISettings { /** Settings related to scripts. */ struct ScriptSettings { + uint8 settings_profile; ///< difficulty profile to set initial settings of scripts, esp. random AIs uint32 script_max_opcode_till_suspend; ///< max opcode calls till scripts will suspend }; diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini index 71bc685025..10373c9650 100644 --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -23,6 +23,7 @@ static const char *_savegame_date = "long|short|iso"; static const char *_server_langs = "ANY|ENGLISH|GERMAN|FRENCH|BRAZILIAN|BULGARIAN|CHINESE|CZECH|DANISH|DUTCH|ESPERANTO|FINNISH|HUNGARIAN|ICELANDIC|ITALIAN|JAPANESE|KOREAN|LITHUANIAN|NORWEGIAN|POLISH|PORTUGUESE|ROMANIAN|RUSSIAN|SLOVAK|SLOVENIAN|SPANISH|SWEDISH|TURKISH|UKRAINIAN|AFRIKAANS|CROATIAN|CATALAN|ESTONIAN|GALICIAN|GREEK|LATVIAN"; #endif /* ENABLE_NETWORK */ static const char *_osk_activation = "disabled|double|single|immediately"; +static const char *_settings_profiles = "easy|medium|hard"; static const SettingDesc _gameopt_settings[] = { /* In version 4 a new difficulty setting has been added to the difficulty settings, diff --git a/src/table/settings.ini b/src/table/settings.ini index a9caf1caa7..fa1ab0754c 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1298,6 +1298,21 @@ cat = SC_EXPERT length = 1 to = 106 +[SDT_OMANY] +base = GameSettings +var = script.settings_profile +type = SLE_UINT8 +from = 178 +guiflags = SGF_MULTISTRING +def = SP_EASY +min = SP_EASY +max = SP_HARD +full = _settings_profiles +str = STR_CONFIG_SETTING_AI_PROFILE +strhelp = STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT +strval = STR_CONFIG_SETTING_AI_PROFILE_EASY +cat = SC_BASIC + [SDT_BOOL] base = GameSettings var = ai.ai_in_multiplayer