Changeset - r25550:35330ff774a6
[Not reviewed]
master
0 16 0
rubidium42 - 3 years ago 2021-05-24 09:47:37
rubidium@openttd.org
Codechange: use separate pre and post callbacks for int settings
16 files changed with 272 insertions and 416 deletions:
0 comments (0 inline, 0 general)
src/elrail.cpp
Show inline comments
 
@@ -590,15 +590,15 @@ void DrawRailCatenary(const TileInfo *ti
 

	
 
		default: return;
 
	}
 
	DrawRailCatenaryRailway(ti);
 
}
 

	
 
bool SettingsDisableElrail(int32 p1)
 
void SettingsDisableElrail(int32 new_value)
 
{
 
	bool disable = (p1 != 0);
 
	bool disable = (new_value != 0);
 

	
 
	/* we will now walk through all electric train engines and change their railtypes if it is the wrong one*/
 
	const RailType old_railtype = disable ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL;
 
	const RailType new_railtype = disable ? RAILTYPE_RAIL : RAILTYPE_ELECTRIC;
 

	
 
	/* walk through all train engines */
 
@@ -636,8 +636,7 @@ bool SettingsDisableElrail(int32 p1)
 
	for (Company *c : Company::Iterate()) c->avail_railtypes = GetCompanyRailtypes(c->index);
 

	
 
	/* This resets the _last_built_railtype, which will be invalid for electric
 
	 * rails. It may have unintended consequences if that function is ever
 
	 * extended, though. */
 
	ReinitGuiAfterToggleElrail(disable);
 
	return true;
 
}
src/elrail_func.h
Show inline comments
 
@@ -33,9 +33,9 @@ static inline bool HasRailCatenaryDrawn(
 
}
 

	
 
void DrawRailCatenary(const TileInfo *ti);
 
void DrawRailCatenaryOnTunnel(const TileInfo *ti);
 
void DrawRailCatenaryOnBridge(const TileInfo *ti);
 

	
 
bool SettingsDisableElrail(int32 p1); ///< _settings_game.disable_elrail callback
 
void SettingsDisableElrail(int32 new_value); ///< _settings_game.disable_elrail callback
 

	
 
#endif /* ELRAIL_FUNC_H */
src/newgrf_config.cpp
Show inline comments
 
@@ -279,21 +279,19 @@ void GRFParameterInfo::Finalize()
 
	}
 
}
 

	
 
/**
 
 * Update the palettes of the graphics from the config file.
 
 * Called when changing the default palette in advanced settings.
 
 * @param p1 Unused.
 
 * @return Always true.
 
 * @param new_value Unused.
 
 */
 
bool UpdateNewGRFConfigPalette(int32 p1)
 
void UpdateNewGRFConfigPalette(int32 new_value)
 
{
 
	for (GRFConfig *c = _grfconfig_newgame; c != nullptr; c = c->next) c->SetSuitablePalette();
 
	for (GRFConfig *c = _grfconfig_static;  c != nullptr; c = c->next) c->SetSuitablePalette();
 
	for (GRFConfig *c = _all_grfs;          c != nullptr; c = c->next) c->SetSuitablePalette();
 
	return true;
 
}
 

	
 
/**
 
 * Get the data section size of a GRF.
 
 * @param f GRF.
 
 * @return Size of the data section or SIZE_MAX if the file has no separate data section.
src/newgrf_config.h
Show inline comments
 
@@ -236,9 +236,9 @@ void ShowNewGRFSettings(bool editable, b
 

	
 
/** For communication about GRFs over the network */
 
#define UNKNOWN_GRF_NAME_PLACEHOLDER "<Unknown>"
 
GRFTextWrapper FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create);
 

	
 
void UpdateNewGRFScanStatus(uint num, const char *name);
 
bool UpdateNewGRFConfigPalette(int32 p1 = 0);
 
void UpdateNewGRFConfigPalette(int32 new_value = 0);
 

	
 
#endif /* NEWGRF_CONFIG_H */
src/rail_gui.cpp
Show inline comments
 
@@ -2127,29 +2127,26 @@ static void SetDefaultRailGui()
 
	if (w != nullptr) w->ModifyRailType(_cur_railtype);
 
}
 

	
 
/**
 
 * Updates the current signal variant used in the signal GUI
 
 * to the one adequate to current year.
 
 * @param p needed to be called when a setting changes
 
 * @return success, needed for settings
 
 * @param new_value needed to be called when a setting changes
 
 */
 
bool ResetSignalVariant(int32 p)
 
void ResetSignalVariant(int32 new_value)
 
{
 
	SignalVariant new_variant = (_cur_year < _settings_client.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC);
 

	
 
	if (new_variant != _cur_signal_variant) {
 
		Window *w = FindWindowById(WC_BUILD_SIGNAL, 0);
 
		if (w != nullptr) {
 
			w->SetDirty();
 
			w->RaiseWidget((_cur_signal_variant == SIG_ELECTRIC ? WID_BS_ELECTRIC_NORM : WID_BS_SEMAPHORE_NORM) + _cur_signal_type);
 
		}
 
		_cur_signal_variant = new_variant;
 
	}
 

	
 
	return true;
 
}
 

	
 
/**
 
 * Resets the rail GUI - sets default railtype to build
 
 * and resets the signal GUI
 
 */
src/rail_gui.h
Show inline comments
 
@@ -12,11 +12,11 @@
 

	
 
#include "rail_type.h"
 
#include "widgets/dropdown_type.h"
 

	
 
struct Window *ShowBuildRailToolbar(RailType railtype);
 
void ReinitGuiAfterToggleElrail(bool disable);
 
bool ResetSignalVariant(int32 = 0);
 
void ResetSignalVariant(int32 = 0);
 
void InitializeRailGUI();
 
DropDownList GetRailTypeDropDownList(bool for_replacement = false, bool all_option = false);
 

	
 
#endif /* RAIL_GUI_H */
src/settings.cpp
Show inline comments
 
@@ -804,117 +804,74 @@ const StringSettingDesc *SettingDesc::As
 
	return static_cast<const StringSettingDesc *>(this);
 
}
 

	
 
/* Begin - Callback Functions for the various settings. */
 

	
 
/** Reposition the main toolbar as the setting changed. */
 
static bool v_PositionMainToolbar(int32 p1)
 
static void v_PositionMainToolbar(int32 new_value)
 
{
 
	if (_game_mode != GM_MENU) PositionMainToolbar(nullptr);
 
	return true;
 
}
 

	
 
/** Reposition the statusbar as the setting changed. */
 
static bool v_PositionStatusbar(int32 p1)
 
static void v_PositionStatusbar(int32 new_value)
 
{
 
	if (_game_mode != GM_MENU) {
 
		PositionStatusbar(nullptr);
 
		PositionNewsMessage(nullptr);
 
		PositionNetworkChatWindow(nullptr);
 
	}
 
	return true;
 
}
 

	
 
static bool PopulationInLabelActive(int32 p1)
 
{
 
	UpdateAllTownVirtCoords();
 
	return true;
 
}
 

	
 
static bool RedrawScreen(int32 p1)
 
{
 
	MarkWholeScreenDirty();
 
	return true;
 
}
 

	
 
/**
 
 * Redraw the smallmap after a colour scheme change.
 
 * @param p1 Callback parameter.
 
 * @return Always true.
 
 */
 
static bool RedrawSmallmap(int32 p1)
 
static void RedrawSmallmap(int32 new_value)
 
{
 
	BuildLandLegend();
 
	BuildOwnerLegend();
 
	SetWindowClassesDirty(WC_SMALLMAP);
 
	return true;
 
}
 

	
 
static bool InvalidateDetailsWindow(int32 p1)
 
{
 
	SetWindowClassesDirty(WC_VEHICLE_DETAILS);
 
	return true;
 
}
 

	
 
static bool StationSpreadChanged(int32 p1)
 
static void StationSpreadChanged(int32 p1)
 
{
 
	InvalidateWindowData(WC_SELECT_STATION, 0);
 
	InvalidateWindowData(WC_BUILD_STATION, 0);
 
	return true;
 
}
 

	
 
static bool InvalidateBuildIndustryWindow(int32 p1)
 
static void CloseSignalGUI(int32 new_value)
 
{
 
	InvalidateWindowData(WC_BUILD_INDUSTRY, 0);
 
	return true;
 
}
 

	
 
static bool CloseSignalGUI(int32 p1)
 
{
 
	if (p1 == 0) {
 
	if (new_value == 0) {
 
		DeleteWindowByClass(WC_BUILD_SIGNAL);
 
	}
 
	return true;
 
}
 

	
 
static bool InvalidateTownViewWindow(int32 p1)
 
{
 
	InvalidateWindowClassesData(WC_TOWN_VIEW, p1);
 
	return true;
 
}
 

	
 
static bool DeleteSelectStationWindow(int32 p1)
 
{
 
	DeleteWindowById(WC_SELECT_STATION, 0);
 
	return true;
 
}
 

	
 
static bool UpdateConsists(int32 p1)
 
static void UpdateConsists(int32 new_value)
 
{
 
	for (Train *t : Train::Iterate()) {
 
		/* Update the consist of all trains so the maximum speed is set correctly. */
 
		if (t->IsFrontEngine() || t->IsFreeWagon()) t->ConsistChanged(CCF_TRACK);
 
	}
 
	InvalidateWindowClassesData(WC_BUILD_VEHICLE, 0);
 
	return true;
 
}
 

	
 
/* Check service intervals of vehicles, p1 is value of % or day based servicing */
 
static bool CheckInterval(int32 p1)
 
/* Check service intervals of vehicles, newvalue is value of % or day based servicing */
 
static void UpdateServiceInterval(int32 new_value)
 
{
 
	bool update_vehicles;
 
	VehicleDefaultSettings *vds;
 
	if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) {
 
		vds = &_settings_client.company.vehicle;
 
		update_vehicles = false;
 
	} else {
 
		vds = &Company::Get(_current_company)->settings.vehicle;
 
		update_vehicles = true;
 
	}
 

	
 
	if (p1 != 0) {
 
	if (new_value != 0) {
 
		vds->servint_trains   = 50;
 
		vds->servint_roadveh  = 50;
 
		vds->servint_aircraft = 50;
 
		vds->servint_ships    = 50;
 
	} else {
 
		vds->servint_trains   = 150;
 
@@ -925,108 +882,78 @@ static bool CheckInterval(int32 p1)
 

	
 
	if (update_vehicles) {
 
		const Company *c = Company::Get(_current_company);
 
		for (Vehicle *v : Vehicle::Iterate()) {
 
			if (v->owner == _current_company && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) {
 
				v->SetServiceInterval(CompanyServiceInterval(c, v->type));
 
				v->SetServiceIntervalIsPercent(p1 != 0);
 
				v->SetServiceIntervalIsPercent(new_value != 0);
 
			}
 
		}
 
	}
 

	
 
	InvalidateDetailsWindow(0);
 

	
 
	return true;
 
	SetWindowClassesDirty(WC_VEHICLE_DETAILS);
 
}
 

	
 
static bool UpdateInterval(VehicleType type, int32 p1)
 
static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value)
 
{
 
	bool update_vehicles;
 
	VehicleDefaultSettings *vds;
 
	if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) {
 
		vds = &_settings_client.company.vehicle;
 
		update_vehicles = false;
 
	} else {
 
		vds = &Company::Get(_current_company)->settings.vehicle;
 
		update_vehicles = true;
 
	}
 

	
 
	/* Test if the interval is valid */
 
	uint16 interval = GetServiceIntervalClamped(p1, vds->servint_ispercent);
 
	if (interval != p1) return false;
 
	int32 interval = GetServiceIntervalClamped(new_value, vds->servint_ispercent);
 
	return interval == new_value;
 
}
 

	
 
	if (update_vehicles) {
 
static void UpdateServiceInterval(VehicleType type, int32 new_value)
 
{
 
	if (_game_mode != GM_MENU && Company::IsValidID(_current_company)) {
 
		for (Vehicle *v : Vehicle::Iterate()) {
 
			if (v->owner == _current_company && v->type == type && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) {
 
				v->SetServiceInterval(p1);
 
				v->SetServiceInterval(new_value);
 
			}
 
		}
 
	}
 

	
 
	InvalidateDetailsWindow(0);
 

	
 
	return true;
 
}
 

	
 
static bool UpdateIntervalTrains(int32 p1)
 
{
 
	return UpdateInterval(VEH_TRAIN, p1);
 
	SetWindowClassesDirty(WC_VEHICLE_DETAILS);
 
}
 

	
 
static bool UpdateIntervalRoadVeh(int32 p1)
 
{
 
	return UpdateInterval(VEH_ROAD, p1);
 
}
 

	
 
static bool UpdateIntervalShips(int32 p1)
 
{
 
	return UpdateInterval(VEH_SHIP, p1);
 
}
 

	
 
static bool UpdateIntervalAircraft(int32 p1)
 
{
 
	return UpdateInterval(VEH_AIRCRAFT, p1);
 
}
 

	
 
static bool TrainAccelerationModelChanged(int32 p1)
 
static void TrainAccelerationModelChanged(int32 new_value)
 
{
 
	for (Train *t : Train::Iterate()) {
 
		if (t->IsFrontEngine()) {
 
			t->tcache.cached_max_curve_speed = t->GetCurveSpeedLimit();
 
			t->UpdateAcceleration();
 
		}
 
	}
 

	
 
	/* These windows show acceleration values only when realistic acceleration is on. They must be redrawn after a setting change. */
 
	SetWindowClassesDirty(WC_ENGINE_PREVIEW);
 
	InvalidateWindowClassesData(WC_BUILD_VEHICLE, 0);
 
	SetWindowClassesDirty(WC_VEHICLE_DETAILS);
 

	
 
	return true;
 
}
 

	
 
/**
 
 * This function updates the train acceleration cache after a steepness change.
 
 * @param p1 Callback parameter.
 
 * @return Always true.
 
 * @param new_value Unused new value of setting.
 
 */
 
static bool TrainSlopeSteepnessChanged(int32 p1)
 
static void TrainSlopeSteepnessChanged(int32 new_value)
 
{
 
	for (Train *t : Train::Iterate()) {
 
		if (t->IsFrontEngine()) t->CargoChanged();
 
	}
 

	
 
	return true;
 
}
 

	
 
/**
 
 * This function updates realistic acceleration caches when the setting "Road vehicle acceleration model" is set.
 
 * @param p1 Callback parameter
 
 * @return Always true
 
 * @param new_value Unused new value of setting.
 
 */
 
static bool RoadVehAccelerationModelChanged(int32 p1)
 
static void RoadVehAccelerationModelChanged(int32 new_value)
 
{
 
	if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) {
 
		for (RoadVehicle *rv : RoadVehicle::Iterate()) {
 
			if (rv->IsFrontEngine()) {
 
				rv->CargoChanged();
 
			}
 
@@ -1034,181 +961,110 @@ static bool RoadVehAccelerationModelChan
 
	}
 

	
 
	/* These windows show acceleration values only when realistic acceleration is on. They must be redrawn after a setting change. */
 
	SetWindowClassesDirty(WC_ENGINE_PREVIEW);
 
	InvalidateWindowClassesData(WC_BUILD_VEHICLE, 0);
 
	SetWindowClassesDirty(WC_VEHICLE_DETAILS);
 

	
 
	return true;
 
}
 

	
 
/**
 
 * This function updates the road vehicle acceleration cache after a steepness change.
 
 * @param p1 Callback parameter.
 
 * @return Always true.
 
 * @param new_value Unused new value of setting.
 
 */
 
static bool RoadVehSlopeSteepnessChanged(int32 p1)
 
static void RoadVehSlopeSteepnessChanged(int32 new_value)
 
{
 
	for (RoadVehicle *rv : RoadVehicle::Iterate()) {
 
		if (rv->IsFrontEngine()) rv->CargoChanged();
 
	}
 

	
 
	return true;
 
}
 

	
 
static bool DragSignalsDensityChanged(int32)
 
{
 
	InvalidateWindowData(WC_BUILD_SIGNAL, 0);
 

	
 
	return true;
 
}
 

	
 
static bool TownFoundingChanged(int32 p1)
 
static void TownFoundingChanged(int32 new_value)
 
{
 
	if (_game_mode != GM_EDITOR && _settings_game.economy.found_town == TF_FORBIDDEN) {
 
		DeleteWindowById(WC_FOUND_TOWN, 0);
 
		return true;
 
	} else {
 
		InvalidateWindowData(WC_FOUND_TOWN, 0);
 
	}
 
	InvalidateWindowData(WC_FOUND_TOWN, 0);
 
	return true;
 
}
 

	
 
static bool InvalidateVehTimetableWindow(int32 p1)
 
{
 
	InvalidateWindowClassesData(WC_VEHICLE_TIMETABLE, VIWD_MODIFY_ORDERS);
 
	return true;
 
}
 

	
 
static bool ZoomMinMaxChanged(int32 p1)
 
static void ZoomMinMaxChanged(int32 new_value)
 
{
 
	extern void ConstrainAllViewportsZoom();
 
	ConstrainAllViewportsZoom();
 
	GfxClearSpriteCache();
 
	if (_settings_client.gui.zoom_min > _gui_zoom) {
 
		/* Restrict GUI zoom if it is no longer available. */
 
		_gui_zoom = _settings_client.gui.zoom_min;
 
		UpdateCursorSize();
 
		LoadStringWidthTable();
 
	}
 
	return true;
 
}
 

	
 
static bool SpriteZoomMinChanged(int32 p1) {
 
static void SpriteZoomMinChanged(int32 new_value)
 
{
 
	GfxClearSpriteCache();
 
	/* Force all sprites to redraw at the new chosen zoom level */
 
	MarkWholeScreenDirty();
 
	return true;
 
}
 

	
 
/**
 
 * Update any possible saveload window and delete any newgrf dialogue as
 
 * its widget parts might change. Reinit all windows as it allows access to the
 
 * newgrf debug button.
 
 * @param p1 unused.
 
 * @return Always true.
 
 * @param new_value unused.
 
 */
 
static bool InvalidateNewGRFChangeWindows(int32 p1)
 
static void InvalidateNewGRFChangeWindows(int32 new_value)
 
{
 
	InvalidateWindowClassesData(WC_SAVELOAD);
 
	DeleteWindowByClass(WC_GAME_OPTIONS);
 
	ReInitAllWindows(_gui_zoom_cfg);
 
	return true;
 
}
 

	
 
static bool InvalidateCompanyLiveryWindow(int32 p1)
 
static void InvalidateCompanyLiveryWindow(int32 new_value)
 
{
 
	InvalidateWindowClassesData(WC_COMPANY_COLOUR, -1);
 
	ResetVehicleColourMap();
 
	return RedrawScreen(p1);
 
}
 

	
 
static bool InvalidateIndustryViewWindow(int32 p1)
 
{
 
	InvalidateWindowClassesData(WC_INDUSTRY_VIEW);
 
	return true;
 
}
 

	
 
static bool InvalidateAISettingsWindow(int32 p1)
 
{
 
	InvalidateWindowClassesData(WC_AI_SETTINGS);
 
	return true;
 
}
 

	
 
/**
 
 * Update the town authority window after a town authority setting change.
 
 * @param p1 Unused.
 
 * @return Always true.
 
 */
 
static bool RedrawTownAuthority(int32 p1)
 
{
 
	SetWindowClassesDirty(WC_TOWN_AUTHORITY);
 
	return true;
 
}
 

	
 
/**
 
 * Invalidate the company infrastructure details window after a infrastructure maintenance setting change.
 
 * @param p1 Unused.
 
 * @return Always true.
 
 */
 
static bool InvalidateCompanyInfrastructureWindow(int32 p1)
 
{
 
	InvalidateWindowClassesData(WC_COMPANY_INFRASTRUCTURE);
 
	return true;
 
}
 

	
 
/**
 
 * Invalidate the company details window after the shares setting changed.
 
 * @param p1 Unused.
 
 * @return Always true.
 
 */
 
static bool InvalidateCompanyWindow(int32 p1)
 
{
 
	InvalidateWindowClassesData(WC_COMPANY);
 
	return true;
 
}
 

	
 
/** Checks if any settings are set to incorrect values, and sets them to correct values in that case. */
 
static void ValidateSettings()
 
{
 
	/* Do not allow a custom sea level with the original land generator. */
 
	if (_settings_newgame.game_creation.land_generator == LG_ORIGINAL &&
 
			_settings_newgame.difficulty.quantity_sea_lakes == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) {
 
		_settings_newgame.difficulty.quantity_sea_lakes = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE;
 
	}
 
}
 

	
 
static bool DifficultyNoiseChange(int32 i)
 
static void DifficultyNoiseChange(int32 new_value)
 
{
 
	if (_game_mode == GM_NORMAL) {
 
		UpdateAirportsNoise();
 
		if (_settings_game.economy.station_noise_level) {
 
			InvalidateWindowClassesData(WC_TOWN_VIEW, 0);
 
		}
 
	}
 

	
 
	return true;
 
}
 

	
 
static bool MaxNoAIsChange(int32 i)
 
static void MaxNoAIsChange(int32 new_value)
 
{
 
	if (GetGameSettings().difficulty.max_no_competitors != 0 &&
 
			AI::GetInfoList()->size() == 0 &&
 
			(!_networking || _network_server)) {
 
		ShowErrorMessage(STR_WARNING_NO_SUITABLE_AI, INVALID_STRING_ID, WL_CRITICAL);
 
	}
 

	
 
	InvalidateWindowClassesData(WC_GAME_OPTIONS, 0);
 
	return true;
 
}
 

	
 
/**
 
 * Check whether the road side may be changed.
 
 * @param p1 unused
 
 * @param new_value unused
 
 * @return true if the road side may be changed.
 
 */
 
static bool CheckRoadSide(int p1)
 
static bool CheckRoadSide(int32 &new_value)
 
{
 
	extern bool RoadVehiclesAreBuilt();
 
	return _game_mode == GM_MENU || !RoadVehiclesAreBuilt();
 
}
 

	
 
/**
 
@@ -1222,16 +1078,16 @@ static size_t ConvertLandscape(const cha
 
{
 
	/* try with the old values */
 
	static std::vector<std::string> _old_landscape_values{"normal", "hilly", "desert", "candy"};
 
	return OneOfManySettingDesc::ParseSingleValue(value, strlen(value), _old_landscape_values);
 
}
 

	
 
static bool CheckFreeformEdges(int32 p1)
 
static bool CheckFreeformEdges(int32 &new_value)
 
{
 
	if (_game_mode == GM_MENU) return true;
 
	if (p1 != 0) {
 
	if (new_value != 0) {
 
		for (Ship *s : Ship::Iterate()) {
 
			/* Check if there is a ship on the northern border. */
 
			if (TileX(s->tile) == 0 || TileY(s->tile) == 0) {
 
				ShowErrorMessage(STR_CONFIG_SETTING_EDGES_NOT_EMPTY, INVALID_STRING_ID, WL_ERROR);
 
				return false;
 
			}
 
@@ -1240,14 +1096,12 @@ static bool CheckFreeformEdges(int32 p1)
 
			/* Check if there is a non-deleted buoy on the northern border. */
 
			if (st->IsInUse() && (TileX(st->xy) == 0 || TileY(st->xy) == 0)) {
 
				ShowErrorMessage(STR_CONFIG_SETTING_EDGES_NOT_EMPTY, INVALID_STRING_ID, WL_ERROR);
 
				return false;
 
			}
 
		}
 
		for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, 0));
 
		for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(0, y));
 
	} else {
 
		for (uint i = 0; i < MapMaxX(); i++) {
 
			if (TileHeight(TileXY(i, 1)) != 0) {
 
				ShowErrorMessage(STR_CONFIG_SETTING_EDGES_NOT_WATER, INVALID_STRING_ID, WL_ERROR);
 
				return false;
 
			}
 
@@ -1267,83 +1121,88 @@ static bool CheckFreeformEdges(int32 p1)
 
		for (uint i = 1; i < MapMaxY(); i++) {
 
			if (!IsTileType(TileXY(MapMaxX() - 1, i), MP_WATER) || TileHeight(TileXY(MapMaxX(), i)) != 0) {
 
				ShowErrorMessage(STR_CONFIG_SETTING_EDGES_NOT_WATER, INVALID_STRING_ID, WL_ERROR);
 
				return false;
 
			}
 
		}
 
	}
 
	return true;
 
}
 

	
 
static void UpdateFreeformEdges(int32 new_value)
 
{
 
	if (_game_mode == GM_MENU) return;
 

	
 
	if (new_value != 0) {
 
		for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, 0));
 
		for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(0, y));
 
	} else {
 
		/* Make tiles at the border water again. */
 
		for (uint i = 0; i < MapMaxX(); i++) {
 
			SetTileHeight(TileXY(i, 0), 0);
 
			SetTileType(TileXY(i, 0), MP_WATER);
 
		}
 
		for (uint i = 0; i < MapMaxY(); i++) {
 
			SetTileHeight(TileXY(0, i), 0);
 
			SetTileType(TileXY(0, i), MP_WATER);
 
		}
 
	}
 
	MarkWholeScreenDirty();
 
	return true;
 
}
 

	
 
/**
 
 * Changing the setting "allow multiple NewGRF sets" is not allowed
 
 * if there are vehicles.
 
 */
 
static bool ChangeDynamicEngines(int32 p1)
 
static bool CheckDynamicEngines(int32 &new_value)
 
{
 
	if (_game_mode == GM_MENU) return true;
 

	
 
	if (!EngineOverrideManager::ResetToCurrentNewGRFConfig()) {
 
		ShowErrorMessage(STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES, INVALID_STRING_ID, WL_ERROR);
 
		return false;
 
	}
 

	
 
	return true;
 
}
 

	
 
static bool ChangeMaxHeightLevel(int32 p1)
 
static bool CheckMaxHeightLevel(int32 &new_value)
 
{
 
	if (_game_mode == GM_NORMAL) return false;
 
	if (_game_mode != GM_EDITOR) return true;
 

	
 
	/* Check if at least one mountain on the map is higher than the new value.
 
	 * If yes, disallow the change. */
 
	for (TileIndex t = 0; t < MapSize(); t++) {
 
		if ((int32)TileHeight(t) > p1) {
 
		if ((int32)TileHeight(t) > new_value) {
 
			ShowErrorMessage(STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN, INVALID_STRING_ID, WL_ERROR);
 
			/* Return old, unchanged value */
 
			return false;
 
		}
 
	}
 

	
 
	/* The smallmap uses an index from heightlevels to colours. Trigger rebuilding it. */
 
	InvalidateWindowClassesData(WC_SMALLMAP, 2);
 

	
 
	return true;
 
}
 

	
 
static bool StationCatchmentChanged(int32 p1)
 
static void StationCatchmentChanged(int32 new_value)
 
{
 
	Station::RecomputeCatchmentForAll();
 
	MarkWholeScreenDirty();
 
	return true;
 
}
 

	
 
static bool MaxVehiclesChanged(int32 p1)
 
static void MaxVehiclesChanged(int32 new_value)
 
{
 
	InvalidateWindowClassesData(WC_BUILD_TOOLBAR);
 
	MarkWholeScreenDirty();
 
	return true;
 
}
 

	
 
static bool InvalidateShipPathCache(int32 p1)
 
static void InvalidateShipPathCache(int32 new_value)
 
{
 
	for (Ship *s : Ship::Iterate()) {
 
		s->path.clear();
 
	}
 
	return true;
 
}
 

	
 
/**
 
 * Replace a passwords that are a literal asterisk with an empty string.
 
 * @param newval The new string value for this password field.
 
 * @return Always true.
 
@@ -1351,18 +1210,12 @@ static bool InvalidateShipPathCache(int3
 
static bool ReplaceAsteriskWithEmptyPassword(std::string &newval)
 
{
 
	if (newval.compare("*") == 0) newval.clear();
 
	return true;
 
}
 

	
 
static bool UpdateClientConfigValues(int32 p1)
 
{
 
	UpdateClientConfigValues();
 
	return true;
 
}
 

	
 
/** Update the game info, and send it to the clients when we are running as a server. */
 
static void UpdateClientConfigValues()
 
{
 
	NetworkServerUpdateGameInfo();
 
	if (_network_server) NetworkServerSendConfigUpdate();
 
}
 
@@ -1835,23 +1688,18 @@ void DeleteGRFPresetFromConfig(const cha
 
 * @param object The object the setting is in.
 
 * @param newval The new value for the setting.
 
 */
 
void IntSettingDesc::ChangeValue(const void *object, int32 newval) const
 
{
 
	int32 oldval = this->Read(object);
 

	
 
	this->MakeValueValidAndWrite(object, newval);
 
	newval = this->Read(object);
 

	
 
	this->MakeValueValid(newval);
 
	if (this->pre_check != nullptr && !this->pre_check(newval)) return;
 
	if (oldval == newval) return;
 

	
 
	if (this->proc != nullptr && !this->proc(newval)) {
 
		/* The change was not allowed, so revert. */
 
		this->Write(object, oldval);
 
		return;
 
	}
 
	this->Write(object, newval);
 
	if (this->post_callback != nullptr) this->post_callback(newval);
 

	
 
	if (this->flags & SGF_NO_NETWORK) {
 
		GamelogStartAction(GLAT_SETTING);
 
		GamelogSetting(this->name, oldval, newval);
 
		GamelogStopAction();
 
	}
src/settings_internal.h
Show inline comments
 
@@ -61,14 +61,12 @@ enum SettingType {
 
	ST_CLIENT,    ///< Client setting.
 

	
 
	ST_ALL,       ///< Used in setting filter to match all types.
 
};
 

	
 
struct IniItem;
 
typedef bool OnChange(int32 var);           ///< callback prototype on data modification
 
typedef size_t OnConvert(const char *value); ///< callback prototype for conversion error
 

	
 
/** Properties of config file settings. */
 
struct SettingDesc {
 
	SettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup) :
 
		name(name), flags(flags), startup(startup), save(save) {}
 
	virtual ~SettingDesc() {}
 
@@ -122,28 +120,45 @@ struct SettingDesc {
 
	 */
 
	virtual bool IsSameValue(const IniItem *item, void *object) const = 0;
 
};
 

	
 
/** Base integer type, including boolean, settings. Only these are shown in the settings UI. */
 
struct IntSettingDesc : SettingDesc {
 
	/**
 
	 * A check to be performed before the setting gets changed. The passed integer may be
 
	 * changed by the check if that is important, for example to remove some unwanted bit.
 
	 * The return value denotes whether the value, potentially after the changes,
 
	 * is allowed to be used/set in the configuration.
 
	 * @param value The prospective new value for the setting.
 
	 * @return True when the setting is accepted.
 
	 */
 
	typedef bool PreChangeCheck(int32 &value);
 
	/**
 
	 * A callback to denote that a setting has been changed.
 
	 * @param The new value for the setting.
 
	 */
 
	typedef void PostChangeCallback(int32 value);
 

	
 
	IntSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, int32 def,
 
		int32 min, uint32 max, int32 interval, StringID str, StringID str_help, StringID str_val,
 
		SettingCategory cat, OnChange *proc) :
 
			int32 min, uint32 max, int32 interval, StringID str, StringID str_help, StringID str_val,
 
			SettingCategory cat, PreChangeCheck pre_check, PostChangeCallback post_callback) :
 
		SettingDesc(save, name, flags, startup), def(def), min(min), max(max), interval(interval),
 
		str(str), str_help(str_help), str_val(str_val), cat(cat), proc(proc) {}
 
			str(str), str_help(str_help), str_val(str_val), cat(cat), pre_check(pre_check),
 
			post_callback(post_callback) {}
 
	virtual ~IntSettingDesc() {}
 

	
 
	int32 def;              ///< default value given when none is present
 
	int32 min;              ///< minimum values
 
	uint32 max;             ///< maximum values
 
	int32 interval;         ///< the interval to use between settings in the 'settings' window. If interval is '0' the interval is dynamically determined
 
	StringID str;           ///< (translated) string with descriptive text; gui and console
 
	StringID str_help;      ///< (Translated) string with help text; gui only.
 
	StringID str_val;       ///< (Translated) first string describing the value.
 
	SettingCategory cat;    ///< assigned categories of the setting
 
	OnChange *proc;         ///< callback procedure for when the value is changed
 
	PreChangeCheck *pre_check;         ///< Callback to check for the validity of the setting.
 
	PostChangeCallback *post_callback; ///< Callback when the setting has been changed.
 

	
 
	/**
 
	 * Check whether this setting is a boolean type setting.
 
	 * @return True when the underlying type is an integer.
 
	 */
 
	virtual bool IsBoolSetting() const { return false; }
 
@@ -163,27 +178,33 @@ private:
 
	void Write(const void *object, int32 value) const;
 
};
 

	
 
/** Boolean setting. */
 
struct BoolSettingDesc : IntSettingDesc {
 
	BoolSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, bool def,
 
		StringID str, StringID str_help, StringID str_val, SettingCategory cat, OnChange *proc) :
 
		IntSettingDesc(save, name, flags, startup, def, 0, 1, 0, str, str_help, str_val, cat, proc) {}
 
			StringID str, StringID str_help, StringID str_val, SettingCategory cat,
 
			PreChangeCheck pre_check, PostChangeCallback post_callback) :
 
		IntSettingDesc(save, name, flags, startup, def, 0, 1, 0, str, str_help, str_val, cat,
 
			pre_check, post_callback) {}
 
	virtual ~BoolSettingDesc() {}
 

	
 
	bool IsBoolSetting() const override { return true; }
 
	size_t ParseValue(const char *str) const override;
 
	void FormatValue(char *buf, const char *last, const void *object) const override;
 
};
 

	
 
/** One of many setting. */
 
struct OneOfManySettingDesc : IntSettingDesc {
 
	OneOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup,
 
		int32 def, int32 max, StringID str, StringID str_help, StringID str_val, SettingCategory cat, OnChange *proc,
 
		std::initializer_list<const char *> many, OnConvert *many_cnvt) :
 
		IntSettingDesc(save, name, flags, startup, def, 0, max, 0, str, str_help, str_val, cat, proc), many_cnvt(many_cnvt)
 
	typedef size_t OnConvert(const char *value); ///< callback prototype for conversion error
 

	
 
	OneOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup, int32 def,
 
			int32 max, StringID str, StringID str_help, StringID str_val, SettingCategory cat,
 
			PreChangeCheck pre_check, PostChangeCallback post_callback,
 
			std::initializer_list<const char *> many, OnConvert *many_cnvt) :
 
		IntSettingDesc(save, name, flags, startup, def, 0, max, 0, str, str_help, str_val, cat,
 
			pre_check, post_callback), many_cnvt(many_cnvt)
 
	{
 
		for (auto one : many) this->many.push_back(one);
 
	}
 

	
 
	virtual ~OneOfManySettingDesc() {}
 

	
 
@@ -197,16 +218,17 @@ struct OneOfManySettingDesc : IntSetting
 
	void FormatValue(char *buf, const char *last, const void *object) const override;
 
};
 

	
 
/** Many of many setting. */
 
struct ManyOfManySettingDesc : OneOfManySettingDesc {
 
	ManyOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, bool startup,
 
		int32 def, StringID str, StringID str_help, StringID str_val, SettingCategory cat, OnChange *proc,
 
		int32 def, StringID str, StringID str_help, StringID str_val, SettingCategory cat,
 
		PreChangeCheck pre_check, PostChangeCallback post_callback,
 
		std::initializer_list<const char *> many, OnConvert *many_cnvt) :
 
		OneOfManySettingDesc(save, name, flags, startup, def, (1 << many.size()) - 1, str, str_help,
 
			str_val, cat, proc, many, many_cnvt) {}
 
			str_val, cat, pre_check, post_callback, many, many_cnvt) {}
 
	virtual ~ManyOfManySettingDesc() {}
 

	
 
	size_t ParseValue(const char *str) const override;
 
	void FormatValue(char *buf, const char *last, const void *object) const override;
 
};
 

	
src/table/company_settings.ini
Show inline comments
 
@@ -2,37 +2,35 @@
 
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
;
 

	
 
[pre-amble]
 
static bool CheckInterval(int32 p1);
 
static bool InvalidateDetailsWindow(int32 p1);
 
static bool UpdateIntervalTrains(int32 p1);
 
static bool UpdateIntervalRoadVeh(int32 p1);
 
static bool UpdateIntervalShips(int32 p1);
 
static bool UpdateIntervalAircraft(int32 p1);
 
static void UpdateServiceInterval(int32 new_value);
 
static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value);
 
static void UpdateServiceInterval(VehicleType type, int32 new_value);
 

	
 
static const SettingTable _company_settings{
 
[post-amble]
 
};
 
[templates]
 
SDT_BOOL = SDT_BOOL($base, $var,        $flags, $guiflags, $def,                        $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDT_VAR  =  SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDT_BOOL = SDT_BOOL($base, $var,        $flags, $guiflags, $def,                        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDT_VAR  =  SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 

	
 
[validation]
 
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size");
 

	
 
[defaults]
 
flags    = 0
 
guiflags = SGF_PER_COMPANY
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
 
extra    = 0
 
startup  = false
 
@@ -79,59 +77,63 @@ def      = false
 
[SDT_BOOL]
 
base     = CompanySettings
 
var      = vehicle.servint_ispercent
 
def      = false
 
str      = STR_CONFIG_SETTING_SERVINT_ISPERCENT
 
strhelp  = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
 
proc     = CheckInterval
 
post_cb  = UpdateServiceInterval
 

	
 
[SDT_VAR]
 
base     = CompanySettings
 
var      = vehicle.servint_trains
 
type     = SLE_UINT16
 
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
 
def      = 150
 
min      = 5
 
max      = 800
 
str      = STR_CONFIG_SETTING_SERVINT_TRAINS
 
strhelp  = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
 
proc     = UpdateIntervalTrains
 
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); }
 
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); }
 

	
 
[SDT_VAR]
 
base     = CompanySettings
 
var      = vehicle.servint_roadveh
 
type     = SLE_UINT16
 
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
 
def      = 150
 
min      = 5
 
max      = 800
 
str      = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES
 
strhelp  = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
 
proc     = UpdateIntervalRoadVeh
 
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); }
 
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); }
 

	
 
[SDT_VAR]
 
base     = CompanySettings
 
var      = vehicle.servint_ships
 
type     = SLE_UINT16
 
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
 
def      = 360
 
min      = 5
 
max      = 800
 
str      = STR_CONFIG_SETTING_SERVINT_SHIPS
 
strhelp  = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
 
proc     = UpdateIntervalShips
 
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); }
 
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); }
 

	
 
[SDT_VAR]
 
base     = CompanySettings
 
var      = vehicle.servint_aircraft
 
type     = SLE_UINT16
 
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
 
def      = 100
 
min      = 5
 
max      = 800
 
str      = STR_CONFIG_SETTING_SERVINT_AIRCRAFT
 
strhelp  = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
 
proc     = UpdateIntervalAircraft
 
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); }
 
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); }
src/table/currency_settings.ini
Show inline comments
 
@@ -6,26 +6,25 @@
 

	
 
[pre-amble]
 
static const SettingTable _currency_settings{
 
[post-amble]
 
};
 
[templates]
 
SDT_VAR  = SDT_VAR ($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc,             $from, $to, $cat, $extra, $startup),
 
SDT_VAR  = SDT_VAR ($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDT_SSTR = SDT_SSTR($base, $var, $type, $flags, $guiflags, $def,                                                 $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 

	
 
[validation]
 
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size");
 

	
 
[defaults]
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NONE
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
src/table/gameopt_settings.ini
Show inline comments
 
@@ -34,18 +34,18 @@ static const SettingTable _gameopt_setti
 
 * 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlArray() hack
 
 * for savegames version 0 - though it is an array, it has to go through the byteswap process */
 
[post-amble]
 
};
 
[templates]
 
SDTG_LIST    =  SDTG_LIST($name,       $type, $flags, $guiflags, $var, $def, $length, $from, $to, $cat, $extra, $startup),
 
SDTG_VAR     =   SDTG_VAR($name,       $type, $flags, $guiflags, $var, $def, $min, $max, $interval,        $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDTG_VAR     =   SDTG_VAR($name,       $type, $flags, $guiflags, $var, $def, $min, $max, $interval,  $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDT_NULL     =   SDT_NULL(                                                   $length, $from, $to),
 
SDTC_OMANY   = SDTC_OMANY(       $var, $type, $flags, $guiflags, $def,       $max, $full,            $str, $strhelp, $strval, $proc, $from, $to,        $cat, $extra, $startup),
 
SDTG_OMANY   = SDTG_OMANY($name,       $type, $flags, $guiflags, $var, $def, $max, $full,            $str, $strhelp, $strval, $proc, $from, $to,        $cat, $extra, $startup),
 
SDT_OMANY    =  SDT_OMANY($base, $var, $type, $flags, $guiflags, $def,       $max, $full,            $str, $strhelp, $strval, $proc, $from, $to, $load, $cat, $extra, $startup),
 
SDT_VAR      =    SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max,        $interval, $str, $strhelp, $strval, $proc, $from, $to,        $cat, $extra, $startup),
 
SDTC_OMANY   = SDTC_OMANY(       $var, $type, $flags, $guiflags, $def,       $max, $full,            $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTG_OMANY   = SDTG_OMANY($name,       $type, $flags, $guiflags, $var, $def, $max, $full,            $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_OMANY    =  SDT_OMANY($base, $var, $type, $flags, $guiflags, $def,       $max, $full,            $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $cat, $extra, $startup),
 
SDT_VAR      =    SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max,        $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 

	
 
[validation]
 
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size");
 
@@ -55,13 +55,14 @@ SDT_VAR = static_assert($max <= MAX_$typ
 
flags    = 0
 
guiflags = SGF_NONE
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
 
extra    = 0
 
startup  = false
src/table/misc_settings.ini
Show inline comments
 
@@ -19,30 +19,29 @@ extern bool _allow_hidpi_window;
 

	
 
static const SettingTable _misc_settings{
 
[post-amble]
 
};
 
[templates]
 
SDTG_LIST  =  SDTG_LIST($name, $type, $flags, $guiflags, $var, $def,       $length,                                                            $from, $to, $cat, $extra, $startup),
 
SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $guiflags, $var, $def,                        $full, $str, $strhelp, $strval, $proc,             $from, $to, $cat, $extra, $startup),
 
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def,       $max,            $full, $str, $strhelp, $strval, $proc,             $from, $to, $cat, $extra, $startup),
 
SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $guiflags, $var, $def,                        $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def,       $max,            $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDTG_SSTR  =  SDTG_SSTR($name, $type, $flags, $guiflags, $var, $def,       0,                                               $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDTG_BOOL  =  SDTG_BOOL($name,        $flags, $guiflags, $var, $def,                               $str, $strhelp, $strval, $proc,             $from, $to, $cat, $extra, $startup),
 
SDTG_VAR   =   SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval,        $str, $strhelp, $strval, $proc,             $from, $to, $cat, $extra, $startup),
 
SDTG_BOOL  =  SDTG_BOOL($name,        $flags, $guiflags, $var, $def,                               $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDTG_VAR   =   SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval,        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 

	
 
[validation]
 
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 

	
 
[defaults]
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NONE
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
src/table/settings.h.preamble
Show inline comments
 
@@ -55,65 +55,65 @@ static size_t ConvertLandscape(const cha
 
 */
 

	
 
#define NSD(type, ...) std::unique_ptr<const SettingDesc>(new type##SettingDesc(__VA_ARGS__))
 

	
 
/* Macros for various objects to go in the configuration file.
 
 * This section is for global variables */
 
#define SDTG_VAR(name, type, flags, guiflags, var, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	NSD(Int, SLEG_GENERAL(SL_VAR, var, type | flags, 1, from, to, extra), name, guiflags, startup, def, min, max, interval, str, strhelp, strval, cat, proc)
 
#define SDTG_VAR(name, type, flags, guiflags, var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(Int, SLEG_GENERAL(SL_VAR, var, type | flags, 1, from, to, extra), name, guiflags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback)
 

	
 
#define SDTG_BOOL(name, flags, guiflags, var, def, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	NSD(Bool, SLEG_GENERAL(SL_VAR, var, SLE_BOOL | flags, 1, from, to, extra), name, guiflags, startup, def, str, strhelp, strval, cat, proc)
 
#define SDTG_BOOL(name, flags, guiflags, var, def, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(Bool, SLEG_GENERAL(SL_VAR, var, SLE_BOOL | flags, 1, from, to, extra), name, guiflags, startup, def, str, strhelp, strval, cat, pre_check, post_callback)
 

	
 
#define SDTG_LIST(name, type, flags, guiflags, var, def, length, from, to, cat, extra, startup)\
 
	NSD(List, SLEG_GENERAL(SL_ARR, var, type | flags, length, from, to, extra), name, guiflags, startup, def)
 

	
 
#define SDTG_SSTR(name, type, flags, guiflags, var, def, max_length, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(String, SLEG_GENERAL(SL_STDSTR, var, type | flags, sizeof(var), from, to, extra), name, guiflags, startup, def, max_length, pre_check, post_callback)
 

	
 
#define SDTG_OMANY(name, type, flags, guiflags, var, def, max, full, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	NSD(OneOfMany, SLEG_GENERAL(SL_VAR, var, type | flags, 1, from, to, extra), name, guiflags, startup, def, max, str, strhelp, strval, cat, proc, full, nullptr)
 
#define SDTG_OMANY(name, type, flags, guiflags, var, def, max, full, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(OneOfMany, SLEG_GENERAL(SL_VAR, var, type | flags, 1, from, to, extra), name, guiflags, startup, def, max, str, strhelp, strval, cat, pre_check, post_callback, full, nullptr)
 

	
 
#define SDTG_MMANY(name, type, flags, guiflags, var, def, full, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	NSD(ManyOfMany, SLEG_GENERAL(SL_VAR, var, type | flags, 1, from, to, extra), name, guiflags, startup, def, str, strhelp, strval, cat, proc, full, nullptr)
 
#define SDTG_MMANY(name, type, flags, guiflags, var, def, full, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(ManyOfMany, SLEG_GENERAL(SL_VAR, var, type | flags, 1, from, to, extra), name, guiflags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, full, nullptr)
 

	
 
#define SDTG_NULL(length, from, to)\
 
	NSD(Null, SLEG_NULL(length, from, to))
 

	
 
/* Macros for various objects to go in the configuration file.
 
 * This section is for structures where their various members are saved */
 
#define SDT_VAR(base, var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	NSD(Int, SLE_GENERAL(SL_VAR, base, var, type | flags, 1, from, to, extra), #var, guiflags, startup, def, min, max, interval, str, strhelp, strval, cat, proc)
 
#define SDT_VAR(base, var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(Int, SLE_GENERAL(SL_VAR, base, var, type | flags, 1, from, to, extra), #var, guiflags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback)
 

	
 
#define SDT_BOOL(base, var, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	NSD(Bool, SLE_GENERAL(SL_VAR, base, var, SLE_BOOL | flags, 1, from, to, extra), #var, guiflags, startup, def, str, strhelp, strval, cat, proc)
 
#define SDT_BOOL(base, var, flags, guiflags, def, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(Bool, SLE_GENERAL(SL_VAR, base, var, SLE_BOOL | flags, 1, from, to, extra), #var, guiflags, startup, def, str, strhelp, strval, cat, pre_check, post_callback)
 

	
 
#define SDT_LIST(base, var, type, flags, guiflags, def, from, to, cat, extra, startup)\
 
	NSD(List, SLE_GENERAL(SL_ARR, base, var, type | flags, lengthof(((base*)8)->var), from, to, extra), #var, guiflags, startup, def)
 

	
 
#define SDT_SSTR(base, var, type, flags, guiflags, def, pre_check, post_callback, from, to, cat, extra, startup)\
 
	NSD(String, SLE_GENERAL(SL_STDSTR, base, var, type | flags, sizeof(((base*)8)->var), from, to, extra), #var, guiflags, startup, def, 0, pre_check, post_callback)
 

	
 
#define SDT_OMANY(base, var, type, flags, guiflags, def, max, full, str, strhelp, strval, proc, from, to, load, cat, extra, startup)\
 
	NSD(OneOfMany, SLE_GENERAL(SL_VAR, base, var, type | flags, 1, from, to, extra), #var, guiflags, startup, def, max, str, strhelp, strval, cat, proc, full, load)
 
#define SDT_OMANY(base, var, type, flags, guiflags, def, max, full, str, strhelp, strval, pre_check, post_callback, from, to, load, cat, extra, startup)\
 
	NSD(OneOfMany, SLE_GENERAL(SL_VAR, base, var, type | flags, 1, from, to, extra), #var, guiflags, startup, def, max, str, strhelp, strval, cat, pre_check, post_callback, full, load)
 

	
 
#define SDT_MMANY(base, var, type, flags, guiflags, def, full, str, proc, strhelp, strval, from, to, cat, extra, startup)\
 
	NSD(ManyOfMany, SLE_GENERAL(SL_VAR, base, var, type | flags, 1, from, to, extra), #var, guiflags, startup, def, str, strhelp, strval, cat, proc, full, nullptr)
 
#define SDT_MMANY(base, var, type, flags, guiflags, def, full, str, pre_check, post_callback, strhelp, strval, from, to, cat, extra, startup)\
 
	NSD(ManyOfMany, SLE_GENERAL(SL_VAR, base, var, type | flags, 1, from, to, extra), #var, guiflags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, full, nullptr)
 

	
 
#define SDT_NULL(length, from, to)\
 
	NSD(Null, SLE_CONDNULL(length, from, to))
 

	
 

	
 
#define SDTC_VAR(var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	SDTG_VAR(#var, type, flags, guiflags, _settings_client.var, def, min, max, interval, str, strhelp, strval, proc, from, to, cat, extra, startup)
 
#define SDTC_VAR(var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	SDTG_VAR(#var, type, flags, guiflags, _settings_client.var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)
 

	
 
#define SDTC_BOOL(var, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	SDTG_BOOL(#var, flags, guiflags, _settings_client.var, def, str, strhelp, strval, proc, from, to, cat, extra, startup)
 
#define SDTC_BOOL(var, flags, guiflags, def, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	SDTG_BOOL(#var, flags, guiflags, _settings_client.var, def, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)
 

	
 
#define SDTC_LIST(var, type, flags, guiflags, def, from, to, cat, extra, startup)\
 
	SDTG_LIST(#var, type, flags, guiflags, _settings_client.var, def, lengthof(_settings_client.var), from, to, cat, extra, startup)
 

	
 
#define SDTC_SSTR(var, type, flags, guiflags, def, max_length, pre_check, post_callback, from, to, cat, extra, startup)\
 
	SDTG_SSTR(#var, type, flags, guiflags, _settings_client.var, def, max_length, pre_check, post_callback, from, to, cat, extra, startup)\
 

	
 
#define SDTC_OMANY(var, type, flags, guiflags, def, max, full, str, strhelp, strval, proc, from, to, cat, extra, startup)\
 
	SDTG_OMANY(#var, type, flags, guiflags, _settings_client.var, def, max, full, str, strhelp, strval, proc, from, to, cat, extra, startup)
 
#define SDTC_OMANY(var, type, flags, guiflags, def, max, full, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)\
 
	SDTG_OMANY(#var, type, flags, guiflags, _settings_client.var, def, max, full, str, strhelp, strval, pre_check, post_callback, from, to, cat, extra, startup)
src/table/settings.ini
Show inline comments
 
@@ -3,52 +3,40 @@
 
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
;
 

	
 
[pre-amble]
 
/* Begin - Callback Functions for the various settings */
 
static bool v_PositionMainToolbar(int32 p1);
 
static bool v_PositionStatusbar(int32 p1);
 
static bool PopulationInLabelActive(int32 p1);
 
static bool RedrawScreen(int32 p1);
 
static bool RedrawSmallmap(int32 p1);
 
static bool StationSpreadChanged(int32 p1);
 
static bool InvalidateBuildIndustryWindow(int32 p1);
 
static bool CloseSignalGUI(int32 p1);
 
static bool InvalidateTownViewWindow(int32 p1);
 
static bool DeleteSelectStationWindow(int32 p1);
 
static bool UpdateConsists(int32 p1);
 
static bool TrainAccelerationModelChanged(int32 p1);
 
static bool RoadVehAccelerationModelChanged(int32 p1);
 
static bool TrainSlopeSteepnessChanged(int32 p1);
 
static bool RoadVehSlopeSteepnessChanged(int32 p1);
 
static bool DragSignalsDensityChanged(int32);
 
static bool TownFoundingChanged(int32 p1);
 
static bool DifficultyNoiseChange(int32 i);
 
static bool MaxNoAIsChange(int32 i);
 
static bool CheckRoadSide(int p1);
 
static bool ChangeMaxHeightLevel(int32 p1);
 
static bool CheckFreeformEdges(int32 p1);
 
static bool ChangeDynamicEngines(int32 p1);
 
static bool StationCatchmentChanged(int32 p1);
 
static bool InvalidateVehTimetableWindow(int32 p1);
 
static bool InvalidateCompanyLiveryWindow(int32 p1);
 
static bool InvalidateNewGRFChangeWindows(int32 p1);
 
static bool InvalidateIndustryViewWindow(int32 p1);
 
static bool InvalidateAISettingsWindow(int32 p1);
 
static bool RedrawTownAuthority(int32 p1);
 
static bool InvalidateCompanyInfrastructureWindow(int32 p1);
 
static bool InvalidateCompanyWindow(int32 p1);
 
static bool ZoomMinMaxChanged(int32 p1);
 
static bool SpriteZoomMinChanged(int32 p1);
 
static bool MaxVehiclesChanged(int32 p1);
 
static bool InvalidateShipPathCache(int32 p1);
 
static void v_PositionMainToolbar(int32 new_value);
 
static void v_PositionStatusbar(int32 new_value);
 
static void RedrawSmallmap(int32 new_value);
 
static void StationSpreadChanged(int32 new_value);
 
static void CloseSignalGUI(int32 new_value);
 
static void UpdateConsists(int32 new_value);
 
static void TrainAccelerationModelChanged(int32 new_value);
 
static void RoadVehAccelerationModelChanged(int32 new_value);
 
static void TrainSlopeSteepnessChanged(int32 new_value);
 
static void RoadVehSlopeSteepnessChanged(int32 new_value);
 
static void TownFoundingChanged(int32 new_value);
 
static void DifficultyNoiseChange(int32 new_value);
 
static void MaxNoAIsChange(int32 new_value);
 
static bool CheckRoadSide(int32 &new_value);
 
static bool CheckMaxHeightLevel(int32 &new_value);
 
static bool CheckFreeformEdges(int32 &new_value);
 
static void UpdateFreeformEdges(int32 new_value);
 
static bool CheckDynamicEngines(int32 &new_value);
 
static void StationCatchmentChanged(int32 new_value);
 
static void InvalidateCompanyLiveryWindow(int32 new_value);
 
static void InvalidateNewGRFChangeWindows(int32 new_value);
 
static void ZoomMinMaxChanged(int32 new_value);
 
static void SpriteZoomMinChanged(int32 new_value);
 
static void MaxVehiclesChanged(int32 new_value);
 
static void InvalidateShipPathCache(int32 new_value);
 

	
 
static bool ReplaceAsteriskWithEmptyPassword(std::string &newval);
 
static void UpdateClientConfigValues();
 
static bool UpdateClientConfigValues(int32 p1);
 

	
 
/* End - Callback Functions for the various settings */
 

	
 
/* Some settings do not need to be synchronised when playing in multiplayer.
 
 * These include for example the GUI settings and will not be saved with the
 
 * savegame.
 
@@ -59,24 +47,24 @@ static bool UpdateClientConfigValues(int
 
 * vehicles could decide on different moments that they are heading back to a
 
 * service depot, causing desyncs on a massive scale. */
 
const SettingTable _settings{
 
[post-amble]
 
};
 
[templates]
 
SDTG_BOOL  =  SDTG_BOOL($name,              $flags, $guiflags, $var, $def,                        $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDTG_VAR   =   SDTG_VAR($name,       $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDTG_OMANY = SDTG_OMANY($name,       $type, $flags, $guiflags, $var, $def,       $max, $full,     $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDTC_BOOL  =  SDTC_BOOL(       $var,        $flags, $guiflags, $def,                              $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDTG_BOOL  =  SDTG_BOOL($name,              $flags, $guiflags, $var, $def,                        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTG_VAR   =   SDTG_VAR($name,       $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTG_OMANY = SDTG_OMANY($name,       $type, $flags, $guiflags, $var, $def,       $max, $full,     $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTC_BOOL  =  SDTC_BOOL(       $var,        $flags, $guiflags, $def,                              $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTC_LIST  =  SDTC_LIST(       $var, $type, $flags, $guiflags, $def,                                                                          $from, $to,        $cat, $extra, $startup),
 
SDTC_OMANY = SDTC_OMANY(       $var, $type, $flags, $guiflags, $def,             $max, $full,     $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDTC_OMANY = SDTC_OMANY(       $var, $type, $flags, $guiflags, $def,             $max, $full,     $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTC_SSTR  =  SDTC_SSTR(       $var, $type, $flags, $guiflags, $def,             $length,                                  $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDTC_VAR   =   SDTC_VAR(       $var, $type, $flags, $guiflags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDT_BOOL   =   SDT_BOOL($base, $var,        $flags, $guiflags, $def,                              $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDT_OMANY  =  SDT_OMANY($base, $var, $type, $flags, $guiflags, $def,             $max, $full,     $str, $strhelp, $strval, $proc,             $from, $to, $load, $cat, $extra, $startup),
 
SDTC_VAR   =   SDTC_VAR(       $var, $type, $flags, $guiflags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_BOOL   =   SDT_BOOL($base, $var,        $flags, $guiflags, $def,                              $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_OMANY  =  SDT_OMANY($base, $var, $type, $flags, $guiflags, $def,             $max, $full,     $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $cat, $extra, $startup),
 
SDT_SSTR   =   SDT_SSTR($base, $var, $type, $flags, $guiflags, $def,                                                       $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_VAR    =    SDT_VAR($base, $var, $type, $flags, $guiflags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $proc,             $from, $to,        $cat, $extra, $startup),
 
SDT_VAR    =    SDT_VAR($base, $var, $type, $flags, $guiflags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
 
SDT_NULL   =   SDT_NULL($length, $from, $to),
 

	
 
[validation]
 
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 
@@ -88,13 +76,12 @@ SDT_VAR = static_assert($max <= MAX_$typ
 
flags    = 0
 
guiflags = SGF_NONE
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
 
@@ -111,13 +98,13 @@ var      = difficulty.max_no_competitors
 
type     = SLE_UINT8
 
from     = SLV_97
 
def      = 0
 
min      = 0
 
max      = MAX_COMPANIES - 1
 
interval = 1
 
proc     = MaxNoAIsChange
 
post_cb  = MaxNoAIsChange
 
cat      = SC_BASIC
 

	
 
[SDT_NULL]
 
length   = 1
 
from     = SLV_97
 
to       = SLV_110
 
@@ -321,13 +308,13 @@ def      = 0
 
min      = 0
 
max      = 2
 
interval = 1
 
str      = STR_CONFIG_SETTING_CITY_APPROVAL
 
strhelp  = STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT
 
strval   = STR_CITY_APPROVAL_PERMISSIVE
 
proc     = DifficultyNoiseChange
 
post_cb  = DifficultyNoiseChange
 

	
 
[SDTG_VAR]
 
name     = ""diff_level""
 
var      = _old_diff_level
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_CONFIG
 
@@ -381,13 +368,13 @@ guiflags = SGF_MULTISTRING | SGF_NO_NETW
 
def      = 1
 
max      = 1
 
full     = _roadsides
 
str      = STR_CONFIG_SETTING_ROAD_SIDE
 
strhelp  = STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT
 
strval   = STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT
 
proc     = CheckRoadSide
 
pre_cb   = CheckRoadSide
 
cat      = SC_BASIC
 

	
 
; Construction
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
@@ -399,13 +386,14 @@ def      = 0
 
min      = MIN_MAP_HEIGHT_LIMIT
 
max      = MAX_MAP_HEIGHT_LIMIT
 
interval = 1
 
str      = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT
 
strhelp  = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT
 
strval   = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE
 
proc     = ChangeMaxHeightLevel
 
pre_cb   = CheckMaxHeightLevel
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_SMALLMAP, 2); }
 
cat      = SC_ADVANCED
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = game_creation.heightmap_height
 
type     = SLE_UINT8
 
@@ -575,13 +563,13 @@ guiflags = SGF_MULTISTRING | SGF_NO_NETW
 
def      = 1
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_SIGNALSIDE
 
strhelp  = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SIGNALSIDE_LEFT
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = station.never_expire_airports
 
guiflags = SGF_NO_NETWORK
 
@@ -599,13 +587,13 @@ def      = TL_ORIGINAL
 
min      = TL_BEGIN
 
max      = NUM_TLS - 1
 
interval = 1
 
str      = STR_CONFIG_SETTING_TOWN_LAYOUT
 
strhelp  = STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT
 
strval   = STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT
 
proc     = TownFoundingChanged
 
post_cb  = TownFoundingChanged
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.allow_town_roads
 
from     = SLV_113
 
guiflags = SGF_NO_NETWORK
 
@@ -623,13 +611,13 @@ def      = TF_FORBIDDEN
 
min      = TF_BEGIN
 
max      = TF_END - 1
 
interval = 1
 
str      = STR_CONFIG_SETTING_TOWN_FOUNDING
 
strhelp  = STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT
 
strval   = STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN
 
proc     = TownFoundingChanged
 
post_cb  = TownFoundingChanged
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.allow_town_level_crossings
 
from     = SLV_143
 
@@ -819,13 +807,13 @@ def      = 1
 
min      = 0
 
max      = 1
 
interval = 1
 
str      = STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL
 
strhelp  = STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT
 
strval   = STR_CONFIG_SETTING_ORIGINAL
 
proc     = TrainAccelerationModelChanged
 
post_cb  = TrainAccelerationModelChanged
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.roadveh_acceleration_model
 
type     = SLE_UINT8
 
from     = SLV_139
 
@@ -834,13 +822,13 @@ def      = 1
 
min      = 0
 
max      = 1
 
interval = 1
 
str      = STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL
 
strhelp  = STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT
 
strval   = STR_CONFIG_SETTING_ORIGINAL
 
proc     = RoadVehAccelerationModelChanged
 
post_cb  = RoadVehAccelerationModelChanged
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.train_slope_steepness
 
type     = SLE_UINT8
 
from     = SLV_133
 
@@ -848,13 +836,13 @@ def      = 3
 
min      = 0
 
max      = 10
 
interval = 1
 
str      = STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS
 
strhelp  = STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_PERCENTAGE
 
proc     = TrainSlopeSteepnessChanged
 
post_cb  = TrainSlopeSteepnessChanged
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.roadveh_slope_steepness
 
type     = SLE_UINT8
 
@@ -863,22 +851,22 @@ def      = 7
 
min      = 0
 
max      = 10
 
interval = 1
 
str      = STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS
 
strhelp  = STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_PERCENTAGE
 
proc     = RoadVehSlopeSteepnessChanged
 
post_cb  = RoadVehSlopeSteepnessChanged
 
cat      = SC_EXPERT
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = pf.forbid_90_deg
 
def      = false
 
str      = STR_CONFIG_SETTING_FORBID_90_DEG
 
strhelp  = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT
 
proc     = InvalidateShipPathCache
 
post_cb  = InvalidateShipPathCache
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.max_train_length
 
type     = SLE_UINT8
 
@@ -995,13 +983,13 @@ def      = 2
 
min      = 1
 
max      = 2
 
interval = 1
 
str      = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS
 
strhelp  = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_PATHFINDER_NPF
 
proc     = InvalidateShipPathCache
 
post_cb  = InvalidateShipPathCache
 
cat      = SC_EXPERT
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = vehicle.never_expire_vehicles
 
guiflags = SGF_NO_NETWORK
 
@@ -1016,52 +1004,52 @@ type     = SLE_UINT16
 
def      = 500
 
min      = 0
 
max      = 5000
 
str      = STR_CONFIG_SETTING_MAX_TRAINS
 
strhelp  = STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT
 
strval   = STR_JUST_COMMA
 
proc     = MaxVehiclesChanged
 
post_cb  = MaxVehiclesChanged
 
cat      = SC_BASIC
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.max_roadveh
 
type     = SLE_UINT16
 
def      = 500
 
min      = 0
 
max      = 5000
 
str      = STR_CONFIG_SETTING_MAX_ROAD_VEHICLES
 
strhelp  = STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT
 
strval   = STR_JUST_COMMA
 
proc     = MaxVehiclesChanged
 
post_cb  = MaxVehiclesChanged
 
cat      = SC_BASIC
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.max_aircraft
 
type     = SLE_UINT16
 
def      = 200
 
min      = 0
 
max      = 5000
 
str      = STR_CONFIG_SETTING_MAX_AIRCRAFT
 
strhelp  = STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT
 
strval   = STR_JUST_COMMA
 
proc     = MaxVehiclesChanged
 
post_cb  = MaxVehiclesChanged
 
cat      = SC_BASIC
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.max_ships
 
type     = SLE_UINT16
 
def      = 300
 
min      = 0
 
max      = 5000
 
str      = STR_CONFIG_SETTING_MAX_SHIPS
 
strhelp  = STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT
 
strval   = STR_JUST_COMMA
 
proc     = MaxVehiclesChanged
 
post_cb  = MaxVehiclesChanged
 
cat      = SC_BASIC
 

	
 
[SDTG_BOOL]
 
name     = nullptr
 
guiflags = SGF_NO_NETWORK
 
var      = _old_vds.servint_ispercent
 
@@ -1119,23 +1107,23 @@ strhelp  = STR_CONFIG_SETTING_NOSERVICE_
 
base     = GameSettings
 
var      = vehicle.wagon_speed_limits
 
guiflags = SGF_NO_NETWORK
 
def      = true
 
str      = STR_CONFIG_SETTING_WAGONSPEEDLIMITS
 
strhelp  = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT
 
proc     = UpdateConsists
 
post_cb  = UpdateConsists
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = vehicle.disable_elrails
 
from     = SLV_38
 
guiflags = SGF_NO_NETWORK
 
def      = false
 
str      = STR_CONFIG_SETTING_DISABLE_ELRAILS
 
strhelp  = STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT
 
proc     = SettingsDisableElrail
 
post_cb  = SettingsDisableElrail
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.freight_trains
 
type     = SLE_UINT8
 
@@ -1145,13 +1133,13 @@ def      = 1
 
min      = 1
 
max      = 255
 
interval = 1
 
str      = STR_CONFIG_SETTING_FREIGHT_TRAINS
 
strhelp  = STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT
 
strval   = STR_JUST_COMMA
 
proc     = UpdateConsists
 
post_cb  = UpdateConsists
 

	
 
; order.timetabling
 
[SDT_NULL]
 
length   = 1
 
from     = SLV_67
 
to       = SLV_159
 
@@ -1172,13 +1160,13 @@ strval   = STR_CONFIG_SETTING_PLANE_SPEE
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = vehicle.dynamic_engines
 
from     = SLV_95
 
guiflags = SGF_NO_NETWORK
 
def      = true
 
proc     = ChangeDynamicEngines
 
pre_cb   = CheckDynamicEngines
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = vehicle.plane_crashes
 
type     = SLE_UINT8
 
@@ -1235,13 +1223,13 @@ type     = SLE_UINT8
 
def      = 12
 
min      = 4
 
max      = 64
 
str      = STR_CONFIG_SETTING_STATION_SPREAD
 
strhelp  = STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT
 
strval   = STR_CONFIG_SETTING_TILE_LENGTH
 
proc     = StationSpreadChanged
 
post_cb  = StationSpreadChanged
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = order.serviceathelipad
 
def      = true
 
@@ -1252,23 +1240,23 @@ cat      = SC_EXPERT
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = station.modified_catchment
 
def      = true
 
str      = STR_CONFIG_SETTING_CATCHMENT
 
strhelp  = STR_CONFIG_SETTING_CATCHMENT_HELPTEXT
 
proc     = StationCatchmentChanged
 
post_cb  = StationCatchmentChanged
 
cat      = SC_EXPERT
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = station.serve_neutral_industries
 
def      = true
 
from     = SLV_SERVE_NEUTRAL_INDUSTRIES
 
str      = STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES
 
strhelp  = STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT
 
proc     = StationCatchmentChanged
 
post_cb  = StationCatchmentChanged
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = order.gradual_loading
 
from     = SLV_40
 
guiflags = SGF_NO_NETWORK
 
@@ -1305,22 +1293,22 @@ base     = GameSettings
 
var      = economy.station_noise_level
 
from     = SLV_96
 
guiflags = SGF_NO_NETWORK
 
def      = false
 
str      = STR_CONFIG_SETTING_NOISE_LEVEL
 
strhelp  = STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT
 
proc     = InvalidateTownViewWindow
 
post_cb  = [](auto new_value) { InvalidateWindowClassesData(WC_TOWN_VIEW, new_value); }
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = station.distant_join_stations
 
from     = SLV_106
 
def      = true
 
str      = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS
 
strhelp  = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT
 
proc     = DeleteSelectStationWindow
 
post_cb  = [](auto) { DeleteWindowById(WC_SELECT_STATION, 0); }
 

	
 
##
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.inflation
 
guiflags = SGF_NO_NETWORK
 
@@ -1337,13 +1325,13 @@ guiflags = SGF_MULTISTRING
 
def      = 0
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD
 
strhelp  = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT
 
strval   = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE
 
proc     = InvalidateBuildIndustryWindow
 
post_cb  = [](auto) { InvalidateWindowData(WC_BUILD_INDUSTRY, 0); }
 
cat      = SC_BASIC
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = construction.industry_platform
 
type     = SLE_UINT8
 
@@ -1370,43 +1358,43 @@ to       = SLV_141
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.bribe
 
def      = true
 
str      = STR_CONFIG_SETTING_BRIBE
 
strhelp  = STR_CONFIG_SETTING_BRIBE_HELPTEXT
 
proc     = RedrawTownAuthority
 
post_cb  = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.exclusive_rights
 
from     = SLV_79
 
def      = true
 
str      = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE
 
strhelp  = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT
 
proc     = RedrawTownAuthority
 
post_cb  = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.fund_buildings
 
from     = SLV_165
 
def      = true
 
str      = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS
 
strhelp  = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT
 
proc     = RedrawTownAuthority
 
post_cb  = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.fund_roads
 
from     = SLV_160
 
def      = true
 
str      = STR_CONFIG_SETTING_ALLOW_FUND_ROAD
 
strhelp  = STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT
 
proc     = RedrawTownAuthority
 
post_cb  = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.give_money
 
from     = SLV_79
 
@@ -1502,22 +1490,22 @@ guiflags = SGF_MULTISTRING
 
def      = ET_SMOOTH
 
min      = ET_BEGIN
 
max      = ET_END - 1
 
str      = STR_CONFIG_SETTING_ECONOMY_TYPE
 
strhelp  = STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT
 
strval   = STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL
 
proc     = InvalidateIndustryViewWindow
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_INDUSTRY_VIEW); }
 
cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = economy.allow_shares
 
def      = false
 
str      = STR_CONFIG_SETTING_ALLOW_SHARES
 
strhelp  = STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT
 
proc     = InvalidateCompanyWindow
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_COMPANY); }
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = economy.min_years_for_shares
 
type     = SLE_UINT8
 
from     = SLV_TRADING_AGE
 
@@ -1755,13 +1743,13 @@ cat      = SC_EXPERT
 
base     = GameSettings
 
var      = economy.infrastructure_maintenance
 
from     = SLV_166
 
def      = false
 
str      = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE
 
strhelp  = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT
 
proc     = InvalidateCompanyInfrastructureWindow
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_COMPANY_INFRASTRUCTURE); }
 
cat      = SC_BASIC
 

	
 
##
 
[SDT_VAR]
 
base     = GameSettings
 
var      = pf.wait_for_pbs_path
 
@@ -2424,13 +2412,14 @@ cat      = SC_BASIC
 

	
 
[SDT_BOOL]
 
base     = GameSettings
 
var      = construction.freeform_edges
 
from     = SLV_111
 
def      = true
 
proc     = CheckFreeformEdges
 
pre_cb   = CheckFreeformEdges
 
post_cb  = UpdateFreeformEdges
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = game_creation.water_borders
 
type     = SLE_UINT8
 
@@ -2525,39 +2514,39 @@ var      = locale.currency
 
type     = SLE_UINT8
 
from     = SLV_97
 
flags    = SLF_NO_NETWORK_SYNC
 
def      = 0
 
max      = CURRENCY_END - 1
 
full     = _locale_currencies
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 

	
 
[SDTG_OMANY]
 
name     = ""units""
 
var      = _old_units
 
type     = SLE_UINT8
 
from     = SLV_97
 
to       = SLV_184
 
flags    = SLF_NOT_IN_CONFIG
 
def      = 1
 
max      = 2
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 

	
 
[SDT_OMANY]
 
base     = GameSettings
 
var      = locale.units_velocity
 
type     = SLE_UINT8
 
from     = SLV_184
 
flags    = SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 1
 
max      = 3
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 
str      = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY
 
strhelp  = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL
 

	
 
[SDT_OMANY]
 
@@ -2567,13 +2556,13 @@ type     = SLE_UINT8
 
from     = SLV_184
 
flags    = SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 1
 
max      = 2
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 
str      = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER
 
strhelp  = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL
 

	
 
[SDT_OMANY]
 
@@ -2583,13 +2572,13 @@ type     = SLE_UINT8
 
from     = SLV_184
 
flags    = SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 1
 
max      = 2
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 
str      = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT
 
strhelp  = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL
 

	
 
[SDT_OMANY]
 
@@ -2599,13 +2588,13 @@ type     = SLE_UINT8
 
from     = SLV_184
 
flags    = SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 1
 
max      = 2
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 
str      = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME
 
strhelp  = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL
 

	
 
[SDT_OMANY]
 
@@ -2615,13 +2604,13 @@ type     = SLE_UINT8
 
from     = SLV_184
 
flags    = SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 2
 
max      = 2
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 
str      = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE
 
strhelp  = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL
 

	
 
[SDT_OMANY]
 
@@ -2631,13 +2620,13 @@ type     = SLE_UINT8
 
from     = SLV_184
 
flags    = SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 1
 
max      = 2
 
full     = _locale_units
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 
str      = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT
 
strhelp  = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL
 

	
 
[SDT_SSTR]
 
@@ -2808,13 +2797,13 @@ guiflags = SGF_MULTISTRING
 
def      = 1
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_TOOLBAR_POS
 
strhelp  = STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT
 
proc     = v_PositionMainToolbar
 
post_cb  = v_PositionMainToolbar
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = gui.statusbar_pos
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -2822,13 +2811,13 @@ guiflags = SGF_MULTISTRING
 
def      = 1
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_STATUSBAR_POS
 
strhelp  = STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT
 
proc     = v_PositionStatusbar
 
post_cb  = v_PositionStatusbar
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = gui.window_snap_radius
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -2863,13 +2852,13 @@ guiflags = SGF_MULTISTRING
 
def      = ZOOM_LVL_MIN
 
min      = ZOOM_LVL_MIN
 
max      = ZOOM_LVL_OUT_4X
 
str      = STR_CONFIG_SETTING_ZOOM_MIN
 
strhelp  = STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT
 
strval   = STR_CONFIG_SETTING_ZOOM_LVL_MIN
 
proc     = ZoomMinMaxChanged
 
post_cb  = ZoomMinMaxChanged
 
startup  = true
 

	
 
[SDTC_VAR]
 
var      = gui.zoom_max
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -2877,13 +2866,13 @@ guiflags = SGF_MULTISTRING
 
def      = ZOOM_LVL_MAX
 
min      = ZOOM_LVL_OUT_8X
 
max      = ZOOM_LVL_MAX
 
str      = STR_CONFIG_SETTING_ZOOM_MAX
 
strhelp  = STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT
 
strval   = STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X
 
proc     = ZoomMinMaxChanged
 
post_cb  = ZoomMinMaxChanged
 
startup  = true
 

	
 
[SDTC_VAR]
 
var      = gui.sprite_zoom_min
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -2891,21 +2880,21 @@ guiflags = SGF_MULTISTRING
 
def      = ZOOM_LVL_MIN
 
min      = ZOOM_LVL_MIN
 
max      = ZOOM_LVL_OUT_4X
 
str      = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN
 
strhelp  = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN
 
proc     = SpriteZoomMinChanged
 
post_cb  = SpriteZoomMinChanged
 

	
 
[SDTC_BOOL]
 
var      = gui.population_in_label
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_POPULATION_IN_LABEL
 
strhelp  = STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT
 
proc     = PopulationInLabelActive
 
post_cb  = [](auto) { UpdateAllTownVirtCoords(); }
 

	
 
[SDTC_BOOL]
 
var      = gui.link_terraform_toolbar
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
str      = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR
 
@@ -2919,26 +2908,26 @@ guiflags = SGF_MULTISTRING
 
def      = 0
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR
 
strhelp  = STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT
 
strval   = STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN
 
proc     = RedrawSmallmap
 
post_cb  = RedrawSmallmap
 

	
 
[SDTC_VAR]
 
var      = gui.liveries
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 2
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_LIVERIES
 
strhelp  = STR_CONFIG_SETTING_LIVERIES_HELPTEXT
 
strval   = STR_CONFIG_SETTING_LIVERIES_NONE
 
proc     = InvalidateCompanyLiveryWindow
 
post_cb  = InvalidateCompanyLiveryWindow
 

	
 
[SDTC_VAR]
 
var      = gui.starting_colour
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
@@ -3014,22 +3003,22 @@ strval   = STR_CONFIG_SETTING_COMPANIES_
 
[SDTC_BOOL]
 
var      = gui.timetable_in_ticks
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
str      = STR_CONFIG_SETTING_TIMETABLE_IN_TICKS
 
strhelp  = STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT
 
proc     = InvalidateVehTimetableWindow
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_VEHICLE_TIMETABLE, VIWD_MODIFY_ORDERS); }
 
cat      = SC_EXPERT
 

	
 
[SDTC_BOOL]
 
var      = gui.timetable_arrival_departure
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE
 
strhelp  = STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT
 
proc     = InvalidateVehTimetableWindow
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_VEHICLE_TIMETABLE, VIWD_MODIFY_ORDERS); }
 

	
 
[SDTC_BOOL]
 
var      = gui.quick_goto
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_QUICKGOTO
 
@@ -3044,13 +3033,13 @@ guiflags = SGF_MULTISTRING
 
def      = 1
 
min      = 0
 
max      = 2
 
str      = STR_CONFIG_SETTING_LOADING_INDICATORS
 
strhelp  = STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT
 
strval   = STR_CONFIG_SETTING_COMPANIES_OFF
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = gui.default_rail_type
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -3066,13 +3055,13 @@ cat      = SC_BASIC
 
[SDTC_BOOL]
 
var      = gui.enable_signal_gui
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI
 
strhelp  = STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT
 
proc     = CloseSignalGUI
 
post_cb  = CloseSignalGUI
 
cat      = SC_EXPERT
 

	
 
[SDTC_VAR]
 
var      = gui.coloured_news_year
 
type     = SLE_INT32
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -3092,13 +3081,13 @@ flags    = SLF_NOT_IN_SAVE | SLF_NO_NETW
 
def      = 4
 
min      = 1
 
max      = 20
 
str      = STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY
 
strhelp  = STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT
 
strval   = STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE
 
proc     = DragSignalsDensityChanged
 
post_cb  = [](auto) { InvalidateWindowData(WC_BUILD_SIGNAL, 0); }
 
cat      = SC_BASIC
 

	
 
[SDTC_BOOL]
 
var      = gui.drag_signals_fixed_distance
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
@@ -3114,13 +3103,13 @@ def      = 1950
 
min      = MIN_YEAR
 
max      = MAX_YEAR
 
interval = 1
 
str      = STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE
 
strhelp  = STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT
 
strval   = STR_JUST_INT
 
proc     = ResetSignalVariant
 
post_cb  = ResetSignalVariant
 

	
 
[SDTC_BOOL]
 
var      = gui.vehicle_income_warn
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_WARN_INCOME_LESS
 
@@ -3210,13 +3199,13 @@ max      = 255
 
[SDTC_BOOL]
 
var      = gui.show_track_reservation
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION
 
strhelp  = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = gui.default_signal_type
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -3283,13 +3272,13 @@ cat      = SC_BASIC
 
[SDTC_BOOL]
 
var      = gui.expenses_layout
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = true
 
str      = STR_CONFIG_SETTING_EXPENSES_LAYOUT
 
strhelp  = STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 

	
 
[SDTC_VAR]
 
var      = gui.station_gui_group_order
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = 0
 
@@ -3331,21 +3320,21 @@ flags    = SLF_NOT_IN_SAVE | SLF_NO_NETW
 
def      = 3
 
min      = 1
 
max      = 5
 
str      = STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS
 
strhelp  = STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT
 
strval   = STR_JUST_COMMA
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 

	
 
[SDTC_BOOL]
 
var      = gui.show_newgrf_name
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
str      = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME
 
strhelp  = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT
 
proc     = RedrawScreen
 
post_cb  = [](auto) { MarkWholeScreenDirty(); }
 
cat      = SC_ADVANCED
 

	
 
; For the dedicated build we'll enable dates in logs by default.
 
[SDTC_BOOL]
 
ifdef    = DEDICATED
 
var      = gui.show_date_in_logs
 
@@ -3376,27 +3365,27 @@ max      = 2
 
cat      = SC_EXPERT
 

	
 
[SDTC_BOOL]
 
var      = gui.newgrf_developer_tools
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
proc     = InvalidateNewGRFChangeWindows
 
post_cb  = InvalidateNewGRFChangeWindows
 
cat      = SC_EXPERT
 

	
 
[SDTC_BOOL]
 
var      = gui.ai_developer_tools
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
proc     = InvalidateAISettingsWindow
 
post_cb  = [](auto) { InvalidateWindowClassesData(WC_AI_SETTINGS); }
 
cat      = SC_EXPERT
 

	
 
[SDTC_BOOL]
 
var      = gui.scenario_developer
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
proc     = InvalidateNewGRFChangeWindows
 
post_cb  = InvalidateNewGRFChangeWindows
 

	
 
[SDTC_BOOL]
 
var      = gui.newgrf_show_old_versions
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
def      = false
 
cat      = SC_EXPERT
 
@@ -3406,13 +3395,13 @@ var      = gui.newgrf_default_palette
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_MULTISTRING
 
def      = 1
 
min      = 0
 
max      = 1
 
proc     = UpdateNewGRFConfigPalette
 
post_cb  = UpdateNewGRFConfigPalette
 
cat      = SC_EXPERT
 

	
 
[SDTC_VAR]
 
var      = gui.console_backlog_timeout
 
type     = SLE_UINT16
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
@@ -4026,35 +4015,35 @@ var      = network.max_companies
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NETWORK_ONLY
 
def      = 15
 
min      = 1
 
max      = MAX_COMPANIES
 
proc     = UpdateClientConfigValues
 
post_cb  = [](auto) { UpdateClientConfigValues(); }
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = network.max_clients
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NETWORK_ONLY
 
def      = 25
 
min      = 2
 
max      = MAX_CLIENTS
 
proc     = UpdateClientConfigValues
 
post_cb  = [](auto) { UpdateClientConfigValues(); }
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = network.max_spectators
 
type     = SLE_UINT8
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NETWORK_ONLY
 
def      = 15
 
min      = 0
 
max      = MAX_CLIENTS
 
proc     = UpdateClientConfigValues
 
post_cb  = [](auto) { UpdateClientConfigValues(); }
 
cat      = SC_BASIC
 

	
 
[SDTC_VAR]
 
var      = network.restart_game_year
 
type     = SLE_INT32
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
src/table/win32_settings.ini
Show inline comments
 
@@ -11,26 +11,27 @@ extern bool _window_maximize;
 

	
 
static const SettingTable _win32_settings{
 
[post-amble]
 
};
 
#endif /* _WIN32 */
 
[templates]
 
SDTG_BOOL = SDTG_BOOL($name,        $flags, $guiflags, $var, $def,                        $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDTG_VAR  =  SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDTG_BOOL = SDTG_BOOL($name,        $flags, $guiflags, $var, $def,                        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDTG_VAR  =  SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 

	
 
[validation]
 
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
 

	
 
[defaults]
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NONE
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
 
extra    = 0
 
startup  = true
src/table/window_settings.ini
Show inline comments
 
@@ -7,27 +7,28 @@
 
[pre-amble]
 

	
 
static const SettingTable _window_settings{
 
[post-amble]
 
};
 
[templates]
 
SDT_BOOL = SDT_BOOL($base, $var,        $flags, $guiflags, $def,                        $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDT_VAR  =  SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat, $extra, $startup),
 
SDT_BOOL = SDT_BOOL($base, $var,        $flags, $guiflags, $def,                        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 
SDT_VAR  =  SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
 

	
 
[validation]
 
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for $base.$var exceeds storage size");
 

	
 
[defaults]
 
base     = WindowDesc
 
flags    = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
 
guiflags = SGF_NONE
 
interval = 0
 
str      = STR_NULL
 
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
 
strval   = STR_NULL
 
proc     = nullptr
 
pre_cb   = nullptr
 
post_cb  = nullptr
 
load     = nullptr
 
from     = SL_MIN_VERSION
 
to       = SL_MAX_VERSION
 
cat      = SC_ADVANCED
 
extra    = 0
 
startup  = false
0 comments (0 inline, 0 general)