27#if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA)
28#define HAS_TRUETYPE_FONT
56#include "table/strings.h"
57#include "table/settings.h"
61SettingTable _company_settings{ _company_settings_table };
62SettingTable _currency_settings{ _currency_settings_table };
63SettingTable _difficulty_settings{ _difficulty_settings_table };
64SettingTable _multimedia_settings{ _multimedia_settings_table };
65SettingTable _economy_settings{ _economy_settings_table };
66SettingTable _game_settings{ _game_settings_table };
67SettingTable _gui_settings{ _gui_settings_table };
68SettingTable _linkgraph_settings{ _linkgraph_settings_table };
69SettingTable _locale_settings{ _locale_settings_table };
70SettingTable _misc_settings{ _misc_settings_table };
71SettingTable _network_private_settings{ _network_private_settings_table };
72SettingTable _network_secrets_settings{ _network_secrets_settings_table };
73SettingTable _network_settings{ _network_settings_table };
74SettingTable _news_display_settings{ _news_display_settings_table };
75SettingTable _old_gameopt_settings{ _old_gameopt_settings_table };
76SettingTable _pathfinding_settings{ _pathfinding_settings_table };
77SettingTable _script_settings{ _script_settings_table };
78SettingTable _window_settings{ _window_settings_table };
79SettingTable _world_settings{ _world_settings_table };
80#if defined(_WIN32) && !defined(DEDICATED)
81SettingTable _win32_settings{ _win32_settings_table };
104 case 0: val = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL;
break;
105 case 1: val = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC;
break;
106 case 2: val = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI;
break;
107 case 3: val =
TimerGameEconomy::UsingWallclockUnits(_game_mode == GM_MENU) ? STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS : STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS;
break;
108 case 4: val = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS;
break;
109 default: NOT_REACHED();
117 return {sd.
str_val + ((value >= 0) ? 1 : 0),
abs(value)};
152 if (_game_mode != GM_MENU) {
176static void StationSpreadChanged(int32_t)
182static void UpdateConsists(int32_t)
186 if (t->IsFrontEngine() || t->IsFreeWagon()) t->ConsistChanged(
CCF_TRACK);
197 bool update_vehicles;
201 update_vehicles =
false;
204 update_vehicles =
true;
207 if (new_value != 0) {
227 if (update_vehicles) {
230 if (v->owner ==
_current_company && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) {
232 v->SetServiceIntervalIsPercent(new_value != 0);
240static bool CanUpdateServiceInterval(
VehicleType, int32_t &new_value)
251 return new_value == 0 || interval == new_value;
254static void UpdateServiceInterval(
VehicleType type, int32_t new_value)
258 if (v->owner ==
_current_company && v->type == type && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) {
259 v->SetServiceInterval(new_value);
283 case VEH_TRAIN:
return DEF_SERVINT_MINUTES_TRAINS;
284 case VEH_ROAD:
return DEF_SERVINT_MINUTES_ROADVEH;
286 case VEH_SHIP:
return DEF_SERVINT_MINUTES_SHIPS;
287 default: NOT_REACHED();
294static std::tuple<int32_t, uint32_t> GetServiceIntervalRange(
const IntSettingDesc &)
306 return { MIN_SERVINT_MINUTES, MAX_SERVINT_MINUTES };
309 return { MIN_SERVINT_DAYS, MAX_SERVINT_DAYS };
312static void TrainAccelerationModelChanged(int32_t)
315 if (t->IsFrontEngine()) {
316 t->tcache.cached_max_curve_speed = t->GetCurveSpeedLimit();
317 t->UpdateAcceleration();
333 if (t->IsFrontEngine()) t->CargoChanged();
344 if (rv->IsFrontEngine()) {
362 if (rv->IsFrontEngine()) rv->CargoChanged();
366static void TownFoundingChanged(int32_t)
375static void ZoomMinMaxChanged(int32_t)
377 ConstrainAllViewportsZoom();
385static void SpriteZoomMinChanged(int32_t)
404static void InvalidateCompanyLiveryWindow(int32_t)
407 ResetVehicleColourMap();
410static void DifficultyNoiseChange(int32_t)
412 if (_game_mode == GM_NORMAL) {
420static void MaxNoAIsChange(int32_t)
450 static constexpr std::initializer_list<std::string_view> _old_landscape_values{
"normal"sv,
"hilly"sv,
"desert"sv,
"candy"sv};
454static bool CheckFreeformEdges(int32_t &new_value)
456 if (_game_mode == GM_MENU)
return true;
457 if (new_value != 0) {
460 if (
TileX(s->tile) == 0 ||
TileY(s->tile) == 0) {
467 if (st->IsInUse() && (
TileX(st->xy) == 0 ||
TileY(st->xy) == 0)) {
501static void UpdateFreeformEdges(int32_t new_value)
503 if (_game_mode == GM_MENU)
return;
505 if (new_value != 0) {
528 if (_game_mode == GM_MENU)
return true;
538static bool CheckMaxHeightLevel(int32_t &new_value)
540 if (_game_mode == GM_NORMAL)
return false;
541 if (_game_mode != GM_EDITOR)
return true;
545 for (
const auto t :
Map::Iterate()) {
556static void StationCatchmentChanged(int32_t)
562static void MaxVehiclesChanged(int32_t)
575 if (newval.compare(
"*") == 0) newval.clear();
610 if (_game_mode == GM_EDITOR) {
617 new_economy_date_fract = 0;
640 if (new_value < CalendarTime::DEF_MINUTES_PER_YEAR) {
644 if (new_value == 1) {
645 clamped = CalendarTime::DEF_MINUTES_PER_YEAR;
647 clamped = CalendarTime::FROZEN_MINUTES_PER_YEAR;
651 if (_game_mode == GM_MENU) {
670static std::tuple<int32_t, uint32_t> GetMinutesPerYearRange(
const IntSettingDesc &)
675 return { CalendarTime::DEF_MINUTES_PER_YEAR, CalendarTime::DEF_MINUTES_PER_YEAR };
Base functions for all AIs.
AIConfig stores the configuration settings of every AI.
static const ScriptInfoList * GetInfoList()
Wrapper function for AIScanner::GetAIInfoList.
static LinkGraphSchedule instance
Static instance of LinkGraphSchedule.
void ShiftDates(TimerGameEconomy::Date interval)
Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of...
static Date date
Current date in days (day counter).
static DateFract date_fract
Fractional part of the day.
static Date date
Current date in days (day counter).
static bool UsingWallclockUnits(bool newgame=false)
Check if we are using wallclock units.
static void SetDate(Date date, DateFract fract)
Set the date.
static Date ConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
uint16_t DateFract
The fraction of a date we're in, i.e.
int CompanyServiceInterval(const Company *c, VehicleType type)
Get the service interval for the given company and vehicle type.
CompanyID _current_company
Company currently doing an action.
Functions related to companies.
Configuration options of the network stuff.
Functions to handle different currencies.
header file for electrified rail specific functions
Functions related to errors.
@ WL_ERROR
Errors (eg. saving/loading failed)
@ WL_CRITICAL
Critical errors, the MessageBox is shown in all cases.
void ShowErrorMessage(EncodedString &&summary_msg, int x, int y, CommandCost &cc)
Display an error message in a window.
Factory to 'query' all available blitters.
Functions to read fonts from files and cache them.
GameConfig stores the configuration settings of every Game.
Functions related to world/map generation.
bool AdjustGUIZoom(bool automatic)
Resolve GUI zoom level and adjust GUI to new zoom, if auto-suggestion is requested.
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
Declaration of link graph schedule used for cargo distribution.
static debug_inline TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
static debug_inline uint TileY(TileIndex tile)
Get the Y component of a tile.
static debug_inline uint TileX(TileIndex tile)
Get the X component of a tile.
constexpr T abs(const T a)
Returns the absolute value of (scalar) variable.
Base for all music playback.
bool _networking
are we in networking mode?
bool _network_server
network-server is active
Basic functions/variables used all over the place.
Network functions used by other parts of OpenTTD.
void NetworkServerUpdateGameInfo()
Update the server's NetworkServerGameInfo due to changes in settings.
void NetworkServerSendConfigUpdate()
Send Config Update.
Functions related to news.
uint16_t GetServiceIntervalClamped(int interval, bool ispercent)
Clamp the service interval to the correct min/max.
General types related to pathfinders.
bool RoadVehiclesAreBuilt()
Verify whether a road vehicle is available.
Command definitions related to road vehicles.
A number of safeguards to prevent using unsafe methods.
Functions to make screenshots.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
GameSettings _settings_newgame
Game settings for new games (updated from the intro screen).
ClientSettings _settings_client
The current settings for this game.
static void RoadVehSlopeSteepnessChanged(int32_t)
This function updates the road vehicle acceleration cache after a steepness change.
static void RoadVehAccelerationModelChanged(int32_t)
This function updates realistic acceleration caches when the setting "Road vehicle acceleration model...
static void UpdateAllServiceInterval(int32_t new_value)
Check and update if needed all vehicle service intervals.
static void v_PositionStatusbar(int32_t)
Reposition the statusbar as the setting changed.
static int32_t GetDefaultServiceInterval(const IntSettingDesc &sd, VehicleType type)
Checks if the service intervals in the settings are specified as percentages and corrects the default...
static void TrainSlopeSteepnessChanged(int32_t)
This function updates the train acceleration cache after a steepness change.
static void UpdateLinkgraphColours(int32_t)
Redraw linkgraph links after a colour scheme change.
static void RedrawSmallmap(int32_t)
Redraw the smallmap after a colour scheme change.
static bool ReplaceAsteriskWithEmptyPassword(std::string &newval)
Replace a passwords that are a literal asterisk with an empty string.
static StringID SettingHelpWallclock(const IntSettingDesc &sd)
Switch setting help depending on wallclock setting.
static std::pair< StringParameter, StringParameter > SettingsValueVelocityUnit(const IntSettingDesc &, int32_t value)
Setting values for velocity unit localisation.
static bool CheckDynamicEngines(int32_t &)
Changing the setting "allow multiple NewGRF sets" is not allowed if there are vehicles.
static bool CheckRoadSide(int32_t &)
Check whether the road side may be changed.
static void v_PositionMainToolbar(int32_t)
Reposition the main toolbar as the setting changed.
static std::optional< uint32_t > ConvertLandscape(std::string_view value)
Conversion callback for _gameopt_settings_game.landscape It converts (or try) between old values and ...
static bool CanChangeTimetableMode(int32_t &)
Pre-callback check when trying to change the timetable mode.
static void UpdateClientConfigValues()
Update the game info, and send it to the clients when we are running as a server.
static std::pair< StringParameter, StringParameter > ServiceIntervalSettingsValueText(const IntSettingDesc &sd, int32_t value)
Service Interval Settings Default Value displays the correct units or as a percentage.
static void ChangeMinutesPerYear(int32_t new_value)
Callback after the player changes the minutes per year.
static StringID SettingTitleWallclock(const IntSettingDesc &sd)
Switch setting title depending on wallclock setting.
static std::pair< StringParameter, StringParameter > SettingsValueAbsolute(const IntSettingDesc &sd, int32_t value)
A negative value has another string (the one after "strval").
static void ChangeTimekeepingUnits(int32_t)
Callback for when the player changes the timekeeping units.
static void InvalidateNewGRFChangeWindows(int32_t)
Update any possible saveload window and delete any newgrf dialogue as its widget parts might change.
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 ...
void BuildLandLegend()
(Re)build the colour tables for the legends.
void BuildOwnerLegend()
Completes the array for the owned property legend.
void BuildLinkStatsLegend()
Populate legend table for the link stat view.
Base for all sound drivers.
void GfxClearSpriteCache()
Remove all encoded sprites from the sprite cache without discarding sprite location information.
Base classes/functions for stations.
void UpdateAirportsNoise()
Recalculate the noise generated by the airports of each town.
Functions related to stations.
Definition of base types and functions in a cross-platform compatible way.
EncodedString GetEncodedString(StringID str)
Encode a string with no parameters into an encoded string.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Base class for all station-ish types.
CompanySettings company
default values for per-company settings
VehicleDefaultSettings vehicle
default settings for vehicles
TownFounding found_town
town founding.
TimekeepingUnits timekeeping_units
time units to use for the game economy, either calendar or wallclock
bool station_noise_level
build new airports when the town noise level is still within accepted limits
uint16_t minutes_per_calendar_year
minutes per calendar year. Special value 0 means that calendar time is frozen.
static bool ResetToCurrentNewGRFConfig()
Tries to reset the engine mapping to match the current NewGRF configuration.
EconomySettings economy
settings to change the economy
VehicleSettings vehicle
options for vehicles
Base integer type, including boolean, settings.
StringID str_help
(Translated) string with help text; gui only.
StringID str_val
(Translated) first string describing the value.
int32_t def
default value given when none is present
StringID str
(translated) string with descriptive text; gui and console
Size related data of the map.
static uint SizeY()
Get the size of the map along the Y.
static debug_inline uint SizeX()
Get the size of the map along the X.
static uint MaxY()
Gets the maximum Y coordinate within the map, including MP_VOID.
static debug_inline uint MaxX()
Gets the maximum X coordinate within the map, including MP_VOID.
static std::optional< uint32_t > ParseSingleValue(std::string_view str, std::span< const std::string_view > many)
Find the index value of a ONEofMANY type in a string.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
static Titem * Get(auto index)
Returns Titem with given index.
static bool IsValidID(auto index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
Buses, trucks and trams belong to this class.
All ships have this type.
static Pool::IterateWrapper< T > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
static void RecomputeCatchmentForAll()
Recomputes catchment of all stations.
Templated helper to make a type-safe 'typedef' representing a single POD value.
'Train' is either a loco or a wagon.
Default settings for vehicles.
uint16_t servint_aircraft
service interval for aircraft
uint16_t servint_roadveh
service interval for road vehicles
uint16_t servint_ships
service interval for ships
bool servint_ispercent
service intervals are in percents
uint16_t servint_trains
service interval for trains
uint8_t roadveh_acceleration_model
realistic acceleration for road vehicles
Stuff related to the text buffer GUI.
void SetTileType(Tile tile, TileType type)
Set the type of a tile.
void SetTileHeight(Tile tile, uint height)
Sets the height of a tile.
static debug_inline bool IsTileType(Tile tile, TileType type)
Checks if a tile is a given tiletype.
static debug_inline uint TileHeight(Tile tile)
Returns the height of a tile.
Definition of the game-calendar-timer.
Base for the train class.
static constexpr ConsistChangeFlags CCF_TRACK
Valid changes while vehicle is driving, and possibly changing tracks.
Functions related to vehicles.
VehicleType
Available vehicle types.
@ VEH_ROAD
Road vehicle type.
@ VEH_AIRCRAFT
Aircraft vehicle type.
@ VEH_SHIP
Ship vehicle type.
@ VEH_TRAIN
Train vehicle type.
Base of all video drivers.
Functions related to (drawing on) viewports.
Map accessors for void tiles.
void MakeVoid(Tile t)
Make a nice void tile ;)
int PositionStatusbar(Window *w)
(Re)position statusbar window at the screen.
void CloseWindowById(WindowClass cls, WindowNumber number, bool force, int data)
Close a window by its class and window number (if it is open).
int PositionMainToolbar(Window *w)
(Re)position main toolbar window at the screen.
int PositionNetworkChatWindow(Window *w)
(Re)position network chat window at the screen.
void ReInitAllWindows(bool zoom_changed)
Re-initialize all windows.
void CloseWindowByClass(WindowClass cls, int data)
Close all windows of a given class.
int PositionNewsMessage(Window *w)
(Re)position news message window at the screen.
void SetWindowClassesDirty(WindowClass cls)
Mark all windows of a particular class as dirty (in need of repainting)
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-...
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...
Window functions not directly related to making/drawing windows.
@ WC_BUILD_STATION
Build station; Window numbers:
@ WC_SPRITE_ALIGNER
Sprite aligner (debug); Window numbers:
@ WC_COMPANY_COLOUR
Company colour selection; Window numbers:
@ WC_FOUND_TOWN
Found a town; Window numbers:
@ WC_BUILD_TOOLBAR
Build toolbar; Window numbers:
@ WC_SELECT_STATION
Select station (when joining stations); Window numbers:
@ WC_ENGINE_PREVIEW
Engine preview window; Window numbers:
@ WC_CLIENT_LIST
Client list; Window numbers:
@ WC_TOWN_VIEW
Town view; Window numbers:
@ WC_GAME_OPTIONS
Game options window; Window numbers:
@ WC_SMALLMAP
Small map; Window numbers:
@ WC_SAVELOAD
Saveload window; Window numbers:
@ WC_VEHICLE_DETAILS
Vehicle details; Window numbers:
@ WC_BUILD_VEHICLE
Build vehicle; Window numbers: