41 #if defined(WITH_FREETYPE) || defined(_WIN32) 70 #if defined(WITH_FREETYPE) || defined(_WIN32) 71 #define HAS_TRUETYPE_FONT 74 #include "table/strings.h" 75 #include "table/settings.h" 85 typedef std::list<ErrorMessageData>
ErrorList;
89 typedef void SettingDescProc(
IniFile *ini,
const SettingDesc *desc,
const char *grpname,
void *
object);
90 typedef void SettingDescProcList(
IniFile *ini,
const char *grpname,
StringList &list);
92 static bool IsSignedVarMemType(VarType vt);
101 "server_bind_addresses",
117 if (onelen == 0) onelen = strlen(one);
120 if (*one >=
'0' && *one <=
'9')
return strtoul(one,
nullptr, 0);
126 while (*s !=
'|' && *s != 0) s++;
127 if ((
size_t)(s - many) == onelen && !memcmp(one, many, onelen))
return idx;
128 if (*s == 0)
return (
size_t)-1;
149 while (*str ==
' ' || *str ==
'\t' || *str ==
'|') str++;
150 if (*str == 0)
break;
153 while (*s != 0 && *s !=
' ' && *s !=
'\t' && *s !=
'|') s++;
156 if (r == (
size_t)-1)
return r;
183 if (!comma)
return -1;
192 if (n == maxitems)
return -1;
194 unsigned long v = strtoul(p, &end, 0);
195 if (p == end)
return -1;
207 if (n != 0 && !comma)
return -1;
220 static bool LoadIntList(
const char *str,
void *array,
int nelems, VarType type)
222 unsigned long items[64];
225 if (str ==
nullptr) {
226 memset(items, 0,
sizeof(items));
230 if (nitems != nelems)
return false;
237 for (i = 0; i != nitems; i++) ((byte*)array)[i] = items[i];
242 for (i = 0; i != nitems; i++) ((uint16*)array)[i] = items[i];
247 for (i = 0; i != nitems; i++) ((uint32*)array)[i] = items[i];
250 default: NOT_REACHED();
265 static void MakeIntList(
char *buf,
const char *last,
const void *array,
int nelems, VarType type)
268 const byte *p = (
const byte *)array;
270 for (i = 0; i != nelems; i++) {
273 case SLE_VAR_I8: v = *(
const int8 *)p; p += 1;
break;
274 case SLE_VAR_U8: v = *(
const uint8 *)p; p += 1;
break;
275 case SLE_VAR_I16: v = *(
const int16 *)p; p += 2;
break;
276 case SLE_VAR_U16: v = *(
const uint16 *)p; p += 2;
break;
277 case SLE_VAR_I32: v = *(
const int32 *)p; p += 4;
break;
278 case SLE_VAR_U32: v = *(
const uint32 *)p; p += 4;
break;
279 default: NOT_REACHED();
281 if (IsSignedVarMemType(type)) {
282 buf +=
seprintf(buf, last, (i == 0) ?
"%d" :
",%d", v);
284 buf +=
seprintf(buf, last, (i == 0) ?
"0x%X" :
",0x%X", v);
286 buf +=
seprintf(buf, last, (i == 0) ?
"%u" :
",%u", v);
298 static void MakeOneOfMany(
char *buf,
const char *last,
const char *many,
int id)
304 for (; *many !=
'|'; many++) {
314 while (*many !=
'\0' && *many !=
'|' && buf < last) *buf++ = *many++;
326 static void MakeManyOfMany(
char *buf,
const char *last,
const char *many, uint32 x)
332 for (; x != 0; x >>= 1, i++) {
334 while (*many != 0 && *many !=
'|') many++;
337 if (!init) buf +=
seprintf(buf, last,
"|");
340 buf +=
seprintf(buf, last,
"%d", i);
342 memcpy(buf, start, many - start);
347 if (*many ==
'|') many++;
361 const char *str = orig_str ==
nullptr ?
"" : orig_str;
366 size_t val = strtoul(str, &end, 0);
375 ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_TRAILING_CHARACTERS);
387 if (r != (
size_t)-1)
return (
void*)r;
398 if (r != (
size_t)-1)
return (
void*)r;
407 if (strcmp(str,
"true") == 0 || strcmp(str,
"on") == 0 || strcmp(str,
"1") == 0)
return (
void*)
true;
408 if (strcmp(str,
"false") == 0 || strcmp(str,
"off") == 0 || strcmp(str,
"0") == 0)
return (
void*)
false;
465 }
else if (val < sdb->
min || val > (int32)sdb->
max) {
467 val = (int32)(
size_t)sdb->
def;
474 uint32 uval = (uint32)val;
479 }
else if (uval < (uint)sdb->
min || uval > sdb->
max) {
481 uval = (uint32)(
size_t)sdb->
def;
489 default: NOT_REACHED();
513 for (; sd->
save.
cmd != SL_END; sd++) {
520 s = strchr(sdb->
name,
'.');
529 item = group->
GetItem(s,
false);
530 if (item ==
nullptr && group != group_def) {
533 item = group_def->
GetItem(s,
false);
535 if (item ==
nullptr) {
538 const char *sc = strchr(s,
'.');
539 if (sc !=
nullptr) item = ini->
GetGroup(s, sc - s)->
GetItem(sc + 1,
false);
557 if (p !=
nullptr)
strecpy((
char*)ptr, (
const char*)p, (
char*)ptr + sld->
length - 1);
563 *(
char**)ptr = p ==
nullptr ?
nullptr :
stredup((
const char*)p);
566 case SLE_VAR_CHAR:
if (p !=
nullptr) *(
char *)ptr = *(
const char *)p;
break;
568 default: NOT_REACHED();
585 default: NOT_REACHED();
604 IniGroup *group_def =
nullptr, *group;
610 for (; sd->
save.
cmd != SL_END; sd++) {
620 s = strchr(sdb->
name,
'.');
625 if (group_def ==
nullptr) group_def = ini->
GetGroup(grpname);
630 item = group->GetItem(s,
true);
633 if (item->
value !=
nullptr) {
646 if (*(
bool*)ptr == (p !=
nullptr))
continue;
651 if (*(byte*)ptr == (byte)(
size_t)p)
continue;
656 if (*(uint16*)ptr == (uint16)(
size_t)p)
continue;
661 if (*(uint32*)ptr == (uint32)(
size_t)p)
continue;
664 default: NOT_REACHED();
685 default: NOT_REACHED();
697 if (*(
char**)ptr ==
nullptr) {
704 case SLE_VAR_CHAR: buf[0] = *(
char*)ptr; buf[1] =
'\0';
break;
705 default: NOT_REACHED();
713 default: NOT_REACHED();
735 if (group ==
nullptr)
return;
739 for (
const IniItem *item = group->
item; item !=
nullptr; item = item->
next) {
740 if (item->name !=
nullptr) list.emplace_back(item->name);
757 if (group ==
nullptr)
return;
760 for (
const auto &iter : list) {
761 group->
GetItem(iter.c_str(),
true)->SetValue(
"");
798 (_game_mode == GM_NORMAL ||
799 (_game_mode == GM_EDITOR && !(this->desc.flags &
SGF_SCENEDIT_TOO))))
return false;
825 if (_game_mode != GM_MENU) {
833 static bool PopulationInLabelActive(int32 p1)
839 static bool RedrawScreen(int32 p1)
858 static bool InvalidateDetailsWindow(int32 p1)
864 static bool StationSpreadChanged(int32 p1)
871 static bool InvalidateBuildIndustryWindow(int32 p1)
877 static bool CloseSignalGUI(int32 p1)
885 static bool InvalidateTownViewWindow(int32 p1)
891 static bool DeleteSelectStationWindow(int32 p1)
897 static bool UpdateConsists(int32 p1)
901 if (t->IsFrontEngine() || t->IsFreeWagon()) t->ConsistChanged(
CCF_TRACK);
908 static bool CheckInterval(int32 p1)
910 bool update_vehicles;
914 update_vehicles =
false;
917 update_vehicles =
true;
932 if (update_vehicles) {
935 if (v->owner ==
_current_company && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) {
937 v->SetServiceIntervalIsPercent(p1 != 0);
942 InvalidateDetailsWindow(0);
947 static bool UpdateInterval(
VehicleType type, int32 p1)
949 bool update_vehicles;
953 update_vehicles =
false;
956 update_vehicles =
true;
961 if (interval != p1)
return false;
963 if (update_vehicles) {
965 if (v->owner ==
_current_company && v->type == type && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) {
966 v->SetServiceInterval(p1);
971 InvalidateDetailsWindow(0);
976 static bool UpdateIntervalTrains(int32 p1)
981 static bool UpdateIntervalRoadVeh(int32 p1)
983 return UpdateInterval(
VEH_ROAD, p1);
986 static bool UpdateIntervalShips(int32 p1)
988 return UpdateInterval(
VEH_SHIP, p1);
991 static bool UpdateIntervalAircraft(int32 p1)
996 static bool TrainAccelerationModelChanged(int32 p1)
999 if (t->IsFrontEngine()) {
1000 t->tcache.cached_max_curve_speed = t->GetCurveSpeedLimit();
1001 t->UpdateAcceleration();
1021 if (t->IsFrontEngine()) t->CargoChanged();
1036 if (rv->IsFrontEngine()) {
1058 if (rv->IsFrontEngine()) rv->CargoChanged();
1064 static bool DragSignalsDensityChanged(int32)
1071 static bool TownFoundingChanged(int32 p1)
1081 static bool InvalidateVehTimetableWindow(int32 p1)
1087 static bool ZoomMinMaxChanged(int32 p1)
1089 extern void ConstrainAllViewportsZoom();
1090 ConstrainAllViewportsZoom();
1116 static bool InvalidateCompanyLiveryWindow(int32 p1)
1119 return RedrawScreen(p1);
1122 static bool InvalidateIndustryViewWindow(int32 p1)
1128 static bool InvalidateAISettingsWindow(int32 p1)
1177 static bool DifficultyNoiseChange(int32 i)
1179 if (_game_mode == GM_NORMAL) {
1189 static bool MaxNoAIsChange(int32 i)
1225 static bool CheckFreeformEdges(int32 p1)
1227 if (_game_mode == GM_MENU)
return true;
1231 if (
TileX(s->tile) == 0 ||
TileY(s->tile) == 0) {
1238 if (st->IsInUse() && (
TileX(st->xy) == 0 ||
TileY(st->xy) == 0)) {
1246 for (uint i = 0; i <
MapMaxX(); i++) {
1252 for (uint i = 1; i <
MapMaxX(); i++) {
1258 for (uint i = 0; i <
MapMaxY(); i++) {
1264 for (uint i = 1; i <
MapMaxY(); i++) {
1271 for (uint i = 0; i <
MapMaxX(); i++) {
1275 for (uint i = 0; i <
MapMaxY(); i++) {
1290 if (_game_mode == GM_MENU)
return true;
1300 static bool ChangeMaxHeightLevel(int32 p1)
1302 if (_game_mode == GM_NORMAL)
return false;
1303 if (_game_mode != GM_EDITOR)
return true;
1321 static bool StationCatchmentChanged(int32 p1)
1328 static bool MaxVehiclesChanged(int32 p1)
1335 static bool InvalidateShipPathCache(int32 p1)
1343 static bool UpdateClientName(int32 p1)
1349 static bool UpdateServerPassword(int32 p1)
1358 static bool UpdateRconPassword(int32 p1)
1367 static bool UpdateClientConfigValues(int32 p1)
1381 memset(_old_diff_custom, 0,
sizeof(_old_diff_custom));
1396 bool old_diff_custom_used =
false;
1397 for (uint i = 0; i < options_to_load && !old_diff_custom_used; i++) {
1398 old_diff_custom_used = (_old_diff_custom[i] != 0);
1401 if (!old_diff_custom_used)
return;
1404 for (uint i = 0; i < options_to_load; i++) {
1413 static void AILoadConfig(
IniFile *ini,
const char *grpname)
1424 if (group ==
nullptr)
return;
1427 for (item = group->
item; c < MAX_COMPANIES && item != nullptr; c++, item = item->next) {
1432 if (strcmp(item->
name,
"none") != 0) {
1433 DEBUG(script, 0,
"The AI by the name '%s' was no longer found, and removed from the list.", item->
name);
1441 static void GameLoadConfig(
IniFile *ini,
const char *grpname)
1450 if (group ==
nullptr)
return;
1453 if (item ==
nullptr)
return;
1459 if (strcmp(item->
name,
"none") != 0) {
1460 DEBUG(script, 0,
"The GameScript by the name '%s' was no longer found, and removed from the list.", item->
name);
1474 if (c >=
'0' && c <=
'9')
return c -
'0';
1475 if (c >=
'A' && c <=
'F')
return c + 10 -
'A';
1476 if (c >=
'a' && c <=
'f')
return c + 10 -
'a';
1490 while (dest_size > 0) {
1493 if (lo < 0)
return false;
1494 *dest++ = (hi << 4) | lo;
1514 if (group ==
nullptr)
return nullptr;
1516 for (item = group->
item; item !=
nullptr; item = item->
next) {
1519 uint8 grfid_buf[4], md5sum[16];
1520 char *filename = item->
name;
1521 bool has_grfid =
false;
1522 bool has_md5sum =
false;
1527 filename += 1 + 2 *
lengthof(grfid_buf);
1529 if (has_md5sum) filename += 1 + 2 *
lengthof(md5sum);
1531 uint32 grfid = grfid_buf[0] | (grfid_buf[1] << 8) | (grfid_buf[2] << 16) | (grfid_buf[3] << 24);
1534 if (s !=
nullptr) c =
new GRFConfig(*s);
1538 if (s !=
nullptr) c =
new GRFConfig(*s);
1541 if (c ==
nullptr) c =
new GRFConfig(filename);
1557 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND);
1559 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_UNSAFE);
1561 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_SYSTEM);
1563 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE);
1565 SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN);
1575 bool duplicate =
false;
1576 for (
const GRFConfig *gc = first; gc !=
nullptr; gc = gc->
next) {
1601 static void AISaveConfig(
IniFile *ini,
const char *grpname)
1605 if (group ==
nullptr)
return;
1625 static void GameSaveConfig(
IniFile *ini,
const char *grpname)
1629 if (group ==
nullptr)
return;
1656 seprintf(version,
lastof(version),
"%08X", _openttd_newgrf_version);
1658 const char *
const versions[][2] = {
1659 {
"version_string", _openttd_revision },
1660 {
"version_number", version }
1663 for (uint i = 0; i <
lengthof(versions); i++) {
1669 static void GRFSaveConfig(
IniFile *ini,
const char *grpname,
const GRFConfig *list)
1675 for (c = list; c !=
nullptr; c = c->
next) {
1677 char key[4 * 2 + 1 + 16 * 2 + 1 + MAX_PATH];
1689 static void HandleSettingDescs(
IniFile *ini, SettingDescProc *proc, SettingDescProcList *proc_list,
bool basic_settings =
true,
bool other_settings =
true)
1691 if (basic_settings) {
1692 proc(ini, (
const SettingDesc*)_misc_settings,
"misc",
nullptr);
1693 #if defined(_WIN32) && !defined(DEDICATED) 1694 proc(ini, (
const SettingDesc*)_win32_settings,
"win32",
nullptr);
1698 if (other_settings) {
1699 proc(ini, _settings,
"patches", &_settings_newgame);
1700 proc(ini, _currency_settings,
"currency", &_custom_currency);
1701 proc(ini, _company_settings,
"company", &_settings_client.
company);
1709 static IniFile *IniLoadConfig()
1722 IniFile *ini = IniLoadConfig();
1731 AILoadConfig(ini,
"ai_players");
1732 GameLoadConfig(ini,
"game_scripts");
1735 IniLoadSettings(ini, _gameopt_settings,
"gameopt", &_settings_newgame);
1752 IniFile *ini = IniLoadConfig();
1762 AISaveConfig(ini,
"ai_players");
1763 GameSaveConfig(ini,
"game_scripts");
1777 std::unique_ptr<IniFile> ini(IniLoadConfig());
1778 for (
IniGroup *group = ini->group; group !=
nullptr; group = group->
next) {
1779 if (strncmp(group->name,
"preset-", 7) == 0) {
1780 list.emplace_back(group->name + 7);
1795 size_t len = strlen(config_name) + 8;
1796 char *section = (
char*)alloca(len);
1797 seprintf(section, section + len - 1,
"preset-%s", config_name);
1799 IniFile *ini = IniLoadConfig();
1814 size_t len = strlen(config_name) + 8;
1815 char *section = (
char*)alloca(len);
1816 seprintf(section, section + len - 1,
"preset-%s", config_name);
1818 IniFile *ini = IniLoadConfig();
1819 GRFSaveConfig(ini, section, config);
1830 size_t len = strlen(config_name) + 8;
1831 char *section = (
char*)alloca(len);
1832 seprintf(section, section + len - 1,
"preset-%s", config_name);
1834 IniFile *ini = IniLoadConfig();
1840 const SettingDesc *GetSettingDescription(uint index)
1842 if (index >=
lengthof(_settings))
return nullptr;
1843 return &_settings[index];
1859 const SettingDesc *sd = GetSettingDescription(p1);
1870 int32 newval = (int32)p2;
1913 int32 newval = (int32)p2;
1949 if (_game_mode != GM_MENU) {
1960 if (force_newgame) {
1981 const SettingDesc *sd = &_company_settings[index];
1998 for (sd = _company_settings; sd->
save.
cmd != SL_END; sd++) {
2011 for (sd = _company_settings; sd->
save.
cmd != SL_END; sd++, i++) {
2048 *var = strcmp(value,
"(null)") == 0 ? nullptr :
stredup(value);
2070 for (*i = 0, sd = _settings; sd->
save.
cmd != SL_END; sd++, (*i)++) {
2072 if (strcmp(sd->
desc.
name, name) == 0)
return sd;
2076 for (*i = 0, sd = _settings; sd->
save.
cmd != SL_END; sd++, (*i)++) {
2078 const char *short_name = strchr(sd->
desc.
name,
'.');
2079 if (short_name !=
nullptr) {
2081 if (strcmp(short_name, name) == 0)
return sd;
2085 if (strncmp(name,
"company.", 8) == 0) name += 8;
2087 for (*i = 0, sd = _company_settings; sd->
save.
cmd != SL_END; sd++, (*i)++) {
2089 if (strcmp(sd->
desc.
name, name) == 0)
return sd;
2097 void IConsoleSetSetting(
const char *name,
const char *value,
bool force_newgame)
2102 if (sd ==
nullptr) {
2124 IConsoleError(
"This command/variable is not available during network games.");
2126 IConsoleError(
"This command/variable is only available to a network server.");
2131 void IConsoleSetSetting(
const char *name,
int value)
2135 assert(sd !=
nullptr);
2151 if (sd ==
nullptr) {
2156 ptr =
GetVariableAddress((_game_mode == GM_MENU || force_newgame) ? &_settings_newgame : &_settings_game, &sd->
save);
2162 seprintf(value,
lastof(value), (*(
const bool*)ptr != 0) ?
"on" :
"off");
2183 if (prefilter !=
nullptr && strstr(sd->desc.name, prefilter) ==
nullptr)
continue;
2188 seprintf(value,
lastof(value), (*(
const bool *)ptr != 0) ?
"on" :
"off");
2208 for (; osd->
save.
cmd != SL_END; osd++) {
2212 if (!SlObjectMember(ptr, sld))
continue;
2229 for (i = sd; i->
save.
cmd != SL_END; i++) {
2230 length += SlCalcObjMemberLength(
object, &i->
save);
2234 for (i = sd; i->
save.
cmd != SL_END; i++) {
2236 SlObjectMember(ptr, &i->
save);
2240 static void Load_OPTS()
2250 static void Load_PATS()
2258 static void Check_PATS()
2263 static void Save_PATS()
2268 extern const ChunkHandler _setting_chunk_handlers[] = {
2269 {
'OPTS',
nullptr, Load_OPTS,
nullptr,
nullptr, CH_RIFF},
2270 {
'PATS', Save_PATS, Load_PATS,
nullptr, Check_PATS, CH_RIFF |
CH_LAST},
2273 static bool IsSignedVarMemType(VarType vt)
Functions related to OTTD's strings.
Owner
Enum for all companies/owners.
VehicleSettings vehicle
options for vehicles
static void ValidateSettings()
Checks if any settings are set to incorrect values, and sets them to correct values in that case...
int CompanyServiceInterval(const Company *c, VehicleType type)
Get the service interval for the given company and vehicle type.
static uint MapSizeX()
Get the size of the map along the X.
A group within an ini file.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
void IConsoleGetSetting(const char *name, bool force_newgame)
Output value of a specific setting to the console.
bool _networking
are we in networking mode?
const void * def
default value given when none is present
Base of all video drivers.
Default settings for vehicles.
uint GetCompanySettingIndex(const char *name)
Get the index in the _company_settings array of a setting.
static const ScriptInfoList * GetInfoList()
Wrapper function for AIScanner::GetAIInfoList.
Select station (when joining stations); Window numbers:
static int ParseIntList(const char *p, T *items, int maxitems)
Parse an integerlist string and set each found value.
void NetworkSendCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, CompanyID company)
Prepare a DoCommand to be send over the network.
static uint MapSizeY()
Get the size of the map along the Y.
static bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor=0)
Checks whether the savegame is below major.
static void MakeVoid(TileIndex t)
Make a nice void tile ;)
SaveLoadVersion version_from
save/load the variable starting from this savegame version
void ResetCurrencies(bool preserve_custom)
Will fill _currency_specs array with default values from origin_currency_specs Called only from newgr...
void SetDParamStr(uint n, const char *str)
Set a rawstring parameter.
static bool DecodeHexText(char *pos, uint8 *dest, size_t dest_size)
Parse a sequence of characters (supposedly hex digits) into a sequence of bytes.
void BuildOwnerLegend()
Completes the array for the owned property legend.
byte land_generator
the landscape generator
uint16 GetServiceIntervalClamped(uint interval, bool ispercent)
Clamp the service interval to the correct min/max.
Saveload window; Window numbers:
GameConfig stores the configuration settings of every Game.
static GRFConfig * GRFLoadConfig(IniFile *ini, const char *grpname, bool is_static)
Load a GRF configuration.
EconomySettings economy
settings to change the economy
void SaveGRFPresetToConfig(const char *config_name, GRFConfig *config)
Save a NewGRF configuration with a preset name.
GRFConfig * _grfconfig_newgame
First item in list of default GRF set up.
static void HandleOldDiffCustom(bool savegame)
Reading of the old diff_custom array and transforming it to the new format.
bitmasked number where only ONE bit may be set
All settings together for the game.
static Titem * Get(size_t index)
Returns Titem with given index.
string (with pre-allocated buffer)
Functions to handle different currencies.
int CDECL seprintf(char *str, const char *last, const char *format,...)
Safer implementation of snprintf; same as snprintf except:
Base for the train class.
Other order modifications.
static T SetBit(T &x, const uint8 y)
Set a bit in a variable.
General types related to pathfinders.
bitmasked number where MULTIPLE bits may be set
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
this setting only applies to network games
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
static const CommandCost CMD_ERROR
Define a default return value for a failed command.
SettingGuiFlag flags
handles how a setting would show up in the GUI (text/currency, etc.)
do not synchronize over network (but it is saved if SLF_NOT_IN_SAVE is not set)
Functions to be called to log possibly unsafe game events.
static bool InvalidateCompanyWindow(int32 p1)
Invalidate the company details window after the shares setting changed.
static void PrepareOldDiffCustom()
Prepare for reading and old diff_custom by zero-ing the memory.
static const uint CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY
Value for custom sea level in difficulty settings.
fluid_settings_t * settings
FluidSynth settings handle.
VehicleType
Available vehicle types.
void GamelogStartAction(GamelogActionType at)
Stores information about new action, but doesn't allocate it Action is allocated only when there is a...
static void MakeManyOfMany(char *buf, const char *last, const char *many, uint32 x)
Convert a MANYofMANY structure to a string representation.
IniItem * item
the first item in the group
GRFConfig * LoadGRFPresetFromConfig(const char *config_name)
Load a NewGRF configuration by preset-name.
static bool ChangeDynamicEngines(int32 p1)
Changing the setting "allow multiple NewGRF sets" is not allowed if there are vehicles.
GRFStatus status
NOSAVE: GRFStatus, enum.
static bool RedrawTownAuthority(int32 p1)
Update the town authority window after a town authority setting change.
char * md5sumToString(char *buf, const char *last, const uint8 md5sum[16])
Convert the md5sum to a hexadecimal string representation.
static bool InvalidateCompanyInfrastructureWindow(int32 p1)
Invalidate the company infrastructure details window after a infrastructure maintenance setting chang...
void IConsoleListSettings(const char *prefilter)
List all settings and their value to the console.
Base for all sound drivers.
static uint TileX(TileIndex tile)
Get the X component of a tile.
Build vehicle; Window numbers:
TownFounding found_town
town founding.
void UpdateAllTownVirtCoords()
Update the virtual coords needed to draw the town sign for all towns.
GRF file is used statically (can be used in any MP game)
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...
void Change(const char *name, int version=-1, bool force_exact_match=false, bool is_random=false)
Set another Script to be loaded in this slot.
int64 ReadValue(const void *ptr, VarType conv)
Return a signed-long version of the value of a setting.
the value represents a limited number of string-options (internally integer)
DifficultySettings difficulty
settings related to the difficulty
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x=0, int y=0, const GRFFile *textref_stack_grffile=nullptr, uint textref_stack_size=0, const uint32 *textref_stack=nullptr)
Display an error message in a window.
void RemoveGroup(const char *name)
Remove the group with the given name.
Properties of config file settings.
do not save to config file
#define lastof(x)
Get the last element of an fixed size array.
static const TextColour CC_DEFAULT
Default colour of the console.
IniGroup * GetGroup(const char *name, size_t len=0, bool create_new=true)
Get the group with the given name.
GRF file was not found in the local cache.
Functions related to world/map generation.
Stuff related to the text buffer GUI.
Functions to make screenshots.
static GameConfig * GetConfig(ScriptSettingSource source=SSS_DEFAULT)
Get the config of a company.
const GRFConfig * FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum, uint32 desired_version)
Find a NewGRF in the scanned list.
list of integers separated by a comma ','
Common return value for all commands.
GRFIdentifier ident
grfid and md5sum to uniquely identify newgrfs
void SaveToConfig()
Save the values to the configuration file.
static const void * StringToVal(const SettingDescBase *desc, const char *orig_str)
Convert a string representation (external) of a setting to the internal rep.
static T max(const T a, const T b)
Returns the maximum of two values.
IniItem * next
The next item in this group.
CommandCost CmdChangeSetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
Network-safe changing of settings (server-only).
static void Write_ValidateSetting(void *ptr, const SettingDesc *sd, int32 val)
Set the value of a setting and if needed clamp the value to the preset minimum and maximum...
const char * name
name of the setting. Used in configuration file and for console
OnChange * proc
callback procedure for when the value is changed
CompanySettings settings
settings specific for each company
this setting can be different for each company (saved in company struct)
struct GRFConfig * next
NOSAVE: Next item in the linked list.
this setting does not apply to network games; it may not be changed during the game ...
A single "line" in an ini file.
const char * GetName() const
Get the name of the Script.
GRFConfig * _grfconfig_static
First item in list of static GRF set up.
static uint ClampU(const uint a, const uint min, const uint max)
Clamp an unsigned integer between an interval.
uint16 servint_ships
service interval for ships
static bool RedrawSmallmap(int32 p1)
Redraw the smallmap after a colour scheme change.
static bool LoadIntList(const char *str, void *array, int nelems, VarType type)
Load parsed string-values into an integer-array (intlist)
static void SetTileHeight(TileIndex tile, uint height)
Sets the height of a tile.
bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir)
Find the GRFID of a given grf, and calculate its md5sum.
uint16 length
(conditional) length of the variable (eg. arrays) (max array size is 65536 elements) ...
Functions to read fonts from files and cache them.
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
Buses, trucks and trams belong to this class.
int PositionStatusbar(Window *w)
(Re)position statusbar window at the screen.
Critical errors, the MessageBox is shown in all cases.
char * _config_file
Configuration file of OpenTTD.
void UpdateAirportsNoise()
Recalculate the noise generated by the airports of each town.
SaveLoad save
Internal structure (going to savegame, parts to config)
void SetDParamStr(uint n, const char *str)
This function is used to "bind" a C string to a OpenTTD dparam slot.
LoadCheckData _load_check_data
Data loaded from save during SL_LOAD_CHECK.
print numbers as hex in the config file (only useful for unsigned)
NetworkSettings network
settings related to the network
void GamelogSetting(const char *name, int32 oldval, int32 newval)
Logs change in game settings.
void SetDefaultCompanySettings(CompanyID cid)
Set the company settings for a new company to their default values.
Engine preview window; Window numbers:
uint8 num_params
Number of used parameters.
static bool IsTileType(TileIndex tile, TileType type)
Checks if a tile is a given tiletype.
VarType conv
type of the variable to be saved, int
static void SaveVersionInConfig(IniFile *ini)
Save the version of OpenTTD to the ini file.
Functions related to errors.
static void IniSaveSettings(IniFile *ini, const SettingDesc *sd, const char *grpname, void *object)
Save the values of settings to the inifile.
Error message; Window numbers:
GRF file is an openttd-internal system grf.
int PositionNewsMessage(Window *w)
(Re)position news message window at the screen.
CompanySettings company
default values for per-company settings
Information about GRF, used in the game and (part of it) in savegames.
do not save with savegame, basically client-based
void IniLoadWindowSettings(IniFile *ini, const char *grpname, void *desc)
Load a WindowDesc from config.
VehicleDefaultSettings vehicle
default settings for vehicles
OnConvert * proc_cnvt
callback procedure when loading value mechanism fails
bool HasScript() const
Is this config attached to an Script? In other words, is there a Script that is assigned to this slot...
Small map; Window numbers:
bool SaveToDisk(const char *filename)
Save the Ini file's data to the disk.
void SyncCompanySettings()
Sync all company settings in a multiplayer game.
DoCommandFlag
List of flags for a command.
Functions related to setting/changing the settings.
char * GRFBuildParamList(char *dst, const GRFConfig *c, const char *last)
Build a string containing space separated parameter values, and terminate.
void SetValue(const char *value)
Replace the current value with another value.
ClientSettings _settings_client
The current settings for this game.
static const char *const _list_group_names[]
Groups in openttd.cfg that are actually lists.
void CDECL IConsolePrintF(TextColour colour_code, const char *format,...)
Handle the printing of text entered into the console or redirected there by any other means...
void LoadFromDisk(const char *filename, Subdirectory subdir)
Load the Ini file's data from the disk.
A path without any base directory.
Base for all music playback.
Definition of base types and functions in a cross-platform compatible way.
void LoadStringWidthTable(bool monospace)
Initialize _stringwidth_table cache.
static size_t LookupManyOfMany(const char *many, const char *str)
Find the set-integer value MANYofMANY type in a string.
A number of safeguards to prevent using unsafe methods.
void NetworkUpdateClientName()
Send the server our name.
GameSettings _settings_newgame
Game settings for new games (updated from the intro screen).
int PositionNetworkChatWindow(Window *w)
(Re)position network chat window at the screen.
const SettingDesc * GetSettingFromName(const char *name, uint *i)
Given a name of setting, return a setting description of it.
static AIConfig * GetConfig(CompanyID company, ScriptSettingSource source=SSS_DEFAULT)
Get the config of a company.
uint8 flags
NOSAVE: GCF_Flags, bitset.
char * stredup(const char *s, const char *last)
Create a duplicate of the given string.
void LoadFromConfig(bool minimal)
Load the values from the configuration files.
Console functions used outside of the console code.
GRF is unusable with this version of OpenTTD.
void ScheduleErrorMessage(const ErrorMessageData &data)
Schedule an error.
Company colour selection; Window numbers:
char * value
The value of this item.
Find newest Grf, ignoring Grfs with GCF_INVALID set.
static ErrorList _settings_error_list
Errors while loading minimal settings.
static bool RoadVehSlopeSteepnessChanged(int32 p1)
This function updates the road vehicle acceleration cache after a steepness change.
Vehicle timetable; Window numbers:
Found a town; Window numbers:
Basic functions/variables used all over the place.
Build station; Window numbers:
bool DoCommandP(const CommandContainer *container, bool my_cmd)
Shortcut for the long DoCommandP when having a container with the data.
Industry view; Window numbers:
#define lengthof(x)
Return the length of an fixed size array.
bool RoadVehiclesAreBuilt()
Verify whether a road vehicle is available.
void GfxClearSpriteCache()
Remove all encoded sprites from the sprite cache without discarding sprite location information...
static T min(const T a, const T b)
Returns the minimum of two values.
char rcon_password[NETWORK_PASSWORD_LENGTH]
password for rconsole (server side)
Types related to reading/writing '*.ini' files.
void Clear()
Clear all items in the group.
bool FioCheckFileExists(const char *filename, Subdirectory subdir)
Check whether the given file exists.
Functions related to sound.
static size_t ConvertLandscape(const char *value)
Conversion callback for _gameopt_settings_game.landscape It converts (or try) between old values and ...
static VarType GetVarMemType(VarType type)
Get the NumberType of a setting.
static void LoadSettings(const SettingDesc *osd, void *object)
Save and load handler for settings.
void DeleteWindowByClass(WindowClass cls)
Delete all windows of a given class.
static bool IsNumericType(VarType conv)
Check if the given saveload type is a numeric type.
static void RecomputeCatchmentForAll()
Recomputes catchment of all stations.
All ships have this type.
Handlers and description of chunk.
void SetCompanySetting(uint index, int32 value)
Top function to save the new value of an element of the Settings struct.
Subdirectory for all NewGRFs.
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
void GamelogStopAction()
Stops logging of any changes.
Build industry; Window numbers:
Build toolbar; Window numbers:
void DeleteGRFPresetFromConfig(const char *config_name)
Delete a NewGRF configuration by preset name.
#define DEBUG(name, level,...)
Output a line of debugging information.
'Train' is either a loco or a wagon.
Build signal toolbar; Window numbers:
string enclosed in quotes (with pre-allocated buffer)
static bool CheckRoadSide(int p1)
Check whether the road side may be changed.
StringList _network_host_list
The servers we know.
static bool v_PositionStatusbar(int32 p1)
Reposition the statusbar as the setting changed.
void DeleteWindowById(WindowClass cls, WindowNumber number, bool force)
Delete a window by its class and window number (if it is open).
bool IsEditable(bool do_command=false) const
Check whether the setting is editable in the current gamemode.
static int DecodeHexNibble(char c)
Convert a character to a hex nibble value, or -1 otherwise.
void BuildLandLegend()
(Re)build the colour tables for the legends.
byte quantity_sea_lakes
the amount of seas/lakes
static void IniLoadSettings(IniFile *ini, const SettingDesc *sd, const char *grpname, void *object)
Load values from a group of an IniFile structure into the internal representation.
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...
execute the given command
Company infrastructure overview; Window numbers:
this setting can be changed in the scenario editor (only makes sense when SGF_NEWGAME_ONLY is set) ...
static void * GetVariableAddress(const void *object, const SaveLoad *sld)
Get the address of the variable.
Functions related to companies.
static uint MapSize()
Get the size of the map.
static void MakeIntList(char *buf, const char *last, const void *array, int nelems, VarType type)
Convert an integer-array (intlist) to a string representation.
void ReInitAllWindows()
Re-initialize all windows.
The data of the error message.
Ini file that supports both loading and saving.
static bool RoadVehAccelerationModelChanged(int32 p1)
This function updates realistic acceleration caches when the setting "Road vehicle acceleration model...
void NetworkServerSendConfigUpdate()
Send Config Update.
Town authority; Window numbers:
GUISettings gui
settings related to the GUI
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
static bool ResetToCurrentNewGRFConfig()
Tries to reset the engine mapping to match the current NewGRF configuration.
bool station_noise_level
build new airports when the town noise level is still within accepted limits
static bool StrEmpty(const char *s)
Check if a string buffer is empty.
void UpdateCursorSize()
Update cursor dimension.
Declarations for savegames operations.
SaveLoadVersion version_to
save/load the variable until this savegame version
uint32 TileIndex
The index/ID of a Tile.
static bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to)
Checks if some version from/to combination falls within the range of the active savegame version...
uint16 servint_trains
service interval for trains
a value of zero means the feature is disabled
char * name
The name of this item.
static void MakeOneOfMany(char *buf, const char *last, const char *many, int id)
Convert a ONEofMANY structure to a string representation.
Map accessors for void tiles.
First company, same as owner.
useful to write zeros in savegame.
string pointer enclosed in quotes
static GameSettings & GetGameSettings()
Get the settings-object applicable for the current situation: the newgame settings when we're in the ...
GRF file is unsafe for static usage.
this setting cannot be changed in a game
static uint TileY(TileIndex tile)
Get the Y component of a tile.
bool servint_ispercent
service intervals are in percents
std::vector< std::string > StringList
Type for a list of strings.
bool SetSettingValue(uint index, int32 value, bool force_newgame)
Top function to save the new value of an element of the Settings struct.
static const uint CUSTOM_SEA_LEVEL_MIN_PERCENTAGE
Minimum percentage a user can specify for custom sea level.
void IConsoleError(const char *string)
It is possible to print error information to the console.
IniItem * GetItem(const char *name, bool create)
Get the item with the given name, and if it doesn't exist and create is true it creates a new item...
SaveLoadType cmd
the action to take with the saved/loaded type, All types need different action
Functions and types used internally for the settings configurations.
Get the newgame Script config.
char * strecpy(char *dst, const char *src, const char *last)
Copies characters from one buffer to another.
static void SetTileType(TileIndex tile, TileType type)
Set the type of a tile.
Town view; Window numbers:
char * filename
Filename - either with or without full path.
VehicleDefaultSettings _old_vds
Used for loading default vehicles settings from old savegames.
string with a pre-allocated buffer
Maximum number of companies.
static uint MapMaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
StringList _network_ban_list
The banned clients.
ZoomLevel _gui_zoom
GUI Zoom level.
uint16 servint_aircraft
service interval for aircraft
SettingType GetType() const
Return the type of the setting.
SettingDescType cmd
various flags for the variable
const char * many
ONE/MANY_OF_MANY: string of possible values for this type.
Vehicle details; Window numbers:
Base functions for all Games.
Functions related to commands.
Network functions used by other parts of OpenTTD.
bool _network_server
network-server is active
CompanyID _current_company
Company currently doing an action.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
static uint TileHeight(TileIndex tile)
Returns the height of a tile.
header file for electrified rail specific functions
static const TextColour CC_ERROR
Colour for error lines.
The original landscape generator.
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
AI settings; Window numbers:
static Pool::IterateWrapper< Train > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
uint32 grfid
GRF ID (defined by Action 0x08)
static void free(const void *ptr)
Version of the standard free that accepts const pointers.
IniGroup * next
the next group within this file
uint8 roadveh_acceleration_model
realistic acceleration for road vehicles
declaration of OTTD revision dependent variables
uint32 param[0x80]
GRF parameters.
static bool HasBit(const T x, const uint8 y)
Checks if a bit in a value is set.
Base functions for all AIs.
void SlSetLength(size_t length)
Sets the length of either a RIFF object or the number of items in an array.
static bool TrainSlopeSteepnessChanged(int32 p1)
This function updates the train acceleration cache after a steepness change.
GameCreationSettings game_creation
settings used during the creation of a game (map)
uint16 servint_roadveh
service interval for road vehicles
static size_t LookupOneOfMany(const char *many, const char *one, size_t onelen=0)
Find the index value of a ONEofMANY type in a string separated by |.
static uint MapMaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
StringList _network_bind_list
The addresses to bind on.
AIConfig stores the configuration settings of every AI.
static uint32 BSWAP32(uint32 x)
Perform a 32 bits endianness bitswap on x.
Window functions not directly related to making/drawing windows.
SettingType
Type of settings for filtering.
uint8 md5sum[16]
MD5 checksum of file to distinguish files with the same GRF ID (eg. newer version of GRF) ...
Only find Grfs matching md5sum.
void StringToSettings(const char *value)
Convert a string which is stored in the config file or savegames to custom settings of this Script...
CommandCost CmdChangeCompanySetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
Change one of the per-company settings.
char server_password[NETWORK_PASSWORD_LENGTH]
password for joining this server
void SettingsToString(char *string, const char *last) const
Convert the custom settings to a string that can be stored in the config file or savegames.
ZoomLevel zoom_min
minimum zoom out level
void IniSaveWindowSettings(IniFile *ini, const char *grpname, void *desc)
Save a WindowDesc to config.
void SetWindowClassesDirty(WindowClass cls)
Mark all windows of a particular class as dirty (in need of repainting)
Functions related to news.
Base classes/functions for stations.
Errors (eg. saving/loading failed)
std::list< ErrorMessageData > ErrorList
Define a queue with errors.
Company view; Window numbers:
static const TextColour CC_WARNING
Colour for warning lines.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
void WriteValue(void *ptr, VarType conv, int64 val)
Write the value of a setting.
SettingDescBase desc
Settings structure (going to configuration file)
Valid changes while vehicle is driving, and possibly changing tracks.
static bool v_PositionMainToolbar(int32 p1)
Reposition the main toolbar as the setting changed.
static bool InvalidateNewGRFChangeWindows(int32 p1)
Update any possible saveload window and delete any newgrf dialogue as its widget parts might change...
Base class for all station-ish types.
Factory to 'query' all available blitters.
Game options window; Window numbers:
bool GetArgumentInteger(uint32 *value, const char *arg)
Change a string into its number representation.
All settings that are only important for the local client.
static TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data, bool gui_scope)
Mark window data of the window of a given class and specific window number as invalid (in need of re-...
Last chunk in this array.
4.0 1 4.1 122 0.3.3, 0.3.4 4.2 1222 0.3.5 4.3 1417 4.4 1426
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
static void SaveSettings(const SettingDesc *sd, void *object)
Save and load handler for settings.
StringList GetGRFPresetList()
Get the list of known NewGrf presets.
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
void ShowFirstError()
Show the first error of the queue.