52 #include "table/strings.h"
79 static const SettingTable _generic_setting_tables[] = {
88 _news_display_settings,
89 _pathfinding_settings,
93 return _generic_setting_tables;
101 static const SettingTable _private_setting_tables[] = {
102 _network_private_settings,
104 return _private_setting_tables;
112 static const SettingTable _secrets_setting_tables[] = {
113 _network_secrets_settings,
115 return _secrets_setting_tables;
118 typedef void SettingDescProc(
IniFile &ini,
const SettingTable &desc,
const char *grpname,
void *
object,
bool only_startup);
119 typedef void SettingDescProcList(
IniFile &ini,
const char *grpname,
StringList &list);
121 static bool IsSignedVarMemType(VarType vt)
138 inline static const IniGroupNameList list_group_names = {
142 "server_bind_addresses",
143 "server_authorized_keys",
144 "rcon_authorized_keys",
145 "admin_authorized_keys"
188 if (isdigit(*
str))
return std::strtoul(
str,
nullptr, 0);
191 for (
auto one :
many) {
192 if (one.size() == len && strncmp(one.c_str(),
str, len) == 0)
return idx;
207 if (strcmp(
str,
"true") == 0 || strcmp(
str,
"on") == 0 || strcmp(
str,
"1") == 0)
return true;
208 if (strcmp(
str,
"false") == 0 || strcmp(
str,
"off") == 0 || strcmp(
str,
"0") == 0)
return false;
228 while (*str ==
' ' || *str ==
'\t' || *str ==
'|') str++;
229 if (*str == 0)
break;
232 while (*s != 0 && *s !=
' ' && *s !=
'\t' && *s !=
'|') s++;
235 if (r == SIZE_MAX)
return r;
249 static std::optional<std::vector<uint32_t>>
ParseIntList(
const char *p)
252 std::vector<uint32_t> result;
258 if (!comma)
return std::nullopt;
268 unsigned long v = std::strtoul(p, &end, 0);
269 if (p == end)
return std::nullopt;
271 result.push_back(ClampTo<uint32_t>(v));
281 if (!result.empty() && !comma)
return std::nullopt;
294 static bool LoadIntList(
const char *str,
void *array,
int nelems, VarType type)
297 if (str ==
nullptr) {
298 memset(array, 0, nelems * elem_size);
303 if (!opt_items.has_value() || opt_items->size() != (
size_t)nelems)
return false;
305 char *p =
static_cast<char *
>(array);
306 for (
auto item : *opt_items) {
327 for (
size_t i = 0; i != this->
save.
length; i++) {
331 case SLE_VAR_I8: v = *(
const int8_t *)p; p += 1;
break;
332 case SLE_VAR_U8: v = *(
const uint8_t *)p; p += 1;
break;
333 case SLE_VAR_I16: v = *(
const int16_t *)p; p += 2;
break;
334 case SLE_VAR_U16: v = *(
const uint16_t *)p; p += 2;
break;
335 case SLE_VAR_I32: v = *(
const int32_t *)p; p += 4;
break;
336 case SLE_VAR_U32: v = *(
const uint32_t *)p; p += 4;
break;
337 default: NOT_REACHED();
339 if (i != 0) result +=
',';
340 result += std::to_string(v);
345 std::string OneOfManySettingDesc::FormatSingleValue(uint
id)
const
347 if (
id >= this->
many.size()) {
348 return std::to_string(
id);
350 return this->
many[id];
355 uint
id = (uint)this->
Read(
object);
356 return this->FormatSingleValue(
id);
361 uint bitmask = (uint)this->
Read(
object);
368 if (!result.empty()) result +=
'|';
369 result += this->FormatSingleValue(
id);
382 size_t val = std::strtoul(
str, &end, 0);
391 ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_TRAILING_CHARACTERS);
404 if (r != SIZE_MAX)
return r;
416 if (r != SIZE_MAX)
return r;
427 if (r.has_value())
return *r;
443 return this->get_title_cb !=
nullptr ? this->get_title_cb(*
this) : this->
str;
452 return this->get_help_cb !=
nullptr ? this->get_help_cb(*
this) : this->
str_help;
462 if (this->set_value_dparams_cb !=
nullptr) {
463 this->set_value_dparams_cb(*
this, first_param, value);
465 SetDParam(first_param++, value != 0 ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF);
485 this->
Write(
object, val);
517 }
else if (val < this->
min || val > (int32_t)this->
max) {
526 uint32_t uval = (uint32_t)val;
531 }
else if (uval < (uint)this->
min || uval > this->
max) {
533 uval = (uint32_t)this->
def;
541 default: NOT_REACHED();
576 if (this->
max_length == 0 || str.size() < this->max_length)
return;
581 std::string stdstr(str, 0, this->
max_length - 1);
614 static void IniLoadSettings(
IniFile &ini,
const SettingTable &settings_table,
const char *grpname,
void *
object,
bool only_startup)
619 for (
auto &desc : settings_table) {
622 if (sd->
startup != only_startup)
continue;
625 std::string s{ sd->
GetName() };
626 auto sc = s.find(
'.');
627 if (sc != std::string::npos) {
628 group = ini.
GetGroup(s.substr(0, sc));
629 if (group ==
nullptr) group = group_def;
630 s = s.substr(sc + 1);
636 if (group !=
nullptr) item = group->
GetItem(s);
637 if (item ==
nullptr && group != group_def && group_def !=
nullptr) {
642 if (item ==
nullptr) {
646 if (sc != std::string::npos) {
647 if (group = ini.
GetGroup(s.substr(0, sc)); group !=
nullptr) item = group->
GetItem(s.substr(sc + 1));
657 size_t val = (item ==
nullptr) ? this->
def : this->
ParseValue(item->
value.has_value() ? item->
value->c_str() :
"");
663 std::string str = (item ==
nullptr) ? this->
def : item->
value.value_or(
"");
665 this->
Write(
object, str);
670 const char *str = (item ==
nullptr) ? this->
def : item->
value.has_value() ? item->
value->c_str() :
nullptr;
696 IniGroup *group_def =
nullptr, *group;
698 for (
auto &desc : settings_table) {
706 std::string s{ sd->
GetName() };
707 auto sc = s.find(
'.');
708 if (sc != std::string::npos) {
710 s = s.substr(sc + 1);
716 IniItem &item = group->GetOrCreateItem(s);
728 if (IsSignedVarMemType(this->
save.
conv)) {
729 i = this->
Read(
object);
731 i = (uint32_t)this->
Read(
object);
733 return std::to_string(i);
738 bool val = this->
Read(
object) != 0;
739 return val ?
"true" :
"false";
745 int32_t object_value = this->
Read(
object);
746 return item_value == object_value;
751 int32_t object_value = this->
Read(
object);
752 return this->
def == object_value;
762 const std::string &str = this->
Read(
object);
770 return fmt::format(
"\"{}\"", str);
772 default: NOT_REACHED();
782 const std::string &str = this->
Read(
object);
783 return item->
value->compare(str) == 0;
788 const std::string &str = this->
Read(
object);
789 return this->
def == str;
828 if (group ==
nullptr)
return;
833 if (!item.
name.empty()) list.push_back(item.
name);
851 for (
const auto &iter : list) {
886 if (do_command && (this->
flags & SF_NO_NETWORK_SYNC))
return false;
890 (_game_mode == GM_NORMAL ||
940 static void AILoadConfig(
const IniFile &ini,
const char *grpname)
950 if (group ==
nullptr)
return;
958 if (item.
name !=
"none") {
959 Debug(script, 0,
"The AI by the name '{}' was no longer found, and removed from the list.", item.
name);
969 static void GameLoadConfig(
const IniFile &ini,
const char *grpname)
977 if (group ==
nullptr || group->
items.empty())
return;
985 if (item.
name !=
"none") {
986 Debug(script, 0,
"The GameScript by the name '{}' was no longer found, and removed from the list.", item.
name);
1000 if (
const IniItem *item = group->
GetItem(
"graphicsset"); item !=
nullptr && item->
value) BaseGraphics::ini_data.name = *item->
value;
1003 if (
const IniGroup *group = ini.
GetGroup(
"graphicsset"); group !=
nullptr) {
1005 if (
const IniItem *item = group->
GetItem(
"name"); item !=
nullptr && item->
value) BaseGraphics::ini_data.name = *item->
value;
1007 if (
const IniItem *item = group->
GetItem(
"shortname"); item !=
nullptr && item->
value && item->
value->size() == 8) {
1013 if (
const IniItem *item = group->
GetItem(
"extra_params"); item !=
nullptr && item->
value) {
1015 if (params.has_value()) {
1037 if (group ==
nullptr)
return nullptr;
1043 std::array<uint8_t, 4> grfid_buf;
1045 std::string_view item_name = item.
name;
1046 bool has_md5sum =
false;
1049 auto grfid_pos = item_name.find(
"|");
1050 if (grfid_pos != std::string_view::npos) {
1051 std::string_view grfid_str = item_name.substr(0, grfid_pos);
1054 item_name = item_name.substr(grfid_pos + 1);
1056 auto md5sum_pos = item_name.find(
"|");
1057 if (md5sum_pos != std::string_view::npos) {
1058 std::string_view md5sum_str = item_name.substr(0, md5sum_pos);
1061 if (has_md5sum) item_name = item_name.substr(md5sum_pos + 1);
1064 uint32_t grfid = grfid_buf[0] | (grfid_buf[1] << 8) | (grfid_buf[2] << 16) | (grfid_buf[3] << 24);
1067 if (s !=
nullptr) c =
new GRFConfig(*s);
1071 if (s !=
nullptr) c =
new GRFConfig(*s);
1075 std::string filename = std::string(item_name);
1077 if (c ==
nullptr) c =
new GRFConfig(filename);
1080 if (item.
value.has_value() && !item.
value->empty()) {
1082 if (params.has_value()) {
1083 c->SetParams(params.value());
1093 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND);
1095 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_UNSAFE);
1097 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_SYSTEM);
1099 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE);
1101 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN);
1111 bool duplicate =
false;
1112 for (
const GRFConfig *gc = first; gc !=
nullptr; gc = gc->
next) {
1146 if (group ==
nullptr)
return IFV_0;
1148 auto version_number = group->
GetItem(
"ini_version");
1150 if (version_number ==
nullptr || !version_number->value.has_value())
return IFV_0;
1152 uint32_t version = 0;
1153 std::from_chars(version_number->value->data(), version_number->value->data() + version_number->value->size(), version);
1158 static void AISaveConfig(
IniFile &ini,
const char *grpname)
1178 static void GameSaveConfig(
IniFile &ini,
const char *grpname)
1214 if (used_set ==
nullptr)
return;
1222 const GRFConfig *extra_cfg = used_set->GetExtraConfig();
1223 if (extra_cfg !=
nullptr && extra_cfg->
num_params > 0) {
1230 static void GRFSaveConfig(
IniFile &ini,
const char *grpname,
const GRFConfig *list)
1236 for (c = list; c !=
nullptr; c = c->
next) {
1244 static void HandleSettingDescs(
IniFile &generic_ini,
IniFile &private_ini,
IniFile &secrets_ini, SettingDescProc *proc, SettingDescProcList *proc_list,
bool only_startup =
false)
1246 proc(generic_ini, _misc_settings,
"misc",
nullptr, only_startup);
1247 #if defined(_WIN32) && !defined(DEDICATED)
1248 proc(generic_ini, _win32_settings,
"win32",
nullptr, only_startup);
1263 proc(generic_ini, _currency_settings,
"currency", &
GetCustomCurrency(), only_startup);
1266 if (!only_startup) {
1287 for (
auto &desc : table) {
1291 std::string s{ sd->
GetName() };
1292 auto sc = s.find(
'.');
1293 if (sc == std::string::npos)
continue;
1296 if (group ==
nullptr)
continue;
1297 s = s.substr(sc + 1);
1328 *old_item =
nullptr;
1332 if (igroup ==
nullptr)
return false;
1338 if (tmp_old_item ==
nullptr)
return false;
1344 if (new_item !=
nullptr)
return false;
1346 *old_item = tmp_old_item;
1363 IniFileVersion generic_version = LoadVersionFromConfig(generic_ini);
1386 if (network !=
nullptr) {
1387 const IniItem *use_relay_service = network->
GetItem(
"use_relay_service");
1388 if (use_relay_service !=
nullptr) {
1389 if (use_relay_service->
value ==
"never") {
1391 }
else if (use_relay_service->
value ==
"ask") {
1393 }
else if (use_relay_service->
value ==
"allow") {
1408 static std::vector<std::string> _old_autosave_interval{
"off",
"monthly",
"quarterly",
"half year",
"yearly"};
1411 switch (old_value) {
1429 AILoadConfig(generic_ini,
"ai_players");
1430 GameLoadConfig(generic_ini,
"game_scripts");
1454 IniFileVersion generic_version = LoadVersionFromConfig(generic_ini);
1460 if (
IniGroup *group = private_ini.
GetGroup(
"private"); group !=
nullptr) group->
comment =
"; This file possibly contains private information which can identify you as person.\n";
1461 if (
IniGroup *group = secrets_ini.
GetGroup(
"secrets"); group !=
nullptr) group->
comment =
"; Do not share this file with others, not even if they claim to be technical support.\n; This file contains saved passwords and other secrets that should remain private to you!\n";
1463 if (generic_version ==
IFV_0) {
1485 if (game_creation !=
nullptr) {
1486 game_creation->
RemoveItem(
"generation_seed");
1493 if (network !=
nullptr) {
1502 AISaveConfig(generic_ini,
"ai_players");
1503 GameSaveConfig(generic_ini,
"game_scripts");
1527 if (group.
name.compare(0, 7,
"preset-") == 0) {
1528 list.push_back(group.
name.substr(7));
1543 std::string section(
"preset-");
1544 section += config_name;
1560 std::string section(
"preset-");
1561 section += config_name;
1564 GRFSaveConfig(ini, section.c_str(), config);
1574 std::string section(
"preset-");
1575 section += config_name;
1590 int32_t oldval = this->
Read(
object);
1593 if (oldval == newval)
return;
1595 this->
Write(
object, newval);
1622 if (sd->
GetName() == name)
return sd;
1626 std::string short_name_suffix = std::string{
"." }.append(name);
1630 if (sd->
GetName().ends_with(short_name_suffix))
return sd;
1646 saveloads.push_back(sd->
save);
1658 static const std::string_view company_prefix =
"company.";
1659 if (name.starts_with(company_prefix)) name.remove_prefix(company_prefix.size());
1673 if (sd !=
nullptr)
return sd;
1677 if (sd !=
nullptr)
return sd;
1681 if (sd !=
nullptr)
return sd;
1761 if (_game_mode != GM_MENU) {
1768 if (force_newgame) {
1786 for (
auto &desc : _company_settings) {
1799 for (
auto &desc : _company_settings) {
1843 this->
Write(
object, newval);
1851 void IConsoleSetSetting(
const char *name,
const char *value,
bool force_newgame)
1854 if (sd ==
nullptr) {
1859 bool success =
true;
1882 void IConsoleSetSetting(
const char *name,
int value)
1885 assert(sd !=
nullptr);
1897 if (sd ==
nullptr) {
1914 static void IConsoleListSettingsTable(
const SettingTable &table,
const char *prefilter)
1916 for (
auto &desc : table) {
1919 if (prefilter !=
nullptr && sd->
GetName().find(prefilter) == std::string::npos)
continue;
1934 IConsoleListSettingsTable(table, prefilter);
1937 IConsoleListSettingsTable(table, prefilter);
1940 IConsoleListSettingsTable(table, prefilter);
AIConfig stores the configuration settings of every AI.
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
static uint32_t BSWAP32(uint32_t x)
Perform a 32 bits endianness bitswap on x.
static AIConfig * GetConfig(CompanyID company, ScriptSettingSource source=SSS_DEFAULT)
Get the config of a company.
Common return value for all commands.
IniFile to store a configuration.
The data of the error message.
void SetDParamStr(uint n, const char *str)
Set a rawstring parameter.
static GameConfig * GetConfig(ScriptSettingSource source=SSS_DEFAULT)
Get the config of a company.
void StartAction(GamelogActionType at)
Stores information about new action, but doesn't allocate it Action is allocated only when there is a...
void StopAction()
Stops logging of any changes.
void Setting(const std::string &name, int32_t oldval, int32_t newval)
Logs change in game settings.
@ SSS_FORCE_NEWGAME
Get the newgame Script config.
bool HasScript() const
Is this config attached to an Script? In other words, is there a Script that is assigned to this slot...
void Change(std::optional< const std::string > name, int version=-1, bool force_exact_match=false)
Set another Script to be loaded in this slot.
const std::string & GetName() const
Get the name of the Script.
void StringToSettings(const std::string &value)
Convert a string which is stored in the config file or savegames to custom settings of this Script.
std::string SettingsToString() const
Convert the custom settings to a string that can be stored in the config file or savegames.
static constexpr int SECONDS_PER_DAY
approximate seconds per day, not for precise calculations
Functions related to commands.
static const CommandCost CMD_ERROR
Define a default return value for a failed command.
DoCommandFlag
List of flags for a command.
@ DC_EXEC
execute the given command
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
CompanyID _current_company
Company currently doing an action.
Functions related to companies.
Owner
Enum for all companies/owners.
@ COMPANY_FIRST
First company, same as owner.
@ MAX_COMPANIES
Maximum number of companies.
Configuration options of the network stuff.
static const uint NETWORK_MAX_GRF_COUNT
Maximum number of GRFs that can be sent.
void IConsolePrint(TextColour colour_code, const std::string &string)
Handle the printing of text entered into the console or redirected there by any other means.
Console functions used outside of the console code.
static const TextColour CC_HELP
Colour for help lines.
static const TextColour CC_INFO
Colour for information lines.
static const TextColour CC_DEFAULT
Default colour of the console.
static const TextColour CC_ERROR
Colour for error lines.
void ResetCurrencies(bool preserve_custom)
Will fill _currency_specs array with default values from origin_currency_specs Called only from newgr...
Functions to handle different currencies.
CurrencySpec & GetCustomCurrency()
Get the custom currency.
void DebugReconsiderSendRemoteMessages()
Reconsider whether we need to send debug messages to either NetworkAdminConsole or IConsolePrint.
Functions related to debugging.
#define Debug(category, level, format_string,...)
Ouptut a line of debugging information.
Functions related to errors.
std::list< ErrorMessageData > ErrorList
Define a queue with errors.
void ScheduleErrorMessage(ErrorList &datas)
Schedule a list of errors.
void ShowErrorMessage(StringID summary_msg, int x, int y, CommandCost cc)
Display an error message in a window.
void ShowFirstError()
Show the first error of the queue.
@ WL_CRITICAL
Critical errors, the MessageBox is shown in all cases.
bool FioCheckFileExists(const std::string &filename, Subdirectory subdir)
Check whether the given file exists.
Functions for Standard In/Out file operations.
@ NO_DIRECTORY
A path without any base directory.
@ NEWGRF_DIR
Subdirectory for all NewGRFs.
Declarations for savegames operations.
fluid_settings_t * settings
FluidSynth settings handle.
GameConfig stores the configuration settings of every Game.
Gamelog _gamelog
Gamelog instance.
Functions to be called to log fundamental changes to the game.
@ GLAT_SETTING
Setting changed.
Functions related to world/map generation.
static const uint CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY
Value for custom sea level in difficulty settings.
static const uint CUSTOM_SEA_LEVEL_MIN_PERCENTAGE
Minimum percentage a user can specify for custom sea level.
@ LG_ORIGINAL
The original landscape generator.
Types related to reading/writing '*.ini' files.
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
constexpr uint ClampU(const uint a, const uint min, const uint max)
Clamp an unsigned integer between an interval.
StringList _network_host_list
The servers we know.
bool _networking
are we in networking mode?
StringList _network_ban_list
The banned clients.
bool _network_server
network-server is active
StringList _network_bind_list
The addresses to bind on.
Basic functions/variables used all over the place.
Network functions used by other parts of OpenTTD.
std::string GRFBuildParamList(const GRFConfig *c)
Build a string containing space separated parameter values, and terminate.
bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir)
Find the GRFID of a given grf, and calculate its md5sum.
GRFConfig * _grfconfig_static
First item in list of static GRF set up.
const GRFConfig * FindGRFConfig(uint32_t grfid, FindGRFConfigMode mode, const MD5Hash *md5sum, uint32_t desired_version)
Find a NewGRF in the scanned list.
GRFConfig * _grfconfig_newgame
First item in list of default GRF set up.
Functions to find and configure NewGRFs.
@ GCF_INVALID
GRF is unusable with this version of OpenTTD.
@ GCF_STATIC
GRF file is used statically (can be used in any MP game)
@ GCF_UNSAFE
GRF file is unsafe for static usage.
@ GCF_SYSTEM
GRF file is an openttd-internal system grf.
@ GCS_NOT_FOUND
GRF file was not found in the local cache.
@ FGCM_NEWEST_VALID
Find newest Grf, ignoring Grfs with GCF_INVALID set.
@ FGCM_EXACT
Only find Grfs matching md5sum.
void PickerSaveConfig(IniFile &ini)
Save favourites of all registered Pickers to config.
void PickerLoadConfig(const IniFile &ini)
Load favourites of all registered Pickers from config.
declaration of OTTD revision dependent variables
A number of safeguards to prevent using unsafe methods.
void WriteValue(void *ptr, VarType conv, int64_t val)
Write the value of a setting.
int64_t ReadValue(const void *ptr, VarType conv)
Return a signed-long version of the value of a setting.
@ SLE_VAR_NULL
useful to write zeros in savegame.
@ SLE_VAR_STR
string pointer
@ SLE_VAR_STRQ
string pointer enclosed in quotes
void * GetVariableAddress(const void *object, const SaveLoad &sld)
Get the address of the variable.
constexpr size_t SlVarSize(VarType type)
Return expect size in bytes of a VarType.
bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to)
Checks if some version from/to combination falls within the range of the active savegame version.
constexpr VarType GetVarMemType(VarType type)
Get the NumberType of a setting.
static void GraphicsSetLoadConfig(IniFile &ini)
Load BaseGraphics set selection and configuration.
void HandleOldDiffCustom(bool savegame)
Reading of the old diff_custom array and transforming it to the new format.
void SyncCompanySettings()
Sync all company settings in a multiplayer game.
static void RemoveEntriesFromIni(IniFile &ini, const SettingTable &table)
Remove all entries from a settings table from an ini-file.
StringList GetGRFPresetList()
Get the list of known NewGrf presets.
static const SettingDesc * GetSettingFromName(const std::string_view name, const SettingTable &settings)
Given a name of setting, return a setting description from the table.
static void IniSaveSettings(IniFile &ini, const SettingTable &settings_table, const char *grpname, void *object, bool)
Save the values of settings to the inifile.
static void ValidateSettings()
Checks if any settings are set to incorrect values, and sets them to correct values in that case.
bool IsConversionNeeded(const ConfigIniFile &ini, const std::string &group, const std::string &old_var, const std::string &new_var, const IniItem **old_item)
Check whether a conversion should be done, and based on what old setting information.
GRFConfig * LoadGRFPresetFromConfig(const char *config_name)
Load a NewGRF configuration by preset-name.
std::string _secrets_file
Secrets configuration file of OpenTTD.
std::string _favs_file
Picker favourites configuration file of OpenTTD.
static void IniLoadSettings(IniFile &ini, const SettingTable &settings_table, const char *grpname, void *object, bool only_startup)
Load values from a group of an IniFile structure into the internal representation.
static ErrorList _settings_error_list
Errors while loading minimal settings.
void IniLoadWindowSettings(IniFile &ini, const char *grpname, void *desc)
Load a WindowDesc from config.
static bool LoadIntList(const char *str, void *array, int nelems, VarType type)
Load parsed string-values into an integer-array (intlist)
void SetDefaultCompanySettings(CompanyID cid)
Set the company settings for a new company to their default values.
void SaveGRFPresetToConfig(const char *config_name, GRFConfig *config)
Save a NewGRF configuration with a preset name.
static auto & SecretSettingTables()
List of all the secrets setting tables.
void LoadFromConfig(bool startup)
Load the values from the configuration files.
bool SetSettingValue(const IntSettingDesc *sd, int32_t value, bool force_newgame)
Top function to save the new value of an element of the Settings struct.
void SaveToConfig()
Save the values to the configuration file.
VehicleDefaultSettings _old_vds
Used for loading default vehicles settings from old savegames.
static auto & PrivateSettingTables()
List of all the private setting tables.
void PrepareOldDiffCustom()
Prepare for reading and old diff_custom by zero-ing the memory.
static void IniLoadSettingList(IniFile &ini, const char *grpname, StringList &list)
Loads all items from a 'grpname' section into a list The list parameter can be a nullptr pointer,...
CommandCost CmdChangeCompanySetting(DoCommandFlag flags, const std::string &name, int32_t value)
Change one of the per-company settings.
void GetSaveLoadFromSettingTable(SettingTable settings, std::vector< SaveLoad > &saveloads)
Get the SaveLoad for all settings in the settings table.
void IniSaveWindowSettings(IniFile &ini, const char *grpname, void *desc)
Save a WindowDesc to config.
static void IniSaveSettingList(IniFile &ini, const char *grpname, StringList &list)
Saves all items from a list into the 'grpname' section The list parameter can be a nullptr pointer,...
static void GraphicsSetSaveConfig(IniFile &ini)
Save BaseGraphics set selection and configuration.
static const SettingDesc * GetCompanySettingFromName(std::string_view name)
Given a name of setting, return a company setting description of it.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
static size_t LookupManyOfMany(const std::vector< std::string > &many, const char *str)
Find the set-integer value MANYofMANY type in a string.
IniFileVersion
Ini-file versions.
@ IFV_0
0 All versions prior to introduction.
@ IFV_AUTOSAVE_RENAME
5 PR#11143 Renamed values of autosave to be in minutes.
@ IFV_LINKGRAPH_SECONDS
3 PR#10610 Store linkgraph update intervals in seconds instead of days.
@ IFV_REMOVE_GENERATION_SEED
7 PR#11927 Remove "generation_seed" from configuration.
@ IFV_MAX_VERSION
Highest possible ini-file version.
@ IFV_NETWORK_PRIVATE_SETTINGS
4 PR#10762 Move use_relay_service to private settings.
@ IFV_GAME_TYPE
2 PR#9515 Convert server_advertise to server_game_type.
@ IFV_RIGHT_CLICK_CLOSE
6 PR#10204 Add alternative right click to close windows setting.
@ IFV_PRIVATE_SECRETS
1 PR#9298 Moving of settings from openttd.cfg to private.cfg / secrets.cfg.
CommandCost CmdChangeSetting(DoCommandFlag flags, const std::string &name, int32_t value)
Network-safe changing of settings (server-only).
const uint16_t INIFILE_VERSION
Current ini-file version of OpenTTD.
static std::optional< std::vector< uint32_t > > ParseIntList(const char *p)
Parse a string into a vector of uint32s.
std::string _private_file
Private configuration file of OpenTTD.
void DeleteGRFPresetFromConfig(const char *config_name)
Delete a NewGRF configuration by preset name.
GameSettings _settings_newgame
Game settings for new games (updated from the intro screen).
static GRFConfig * GRFLoadConfig(const IniFile &ini, const char *grpname, bool is_static)
Load a GRF configuration.
void IConsoleGetSetting(const char *name, bool force_newgame)
Output value of a specific setting to the console.
void IConsoleListSettings(const char *prefilter)
List all settings and their value to the console.
static void SaveVersionInConfig(IniFile &ini)
Save the version of OpenTTD to the ini file.
std::string _config_file
Configuration file of OpenTTD.
static auto & GenericSettingTables()
List of all the generic setting tables.
ClientSettings _settings_client
The current settings for this game.
Command definitions related to settings.
Functions related to setting/changing the settings.
static constexpr const SettingDesc * GetSettingDesc(const SettingVariant &desc)
Helper to convert the type of the iterated settings description to a pointer to it.
SettingType
Type of settings for filtering.
@ ST_CLIENT
Client setting.
@ ST_COMPANY
Company setting.
@ SF_NOT_IN_CONFIG
Do not save to config file.
@ SF_GUI_DROPDOWN
The value represents a limited number of string-options (internally integer) presented as dropdown.
@ SF_PER_COMPANY
This setting can be different for each company (saved in company struct).
@ SF_NETWORK_ONLY
This setting only applies to network games.
@ SF_NOT_IN_SAVE
Do not save with savegame, basically client-based.
@ SF_NEWGAME_ONLY
This setting cannot be changed in a game.
@ SF_SCENEDIT_ONLY
This setting can only be changed in the scenario editor.
@ SF_NO_NETWORK_SYNC
Do not synchronize over network (but it is saved if SF_NOT_IN_SAVE is not set).
@ SF_NO_NETWORK
This setting does not apply to network games; it may not be changed during the game.
@ SF_SCENEDIT_TOO
This setting can be changed in the scenario editor (only makes sense when SF_NEWGAME_ONLY is set).
@ SF_GUI_0_IS_SPECIAL
A value of zero is possible and has a custom string (the one after "strval").
Definition of the configuration tables of the settings.
GameSettings & GetGameSettings()
Get the settings-object applicable for the current situation: the newgame settings when we're in the ...
Definition of base types and functions in a cross-platform compatible way.
static void StrMakeValid(T &dst, const char *str, const char *last, StringValidationSettings settings)
Copies the valid (UTF-8) characters from str up to last to the dst.
bool ConvertHexToBytes(std::string_view hex, std::span< uint8_t > bytes)
Convert a hex-string to a byte-array, while validating it was actually hex.
std::string FormatArrayAsHex(std::span< const uint8_t > data)
Format a byte array into a continuous hex string.
Functions related to low-level strings.
@ SVS_NONE
Allow nothing and replace nothing.
std::vector< std::string > StringList
Type for a list of strings.
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
void SetDParamStr(size_t n, const char *str)
This function is used to "bind" a C string to a OpenTTD dparam slot.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
uint32_t extra_version
version of the extra GRF
std::vector< uint32_t > extra_params
parameters for the extra GRF
uint32_t shortname
unique key for base set
std::string name
The name of the base set.
uint32_t shortname
Four letter short variant of the name.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
static std::optional< bool > ParseSingleValue(const char *str)
Find whether a string was a boolean true or a boolean false.
size_t ParseValue(const char *str) const override
Convert a string representation (external) of an integer-like setting to an integer.
All settings that are only important for the local client.
CompanySettings company
default values for per-company settings
NetworkSettings network
settings related to the network
GUISettings gui
settings related to the GUI
CompanySettings settings
settings specific for each company
uint8_t quantity_sea_lakes
the amount of seas/lakes
Information about GRF, used in the game and (part of it) in savegames.
uint8_t flags
NOSAVE: GCF_Flags, bitset.
uint32_t version
NOSAVE: Version a NewGRF can set so only the newest NewGRF is shown.
uint8_t num_params
Number of used parameters.
struct GRFConfig * next
NOSAVE: Next item in the linked list.
GRFStatus status
NOSAVE: GRFStatus, enum.
std::string filename
Filename - either with or without full path.
GRFIdentifier ident
grfid and md5sum to uniquely identify newgrfs
uint32_t grfid
GRF ID (defined by Action 0x08)
MD5Hash md5sum
MD5 checksum of file to distinguish files with the same GRF ID (eg. newer version of GRF)
uint32_t autosave_interval
how often should we do autosaves?
RightClickClose right_click_wnd_close
close window with right click
uint8_t land_generator
the landscape generator
All settings together for the game.
DifficultySettings difficulty
settings related to the difficulty
GameCreationSettings game_creation
settings used during the creation of a game (map)
LinkGraphSettings linkgraph
settings for link graph calculations
All data of a graphics set.
Ini file that supports both loading and saving.
bool SaveToDisk(const std::string &filename)
Save the Ini file's data to the disk.
IniFile(const IniGroupNameList &list_group_names={})
Create a new ini file with given group names.
A group within an ini file.
const IniItem * GetItem(std::string_view name) const
Get the item with the given name.
std::string comment
comment for group
void Clear()
Clear all items in the group.
void RemoveItem(std::string_view name)
Remove the item with the given name.
std::string name
name of group
IniItem & CreateItem(std::string_view name)
Create an item with the given name.
IniItem & GetOrCreateItem(std::string_view name)
Get the item with the given name, and if it doesn't exist create a new item.
std::list< IniItem > items
all items in the group
A single "line" in an ini file.
std::optional< std::string > value
The value of this item.
std::string name
The name of this item.
void SetValue(std::string_view value)
Replace the current value with another value.
std::list< IniGroup > groups
all groups in the ini
void RemoveGroup(std::string_view name)
Remove the group with the given name.
void LoadFromDisk(const std::string &filename, Subdirectory subdir)
Load the Ini file's data from the disk.
const IniGroup * GetGroup(std::string_view name) const
Get the group with the given name.
IniGroup & GetOrCreateGroup(std::string_view name)
Get the group with the given name, and if it doesn't exist create a new group.
Base integer type, including boolean, settings.
void SetValueDParams(uint first_param, int32_t value) const
Set the DParams for drawing the value of the setting.
StringID str_help
(Translated) string with help text; gui only.
StringID str_val
(Translated) first string describing the value.
void MakeValueValid(int32_t &value) const
Make the value valid given the limitations of this setting.
void ResetToDefault(void *object) const override
Reset the setting to its default value.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
int32_t def
default value given when none is present
StringID GetTitle() const
Get the title of the setting.
void ChangeValue(const void *object, int32_t newvalue) const
Handle changing a value.
uint32_t max
maximum values
bool IsSameValue(const IniItem *item, void *object) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
int32_t min
minimum values
PreChangeCheck * pre_check
Callback to check for the validity of the setting.
void Write(const void *object, int32_t value) const
Set the value of a setting.
StringID GetHelp() const
Get the help text of the setting.
virtual bool IsBoolSetting() const
Check whether this setting is a boolean type setting.
PostChangeCallback * post_callback
Callback when the setting has been changed.
StringID str
(translated) string with descriptive text; gui and console
void MakeValueValidAndWrite(const void *object, int32_t value) const
Make the value valid and then write it to the setting.
virtual size_t ParseValue(const char *str) const
Convert a string representation (external) of an integer-like setting to an integer.
int32_t Read(const void *object) const
Read the integer from the the actual setting.
bool IsDefaultValue(void *object) const override
Check whether the value is the same as the default value.
uint16_t recalc_time
time (in days) for recalculating each link graph component.
uint16_t recalc_interval
time (in days) between subsequent checks for link graphs to be calculated.
void ParseValue(const IniItem *item, void *object) const override
Parse/read the value from the Ini item into the setting associated with this object.
void ResetToDefault(void *object) const override
Reset the setting to its default value.
bool IsSameValue(const IniItem *item, void *object) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
std::string FormatValue(const void *object) const override
Convert an integer-array (intlist) to a string representation.
const char * def
default value given when none is present
bool IsDefaultValue(void *object) const override
Check whether the value is the same as the default value.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
size_t ParseValue(const char *str) const override
Convert a string representation (external) of an integer-like setting to an integer.
NetworkAuthorizedKeys admin_authorized_keys
Public keys of clients that are authorized to use the admin network.
ServerGameType server_game_type
Server type: local / public / invite-only.
NetworkAuthorizedKeys rcon_authorized_keys
Public keys of clients that are authorized to use the rconsole (server side).
UseRelayService use_relay_service
Use relay service?
NetworkAuthorizedKeys server_authorized_keys
Public keys of clients that are authorized to connect to the game.
OnConvert * many_cnvt
callback procedure when loading value mechanism fails
size_t ParseValue(const char *str) const override
Convert a string representation (external) of an integer-like setting to an integer.
static size_t ParseSingleValue(const char *str, size_t len, const std::vector< std::string > &many)
Find the index value of a ONEofMANY type in a string separated by |.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
std::vector< std::string > many
possible values for this type
static Titem * Get(size_t index)
Returns Titem with given index.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
uint16_t length
(Conditional) length of the variable (eg. arrays) (max array size is 65536 elements).
SaveLoadVersion version_to
Save/load the variable before this savegame version.
VarType conv
Type of the variable to be saved; this field combines both FileVarType and MemVarType.
SaveLoadVersion version_from
Save/load the variable starting from this savegame version.
Iterable ensemble of each set bit in a value.
Properties of config file settings.
virtual void ParseValue(const IniItem *item, void *object) const =0
Parse/read the value from the Ini item into the setting associated with this object.
bool IsEditable(bool do_command=false) const
Check whether the setting is editable in the current gamemode.
virtual bool IsStringSetting() const
Check whether this setting is an string type setting.
constexpr const std::string & GetName() const
Get the name of this setting.
SettingType GetType() const
Return the type of the setting.
bool startup
Setting has to be loaded directly at startup?.
virtual std::string FormatValue(const void *object) const =0
Format the value of the setting associated with this object.
const struct StringSettingDesc * AsStringSetting() const
Get the setting description of this setting as a string setting.
virtual bool IsSameValue(const IniItem *item, void *object) const =0
Check whether the value in the Ini item is the same as is saved in this setting in the object.
SaveLoad save
Internal structure (going to savegame, parts to config).
virtual bool IsIntSetting() const
Check whether this setting is an integer type setting.
const struct IntSettingDesc * AsIntSetting() const
Get the setting description of this setting as an integer setting.
SettingFlag flags
Handles how a setting would show up in the GUI (text/currency, etc.).
const std::string & Read(const void *object) const
Read the string from the the actual setting.
std::string def
Default value given when none is present.
uint32_t max_length
Maximum length of the string, 0 means no maximum length.
PreChangeCheck * pre_check
Callback to check for the validity of the setting.
void MakeValueValid(std::string &str) const
Make the value valid given the limitations of this setting.
bool IsSameValue(const IniItem *item, void *object) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
bool IsDefaultValue(void *object) const override
Check whether the value is the same as the default value.
PostChangeCallback * post_callback
Callback when the setting has been changed.
void ResetToDefault(void *object) const override
Reset the setting to its default value.
void Write(const void *object, const std::string &str) const
Write a string to the actual setting.
void ChangeValue(const void *object, std::string &newval) const
Handle changing a string value.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
void ParseValue(const IniItem *item, void *object) const override
Parse/read the value from the Ini item into the setting associated with this object.
Default settings for vehicles.
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
void SetWindowClassesDirty(WindowClass cls)
Mark all windows of a particular class as dirty (in need of repainting)
Window functions not directly related to making/drawing windows.
@ WC_ERRMSG
Error message; Window numbers:
@ WC_GAME_OPTIONS
Game options window; Window numbers: