summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ai/ai.cpp4
-rw-r--r--src/ai/ai.h4
-rw-r--r--src/ai/default/default.cpp22
-rw-r--r--src/ai/trolly/trolly.cpp18
-rw-r--r--src/aircraft_cmd.cpp16
-rw-r--r--src/airport.cpp2
-rw-r--r--src/airport_gui.cpp10
-rw-r--r--src/autoslope.h2
-rw-r--r--src/build_vehicle_gui.cpp4
-rw-r--r--src/clear_cmd.cpp2
-rw-r--r--src/console_cmds.cpp8
-rw-r--r--src/date.cpp6
-rw-r--r--src/dock_gui.cpp6
-rw-r--r--src/economy.cpp36
-rw-r--r--src/elrail_func.h4
-rw-r--r--src/engine.cpp6
-rw-r--r--src/genworld.cpp10
-rw-r--r--src/genworld_gui.cpp128
-rw-r--r--src/heightmap.cpp6
-rw-r--r--src/industry_cmd.cpp26
-rw-r--r--src/industry_gui.cpp8
-rw-r--r--src/landscape.cpp2
-rw-r--r--src/main_gui.cpp4
-rw-r--r--src/misc.cpp2
-rw-r--r--src/misc_cmd.cpp8
-rw-r--r--src/misc_gui.cpp8
-rw-r--r--src/network/network.cpp2
-rw-r--r--src/network/network_client.cpp2
-rw-r--r--src/network/network_gui.cpp2
-rw-r--r--src/network/network_server.cpp4
-rw-r--r--src/newgrf.cpp176
-rw-r--r--src/newgrf_engine.cpp2
-rw-r--r--src/newgrf_town.cpp2
-rw-r--r--src/news_gui.cpp2
-rw-r--r--src/npf.cpp28
-rw-r--r--src/openttd.cpp62
-rw-r--r--src/order_cmd.cpp14
-rw-r--r--src/order_gui.cpp12
-rw-r--r--src/pathfind.cpp2
-rw-r--r--src/player_gui.cpp4
-rw-r--r--src/players.cpp32
-rw-r--r--src/rail_cmd.cpp12
-rw-r--r--src/rail_gui.cpp42
-rw-r--r--src/road_cmd.cpp16
-rw-r--r--src/road_gui.cpp6
-rw-r--r--src/roadveh_cmd.cpp16
-rw-r--r--src/saveload.cpp2
-rw-r--r--src/settings.cpp520
-rw-r--r--src/settings_gui.cpp202
-rw-r--r--src/settings_internal.h2
-rw-r--r--src/settings_type.h383
-rw-r--r--src/ship_cmd.cpp12
-rw-r--r--src/station.cpp2
-rw-r--r--src/station_cmd.cpp46
-rw-r--r--src/station_type.h2
-rw-r--r--src/statusbar_gui.cpp2
-rw-r--r--src/texteff.cpp4
-rw-r--r--src/tgp.cpp8
-rw-r--r--src/timetable_cmd.cpp8
-rw-r--r--src/timetable_gui.cpp8
-rw-r--r--src/toolbar_gui.cpp14
-rw-r--r--src/town.h4
-rw-r--r--src/town_cmd.cpp18
-rw-r--r--src/town_gui.cpp12
-rw-r--r--src/train_cmd.cpp44
-rw-r--r--src/train_gui.cpp6
-rw-r--r--src/tree_cmd.cpp10
-rw-r--r--src/tunnelbridge_cmd.cpp10
-rw-r--r--src/vehicle.cpp28
-rw-r--r--src/vehicle_gui.cpp30
-rw-r--r--src/video/cocoa/event.mm14
-rw-r--r--src/viewport.cpp12
-rw-r--r--src/water_cmd.cpp2
-rw-r--r--src/waypoint.cpp2
-rw-r--r--src/window.cpp18
-rw-r--r--src/yapf/yapf_base.hpp7
-rw-r--r--src/yapf/yapf_rail.cpp6
-rw-r--r--src/yapf/yapf_road.cpp6
-rw-r--r--src/yapf/yapf_settings.h72
-rw-r--r--src/yapf/yapf_ship.cpp4
80 files changed, 1137 insertions, 1173 deletions
diff --git a/src/ai/ai.cpp b/src/ai/ai.cpp
index 5e7330eb1..e48c8ef00 100644
--- a/src/ai/ai.cpp
+++ b/src/ai/ai.cpp
@@ -154,7 +154,7 @@ static void AI_RunTick(PlayerID player)
Player *p = GetPlayer(player);
_current_player = player;
- if (_patches.ainew_active) {
+ if (_settings.ai.ainew_active) {
AiNewDoGameLoop(p);
} else {
/* Enable all kind of cheats the old AI needs in order to operate correctly... */
@@ -178,7 +178,7 @@ void AI_RunGameLoop()
if (!_ai.enabled) return;
/* Don't do anything if we are a network-client, or the AI has been disabled */
- if (_networking && (!_network_server || !_patches.ai_in_multiplayer)) return;
+ if (_networking && (!_network_server || !_settings.ai.ai_in_multiplayer)) return;
/* New tick */
_ai.tick++;
diff --git a/src/ai/ai.h b/src/ai/ai.h
index 430d6a5e8..373cae191 100644
--- a/src/ai/ai.h
+++ b/src/ai/ai.h
@@ -67,14 +67,14 @@ static inline bool AI_AllowNewAI()
/* If in network, and server, possible AI */
if (_networking && _network_server) {
/* Do we want AIs in multiplayer? */
- if (!_patches.ai_in_multiplayer)
+ if (!_settings.ai.ai_in_multiplayer)
return false;
/* Only the NewAI is allowed... sadly enough the old AI just doesn't support this
* system, because all commands are delayed by at least 1 tick, which causes
* a big problem, because it uses variables that are only set AFTER the command
* is really executed... */
- if (!_patches.ainew_active)
+ if (!_settings.ai.ainew_active)
return false;
}
diff --git a/src/ai/default/default.cpp b/src/ai/default/default.cpp
index 2843d0dc7..70aaf2c04 100644
--- a/src/ai/default/default.cpp
+++ b/src/ai/default/default.cpp
@@ -1570,21 +1570,21 @@ static void AiStateWantNewRoute(Player *p)
for (;;) {
r = (uint16)Random();
- if (_patches.ai_disable_veh_train &&
- _patches.ai_disable_veh_roadveh &&
- _patches.ai_disable_veh_aircraft &&
- _patches.ai_disable_veh_ship) {
+ if (_settings.ai.ai_disable_veh_train &&
+ _settings.ai.ai_disable_veh_roadveh &&
+ _settings.ai.ai_disable_veh_aircraft &&
+ _settings.ai.ai_disable_veh_ship) {
return;
}
if (r < 0x7626) {
- if (_patches.ai_disable_veh_train) continue;
+ if (_settings.ai.ai_disable_veh_train) continue;
AiWantTrainRoute(p);
} else if (r < 0xC4EA) {
- if (_patches.ai_disable_veh_roadveh) continue;
+ if (_settings.ai.ai_disable_veh_roadveh) continue;
AiWantRoadRoute(p);
} else if (r < 0xD89B) {
- if (_patches.ai_disable_veh_aircraft) continue;
+ if (_settings.ai.ai_disable_veh_aircraft) continue;
AiWantAircraftRoute(p);
} else {
/* Ships are not implemented in this (broken) AI */
@@ -1603,7 +1603,7 @@ static void AiStateWantNewRoute(Player *p)
static bool AiCheckTrackResources(TileIndex tile, const AiDefaultBlockData *p, byte cargo)
{
- uint rad = (_patches.modified_catchment) ? CA_TRAIN : CA_UNMODIFIED;
+ uint rad = (_settings.station.modified_catchment) ? CA_TRAIN : CA_UNMODIFIED;
for (; p->mode != 4; p++) {
AcceptedCargo values;
@@ -2599,7 +2599,7 @@ static bool AiCheckRoadResources(TileIndex tile, const AiDefaultBlockData *p, by
uint values[NUM_CARGO];
int rad;
- if (_patches.modified_catchment) {
+ if (_settings.station.modified_catchment) {
rad = CA_TRUCK; // Same as CA_BUS at the moment?
} else { // change that at some point?
rad = 4;
@@ -3423,7 +3423,7 @@ static bool AiCheckAirportResources(TileIndex tile, const AiDefaultBlockData *p,
const AirportFTAClass* airport = GetAirport(p->attr);
uint w = airport->size_x;
uint h = airport->size_y;
- uint rad = _patches.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
+ uint rad = _settings.station.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
if (cargo & 0x80) {
GetProductionAroundTiles(values, tile2, w, h, rad);
@@ -3975,7 +3975,7 @@ void AiDoGameLoop(Player *p)
// to the patch-setting
// Also, it takes into account the setting if the service-interval is in days
// or in %
- _ai_service_interval = _patches.servint_ispercent ? 80 : 180;
+ _ai_service_interval = _settings.vehicle.servint_ispercent ? 80 : 180;
if (IsHumanPlayer(_current_player)) return;
diff --git a/src/ai/trolly/trolly.cpp b/src/ai/trolly/trolly.cpp
index 9672a9664..4be9819ca 100644
--- a/src/ai/trolly/trolly.cpp
+++ b/src/ai/trolly/trolly.cpp
@@ -130,9 +130,9 @@ static void AiNew_State_WakeUp(Player *p)
// Check all vehicles once in a while
_players_ainew[p->index].action = AI_ACTION_CHECK_ALL_VEHICLES;
_players_ainew[p->index].last_vehiclecheck_date = _date;
- } else if (c < 100 && !_patches.ai_disable_veh_roadveh) {
+ } else if (c < 100 && !_settings.ai.ai_disable_veh_roadveh) {
// Do we have any spots for road-vehicles left open?
- if (GetFreeUnitNumber(VEH_ROAD) <= _patches.max_roadveh) {
+ if (GetFreeUnitNumber(VEH_ROAD) <= _settings.vehicle.max_roadveh) {
if (c < 85) {
_players_ainew[p->index].action = AI_ACTION_TRUCK_ROUTE;
} else {
@@ -140,8 +140,8 @@ static void AiNew_State_WakeUp(Player *p)
}
}
#if 0
- } else if (c < 200 && !_patches.ai_disable_veh_train) {
- if (GetFreeUnitNumber(VEH_TRAIN) <= _patches.max_trains) {
+ } else if (c < 200 && !_settings.ai.ai_disable_veh_train) {
+ if (GetFreeUnitNumber(VEH_TRAIN) <= _settings.vehicle.max_trains) {
_players_ainew[p->index].action = AI_ACTION_TRAIN_ROUTE;
}
#endif
@@ -155,7 +155,7 @@ static void AiNew_State_WakeUp(Player *p)
return;
}
- if (_patches.ai_disable_veh_roadveh && (
+ if (_settings.ai.ai_disable_veh_roadveh && (
_players_ainew[p->index].action == AI_ACTION_BUS_ROUTE ||
_players_ainew[p->index].action == AI_ACTION_TRUCK_ROUTE
)) {
@@ -179,7 +179,7 @@ static void AiNew_State_WakeUp(Player *p)
// to build the route anyway..
if (_players_ainew[p->index].action == AI_ACTION_BUS_ROUTE &&
money > AI_MINIMUM_BUS_ROUTE_MONEY) {
- if (GetFreeUnitNumber(VEH_ROAD) > _patches.max_roadveh) {
+ if (GetFreeUnitNumber(VEH_ROAD) > _settings.vehicle.max_roadveh) {
_players_ainew[p->index].action = AI_ACTION_NONE;
return;
}
@@ -190,7 +190,7 @@ static void AiNew_State_WakeUp(Player *p)
}
if (_players_ainew[p->index].action == AI_ACTION_TRUCK_ROUTE &&
money > AI_MINIMUM_TRUCK_ROUTE_MONEY) {
- if (GetFreeUnitNumber(VEH_ROAD) > _patches.max_roadveh) {
+ if (GetFreeUnitNumber(VEH_ROAD) > _settings.vehicle.max_roadveh) {
_players_ainew[p->index].action = AI_ACTION_NONE;
return;
}
@@ -1035,7 +1035,7 @@ static void AiNew_State_BuildPath(Player *p)
if (_players_ainew[p->index].path_info.position == -2) {
// This means we are done building!
- if (_players_ainew[p->index].tbt == AI_TRUCK && !_patches.roadveh_queue) {
+ if (_players_ainew[p->index].tbt == AI_TRUCK && !_settings.pf.roadveh_queue) {
// If they not queue, they have to go up and down to try again at a station...
// We don't want that, so try building some road left or right of the station
DiagDirection dir1, dir2, dir3;
@@ -1186,7 +1186,7 @@ static void AiNew_State_GiveOrders(Player *p)
}
// Very handy for AI, goto depot.. but yeah, it needs to be activated ;)
- if (_patches.gotodepot) {
+ if (_settings.order.gotodepot) {
idx = 0;
order.MakeGoToDepot(GetDepotByTile(_players_ainew[p->index].depot_tile)->index, ODTFB_PART_OF_ORDERS);
AI_DoCommand(0, _players_ainew[p->index].veh_id + (idx << 16), order.Pack(), DC_EXEC, CMD_INSERT_ORDER);
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index cb89f172b..96faee211 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -287,7 +287,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
}
UnitID unit_num = HasBit(p2, 0) ? 0 : GetFreeUnitNumber(VEH_AIRCRAFT);
- if (unit_num > _patches.max_aircraft)
+ if (unit_num > _settings.vehicle.max_aircraft)
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
if (flags & DC_EXEC) {
@@ -404,7 +404,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
v->u.air.targetairport = GetStationIndex(tile);
v->SetNext(u);
- v->service_interval = _patches.servint_aircraft;
+ v->service_interval = _settings.vehicle.servint_aircraft;
v->date_of_last_service = _date;
v->build_year = u->build_year = _cur_year;
@@ -664,7 +664,7 @@ CommandCost CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
static void CheckIfAircraftNeedsService(Vehicle *v)
{
- if (_patches.servint_aircraft == 0 || !v->NeedsAutomaticServicing()) return;
+ if (_settings.vehicle.servint_aircraft == 0 || !v->NeedsAutomaticServicing()) return;
if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
@@ -884,7 +884,7 @@ static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE,
/* Adjust speed limits by plane speed factor to prevent taxiing
* and take-off speeds being too low. */
- speed_limit *= _patches.plane_speed;
+ speed_limit *= _settings.vehicle.plane_speed;
if (v->u.air.cached_max_speed < speed_limit) {
if (v->cur_speed < speed_limit) hard_limit = false;
@@ -902,7 +902,7 @@ static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE,
* speeds to that aircraft do not get to taxi speed straight after
* touchdown. */
if (!hard_limit && v->cur_speed > speed_limit) {
- speed_limit = v->cur_speed - max(1, ((v->cur_speed * v->cur_speed) / 16384) / _patches.plane_speed);
+ speed_limit = v->cur_speed - max(1, ((v->cur_speed * v->cur_speed) / 16384) / _settings.vehicle.plane_speed);
}
spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit);
@@ -913,12 +913,12 @@ static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE,
/* updates statusbar only if speed have changed to save CPU time */
if (spd != v->cur_speed) {
v->cur_speed = spd;
- if (_patches.vehicle_speed)
+ if (_settings.gui.vehicle_speed)
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
/* Adjust distance moved by plane speed setting */
- if (_patches.plane_speed > 1) spd /= _patches.plane_speed;
+ if (_settings.vehicle.plane_speed > 1) spd /= _settings.vehicle.plane_speed;
if (!(v->direction & 1)) spd = spd * 3 / 4;
@@ -1599,7 +1599,7 @@ static void AircraftEventHandler_AtTerminal(Vehicle *v, const AirportFTAClass *a
AircraftEventHandler_EnterTerminal(v, apc);
/* on an airport with helipads, a helicopter will always land there
* and get serviced at the same time - patch setting */
- if (_patches.serviceathelipad) {
+ if (_settings.order.serviceathelipad) {
if (v->subtype == AIR_HELICOPTER && apc->helipads != NULL) {
/* an exerpt of ServiceAircraft, without the invisibility stuff */
v->date_of_last_service = _date;
diff --git a/src/airport.cpp b/src/airport.cpp
index faef68711..e478d3480 100644
--- a/src/airport.cpp
+++ b/src/airport.cpp
@@ -477,7 +477,7 @@ uint32 GetValidAirports()
{
uint32 mask = 0;
- if (_cur_year < 1960 || _patches.always_small_airport) SetBit(mask, 0); // small airport
+ if (_cur_year < 1960 || _settings.station.always_small_airport) SetBit(mask, 0); // small airport
if (_cur_year >= 1955) SetBit(mask, 1); // city airport
if (_cur_year >= 1963) SetBit(mask, 2); // heliport
if (_cur_year >= 1980) SetBit(mask, 3); // metropolitan airport
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index 091f1bdcf..7be50bcc7 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -70,12 +70,12 @@ struct BuildAirToolbarWindow : Window {
BuildAirToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
{
this->FindWindowPlacementAndResize(desc);
- if (_patches.link_terraform_toolbar) ShowTerraformToolbar(this);
+ if (_settings.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
}
~BuildAirToolbarWindow()
{
- if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
+ if (_settings.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
}
virtual void OnPaint()
@@ -178,7 +178,7 @@ public:
this->SetWidgetLoweredState(BAW_BTN_DOHILIGHT, _station_show_coverage);
this->LowerWidget(_selected_airport_type + BAW_SMALL_AIRPORT);
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
ResizeWindowForWidget(this, BAW_BOTTOMPANEL, 0, 10);
}
@@ -211,14 +211,14 @@ public:
airport = GetAirport(_selected_airport_type);
SetTileSelectSize(airport->size_x, airport->size_y);
- int rad = _patches.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
+ int rad = _settings.station.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
this->DrawWidgets();
/* only show the station (airport) noise, if the noise option is activated */
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
/* show the noise of the selected airport */
SetDParam(0, airport->noise_level);
DrawString(2, 206, STR_STATION_NOISE, 0);
diff --git a/src/autoslope.h b/src/autoslope.h
index 91b851223..7b5e293bb 100644
--- a/src/autoslope.h
+++ b/src/autoslope.h
@@ -38,7 +38,7 @@ static inline bool AutoslopeCheckForEntranceEdge(TileIndex tile, uint z_new, Slo
*/
static inline bool AutoslopeEnabled()
{
- return (_patches.autoslope &&
+ return (_settings.construction.autoslope &&
((IsValidPlayer(_current_player) && !_is_old_ai_player) ||
(_current_player == OWNER_NONE && _game_mode == GM_EDITOR)));
}
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index 7f1dfe97f..b7c030494 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -506,7 +506,7 @@ static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const
y += 10;
/* Wagon speed limit, displayed if above zero */
- if (_patches.wagon_speed_limits) {
+ if (_settings.vehicle.wagon_speed_limits) {
uint max_speed = GetEngineProperty(engine_number, 0x09, rvi->max_speed);
if (max_speed > 0) {
SetDParam(0, max_speed * 10 / 16);
@@ -544,7 +544,7 @@ static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, cons
y += 10;
/* Max tractive effort - not applicable if old acceleration or maglev */
- if (_patches.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
+ if (_settings.vehicle.realistic_acceleration && rvi->railtype != RAILTYPE_MAGLEV) {
SetDParam(0, ((weight << multihead) * 10 * GetEngineProperty(engine_number, 0x1F, rvi->tractive_effort)) / 256);
DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, TC_FROMSTRING);
y += 10;
diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp
index fde9a3136..46bd31f6e 100644
--- a/src/clear_cmd.cpp
+++ b/src/clear_cmd.cpp
@@ -346,7 +346,7 @@ static void ChangeTileOwner_Clear(TileIndex tile, PlayerID old_player, PlayerID
void InitializeClearLand()
{
- _opt.snow_line = _patches.snow_line_height * TILE_HEIGHT;
+ _opt.snow_line = _settings.game_creation.snow_line_height * TILE_HEIGHT;
}
static CommandCost TerraformTile_Clear(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index 55c6017ed..25bdc78ad 100644
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -926,8 +926,8 @@ DEF_CONSOLE_CMD(ConRestart)
}
/* Don't copy the _newgame pointers to the real pointers, so call SwitchMode directly */
- _patches.map_x = MapLogX();
- _patches.map_y = FindFirstBit(MapSizeY());
+ _settings.game_creation.map_x = MapLogX();
+ _settings.game_creation.map_y = FindFirstBit(MapSizeY());
SwitchMode(SM_NEWGAME);
return true;
}
@@ -940,7 +940,7 @@ DEF_CONSOLE_CMD(ConGetSeed)
return true;
}
- IConsolePrintF(CC_DEFAULT, "Generation Seed: %u", _patches.generation_seed);
+ IConsolePrintF(CC_DEFAULT, "Generation Seed: %u", _settings.game_creation.generation_seed);
return true;
}
@@ -1083,7 +1083,7 @@ DEF_CONSOLE_CMD(ConExit)
return true;
}
- if (_game_mode == GM_NORMAL && _patches.autosave_on_exit) DoExitSave();
+ if (_game_mode == GM_NORMAL && _settings.gui.autosave_on_exit) DoExitSave();
_exit_game = true;
return true;
diff --git a/src/date.cpp b/src/date.cpp
index ce8b99343..7ee769c64 100644
--- a/src/date.cpp
+++ b/src/date.cpp
@@ -283,10 +283,10 @@ void IncreaseDate()
ShipsYearlyLoop();
if (_network_server) NetworkServerYearlyLoop();
- if (_cur_year == _patches.semaphore_build_before) ResetSignalVariant();
+ if (_cur_year == _settings.gui.semaphore_build_before) ResetSignalVariant();
/* check if we reached end of the game */
- if (_cur_year == _patches.ending_year) {
+ if (_cur_year == _settings.gui.ending_year) {
ShowEndGameChart();
/* check if we reached the maximum year, decrement dates by a year */
} else if (_cur_year == MAX_YEAR + 1) {
@@ -303,5 +303,5 @@ void IncreaseDate()
InitChatMessage();
}
- if (_patches.auto_euro) CheckSwitchToEuro();
+ if (_settings.gui.auto_euro) CheckSwitchToEuro();
}
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 2c837f425..b1d79b853 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -136,12 +136,12 @@ struct BuildDocksToolbarWindow : Window {
BuildDocksToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
{
this->FindWindowPlacementAndResize(desc);
- if (_patches.link_terraform_toolbar) ShowTerraformToolbar(this);
+ if (_settings.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
}
~BuildDocksToolbarWindow()
{
- if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
+ if (_settings.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
}
virtual void OnPaint()
@@ -263,7 +263,7 @@ public:
virtual void OnPaint()
{
- int rad = (_patches.modified_catchment) ? CA_DOCK : CA_UNMODIFIED;
+ int rad = (_settings.station.modified_catchment) ? CA_DOCK : CA_UNMODIFIED;
this->DrawWidgets();
diff --git a/src/economy.cpp b/src/economy.cpp
index 261e7b5c1..436f278d2 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -654,7 +654,7 @@ static void AddInflation()
* inflation doesn't add anything after that either; it even makes playing
* it impossible due to the diverging cost and income rates.
*/
- if ((_cur_year - _patches.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
+ if ((_cur_year - _settings.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return;
/* Approximation for (100 + infl_amount)% ** (1 / 12) - 100%
* scaled by 65536
@@ -1208,7 +1208,7 @@ static void DeliverGoodsToIndustry(TileIndex xy, CargoID cargo_type, int num_pie
* XXX - Think of something better to
* 1) Only deliver to industries which are withing the catchment radius
* 2) Distribute between industries if more then one is present */
- best_dist = (_patches.station_spread + 8) * 2;
+ best_dist = (_settings.station.station_spread + 8) * 2;
FOR_ALL_INDUSTRIES(ind) {
indspec = GetIndustrySpec(ind->type);
uint i;
@@ -1481,7 +1481,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
/* We have not waited enough time till the next round of loading/unloading */
if (--v->load_unload_time_rem != 0) {
- if (_patches.improved_load && (v->current_order.GetLoadType() & OLFB_FULL_LOAD)) {
+ if (_settings.order.improved_load && (v->current_order.GetLoadType() & OLFB_FULL_LOAD)) {
/* 'Reserve' this cargo for this vehicle, because we were first. */
for (; v != NULL; v = v->Next()) {
if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
@@ -1517,7 +1517,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
if (v->cargo_cap == 0) continue;
byte load_amount = EngInfo(v->engine_type)->load_amount;
- if (_patches.gradual_loading && HasBit(EngInfo(v->engine_type)->callbackmask, CBM_VEHICLE_LOAD_AMOUNT)) {
+ if (_settings.order.gradual_loading && HasBit(EngInfo(v->engine_type)->callbackmask, CBM_VEHICLE_LOAD_AMOUNT)) {
uint16 cb_load_amount = GetVehicleCallback(CBID_VEHICLE_LOAD_AMOUNT, 0, 0, v->engine_type, v);
if (cb_load_amount != CALLBACK_FAILED && GB(cb_load_amount, 0, 8) != 0) load_amount = GB(cb_load_amount, 0, 8);
}
@@ -1526,7 +1526,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
if (HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) && (u->current_order.GetUnloadType() & OUFB_NO_UNLOAD) == 0) {
uint cargo_count = v->cargo.Count();
- uint amount_unloaded = _patches.gradual_loading ? min(cargo_count, load_amount) : cargo_count;
+ uint amount_unloaded = _settings.order.gradual_loading ? min(cargo_count, load_amount) : cargo_count;
bool remaining; // Are there cargo entities in this vehicle that can still be unloaded here?
if (HasBit(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE) && !(u->current_order.GetUnloadType() & OUFB_TRANSFER)) {
@@ -1552,7 +1552,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
unloading_time += amount_unloaded;
anything_unloaded = true;
- if (_patches.gradual_loading && remaining) {
+ if (_settings.order.gradual_loading && remaining) {
completely_emptied = false;
} else {
/* We have finished unloading (cargo count == 0) */
@@ -1586,14 +1586,14 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
/* Skip loading this vehicle if another train/vehicle is already handling
* the same cargo type at this station */
- if (_patches.improved_load && cargo_left[v->cargo_type] <= 0) {
+ if (_settings.order.improved_load && cargo_left[v->cargo_type] <= 0) {
SetBit(cargo_not_full, v->cargo_type);
continue;
}
if (cap > count) cap = count;
- if (_patches.gradual_loading) cap = min(cap, load_amount);
- if (_patches.improved_load) {
+ if (_settings.order.gradual_loading) cap = min(cap, load_amount);
+ if (_settings.order.improved_load) {
/* Don't load stuff that is already 'reserved' for other vehicles */
cap = min((uint)cargo_left[v->cargo_type], cap);
cargo_left[v->cargo_type] -= cap;
@@ -1637,7 +1637,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
* all wagons at the same time instead of using the same 'improved'
* loading algorithm for the wagons (only fill wagon when there is
* enough to fill the previous wagons) */
- if (_patches.improved_load && (u->current_order.GetLoadType() & OLFB_FULL_LOAD)) {
+ if (_settings.order.improved_load && (u->current_order.GetLoadType() & OLFB_FULL_LOAD)) {
/* Update left cargo */
for (v = u; v != NULL; v = v->Next()) {
if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
@@ -1647,7 +1647,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
v = u;
if (anything_loaded || anything_unloaded) {
- if (_patches.gradual_loading) {
+ if (_settings.order.gradual_loading) {
/* The time it takes to load one 'slice' of cargo or passengers depends
* on the vehicle type - the values here are those found in TTDPatch */
const uint gradual_loading_wait_time[] = { 40, 20, 10, 20 };
@@ -1684,11 +1684,11 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left)
/* Calculate the loading indicator fill percent and display
* In the Game Menu do not display indicators
- * If _patches.loading_indicators == 2, show indicators (bool can be promoted to int as 0 or 1 - results in 2 > 0,1 )
- * if _patches.loading_indicators == 1, _local_player must be the owner or must be a spectator to show ind., so 1 > 0
- * if _patches.loading_indicators == 0, do not display indicators ... 0 is never greater than anything
+ * If _settings.gui.loading_indicators == 2, show indicators (bool can be promoted to int as 0 or 1 - results in 2 > 0,1 )
+ * if _settings.gui.loading_indicators == 1, _local_player must be the owner or must be a spectator to show ind., so 1 > 0
+ * if _settings.gui.loading_indicators == 0, do not display indicators ... 0 is never greater than anything
*/
- if (_game_mode != GM_MENU && (_patches.loading_indicators > (uint)(v->owner != _local_player && _local_player != PLAYER_SPECTATOR))) {
+ if (_game_mode != GM_MENU && (_settings.gui.loading_indicators > (uint)(v->owner != _local_player && _local_player != PLAYER_SPECTATOR))) {
StringID percent_up_down = STR_NULL;
int percent = CalcPercentVehicleFilled(v, &percent_up_down);
if (v->fill_percent_te_id == INVALID_TE_ID) {
@@ -1736,7 +1736,7 @@ void LoadUnloadStation(Station *st)
void PlayersMonthlyLoop()
{
PlayersGenStatistics();
- if (_patches.inflation && _cur_year < MAX_YEAR)
+ if (_settings.economy.inflation && _cur_year < MAX_YEAR)
AddInflation();
PlayersPayInterest();
/* Reset the _current_player flag */
@@ -1802,7 +1802,7 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32
/* Check if buying shares is allowed (protection against modified clients) */
/* Cannot buy own shares */
- if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR;
+ if (!IsValidPlayer((PlayerID)p1) || !_settings.economy.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR;
p = GetPlayer((PlayerID)p1);
@@ -1851,7 +1851,7 @@ CommandCost CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint3
/* Check if selling shares is allowed (protection against modified clients) */
/* Cannot sell own shares */
- if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR;
+ if (!IsValidPlayer((PlayerID)p1) || !_settings.economy.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR;
p = GetPlayer((PlayerID)p1);
diff --git a/src/elrail_func.h b/src/elrail_func.h
index c65be6fa5..bf3e41632 100644
--- a/src/elrail_func.h
+++ b/src/elrail_func.h
@@ -25,7 +25,7 @@ static inline bool HasCatenary(RailType rt)
*/
static inline bool HasCatenaryDrawn(RailType rt)
{
- return HasCatenary(rt) && !IsInvisibilitySet(TO_CATENARY) && !_patches.disable_elrails;
+ return HasCatenary(rt) && !IsInvisibilitySet(TO_CATENARY) && !_settings.vehicle.disable_elrails;
}
/**
@@ -37,6 +37,6 @@ void DrawCatenary(const TileInfo *ti);
void DrawCatenaryOnTunnel(const TileInfo *ti);
void DrawCatenaryOnBridge(const TileInfo *ti);
-int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback
+int32 SettingsDisableElrail(int32 p1); ///< _settings.disable_elrail callback
#endif /* ELRAIL_FUNC_H */
diff --git a/src/engine.cpp b/src/engine.cpp
index 3f361c048..37bedbf06 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -217,7 +217,7 @@ static void CalcEngineReliability(Engine *e)
uint age = e->age;
/* Check for early retirement */
- if (e->player_avail != 0 && !_patches.never_expire_vehicles) {
+ if (e->player_avail != 0 && !_settings.vehicle.never_expire_vehicles) {
int retire_early = e->info.retire_early;
uint retire_early_max_age = max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12);
if (retire_early != 0 && age >= retire_early_max_age) {
@@ -230,7 +230,7 @@ static void CalcEngineReliability(Engine *e)
if (age < e->duration_phase_1) {
uint start = e->reliability_start;
e->reliability = age * (e->reliability_max - start) / e->duration_phase_1 + start;
- } else if ((age -= e->duration_phase_1) < e->duration_phase_2 || _patches.never_expire_vehicles) {
+ } else if ((age -= e->duration_phase_1) < e->duration_phase_2 || _settings.vehicle.never_expire_vehicles) {
/* We are at the peak of this engines life. It will have max reliability.
* This is also true if the engines never expire. They will not go bad over time */
e->reliability = e->reliability_max;
@@ -293,7 +293,7 @@ void StartupEngines()
CalcEngineReliability(e);
}
- e->lifelength = ei->lifelength + _patches.extend_vehicle_life;
+ e->lifelength = ei->lifelength + _settings.vehicle.extend_vehicle_life;
/* prevent certain engines from ever appearing. */
if (!HasBit(ei->climates, _opt.landscape)) {
diff --git a/src/genworld.cpp b/src/genworld.cpp
index ff58de86a..a660abcfd 100644
--- a/src/genworld.cpp
+++ b/src/genworld.cpp
@@ -91,8 +91,8 @@ static void * CDECL _GenerateWorld(void *arg)
_generating_world = true;
if (_network_dedicated) DEBUG(net, 0, "Generating map, please wait...");
/* Set the Random() seed to generation_seed so we produce the same map with the same seed */
- if (_patches.generation_seed == GENERATE_NEW_SEED) _patches.generation_seed = _patches_newgame.generation_seed = InteractiveRandom();
- _random.SetSeed(_patches.generation_seed);
+ if (_settings.game_creation.generation_seed == GENERATE_NEW_SEED) _settings.game_creation.generation_seed = _settings_newgame.game_creation.generation_seed = InteractiveRandom();
+ _random.SetSeed(_settings.game_creation.generation_seed);
SetGeneratingWorldProgress(GWP_MAP_INIT, 2);
SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, VHM_NONE, WC_MAIN_WINDOW, 0);
@@ -105,7 +105,7 @@ static void * CDECL _GenerateWorld(void *arg)
SetGeneratingWorldProgress(GWP_UNMOVABLE, 1);
/* Make the map the height of the patch setting */
- if (_game_mode != GM_MENU) FlatEmptyWorld(_patches.se_flat_world_height);
+ if (_game_mode != GM_MENU) FlatEmptyWorld(_settings.game_creation.se_flat_world_height);
ConvertGroundTilesIntoWaterTiles();
IncreaseGeneratingWorldProgress(GWP_UNMOVABLE);
@@ -165,7 +165,7 @@ static void * CDECL _GenerateWorld(void *arg)
if (_network_dedicated) DEBUG(net, 0, "Map generated, starting game");
- if (_patches.pause_on_newgame && _game_mode == GM_NORMAL) DoCommandP(0, 1, 0, NULL, CMD_PAUSE);
+ if (_settings.gui.pause_on_newgame && _game_mode == GM_NORMAL) DoCommandP(0, 1, 0, NULL, CMD_PAUSE);
} catch (...) {
_generating_world = false;
throw;
@@ -273,7 +273,7 @@ void GenerateWorld(int mode, uint size_x, uint size_y)
_current_player = OWNER_NONE;
/* Set the date before loading sprites as some newgrfs check it */
- SetDate(ConvertYMDToDate(_patches.starting_year, 0, 1));
+ SetDate(ConvertYMDToDate(_settings.game_creation.starting_year, 0, 1));
/* Load the right landscape stuff */
GfxLoadSprites();
diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp
index 114218f57..da2115e24 100644
--- a/src/genworld_gui.cpp
+++ b/src/genworld_gui.cpp
@@ -256,7 +256,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
{
this->LowerWidget(_opt_newgame.landscape + GLAND_TEMPERATE);
- snprintf(this->edit_str_buf, sizeof(this->edit_str_buf), "%u", _patches_newgame.generation_seed);
+ snprintf(this->edit_str_buf, sizeof(this->edit_str_buf), "%u", _settings_newgame.game_creation.generation_seed);
InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 120);
this->caption = STR_NULL;
this->afilter = CS_NUMERAL;
@@ -270,7 +270,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
{
/* You can't select smoothness if not terragenesis */
if (mode == GLWP_GENERATE) {
- this->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _patches_newgame.land_generator == 0);
+ this->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _settings_newgame.game_creation.land_generator == 0);
}
/* Disable snowline if not hilly */
this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _opt_newgame.landscape != LT_ARCTIC);
@@ -279,10 +279,10 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
this->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR);
this->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR);
- this->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR);
- this->SetWidgetDisabledState(GLAND_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR);
- this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _patches_newgame.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC);
- this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _patches_newgame.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC);
+ this->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR);
+ this->SetWidgetDisabledState(GLAND_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR);
+ this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _settings_newgame.game_creation.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC);
+ this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _settings_newgame.game_creation.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC);
this->SetWidgetLoweredState(GLAND_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE);
this->SetWidgetLoweredState(GLAND_ARCTIC, _opt_newgame.landscape == LT_ARCTIC);
@@ -298,21 +298,21 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
}
if (mode == GLWP_GENERATE) {
- this->widget[GLAND_LANDSCAPE_PULLDOWN].data = _landscape[_patches_newgame.land_generator];
- this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_patches_newgame.tree_placer];
+ this->widget[GLAND_LANDSCAPE_PULLDOWN].data = _landscape[_settings_newgame.game_creation.land_generator];
+ this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_settings_newgame.game_creation.tree_placer];
this->widget[GLAND_TERRAIN_PULLDOWN].data = _elevations[_opt_newgame.diff.terrain_type];
this->widget[GLAND_WATER_PULLDOWN].data = _sea_lakes[_opt_newgame.diff.quantity_sea_lakes];
- this->widget[GLAND_SMOOTHNESS_PULLDOWN].data = _smoothness[_patches_newgame.tgen_smoothness];
+ this->widget[GLAND_SMOOTHNESS_PULLDOWN].data = _smoothness[_settings_newgame.game_creation.tgen_smoothness];
} else {
- this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_patches_newgame.tree_placer];
- this->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = _rotation[_patches_newgame.heightmap_rotation];
+ this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_settings_newgame.game_creation.tree_placer];
+ this->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = _rotation[_settings_newgame.game_creation.heightmap_rotation];
}
/* Set parameters for widget text that requires them. */
- SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // GLAND_START_DATE_TEXT
- SetDParam(1, 1 << _patches_newgame.map_x); // GLAND_MAPSIZE_X_PULLDOWN
- SetDParam(2, 1 << _patches_newgame.map_y); // GLAND_MAPSIZE_Y_PULLDOWN
- SetDParam(3, _patches_newgame.snow_line_height); // GLAND_SNOW_LEVEL_TEXT
+ SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); // GLAND_START_DATE_TEXT
+ SetDParam(1, 1 << _settings_newgame.game_creation.map_x); // GLAND_MAPSIZE_X_PULLDOWN
+ SetDParam(2, 1 << _settings_newgame.game_creation.map_y); // GLAND_MAPSIZE_Y_PULLDOWN
+ SetDParam(3, _settings_newgame.game_creation.snow_line_height); // GLAND_SNOW_LEVEL_TEXT
this->DrawWidgets();
@@ -321,7 +321,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
if (mode != GLWP_GENERATE) {
char buffer[512];
- if (_patches_newgame.heightmap_rotation == HM_CLOCKWISE) {
+ if (_settings_newgame.game_creation.heightmap_rotation == HM_CLOCKWISE) {
SetDParam(0, this->y);
SetDParam(1, this->x);
} else {
@@ -351,11 +351,11 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
break;
case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X
- ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_x, GLAND_MAPSIZE_X_PULLDOWN);
+ ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, GLAND_MAPSIZE_X_PULLDOWN);
break;
case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y
- ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_y, GLAND_MAPSIZE_Y_PULLDOWN);
+ ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, GLAND_MAPSIZE_Y_PULLDOWN);
break;
case GLAND_TOWN_PULLDOWN: // Number of towns
@@ -367,8 +367,8 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
break;
case GLAND_RANDOM_BUTTON: // Random seed
- _patches_newgame.generation_seed = InteractiveRandom();
- snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "%u", _patches_newgame.generation_seed);
+ _settings_newgame.game_creation.generation_seed = InteractiveRandom();
+ snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "%u", _settings_newgame.game_creation.generation_seed);
UpdateTextBufferSize(&this->text);
this->SetDirty();
break;
@@ -380,17 +380,17 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
case GLAND_GENERATE_BUTTON: // Generate
UpdatePatches();
- if (_patches.town_layout == TL_NO_ROADS) {
+ if (_settings.economy.town_layout == TL_NO_ROADS) {
ShowQuery(
STR_TOWN_LAYOUT_WARNING_CAPTION,
STR_TOWN_LAYOUT_WARNING_MESSAGE,
this,
LandscapeGenerationCallback);
} else if (mode == GLWP_HEIGHTMAP &&
- (this->x * 2 < (1U << _patches_newgame.map_x) ||
- this->x / 2 > (1U << _patches_newgame.map_x) ||
- this->y * 2 < (1U << _patches_newgame.map_y) ||
- this->y / 2 > (1U << _patches_newgame.map_y))) {
+ (this->x * 2 < (1U << _settings_newgame.game_creation.map_x) ||
+ this->x / 2 > (1U << _settings_newgame.game_creation.map_x) ||
+ this->y * 2 < (1U << _settings_newgame.game_creation.map_y) ||
+ this->y / 2 > (1U << _settings_newgame.game_creation.map_y))) {
ShowQuery(
STR_HEIGHTMAP_SCALE_WARNING_CAPTION,
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE,
@@ -408,14 +408,14 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
this->HandleButtonClick(widget);
this->SetDirty();
- _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR);
+ _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR);
}
_left_button_clicked = false;
break;
case GLAND_START_DATE_TEXT: // Year text
this->widget_id = GLAND_START_DATE_TEXT;
- SetDParam(0, _patches_newgame.starting_year);
+ SetDParam(0, _settings_newgame.game_creation.starting_year);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL);
break;
@@ -426,27 +426,27 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
this->HandleButtonClick(widget);
this->SetDirty();
- _patches_newgame.snow_line_height = Clamp(_patches_newgame.snow_line_height + widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT);
+ _settings_newgame.game_creation.snow_line_height = Clamp(_settings_newgame.game_creation.snow_line_height + widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT);
}
_left_button_clicked = false;
break;
case GLAND_SNOW_LEVEL_TEXT: // Snow line text
this->widget_id = GLAND_SNOW_LEVEL_TEXT;
- SetDParam(0, _patches_newgame.snow_line_height);
+ SetDParam(0, _settings_newgame.game_creation.snow_line_height);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, this, CS_NUMERAL);
break;
case GLAND_TREE_PULLDOWN: // Tree placer
- ShowDropDownMenu(this, _tree_placer, _patches_newgame.tree_placer, GLAND_TREE_PULLDOWN, 0, 0);
+ ShowDropDownMenu(this, _tree_placer, _settings_newgame.game_creation.tree_placer, GLAND_TREE_PULLDOWN, 0, 0);
break;
case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation
/* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/
if (mode == GLWP_HEIGHTMAP) {
- ShowDropDownMenu(this, _rotation, _patches_newgame.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0);
+ ShowDropDownMenu(this, _rotation, _settings_newgame.game_creation.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0);
} else {
- ShowDropDownMenu(this, _landscape, _patches_newgame.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0);
+ ShowDropDownMenu(this, _landscape, _settings_newgame.game_creation.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0);
}
break;
@@ -459,7 +459,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
break;
case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness
- ShowDropDownMenu(this, _smoothness, _patches_newgame.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0);
+ ShowDropDownMenu(this, _smoothness, _settings_newgame.game_creation.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0);
break;
}
}
@@ -478,17 +478,17 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
* (use random seed) it should not be possible to be
* entered into the input field; the generate seed
* button can be used instead. */
- _patches_newgame.generation_seed = minu(strtoul(this->edit_str_buf, NULL, sizeof(this->edit_str_buf) - 1), MAX_UVALUE(uint32) - 1);
+ _settings_newgame.game_creation.generation_seed = minu(strtoul(this->edit_str_buf, NULL, sizeof(this->edit_str_buf) - 1), MAX_UVALUE(uint32) - 1);
return state;
}
virtual void OnDropdownSelect(int widget, int index)
{
switch (widget) {
- case GLAND_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = index; break;
- case GLAND_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = index; break;
- case GLAND_TREE_PULLDOWN: _patches_newgame.tree_placer = index; break;
- case GLAND_SMOOTHNESS_PULLDOWN: _patches_newgame.tgen_smoothness = index; break;
+ case GLAND_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break;
+ case GLAND_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break;
+ case GLAND_TREE_PULLDOWN: _settings_newgame.game_creation.tree_placer = index; break;
+ case GLAND_SMOOTHNESS_PULLDOWN: _settings_newgame.game_creation.tgen_smoothness = index; break;
case GLAND_TOWN_PULLDOWN:
_opt_newgame.diff.number_towns = index;
@@ -505,9 +505,9 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
case GLAND_LANDSCAPE_PULLDOWN:
/* case GLAND_HEIGHTMAP_PULLDOWN: */
if (mode == GLWP_HEIGHTMAP) {
- _patches_newgame.heightmap_rotation = index;
+ _settings_newgame.game_creation.heightmap_rotation = index;
} else {
- _patches_newgame.land_generator = index;
+ _settings_newgame.game_creation.land_generator = index;
}
break;
@@ -534,12 +534,12 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
switch (this->widget_id) {
case GLAND_START_DATE_TEXT:
this->InvalidateWidget(GLAND_START_DATE_TEXT);
- _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR);
+ _settings_newgame.game_creation.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR);
break;
case GLAND_SNOW_LEVEL_TEXT:
this->InvalidateWidget(GLAND_SNOW_LEVEL_TEXT);
- _patches_newgame.snow_line_height = Clamp(value, 2, MAX_SNOWLINE_HEIGHT);
+ _settings_newgame.game_creation.snow_line_height = Clamp(value, 2, MAX_SNOWLINE_HEIGHT);
break;
}
@@ -570,7 +570,7 @@ static void _ShowGenerateLandscape(glwp_modes mode)
DeleteWindowByClass(WC_GENERATE_LANDSCAPE);
/* Always give a new seed if not editor */
- if (_game_mode != GM_EDITOR) _patches_newgame.generation_seed = InteractiveRandom();
+ if (_game_mode != GM_EDITOR) _settings_newgame.game_creation.generation_seed = InteractiveRandom();
if (mode == GLWP_HEIGHTMAP) {
/* If the function returns negative, it means there was a problem loading the heightmap */
@@ -600,8 +600,8 @@ void ShowHeightmapLoad()
void StartScenarioEditor()
{
- if (_patches_newgame.town_layout == TL_NO_ROADS) {
- _patches_newgame.town_layout = TL_ORIGINAL;
+ if (_settings_newgame.economy.town_layout == TL_NO_ROADS) {
+ _settings_newgame.economy.town_layout = TL_ORIGINAL;
}
StartGeneratingLandscape(GLWP_SCENARIO);
@@ -610,7 +610,7 @@ void StartScenarioEditor()
void StartNewGameWithoutGUI(uint seed)
{
/* GenerateWorld takes care of the possible GENERATE_NEW_SEED value in 'seed' */
- _patches_newgame.generation_seed = seed;
+ _settings_newgame.game_creation.generation_seed = seed;
StartGeneratingLandscape(GLWP_GENERATE);
}
@@ -649,10 +649,10 @@ struct CreateScenarioWindow : public Window
virtual void OnPaint()
{
- this->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR);
- this->SetWidgetDisabledState(CSCEN_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR);
- this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_DOWN, _patches_newgame.se_flat_world_height <= 0);
- this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _patches_newgame.se_flat_world_height >= MAX_TILE_HEIGHT);
+ this->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR);
+ this->SetWidgetDisabledState(CSCEN_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR);
+ this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_DOWN, _settings_newgame.game_creation.se_flat_world_height <= 0);
+ this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _settings_newgame.game_creation.se_flat_world_height >= MAX_TILE_HEIGHT);
this->SetWidgetLoweredState(CSCEN_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE);
this->SetWidgetLoweredState(CSCEN_ARCTIC, _opt_newgame.landscape == LT_ARCTIC);
@@ -660,10 +660,10 @@ struct CreateScenarioWindow : public Window
this->SetWidgetLoweredState(CSCEN_TOYLAND, _opt_newgame.landscape == LT_TOYLAND);
/* Set parameters for widget text that requires them */
- SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT
- SetDParam(1, 1 << _patches_newgame.map_x); // CSCEN_MAPSIZE_X_PULLDOWN
- SetDParam(2, 1 << _patches_newgame.map_y); // CSCEN_MAPSIZE_Y_PULLDOWN
- SetDParam(3, _patches_newgame.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT
+ SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT
+ SetDParam(1, 1 << _settings_newgame.game_creation.map_x); // CSCEN_MAPSIZE_X_PULLDOWN
+ SetDParam(2, 1 << _settings_newgame.game_creation.map_y); // CSCEN_MAPSIZE_Y_PULLDOWN
+ SetDParam(3, _settings_newgame.game_creation.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT
this->DrawWidgets();
}
@@ -680,11 +680,11 @@ struct CreateScenarioWindow : public Window
break;
case CSCEN_MAPSIZE_X_PULLDOWN: // Mapsize X
- ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_x, CSCEN_MAPSIZE_X_PULLDOWN);
+ ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, CSCEN_MAPSIZE_X_PULLDOWN);
break;
case CSCEN_MAPSIZE_Y_PULLDOWN: // Mapsize Y
- ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_y, CSCEN_MAPSIZE_Y_PULLDOWN);
+ ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, CSCEN_MAPSIZE_Y_PULLDOWN);
break;
case CSCEN_EMPTY_WORLD: // Empty world / flat world
@@ -702,14 +702,14 @@ struct CreateScenarioWindow : public Window
this->HandleButtonClick(widget);
this->SetDirty();
- _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR);
+ _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR);
}
_left_button_clicked = false;
break;
case CSCEN_START_DATE_TEXT: // Year text
this->widget_id = CSCEN_START_DATE_TEXT;
- SetDParam(0, _patches_newgame.starting_year);
+ SetDParam(0, _settings_newgame.game_creation.starting_year);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL);
break;
@@ -720,14 +720,14 @@ struct CreateScenarioWindow : public Window
this->HandleButtonClick(widget);
this->SetDirty();
- _patches_newgame.se_flat_world_height = Clamp(_patches_newgame.se_flat_world_height + widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT);
+ _settings_newgame.game_creation.se_flat_world_height = Clamp(_settings_newgame.game_creation.se_flat_world_height + widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT);
}
_left_button_clicked = false;
break;
case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text
this->widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT;
- SetDParam(0, _patches_newgame.se_flat_world_height);
+ SetDParam(0, _settings_newgame.game_creation.se_flat_world_height);
ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, this, CS_NUMERAL);
break;
}
@@ -736,8 +736,8 @@ struct CreateScenarioWindow : public Window
virtual void OnDropdownSelect(int widget, int index)
{
switch (widget) {
- case CSCEN_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = index; break;
- case CSCEN_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = index; break;
+ case CSCEN_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break;
+ case CSCEN_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break;
}
this->SetDirty();
}
@@ -750,12 +750,12 @@ struct CreateScenarioWindow : public Window
switch (this->widget_id) {
case CSCEN_START_DATE_TEXT:
this->InvalidateWidget(CSCEN_START_DATE_TEXT);
- _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR);
+ _settings_newgame.game_creation.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR);
break;
case CSCEN_FLAT_LAND_HEIGHT_TEXT:
this->InvalidateWidget(CSCEN_FLAT_LAND_HEIGHT_TEXT);
- _patches_newgame.se_flat_world_height = Clamp(value, 0, MAX_TILE_HEIGHT);
+ _settings_newgame.game_creation.se_flat_world_height = Clamp(value, 0, MAX_TILE_HEIGHT);
break;
}
diff --git a/src/heightmap.cpp b/src/heightmap.cpp
index a42ebe324..6c0162503 100644
--- a/src/heightmap.cpp
+++ b/src/heightmap.cpp
@@ -297,7 +297,7 @@ static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map)
TileIndex tile;
/* Get map size and calculate scale and padding values */
- switch (_patches.heightmap_rotation) {
+ switch (_settings.game_creation.heightmap_rotation) {
default: NOT_REACHED();
case HM_COUNTER_CLOCKWISE:
width = MapSizeX();
@@ -322,7 +322,7 @@ static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map)
/* Form the landscape */
for (row = 0; row < height - 1; row++) {
for (col = 0; col < width - 1; col++) {
- switch (_patches.heightmap_rotation) {
+ switch (_settings.game_creation.heightmap_rotation) {
default: NOT_REACHED();
case HM_COUNTER_CLOCKWISE: tile = TileXY(col, row); break;
case HM_CLOCKWISE: tile = TileXY(row, col); break;
@@ -337,7 +337,7 @@ static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map)
/* Use nearest neighbor resizing to scale map data.
* We rotate the map 45 degrees (counter)clockwise */
img_row = (((row - row_pad) * num_div) / img_scale);
- switch (_patches.heightmap_rotation) {
+ switch (_settings.game_creation.heightmap_rotation) {
default: NOT_REACHED();
case HM_COUNTER_CLOCKWISE:
img_col = (((width - 1 - col - col_pad) * num_div) / img_scale);
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index e758b2fec..3a0613aaa 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -1075,7 +1075,7 @@ static bool CheckNewIndustry_Forest(TileIndex tile)
static bool CheckNewIndustry_OilRefinery(TileIndex tile)
{
if (_game_mode == GM_EDITOR) return true;
- if (DistanceFromEdge(TILE_ADDXY(tile, 1, 1)) < _patches.oil_refinery_limit) return true;
+ if (DistanceFromEdge(TILE_ADDXY(tile, 1, 1)) < _settings.game_creation.oil_refinery_limit) return true;
_error_message = STR_483B_CAN_ONLY_BE_POSITIONED;
return false;
@@ -1087,7 +1087,7 @@ static bool CheckNewIndustry_OilRig(TileIndex tile)
{
if (_game_mode == GM_EDITOR && _ignore_restrictions) return true;
if (TileHeight(tile) == 0 &&
- DistanceFromEdge(TILE_ADDXY(tile, 1, 1)) < _patches.oil_refinery_limit) return true;
+ DistanceFromEdge(TILE_ADDXY(tile, 1, 1)) < _settings.game_creation.oil_refinery_limit) return true;
_error_message = STR_483B_CAN_ONLY_BE_POSITIONED;
return false;
@@ -1171,7 +1171,7 @@ static const Town *CheckMultipleIndustryInTown(TileIndex tile, int type)
t = ClosestTownFromTile(tile, (uint)-1);
- if (_patches.multiple_industry_per_town) return t;
+ if (_settings.economy.multiple_industry_per_town) return t;
FOR_ALL_INDUSTRIES(i) {
if (i->type == (byte)type &&
@@ -1257,7 +1257,7 @@ static bool CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable
/* It is almost impossible to have a fully flat land in TG, so what we
* do is that we check if we can make the land flat later on. See
* CheckIfCanLevelIndustryPlatform(). */
- return !refused_slope || (_patches.land_generator == LG_TERRAGENESIS && _generating_world && !custom_shape && !_ignore_restrictions);
+ return !refused_slope || (_settings.game_creation.land_generator == LG_TERRAGENESIS && _generating_world && !custom_shape && !_ignore_restrictions);
}
static bool CheckIfIndustryIsAllowed(TileIndex tile, int type, const Town *t)
@@ -1387,7 +1387,7 @@ static bool CheckIfFarEnoughFromIndustry(TileIndex tile, int type)
const IndustrySpec *indspec = GetIndustrySpec(type);
const Industry *i;
- if (_patches.same_industry_close && indspec->IsRawIndustry())
+ if (_settings.economy.same_industry_close && indspec->IsRawIndustry())
/* Allow primary industries to be placed close to any other industry */
return true;
@@ -1401,8 +1401,8 @@ static bool CheckIfFarEnoughFromIndustry(TileIndex tile, int type)
indspec->accepts_cargo[0] == i->accepts_cargo[0] && (
/* at least one of those options must be true */
_game_mode != GM_EDITOR || // editor must not be stopped
- !_patches.same_industry_close ||
- !_patches.multiple_industry_per_town)) {
+ !_settings.economy.same_industry_close ||
+ !_settings.economy.multiple_industry_per_town)) {
_error_message = STR_INDUSTRY_TOO_CLOSE;
return false;
}
@@ -1449,7 +1449,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
i->production_rate[1] = indspec->production_rate[1];
/* don't use smooth economy for industries using production related callbacks */
- if (_patches.smooth_economy &&
+ if (_settings.economy.smooth_economy &&
!(HasBit(indspec->callback_flags, CBM_IND_PRODUCTION_256_TICKS) || HasBit(indspec->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL)) && // production callbacks
!(HasBit(indspec->callback_flags, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(indspec->callback_flags, CBM_IND_PRODUCTION_CHANGE)) // production change callbacks
) {
@@ -1577,7 +1577,7 @@ static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint
if (!_check_new_industry_procs[indspec->check_proc](tile)) return NULL;
}
- if (!custom_shape_check && _patches.land_generator == LG_TERRAGENESIS && _generating_world && !_ignore_restrictions && !CheckIfCanLevelIndustryPlatform(tile, 0, it, type)) return NULL;
+ if (!custom_shape_check && _settings.game_creation.land_generator == LG_TERRAGENESIS && _generating_world && !_ignore_restrictions && !CheckIfCanLevelIndustryPlatform(tile, 0, it, type)) return NULL;
if (!CheckIfFarEnoughFromIndustry(tile, type)) return NULL;
const Town *t = CheckMultipleIndustryInTown(tile, type);
@@ -1621,11 +1621,11 @@ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
/* If the patch for raw-material industries is not on, you cannot build raw-material industries.
* Raw material industries are industries that do not accept cargo (at least for now) */
- if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 0 && indspec->IsRawIndustry()) {
+ if (_game_mode != GM_EDITOR && _settings.construction.raw_industry_construction == 0 && indspec->IsRawIndustry()) {
return CMD_ERROR;
}
- if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
+ if (_game_mode != GM_EDITOR && _settings.construction.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
if (flags & DC_EXEC) {
/* Prospecting has a chance to fail, however we cannot guarantee that something can
* be built on the map, so the chance gets lower when the map is fuller, but there
@@ -2031,7 +2031,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
bool standard = true;
bool suppress_message = false;
/* don't use smooth economy for industries using production related callbacks */
- bool smooth_economy = _patches.smooth_economy &&
+ bool smooth_economy = _settings.economy.smooth_economy &&
!(HasBit(indspec->callback_flags, CBM_IND_PRODUCTION_256_TICKS) || HasBit(indspec->callback_flags, CBM_IND_PRODUCTION_CARGO_ARRIVAL)) && // production callbacks
!(HasBit(indspec->callback_flags, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(indspec->callback_flags, CBM_IND_PRODUCTION_CHANGE)); // production change callbacks
byte div = 0;
@@ -2257,7 +2257,7 @@ bool IndustrySpec::IsRawIndustry() const
Money IndustrySpec::GetConstructionCost() const
{
return (_price.build_industry *
- (_patches.raw_industry_construction == 1 && this->IsRawIndustry() ?
+ (_settings.construction.raw_industry_construction == 1 && this->IsRawIndustry() ?
this->raw_industry_cost_multiplier :
this->cost_multiplier
)) >> 8;
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 40c481d43..f52fec3cc 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -131,7 +131,7 @@ class BuildIndustryWindow : public Window {
/* Rule is that editor mode loads all industries.
* In game mode, all non raw industries are loaded too
* and raw ones are loaded only when setting allows it */
- if (_game_mode != GM_EDITOR && indsp->IsRawIndustry() && _patches.raw_industry_construction == 0) {
+ if (_game_mode != GM_EDITOR && indsp->IsRawIndustry() && _settings.construction.raw_industry_construction == 0) {
/* Unselect if the industry is no longer in the list */
if (this->selected_type == ind) this->selected_index = -1;
continue;
@@ -198,7 +198,7 @@ public:
if (indsp == NULL) this->enabled[this->selected_index] = _opt.diff.number_industries != 0;
this->widget[DPIW_FUND_WIDGET].data = STR_BUILD_NEW_INDUSTRY;
} else {
- this->widget[DPIW_FUND_WIDGET].data = (_patches.raw_industry_construction == 2 && indsp->IsRawIndustry()) ? STR_PROSPECT_NEW_INDUSTRY : STR_FUND_NEW_INDUSTRY;
+ this->widget[DPIW_FUND_WIDGET].data = (_settings.construction.raw_industry_construction == 2 && indsp->IsRawIndustry()) ? STR_PROSPECT_NEW_INDUSTRY : STR_FUND_NEW_INDUSTRY;
}
this->SetWidgetDisabledState(DPIW_FUND_WIDGET, !this->enabled[this->selected_index]);
@@ -304,7 +304,7 @@ public:
this->SetDirty();
- if ((_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
+ if ((_game_mode != GM_EDITOR && _settings.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
this->selected_type == INVALID_INDUSTRYTYPE) {
/* Reset the button state if going to prospecting or "build many industries" */
this->RaiseButtons();
@@ -325,7 +325,7 @@ public:
GenerateIndustries();
_generating_world = false;
}
- } else if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 && GetIndustrySpec(this->selected_type)->IsRawIndustry()) {
+ } else if (_game_mode != GM_EDITOR && _settings.construction.raw_industry_construction == 2 && GetIndustrySpec(this->selected_type)->IsRawIndustry()) {
DoCommandP(0, this->selected_type, InteractiveRandom(), NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
this->HandleButtonClick(DPIW_FUND_WIDGET);
} else {
diff --git a/src/landscape.cpp b/src/landscape.cpp
index 3439a1825..8a6f0e7b4 100644
--- a/src/landscape.cpp
+++ b/src/landscape.cpp
@@ -821,7 +821,7 @@ void GenerateLandscape(byte mode)
SetGeneratingWorldProgress(GWP_LANDSCAPE, (_opt.landscape == LT_TROPIC) ? 1 + gwp_desert_amount : 1);
LoadHeightmap(_file_to_saveload.name);
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
- } else if (_patches.land_generator == LG_TERRAGENESIS) {
+ } else if (_settings.game_creation.land_generator == LG_TERRAGENESIS) {
SetGeneratingWorldProgress(GWP_LANDSCAPE, (_opt.landscape == LT_TROPIC) ? 3 + gwp_desert_amount : 3);
GenerateTerrainPerlin();
} else {
diff --git a/src/main_gui.cpp b/src/main_gui.cpp
index 23f5169d9..4c0f60baf 100644
--- a/src/main_gui.cpp
+++ b/src/main_gui.cpp
@@ -48,7 +48,7 @@ static int _rename_what = -1;
void CcGiveMoney(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
#ifdef ENABLE_NETWORK
- if (!success || !_patches.give_money) return;
+ if (!success || !_settings.economy.give_money) return;
char msg[20];
/* Inform the player of this action */
@@ -344,7 +344,7 @@ struct MainWindow : Window
if (cio == NULL) break;
/* Only players actually playing can speak to team. Eg spectators cannot */
- if (_patches.prefer_teamchat && IsValidPlayer(cio->client_playas)) {
+ if (_settings.gui.prefer_teamchat && IsValidPlayer(cio->client_playas)) {
const NetworkClientInfo *ci;
FOR_ALL_ACTIVE_CLIENT_INFOS(ci) {
if (ci->client_playas == cio->client_playas && ci != cio) {
diff --git a/src/misc.cpp b/src/misc.cpp
index e50685895..6d0f45392 100644
--- a/src/misc.cpp
+++ b/src/misc.cpp
@@ -69,7 +69,7 @@ void InitializeGame(int mode, uint size_x, uint size_y)
_cur_tileloop_tile = 0;
if ((mode & IG_DATE_RESET) == IG_DATE_RESET) {
- SetDate(ConvertYMDToDate(_patches.starting_year, 0, 1));
+ SetDate(ConvertYMDToDate(_settings.game_creation.starting_year, 0, 1));
InitializeOldNames();
}
diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp
index 2dad0e297..62ec5bcc7 100644
--- a/src/misc_cmd.cpp
+++ b/src/misc_cmd.cpp
@@ -146,7 +146,7 @@ CommandCost CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
switch (p2) {
default: return CMD_ERROR; // Invalid method
case 0: // Take some extra loan
- loan = (IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI;
+ loan = (IsHumanPlayer(_current_player) || _settings.ai.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI;
break;
case 1: // Take a loan as big as possible
loan = _economy.max_loan - p->current_loan;
@@ -182,7 +182,7 @@ CommandCost CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
switch (p2) {
default: return CMD_ERROR; // Invalid method
case 0: // Pay back one step
- loan = min(p->current_loan, (Money)(IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI);
+ loan = min(p->current_loan, (Money)(IsHumanPlayer(_current_player) || _settings.ai.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI);
break;
case 1: // Pay back as much as possible
loan = max(min(p->current_loan, p->player_money), (Money)LOAN_INTERVAL);
@@ -360,7 +360,7 @@ CommandCost CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
*/
CommandCost CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- if (!_patches.give_money) return CMD_ERROR;
+ if (!_settings.economy.give_money) return CMD_ERROR;
const Player *p = GetPlayer(_current_player);
CommandCost amount(EXPENSES_OTHER, min((Money)p1, (Money)20000000LL));
@@ -409,7 +409,7 @@ CommandCost CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, ui
* launch a re-evaluation of the actual values only when setting has changed */
if (p2 == GAME_DIFFICULTY_TOWNCOUNCIL_TOLERANCE && _game_mode == GM_NORMAL) {
UpdateAirportsNoise();
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
InvalidateWindowClassesData(WC_TOWN_VIEW, 0);
}
}
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 86f650062..e9a084bce 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -102,7 +102,7 @@ public:
LandInfoWindow(TileIndex tile) : Window(&_land_info_desc) {
Player *p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST);
- Town *t = ClosestTownFromTile(tile, _patches.dist_local_authority);
+ Town *t = ClosestTownFromTile(tile, _settings.economy.dist_local_authority);
Money old_money = p->player_money;
p->player_money = INT64_MAX;
@@ -396,7 +396,7 @@ public:
Window(pt.x, pt.y, width, height, WC_ERRMSG, widget),
show_player_face(show_player_face)
{
- this->duration = _patches.errmsg_duration;
+ this->duration = _settings.gui.errmsg_duration;
CopyOutDParam(this->decode_params, 0, lengthof(this->decode_params));
this->message_1 = msg1;
this->message_2 = msg2;
@@ -465,7 +465,7 @@ void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y)
{
DeleteWindowById(WC_ERRMSG, 0);
- if (!_patches.errmsg_duration) return;
+ if (!_settings.gui.errmsg_duration) return;
if (msg_2 == STR_NULL) msg_2 = STR_EMPTY;
@@ -620,7 +620,7 @@ void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[
DeleteWindowById(WC_TOOLTIPS, 0);
/* We only show measurement tooltips with patch setting on */
- if (str == STR_NULL || (paramcount != 0 && !_patches.measure_tooltip)) return;
+ if (str == STR_NULL || (paramcount != 0 && !_settings.gui.measure_tooltip)) return;
for (uint i = 0; i != paramcount; i++) SetDParam(i, params[i]);
char buffer[512];
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 3a9203424..20f6852da 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -1009,7 +1009,7 @@ static void NetworkInitGameInfo()
_network_game_info.spectators_on = 0;
_network_game_info.game_date = _date;
- _network_game_info.start_date = ConvertYMDToDate(_patches.starting_year, 0, 1);
+ _network_game_info.start_date = ConvertYMDToDate(_settings.game_creation.starting_year, 0, 1);
_network_game_info.map_width = MapSizeX();
_network_game_info.map_height = MapSizeY();
_network_game_info.map_set = _opt.landscape;
diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp
index d9fcb9a60..d76c98511 100644
--- a/src/network/network_client.cpp
+++ b/src/network/network_client.cpp
@@ -83,7 +83,7 @@ void HashCurrentCompanyPassword()
{
if (StrEmpty(_network_player_info[_local_player].password)) return;
- _password_game_seed = _patches.generation_seed;
+ _password_game_seed = _settings.game_creation.generation_seed;
ttd_strlcpy(_password_server_unique_id, _network_unique_id, sizeof(_password_server_unique_id));
const char *new_pw = GenerateCompanyPasswordHash(_network_player_info[_local_player].password);
diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp
index d7081bdec..11e6e33b7 100644
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -1342,7 +1342,7 @@ struct NetworkClientListPopupWindow : Window {
if (_network_own_client_index != ci->client_index) {
/* We are no spectator and the player we want to give money to is no spectator and money gifts are allowed */
- if (IsValidPlayer(_network_playas) && IsValidPlayer(ci->client_playas) && _patches.give_money) {
+ if (IsValidPlayer(_network_playas) && IsValidPlayer(ci->client_playas) && _settings.economy.give_money) {
GetString(this->action[i], STR_NETWORK_CLIENTLIST_GIVE_MONEY, lastof(this->action[i]));
this->proc[i++] = &ClientList_GiveMoney;
}
diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp
index d3a7ee6e5..c3dcd69d1 100644
--- a/src/network/network_server.cpp
+++ b/src/network/network_server.cpp
@@ -229,7 +229,7 @@ DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_NEED_PASSWORD)(NetworkTCPSocketHandl
Packet *p = NetworkSend_Init(PACKET_SERVER_NEED_PASSWORD);
p->Send_uint8(type);
- p->Send_uint32(_patches.generation_seed);
+ p->Send_uint32(_settings.game_creation.generation_seed);
p->Send_string(_network_unique_id);
cs->Send_Packet(p);
}
@@ -254,7 +254,7 @@ DEF_SERVER_SEND_COMMAND(PACKET_SERVER_WELCOME)
p = NetworkSend_Init(PACKET_SERVER_WELCOME);
p->Send_uint16(cs->index);
- p->Send_uint32(_patches.generation_seed);
+ p->Send_uint32(_settings.game_creation.generation_seed);
p->Send_string(_network_unique_id);
cs->Send_Packet(p);
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 1a271f316..a9ada136c 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -326,7 +326,7 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 intern
/* Hack for add-on GRFs that need to modify another GRF's engines. This lets
* them use the same engine slots. */
const GRFFile *grf_match = NULL;
- if (_patches.dynamic_engines) {
+ if (_settings.vehicle.dynamic_engines) {
uint32 override = _grf_id_overrides[file->grfid];
if (override != 0) {
grf_match = GetFileByGRFID(override);
@@ -341,7 +341,7 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 intern
/* Check if this vehicle is already defined... */
Engine *e = NULL;
FOR_ALL_ENGINES(e) {
- if (_patches.dynamic_engines && e->grffile != NULL && e->grffile != file && e->grffile != grf_match) continue;
+ if (_settings.vehicle.dynamic_engines && e->grffile != NULL && e->grffile != file && e->grffile != grf_match) continue;
if (e->type != type) continue;
if (e->internal_id != internal_id) continue;
@@ -377,14 +377,14 @@ EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16 internal_i
extern uint32 GetNewGRFOverride(uint32 grfid);
const GRFFile *grf_match = NULL;
- if (_patches.dynamic_engines) {
+ if (_settings.vehicle.dynamic_engines) {
uint32 override = _grf_id_overrides[file->grfid];
if (override != 0) grf_match = GetFileByGRFID(override);
}
const Engine *e = NULL;
FOR_ALL_ENGINES(e) {
- if (_patches.dynamic_engines && e->grffile != file && (grf_match == NULL || e->grffile != grf_match)) continue;
+ if (_settings.vehicle.dynamic_engines && e->grffile != file && (grf_match == NULL || e->grffile != grf_match)) continue;
if (e->type != type) continue;
if (e->internal_id != internal_id) continue;
@@ -3592,7 +3592,7 @@ bool GetGlobalVariable(byte param, uint32 *value)
case 0x0F: // Rail track type cost factors
*value = 0;
SB(*value, 0, 8, _railtype_cost_multiplier[0]); // normal rail
- if (_patches.disable_elrails) {
+ if (_settings.vehicle.disable_elrails) {
/* skip elrail multiplier - disabled */
SB(*value, 8, 8, _railtype_cost_multiplier[2]); // monorail
} else {
@@ -4188,10 +4188,10 @@ static uint32 GetPatchVariable(uint8 param)
{
switch (param) {
/* start year - 1920 */
- case 0x0B: return max(_patches.starting_year, ORIGINAL_BASE_YEAR) - ORIGINAL_BASE_YEAR;
+ case 0x0B: return max(_settings.game_creation.starting_year, ORIGINAL_BASE_YEAR) - ORIGINAL_BASE_YEAR;
/* freight trains weight factor */
- case 0x0E: return _patches.freight_trains;
+ case 0x0E: return _settings.vehicle.freight_trains;
/* empty wagon speed increase */
case 0x0F: return 0;
@@ -4200,7 +4200,7 @@ static uint32 GetPatchVariable(uint8 param)
* the following is good for 1x, 2x and 4x (most common?) and...
* well not really for 3x. */
case 0x10:
- switch (_patches.plane_speed) {
+ switch (_settings.vehicle.plane_speed) {
default:
case 4: return 1;
case 3: return 2;
@@ -4382,7 +4382,7 @@ static void ParamSet(byte *buf, size_t len)
case 0x01: // Road Vehicles
case 0x02: // Ships
case 0x03: // Aircraft
- if (!_patches.dynamic_engines) {
+ if (!_settings.vehicle.dynamic_engines) {
src1 = PerformGRM(&_grm_engines[_engine_offsets[feature]], _engine_counts[feature], count, op, target, "vehicles");
if (_skip_sprites == -1) return;
} else {
@@ -4544,7 +4544,7 @@ static void ParamSet(byte *buf, size_t len)
case 0x8F: // Rail track type cost factors
_railtype_cost_multiplier[0] = GB(res, 0, 8);
- if (_patches.disable_elrails) {
+ if (_settings.vehicle.disable_elrails) {
_railtype_cost_multiplier[1] = GB(res, 0, 8);
_railtype_cost_multiplier[2] = GB(res, 8, 8);
} else {
@@ -5079,84 +5079,84 @@ static void GRFUnsafe(byte *buf, size_t len)
static void InitializeGRFSpecial()
{
- _ttdpatch_flags[0] = ((_patches.always_small_airport ? 1 : 0) << 0x0C) // keepsmallairport
- | (1 << 0x0D) // newairports
- | (1 << 0x0E) // largestations
- | ((_patches.longbridges ? 1 : 0) << 0x0F) // longbridges
- | (0 << 0x10) // loadtime
- | (1 << 0x12) // presignals
- | (1 << 0x13) // extpresignals
- | ((_patches.never_expire_vehicles ? 1 : 0) << 0x16) // enginespersist
- | (1 << 0x1B) // multihead
- | (1 << 0x1D) // lowmemory
- | (1 << 0x1E); // generalfixes
-
- _ttdpatch_flags[1] = ((_patches.station_noise_level ? 1 : 0) << 0x07) // moreairports - based on units of noise
- | ((_patches.mammoth_trains ? 1 : 0) << 0x08) // mammothtrains
- | (1 << 0x09) // trainrefit
- | (0 << 0x0B) // subsidiaries
- | ((_patches.gradual_loading ? 1 : 0) << 0x0C) // gradualloading
- | (1 << 0x12) // unifiedmaglevmode - set bit 0 mode. Not revelant to OTTD
- | (1 << 0x13) // unifiedmaglevmode - set bit 1 mode
- | (1 << 0x14) // bridgespeedlimits
- | (1 << 0x16) // eternalgame
- | (1 << 0x17) // newtrains
- | (1 << 0x18) // newrvs
- | (1 << 0x19) // newships
- | (1 << 0x1A) // newplanes
- | ((_patches.signal_side ? 1 : 0) << 0x1B) // signalsontrafficside
- | ((_patches.disable_elrails ? 0 : 1) << 0x1C); // electrifiedrailway
-
- _ttdpatch_flags[2] = (1 << 0x01) // loadallgraphics - obsolote
- | (1 << 0x03) // semaphores
- | (0 << 0x0B) // enhancedgui
- | (0 << 0x0C) // newagerating
- | ((_patches.build_on_slopes ? 1 : 0) << 0x0D) // buildonslopes
- | (1 << 0x0E) // fullloadany
- | (1 << 0x0F) // planespeed
- | (0 << 0x10) // moreindustriesperclimate - obsolete
- | (0 << 0x11) // moretoylandfeatures
- | (1 << 0x12) // newstations
- | (1 << 0x13) // tracktypecostdiff
- | (1 << 0x14) // manualconvert
- | ((_patches.build_on_slopes ? 1 : 0) << 0x15) // buildoncoasts
- | (1 << 0x16) // canals
- | (1 << 0x17) // newstartyear
- | ((_patches.freight_trains > 1 ? 1 : 0) << 0x18) // freighttrains
- | (1 << 0x19) // newhouses
- | (1 << 0x1A) // newbridges
- | (1 << 0x1B) // newtownnames
- | (1 << 0x1C) // moreanimation
- | ((_patches.wagon_speed_limits ? 1 : 0) << 0x1D) // wagonspeedlimits
- | (1 << 0x1E) // newshistory
- | (0 << 0x1F); // custombridgeheads
-
- _ttdpatch_flags[3] = (0 << 0x00) // newcargodistribution
- | (1 << 0x01) // windowsnap
- | (0 << 0x02) // townbuildnoroad
- | (0 << 0x03) // pathbasedsignalling. To enable if ever pbs is back
- | (0 << 0x04) // aichoosechance
- | (1 << 0x05) // resolutionwidth
- | (1 << 0x06) // resolutionheight
- | (1 << 0x07) // newindustries
- | ((_patches.improved_load ? 1 : 0) << 0x08) // fifoloading
- | (0 << 0x09) // townroadbranchprob
- | (0 << 0x0A) // tempsnowline
- | (1 << 0x0B) // newcargo
- | (1 << 0x0C) // enhancemultiplayer
- | (1 << 0x0D) // onewayroads
- | ((_patches.nonuniform_stations ? 1 : 0) << 0x0E) // irregularstations
- | (1 << 0x0F) // statistics
- | (1 << 0x10) // newsounds
- | (1 << 0x11) // autoreplace
- | (1 << 0x12) // autoslope
- | (0 << 0x13) // followvehicle
- | (1 << 0x14) // trams
- | (0 << 0x15) // enhancetunnels
- | (1 << 0x16) // shortrvs
- | (1 << 0x17) // articulatedrvs
- | ((_patches.dynamic_engines ? 1 : 0) << 0x18) // dynamic engines
- | (1 << 0x1E); // variablerunningcosts
+ _ttdpatch_flags[0] = ((_settings.station.always_small_airport ? 1 : 0) << 0x0C) // keepsmallairport
+ | (1 << 0x0D) // newairports
+ | (1 << 0x0E) // largestations
+ | ((_settings.construction.longbridges ? 1 : 0) << 0x0F) // longbridges
+ | (0 << 0x10) // loadtime
+ | (1 << 0x12) // presignals
+ | (1 << 0x13) // extpresignals
+ | ((_settings.vehicle.never_expire_vehicles ? 1 : 0) << 0x16) // enginespersist
+ | (1 << 0x1B) // multihead
+ | (1 << 0x1D) // lowmemory
+ | (1 << 0x1E); // generalfixes
+
+ _ttdpatch_flags[1] = ((_settings.economy.station_noise_level ? 1 : 0) << 0x07) // moreairports - based on units of noise
+ | ((_settings.vehicle.mammoth_trains ? 1 : 0) << 0x08) // mammothtrains
+ | (1 << 0x09) // trainrefit
+ | (0 << 0x0B) // subsidiaries
+ | ((_settings.order.gradual_loading ? 1 : 0) << 0x0C) // gradualloading
+ | (1 << 0x12) // unifiedmaglevmode - set bit 0 mode. Not revelant to OTTD
+ | (1 << 0x13) // unifiedmaglevmode - set bit 1 mode
+ | (1 << 0x14) // bridgespeedlimits
+ | (1 << 0x16) // eternalgame
+ | (1 << 0x17) // newtrains
+ | (1 << 0x18) // newrvs
+ | (1 << 0x19) // newships
+ | (1 << 0x1A) // newplanes
+ | ((_settings.construction.signal_side ? 1 : 0) << 0x1B) // signalsontrafficside
+ | ((_settings.vehicle.disable_elrails ? 0 : 1) << 0x1C); // electrifiedrailway
+
+ _ttdpatch_flags[2] = (1 << 0x01) // loadallgraphics - obsolote
+ | (1 << 0x03) // semaphores
+ | (0 << 0x0B) // enhancedgui
+ | (0 << 0x0C) // newagerating
+ | ((_settings.construction.build_on_slopes ? 1 : 0) << 0x0D) // buildonslopes
+ | (1 << 0x0E) // fullloadany
+ | (1 << 0x0F) // planespeed
+ | (0 << 0x10) // moreindustriesperclimate - obsolete
+ | (0 << 0x11) // moretoylandfeatures
+ | (1 << 0x12) // newstations
+ | (1 << 0x13) // tracktypecostdiff
+ | (1 << 0x14) // manualconvert
+ | ((_settings.construction.build_on_slopes ? 1 : 0) << 0x15) // buildoncoasts
+ | (1 << 0x16) // canals
+ | (1 << 0x17) // newstartyear
+ | ((_settings.vehicle.freight_trains > 1 ? 1 : 0) << 0x18) // freighttrains
+ | (1 << 0x19) // newhouses
+ | (1 << 0x1A) // newbridges
+ | (1 << 0x1B) // newtownnames
+ | (1 << 0x1C) // moreanimation
+ | ((_settings.vehicle.wagon_speed_limits ? 1 : 0) << 0x1D) // wagonspeedlimits
+ | (1 << 0x1E) // newshistory
+ | (0 << 0x1F); // custombridgeheads
+
+ _ttdpatch_flags[3] = (0 << 0x00) // newcargodistribution
+ | (1 << 0x01) // windowsnap
+ | (0 << 0x02) // townbuildnoroad
+ | (0 << 0x03) // pathbasedsignalling. To enable if ever pbs is back
+ | (0 << 0x04) // aichoosechance
+ | (1 << 0x05) // resolutionwidth
+ | (1 << 0x06) // resolutionheight
+ | (1 << 0x07) // newindustries
+ | ((_settings.order.improved_load ? 1 : 0) << 0x08) // fifoloading
+ | (0 << 0x09) // townroadbranchprob
+ | (0 << 0x0A) // tempsnowline
+ | (1 << 0x0B) // newcargo
+ | (1 << 0x0C) // enhancemultiplayer
+ | (1 << 0x0D) // onewayroads
+ | ((_settings.station.nonuniform_stations ? 1 : 0) << 0x0E) // irregularstations
+ | (1 << 0x0F) // statistics
+ | (1 << 0x10) // newsounds
+ | (1 << 0x11) // autoreplace
+ | (1 << 0x12) // autoslope
+ | (0 << 0x13) // followvehicle
+ | (1 << 0x14) // trams
+ | (0 << 0x15) // enhancetunnels
+ | (1 << 0x16) // shortrvs
+ | (1 << 0x17) // articulatedrvs
+ | ((_settings.vehicle.dynamic_engines ? 1 : 0) << 0x18) // dynamic engines
+ | (1 << 0x1E); // variablerunningcosts
}
static void ResetCustomStations()
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index 313086f57..46bd052a7 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -1123,7 +1123,7 @@ void CommitRailVehListOrderChanges()
/* Populate map with current list positions */
Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
- if (!_patches.dynamic_engines || e->grffile == source_e->grffile) {
+ if (!_settings.vehicle.dynamic_engines || e->grffile == source_e->grffile) {
if (e->internal_id == target) target_e = e;
lptr_map[e->list_position] = e;
}
diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp
index 8010cedf7..47ff33ee6 100644
--- a/src/newgrf_town.cpp
+++ b/src/newgrf_town.cpp
@@ -21,7 +21,7 @@ uint32 TownGetVariable(byte variable, byte parameter, bool *available, const Tow
switch (variable) {
/* Larger towns */
case 0x40:
- if (_patches.larger_towns == 0) return 2;
+ if (_settings.economy.larger_towns == 0) return 2;
if (t->larger_town) return 1;
return 0;
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 41b2e9daf..eaa9dca77 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -398,7 +398,7 @@ void AddNewsItem(StringID string, NewsSubtype subtype, uint data_a, uint data_b)
ni->flags = _news_subtype_data[subtype].flags;
/* show this news message in color? */
- if (_cur_year >= _patches.colored_news_year) ni->flags |= NF_INCOLOR;
+ if (_cur_year >= _settings.gui.colored_news_year) ni->flags |= NF_INCOLOR;
ni->data_a = data_a;
ni->data_b = data_b;
diff --git a/src/npf.cpp b/src/npf.cpp
index 8a8d4a9ea..f217653f3 100644
--- a/src/npf.cpp
+++ b/src/npf.cpp
@@ -213,7 +213,7 @@ static uint NPFSlopeCost(AyStarNode* current)
if (z2 - z1 > 1) {
/* Slope up */
- return _patches.npf_rail_slope_penalty;
+ return _settings.pf.npf.npf_rail_slope_penalty;
}
return 0;
/* Should we give a bonus for slope down? Probably not, we
@@ -260,10 +260,10 @@ static int32 NPFWaterPathCost(AyStar* as, AyStarNode* current, OpenListNode* par
cost = _trackdir_length[trackdir]; // Should be different for diagonal tracks
if (IsBuoyTile(current->tile) && IsDiagonalTrackdir(trackdir))
- cost += _patches.npf_buoy_penalty; // A small penalty for going over buoys
+ cost += _settings.pf.npf.npf_buoy_penalty; // A small penalty for going over buoys
if (current->direction != NextTrackdir((Trackdir)parent->path.node.direction))
- cost += _patches.npf_water_curve_penalty;
+ cost += _settings.pf.npf.npf_water_curve_penalty;
/* @todo More penalties? */
@@ -285,13 +285,13 @@ static int32 NPFRoadPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
case MP_ROAD:
cost = NPF_TILE_LENGTH;
/* Increase the cost for level crossings */
- if (IsLevelCrossing(tile)) cost += _patches.npf_crossing_penalty;
+ if (IsLevelCrossing(tile)) cost += _settings.pf.npf.npf_crossing_penalty;
break;
case MP_STATION:
cost = NPF_TILE_LENGTH;
/* Increase the cost for drive-through road stops */
- if (IsDriveThroughStopTile(tile)) cost += _patches.npf_road_drive_through_penalty;
+ if (IsDriveThroughStopTile(tile)) cost += _settings.pf.npf.npf_road_drive_through_penalty;
break;
default:
@@ -306,7 +306,7 @@ static int32 NPFRoadPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
/* Check for turns. Road vehicles only really drive diagonal, turns are
* represented by non-diagonal tracks */
if (!IsDiagonalTrackdir((Trackdir)current->direction))
- cost += _patches.npf_road_curve_penalty;
+ cost += _settings.pf.npf.npf_road_curve_penalty;
NPFMarkTile(tile);
DEBUG(npf, 4, "Calculating G for: (%d, %d). Result: %d", TileX(current->tile), TileY(current->tile), cost);
@@ -344,7 +344,7 @@ static int32 NPFRailPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
* give any station tile a penalty, because every possible route will get
* this penalty exactly once, on its end tile (if it's a station) and it
* will therefore not make a difference. */
- cost = NPF_TILE_LENGTH + _patches.npf_rail_station_penalty;
+ cost = NPF_TILE_LENGTH + _settings.pf.npf.npf_rail_station_penalty;
break;
default:
@@ -366,9 +366,9 @@ static int32 NPFRailPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
SignalType sigtype = GetSignalType(tile, TrackdirToTrack(trackdir));
if (sigtype == SIGTYPE_EXIT || sigtype == SIGTYPE_COMBO) {
/* Penalise exit and combo signals differently (heavier) */
- cost += _patches.npf_rail_firstred_exit_penalty;
+ cost += _settings.pf.npf.npf_rail_firstred_exit_penalty;
} else {
- cost += _patches.npf_rail_firstred_penalty;
+ cost += _settings.pf.npf.npf_rail_firstred_penalty;
}
}
/* Record the state of this signal */
@@ -386,14 +386,14 @@ static int32 NPFRailPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
* of course... */
new_node.path.node = *current;
if (as->EndNodeCheck(as, &new_node) == AYSTAR_FOUND_END_NODE && NPFGetFlag(current, NPF_FLAG_LAST_SIGNAL_RED))
- cost += _patches.npf_rail_lastred_penalty;
+ cost += _settings.pf.npf.npf_rail_lastred_penalty;
/* Check for slope */
cost += NPFSlopeCost(current);
/* Check for turns */
if (current->direction != NextTrackdir((Trackdir)parent->path.node.direction))
- cost += _patches.npf_rail_curve_penalty;
+ cost += _settings.pf.npf.npf_rail_curve_penalty;
/*TODO, with realistic acceleration, also the amount of straight track between
* curves should be taken into account, as this affects the speed limit. */
@@ -402,7 +402,7 @@ static int32 NPFRailPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
/* Penalise any depot tile that is not the last tile in the path. This
* _should_ penalise every occurence of reversing in a depot (and only
* that) */
- cost += _patches.npf_rail_depot_reverse_penalty;
+ cost += _settings.pf.npf.npf_rail_depot_reverse_penalty;
}
/* Check for occupied track */
@@ -634,7 +634,7 @@ static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_tr
trackdirbits &= TrackdirReachesTrackdirs(src_trackdir);
/* Filter out trackdirs that would make 90 deg turns for trains */
- if (_patches.forbid_90_deg && (type == TRANSPORT_RAIL || type == TRANSPORT_WATER)) trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir);
+ if (_settings.pf.forbid_90_deg && (type == TRANSPORT_RAIL || type == TRANSPORT_WATER)) trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir);
DEBUG(npf, 6, "After filtering: (%d, %d), possible trackdirs: 0x%X", TileX(dst_tile), TileY(dst_tile), trackdirbits);
@@ -970,7 +970,7 @@ void InitializeNPF()
//_npf_aystar.max_search_nodes = 0;
/* We will limit the number of nodes for now, until we have a better
* solution to really fix performance */
- _npf_aystar.max_search_nodes = _patches.npf_max_search_nodes;
+ _npf_aystar.max_search_nodes = _settings.pf.npf.npf_max_search_nodes;
}
void NPFFillWithOrderData(NPFFindStationOrTileData* fstd, Vehicle* v)
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 2b64822a1..efdab795c 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -485,8 +485,8 @@ int ttd_main(int argc, char *argv[])
if (!StrEmpty(videodriver)) ttd_strlcpy(_ini_videodriver, videodriver, sizeof(_ini_videodriver));
if (!StrEmpty(blitter)) ttd_strlcpy(_ini_blitter, blitter, sizeof(_ini_blitter));
if (resolution[0] != 0) { _cur_resolution[0] = resolution[0]; _cur_resolution[1] = resolution[1]; }
- if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
- if (generation_seed != GENERATE_NEW_SEED) _patches_newgame.generation_seed = generation_seed;
+ if (startyear != INVALID_YEAR) _settings_newgame.game_creation.starting_year = startyear;
+ if (generation_seed != GENERATE_NEW_SEED) _settings_newgame.game_creation.generation_seed = generation_seed;
/* The width and height must be at least 1 pixel, this
* way all internal drawing routines work correctly. */
@@ -652,7 +652,7 @@ void HandleExitGameRequest()
{
if (_game_mode == GM_MENU) { // do not ask to quit on the main screen
_exit_game = true;
- } else if (_patches.autosave_on_exit) {
+ } else if (_settings.gui.autosave_on_exit) {
DoExitSave();
_exit_game = true;
} else {
@@ -684,9 +684,9 @@ static void MakeNewGameDone()
SetLocalPlayer(PLAYER_FIRST);
_current_player = _local_player;
- DoCommandP(0, (_patches.autorenew << 15 ) | (_patches.autorenew_months << 16) | 4, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
+ DoCommandP(0, (_settings.gui.autorenew << 15 ) | (_settings.gui.autorenew_months << 16) | 4, _settings.gui.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
- SettingsDisableElrail(_patches.disable_elrails);
+ SettingsDisableElrail(_settings.vehicle.disable_elrails);
InitializeRailGUI();
#ifdef ENABLE_NETWORK
@@ -711,7 +711,7 @@ static void MakeNewGame(bool from_heightmap)
_industry_mngr.ResetMapping();
GenerateWorldSetCallback(&MakeNewGameDone);
- GenerateWorld(from_heightmap ? GW_HEIGHTMAP : GW_NEWGAME, 1 << _patches.map_x, 1 << _patches.map_y);
+ GenerateWorld(from_heightmap ? GW_HEIGHTMAP : GW_NEWGAME, 1 << _settings.game_creation.map_x, 1 << _settings.game_creation.map_y);
}
static void MakeNewEditorWorldDone()
@@ -728,7 +728,7 @@ static void MakeNewEditorWorld()
ResetGRFConfig(true);
GenerateWorldSetCallback(&MakeNewEditorWorldDone);
- GenerateWorld(GW_EMPTY, 1 << _patches.map_x, 1 << _patches.map_y);
+ GenerateWorld(GW_EMPTY, 1 << _settings.game_creation.map_x, 1 << _settings.game_creation.map_y);
}
void StartupPlayers();
@@ -778,7 +778,7 @@ static void StartScenario()
SetLocalPlayer(PLAYER_FIRST);
_current_player = _local_player;
- DoCommandP(0, (_patches.autorenew << 15 ) | (_patches.autorenew_months << 16) | 4, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
+ DoCommandP(0, (_settings.gui.autorenew << 15 ) | (_settings.gui.autorenew_months << 16) | 4, _settings.gui.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
MarkWholeScreenDirty();
}
@@ -837,7 +837,7 @@ void SwitchMode(int new_mode)
/* check if we should reload the config */
if (_network_reload_cfg) {
LoadFromConfig();
- _patches = _patches_newgame;
+ _settings = _settings_newgame;
_opt = _opt_newgame;
ResetGRFConfig(false);
}
@@ -911,14 +911,14 @@ void SwitchMode(int new_mode)
case SM_LOAD_HEIGHTMAP: /* Load heightmap from scenario editor */
SetLocalPlayer(OWNER_NONE);
- GenerateWorld(GW_HEIGHTMAP, 1 << _patches.map_x, 1 << _patches.map_y);
+ GenerateWorld(GW_HEIGHTMAP, 1 << _settings.game_creation.map_x, 1 << _settings.game_creation.map_y);
MarkWholeScreenDirty();
break;
case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
SetLocalPlayer(OWNER_NONE);
- _patches_newgame.starting_year = _cur_year;
+ _settings_newgame.game_creation.starting_year = _cur_year;
} else {
SetDParamStr(0, GetSaveLoadErrorString());
ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
@@ -944,7 +944,7 @@ void SwitchMode(int new_mode)
case SM_GENRANDLAND: /* Generate random land within scenario editor */
SetLocalPlayer(OWNER_NONE);
- GenerateWorld(GW_RANDOM, 1 << _patches.map_x, 1 << _patches.map_y);
+ GenerateWorld(GW_RANDOM, 1 << _settings.game_creation.map_x, 1 << _settings.game_creation.map_y);
/* XXX: set date */
MarkWholeScreenDirty();
break;
@@ -1060,16 +1060,16 @@ static void DoAutosave()
if (_networking) return;
#endif /* PSP */
- if (_patches.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
+ if (_settings.gui.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
SetDParam(0, _local_player);
SetDParam(1, _date);
GetString(buf, STR_4004, lastof(buf));
ttd_strlcat(buf, ".sav", lengthof(buf));
} else {
- /* generate a savegame name and number according to _patches.max_num_autosaves */
+ /* generate a savegame name and number according to _settings.gui.max_num_autosaves */
snprintf(buf, sizeof(buf), "autosave%d.sav", _autosave_ctr);
- if (++_autosave_ctr >= _patches.max_num_autosaves) _autosave_ctr = 0;
+ if (++_autosave_ctr >= _settings.gui.max_num_autosaves) _autosave_ctr = 0;
}
DEBUG(sl, 2, "Autosaving to '%s'", buf);
@@ -1428,7 +1428,7 @@ bool AfterLoadGame()
SetDate(_date);
/* Force dynamic engines off when loading older savegames */
- if (CheckSavegameVersion(95)) _patches.dynamic_engines = 0;
+ if (CheckSavegameVersion(95)) _settings.vehicle.dynamic_engines = 0;
/* Load the sprites */
GfxLoadSprites();
@@ -1635,9 +1635,9 @@ bool AfterLoadGame()
*/
if (!_network_dedicated && IsValidPlayer(PLAYER_FIRST)) {
p = GetPlayer(PLAYER_FIRST);
- p->engine_renew = _patches.autorenew;
- p->engine_renew_months = _patches.autorenew_months;
- p->engine_renew_money = _patches.autorenew_money;
+ p->engine_renew = _settings.gui.autorenew;
+ p->engine_renew_months = _settings.gui.autorenew_months;
+ p->engine_renew_money = _settings.gui.autorenew_money;
}
}
@@ -2022,9 +2022,9 @@ bool AfterLoadGame()
/* from version 38 we have optional elrails, since we cannot know the
* preference of a user, let elrails enabled; it can be disabled manually */
- if (CheckSavegameVersion(38)) _patches.disable_elrails = false;
+ if (CheckSavegameVersion(38)) _settings.vehicle.disable_elrails = false;
/* do the same as when elrails were enabled/disabled manually just now */
- SettingsDisableElrail(_patches.disable_elrails);
+ SettingsDisableElrail(_settings.vehicle.disable_elrails);
InitializeRailGUI();
/* From version 53, the map array was changed for house tiles to allow
@@ -2189,7 +2189,7 @@ bool AfterLoadGame()
Town *t;
FOR_ALL_TOWNS(t) {
- if (_patches.larger_towns != 0 && (t->index % _patches.larger_towns) == 0) {
+ if (_settings.economy.larger_towns != 0 && (t->index % _settings.economy.larger_towns) == 0) {
t->larger_town = true;
}
}
@@ -2464,22 +2464,22 @@ bool AfterLoadGame()
}
/* Convert old PF settings to new */
- if (_patches.yapf.rail_use_yapf || CheckSavegameVersion(28)) {
- _patches.pathfinder_for_trains = VPF_YAPF;
+ if (_settings.pf.yapf.rail_use_yapf || CheckSavegameVersion(28)) {
+ _settings.pf.pathfinder_for_trains = VPF_YAPF;
} else {
- _patches.pathfinder_for_trains = (_patches.new_pathfinding_all ? VPF_NPF : VPF_NTP);
+ _settings.pf.pathfinder_for_trains = (_settings.pf.new_pathfinding_all ? VPF_NPF : VPF_NTP);
}
- if (_patches.yapf.road_use_yapf || CheckSavegameVersion(28)) {
- _patches.pathfinder_for_roadvehs = VPF_YAPF;
+ if (_settings.pf.yapf.road_use_yapf || CheckSavegameVersion(28)) {
+ _settings.pf.pathfinder_for_roadvehs = VPF_YAPF;
} else {
- _patches.pathfinder_for_roadvehs = (_patches.new_pathfinding_all ? VPF_NPF : VPF_OPF);
+ _settings.pf.pathfinder_for_roadvehs = (_settings.pf.new_pathfinding_all ? VPF_NPF : VPF_OPF);
}
- if (_patches.yapf.ship_use_yapf) {
- _patches.pathfinder_for_ships = VPF_YAPF;
+ if (_settings.pf.yapf.ship_use_yapf) {
+ _settings.pf.pathfinder_for_ships = VPF_YAPF;
} else {
- _patches.pathfinder_for_ships = (_patches.new_pathfinding_all ? VPF_NPF : VPF_OPF);
+ _settings.pf.pathfinder_for_ships = (_settings.pf.new_pathfinding_all ? VPF_NPF : VPF_OPF);
}
}
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index f17db8306..77207ce3b 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -153,7 +153,7 @@ Order::Order(uint32 packed)
void Order::ConvertFromOldSavegame()
{
/* First handle non-stop, because those bits are going to be reused. */
- if (_patches.sg_new_nonstop) {
+ if (_settings.gui.sg_new_nonstop) {
this->SetNonStopType((this->flags & 0x08) ? ONSF_NO_STOP_AT_ANY_STATION : ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
} else {
this->SetNonStopType((this->flags & 0x08) ? ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS : ONSF_STOP_EVERYWHERE);
@@ -171,7 +171,7 @@ void Order::ConvertFromOldSavegame()
if ((this->flags & 4) == 0) {
this->SetLoadType(OLF_LOAD_IF_POSSIBLE);
} else {
- this->SetLoadType(_patches.sg_full_load_any ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD);
+ this->SetLoadType(_settings.gui.sg_full_load_any ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD);
}
} else {
this->SetDepotActionType(((this->flags & 6) == 4) ? ODATFB_HALT : ODATF_SERVICE_ONLY);
@@ -451,7 +451,7 @@ CommandCost CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (!HasOrderPoolFree(1)) return_cmd_error(STR_8831_NO_MORE_SPACE_FOR_ORDERS);
- if (v->type == VEH_SHIP && IsHumanPlayer(v->owner) && _patches.pathfinder_for_ships != VPF_NPF) {
+ if (v->type == VEH_SHIP && IsHumanPlayer(v->owner) && _settings.pf.pathfinder_for_ships != VPF_NPF) {
/* Make sure the new destination is not too far away from the previous */
const Order *prev = NULL;
uint n = 0;
@@ -1273,7 +1273,7 @@ void RestoreVehicleOrders(const Vehicle *v, const BackuppedOrders *bak)
}
/* Copy timetable if enabled */
- if (_patches.timetabling && !DoCommandP(0, v->index | (i << 16) | (1 << 25),
+ if (_settings.order.timetabling && !DoCommandP(0, v->index | (i << 16) | (1 << 25),
bak->order[i].wait_time << 16 | bak->order[i].travel_time, NULL,
CMD_CHANGE_TIMETABLE | CMD_NO_TEST_IF_IN_NETWORK)) {
break;
@@ -1386,13 +1386,13 @@ static TileIndex GetStationTileForVehicle(const Vehicle* v, const Station* st)
void CheckOrders(const Vehicle* v)
{
/* Does the user wants us to check things? */
- if (_patches.order_review_system == 0) return;
+ if (_settings.gui.order_review_system == 0) return;
/* Do nothing for crashed vehicles */
if (v->vehstatus & VS_CRASHED) return;
/* Do nothing for stopped vehicles if setting is '1' */
- if (_patches.order_review_system == 1 && v->vehstatus & VS_STOPPED)
+ if (_settings.gui.order_review_system == 1 && v->vehstatus & VS_STOPPED)
return;
/* do nothing we we're not the first vehicle in a share-chain */
@@ -1571,7 +1571,7 @@ void DeleteVehicleOrders(Vehicle *v)
Date GetServiceIntervalClamped(uint index)
{
- return (_patches.servint_ispercent) ? Clamp(index, MIN_SERVINT_PERCENT, MAX_SERVINT_PERCENT) : Clamp(index, MIN_SERVINT_DAYS, MAX_SERVINT_DAYS);
+ return (_settings.vehicle.servint_ispercent) ? Clamp(index, MIN_SERVINT_PERCENT, MAX_SERVINT_PERCENT) : Clamp(index, MIN_SERVINT_DAYS, MAX_SERVINT_DAYS);
}
/**
diff --git a/src/order_gui.cpp b/src/order_gui.cpp
index 0b90e24c0..2a652d4d0 100644
--- a/src/order_gui.cpp
+++ b/src/order_gui.cpp
@@ -265,13 +265,13 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
order.index = 0;
/* check depot first */
- if (_patches.gotodepot) {
+ if (_settings.order.gotodepot) {
switch (GetTileType(tile)) {
case MP_RAILWAY:
if (v->type == VEH_TRAIN && IsTileOwner(tile, _local_player)) {
if (IsRailDepot(tile)) {
order.MakeGoToDepot(GetDepotByTile(tile)->index, ODTFB_PART_OF_ORDERS);
- if (_patches.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
+ if (_settings.gui.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
return order;
}
}
@@ -280,7 +280,7 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
case MP_ROAD:
if (IsRoadDepot(tile) && v->type == VEH_ROAD && IsTileOwner(tile, _local_player)) {
order.MakeGoToDepot(GetDepotByTile(tile)->index, ODTFB_PART_OF_ORDERS);
- if (_patches.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
+ if (_settings.gui.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
return order;
}
break;
@@ -313,7 +313,7 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
IsTileOwner(tile, _local_player) &&
IsRailWaypoint(tile)) {
order.MakeGoToWaypoint(GetWaypointByTile(tile)->index);
- if (_patches.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
+ if (_settings.gui.new_nonstop) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
return order;
}
@@ -330,7 +330,7 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
(facil = FACIL_TRUCK_STOP, 1);
if (st->facilities & facil) {
order.MakeGoToStation(st_index);
- if (_patches.new_nonstop && (v->type == VEH_TRAIN || v->type == VEH_ROAD)) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
+ if (_settings.gui.new_nonstop && (v->type == VEH_TRAIN || v->type == VEH_ROAD)) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
return order;
}
}
@@ -611,7 +611,7 @@ public:
this->resize.step_height = 10;
this->selected_order = -1;
this->vehicle = v;
- if (_patches.timetabling) {
+ if (_settings.order.timetabling) {
this->widget[ORDER_WIDGET_CAPTION].right -= 61;
} else {
this->HideWidget(ORDER_WIDGET_TIMETABLE_VIEW);
diff --git a/src/pathfind.cpp b/src/pathfind.cpp
index d26f0e041..8d201086d 100644
--- a/src/pathfind.cpp
+++ b/src/pathfind.cpp
@@ -778,7 +778,7 @@ void NewTrainPathfind(TileIndex tile, TileIndex dest, RailTypes railtypes, DiagD
tpf->enum_proc = enum_proc;
tpf->tracktype = TRANSPORT_RAIL;
tpf->railtypes = railtypes;
- tpf->maxlength = min(_patches.pf_maxlength * 3, 10000);
+ tpf->maxlength = min(_settings.pf.opf.pf_maxlength * 3, 10000);
tpf->nstack = 0;
tpf->new_link = tpf->links;
tpf->num_links_left = lengthof(tpf->links);
diff --git a/src/player_gui.cpp b/src/player_gui.cpp
index f08b5c332..b883affdf 100644
--- a/src/player_gui.cpp
+++ b/src/player_gui.cpp
@@ -1191,7 +1191,7 @@ struct PlayerCompanyWindow : Window
this->SetWidgetHiddenState(PCW_WIDGET_COMPANY_PASSWORD, !local || !_networking);
if (!local) {
- if (_patches.allow_shares) { // Shares are allowed
+ if (_settings.economy.allow_shares) { // Shares are allowed
/* If all shares are owned by someone (none by nobody), disable buy button */
this->SetWidgetDisabledState(PCW_WIDGET_BUY_SHARE, GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0 ||
/* Only 25% left to buy. If the player is human, disable buying it up.. TODO issues! */
@@ -1545,7 +1545,7 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow
this->SetupHighScoreEndWindow(&x, &y);
- SetDParam(0, _patches.ending_year);
+ SetDParam(0, _settings.gui.ending_year);
SetDParam(1, this->window_number + STR_6801_EASY);
DrawStringMultiCenter(x + (640 / 2), y + 62, !_networking ? STR_0211_TOP_COMPANIES_WHO_REACHED : STR_TOP_COMPANIES_NETWORK_GAME, 500);
diff --git a/src/players.cpp b/src/players.cpp
index f9fd80b25..169456b52 100644
--- a/src/players.cpp
+++ b/src/players.cpp
@@ -65,9 +65,9 @@ void SetLocalPlayer(PlayerID new_player)
/* Do not update the patches if we are in the intro GUI */
if (IsValidPlayer(new_player) && _game_mode != GM_MENU) {
const Player *p = GetPlayer(new_player);
- _patches.autorenew = p->engine_renew;
- _patches.autorenew_months = p->engine_renew_months;
- _patches.autorenew_money = p->engine_renew_money;
+ _settings.gui.autorenew = p->engine_renew;
+ _settings.gui.autorenew_months = p->engine_renew_months;
+ _settings.gui.autorenew_money = p->engine_renew_money;
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
}
@@ -541,9 +541,9 @@ Player *DoStartupNewPlayer(bool is_ai)
/* Engine renewal settings */
p->engine_renew_list = NULL;
p->renew_keep_length = false;
- p->engine_renew = _patches_newgame.autorenew;
- p->engine_renew_months = _patches_newgame.autorenew_months;
- p->engine_renew_money = _patches_newgame.autorenew_money;
+ p->engine_renew = _settings_newgame.gui.autorenew;
+ p->engine_renew_months = _settings_newgame.gui.autorenew_months;
+ p->engine_renew_money = _settings_newgame.gui.autorenew_money;
GeneratePresidentName(p);
@@ -630,7 +630,7 @@ void PlayersYearlyLoop()
}
}
- if (_patches.show_finances && _local_player != PLAYER_SPECTATOR) {
+ if (_settings.gui.show_finances && _local_player != PLAYER_SPECTATOR) {
ShowPlayerFinances(_local_player);
p = GetPlayer(_local_player);
if (p->num_valid_stat_ent > 5 && p->old_economy[0].performance_history < p->old_economy[4].performance_history) {
@@ -695,7 +695,7 @@ CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
if (flags & DC_EXEC) {
p->engine_renew = HasBit(p2, 0);
if (IsLocalPlayer()) {
- _patches.autorenew = p->engine_renew;
+ _settings.gui.autorenew = p->engine_renew;
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
}
@@ -708,7 +708,7 @@ CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
if (flags & DC_EXEC) {
p->engine_renew_months = (int16)p2;
if (IsLocalPlayer()) {
- _patches.autorenew_months = p->engine_renew_months;
+ _settings.gui.autorenew_months = p->engine_renew_months;
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
}
@@ -721,7 +721,7 @@ CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
if (flags & DC_EXEC) {
p->engine_renew_money = p2;
if (IsLocalPlayer()) {
- _patches.autorenew_money = p->engine_renew_money;
+ _settings.gui.autorenew_money = p->engine_renew_money;
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
}
@@ -771,9 +771,9 @@ CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
p->engine_renew_money = p2;
if (IsLocalPlayer()) {
- _patches.autorenew = p->engine_renew;
- _patches.autorenew_months = p->engine_renew_months;
- _patches.autorenew_money = p->engine_renew_money;
+ _settings.gui.autorenew = p->engine_renew;
+ _settings.gui.autorenew_months = p->engine_renew_months;
+ _settings.gui.autorenew_money = p->engine_renew_money;
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
}
@@ -876,8 +876,8 @@ CommandCost CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
/* Now that we have a new player, broadcast its autorenew settings to
* all clients so everything is in sync */
DoCommand(0,
- (_patches.autorenew << 15 ) | (_patches.autorenew_months << 16) | 4,
- _patches.autorenew_money,
+ (_settings.gui.autorenew << 15 ) | (_settings.gui.autorenew_months << 16) | 4,
+ _settings.gui.autorenew_money,
DC_EXEC,
CMD_SET_AUTOREPLACE
);
@@ -1122,7 +1122,7 @@ void LoadFromHighScore()
}
/* Initialize end of game variable (when to show highscore chart) */
- _patches.ending_year = 2051;
+ _settings.gui.ending_year = 2051;
}
/* Save/load of players */
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index 7a42aa74b..9e13017d2 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -292,7 +292,7 @@ static CommandCost CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits ex
/* check track/slope combination */
if ((f_new == FOUNDATION_INVALID) ||
- ((f_new != FOUNDATION_NONE) && (!_patches.build_on_slopes || _is_old_ai_player))
+ ((f_new != FOUNDATION_NONE) && (!_settings.construction.build_on_slopes || _is_old_ai_player))
) return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
Foundation f_old = GetRailFoundation(tileh, existing);
@@ -756,7 +756,7 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p
if (tileh != SLOPE_FLAT && (
_is_old_ai_player ||
- !_patches.build_on_slopes ||
+ !_settings.construction.build_on_slopes ||
IsSteepSlope(tileh) ||
!CanBuildDepotByTileh(dir, tileh)
)) {
@@ -1224,7 +1224,7 @@ CommandCost CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
RailType type = GetRailType(tile);
/* Converting to the same type or converting 'hidden' elrail -> rail */
- if (type == totype || (_patches.disable_elrails && totype == RAILTYPE_RAIL && type == RAILTYPE_ELECTRIC)) continue;
+ if (type == totype || (_settings.vehicle.disable_elrails && totype == RAILTYPE_RAIL && type == RAILTYPE_ELECTRIC)) continue;
/* Trying to convert other's rail */
if (!CheckTileOwnership(tile)) continue;
@@ -1420,7 +1420,7 @@ static uint GetSaveSlopeZ(uint x, uint y, Track track)
static void DrawSingleSignal(TileIndex tile, Track track, byte condition, uint image, uint pos)
{
- bool side = (_opt.road_side != 0) && _patches.signal_side;
+ bool side = (_opt.road_side != 0) && _settings.construction.signal_side;
static const Point SignalPositions[2][12] = {
{ /* Signals on the left side */
/* LEFT LEFT RIGHT RIGHT UPPER UPPER */
@@ -2329,7 +2329,7 @@ static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *v, TileIndex tile, int
*/
static CommandCost TestAutoslopeOnRailTile(TileIndex tile, uint flags, uint z_old, Slope tileh_old, uint z_new, Slope tileh_new, TrackBits rail_bits)
{
- if (!_patches.build_on_slopes || !AutoslopeEnabled()) return CMD_ERROR;
+ if (!_settings.construction.build_on_slopes || !AutoslopeEnabled()) return CMD_ERROR;
/* Is the slope-rail_bits combination valid in general? I.e. is it save to call GetRailFoundation() ? */
if (CmdFailed(CheckRailSlope(tileh_new, rail_bits, TRACK_BIT_NONE, tile))) return CMD_ERROR;
@@ -2405,7 +2405,7 @@ static CommandCost TerraformTile_Track(TileIndex tile, uint32 flags, uint z_new,
/* allow terraforming */
return CommandCost(EXPENSES_CONSTRUCTION, was_water ? _price.clear_water : (Money)0);
} else {
- if (_patches.build_on_slopes && AutoslopeEnabled()) {
+ if (_settings.construction.build_on_slopes && AutoslopeEnabled()) {
switch (GetRailTileType(tile)) {
case RAIL_TILE_WAYPOINT: {
CommandCost cost = TestAutoslopeOnRailTile(tile, flags, z_old, tileh_old, z_new, tileh_new, GetRailWaypointBits(tile));
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 8f7bd0e11..6ba247cb0 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -182,7 +182,7 @@ static void PlaceRail_Station(TileIndex tile)
VpSetPlaceSizingLimit(-1);
} else if (_railstation.dragdrop) {
VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_BUILD_STATION);
- VpSetPlaceSizingLimit(_patches.station_spread);
+ VpSetPlaceSizingLimit(_settings.station.station_spread);
} else {
DoCommandP(tile,
_railstation.orientation | (_railstation.numtracks << 8) | (_railstation.platlength << 16) | (_ctrl_pressed << 24),
@@ -227,7 +227,7 @@ static void GenericPlaceSignals(TileIndex tile)
SB(p1, 7, 1, _convert_signal_button);
} else {
SB(p1, 3, 1, _ctrl_pressed);
- SB(p1, 4, 1, (_cur_year < _patches.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC));
+ SB(p1, 4, 1, (_cur_year < _settings.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC));
SB(p1, 5, 2, SIGTYPE_NORMAL);
SB(p1, 7, 1, 0);
}
@@ -429,7 +429,7 @@ static void BuildRailClick_Station(Window *w)
*/
static void BuildRailClick_AutoSignals(Window *w)
{
- if (_patches.enable_signal_gui != _ctrl_pressed) {
+ if (_settings.gui.enable_signal_gui != _ctrl_pressed) {
if (HandlePlacePushButton(w, RTW_BUILD_SIGNALS, ANIMCURSOR_BUILDSIGNALS, VHM_RECT, PlaceRail_AutoSignals)) ShowSignalBuilder(w);
} else {
HandlePlacePushButton(w, RTW_BUILD_SIGNALS, ANIMCURSOR_BUILDSIGNALS, VHM_RECT, PlaceRail_AutoSignals);
@@ -484,7 +484,7 @@ static void BuildRailClick_Remove(Window *w)
if (_railstation.orientation == 0) Swap(x, y);
SetTileSelectSize(x, y);
} else {
- VpSetPlaceSizingLimit(_patches.station_spread);
+ VpSetPlaceSizingLimit(_settings.station.station_spread);
}
}
}
@@ -547,15 +547,15 @@ static void HandleAutoSignalPlacement()
SB(p2, 3, 1, 0);
SB(p2, 4, 1, _cur_signal_variant);
SB(p2, 6, 1, _ctrl_pressed);
- SB(p2, 24, 8, _patches.drag_signals_density);
+ SB(p2, 24, 8, _settings.gui.drag_signals_density);
} else {
SB(p2, 3, 1, 0);
- SB(p2, 4, 1, (_cur_year < _patches.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC));
+ SB(p2, 4, 1, (_cur_year < _settings.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC));
SB(p2, 6, 1, _ctrl_pressed);
- SB(p2, 24, 8, _patches.drag_signals_density);
+ SB(p2, 24, 8, _settings.gui.drag_signals_density);
}
- /* _patches.drag_signals_density is given as a parameter such that each user
+ /* _settings.gui.drag_signals_density is given as a parameter such that each user
* in a network game can specify his/her own signal density */
DoCommandP(
TileVirtXY(thd->selstart.x, thd->selstart.y),
@@ -617,12 +617,12 @@ struct BuildRailToolbarWindow : Window {
this->DisableWidget(RTW_REMOVE);
this->FindWindowPlacementAndResize(desc);
- if (_patches.link_terraform_toolbar) ShowTerraformToolbar(this);
+ if (_settings.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
}
~BuildRailToolbarWindow()
{
- if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
+ if (_settings.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
}
void UpdateRemoveWidgetStatus(int clicked_widget)
@@ -1008,13 +1008,13 @@ public:
SetTileSelectSize(x, y);
}
- int rad = (_patches.modified_catchment) ? CA_TRAIN : CA_UNMODIFIED;
+ int rad = (_settings.station.modified_catchment) ? CA_TRAIN : CA_UNMODIFIED;
if (_station_show_coverage)
SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
for (uint bits = 0; bits < 7; bits++) {
- bool disable = bits >= _patches.station_spread;
+ bool disable = bits >= _settings.station.station_spread;
if (statspec == NULL) {
this->SetWidgetDisabledState(bits + BRSW_PLATFORM_NUM_1, disable);
this->SetWidgetDisabledState(bits + BRSW_PLATFORM_LEN_1, disable);
@@ -1390,8 +1390,8 @@ public:
this->SetWidgetLoweredState(BSW_CONVERT, _convert_signal_button);
- this->SetWidgetDisabledState(BSW_DRAG_SIGNALS_DENSITY_DECREASE, _patches.drag_signals_density == 1);
- this->SetWidgetDisabledState(BSW_DRAG_SIGNALS_DENSITY_INCREASE, _patches.drag_signals_density == 20);
+ this->SetWidgetDisabledState(BSW_DRAG_SIGNALS_DENSITY_DECREASE, _settings.gui.drag_signals_density == 1);
+ this->SetWidgetDisabledState(BSW_DRAG_SIGNALS_DENSITY_INCREASE, _settings.gui.drag_signals_density == 20);
this->DrawWidgets();
@@ -1406,7 +1406,7 @@ public:
this->DrawSignalSprite(BSW_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_COMBO, -2, 6);
/* Draw dragging signal density value in the BSW_DRAG_SIGNALS_DENSITY widget */
- SetDParam(0, _patches.drag_signals_density);
+ SetDParam(0, _settings.gui.drag_signals_density);
DrawStringCentered(this->widget[BSW_DRAG_SIGNALS_DENSITY].left + (this->widget[BSW_DRAG_SIGNALS_DENSITY].right -
this->widget[BSW_DRAG_SIGNALS_DENSITY].left) / 2 + 1,
this->widget[BSW_DRAG_SIGNALS_DENSITY].top + 2, STR_JUST_INT, TC_ORANGE);
@@ -1434,15 +1434,15 @@ public:
break;
case BSW_DRAG_SIGNALS_DENSITY_DECREASE:
- if (_patches.drag_signals_density > 1) {
- _patches.drag_signals_density--;
+ if (_settings.gui.drag_signals_density > 1) {
+ _settings.gui.drag_signals_density--;
SetWindowDirty(FindWindowById(WC_GAME_OPTIONS, 0));
}
break;
case BSW_DRAG_SIGNALS_DENSITY_INCREASE:
- if (_patches.drag_signals_density < 20) {
- _patches.drag_signals_density++;
+ if (_settings.gui.drag_signals_density < 20) {
+ _settings.gui.drag_signals_density++;
SetWindowDirty(FindWindowById(WC_GAME_OPTIONS, 0));
}
break;
@@ -1701,7 +1701,7 @@ static void SetDefaultRailGui()
if (_local_player == PLAYER_SPECTATOR || !IsValidPlayer(_local_player)) return;
extern RailType _last_built_railtype;
- RailType rt = (RailType)_patches.default_rail_type;
+ RailType rt = (RailType)_settings.gui.default_rail_type;
if (rt >= RAILTYPE_END) {
if (rt == RAILTYPE_END + 2) {
/* Find the most used rail type */
@@ -1753,7 +1753,7 @@ static void SetDefaultRailGui()
*/
int32 ResetSignalVariant(int32 = 0)
{
- SignalVariant new_variant = (_cur_year < _patches.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC);
+ SignalVariant new_variant = (_cur_year < _settings.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC);
if (new_variant != _cur_signal_variant) {
Window *w = FindWindowById(WC_BUILD_SIGNAL, 0);
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index ef193720d..7e13d69b0 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -182,7 +182,7 @@ bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, RoadType
* then allow it */
if (KillFirstBit(n) != ROAD_NONE && (n & remove) != ROAD_NONE) {
/* you can remove all kind of roads with extra dynamite */
- if (!_patches.extra_dynamite) {
+ if (!_settings.construction.extra_dynamite) {
SetDParam(0, t->index);
_error_message = STR_2009_LOCAL_AUTHORITY_REFUSES;
return false;
@@ -279,7 +279,7 @@ static CommandCost RemoveRoad(TileIndex tile, uint32 flags, RoadBits pieces, Roa
* @li if build on slopes is disabled */
if (IsSteepSlope(tileh) || (IsStraightRoad(other) &&
(other & _invalid_tileh_slopes_road[0][tileh & SLOPE_ELEVATED]) != ROAD_NONE) ||
- (tileh != SLOPE_FLAT && !_patches.build_on_slopes)) {
+ (tileh != SLOPE_FLAT && !_settings.construction.build_on_slopes)) {
pieces |= MirrorRoadBits(pieces);
}
@@ -419,7 +419,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits *pieces, RoadBits existi
RoadBits type_bits = existing | *pieces;
/* Roads on slopes */
- if (_patches.build_on_slopes && (_invalid_tileh_slopes_road[0][tileh] & (other | type_bits)) == ROAD_NONE) {
+ if (_settings.construction.build_on_slopes && (_invalid_tileh_slopes_road[0][tileh] & (other | type_bits)) == ROAD_NONE) {
/* If we add leveling we've got to pay for it */
if ((other | existing) == ROAD_NONE) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
@@ -439,7 +439,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits *pieces, RoadBits existi
if (IsSlopeWithOneCornerRaised(tileh)) {
/* Prevent build on slopes if it isn't allowed */
- if (_patches.build_on_slopes) {
+ if (_settings.construction.build_on_slopes) {
/* If we add foundation we've got to pay for it */
if ((other | existing) == ROAD_NONE) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
@@ -594,7 +594,7 @@ do_clear:;
CommandCost ret = CheckRoadSlope(tileh, &pieces, existing, other_bits);
/* Return an error if we need to build a foundation (ret != 0) but the
* current patch-setting is turned off (or stupid AI@work) */
- if (CmdFailed(ret) || (ret.GetCost() != 0 && !_patches.build_on_slopes)) {
+ if (CmdFailed(ret) || (ret.GetCost() != 0 && !_settings.construction.build_on_slopes)) {
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
cost.AddCost(ret);
@@ -849,7 +849,7 @@ CommandCost CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
Slope tileh = GetTileSlope(tile, NULL);
if (tileh != SLOPE_FLAT && (
- !_patches.build_on_slopes ||
+ !_settings.construction.build_on_slopes ||
IsSteepSlope(tileh) ||
!CanBuildDepotByTileh(dir, tileh)
)) {
@@ -1359,7 +1359,7 @@ static void TileLoop_Road(TileIndex tile)
} else if (IncreaseRoadWorksCounter(tile)) {
TerminateRoadWorks(tile);
- if (_patches.mod_road_rebuild) {
+ if (_settings.economy.mod_road_rebuild) {
/* Generate a nicer town surface */
const RoadBits old_rb = GetAnyRoadBits(tile, ROADTYPE_ROAD);
const RoadBits new_rb = CleanUpRoadBits(tile, old_rb);
@@ -1570,7 +1570,7 @@ static void ChangeTileOwner_Road(TileIndex tile, PlayerID old_player, PlayerID n
static CommandCost TerraformTile_Road(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
- if (_patches.build_on_slopes && AutoslopeEnabled()) {
+ if (_settings.construction.build_on_slopes && AutoslopeEnabled()) {
switch (GetRoadTileType(tile)) {
case ROAD_TILE_CROSSING:
if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index c5ad09e2d..53ad0354d 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -409,12 +409,12 @@ struct BuildRoadToolbarWindow : Window {
WIDGET_LIST_END);
this->FindWindowPlacementAndResize(desc);
- if (_patches.link_terraform_toolbar) ShowTerraformToolbar(this);
+ if (_settings.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
}
~BuildRoadToolbarWindow()
{
- if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
+ if (_settings.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
}
/**
@@ -839,7 +839,7 @@ public:
this->DrawWidgets();
if (_station_show_coverage) {
- int rad = _patches.modified_catchment ? CA_TRUCK /* = CA_BUS */ : CA_UNMODIFIED;
+ int rad = _settings.station.modified_catchment ? CA_TRUCK /* = CA_BUS */ : CA_UNMODIFIED;
SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
} else {
SetTileSelectSize(1, 1);
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp
index 0fe8d5a8a..3f75123f1 100644
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -205,7 +205,7 @@ CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
/* find the first free roadveh id */
unit_num = HasBit(p2, 0) ? 0 : GetFreeUnitNumber(VEH_ROAD);
- if (unit_num > _patches.max_roadveh)
+ if (unit_num > _settings.vehicle.max_roadveh)
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
if (flags & DC_EXEC) {
@@ -257,7 +257,7 @@ CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
v->name = NULL;
- v->service_interval = _patches.servint_roadveh;
+ v->service_interval = _settings.vehicle.servint_roadveh;
v->date_of_last_service = _date;
v->build_year = _cur_year;
@@ -419,7 +419,7 @@ static bool EnumRoadSignalFindDepot(TileIndex tile, void* data, Trackdir trackdi
static const Depot* FindClosestRoadDepot(const Vehicle* v)
{
- switch (_patches.pathfinder_for_roadvehs) {
+ switch (_settings.pf.pathfinder_for_roadvehs) {
case VPF_YAPF: /* YAPF */
return YapfFindNearestRoadDepot(v);
@@ -863,7 +863,7 @@ static bool RoadVehAccelerate(Vehicle *v)
/* updates statusbar only if speed have changed to save CPU time */
if (spd != v->cur_speed) {
v->cur_speed = spd;
- if (_patches.vehicle_speed) {
+ if (_settings.gui.vehicle_speed) {
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
}
@@ -1085,7 +1085,7 @@ static Trackdir RoadFindPathToDest(Vehicle* v, TileIndex tile, DiagDirection ent
trackdirs = TRACKDIR_BIT_NONE;
} else {
/* Proper station type, check if there is free loading bay */
- if (!_patches.roadveh_queue && IsStandardRoadStopTile(tile) &&
+ if (!_settings.pf.roadveh_queue && IsStandardRoadStopTile(tile) &&
!GetRoadStopByTile(tile, rstype)->HasFreeBay()) {
/* Station is full and RV queuing is off */
trackdirs = TRACKDIR_BIT_NONE;
@@ -1124,7 +1124,7 @@ static Trackdir RoadFindPathToDest(Vehicle* v, TileIndex tile, DiagDirection ent
return_track(FindFirstBit2x64(trackdirs));
}
- switch (_patches.pathfinder_for_roadvehs) {
+ switch (_settings.pf.pathfinder_for_roadvehs) {
case VPF_YAPF: { /* YAPF */
Trackdir trackdir = YapfChooseRoadTrack(v, tile, enterdir);
if (trackdir != INVALID_TRACKDIR) return_track(trackdir);
@@ -1211,7 +1211,7 @@ found_best_track:;
static uint RoadFindPathToStop(const Vehicle *v, TileIndex tile)
{
- if (_patches.pathfinder_for_roadvehs == VPF_YAPF) {
+ if (_settings.pf.pathfinder_for_roadvehs == VPF_YAPF) {
/* use YAPF */
return YapfRoadVehDistanceToTile(v, tile);
}
@@ -1887,7 +1887,7 @@ void RoadVehicle::Tick()
static void CheckIfRoadVehNeedsService(Vehicle *v)
{
/* If we already got a slot at a stop, use that FIRST, and go to a depot later */
- if (v->u.road.slot != NULL || _patches.servint_roadveh == 0 || !v->NeedsAutomaticServicing()) return;
+ if (v->u.road.slot != NULL || _settings.vehicle.servint_roadveh == 0 || !v->NeedsAutomaticServicing()) return;
if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
diff --git a/src/saveload.cpp b/src/saveload.cpp
index 51b03bc40..fc13f8b89 100644
--- a/src/saveload.cpp
+++ b/src/saveload.cpp
@@ -1776,7 +1776,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb)
}
}
-/** Do a save when exiting the game (patch option) _patches.autosave_on_exit */
+/** Do a save when exiting the game (patch option) _settings.gui.autosave_on_exit */
void DoExitSave()
{
SaveOrLoad("exit.sav", SL_SAVE, AUTOSAVE_DIR);
diff --git a/src/settings.cpp b/src/settings.cpp
index 46e187ea2..840ab9747 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -65,8 +65,8 @@
GameOptions _opt;
GameOptions _opt_newgame;
-Patches _patches;
-Patches _patches_newgame;
+Settings _settings;
+Settings _settings_newgame;
struct IniFile;
struct IniItem;
@@ -343,6 +343,28 @@ static IniGroup *ini_getgroup(IniFile *ini, const char *name, size_t len = 0)
return group;
}
+static void ini_removegroup(IniFile *ini, const char *name)
+{
+ size_t len = strlen(name);
+ IniGroup *prev = NULL;
+ IniGroup *group;
+
+ /* does it exist already? */
+ for (group = ini->group; group != NULL; prev = group, group = group->next) {
+ if (memcmp(group->name, name, len) == 0) {
+ break;
+ }
+ }
+
+ if (group == NULL) return;
+
+ if (prev != NULL) {
+ prev->next = prev->next->next;
+ } else {
+ ini->group = ini->group->next;
+ }
+}
+
/** lookup an item or make a new one */
static IniItem *ini_getitem(IniGroup *group, const char *name, bool create)
{
@@ -720,7 +742,7 @@ static void ini_load_settings(IniFile *ini, const SettingDesc *sd, const char *g
if (!SlIsObjectCurrentlyValid(sld->version_from, sld->version_to)) continue;
- /* XXX - wtf is this?? (group override?) */
+ /* For patches.xx.yy load the settings from [xx] yy = ? */
s = strchr(sdb->name, '.');
if (s != NULL) {
group = ini_getgroup(ini, sdb->name, s - sdb->name);
@@ -731,6 +753,18 @@ static void ini_load_settings(IniFile *ini, const SettingDesc *sd, const char *g
}
item = ini_getitem(group, s, false);
+ if (item == NULL && group != group_def) {
+ /* For patches.xx.yy load the settings from [patches] yy = ? in case the previous
+ * did not exist (e.g. loading old config files with a [patches] section */
+ item = ini_getitem(group_def, s, false);
+ }
+ if (item == NULL) {
+ /* For patches.xx.zz.yy load the settings from [zz] yy = ? in case the previous
+ * did not exist (e.g. loading old config files with a [yapf] section */
+ const char *sc = strchr(s, '.');
+ if (sc != NULL) item = ini_getitem(ini_getgroup(ini, s, sc - s), sc + 1, false);
+ }
+
p = (item == NULL) ? sdb->def : string_to_val(sdb, item->value);
ptr = GetVariableAddress(object, sld);
@@ -1120,7 +1154,7 @@ static int32 Ai_In_Multiplayer_Warning(int32 p1)
{
if (p1 == 1) {
ShowErrorMessage(INVALID_STRING_ID, TEMP_AI_MULTIPLAYER, 0, 0);
- _patches.ainew_active = true;
+ _settings.ai.ainew_active = true;
}
return 0;
}
@@ -1186,7 +1220,7 @@ static int32 UpdateConsists(int32 p1)
static int32 CheckInterval(int32 p1)
{
bool warning;
- const Patches *ptc = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
+ const VehicleSettings *ptc = (_game_mode == GM_MENU) ? &_settings_newgame.vehicle : &_settings.vehicle;
if (p1) {
warning = ( (IsInsideMM(ptc->servint_trains, 5, 90 + 1) || ptc->servint_trains == 0) &&
@@ -1208,19 +1242,19 @@ static int32 CheckInterval(int32 p1)
static int32 EngineRenewUpdate(int32 p1)
{
- DoCommandP(0, 0, _patches.autorenew, NULL, CMD_SET_AUTOREPLACE);
+ DoCommandP(0, 0, _settings.gui.autorenew, NULL, CMD_SET_AUTOREPLACE);
return 0;
}
static int32 EngineRenewMonthsUpdate(int32 p1)
{
- DoCommandP(0, 1, _patches.autorenew_months, NULL, CMD_SET_AUTOREPLACE);
+ DoCommandP(0, 1, _settings.gui.autorenew_months, NULL, CMD_SET_AUTOREPLACE);
return 0;
}
static int32 EngineRenewMoneyUpdate(int32 p1)
{
- DoCommandP(0, 2, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
+ DoCommandP(0, 2, _settings.gui.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
return 0;
}
@@ -1252,9 +1286,9 @@ static int32 DragSignalsDensityChanged(int32)
*/
static int32 CheckTownLayout(int32 p1)
{
- if (_patches.town_layout == TL_NO_ROADS && _game_mode == GM_EDITOR) {
+ if (_settings.economy.town_layout == TL_NO_ROADS && _game_mode == GM_EDITOR) {
ShowErrorMessage(INVALID_STRING_ID, STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID, 0, 0);
- _patches.town_layout = TL_ORIGINAL;
+ _settings.economy.town_layout = TL_ORIGINAL;
}
return 0;
}
@@ -1279,9 +1313,9 @@ static int32 ConvertLandscape(const char *value)
* So basically, 200, 400, 800 are the lowest allowed values */
static int32 CheckNoiseToleranceLevel(const char *value)
{
- Patches *patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
- for (uint16 i = 0; i < lengthof(patches_ptr->town_noise_population); i++) {
- patches_ptr->town_noise_population[i] = max(uint16(200 * (i + 1)), patches_ptr->town_noise_population[i]);
+ Settings *s = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings;
+ for (uint16 i = 0; i < lengthof(s->economy.town_noise_population); i++) {
+ s->economy.town_noise_population[i] = max(uint16(200 * (i + 1)), s->economy.town_noise_population[i]);
}
return 0;
}
@@ -1421,246 +1455,188 @@ static const SettingDesc _gameopt_settings[] = {
* service depot, causing desyncs on a massive scale. */
const SettingDesc _patch_settings[] = {
/***************************************************************************/
- /* User-interface section of the GUI-configure patches window */
- SDT_BOOL(Patches, vehicle_speed, S, 0, true, STR_CONFIG_PATCHES_VEHICLESPEED, NULL),
- SDT_BOOL(Patches, status_long_date, S, 0, true, STR_CONFIG_PATCHES_LONGDATE, NULL),
- SDT_BOOL(Patches, show_finances, S, 0, true, STR_CONFIG_PATCHES_SHOWFINANCES, NULL),
- SDT_BOOL(Patches, autoscroll, S, 0, false, STR_CONFIG_PATCHES_AUTOSCROLL, NULL),
- SDT_BOOL(Patches, reverse_scroll, S, 0, false, STR_CONFIG_PATCHES_REVERSE_SCROLLING, NULL),
- SDT_BOOL(Patches, smooth_scroll, S, 0, false, STR_CONFIG_PATCHES_SMOOTH_SCROLLING, NULL),
- SDT_BOOL(Patches, measure_tooltip, S, 0, false, STR_CONFIG_PATCHES_MEASURE_TOOLTIP, NULL),
- SDT_VAR(Patches, errmsg_duration, SLE_UINT8, S, 0, 5, 0, 20, 0, STR_CONFIG_PATCHES_ERRMSG_DURATION, NULL),
- SDT_VAR(Patches, toolbar_pos, SLE_UINT8, S,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_TOOLBAR_POS, v_PositionMainToolbar),
- SDT_VAR(Patches, window_snap_radius, SLE_UINT8, S,D0, 10, 1, 32, 0, STR_CONFIG_PATCHES_SNAP_RADIUS, NULL),
- SDT_BOOL(Patches, population_in_label, S, 0, true, STR_CONFIG_PATCHES_POPULATION_IN_LABEL, PopulationInLabelActive),
- SDT_VAR(Patches, map_x, SLE_UINT8, S, 0, 8, 6, 11, 0, STR_CONFIG_PATCHES_MAP_X, NULL),
- SDT_VAR(Patches, map_y, SLE_UINT8, S, 0, 8, 6, 11, 0, STR_CONFIG_PATCHES_MAP_Y, NULL),
- SDT_BOOL(Patches, link_terraform_toolbar, S, 0, false, STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR,NULL),
- SDT_VAR(Patches, liveries, SLE_UINT8, S,MS, 2, 0, 2, 0, STR_CONFIG_PATCHES_LIVERIES, RedrawScreen),
- SDT_BOOL(Patches, prefer_teamchat, S, 0, false, STR_CONFIG_PATCHES_PREFER_TEAMCHAT, NULL),
- SDT_VAR(Patches, scrollwheel_scrolling,SLE_UINT8,S,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING, NULL),
- SDT_VAR(Patches,scrollwheel_multiplier,SLE_UINT8,S, 0, 5, 1, 15, 1, STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER,NULL),
- SDT_BOOL(Patches, pause_on_newgame, S, 0, false, STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME, NULL),
- SDT_VAR(Patches,advanced_vehicle_list,SLE_UINT8,S,MS, 1, 0, 2, 0, STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS,NULL),
- SDT_BOOL(Patches, timetable_in_ticks, S, 0, false, STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS, NULL),
- SDT_VAR(Patches, loading_indicators, SLE_UINT8, S,MS, 1, 0, 2, 0, STR_CONFIG_PATCHES_LOADING_INDICATORS, RedrawScreen),
- SDT_VAR(Patches, default_rail_type, SLE_UINT8, S,MS, 4, 0, 6, 0, STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE, NULL),
-
- /***************************************************************************/
- /* Construction section of the GUI-configure patches window */
- SDT_BOOL(Patches, build_on_slopes, 0,NN, true, STR_CONFIG_PATCHES_BUILDONSLOPES, NULL),
- SDT_CONDBOOL(Patches, autoslope, 75, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_AUTOSLOPE, NULL),
- SDT_BOOL(Patches, extra_dynamite, 0, 0, false, STR_CONFIG_PATCHES_EXTRADYNAMITE, NULL),
- SDT_BOOL(Patches, longbridges, 0,NN, true, STR_CONFIG_PATCHES_LONGBRIDGES, NULL),
- SDT_BOOL(Patches, signal_side, N,NN, true, STR_CONFIG_PATCHES_SIGNALSIDE, RedrawScreen),
- SDT_BOOL(Patches, always_small_airport, 0,NN, false, STR_CONFIG_PATCHES_SMALL_AIRPORTS, NULL),
- SDT_BOOL(Patches, enable_signal_gui, S, 0, false, STR_CONFIG_PATCHES_ENABLE_SIGNAL_GUI, CloseSignalGUI),
- SDT_VAR(Patches, drag_signals_density,SLE_UINT8,S, 0, 4, 1, 20, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY,DragSignalsDensityChanged),
- SDT_VAR(Patches, semaphore_build_before,SLE_INT32, S, NC, 1975, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE, ResetSignalVariant),
- SDT_CONDVAR(Patches, town_layout, SLE_UINT8, 59, SL_MAX_VERSION, 0, MS, TL_ORIGINAL, TL_NO_ROADS, NUM_TLS - 1, 1, STR_CONFIG_PATCHES_TOWN_LAYOUT, CheckTownLayout),
-
- /***************************************************************************/
- /* Vehicle section of the GUI-configure patches window */
- SDT_BOOL(Patches, realistic_acceleration, 0, 0, false, STR_CONFIG_PATCHES_REALISTICACCEL, RealisticAccelerationChanged),
- SDT_BOOL(Patches, forbid_90_deg, 0, 0, false, STR_CONFIG_PATCHES_FORBID_90_DEG, NULL),
- SDT_BOOL(Patches, mammoth_trains, 0,NN, true, STR_CONFIG_PATCHES_MAMMOTHTRAINS, NULL),
- SDT_BOOL(Patches, gotodepot, 0, 0, true, STR_CONFIG_PATCHES_GOTODEPOT, NULL),
- SDT_BOOL(Patches, roadveh_queue, 0, 0, true, STR_CONFIG_PATCHES_ROADVEH_QUEUE, NULL),
-
- SDT_CONDBOOL(Patches, new_pathfinding_all, 0,86, 0, 0, false, STR_NULL, NULL),
- SDT_CONDBOOL(Patches, yapf.ship_use_yapf, 28,86, 0, 0, false, STR_NULL, NULL),
- SDT_CONDBOOL(Patches, yapf.road_use_yapf, 28,86, 0, 0, true, STR_NULL, NULL),
- SDT_CONDBOOL(Patches, yapf.rail_use_yapf, 28,86, 0, 0, true, STR_NULL, NULL),
-
- SDT_CONDVAR(Patches, pathfinder_for_trains, SLE_UINT8, 87, SL_MAX_VERSION, 0, MS, 2, 0, 2, 1, STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS, NULL),
- SDT_CONDVAR(Patches, pathfinder_for_roadvehs, SLE_UINT8, 87, SL_MAX_VERSION, 0, MS, 2, 0, 2, 1, STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH, NULL),
- SDT_CONDVAR(Patches, pathfinder_for_ships, SLE_UINT8, 87, SL_MAX_VERSION, 0, MS, 0, 0, 2, 1, STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS, NULL),
-
- SDT_BOOL(Patches, train_income_warn, S, 0, true, STR_CONFIG_PATCHES_WARN_INCOME_LESS, NULL),
- SDT_VAR(Patches, order_review_system,SLE_UINT8, S,MS, 2, 0, 2, 0, STR_CONFIG_PATCHES_ORDER_REVIEW, NULL),
- SDT_BOOL(Patches, never_expire_vehicles, 0,NN, false, STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES,NULL),
- SDT_BOOL(Patches, lost_train_warn, S, 0, true, STR_CONFIG_PATCHES_WARN_LOST_TRAIN, NULL),
- SDT_BOOL(Patches, autorenew, S, 0, false, STR_CONFIG_PATCHES_AUTORENEW_VEHICLE, EngineRenewUpdate),
- SDT_VAR(Patches, autorenew_months, SLE_INT16, S, 0, 6, -12, 12, 0, STR_CONFIG_PATCHES_AUTORENEW_MONTHS, EngineRenewMonthsUpdate),
- SDT_VAR(Patches, autorenew_money, SLE_UINT, S,CR,100000, 0, 2000000, 0, STR_CONFIG_PATCHES_AUTORENEW_MONEY, EngineRenewMoneyUpdate),
- SDT_BOOL(Patches, always_build_infrastructure, S, 0, false, STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE, RedrawScreen),
- SDT_VAR(Patches, max_trains, SLE_UINT16, 0, 0, 500, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_TRAINS, RedrawScreen),
- SDT_VAR(Patches, max_roadveh, SLE_UINT16, 0, 0, 500, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_ROADVEH, RedrawScreen),
- SDT_VAR(Patches, max_aircraft, SLE_UINT16, 0, 0, 200, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_AIRCRAFT, RedrawScreen),
- SDT_VAR(Patches, max_ships, SLE_UINT16, 0, 0, 300, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_SHIPS, RedrawScreen),
- SDT_BOOL(Patches, servint_ispercent, 0, 0, false, STR_CONFIG_PATCHES_SERVINT_ISPERCENT, CheckInterval),
- SDT_VAR(Patches, servint_trains, SLE_UINT16, 0,D0, 150, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_TRAINS, InValidateDetailsWindow),
- SDT_VAR(Patches, servint_roadveh, SLE_UINT16, 0,D0, 150, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_ROADVEH, InValidateDetailsWindow),
- SDT_VAR(Patches, servint_ships, SLE_UINT16, 0,D0, 360, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_SHIPS, InValidateDetailsWindow),
- SDT_VAR(Patches, servint_aircraft, SLE_UINT16, 0,D0, 100, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT, InValidateDetailsWindow),
- SDT_BOOL(Patches, no_servicing_if_no_breakdowns, 0, 0, false, STR_CONFIG_PATCHES_NOSERVICE, NULL),
- SDT_BOOL(Patches, wagon_speed_limits, 0,NN, true, STR_CONFIG_PATCHES_WAGONSPEEDLIMITS, UpdateConsists),
- SDT_CONDBOOL(Patches, disable_elrails, 38, SL_MAX_VERSION, 0, NN, false, STR_CONFIG_PATCHES_DISABLE_ELRAILS, SettingsDisableElrail),
- SDT_CONDVAR(Patches, freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0,NN, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL),
- SDT_CONDBOOL(Patches, timetabling, 67, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_TIMETABLE_ALLOW, NULL),
- SDT_CONDVAR(Patches, plane_speed, SLE_UINT8, 90, SL_MAX_VERSION, 0, 0, 4, 1, 4, 0, STR_CONFIG_PATCHES_PLANE_SPEED, NULL),
- SDT_CONDBOOL(Patches, dynamic_engines, 95, SL_MAX_VERSION, 0,NN, false, STR_CONFIG_PATCHES_DYNAMIC_ENGINES, NULL),
-
- /***************************************************************************/
- /* Station section of the GUI-configure patches window */
- SDT_BOOL(Patches, join_stations, 0, 0, true, STR_CONFIG_PATCHES_JOINSTATIONS, NULL),
- SDT_CONDBOOL(Patches, sg_full_load_any, 0, 92, 0, 0, true, STR_NULL, NULL),
- SDT_BOOL(Patches, improved_load, 0,NN, false, STR_CONFIG_PATCHES_IMPROVEDLOAD, NULL),
- SDT_BOOL(Patches, selectgoods, 0, 0, true, STR_CONFIG_PATCHES_SELECTGOODS, NULL),
- SDT_BOOL(Patches, new_nonstop, S, 0, false, STR_CONFIG_PATCHES_NEW_NONSTOP, NULL),
- SDT_CONDBOOL(Patches, sg_new_nonstop, 0, 92, 0, 0, false, STR_NULL, NULL),
- SDT_BOOL(Patches, nonuniform_stations, 0,NN, true, STR_CONFIG_PATCHES_NONUNIFORM_STATIONS,NULL),
- SDT_VAR(Patches, station_spread,SLE_UINT8,0, 0, 12, 4, 64, 0, STR_CONFIG_PATCHES_STATION_SPREAD, InvalidateStationBuildWindow),
- SDT_BOOL(Patches, serviceathelipad, 0, 0, true, STR_CONFIG_PATCHES_SERVICEATHELIPAD, NULL),
- SDT_BOOL(Patches, modified_catchment, 0, 0, true, STR_CONFIG_PATCHES_CATCHMENT, NULL),
- SDT_CONDBOOL(Patches, gradual_loading, 40, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_GRADUAL_LOADING, NULL),
- SDT_CONDBOOL(Patches, road_stop_on_town_road, 47, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD, NULL),
- SDT_CONDBOOL(Patches, adjacent_stations, 62, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_ADJACENT_STATIONS, NULL),
- SDT_CONDBOOL(Patches, station_noise_level, 96, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_NOISE_LEVEL, InvalidateTownViewWindow),
-
- /***************************************************************************/
- /* Economy section of the GUI-configure patches window */
- SDT_BOOL(Patches, inflation, 0, 0, true, STR_CONFIG_PATCHES_INFLATION, NULL),
- SDT_VAR(Patches, raw_industry_construction,SLE_UINT8,0,MS,0,0, 2, 0, STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD, InvalidateBuildIndustryWindow),
- SDT_BOOL(Patches, multiple_industry_per_town, 0, 0, false, STR_CONFIG_PATCHES_MULTIPINDTOWN, NULL),
- SDT_BOOL(Patches, same_industry_close, 0, 0, false, STR_CONFIG_PATCHES_SAMEINDCLOSE, NULL),
- SDT_BOOL(Patches, bribe, 0, 0, true, STR_CONFIG_PATCHES_BRIBE, NULL),
- SDT_CONDBOOL(Patches, exclusive_rights, 79, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE, NULL),
- SDT_CONDBOOL(Patches, give_money, 79, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY, NULL),
- SDT_VAR(Patches, snow_line_height,SLE_UINT8, 0, 0, 7, 2, 13, 0, STR_CONFIG_PATCHES_SNOWLINE_HEIGHT, NULL),
- SDT_VAR(Patches, colored_news_year,SLE_INT32, 0,NC, 2000, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_COLORED_NEWS_YEAR,NULL),
- SDT_VAR(Patches, starting_year, SLE_INT32, 0,NC, 1950, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_STARTING_YEAR,NULL),
- SDT_VAR(Patches, ending_year, SLE_INT32,0,NC|NO,2051, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_ENDING_YEAR, NULL),
- SDT_BOOL(Patches, smooth_economy, 0, 0, true, STR_CONFIG_PATCHES_SMOOTH_ECONOMY, NULL),
- SDT_BOOL(Patches, allow_shares, 0, 0, false, STR_CONFIG_PATCHES_ALLOW_SHARES, NULL),
- SDT_CONDVAR(Patches, town_growth_rate, SLE_UINT8, 54, SL_MAX_VERSION, 0, MS, 2, 0, 4, 0, STR_CONFIG_PATCHES_TOWN_GROWTH, NULL),
- SDT_CONDVAR(Patches, larger_towns, SLE_UINT8, 54, SL_MAX_VERSION, 0, D0, 4, 0, 255, 1, STR_CONFIG_PATCHES_LARGER_TOWNS, NULL),
- SDT_CONDVAR(Patches, initial_city_size, SLE_UINT8, 56, SL_MAX_VERSION, 0, 0, 2, 1, 10, 1, STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER, NULL),
- SDT_CONDBOOL(Patches, mod_road_rebuild, 77, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_MODIFIED_ROAD_REBUILD, NULL),
+ /* Saved patch variables. */
+
+ SDT_BOOL(Settings, construction.build_on_slopes, 0,NN, true, STR_CONFIG_PATCHES_BUILDONSLOPES, NULL),
+ SDT_CONDBOOL(Settings, construction.autoslope, 75, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_AUTOSLOPE, NULL),
+ SDT_BOOL(Settings, construction.extra_dynamite, 0, 0, false, STR_CONFIG_PATCHES_EXTRADYNAMITE, NULL),
+ SDT_BOOL(Settings, construction.longbridges, 0,NN, true, STR_CONFIG_PATCHES_LONGBRIDGES, NULL),
+ SDT_BOOL(Settings, construction.signal_side, N,NN, true, STR_CONFIG_PATCHES_SIGNALSIDE, RedrawScreen),
+ SDT_BOOL(Settings, station.always_small_airport, 0,NN, false, STR_CONFIG_PATCHES_SMALL_AIRPORTS, NULL),
+ SDT_CONDVAR(Settings, economy.town_layout, SLE_UINT8, 59, SL_MAX_VERSION, 0,MS,TL_ORIGINAL,TL_NO_ROADS,NUM_TLS-1,1, STR_CONFIG_PATCHES_TOWN_LAYOUT, CheckTownLayout),
+
+ SDT_BOOL(Settings, vehicle.realistic_acceleration, 0, 0, false, STR_CONFIG_PATCHES_REALISTICACCEL, RealisticAccelerationChanged),
+ SDT_BOOL(Settings, pf.forbid_90_deg, 0, 0, false, STR_CONFIG_PATCHES_FORBID_90_DEG, NULL),
+ SDT_BOOL(Settings, vehicle.mammoth_trains, 0,NN, true, STR_CONFIG_PATCHES_MAMMOTHTRAINS, NULL),
+ SDT_BOOL(Settings, order.gotodepot, 0, 0, true, STR_CONFIG_PATCHES_GOTODEPOT, NULL),
+ SDT_BOOL(Settings, pf.roadveh_queue, 0, 0, true, STR_CONFIG_PATCHES_ROADVEH_QUEUE, NULL),
+
+ SDT_CONDBOOL(Settings, pf.new_pathfinding_all, 0, 86, 0, 0, false, STR_NULL, NULL),
+ SDT_CONDBOOL(Settings, pf.yapf.ship_use_yapf, 28, 86, 0, 0, false, STR_NULL, NULL),
+ SDT_CONDBOOL(Settings, pf.yapf.road_use_yapf, 28, 86, 0, 0, true, STR_NULL, NULL),
+ SDT_CONDBOOL(Settings, pf.yapf.rail_use_yapf, 28, 86, 0, 0, true, STR_NULL, NULL),
+
+ SDT_CONDVAR(Settings, pf.pathfinder_for_trains, SLE_UINT8, 87, SL_MAX_VERSION, 0, MS, 2, 0, 2, 1, STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS, NULL),
+ SDT_CONDVAR(Settings, pf.pathfinder_for_roadvehs, SLE_UINT8, 87, SL_MAX_VERSION, 0, MS, 2, 0, 2, 1, STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH, NULL),
+ SDT_CONDVAR(Settings, pf.pathfinder_for_ships, SLE_UINT8, 87, SL_MAX_VERSION, 0, MS, 0, 0, 2, 1, STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS, NULL),
+
+ SDT_BOOL(Settings, vehicle.never_expire_vehicles, 0,NN, false, STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES, NULL),
+ SDT_VAR(Settings, vehicle.max_trains, SLE_UINT16, 0, 0, 500, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_TRAINS, RedrawScreen),
+ SDT_VAR(Settings, vehicle.max_roadveh, SLE_UINT16, 0, 0, 500, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_ROADVEH, RedrawScreen),
+ SDT_VAR(Settings, vehicle.max_aircraft, SLE_UINT16, 0, 0, 200, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_AIRCRAFT, RedrawScreen),
+ SDT_VAR(Settings, vehicle.max_ships, SLE_UINT16, 0, 0, 300, 0, 5000, 0, STR_CONFIG_PATCHES_MAX_SHIPS, RedrawScreen),
+ SDT_BOOL(Settings, vehicle.servint_ispercent, 0, 0, false, STR_CONFIG_PATCHES_SERVINT_ISPERCENT, CheckInterval),
+ SDT_VAR(Settings, vehicle.servint_trains, SLE_UINT16, 0,D0, 150, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_TRAINS, InValidateDetailsWindow),
+ SDT_VAR(Settings, vehicle.servint_roadveh, SLE_UINT16, 0,D0, 150, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_ROADVEH, InValidateDetailsWindow),
+ SDT_VAR(Settings, vehicle.servint_ships, SLE_UINT16, 0,D0, 360, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_SHIPS, InValidateDetailsWindow),
+ SDT_VAR(Settings, vehicle.servint_aircraft, SLE_UINT16, 0,D0, 100, 5, 800, 0, STR_CONFIG_PATCHES_SERVINT_AIRCRAFT, InValidateDetailsWindow),
+ SDT_BOOL(Settings, order.no_servicing_if_no_breakdowns, 0, 0, false, STR_CONFIG_PATCHES_NOSERVICE, NULL),
+ SDT_BOOL(Settings, vehicle.wagon_speed_limits, 0,NN, true, STR_CONFIG_PATCHES_WAGONSPEEDLIMITS, UpdateConsists),
+ SDT_CONDBOOL(Settings, vehicle.disable_elrails, 38, SL_MAX_VERSION, 0,NN, false, STR_CONFIG_PATCHES_DISABLE_ELRAILS, SettingsDisableElrail),
+ SDT_CONDVAR(Settings, vehicle.freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0,NN, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL),
+ SDT_CONDBOOL(Settings, order.timetabling, 67, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_TIMETABLE_ALLOW, NULL),
+ SDT_CONDVAR(Settings, vehicle.plane_speed, SLE_UINT8, 90, SL_MAX_VERSION, 0, 0, 4, 1, 4, 0, STR_CONFIG_PATCHES_PLANE_SPEED, NULL),
+ SDT_CONDBOOL(Settings, vehicle.dynamic_engines, 95, SL_MAX_VERSION, 0,NN, false, STR_CONFIG_PATCHES_DYNAMIC_ENGINES, NULL),
+
+ SDT_BOOL(Settings, station.join_stations, 0, 0, true, STR_CONFIG_PATCHES_JOINSTATIONS, NULL),
+ SDT_CONDBOOL(Settings, gui.sg_full_load_any, 0, 92, 0, 0 , true, STR_NULL, NULL),
+ SDT_BOOL(Settings, order.improved_load, 0,NN, true, STR_CONFIG_PATCHES_IMPROVEDLOAD, NULL),
+ SDT_BOOL(Settings, order.selectgoods, 0, 0, true, STR_CONFIG_PATCHES_SELECTGOODS, NULL),
+ SDT_CONDBOOL(Settings, gui.sg_new_nonstop, 0, 92, 0, 0, false, STR_NULL, NULL),
+ SDT_BOOL(Settings, station.nonuniform_stations, 0,NN, true, STR_CONFIG_PATCHES_NONUNIFORM_STATIONS, NULL),
+ SDT_VAR(Settings, station.station_spread, SLE_UINT8, 0, 0, 12, 4, 64, 0, STR_CONFIG_PATCHES_STATION_SPREAD, InvalidateStationBuildWindow),
+ SDT_BOOL(Settings, order.serviceathelipad, 0, 0, true, STR_CONFIG_PATCHES_SERVICEATHELIPAD, NULL),
+ SDT_BOOL(Settings, station.modified_catchment, 0, 0, true, STR_CONFIG_PATCHES_CATCHMENT, NULL),
+ SDT_CONDBOOL(Settings, order.gradual_loading, 40, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_GRADUAL_LOADING, NULL),
+ SDT_CONDBOOL(Settings, construction.road_stop_on_town_road, 47, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD, NULL),
+ SDT_CONDBOOL(Settings, station.adjacent_stations, 62, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_ADJACENT_STATIONS, NULL),
+ SDT_CONDBOOL(Settings, economy.station_noise_level, 96, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_NOISE_LEVEL, InvalidateTownViewWindow),
+
+ SDT_BOOL(Settings, economy.inflation, 0, 0, true, STR_CONFIG_PATCHES_INFLATION, NULL),
+ SDT_VAR(Settings, construction.raw_industry_construction, SLE_UINT8, 0,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD, InvalidateBuildIndustryWindow),
+ SDT_BOOL(Settings, economy.multiple_industry_per_town, 0, 0, false, STR_CONFIG_PATCHES_MULTIPINDTOWN, NULL),
+ SDT_BOOL(Settings, economy.same_industry_close, 0, 0, false, STR_CONFIG_PATCHES_SAMEINDCLOSE, NULL),
+ SDT_BOOL(Settings, economy.bribe, 0, 0, true, STR_CONFIG_PATCHES_BRIBE, NULL),
+ SDT_CONDBOOL(Settings, economy.exclusive_rights, 79, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_ALLOW_EXCLUSIVE, NULL),
+ SDT_CONDBOOL(Settings, economy.give_money, 79, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_ALLOW_GIVE_MONEY, NULL),
+ SDT_VAR(Settings, game_creation.snow_line_height, SLE_UINT8, 0, 0, 7, 2, 13, 0, STR_CONFIG_PATCHES_SNOWLINE_HEIGHT, NULL),
+ SDT_VAR(Settings, gui.colored_news_year, SLE_INT32, 0,NC, 2000,MIN_YEAR,MAX_YEAR,1,STR_CONFIG_PATCHES_COLORED_NEWS_YEAR, NULL),
+ SDT_VAR(Settings, game_creation.starting_year, SLE_INT32, 0,NC, 1950,MIN_YEAR,MAX_YEAR,1,STR_CONFIG_PATCHES_STARTING_YEAR, NULL),
+ SDT_VAR(Settings, gui.ending_year, SLE_INT32, 0,NC|NO,2051,MIN_YEAR,MAX_YEAR,1,STR_CONFIG_PATCHES_ENDING_YEAR, NULL),
+ SDT_BOOL(Settings, economy.smooth_economy, 0, 0, true, STR_CONFIG_PATCHES_SMOOTH_ECONOMY, NULL),
+ SDT_BOOL(Settings, economy.allow_shares, 0, 0, false, STR_CONFIG_PATCHES_ALLOW_SHARES, NULL),
+ SDT_CONDVAR(Settings, economy.town_growth_rate, SLE_UINT8, 54, SL_MAX_VERSION, 0, MS, 2, 0, 4, 0, STR_CONFIG_PATCHES_TOWN_GROWTH, NULL),
+ SDT_CONDVAR(Settings, economy.larger_towns, SLE_UINT8, 54, SL_MAX_VERSION, 0, D0, 4, 0, 255, 1, STR_CONFIG_PATCHES_LARGER_TOWNS, NULL),
+ SDT_CONDVAR(Settings, economy.initial_city_size, SLE_UINT8, 56, SL_MAX_VERSION, 0, 0, 2, 1, 10, 1, STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER, NULL),
+ SDT_CONDBOOL(Settings, economy.mod_road_rebuild, 77, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_MODIFIED_ROAD_REBUILD, NULL),
+
+ SDT_BOOL(Settings, ai.ainew_active, 0, 0, false, STR_CONFIG_PATCHES_AINEW_ACTIVE, AiNew_PatchActive_Warning),
+ SDT_BOOL(Settings, ai.ai_in_multiplayer, 0, 0, false, STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER, Ai_In_Multiplayer_Warning),
+ SDT_BOOL(Settings, ai.ai_disable_veh_train, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_TRAINS, NULL),
+ SDT_BOOL(Settings, ai.ai_disable_veh_roadveh, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH, NULL),
+ SDT_BOOL(Settings, ai.ai_disable_veh_aircraft, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT, NULL),
+ SDT_BOOL(Settings, ai.ai_disable_veh_ship, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_SHIPS, NULL),
+
+ SDT_VAR(Settings, vehicle.extend_vehicle_life, SLE_UINT8, 0, 0, 0, 0, 100, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, economy.dist_local_authority, SLE_UINT8, 0, 0, 20, 5, 60, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.wait_oneway_signal, SLE_UINT8, 0, 0, 15, 2, 100, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.wait_twoway_signal, SLE_UINT8, 0, 0, 41, 2, 100, 0, STR_NULL, NULL),
+ SDT_CONDLISTO(Settings, economy.town_noise_population, 3, SLE_UINT16, 96, SL_MAX_VERSION, 0,D0, "800,2000,4000", STR_NULL, NULL, CheckNoiseToleranceLevel),
+
+ SDT_VAR(Settings, pf.opf.pf_maxlength, SLE_UINT16, 0, 0, 4096, 64, 65535, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.opf.pf_maxdepth, SLE_UINT8, 0, 0, 48, 4, 255, 0, STR_NULL, NULL),
+
+ SDT_VAR(Settings, pf.npf.npf_max_search_nodes, SLE_UINT, 0, 0, 10000, 500, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_firstred_penalty, SLE_UINT, 0, 0, ( 10 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_firstred_exit_penalty, SLE_UINT, 0, 0, (100 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_lastred_penalty, SLE_UINT, 0, 0, ( 10 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_station_penalty, SLE_UINT, 0, 0, ( 1 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_slope_penalty, SLE_UINT, 0, 0, ( 1 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_curve_penalty, SLE_UINT, 0, 0, 1, 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_rail_depot_reverse_penalty, SLE_UINT, 0, 0, ( 50 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_buoy_penalty, SLE_UINT, 0, 0, ( 2 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_water_curve_penalty, SLE_UINT, 0, 0, (NPF_TILE_LENGTH / 4), 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_road_curve_penalty, SLE_UINT, 0, 0, 1, 0, 100000, 0, STR_NULL, NULL),
+ SDT_VAR(Settings, pf.npf.npf_crossing_penalty, SLE_UINT, 0, 0, ( 3 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.npf.npf_road_drive_through_penalty, SLE_UINT, 47, SL_MAX_VERSION, 0, 0, ( 8 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
+
+
+ SDT_CONDBOOL(Settings, pf.yapf.disable_node_optimization, 28, SL_MAX_VERSION, 0, 0, false, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.max_search_nodes, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10000, 500, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDBOOL(Settings, pf.yapf.rail_firstred_twoway_eol, 28, SL_MAX_VERSION, 0, 0, true, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_firstred_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_firstred_exit_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 100 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_lastred_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_lastred_exit_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 100 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_station_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 30 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_slope_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_curve45_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_curve90_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 6 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_depot_reverse_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 50 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_crossing_penalty, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_look_ahead_max_signals, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10, 1, 100, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_look_ahead_signal_p0, SLE_INT, 28, SL_MAX_VERSION, 0, 0, 500, -1000000, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_look_ahead_signal_p1, SLE_INT, 28, SL_MAX_VERSION, 0, 0, -100, -1000000, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_look_ahead_signal_p2, SLE_INT, 28, SL_MAX_VERSION, 0, 0, 5, -1000000, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_longer_platform_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 8 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_longer_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 0 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_shorter_platform_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 40 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.rail_shorter_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 0 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.road_slope_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.road_curve_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.road_crossing_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, pf.yapf.road_stop_penalty, SLE_UINT, 47, SL_MAX_VERSION, 0, 0, 8 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
+
+ SDT_CONDVAR(Settings, game_creation.land_generator, SLE_UINT8, 30, SL_MAX_VERSION, 0,MS, 1, 0, 1, 0, STR_CONFIG_PATCHES_LAND_GENERATOR, NULL),
+ SDT_CONDVAR(Settings, game_creation.oil_refinery_limit, SLE_UINT8, 30, SL_MAX_VERSION, 0, 0, 32, 12, 48, 0, STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE, NULL),
+ SDT_CONDVAR(Settings, game_creation.tgen_smoothness, SLE_UINT8, 30, SL_MAX_VERSION, 0,MS, 1, 0, 3, 0, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN, NULL),
+ SDT_CONDVAR(Settings, game_creation.generation_seed, SLE_UINT32, 30, SL_MAX_VERSION, 0, 0, GENERATE_NEW_SEED, 0, UINT32_MAX, 0, STR_NULL, NULL),
+ SDT_CONDVAR(Settings, game_creation.tree_placer, SLE_UINT8, 30, SL_MAX_VERSION, 0,MS, 2, 0, 2, 0, STR_CONFIG_PATCHES_TREE_PLACER, NULL),
+ SDT_VAR(Settings, game_creation.heightmap_rotation, SLE_UINT8, S,MS, 0, 0, 1, 0, STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION, NULL),
+ SDT_VAR(Settings, game_creation.se_flat_world_height, SLE_UINT8, S, 0, 0, 0, 15, 0, STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT, NULL),
/***************************************************************************/
- /* AI section of the GUI-configure patches window */
- SDT_BOOL(Patches, ainew_active, 0, 0, false, STR_CONFIG_PATCHES_AINEW_ACTIVE, AiNew_PatchActive_Warning),
- SDT_BOOL(Patches, ai_in_multiplayer, 0, 0, false, STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER, Ai_In_Multiplayer_Warning),
- SDT_BOOL(Patches, ai_disable_veh_train, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_TRAINS, NULL),
- SDT_BOOL(Patches, ai_disable_veh_roadveh, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH, NULL),
- SDT_BOOL(Patches, ai_disable_veh_aircraft,0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT,NULL),
- SDT_BOOL(Patches, ai_disable_veh_ship, 0, 0, false, STR_CONFIG_PATCHES_AI_BUILDS_SHIPS, NULL),
-
- /***************************************************************************/
- /* Patches without any GUI representation */
- SDT_BOOL(Patches, keep_all_autosave, S, 0, false, STR_NULL, NULL),
- SDT_BOOL(Patches, autosave_on_exit, S, 0, false, STR_NULL, NULL),
- SDT_VAR(Patches, max_num_autosaves, SLE_UINT8, S, 0, 16, 0, 255, 0, STR_NULL, NULL),
- SDT_BOOL(Patches, bridge_pillars, S, 0, true, STR_NULL, NULL),
- SDT_VAR(Patches, extend_vehicle_life, SLE_UINT8, 0, 0, 0, 0, 100, 0, STR_NULL, NULL),
- SDT_BOOL(Patches, auto_euro, S, 0, true, STR_NULL, NULL),
- SDT_VAR(Patches, dist_local_authority,SLE_UINT8, 0, 0, 20, 5, 60, 0, STR_NULL, NULL),
- SDT_VAR(Patches, wait_oneway_signal, SLE_UINT8, 0, 0, 15, 2, 100, 0, STR_NULL, NULL),
- SDT_VAR(Patches, wait_twoway_signal, SLE_UINT8, 0, 0, 41, 2, 100, 0, STR_NULL, NULL),
- SDT_CONDLISTO(Patches, town_noise_population, 3, SLE_UINT16, 96, SL_MAX_VERSION, 0, D0, "800,2000,4000", STR_NULL, NULL, CheckNoiseToleranceLevel),
-
- /***************************************************************************/
- /* New Pathfinding patch settings */
- SDT_VAR(Patches, pf_maxlength, SLE_UINT16, 0, 0, 4096, 64, 65535, 0, STR_NULL, NULL),
- SDT_VAR(Patches, pf_maxdepth, SLE_UINT8, 0, 0, 48, 4, 255, 0, STR_NULL, NULL),
- /* The maximum number of nodes to search */
- SDT_VAR(Patches, npf_max_search_nodes,SLE_UINT, 0, 0, 10000, 500, 100000, 0, STR_NULL, NULL),
-
- /* When a red signal is encountered, a small detour can be made around
- * it. This specifically occurs when a track is doubled, in which case
- * the detour is typically 2 tiles. It is also often used at station
- * entrances, when there is a choice of multiple platforms. If we take
- * a typical 4 platform station, the detour is 4 tiles. To properly
- * support larger stations we increase this value.
- * We want to prevent that trains that want to leave at one side of a
- * station, leave through the other side, turn around, enter the
- * station on another platform and exit the station on the right side
- * again, just because the sign at the right side was red. If we take
- * a typical 5 length station, this detour is 10 or 11 tiles (not
- * sure), so we set the default penalty at 10 (the station tile
- * penalty will further prevent this.
- * We give presignal exits (and combo's) a different (larger) penalty, because
- * we really don't want trains waiting in front of a presignal exit. */
- SDT_VAR(Patches, npf_rail_firstred_penalty, SLE_UINT, 0, 0, (10 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
- SDT_VAR(Patches, npf_rail_firstred_exit_penalty,SLE_UINT, 0, 0, (100 * NPF_TILE_LENGTH),0, 100000, 0, STR_NULL, NULL),
- /* This penalty is for when the last signal before the target is red.
- * This is useful for train stations, where there are multiple
- * platforms to choose from, which lie in different signal blocks.
- * Every target in a occupied signal block (ie an occupied platform)
- * will get this penalty. */
- SDT_VAR(Patches, npf_rail_lastred_penalty, SLE_UINT, 0, 0, (10 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
- /* When a train plans a route over a station tile, this penalty is
- * applied. We want that trains plan a route around a typical, 4x5
- * station, which means two tiles to the right, and two tiles back to
- * the left around it, or 5 tiles of station through it. If we assign
- * a penalty of 1 tile for every station tile passed, the route will
- * be around it. */
- SDT_VAR(Patches, npf_rail_station_penalty, SLE_UINT, 0, 0, (1 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
- SDT_VAR(Patches, npf_rail_slope_penalty, SLE_UINT, 0, 0, (1 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
- /* This penalty is applied when a train makes a turn. Its value of 1 makes
- * sure that it has a minimal impact on the pathfinding, only when two
- * paths have equal length it will make a difference */
- SDT_VAR(Patches, npf_rail_curve_penalty, SLE_UINT, 0, 0, 1, 0, 100000, 0, STR_NULL, NULL),
- /* Ths penalty is applied when a vehicle reverses inside a depot (doesn't
- * apply to ships, as they can just come out the other end). XXX: Is this a
- * good value? */
- SDT_VAR(Patches, npf_rail_depot_reverse_penalty,SLE_UINT, 0, 0, (NPF_TILE_LENGTH * 50), 0, 100000, 0, STR_NULL, NULL),
- SDT_VAR(Patches, npf_buoy_penalty, SLE_UINT, 0, 0, (2 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
- /* This penalty is applied when a ship makes a turn. It is bigger than the
- * rail curve penalty, since ships (realisticly) have more trouble with
- * making turns */
- SDT_VAR(Patches, npf_water_curve_penalty, SLE_UINT, 0, 0, (NPF_TILE_LENGTH / 4), 0, 100000, 0, STR_NULL, NULL),
- /* This is the penalty for road, same as for rail. */
- SDT_VAR(Patches, npf_road_curve_penalty, SLE_UINT, 0, 0, 1, 0, 100000, 0, STR_NULL, NULL),
- /* This is the penalty for level crossings, for both road and rail vehicles */
- SDT_VAR(Patches, npf_crossing_penalty, SLE_UINT, 0, 0, (3 * NPF_TILE_LENGTH), 0, 100000, 0, STR_NULL, NULL),
- /* This is the penalty for drive-through road, stops. */
- SDT_CONDVAR (Patches, npf_road_drive_through_penalty, SLE_UINT, 47, SL_MAX_VERSION, 0, 0, 8 * NPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
-
-
- /* The maximum number of nodes to search */
- SDT_CONDBOOL(Patches, yapf.disable_node_optimization , 28, SL_MAX_VERSION, 0, 0, false , STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.max_search_nodes , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10000 , 500, 1000000, 0, STR_NULL, NULL),
- SDT_CONDBOOL(Patches, yapf.rail_firstred_twoway_eol , 28, SL_MAX_VERSION, 0, 0, true , STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_firstred_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_firstred_exit_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 100 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_lastred_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_lastred_exit_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 100 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_station_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 30 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_slope_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_curve45_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_curve90_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 6 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- /* This penalty is applied when a train reverses inside a depot */
- SDT_CONDVAR (Patches, yapf.rail_depot_reverse_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 50 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- /* This is the penalty for level crossings (for trains only) */
- SDT_CONDVAR (Patches, yapf.rail_crossing_penalty , SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- /* look-ahead how many signals are checked */
- SDT_CONDVAR (Patches, yapf.rail_look_ahead_max_signals, SLE_UINT, 28, SL_MAX_VERSION, 0, 0, 10 , 1, 100, 0, STR_NULL, NULL),
- /* look-ahead n-th red signal penalty polynomial: penalty = p2 * n^2 + p1 * n + p0 */
- SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p0 , SLE_INT , 28, SL_MAX_VERSION, 0, 0, 500 , -1000000, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p1 , SLE_INT , 28, SL_MAX_VERSION, 0, 0, -100 , -1000000, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_look_ahead_signal_p2 , SLE_INT , 28, SL_MAX_VERSION, 0, 0, 5 , -1000000, 1000000, 0, STR_NULL, NULL),
- /* penalties for too long or too short station platforms */
- SDT_CONDVAR (Patches, yapf.rail_longer_platform_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 8 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_longer_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 0 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_shorter_platform_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 40 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.rail_shorter_platform_per_tile_penalty, SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 0 * YAPF_TILE_LENGTH, 0, 20000, 0, STR_NULL, NULL),
- /* road vehicles - penalties */
- SDT_CONDVAR (Patches, yapf.road_slope_penalty , SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 2 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.road_curve_penalty , SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 1 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.road_crossing_penalty , SLE_UINT, 33, SL_MAX_VERSION, 0, 0, 3 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
- SDT_CONDVAR (Patches, yapf.road_stop_penalty , SLE_UINT, 47, SL_MAX_VERSION, 0, 0, 8 * YAPF_TILE_LENGTH, 0, 1000000, 0, STR_NULL, NULL),
-
- /***************************************************************************/
- /* Terrain genation related patch options */
- SDT_CONDVAR(Patches, land_generator, SLE_UINT8, 30, SL_MAX_VERSION, 0, MS, 1, 0, 1, 0, STR_CONFIG_PATCHES_LAND_GENERATOR, NULL),
- SDT_CONDVAR(Patches, oil_refinery_limit, SLE_UINT8, 30, SL_MAX_VERSION, 0, 0, 32, 12, 48, 0, STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE, NULL),
- SDT_CONDVAR(Patches, tgen_smoothness, SLE_UINT8, 30, SL_MAX_VERSION, 0, MS, 1, 0, 3, 0, STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN, NULL),
- SDT_CONDVAR(Patches, generation_seed, SLE_UINT32, 30, SL_MAX_VERSION, 0, 0, GENERATE_NEW_SEED, 0, MAX_UVALUE(uint32), 0, STR_NULL, NULL),
- SDT_CONDVAR(Patches, tree_placer, SLE_UINT8, 30, SL_MAX_VERSION, 0, MS, 2, 0, 2, 0, STR_CONFIG_PATCHES_TREE_PLACER, NULL),
- SDT_VAR (Patches, heightmap_rotation, SLE_UINT8, S, MS, 0, 0, 1, 0, STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION, NULL),
- SDT_VAR (Patches, se_flat_world_height, SLE_UINT8, S, 0, 0, 0, 15, 0, STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT, NULL),
+ /* Unsaved patch variables. */
+ SDT_BOOL(Settings, gui.vehicle_speed, S, 0, true, STR_CONFIG_PATCHES_VEHICLESPEED, NULL),
+ SDT_BOOL(Settings, gui.status_long_date, S, 0, true, STR_CONFIG_PATCHES_LONGDATE, NULL),
+ SDT_BOOL(Settings, gui.show_finances, S, 0, true, STR_CONFIG_PATCHES_SHOWFINANCES, NULL),
+ SDT_BOOL(Settings, gui.autoscroll, S, 0, false, STR_CONFIG_PATCHES_AUTOSCROLL, NULL),
+ SDT_BOOL(Settings, gui.reverse_scroll, S, 0, false, STR_CONFIG_PATCHES_REVERSE_SCROLLING, NULL),
+ SDT_BOOL(Settings, gui.smooth_scroll, S, 0, false, STR_CONFIG_PATCHES_SMOOTH_SCROLLING, NULL),
+ SDT_BOOL(Settings, gui.measure_tooltip, S, 0, false, STR_CONFIG_PATCHES_MEASURE_TOOLTIP, NULL),
+ SDT_VAR(Settings, gui.errmsg_duration, SLE_UINT8, S, 0, 5, 0, 20, 0, STR_CONFIG_PATCHES_ERRMSG_DURATION, NULL),
+ SDT_VAR(Settings, gui.toolbar_pos, SLE_UINT8, S,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_TOOLBAR_POS, v_PositionMainToolbar),
+ SDT_VAR(Settings, gui.window_snap_radius, SLE_UINT8, S,D0, 10, 1, 32, 0, STR_CONFIG_PATCHES_SNAP_RADIUS, NULL),
+ SDT_BOOL(Settings, gui.population_in_label, S, 0, true, STR_CONFIG_PATCHES_POPULATION_IN_LABEL, PopulationInLabelActive),
+ SDT_BOOL(Settings, gui.link_terraform_toolbar, S, 0, false, STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR, NULL),
+ SDT_VAR(Settings, gui.liveries, SLE_UINT8, S,MS, 2, 0, 2, 0, STR_CONFIG_PATCHES_LIVERIES, RedrawScreen),
+ SDT_BOOL(Settings, gui.prefer_teamchat, S, 0, false, STR_CONFIG_PATCHES_PREFER_TEAMCHAT, NULL),
+ SDT_VAR(Settings, gui.scrollwheel_scrolling, SLE_UINT8, S,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING, NULL),
+ SDT_VAR(Settings, gui.scrollwheel_multiplier, SLE_UINT8, S, 0, 5, 1, 15, 1, STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER, NULL),
+ SDT_BOOL(Settings, gui.pause_on_newgame, S, 0, false, STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME, NULL),
+ SDT_VAR(Settings, gui.advanced_vehicle_list, SLE_UINT8, S,MS, 1, 0, 2, 0, STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS, NULL),
+ SDT_BOOL(Settings, gui.timetable_in_ticks, S, 0, false, STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS, NULL),
+ SDT_VAR(Settings, gui.loading_indicators, SLE_UINT8, S,MS, 1, 0, 2, 0, STR_CONFIG_PATCHES_LOADING_INDICATORS, RedrawScreen),
+ SDT_VAR(Settings, gui.default_rail_type, SLE_UINT8, S,MS, 4, 0, 6, 0, STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE, NULL),
+ SDT_BOOL(Settings, gui.enable_signal_gui, S, 0, false, STR_CONFIG_PATCHES_ENABLE_SIGNAL_GUI, CloseSignalGUI),
+ SDT_VAR(Settings, gui.drag_signals_density, SLE_UINT8, S, 0, 4, 1, 20, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY, DragSignalsDensityChanged),
+ SDT_VAR(Settings, gui.semaphore_build_before, SLE_INT32, S, NC, 1975, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE, ResetSignalVariant),
+ SDT_BOOL(Settings, gui.train_income_warn, S, 0, true, STR_CONFIG_PATCHES_WARN_INCOME_LESS, NULL),
+ SDT_VAR(Settings, gui.order_review_system, SLE_UINT8, S,MS, 2, 0, 2, 0, STR_CONFIG_PATCHES_ORDER_REVIEW, NULL),
+ SDT_BOOL(Settings, gui.lost_train_warn, S, 0, true, STR_CONFIG_PATCHES_WARN_LOST_TRAIN, NULL),
+ SDT_BOOL(Settings, gui.autorenew, S, 0, false, STR_CONFIG_PATCHES_AUTORENEW_VEHICLE, EngineRenewUpdate),
+ SDT_VAR(Settings, gui.autorenew_months, SLE_INT16, S, 0, 6, -12, 12, 0, STR_CONFIG_PATCHES_AUTORENEW_MONTHS, EngineRenewMonthsUpdate),
+ SDT_VAR(Settings, gui.autorenew_money, SLE_UINT, S,CR,100000, 0, 2000000, 0, STR_CONFIG_PATCHES_AUTORENEW_MONEY, EngineRenewMoneyUpdate),
+ SDT_BOOL(Settings, gui.always_build_infrastructure, S, 0, false, STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE, RedrawScreen),
+ SDT_BOOL(Settings, gui.new_nonstop, S, 0, false, STR_CONFIG_PATCHES_NEW_NONSTOP, NULL),
+ SDT_BOOL(Settings, gui.keep_all_autosave, S, 0, false, STR_NULL, NULL),
+ SDT_BOOL(Settings, gui.autosave_on_exit, S, 0, false, STR_NULL, NULL),
+ SDT_VAR(Settings, gui.max_num_autosaves, SLE_UINT8, S, 0, 16, 0, 255, 0, STR_NULL, NULL),
+ SDT_BOOL(Settings, gui.bridge_pillars, S, 0, true, STR_NULL, NULL),
+ SDT_BOOL(Settings, gui.auto_euro, S, 0, true, STR_NULL, NULL),
+
+ SDT_VAR(Settings, game_creation.map_x, SLE_UINT8, S, 0, 8, 6, 11, 0, STR_CONFIG_PATCHES_MAP_X, NULL),
+ SDT_VAR(Settings, game_creation.map_y, SLE_UINT8, S, 0, 8, 6, 11, 0, STR_CONFIG_PATCHES_MAP_Y, NULL),
/*
* Since the network code (CmdChangePatchSetting and friends) use the index in this array to decide
@@ -1671,7 +1647,7 @@ const SettingDesc _patch_settings[] = {
#ifdef __APPLE__
/* We might need to emulate a right mouse button on mac */
- SDT_VAR(Patches,right_mouse_btn_emulation,SLE_UINT8,S,MS,0, 0, 2, 0, STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU, NULL),
+ SDT_VAR(Settings, gui.right_mouse_btn_emulation, SLE_UINT8, S, MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU, NULL),
#endif
SDT_END()
@@ -1863,7 +1839,7 @@ static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc, SettingDescP
#endif /* WIN32 */
proc(ini, _gameopt_settings, "gameopt", &_opt_newgame);
- proc(ini, _patch_settings, "patches", &_patches_newgame);
+ proc(ini, _patch_settings, "patches", &_settings_newgame);
proc(ini, _currency_settings,"currency", &_custom_currency);
#ifdef ENABLE_NETWORK
@@ -1892,6 +1868,11 @@ void LoadFromConfig()
void SaveToConfig()
{
IniFile *ini = ini_load(_config_file);
+
+ /* Remove some obsolete groups. These have all been loaded into other groups. */
+ ini_removegroup(ini, "patches");
+ ini_removegroup(ini, "yapf");
+
HandleSettingDescs(ini, ini_save_settings, ini_save_setting_list);
GRFSaveConfig(ini, "newgrf", _grfconfig_newgame);
GRFSaveConfig(ini, "newgrf-static", _grfconfig_static);
@@ -1926,8 +1907,8 @@ CommandCost CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint3
if ((sd->desc.flags & SGF_NO_NETWORK) && _networking) return CMD_ERROR;
if (flags & DC_EXEC) {
- Patches *patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
- void *var = GetVariableAddress(patches_ptr, &sd->save);
+ Settings *s = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings;
+ void *var = GetVariableAddress(s, &sd->save);
Write_ValidateSetting(var, sd, (int32)p2);
if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
@@ -1944,7 +1925,7 @@ CommandCost CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint3
* This only affects patch-members that are not needed to be the same on all
* clients in a network game.
* @param value new value of the patch */
-bool SetPatchValue(uint index, const Patches *object, int32 value)
+bool SetPatchValue(uint index, const Settings *object, int32 value)
{
const SettingDesc *sd = &_patch_settings[index];
/* If an item is player-based, we do not send it over the network
@@ -1956,7 +1937,7 @@ bool SetPatchValue(uint index, const Patches *object, int32 value)
Write_ValidateSetting(var, sd, value);
if (_game_mode != GM_MENU) {
- void *var2 = GetVariableAddress(&_patches_newgame, &sd->save);
+ void *var2 = GetVariableAddress(&_settings_newgame, &sd->save);
Write_ValidateSetting(var2, sd, value);
}
if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
@@ -1990,7 +1971,6 @@ bool IConsoleSetPatchSetting(const char *name, int32 value)
bool success;
uint index;
const SettingDesc *sd = GetPatchFromName(name, &index);
- const Patches *patches_ptr;
void *ptr;
if (sd == NULL) {
@@ -1998,10 +1978,10 @@ bool IConsoleSetPatchSetting(const char *name, int32 value)
return true;
}
- patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
- ptr = GetVariableAddress(patches_ptr, &sd->save);
+ Settings *s = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings;
+ ptr = GetVariableAddress(s, &sd->save);
- success = SetPatchValue(index, patches_ptr, value);
+ success = SetPatchValue(index, s, value);
return success;
}
@@ -2017,7 +1997,7 @@ void IConsoleGetPatchSetting(const char *name)
return;
}
- ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_patches_newgame : &_patches, &sd->save);
+ ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_settings_newgame : &_settings, &sd->save);
if (sd->desc.cmd == SDT_BOOLX) {
snprintf(value, sizeof(value), (*(bool*)ptr == 1) ? "on" : "off");
@@ -2035,7 +2015,7 @@ void IConsoleListPatches()
for (const SettingDesc *sd = _patch_settings; sd->save.cmd != SL_END; sd++) {
char value[80];
- const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_patches_newgame : &_patches, &sd->save);
+ const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_settings_newgame : &_settings, &sd->save);
if (sd->desc.cmd == SDT_BOOLX) {
snprintf(value, lengthof(value), (*(bool*)ptr == 1) ? "on" : "off");
@@ -2120,22 +2100,22 @@ static void Load_PATS()
/* Copy over default setting since some might not get loaded in
* a networking environment. This ensures for example that the local
* signal_side stays when joining a network-server */
- _patches = _patches_newgame;
- LoadSettings(_patch_settings, &_patches);
+ _settings = _settings_newgame;
+ LoadSettings(_patch_settings, &_settings);
}
static void Save_PATS()
{
- SaveSettings(_patch_settings, &_patches);
+ SaveSettings(_patch_settings, &_settings);
}
void CheckConfig()
{
// Increase old default values for pf_maxdepth and pf_maxlength
// to support big networks.
- if (_patches_newgame.pf_maxdepth == 16 && _patches_newgame.pf_maxlength == 512) {
- _patches_newgame.pf_maxdepth = 48;
- _patches_newgame.pf_maxlength = 4096;
+ if (_settings_newgame.pf.opf.pf_maxdepth == 16 && _settings_newgame.pf.opf.pf_maxlength == 512) {
+ _settings_newgame.pf.opf.pf_maxdepth = 48;
+ _settings_newgame.pf.opf.pf_maxlength = 4096;
}
}
@@ -2144,7 +2124,7 @@ void UpdatePatches()
/* Since old(er) savegames don't have any patches saved, we initialise
* them with the default values just as it was in the old days.
* Also new games need this copying-over */
- _patches = _patches_newgame; /* backwards compatibility */
+ _settings = _settings_newgame; /* backwards compatibility */
}
extern const ChunkHandler _setting_chunk_handlers[] = {
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index c0e36321f..63173d811 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -667,125 +667,125 @@ void ShowGameDifficulty()
}
static const char *_patches_ui[] = {
- "vehicle_speed",
- "status_long_date",
- "show_finances",
- "autoscroll",
- "reverse_scroll",
- "smooth_scroll",
- "errmsg_duration",
- "toolbar_pos",
- "measure_tooltip",
- "window_snap_radius",
- "population_in_label",
- "link_terraform_toolbar",
- "liveries",
- "prefer_teamchat",
+ "gui.vehicle_speed",
+ "gui.status_long_date",
+ "gui.show_finances",
+ "gui.autoscroll",
+ "gui.reverse_scroll",
+ "gui.smooth_scroll",
+ "gui.errmsg_duration",
+ "gui.toolbar_pos",
+ "gui.measure_tooltip",
+ "gui.window_snap_radius",
+ "gui.population_in_label",
+ "gui.link_terraform_toolbar",
+ "gui.liveries",
+ "gui.prefer_teamchat",
/* While the horizontal scrollwheel scrolling is written as general code, only
* the cocoa (OSX) driver generates input for it.
* Since it's also able to completely disable the scrollwheel will we display it on all platforms anyway */
- "scrollwheel_scrolling",
- "scrollwheel_multiplier",
+ "gui.scrollwheel_scrolling",
+ "gui.scrollwheel_multiplier",
#ifdef __APPLE__
/* We might need to emulate a right mouse button on mac */
- "right_mouse_btn_emulation",
+ "gui.right_mouse_btn_emulation",
#endif
- "pause_on_newgame",
- "advanced_vehicle_list",
- "loading_indicators",
- "timetable_in_ticks",
- "default_rail_type",
- "always_build_infrastructure",
+ "gui.pause_on_newgame",
+ "gui.advanced_vehicle_list",
+ "gui.loading_indicators",
+ "gui.timetable_in_ticks",
+ "gui.default_rail_type",
+ "gui.always_build_infrastructure",
};
static const char *_patches_construction[] = {
- "build_on_slopes",
- "autoslope",
- "extra_dynamite",
- "longbridges",
- "signal_side",
- "always_small_airport",
- "enable_signal_gui",
- "drag_signals_density",
- "oil_refinery_limit",
- "semaphore_build_before",
+ "construction.build_on_slopes",
+ "construction.autoslope",
+ "construction.extra_dynamite",
+ "construction.longbridges",
+ "construction.signal_side",
+ "station.always_small_airport",
+ "gui.enable_signal_gui",
+ "gui.drag_signals_density",
+ "game_creation.oil_refinery_limit",
+ "gui.semaphore_build_before",
};
static const char *_patches_stations[] = {
- "join_stations",
- "improved_load",
- "selectgoods",
- "new_nonstop",
- "nonuniform_stations",
- "station_spread",
- "serviceathelipad",
- "modified_catchment",
- "gradual_loading",
- "road_stop_on_town_road",
- "adjacent_stations",
- "station_noise_level",
+ "station.join_stations",
+ "order.improved_load",
+ "order.selectgoods",
+ "gui.new_nonstop",
+ "station.nonuniform_stations",
+ "station.station_spread",
+ "order.serviceathelipad",
+ "station.modified_catchment",
+ "order.gradual_loading",
+ "construction.road_stop_on_town_road",
+ "station.adjacent_stations",
+ "economy.station_noise_level",
};
static const char *_patches_economy[] = {
- "inflation",
- "raw_industry_construction",
- "multiple_industry_per_town",
- "same_industry_close",
- "bribe",
- "exclusive_rights",
- "give_money",
- "colored_news_year",
- "ending_year",
- "smooth_economy",
- "allow_shares",
- "town_layout",
- "mod_road_rebuild",
- "town_growth_rate",
- "larger_towns",
- "initial_city_size",
+ "economy.inflation",
+ "construction.raw_industry_construction",
+ "economy.multiple_industry_per_town",
+ "economy.same_industry_close",
+ "economy.bribe",
+ "economy.exclusive_rights",
+ "economy.give_money",
+ "gui.colored_news_year",
+ "gui.ending_year",
+ "economy.smooth_economy",
+ "economy.allow_shares",
+ "economy.town_layout",
+ "economy.mod_road_rebuild",
+ "economy.town_growth_rate",
+ "economy.larger_towns",
+ "economy.initial_city_size",
};
static const char *_patches_ai[] = {
- "ainew_active",
- "ai_in_multiplayer",
- "ai_disable_veh_train",
- "ai_disable_veh_roadveh",
- "ai_disable_veh_aircraft",
- "ai_disable_veh_ship",
+ "ai.ainew_active",
+ "ai.ai_in_multiplayer",
+ "ai.ai_disable_veh_train",
+ "ai.ai_disable_veh_roadveh",
+ "ai.ai_disable_veh_aircraft",
+ "ai.ai_disable_veh_ship",
};
static const char *_patches_vehicles[] = {
- "realistic_acceleration",
- "forbid_90_deg",
- "mammoth_trains",
- "gotodepot",
- "roadveh_queue",
- "pathfinder_for_trains",
- "pathfinder_for_roadvehs",
- "pathfinder_for_ships",
- "train_income_warn",
- "order_review_system",
- "never_expire_vehicles",
- "lost_train_warn",
- "autorenew",
- "autorenew_months",
- "autorenew_money",
- "max_trains",
- "max_roadveh",
- "max_aircraft",
- "max_ships",
- "servint_ispercent",
- "servint_trains",
- "servint_roadveh",
- "servint_ships",
- "servint_aircraft",
- "no_servicing_if_no_breakdowns",
- "wagon_speed_limits",
- "disable_elrails",
- "freight_trains",
- "plane_speed",
- "timetabling",
- "dynamic_engines",
+ "vehicle.realistic_acceleration",
+ "pf.forbid_90_deg",
+ "vehicle.mammoth_trains",
+ "order.gotodepot",
+ "pf.roadveh_queue",
+ "pf.pathfinder_for_trains",
+ "pf.pathfinder_for_roadvehs",
+ "pf.pathfinder_for_ships",
+ "gui.train_income_warn",
+ "gui.order_review_system",
+ "vehicle.never_expire_vehicles",
+ "gui.lost_train_warn",
+ "gui.autorenew",
+ "gui.autorenew_months",
+ "gui.autorenew_money",
+ "vehicle.max_trains",
+ "vehicle.max_roadveh",
+ "vehicle.max_aircraft",
+ "vehicle.max_ships",
+ "vehicle.servint_ispercent",
+ "vehicle.servint_trains",
+ "vehicle.servint_roadveh",
+ "vehicle.servint_ships",
+ "vehicle.servint_aircraft",
+ "order.no_servicing_if_no_breakdowns",
+ "vehicle.wagon_speed_limits",
+ "vehicle.disable_elrails",
+ "vehicle.freight_trains",
+ "vehicle.plane_speed",
+ "order.timetabling",
+ "vehicle.dynamic_engines",
};
struct PatchEntry {
@@ -822,7 +822,7 @@ enum PatchesSelectionWidgets {
};
struct PatchesSelectionWindow : Window {
- static Patches *patches_ptr;
+ static Settings *patches_ptr;
static int patches_max;
int page;
@@ -833,7 +833,7 @@ struct PatchesSelectionWindow : Window {
{
static bool first_time = true;
- patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
+ patches_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings;
/* Build up the dynamic settings-array only once per OpenTTD session */
if (first_time) {
@@ -1045,7 +1045,7 @@ struct PatchesSelectionWindow : Window {
}
};
-Patches *PatchesSelectionWindow::patches_ptr = NULL;
+Settings *PatchesSelectionWindow::patches_ptr = NULL;
int PatchesSelectionWindow::patches_max = 0;
static const Widget _patches_selection_widgets[] = {
diff --git a/src/settings_internal.h b/src/settings_internal.h
index 74dab482d..7ac0a4f6a 100644
--- a/src/settings_internal.h
+++ b/src/settings_internal.h
@@ -84,6 +84,6 @@ enum IniGroupType {
};
const SettingDesc *GetPatchFromName(const char *name, uint *i);
-bool SetPatchValue(uint index, const Patches *object, int32 value);
+bool SetPatchValue(uint index, const Settings *object, int32 value);
#endif /* SETTINGS_H */
diff --git a/src/settings_type.h b/src/settings_type.h
index d3f3b611e..a60b2b208 100644
--- a/src/settings_type.h
+++ b/src/settings_type.h
@@ -5,7 +5,6 @@
#ifndef SETTINGS_TYPE_H
#define SETTINGS_TYPE_H
-#include "yapf/yapf_settings.h"
#include "date_type.h"
#include "town_type.h"
#include "transport_type.h"
@@ -19,7 +18,7 @@ enum {
GAME_DIFFICULTY_INITIAL_INTEREST,
GAME_DIFFICULTY_VEHICLE_COST,
GAME_DIFFICULTY_AI_SPEED,
- GAME_DIFFICULTY_AI_INTELLIGENCE, ///< no longer in use
+ GAME_DIFFICULTY_AI_INTELLIGENCE, ///< no longer in use
GAME_DIFFICULTY_VEHICLES_BREAKDOWN,
GAME_DIFFICULTY_SUBSIDY_MULTIPLIER,
GAME_DIFFICULTY_CONSTRUCTION_COST,
@@ -52,7 +51,7 @@ struct GameDifficulty {
GDType economy;
GDType line_reverse_mode;
GDType disasters;
- GDType town_council_tolerance; ///< minimum required town ratings to be allowed to demolish stuff
+ GDType town_council_tolerance; ///< minimum required town ratings to be allowed to demolish stuff
};
struct GameOptions {
@@ -74,191 +73,247 @@ extern GameOptions _opt;
/* These are the default options for a new game */
extern GameOptions _opt_newgame;
-struct Patches {
- bool modified_catchment; ///< different-size catchment areas
- bool vehicle_speed; ///< show vehicle speed
- bool build_on_slopes; ///< allow building on slopes
- bool mammoth_trains; ///< allow very long trains
- bool join_stations; ///< allow joining of train stations
- bool sg_full_load_any; ///< new full load calculation, any cargo must be full read from pre v93 savegames
- bool improved_load; ///< improved loading algorithm
- bool gradual_loading; ///< load vehicles gradually
- byte station_spread; ///< amount a station may spread
- bool inflation; ///< disable inflation
- bool selectgoods; ///< only send the goods to station if a train has been there
- bool longbridges; ///< allow 100 tile long bridges
- bool gotodepot; ///< allow goto depot in orders
- uint8 raw_industry_construction; ///< Type of (raw) industry construction (none, "normal", prospecting)
- bool multiple_industry_per_town; ///< allow many industries of the same type per town
- bool same_industry_close; ///< allow same type industries to be built close to each other
- bool lost_train_warn; ///< if a train can't find its destination, show a warning
- uint8 order_review_system;
- bool train_income_warn; ///< if train is generating little income, show a warning
- bool status_long_date; ///< always show long date in status bar
- bool signal_side; ///< show signals on right side
- bool show_finances; ///< show finances at end of year
- bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
- bool new_nonstop; ///< ttdpatch compatible nonstop handling
- bool roadveh_queue; ///< buggy road vehicle queueing
- bool autoscroll; ///< scroll when moving mouse to the edge.
- byte errmsg_duration; ///< duration of error message
- byte land_generator; ///< the landscape generator
- byte oil_refinery_limit; ///< distance oil refineries allowed from map edge
- byte snow_line_height; ///< a number 0-15 that configured snow line height
- byte tgen_smoothness; ///< how rough is the terrain from 0-3
- uint32 generation_seed; ///< noise seed for world generation
- byte tree_placer; ///< the tree placer algorithm
- byte heightmap_rotation; ///< rotation director for the heightmap
- byte se_flat_world_height; ///< land height a flat world gets in SE
- bool bribe; ///< enable bribing the local authority
- bool nonuniform_stations; ///< allow nonuniform train stations
- bool adjacent_stations; ///< allow stations to be built directly adjacent to other stations
- bool always_small_airport; ///< always allow small airports
- bool realistic_acceleration; ///< realistic acceleration for trains
- bool wagon_speed_limits; ///< enable wagon speed limits
- bool forbid_90_deg; ///< forbid trains to make 90 deg turns
- bool no_servicing_if_no_breakdowns; ///< dont send vehicles to depot when breakdowns are disabled
- bool link_terraform_toolbar; ///< display terraform toolbar when displaying rail, road, water and airport toolbars
- bool reverse_scroll; ///< Right-Click-Scrolling scrolls in the opposite direction
- bool smooth_scroll; ///< Smooth scroll viewports
- bool disable_elrails; ///< when true, the elrails are disabled
- bool measure_tooltip; ///< Show a permanent tooltip when dragging tools
- byte liveries; ///< Options for displaying company liveries, 0=none, 1=self, 2=all
- bool prefer_teamchat; ///< Choose the chat message target with <ENTER>, true=all players, false=your team
- uint8 advanced_vehicle_list; ///< Use the "advanced" vehicle list
- uint8 loading_indicators; ///< Show loading indicators
- uint8 default_rail_type; ///< The default rail type for the rail GUI
-
- uint8 toolbar_pos; ///< position of toolbars, 0=left, 1=center, 2=right
- uint8 window_snap_radius; ///< Windows snap at each other if closer than this
-
- bool always_build_infrastructure; ///< Always allow building of infrastructure, even when you do not have the vehicles for it
- UnitID max_trains; ///< max trains in game per player (these are 16bit because the unitnumber field can't hold more)
- UnitID max_roadveh; ///< max trucks in game per player
- UnitID max_aircraft; ///< max planes in game per player
- UnitID max_ships; ///< max ships in game per player
-
- bool servint_ispercent; ///< service intervals are in percents
- uint16 servint_trains; ///< service interval for trains
- uint16 servint_roadveh; ///< service interval for road vehicles
- uint16 servint_aircraft; ///< service interval for aircraft
- uint16 servint_ships; ///< service interval for ships
-
- uint8 pathfinder_for_trains; ///< the pathfinder to use for trains
- uint8 pathfinder_for_roadvehs; ///< the pathfinder to use for roadvehicles
- uint8 pathfinder_for_ships; ///< the pathfinder to use for ships
-
- uint8 plane_speed; ///< divisor for speed of aircraft
-
- bool autorenew;
- int16 autorenew_months;
- int32 autorenew_money;
-
- byte pf_maxdepth; ///< maximum recursion depth when searching for a train route for new pathfinder
- uint16 pf_maxlength; ///< maximum length when searching for a train route for new pathfinder
-
- bool bridge_pillars; ///< show bridge pillars for high bridges
-
- bool ai_disable_veh_train; ///< disable types for AI
- bool ai_disable_veh_roadveh; ///< disable types for AI
- bool ai_disable_veh_aircraft; ///< disable types for AI
- bool ai_disable_veh_ship; ///< disable types for AI
- Year starting_year; ///< starting date
- Year ending_year; ///< end of the game (just show highscore)
- Year colored_news_year; ///< when does newspaper become colored?
-
- bool keep_all_autosave; ///< name the autosave in a different way.
- bool autosave_on_exit; ///< save an autosave when you quit the game, but do not ask "Do you really want to quit?"
- byte max_num_autosaves; ///< controls how many autosavegames are made before the game starts to overwrite (names them 0 to max_num_autosaves - 1)
- bool extra_dynamite; ///< extra dynamite
- bool road_stop_on_town_road; ///< allow building of drive-through road stops on town owned roads
-
- bool never_expire_vehicles; ///< never expire vehicles
- byte extend_vehicle_life; ///< extend vehicle life by this many years
-
- bool auto_euro; ///< automatically switch to euro in 2002
- bool serviceathelipad; ///< service helicopters at helipads automatically (no need to send to depot)
- bool smooth_economy; ///< smooth economy
- bool allow_shares; ///< allow the buying/selling of shares
- byte dist_local_authority; ///< distance for town local authority, default 20
+/** Settings related to the GUI and other stuff that is not saved in the savegame. */
+struct GUISettings {
+ bool vehicle_speed; ///< show vehicle speed
+ bool sg_full_load_any; ///< new full load calculation, any cargo must be full read from pre v93 savegames
+ bool lost_train_warn; ///< if a train can't find its destination, show a warning
+ uint8 order_review_system; ///< perform order reviews on vehicles
+ bool train_income_warn; ///< if train is generating little income, show a warning
+ bool status_long_date; ///< always show long date in status bar
+ bool show_finances; ///< show finances at end of year
+ bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
+ bool new_nonstop; ///< ttdpatch compatible nonstop handling
+ bool autoscroll; ///< scroll when moving mouse to the edge
+ byte errmsg_duration; ///< duration of error message
+ bool link_terraform_toolbar; ///< display terraform toolbar when displaying rail, road, water and airport toolbars
+ bool reverse_scroll; ///< right-Click-Scrolling scrolls in the opposite direction
+ bool smooth_scroll; ///< smooth scroll viewports
+ bool measure_tooltip; ///< show a permanent tooltip when dragging tools
+ byte liveries; ///< options for displaying company liveries, 0=none, 1=self, 2=all
+ bool prefer_teamchat; ///< choose the chat message target with <ENTER>, true=all players, false=your team
+ uint8 advanced_vehicle_list; ///< use the "advanced" vehicle list
+ uint8 loading_indicators; ///< show loading indicators
+ uint8 default_rail_type; ///< the default rail type for the rail GUI
+ uint8 toolbar_pos; ///< position of toolbars, 0=left, 1=center, 2=right
+ uint8 window_snap_radius; ///< windows snap at each other if closer than this
+ bool always_build_infrastructure; ///< always allow building of infrastructure, even when you do not have the vehicles for it
+ bool keep_all_autosave; ///< name the autosave in a different way
+ bool autosave_on_exit; ///< save an autosave when you quit the game, but do not ask "Do you really want to quit?"
+ byte max_num_autosaves; ///< controls how many autosavegames are made before the game starts to overwrite (names them 0 to max_num_autosaves - 1)
+ bool population_in_label; ///< show the population of a town in his label?
+ uint8 right_mouse_btn_emulation; ///< should we emulate right mouse clicking?
+ uint8 scrollwheel_scrolling; ///< scrolling using the scroll wheel?
+ uint8 scrollwheel_multiplier; ///< how much 'wheel' per incoming event from the OS?
+ bool pause_on_newgame; ///< whether to start new games paused or not
+ bool enable_signal_gui; ///< show the signal GUI when the signal button is pressed
+ Year ending_year; ///< end of the game (just show highscore)
+ Year colored_news_year; ///< when does newspaper become colored?
+ bool timetable_in_ticks; ///< whether to show the timetable in ticks rather than days
+ bool bridge_pillars; ///< show bridge pillars for high bridges
+ bool auto_euro; ///< automatically switch to euro in 2002
+ byte drag_signals_density; ///< many signals density
+ Year semaphore_build_before; ///< build semaphore signals automatically before this year
+ bool autorenew; ///< should autorenew be enabled for new companies?
+ int16 autorenew_months; ///< how many months from EOL of vehicles should autorenew trigger for new companies?
+ int32 autorenew_money; ///< how much money before autorenewing for new companies?
+};
- byte wait_oneway_signal; ///< waitingtime in days before a oneway signal
- byte wait_twoway_signal; ///< waitingtime in days before a twoway signal
+/** Settings related to the creation of games. */
+struct GameCreationSettings {
+ uint32 generation_seed; ///< noise seed for world generation
+ Year starting_year; ///< starting date
+ uint8 map_x; ///< X size of map
+ uint8 map_y; ///< Y size of map
+ byte land_generator; ///< the landscape generator
+ byte oil_refinery_limit; ///< distance oil refineries allowed from map edge
+ byte snow_line_height; ///< a number 0-15 that configured snow line height
+ byte tgen_smoothness; ///< how rough is the terrain from 0-3
+ byte tree_placer; ///< the tree placer algorithm
+ byte heightmap_rotation; ///< rotation director for the heightmap
+ byte se_flat_world_height; ///< land height a flat world gets in SE
+};
- uint8 map_x; ///< Size of map
- uint8 map_y;
+/** Settings related to construction in-game */
+struct ConstructionSettings {
+ bool build_on_slopes; ///< allow building on slopes
+ bool autoslope; ///< allow terraforming under things
+ bool longbridges; ///< allow 100 tile long bridges
+ bool signal_side; ///< show signals on right side
+ bool extra_dynamite; ///< extra dynamite
+ bool road_stop_on_town_road; ///< allow building of drive-through road stops on town owned roads
+ uint8 raw_industry_construction; ///< type of (raw) industry construction (none, "normal", prospecting)
+};
- byte drag_signals_density; ///< many signals density
- Year semaphore_build_before; ///< Build semaphore signals automatically before this year
- bool ainew_active; ///< Is the new AI active?
- bool ai_in_multiplayer; ///< Do we allow AIs in multiplayer
+/** Settings related to the AI. */
+struct AISettings {
+ bool ainew_active; ///< is the new AI active?
+ bool ai_in_multiplayer; ///< so we allow AIs in multiplayer
+ bool ai_disable_veh_train; ///< disable types for AI
+ bool ai_disable_veh_roadveh; ///< disable types for AI
+ bool ai_disable_veh_aircraft; ///< disable types for AI
+ bool ai_disable_veh_ship; ///< disable types for AI
+};
- /*
- * New Path Finding
- */
- bool new_pathfinding_all; ///< Use the newest pathfinding algorithm for all
+/** Settings related to the old pathfinder. */
+struct OPFSettings {
+ uint16 pf_maxlength; ///< maximum length when searching for a train route for new pathfinder
+ byte pf_maxdepth; ///< maximum recursion depth when searching for a train route for new pathfinder
+};
+/** Settings related to the new pathfinder. */
+struct NPFSettings {
/**
* The maximum amount of search nodes a single NPF run should take. This
* limit should make sure performance stays at acceptable levels at the cost
- * of not being perfect anymore. This will probably be fixed in a more
- * sophisticated way sometime soon
+ * of not being perfect anymore.
*/
uint32 npf_max_search_nodes;
- uint32 npf_rail_firstred_penalty; ///< The penalty for when the first signal is red (and it is not an exit or combo signal)
- uint32 npf_rail_firstred_exit_penalty; ///< The penalty for when the first signal is red (and it is an exit or combo signal)
- uint32 npf_rail_lastred_penalty; ///< The penalty for when the last signal is red
- uint32 npf_rail_station_penalty; ///< The penalty for station tiles
- uint32 npf_rail_slope_penalty; ///< The penalty for sloping upwards
- uint32 npf_rail_curve_penalty; ///< The penalty for curves
- uint32 npf_rail_depot_reverse_penalty; ///< The penalty for reversing in depots
- uint32 npf_buoy_penalty; ///< The penalty for going over (through) a buoy
- uint32 npf_water_curve_penalty; ///< The penalty for curves
- uint32 npf_road_curve_penalty; ///< The penalty for curves
- uint32 npf_crossing_penalty; ///< The penalty for level crossings
- uint32 npf_road_drive_through_penalty; ///< The penalty for going through a drive-through road stop
-
- bool population_in_label; ///< Show the population of a town in his label?
-
- uint8 freight_trains; ///< Value to multiply the weight of cargo by
-
- /** YAPF settings */
- YapfSettings yapf;
-
- uint8 right_mouse_btn_emulation;
+ uint32 npf_rail_firstred_penalty; ///< the penalty for when the first signal is red (and it is not an exit or combo signal)
+ uint32 npf_rail_firstred_exit_penalty; ///< the penalty for when the first signal is red (and it is an exit or combo signal)
+ uint32 npf_rail_lastred_penalty; ///< the penalty for when the last signal is red
+ uint32 npf_rail_station_penalty; ///< the penalty for station tiles
+ uint32 npf_rail_slope_penalty; ///< the penalty for sloping upwards
+ uint32 npf_rail_curve_penalty; ///< the penalty for curves
+ uint32 npf_rail_depot_reverse_penalty; ///< the penalty for reversing in depots
+ uint32 npf_buoy_penalty; ///< the penalty for going over (through) a buoy
+ uint32 npf_water_curve_penalty; ///< the penalty for curves
+ uint32 npf_road_curve_penalty; ///< the penalty for curves
+ uint32 npf_crossing_penalty; ///< the penalty for level crossings
+ uint32 npf_road_drive_through_penalty; ///< the penalty for going through a drive-through road stop
+};
- uint8 scrollwheel_scrolling;
- uint8 scrollwheel_multiplier;
+/** Settings related to the yet another pathfinder. */
+struct YAPFSettings {
+ bool disable_node_optimization; ///< whether to use exit-dir instead of trackdir in node key
+ uint32 max_search_nodes; ///< stop path-finding when this number of nodes visited
+ bool ship_use_yapf; ///< use YAPF for ships
+ bool road_use_yapf; ///< use YAPF for road
+ bool rail_use_yapf; ///< use YAPF for rail
+ uint32 road_slope_penalty; ///< penalty for up-hill slope
+ uint32 road_curve_penalty; ///< penalty for curves
+ uint32 road_crossing_penalty; ///< penalty for level crossing
+ uint32 road_stop_penalty; ///< penalty for going through a drive-through road stop
+ bool rail_firstred_twoway_eol; ///< treat first red two-way signal as dead end
+ uint32 rail_firstred_penalty; ///< penalty for first red signal
+ uint32 rail_firstred_exit_penalty; ///< penalty for first red exit signal
+ uint32 rail_lastred_penalty; ///< penalty for last red signal
+ uint32 rail_lastred_exit_penalty; ///< penalty for last red exit signal
+ uint32 rail_station_penalty; ///< penalty for non-target station tile
+ uint32 rail_slope_penalty; ///< penalty for up-hill slope
+ uint32 rail_curve45_penalty; ///< penalty for curve
+ uint32 rail_curve90_penalty; ///< penalty for 90-deg curve
+ uint32 rail_depot_reverse_penalty; ///< penalty for reversing in the depot
+ uint32 rail_crossing_penalty; ///< penalty for level crossing
+ uint32 rail_look_ahead_max_signals; ///< max. number of signals taken into consideration in look-ahead load balancer
+ int32 rail_look_ahead_signal_p0; ///< constant in polynomial penalty function
+ int32 rail_look_ahead_signal_p1; ///< constant in polynomial penalty function
+ int32 rail_look_ahead_signal_p2; ///< constant in polynomial penalty function
+
+ uint32 rail_longer_platform_penalty; ///< penalty for longer station platform than train
+ uint32 rail_longer_platform_per_tile_penalty; ///< penalty for longer station platform than train (per tile)
+ uint32 rail_shorter_platform_penalty; ///< penalty for shorter station platform than train
+ uint32 rail_shorter_platform_per_tile_penalty; ///< penalty for shorter station platform than train (per tile)
+};
- uint8 town_growth_rate; ///< Town growth rate
- uint8 larger_towns; ///< The number of cities to build. These start off larger and grow twice as fast
- uint8 initial_city_size; ///< Multiplier for the initial size of the cities compared to towns
+/** Settings related to all pathfinders. */
+struct PathfinderSettings {
+ uint8 pathfinder_for_trains; ///< the pathfinder to use for trains
+ uint8 pathfinder_for_roadvehs; ///< the pathfinder to use for roadvehicles
+ uint8 pathfinder_for_ships; ///< the pathfinder to use for ships
+ bool new_pathfinding_all; ///< use the newest pathfinding algorithm for all
- bool pause_on_newgame; ///< Whether to start new games paused or not.
+ bool roadveh_queue; ///< buggy road vehicle queueing
+ bool forbid_90_deg; ///< forbid trains to make 90 deg turns
- TownLayoutByte town_layout; ///< Select town layout
- bool station_noise_level; ///< build new airports when the town noise level is still within accepted limits
- uint16 town_noise_population[3]; ///< Population to base decision on noise evaluation (@see town_council_tolerance)
+ byte wait_oneway_signal; ///< waitingtime in days before a oneway signal
+ byte wait_twoway_signal; ///< waitingtime in days before a twoway signal
- bool timetabling; ///< Whether to allow timetabling.
- bool timetable_in_ticks; ///< Whether to show the timetable in ticks rather than days.
+ OPFSettings opf; ///< pathfinder settings for the old pathfinder
+ NPFSettings npf; ///< pathfinder settings for the new pathfinder
+ YAPFSettings yapf; ///< pathfinder settings for the yet another pathfinder
+};
- bool autoslope; ///< Allow terraforming under things.
+/** Settings related to orders. */
+struct OrderSettings {
+ bool improved_load; ///< improved loading algorithm
+ bool gradual_loading; ///< load vehicles gradually
+ bool selectgoods; ///< only send the goods to station if a train has been there
+ bool gotodepot; ///< allow goto depot in orders
+ bool no_servicing_if_no_breakdowns; ///< dont send vehicles to depot when breakdowns are disabled
+ bool timetabling; ///< whether to allow timetabling
+ bool serviceathelipad; ///< service helicopters at helipads automatically (no need to send to depot)
+};
- bool mod_road_rebuild; ///< Roadworks remove unneccesary RoadBits
+/** Settings related to vehicles. */
+struct VehicleSettings {
+ bool mammoth_trains; ///< allow very long trains
+ bool realistic_acceleration; ///< realistic acceleration for trains
+ bool wagon_speed_limits; ///< enable wagon speed limits
+ bool disable_elrails; ///< when true, the elrails are disabled
+ UnitID max_trains; ///< max trains in game per player
+ UnitID max_roadveh; ///< max trucks in game per player
+ UnitID max_aircraft; ///< max planes in game per player
+ UnitID max_ships; ///< max ships in game per player
+ bool servint_ispercent; ///< service intervals are in percents
+ uint16 servint_trains; ///< service interval for trains
+ uint16 servint_roadveh; ///< service interval for road vehicles
+ uint16 servint_aircraft; ///< service interval for aircraft
+ uint16 servint_ships; ///< service interval for ships
+ uint8 plane_speed; ///< divisor for speed of aircraft
+ uint8 freight_trains; ///< value to multiply the weight of cargo by
+ bool dynamic_engines; ///< enable dynamic allocation of engine data
+ bool never_expire_vehicles; ///< never expire vehicles
+ byte extend_vehicle_life; ///< extend vehicle life by this many years
+};
- bool exclusive_rights; ///< allow buying exclusive rights
- bool give_money; ///< allow giving other players money
+/** Settings related to the economy. */
+struct EconomySettings {
+ bool inflation; ///< disable inflation
+ bool bribe; ///< enable bribing the local authority
+ bool smooth_economy; ///< smooth economy
+ bool allow_shares; ///< allow the buying/selling of shares
+ byte dist_local_authority; ///< distance for town local authority, default 20
+ bool exclusive_rights; ///< allow buying exclusive rights
+ bool give_money; ///< allow giving other players money
+ bool mod_road_rebuild; ///< roadworks remove unneccesary RoadBits
+ bool multiple_industry_per_town; ///< allow many industries of the same type per town
+ bool same_industry_close; ///< allow same type industries to be built close to each other
+ uint8 town_growth_rate; ///< town growth rate
+ uint8 larger_towns; ///< the number of cities to build. These start off larger and grow twice as fast
+ uint8 initial_city_size; ///< multiplier for the initial size of the cities compared to towns
+ TownLayoutByte town_layout; ///< select town layout
+ bool station_noise_level; ///< build new airports when the town noise level is still within accepted limits
+ uint16 town_noise_population[3]; ///< population to base decision on noise evaluation (@see town_council_tolerance)
+};
- bool enable_signal_gui; ///< Show the signal GUI when the signal button is pressed
+/** Settings related to stations. */
+struct StationSettings {
+ bool modified_catchment; ///< different-size catchment areas
+ bool join_stations; ///< allow joining of train stations
+ bool nonuniform_stations; ///< allow nonuniform train stations
+ bool adjacent_stations; ///< allow stations to be built directly adjacent to other stations
+ bool always_small_airport; ///< always allow small airports
+ byte station_spread; ///< amount a station may spread
+};
- bool dynamic_engines; ///< Enable dynamic allocation of engine data
+/** All settings together. */
+struct Settings {
+ GUISettings gui; ///< settings related to the GUI
+ GameCreationSettings game_creation; ///< settings used during the creation of a game (map)
+ ConstructionSettings construction; ///< construction of things in-game
+ AISettings ai; ///< what may the AI do?
+ PathfinderSettings pf; ///< settings for all pathfinders
+ OrderSettings order; ///< settings related to orders
+ VehicleSettings vehicle; ///< options for vehicles
+ EconomySettings economy; ///< settings to change the economy
+ StationSettings station; ///< settings related to station management
};
-extern Patches _patches;
+extern Settings _settings;
/** The patch values that are used for new games and/or modified in config file */
-extern Patches _patches_newgame;
+extern Settings _settings_newgame;
#endif /* SETTINGS_TYPE_H */
diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp
index 151277648..10fd85df2 100644
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -106,7 +106,7 @@ SpriteID Ship::GetImage(Direction direction) const
static const Depot* FindClosestShipDepot(const Vehicle* v)
{
- if (_patches.pathfinder_for_ships == VPF_NPF) { /* NPF is used */
+ if (_settings.pf.pathfinder_for_ships == VPF_NPF) { /* NPF is used */
Trackdir trackdir = GetVehicleTrackdir(v);
NPFFoundTargetData ftd = NPFRouteToDepotTrialError(v->tile, trackdir, false, TRANSPORT_WATER, 0, v->owner, INVALID_RAILTYPES);
@@ -137,7 +137,7 @@ static const Depot* FindClosestShipDepot(const Vehicle* v)
static void CheckIfShipNeedsService(Vehicle *v)
{
- if (_patches.servint_ships == 0 || !v->NeedsAutomaticServicing()) return;
+ if (_settings.vehicle.servint_ships == 0 || !v->NeedsAutomaticServicing()) return;
if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
@@ -320,7 +320,7 @@ static bool ShipAccelerate(Vehicle *v)
/*updates statusbar only if speed have changed to save CPU time */
if (spd != v->cur_speed) {
v->cur_speed = spd;
- if (_patches.vehicle_speed)
+ if (_settings.gui.vehicle_speed)
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
@@ -459,7 +459,7 @@ static Track ChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir,
{
assert(IsValidDiagDirection(enterdir));
- switch (_patches.pathfinder_for_ships) {
+ switch (_settings.pf.pathfinder_for_ships) {
case VPF_YAPF: { /* YAPF */
Trackdir trackdir = YapfChooseShipTrack(v, tile, enterdir, tracks);
if (trackdir != INVALID_TRACKDIR) return TrackdirToTrack(trackdir);
@@ -756,7 +756,7 @@ CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
unit_num = HasBit(p2, 0) ? 0 : GetFreeUnitNumber(VEH_SHIP);
- if (!Vehicle::AllocateList(NULL, 1) || unit_num > _patches.max_ships)
+ if (!Vehicle::AllocateList(NULL, 1) || unit_num > _settings.vehicle.max_ships)
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
if (flags & DC_EXEC) {
@@ -800,7 +800,7 @@ CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
v->name = NULL;
v->u.ship.state = TRACK_BIT_DEPOT;
- v->service_interval = _patches.servint_ships;
+ v->service_interval = _settings.vehicle.servint_ships;
v->date_of_last_service = _date;
v->build_year = _cur_year;
v->cur_image = 0x0E5E;
diff --git a/src/station.cpp b/src/station.cpp
index 355abb7ba..0613faccb 100644
--- a/src/station.cpp
+++ b/src/station.cpp
@@ -285,7 +285,7 @@ bool StationRect::BeforeAddTile(TileIndex tile, StationRectMode mode)
/* check new rect dimensions against preset max */
int w = new_rect.right - new_rect.left + 1;
int h = new_rect.bottom - new_rect.top + 1;
- if (mode != ADD_FORCE && (w > _patches.station_spread || h > _patches.station_spread)) {
+ if (mode != ADD_FORCE && (w > _settings.station.station_spread || h > _settings.station.station_spread)) {
assert(mode != ADD_TRY);
_error_message = STR_306C_STATION_TOO_SPREAD_OUT;
return false;
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 7dd69c99d..6432782a6 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -563,7 +563,7 @@ static void UpdateStationAcceptance(Station *st, bool show_msg)
TileXY(rect.left, rect.bottom),
rect.right - rect.left + 1,
rect.top - rect.bottom + 1,
- _patches.modified_catchment ? FindCatchmentRadius(st) : (uint)CA_UNMODIFIED
+ _settings.station.modified_catchment ? FindCatchmentRadius(st) : (uint)CA_UNMODIFIED
);
} else {
memset(accepts, 0, sizeof(accepts));
@@ -692,7 +692,7 @@ CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint
* b) the build_on_slopes switch is disabled
*/
if (IsSteepSlope(tileh) ||
- ((_is_old_ai_player || !_patches.build_on_slopes) && tileh != SLOPE_FLAT)) {
+ ((_is_old_ai_player || !_settings.construction.build_on_slopes) && tileh != SLOPE_FLAT)) {
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
}
@@ -750,7 +750,7 @@ static bool CanExpandRailroadStation(const Station *st, uint *fin, Axis axis)
uint w = fin[1];
uint h = fin[2];
- if (_patches.nonuniform_stations) {
+ if (_settings.station.nonuniform_stations) {
/* determine new size of train station region.. */
int x = min(TileX(st->train_tile), TileX(tile));
int y = min(TileY(st->train_tile), TileY(tile));
@@ -794,7 +794,7 @@ static bool CanExpandRailroadStation(const Station *st, uint *fin, Axis axis)
}
}
/* make sure the final size is not too big. */
- if (curw > _patches.station_spread || curh > _patches.station_spread) {
+ if (curw > _settings.station.station_spread || curh > _settings.station.station_spread) {
_error_message = STR_306C_STATION_TOO_SPREAD_OUT;
return false;
}
@@ -883,7 +883,7 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
w_org = numtracks;
}
- if (h_org > _patches.station_spread || w_org > _patches.station_spread) return CMD_ERROR;
+ if (h_org > _settings.station.station_spread || w_org > _settings.station.station_spread) return CMD_ERROR;
/* these values are those that will be stored in train_tile and station_platforms */
uint finalvalues[3];
@@ -896,14 +896,14 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
/* If DC_EXEC is in flag, do not want to pass it to CheckFlatLandBelow, because of a nice bug
* for detail info, see:
* https://sourceforge.net/tracker/index.php?func=detail&aid=1029064&group_id=103924&atid=636365 */
- CommandCost ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags & ~DC_EXEC, 5 << axis, _patches.nonuniform_stations ? &est : NULL);
+ CommandCost ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags & ~DC_EXEC, 5 << axis, _settings.station.nonuniform_stations ? &est : NULL);
if (CmdFailed(ret)) return ret;
CommandCost cost(EXPENSES_CONSTRUCTION, ret.GetCost() + (numtracks * _price.train_station_track + _price.train_station_length) * plat_len);
Station *st = NULL;
bool check_surrounding = true;
- if (_patches.adjacent_stations) {
+ if (_settings.station.adjacent_stations) {
if (est != INVALID_STATION) {
if (HasBit(p1, 24)) {
/* You can't build an adjacent station over the top of one that
@@ -938,7 +938,7 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
if (st->train_tile != 0) {
/* check if we want to expanding an already existing station? */
- if (_is_old_ai_player || !_patches.join_stations)
+ if (_is_old_ai_player || !_settings.station.join_stations)
return_cmd_error(STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD);
if (!CanExpandRailroadStation(st, finalvalues, axis))
return CMD_ERROR;
@@ -993,7 +993,7 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
/* Now really clear the land below the station
* It should never return CMD_ERROR.. but you never know ;)
* (a bit strange function name for it, but it really does clear the land, when DC_EXEC is in flags) */
- ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags, 5 << axis, _patches.nonuniform_stations ? &est : NULL);
+ ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags, 5 << axis, _settings.station.nonuniform_stations ? &est : NULL);
if (CmdFailed(ret)) return ret;
st->train_tile = finalvalues[0];
@@ -1162,7 +1162,7 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1
/* Do not allow removing from stations if non-uniform stations are not enabled
* The check must be here to give correct error message
*/
- if (!_patches.nonuniform_stations) return_cmd_error(STR_NONUNIFORM_STATIONS_DISALLOWED);
+ if (!_settings.station.nonuniform_stations) return_cmd_error(STR_NONUNIFORM_STATIONS_DISALLOWED);
/* If we reached here, the tile is valid so increase the quantity of tiles we will remove */
quantity++;
@@ -1207,7 +1207,7 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1
static CommandCost RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
{
/* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */
- if (_current_player == OWNER_WATER && _patches.nonuniform_stations) {
+ if (_current_player == OWNER_WATER && _settings.station.nonuniform_stations) {
return DoCommand(tile, 0, 0, DC_EXEC, CMD_REMOVE_FROM_RAILROAD_STATION);
}
@@ -1326,7 +1326,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
Owner road_owner = GetRoadOwner(tile, ROADTYPE_ROAD);
if (road_owner == OWNER_TOWN) {
town_owned_road = true;
- if (!_patches.road_stop_on_town_road) return_cmd_error(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD);
+ if (!_settings.construction.road_stop_on_town_road) return_cmd_error(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD);
} else {
if (road_owner != OWNER_NONE && !CheckOwnership(road_owner)) return CMD_ERROR;
}
@@ -1350,7 +1350,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
Station *st = NULL;
- if (!_patches.adjacent_stations || !HasBit(p2, 5)) {
+ if (!_settings.station.adjacent_stations || !HasBit(p2, 5)) {
st = GetStationAround(tile, 1, 1, INVALID_STATION);
if (st == CHECK_STATIONS_ERR) return CMD_ERROR;
}
@@ -1718,7 +1718,7 @@ CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
int h = afc->size_y;
Station *st = NULL;
- if (w > _patches.station_spread || h > _patches.station_spread) {
+ if (w > _settings.station.station_spread || h > _settings.station.station_spread) {
_error_message = STR_306C_STATION_TOO_SPREAD_OUT;
return CMD_ERROR;
}
@@ -1732,7 +1732,7 @@ CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
/* Check if local auth would allow a new airport */
bool autority_refused;
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
/* do not allow to build a new airport if this raise the town noise over the maximum allowed by town */
autority_refused = (t->noise_reached + newnoise_level) > t->MaxTownNoise();
} else {
@@ -1749,7 +1749,7 @@ CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
return_cmd_error(STR_2035_LOCAL_AUTHORITY_REFUSES);
}
- if (!_patches.adjacent_stations || !HasBit(p2, 0)) {
+ if (!_settings.station.adjacent_stations || !HasBit(p2, 0)) {
st = GetStationAround(tile, w, h, INVALID_STATION);
if (st == CHECK_STATIONS_ERR) return CMD_ERROR;
} else {
@@ -1824,7 +1824,7 @@ CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
InvalidateWindowData(WC_STATION_LIST, st->owner, 0);
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_PLANES);
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
InvalidateWindow(WC_TOWN_VIEW, st->town->index);
}
}
@@ -1881,7 +1881,7 @@ static CommandCost RemoveAirport(Station *st, uint32 flags)
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_PLANES);
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
InvalidateWindow(WC_TOWN_VIEW, st->town->index);
}
@@ -2044,7 +2044,7 @@ CommandCost CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
/* middle */
Station *st = NULL;
- if (!_patches.adjacent_stations || !HasBit(p1, 0)) {
+ if (!_settings.station.adjacent_stations || !HasBit(p1, 0)) {
st = GetStationAround(
tile + ToTileIndexDiff(_dock_tileoffs_chkaround[direction]),
_dock_w_chk[direction], _dock_h_chk[direction], INVALID_STATION);
@@ -2774,7 +2774,7 @@ StationSet FindStationsAroundIndustryTile(TileIndex tile, int w, int h)
int w_prod; // width and height of the "producer" of the cargo
int h_prod;
int max_rad;
- if (_patches.modified_catchment) {
+ if (_settings.station.modified_catchment) {
w_prod = w;
h_prod = h;
w += 2 * MAX_CATCHMENT;
@@ -2797,7 +2797,7 @@ StationSet FindStationsAroundIndustryTile(TileIndex tile, int w, int h)
if (st->IsBuoy()) continue; // bouys don't accept cargo
- if (_patches.modified_catchment) {
+ if (_settings.station.modified_catchment) {
/* min and max coordinates of the producer relative */
const int x_min_prod = max_rad + 1;
const int x_max_prod = max_rad + w_prod;
@@ -2851,7 +2851,7 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount)
if (st->goods[type].rating == 0) continue; // Lowest possible rating, better not to give cargo anymore
- if (_patches.selectgoods && st->goods[type].last_speed == 0) continue; // Selectively servicing stations, and not this one
+ if (_settings.order.selectgoods && st->goods[type].last_speed == 0) continue; // Selectively servicing stations, and not this one
if (IsCargoInClass(type, CC_PASSENGERS)) {
if (st->facilities == FACIL_TRUCK_STOP) continue; // passengers are never served by just a truck stop
@@ -3076,7 +3076,7 @@ void AfterLoadStations()
static CommandCost TerraformTile_Station(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
- if (_patches.build_on_slopes && AutoslopeEnabled()) {
+ if (_settings.construction.build_on_slopes && AutoslopeEnabled()) {
/* TODO: If you implement newgrf callback 149 'land slope check', you have to decide what to do with it here.
* TTDP does not call it.
*/
diff --git a/src/station_type.h b/src/station_type.h
index 5a2ef93e6..5f7bd5b95 100644
--- a/src/station_type.h
+++ b/src/station_type.h
@@ -57,7 +57,7 @@ enum CatchmentArea {
CA_TRAIN = 4,
CA_DOCK = 5,
- CA_UNMODIFIED = 4, ///< Used when _patches.modified_catchment is false
+ CA_UNMODIFIED = 4, ///< Used when _settings.station.modified_catchment is false
MAX_CATCHMENT = 10, ///< Airports have a catchment up to this number.
};
diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp
index 8f2b46b4e..07036bbe8 100644
--- a/src/statusbar_gui.cpp
+++ b/src/statusbar_gui.cpp
@@ -82,7 +82,7 @@ struct StatusBarWindow : Window {
this->DrawWidgets();
SetDParam(0, _date);
- DrawStringCentered(70, 1, (_pause_game || _patches.status_long_date) ? STR_00AF : STR_00AE, TC_FROMSTRING);
+ DrawStringCentered(70, 1, (_pause_game || _settings.gui.status_long_date) ? STR_00AF : STR_00AE, TC_FROMSTRING);
if (p != NULL) {
/* Draw player money */
diff --git a/src/texteff.cpp b/src/texteff.cpp
index 7cadbc347..295f3b6bf 100644
--- a/src/texteff.cpp
+++ b/src/texteff.cpp
@@ -392,7 +392,7 @@ void DrawTextEffects(DrawPixelInfo *dpi)
dpi->top <= te->bottom &&
dpi->left + dpi->width > te->x &&
dpi->top + dpi->height > te->y) {
- if (te->mode == TE_RISING || (_patches.loading_indicators && !IsTransparencySet(TO_LOADING))) {
+ if (te->mode == TE_RISING || (_settings.gui.loading_indicators && !IsTransparencySet(TO_LOADING))) {
AddStringToDraw(te->x, te->y, te->string_id, te->params_1, te->params_2);
}
}
@@ -407,7 +407,7 @@ void DrawTextEffects(DrawPixelInfo *dpi)
dpi->top <= te->bottom * 2 - te->y &&
dpi->left + dpi->width > te->x &&
dpi->top + dpi->height > te->y) {
- if (te->mode == TE_RISING || (_patches.loading_indicators && !IsTransparencySet(TO_LOADING))) {
+ if (te->mode == TE_RISING || (_settings.gui.loading_indicators && !IsTransparencySet(TO_LOADING))) {
AddStringToDraw(te->x, te->y, (StringID)(te->string_id - 1), te->params_1, te->params_2);
}
}
diff --git a/src/tgp.cpp b/src/tgp.cpp
index 2dced280b..5b0db2943 100644
--- a/src/tgp.cpp
+++ b/src/tgp.cpp
@@ -342,7 +342,7 @@ static void HeightMapGenerate()
do {
log_frequency = iteration_round - log_frequency_min;
if (log_frequency >= 0) {
- amplitude = _amplitudes_by_smoothness_and_frequency[_patches.tgen_smoothness][log_frequency];
+ amplitude = _amplitudes_by_smoothness_and_frequency[_settings.game_creation.tgen_smoothness][log_frequency];
} else {
amplitude = 0;
}
@@ -531,7 +531,7 @@ static double perlin_coast_noise_2D(const double x, const double y, const double
*/
static void HeightMapCoastLines()
{
- int smallest_size = min(_patches.map_x, _patches.map_y);
+ int smallest_size = min(_settings.game_creation.map_x, _settings.game_creation.map_y);
const int margin = 4;
uint y, x;
double max_x;
@@ -663,7 +663,7 @@ static void HeightMapNormalize()
{
const amplitude_t water_percent = _water_percent[_opt.diff.quantity_sea_lakes];
const height_t h_max_new = I2H(_max_height[_opt.diff.terrain_type]);
- const height_t roughness = 7 + 3 * _patches.tgen_smoothness;
+ const height_t roughness = 7 + 3 * _settings.game_creation.tgen_smoothness;
HeightMapAdjustWaterLevel(water_percent, h_max_new);
@@ -692,7 +692,7 @@ static inline int perlin_landXY(uint x, uint y)
*/
static double int_noise(const long x, const long y, const int prime)
{
- long n = x + y * prime + _patches.generation_seed;
+ long n = x + y * prime + _settings.game_creation.generation_seed;
n = (n << 13) ^ n;
diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp
index bbf529429..f533cafc4 100644
--- a/src/timetable_cmd.cpp
+++ b/src/timetable_cmd.cpp
@@ -54,7 +54,7 @@ static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 time
*/
CommandCost CmdChangeTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- if (!_patches.timetabling) return CMD_ERROR;
+ if (!_settings.order.timetabling) return CMD_ERROR;
VehicleID veh = GB(p1, 0, 16);
if (!IsValidVehicleID(veh)) return CMD_ERROR;
@@ -90,7 +90,7 @@ CommandCost CmdChangeTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p
*/
CommandCost CmdSetVehicleOnTime(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- if (!_patches.timetabling) return CMD_ERROR;
+ if (!_settings.order.timetabling) return CMD_ERROR;
VehicleID veh = GB(p1, 0, 16);
if (!IsValidVehicleID(veh)) return CMD_ERROR;
@@ -116,7 +116,7 @@ CommandCost CmdSetVehicleOnTime(TileIndex tile, uint32 flags, uint32 p1, uint32
*/
CommandCost CmdAutofillTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- if (!_patches.timetabling) return CMD_ERROR;
+ if (!_settings.order.timetabling) return CMD_ERROR;
VehicleID veh = GB(p1, 0, 16);
if (!IsValidVehicleID(veh)) return CMD_ERROR;
@@ -157,7 +157,7 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
v->current_order_time = 0;
- if (!_patches.timetabling) return;
+ if (!_settings.order.timetabling) return;
/* Make sure the timetable only starts when the vehicle reaches the first
* order, not when travelling from the depot to the first station. */
diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp
index 1a4f7d75b..efccaa044 100644
--- a/src/timetable_gui.cpp
+++ b/src/timetable_gui.cpp
@@ -38,7 +38,7 @@ enum TimetableViewWindowWidgets {
void SetTimetableParams(int param1, int param2, uint32 time)
{
- if (_patches.timetable_in_ticks) {
+ if (_settings.gui.timetable_in_ticks) {
SetDParam(param1, STR_TIMETABLE_TICKS);
SetDParam(param2, time);
} else {
@@ -172,7 +172,7 @@ struct TimetableWindow : Window {
}
y += 10;
- if (v->lateness_counter == 0 || (!_patches.timetable_in_ticks && v->lateness_counter / DAY_TICKS == 0)) {
+ if (v->lateness_counter == 0 || (!_settings.gui.timetable_in_ticks && v->lateness_counter / DAY_TICKS == 0)) {
DrawString(2, y, STR_TIMETABLE_STATUS_ON_TIME, TC_BLACK);
} else {
SetTimetableParams(0, 1, abs(v->lateness_counter));
@@ -222,7 +222,7 @@ struct TimetableWindow : Window {
if (order != NULL) {
uint time = (selected % 2 == 1) ? order->travel_time : order->wait_time;
- if (!_patches.timetable_in_ticks) time /= DAY_TICKS;
+ if (!_settings.gui.timetable_in_ticks) time /= DAY_TICKS;
if (time != 0) {
SetDParam(0, time);
@@ -259,7 +259,7 @@ struct TimetableWindow : Window {
uint32 p1 = PackTimetableArgs(v, this->sel_index);
uint64 time = StrEmpty(str) ? 0 : strtoul(str, NULL, 10);
- if (!_patches.timetable_in_ticks) time *= DAY_TICKS;
+ if (!_settings.gui.timetable_in_ticks) time *= DAY_TICKS;
uint32 p2 = minu(time, MAX_UVALUE(uint16));
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index 6377d4909..1285ea34a 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -542,8 +542,8 @@ static void ToolbarScenDateBackward(Window *w)
w->HandleButtonClick(6);
w->SetDirty();
- _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year - 1, MIN_YEAR, MAX_YEAR);
- SetDate(ConvertYMDToDate(_patches_newgame.starting_year, 0, 1));
+ _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year - 1, MIN_YEAR, MAX_YEAR);
+ SetDate(ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1));
}
_left_button_clicked = false;
}
@@ -555,8 +555,8 @@ static void ToolbarScenDateForward(Window *w)
w->HandleButtonClick(7);
w->SetDirty();
- _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + 1, MIN_YEAR, MAX_YEAR);
- SetDate(ConvertYMDToDate(_patches_newgame.starting_year, 0, 1));
+ _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + 1, MIN_YEAR, MAX_YEAR);
+ SetDate(ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1));
}
_left_button_clicked = false;
}
@@ -905,8 +905,8 @@ struct ScenarioEditorToolbarWindow : Window {
virtual void OnPaint()
{
- this->SetWidgetDisabledState(6, _patches_newgame.starting_year <= MIN_YEAR);
- this->SetWidgetDisabledState(7, _patches_newgame.starting_year >= MAX_YEAR);
+ this->SetWidgetDisabledState(6, _settings_newgame.game_creation.starting_year <= MIN_YEAR);
+ this->SetWidgetDisabledState(7, _settings_newgame.game_creation.starting_year >= MAX_YEAR);
/* Draw brown-red toolbar bg. */
GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2);
@@ -914,7 +914,7 @@ struct ScenarioEditorToolbarWindow : Window {
this->DrawWidgets();
- SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1));
+ SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1));
DrawStringCenteredTruncated(this->widget[6].right, this->widget[7].left, 6, STR_00AF, TC_FROMSTRING);
/* We hide this panel when the toolbar space gets too small */
diff --git a/src/town.h b/src/town.h
index 8bf21dbd4..3e5da5546 100644
--- a/src/town.h
+++ b/src/town.h
@@ -197,7 +197,7 @@ struct Town : PoolItem<Town, TownID, &_Town_pool> {
inline uint16 MaxTownNoise() const {
if (this->population == 0) return 0; // no population? no noise
- return ((this->population / _patches.town_noise_population[_opt.diff.town_council_tolerance]) + 3);
+ return ((this->population / _settings.economy.town_noise_population[_opt.diff.town_council_tolerance]) + 3);
}
};
@@ -207,7 +207,7 @@ struct Town : PoolItem<Town, TownID, &_Town_pool> {
*/
inline TownLayout Town::GetActiveLayout() const
{
- return (_patches.town_layout == TL_RANDOM) ? this->layout : _patches.town_layout;
+ return (_settings.economy.town_layout == TL_RANDOM) ? this->layout : _settings.economy.town_layout;
}
struct HouseSpec {
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index f6e0eadca..60bd389a4 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -324,7 +324,7 @@ void UpdateTownVirtCoord(Town *t)
SetDParam(0, t->index);
SetDParam(1, t->population);
UpdateViewportSignPos(&t->sign, pt.x, pt.y - 24,
- _patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL);
+ _settings.gui.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL);
MarkTownSignDirty(t);
}
@@ -1255,7 +1255,7 @@ static bool GrowTown(Town *t)
/* Let the town be a ghost town
* The player wanted it in such a way. Thus there he has it. ;)
* Never reached in editor mode. */
- if (_patches.town_layout == TL_NO_ROADS && _generating_world) {
+ if (_settings.economy.town_layout == TL_NO_ROADS && _generating_world) {
return false;
}
@@ -1485,7 +1485,7 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSize
break;
case TSM_CITY:
- x *= _patches.initial_city_size;
+ x *= _settings.economy.initial_city_size;
t->larger_town = true;
break;
}
@@ -1586,7 +1586,7 @@ bool GenerateTowns()
{
uint num = 0;
uint n = ScaleByMapSize(_num_initial_towns[_opt.diff.number_towns] + (Random() & 7));
- uint num_cities = _patches.larger_towns == 0 ? 0 : n / _patches.larger_towns;
+ uint num_cities = _settings.economy.larger_towns == 0 ? 0 : n / _settings.economy.larger_towns;
SetGeneratingWorldProgress(GWP_TOWN, n);
@@ -1594,7 +1594,7 @@ bool GenerateTowns()
IncreaseGeneratingWorldProgress(GWP_TOWN);
/* try 20 times to create a random-sized town for the first loop. */
TownSizeMode mode = num_cities > 0 ? TSM_CITY : TSM_RANDOM;
- if (CreateRandomTown(20, mode, _patches.initial_city_size) != NULL) num++;
+ if (CreateRandomTown(20, mode, _settings.economy.initial_city_size) != NULL) num++;
if (num_cities > 0) num_cities--;
} while (--n);
@@ -2219,7 +2219,7 @@ static void TownActionFundBuildings(Town *t)
static void TownActionBuyRights(Town *t)
{
/* Check if it's allowed to by the rights */
- if (!_patches.exclusive_rights) return;
+ if (!_settings.economy.exclusive_rights) return;
t->exclusive_counter = 12;
t->exclusivity = _current_player;
@@ -2333,7 +2333,7 @@ static void UpdateTownGrowRate(Town *t)
}
ClrBit(t->flags12, TOWN_IS_FUNDED);
- if (_patches.town_growth_rate == 0 && t->fund_buildings_months == 0) return;
+ if (_settings.economy.town_growth_rate == 0 && t->fund_buildings_months == 0) return;
/** Towns are processed every TOWN_GROWTH_FREQUENCY ticks, and this is the
* number of times towns are processed before a new building is built. */
@@ -2362,7 +2362,7 @@ static void UpdateTownGrowRate(Town *t)
/* Use the normal growth rate values if new buildings have been funded in
* this town and the growth rate is set to none. */
- uint growth_multiplier = _patches.town_growth_rate != 0 ? _patches.town_growth_rate - 1 : 1;
+ uint growth_multiplier = _settings.economy.town_growth_rate != 0 ? _settings.economy.town_growth_rate - 1 : 1;
m >>= growth_multiplier;
if (t->larger_town) m /= 2;
@@ -2405,7 +2405,7 @@ bool CheckIfAuthorityAllows(TileIndex tile)
{
if (!IsValidPlayer(_current_player)) return true;
- Town *t = ClosestTownFromTile(tile, _patches.dist_local_authority);
+ Town *t = ClosestTownFromTile(tile, _settings.economy.dist_local_authority);
if (t == NULL) return true;
if (t->ratings[_current_player] > RATING_VERYPOOR) return true;
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index 4e5e0cf8e..5d7715e95 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -76,7 +76,7 @@ uint GetMaskOfTownActions(int *nump, PlayerID pid, const Town *t)
TownActions buttons = TACT_NONE;
/* Spectators and unwanted have no options */
- if (pid != PLAYER_SPECTATOR && !(_patches.bribe && t->unwanted[pid])) {
+ if (pid != PLAYER_SPECTATOR && !(_settings.economy.bribe && t->unwanted[pid])) {
/* Things worth more than this are not shown */
Money avail = GetPlayer(pid)->player_money + _price.station_value * 200;
@@ -88,11 +88,11 @@ uint GetMaskOfTownActions(int *nump, PlayerID pid, const Town *t)
const TownActions cur = (TownActions)(1 << i);
/* Is the player not able to bribe ? */
- if (cur == TACT_BRIBE && (!_patches.bribe || t->ratings[pid] >= RATING_BRIBE_MAXIMUM))
+ if (cur == TACT_BRIBE && (!_settings.economy.bribe || t->ratings[pid] >= RATING_BRIBE_MAXIMUM))
continue;
/* Is the player not able to buy exclusive rights ? */
- if (cur == TACT_BUY_RIGHTS && !_patches.exclusive_rights)
+ if (cur == TACT_BUY_RIGHTS && !_settings.economy.exclusive_rights)
continue;
/* Is the player not able to build a statue ? */
@@ -313,7 +313,7 @@ public:
}
/* Space required for showing noise level information */
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
ResizeWindowForWidget(this, TVW_INFOPANEL, 0, 10);
}
@@ -343,7 +343,7 @@ public:
this->DrawViewport();
/* only show the town noise, if the noise option is activated. */
- if (_patches.station_noise_level) {
+ if (_settings.economy.station_noise_level) {
SetDParam(0, this->town->noise_reached);
SetDParam(1, this->town->MaxTownNoise());
DrawString(2, 137, STR_NOISE_IN_TOWN, 0);
@@ -385,7 +385,7 @@ public:
/* Called when setting station noise have changed, in order to resize the window */
this->SetDirty(); // refresh display for current size. This will allow to avoid glitches when downgrading
- if (_patches.station_noise_level) { // adjust depending
+ if (_settings.economy.station_noise_level) { // adjust depending
if (this->height == 150) { // window is smaller, needs to be bigger
ResizeWindowForWidget(this, TVW_INFOPANEL, 0, 10);
}
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 69ba0f779..00ff10cc1 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -92,7 +92,7 @@ static inline DiagDirection TrainExitDir(Direction direction, TrackBits track)
byte FreightWagonMult(CargoID cargo)
{
if (!GetCargo(cargo)->is_freight) return 1;
- return _patches.freight_trains;
+ return _settings.vehicle.freight_trains;
}
@@ -278,7 +278,7 @@ void TrainConsistChanged(Vehicle *v)
}
/* max speed is the minimum of the speed limits of all vehicles in the consist */
- if ((rvi_u->railveh_type != RAILVEH_WAGON || _patches.wagon_speed_limits) && !UsesWagonOverride(u)) {
+ if ((rvi_u->railveh_type != RAILVEH_WAGON || _settings.vehicle.wagon_speed_limits) && !UsesWagonOverride(u)) {
uint16 speed = GetVehicleProperty(u, 0x09, rvi_u->max_speed);
if (speed != 0) max_speed = min(speed, max_speed);
}
@@ -726,7 +726,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32
Vehicle *v = vl[0];
UnitID unit_num = HasBit(p2, 0) ? 0 : GetFreeUnitNumber(VEH_TRAIN);
- if (unit_num > _patches.max_trains)
+ if (unit_num > _settings.vehicle.max_trains)
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
if (flags & DC_EXEC) {
@@ -765,7 +765,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32
v->u.rail.railtype = rvi->railtype;
_new_vehicle_id = v->index;
- v->service_interval = _patches.servint_trains;
+ v->service_interval = _settings.vehicle.servint_trains;
v->date_of_last_service = _date;
v->build_year = _cur_year;
v->cur_image = 0xAC2;
@@ -1001,7 +1001,7 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p
if (HasBit(p2, 0) && src_head == dst_head) return CommandCost();
{
- int max_len = _patches.mammoth_trains ? 100 : 10;
+ int max_len = _settings.vehicle.mammoth_trains ? 100 : 10;
/* check if all vehicles in the source train are stopped inside a depot. */
int src_len = CheckTrainStoppedInDepot(src_head);
@@ -1044,7 +1044,7 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p
/* moving a loco to a new line?, then we need to assign a unitnumber. */
if (dst == NULL && !IsFrontEngine(src) && IsTrainEngine(src)) {
UnitID unit_num = GetFreeUnitNumber(VEH_TRAIN);
- if (unit_num > _patches.max_trains)
+ if (unit_num > _settings.vehicle.max_trains)
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
if (flags & DC_EXEC) src->unitnumber = unit_num;
@@ -1544,7 +1544,7 @@ static inline void SetLastSpeed(Vehicle *v, int spd)
int old = v->u.rail.last_speed;
if (spd != old) {
v->u.rail.last_speed = spd;
- if (_patches.vehicle_speed || (old == 0) != (spd == 0)) {
+ if (_settings.gui.vehicle_speed || (old == 0) != (spd == 0)) {
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
}
@@ -1883,7 +1883,7 @@ CommandCost CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, ui
if (v->vehstatus & VS_CRASHED || v->breakdown_ctr != 0) return CMD_ERROR;
if (flags & DC_EXEC) {
- if (_patches.realistic_acceleration && v->cur_speed != 0) {
+ if (_settings.vehicle.realistic_acceleration && v->cur_speed != 0) {
ToggleBit(v->u.rail.flags, VRF_REVERSING);
} else {
v->cur_speed = 0;
@@ -2058,7 +2058,7 @@ static TrainFindDepotData FindClosestTrainDepot(Vehicle *v, int max_distance)
return tfdd;
}
- switch (_patches.pathfinder_for_trains) {
+ switch (_settings.pf.pathfinder_for_trains) {
case VPF_YAPF: { /* YAPF */
bool found = YapfFindNearestRailDepotTwoWay(v, max_distance, NPF_INFINITE_PENALTY, &tfdd.tile, &tfdd.reverse);
tfdd.best_length = found ? max_distance / 2 : UINT_MAX; // some fake distance or NOT_FOUND
@@ -2369,7 +2369,7 @@ static Track ChooseTrainTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir
/* quick return in case only one possible track is available */
if (KillFirstBit(tracks) == TRACK_BIT_NONE) return FindFirstTrack(tracks);
- switch (_patches.pathfinder_for_trains) {
+ switch (_settings.pf.pathfinder_for_trains) {
case VPF_YAPF: { /* YAPF */
Trackdir trackdir = YapfChooseRailTrack(v, tile, enterdir, tracks, &path_not_found);
if (trackdir != INVALID_TRACKDIR) {
@@ -2446,7 +2446,7 @@ static Track ChooseTrainTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir
/* it is first time the problem occurred, set the "path not found" flag */
SetBit(v->u.rail.flags, VRF_NO_PATH_TO_DESTINATION);
/* and notify user about the event */
- if (_patches.lost_train_warn && v->owner == _local_player) {
+ if (_settings.gui.lost_train_warn && v->owner == _local_player) {
SetDParam(0, v->unitnumber);
AddNewsItem(
STR_TRAIN_IS_LOST,
@@ -2487,7 +2487,7 @@ static bool CheckReverseTrain(Vehicle *v)
assert(v->u.rail.track);
- switch (_patches.pathfinder_for_trains) {
+ switch (_settings.pf.pathfinder_for_trains) {
case VPF_YAPF: /* YAPF */
reverse_best = YapfCheckReverseTrain(v);
break;
@@ -2607,13 +2607,13 @@ static int UpdateTrainSpeed(Vehicle *v)
uint accel;
if (v->vehstatus & VS_STOPPED || HasBit(v->u.rail.flags, VRF_REVERSING)) {
- if (_patches.realistic_acceleration) {
+ if (_settings.vehicle.realistic_acceleration) {
accel = GetTrainAcceleration(v, AM_BRAKE) * 2;
} else {
accel = v->acceleration * -2;
}
} else {
- if (_patches.realistic_acceleration) {
+ if (_settings.vehicle.realistic_acceleration) {
accel = GetTrainAcceleration(v, AM_ACCEL);
} else {
accel = v->acceleration;
@@ -2754,7 +2754,7 @@ static const RailtypeSlowdownParams _railtype_slowdown[] = {
/** Modify the speed of the vehicle due to a turn */
static inline void AffectSpeedByDirChange(Vehicle *v, Direction new_dir)
{
- if (_patches.realistic_acceleration) return;
+ if (_settings.vehicle.realistic_acceleration) return;
DirDiff diff = DirDifference(v->direction, new_dir);
if (diff == DIRDIFF_SAME) return;
@@ -2766,7 +2766,7 @@ static inline void AffectSpeedByDirChange(Vehicle *v, Direction new_dir)
/** Modify the speed of the vehicle due to a change in altitude */
static inline void AffectSpeedByZChange(Vehicle *v, byte old_z)
{
- if (old_z == v->z_pos || _patches.realistic_acceleration) return;
+ if (old_z == v->z_pos || _settings.vehicle.realistic_acceleration) return;
const RailtypeSlowdownParams *rsp = &_railtype_slowdown[v->u.rail.railtype];
@@ -2971,7 +2971,7 @@ static void TrainController(Vehicle *v, Vehicle *nomove, bool update_image)
TrackBits red_signals = TrackdirBitsToTrackBits(TrackStatusToRedSignals(ts) & reachable_trackdirs);
TrackBits bits = TrackdirBitsToTrackBits(trackdirbits);
- if (_patches.pathfinder_for_trains != VPF_NTP && _patches.forbid_90_deg && prev == NULL) {
+ if (_settings.pf.pathfinder_for_trains != VPF_NTP && _settings.pf.forbid_90_deg && prev == NULL) {
/* We allow wagons to make 90 deg turns, because forbid_90_deg
* can be switched on halfway a turn */
bits &= ~TrackCrossesTracks(FindFirstTrack(v->u.rail.track));
@@ -2999,12 +2999,12 @@ static void TrainController(Vehicle *v, Vehicle *nomove, bool update_image)
v->cur_speed = 0;
v->subspeed = 0;
v->progress = 255 - 100;
- if (++v->load_unload_time_rem < _patches.wait_oneway_signal * 20) return;
+ if (++v->load_unload_time_rem < _settings.pf.wait_oneway_signal * 20) return;
} else if (HasSignalOnTrackdir(gp.new_tile, i)) {
v->cur_speed = 0;
v->subspeed = 0;
v->progress = 255 - 10;
- if (++v->load_unload_time_rem < _patches.wait_twoway_signal * 73) {
+ if (++v->load_unload_time_rem < _settings.pf.wait_twoway_signal * 73) {
TileIndex o_tile = gp.new_tile + TileOffsByDiagDir(enterdir);
Direction rdir = ReverseDir(dir);
@@ -3406,7 +3406,7 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
/* mask unreachable track bits if we are forbidden to do 90deg turns */
TrackBits bits = TrackdirBitsToTrackBits(trackdirbits);
- if (_patches.pathfinder_for_trains != VPF_NTP && _patches.forbid_90_deg) {
+ if (_settings.pf.pathfinder_for_trains != VPF_NTP && _settings.pf.forbid_90_deg) {
bits &= ~TrackCrossesTracks(FindFirstTrack(v->u.rail.track));
}
@@ -3539,7 +3539,7 @@ static void CheckIfTrainNeedsService(Vehicle *v)
{
static const uint MAX_ACCEPTABLE_DEPOT_DIST = 16;
- if (_patches.servint_trains == 0 || !v->NeedsAutomaticServicing()) return;
+ if (_settings.vehicle.servint_trains == 0 || !v->NeedsAutomaticServicing()) return;
if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
@@ -3614,7 +3614,7 @@ void TrainsYearlyLoop()
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_TRAIN && IsFrontEngine(v)) {
/* show warning if train is not generating enough income last 2 years (corresponds to a red icon in the vehicle list) */
- if (_patches.train_income_warn && v->owner == _local_player && v->age >= 730 && v->GetDisplayProfitThisYear() < 0) {
+ if (_settings.gui.train_income_warn && v->owner == _local_player && v->age >= 730 && v->GetDisplayProfitThisYear() < 0) {
SetDParam(1, v->GetDisplayProfitThisYear());
SetDParam(0, v->unitnumber);
AddNewsItem(
diff --git a/src/train_gui.cpp b/src/train_gui.cpp
index 3e516a4e3..1428c79ce 100644
--- a/src/train_gui.cpp
+++ b/src/train_gui.cpp
@@ -124,7 +124,7 @@ static void TrainDetailsCargoTab(const Vehicle *v, int x, int y)
SetDParam(0, v->cargo_type);
SetDParam(1, v->cargo.Count());
SetDParam(2, v->cargo.Source());
- SetDParam(3, _patches.freight_trains);
+ SetDParam(3, _settings.vehicle.freight_trains);
str = FreightWagonMult(v->cargo_type) > 1 ? STR_FROM_MULT : STR_8813_FROM;
}
DrawString(x, y, str, TC_FROMSTRING);
@@ -150,7 +150,7 @@ static void TrainDetailsCapacityTab(const Vehicle *v, int x, int y)
if (v->cargo_cap != 0) {
SetDParam(0, v->cargo_type);
SetDParam(1, v->cargo_cap);
- SetDParam(2, _patches.freight_trains);
+ SetDParam(2, _settings.vehicle.freight_trains);
DrawString(x, y, FreightWagonMult(v->cargo_type) > 1 ? STR_CAPACITY_MULT : STR_013F_CAPACITY, TC_FROMSTRING);
}
}
@@ -249,7 +249,7 @@ void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vs
SetDParam(1, act_cargo[i]); // {CARGO} #2
SetDParam(2, i); // {SHORTCARGO} #1
SetDParam(3, max_cargo[i]); // {SHORTCARGO} #2
- SetDParam(4, _patches.freight_trains);
+ SetDParam(4, _settings.vehicle.freight_trains);
DrawString(x, y + 2, FreightWagonMult(i) > 1 ? STR_TOTAL_CAPACITY_MULT : STR_TOTAL_CAPACITY, TC_FROMSTRING);
}
}
diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp
index 1942c48b8..2ff5ba9a3 100644
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -249,7 +249,7 @@ void PlaceTreesRandomly()
if (CanPlantTreesOnTile(tile, true)) {
PlaceTree(tile, r);
- if (_patches.tree_placer != TP_IMPROVED) continue;
+ if (_settings.game_creation.tree_placer != TP_IMPROVED) continue;
/* Place a number of trees based on the tile height.
* This gives a cool effect of multiple trees close together.
@@ -296,11 +296,11 @@ void GenerateTrees()
{
uint i, total;
- if (_patches.tree_placer == TP_NONE) return;
+ if (_settings.game_creation.tree_placer == TP_NONE) return;
if (_opt.landscape != LT_TOYLAND) PlaceMoreTrees();
- switch (_patches.tree_placer) {
+ switch (_settings.game_creation.tree_placer) {
case TP_ORIGINAL: i = _opt.landscape == LT_ARCTIC ? 15 : 6; break;
case TP_IMPROVED: i = _opt.landscape == LT_ARCTIC ? 4 : 2; break;
default: NOT_REACHED(); return;
@@ -390,7 +390,7 @@ CommandCost CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
}
if (_game_mode != GM_EDITOR && IsValidPlayer(_current_player)) {
- Town *t = ClosestTownFromTile(tile, _patches.dist_local_authority);
+ Town *t = ClosestTownFromTile(tile, _settings.economy.dist_local_authority);
if (t != NULL) ChangeTownRating(t, RATING_TREE_UP_STEP, RATING_TREE_MAXIMUM);
}
@@ -533,7 +533,7 @@ static CommandCost ClearTile_Trees(TileIndex tile, byte flags)
uint num;
if (IsValidPlayer(_current_player)) {
- Town *t = ClosestTownFromTile(tile, _patches.dist_local_authority);
+ Town *t = ClosestTownFromTile(tile, _settings.economy.dist_local_authority);
if (t != NULL) ChangeTownRating(t, RATING_TREE_DOWN_STEP, RATING_TREE_MINIMUM);
}
diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp
index ab2be0741..d1f1b3c87 100644
--- a/src/tunnelbridge_cmd.cpp
+++ b/src/tunnelbridge_cmd.cpp
@@ -169,7 +169,7 @@ bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len)
if (b->avail_year > _cur_year) return false;
max = b->max_length;
- if (max >= 16 && _patches.longbridges) max = 100;
+ if (max >= 16 && _settings.construction.longbridges) max = 100;
return b->min_length <= bridge_len && bridge_len <= max;
}
@@ -311,7 +311,7 @@ CommandCost CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p
} else {
/* Build a new bridge. */
- bool allow_on_slopes = (!_is_old_ai_player && _patches.build_on_slopes);
+ bool allow_on_slopes = (!_is_old_ai_player && _settings.construction.build_on_slopes);
/* Try and clear the start landscape */
ret = DoCommand(tile_start, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
@@ -576,7 +576,7 @@ static inline bool CheckAllowRemoveTunnelBridge(TileIndex tile)
/* Obviously if the bridge/tunnel belongs to us, or no-one, we can remove it */
if (CheckTileOwnership(tile) || IsTileOwner(tile, OWNER_NONE)) return true;
/* Otherwise we can only remove town-owned stuff with extra patch-settings, or cheat */
- if (IsTileOwner(tile, OWNER_TOWN) && (_patches.extra_dynamite || _cheats.magic_bulldozer.value)) return true;
+ if (IsTileOwner(tile, OWNER_TOWN) && (_settings.construction.extra_dynamite || _cheats.magic_bulldozer.value)) return true;
return false;
}
@@ -1123,7 +1123,7 @@ void DrawBridgeMiddle(const TileInfo* ti)
DrawGroundSpriteAt(image, pal, x, y, z);
}
- } else if (_patches.bridge_pillars) {
+ } else if (_settings.gui.bridge_pillars) {
/* draw pillars below for high bridges */
DrawBridgePillars(psid, ti, axis, type, x, y, z);
}
@@ -1388,7 +1388,7 @@ static VehicleEnterTileStatus VehicleEnter_TunnelBridge(Vehicle *v, TileIndex ti
static CommandCost TerraformTile_TunnelBridge(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
- if (_patches.build_on_slopes && AutoslopeEnabled() && IsBridge(tile)) {
+ if (_settings.construction.build_on_slopes && AutoslopeEnabled() && IsBridge(tile)) {
DiagDirection direction = GetTunnelBridgeDirection(tile);
Axis axis = DiagDirToAxis(direction);
CommandCost res;
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index e8793a126..bdfef2aa4 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -127,20 +127,20 @@ bool Vehicle::NeedsServicing() const
{
if (this->vehstatus & (VS_STOPPED | VS_CRASHED)) return false;
- if (_patches.no_servicing_if_no_breakdowns && _opt.diff.vehicle_breakdowns == 0) {
+ if (_settings.order.no_servicing_if_no_breakdowns && _opt.diff.vehicle_breakdowns == 0) {
/* Vehicles set for autoreplacing needs to go to a depot even if breakdowns are turned off.
* Note: If servicing is enabled, we postpone replacement till next service. */
return EngineHasReplacementForPlayer(GetPlayer(this->owner), this->engine_type, this->group_id);
}
- return _patches.servint_ispercent ?
+ return _settings.vehicle.servint_ispercent ?
(this->reliability < GetEngine(this->engine_type)->reliability * (100 - this->service_interval) / 100) :
(this->date_of_last_service + this->service_interval < _date);
}
bool Vehicle::NeedsAutomaticServicing() const
{
- if (_patches.gotodepot && VehicleHasDepotOrders(this)) return false;
+ if (_settings.order.gotodepot && VehicleHasDepotOrders(this)) return false;
if (this->current_order.IsType(OT_LOADING)) return false;
if (this->current_order.IsType(OT_GOTO_DEPOT) && this->current_order.GetDepotOrderType() != ODTFB_SERVICE) return false;
return NeedsServicing();
@@ -1855,10 +1855,10 @@ UnitID GetFreeUnitNumber(VehicleType type)
static UnitID gmax = 0;
switch (type) {
- case VEH_TRAIN: max = _patches.max_trains; break;
- case VEH_ROAD: max = _patches.max_roadveh; break;
- case VEH_SHIP: max = _patches.max_ships; break;
- case VEH_AIRCRAFT: max = _patches.max_aircraft; break;
+ case VEH_TRAIN: max = _settings.vehicle.max_trains; break;
+ case VEH_ROAD: max = _settings.vehicle.max_roadveh; break;
+ case VEH_SHIP: max = _settings.vehicle.max_ships; break;
+ case VEH_AIRCRAFT: max = _settings.vehicle.max_aircraft; break;
default: NOT_REACHED();
}
@@ -1908,14 +1908,14 @@ bool CanBuildVehicleInfrastructure(VehicleType type)
assert(IsPlayerBuildableVehicleType(type));
if (!IsValidPlayer(_current_player)) return false;
- if (_patches.always_build_infrastructure) return true;
+ if (_settings.gui.always_build_infrastructure) return true;
UnitID max;
switch (type) {
- case VEH_TRAIN: max = _patches.max_trains; break;
- case VEH_ROAD: max = _patches.max_roadveh; break;
- case VEH_SHIP: max = _patches.max_ships; break;
- case VEH_AIRCRAFT: max = _patches.max_aircraft; break;
+ case VEH_TRAIN: max = _settings.vehicle.max_trains; break;
+ case VEH_ROAD: max = _settings.vehicle.max_roadveh; break;
+ case VEH_SHIP: max = _settings.vehicle.max_ships; break;
+ case VEH_AIRCRAFT: max = _settings.vehicle.max_aircraft; break;
default: NOT_REACHED();
}
@@ -1947,7 +1947,7 @@ const Livery *GetEngineLivery(EngineID engine_type, PlayerID player, EngineID pa
/* The default livery is always available for use, but its in_use flag determines
* whether any _other_ liveries are in use. */
- if (p->livery[LS_DEFAULT].in_use && (_patches.liveries == 2 || (_patches.liveries == 1 && player == _local_player))) {
+ if (p->livery[LS_DEFAULT].in_use && (_settings.gui.liveries == 2 || (_settings.gui.liveries == 1 && player == _local_player))) {
/* Determine the livery scheme to use */
switch (GetEngine(engine_type)->type) {
default: NOT_REACHED();
@@ -2514,7 +2514,7 @@ void Vehicle::HandleLoading(bool mode)
/* Not the first call for this tick, or still loading */
if (mode || !HasBit(this->vehicle_flags, VF_LOADING_FINISHED) ||
- (_patches.timetabling && this->current_order_time < wait_time)) return;
+ (_settings.order.timetabling && this->current_order_time < wait_time)) return;
this->PlayLeaveStationSound();
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index ac745309b..2ddd3e68c 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -1220,12 +1220,12 @@ static void ShowVehicleListWindowLocal(PlayerID player, uint16 VLW_flag, Vehicle
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type)
{
- /* If _patches.advanced_vehicle_list > 1, display the Advanced list
- * if _patches.advanced_vehicle_list == 1, display Advanced list only for local player
+ /* If _settings.gui.advanced_vehicle_list > 1, display the Advanced list
+ * if _settings.gui.advanced_vehicle_list == 1, display Advanced list only for local player
* if _ctrl_pressed, do the opposite action (Advanced list x Normal list)
*/
- if ((_patches.advanced_vehicle_list > (uint)(player != _local_player)) != _ctrl_pressed) {
+ if ((_settings.gui.advanced_vehicle_list > (uint)(player != _local_player)) != _ctrl_pressed) {
ShowPlayerGroup(player, vehicle_type);
} else {
ShowVehicleListWindowLocal(player, VLW_STANDARD, vehicle_type, 0);
@@ -1411,10 +1411,10 @@ struct VehicleDetailsWindow : Window {
{
switch (vehicle_type) {
default: NOT_REACHED();
- case VEH_TRAIN: return _patches.servint_trains != 0; break;
- case VEH_ROAD: return _patches.servint_roadveh != 0; break;
- case VEH_SHIP: return _patches.servint_ships != 0; break;
- case VEH_AIRCRAFT: return _patches.servint_aircraft != 0; break;
+ case VEH_TRAIN: return _settings.vehicle.servint_trains != 0; break;
+ case VEH_ROAD: return _settings.vehicle.servint_roadveh != 0; break;
+ case VEH_SHIP: return _settings.vehicle.servint_ships != 0; break;
+ case VEH_AIRCRAFT: return _settings.vehicle.servint_aircraft != 0; break;
}
return false; // kill a compiler warning
}
@@ -1486,7 +1486,7 @@ struct VehicleDetailsWindow : Window {
SetDParam(1, v->u.rail.cached_power);
SetDParam(0, v->u.rail.cached_weight);
SetDParam(3, v->u.rail.cached_max_te / 1000);
- DrawString(2, 25, (_patches.realistic_acceleration && v->u.rail.railtype != RAILTYPE_MAGLEV) ?
+ DrawString(2, 25, (_settings.vehicle.realistic_acceleration && v->u.rail.railtype != RAILTYPE_MAGLEV) ?
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, TC_FROMSTRING);
break;
@@ -1514,7 +1514,7 @@ struct VehicleDetailsWindow : Window {
/* Draw service interval text */
SetDParam(0, v->service_interval);
SetDParam(1, v->date_of_last_service);
- DrawString(13, this->height - (v->type != VEH_TRAIN ? 11 : 23), _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, TC_FROMSTRING);
+ DrawString(13, this->height - (v->type != VEH_TRAIN ? 11 : 23), _settings.vehicle.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, TC_FROMSTRING);
switch (v->type) {
case VEH_TRAIN:
@@ -1953,7 +1953,7 @@ struct VehicleViewWindow : Window {
}
} else {
SetDParam(0, v->GetDisplaySpeed());
- str = STR_TRAIN_STOPPING + _patches.vehicle_speed;
+ str = STR_TRAIN_STOPPING + _settings.gui.vehicle_speed;
}
} else { // no train
str = STR_8861_STOPPED;
@@ -1963,7 +1963,7 @@ struct VehicleViewWindow : Window {
case OT_GOTO_STATION: {
SetDParam(0, v->current_order.GetDestination());
SetDParam(1, v->GetDisplaySpeed());
- str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
+ str = STR_HEADING_FOR_STATION + _settings.gui.vehicle_speed;
} break;
case OT_GOTO_DEPOT: {
@@ -1977,9 +1977,9 @@ struct VehicleViewWindow : Window {
SetDParam(1, v->GetDisplaySpeed());
}
if ((v->current_order.GetDepotActionType() & ODATFB_HALT) && !(v->current_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) {
- str = _heading_for_depot_strings[v->type] + _patches.vehicle_speed;
+ str = _heading_for_depot_strings[v->type] + _settings.gui.vehicle_speed;
} else {
- str = _heading_for_depot_service_strings[v->type] + _patches.vehicle_speed;
+ str = _heading_for_depot_service_strings[v->type] + _settings.gui.vehicle_speed;
}
} break;
@@ -1990,7 +1990,7 @@ struct VehicleViewWindow : Window {
case OT_GOTO_WAYPOINT: {
assert(v->type == VEH_TRAIN);
SetDParam(0, v->current_order.GetDestination());
- str = STR_HEADING_FOR_WAYPOINT + _patches.vehicle_speed;
+ str = STR_HEADING_FOR_WAYPOINT + _settings.gui.vehicle_speed;
SetDParam(1, v->GetDisplaySpeed());
break;
}
@@ -2004,7 +2004,7 @@ struct VehicleViewWindow : Window {
default:
if (v->num_orders == 0) {
- str = STR_NO_ORDERS + _patches.vehicle_speed;
+ str = STR_NO_ORDERS + _settings.gui.vehicle_speed;
SetDParam(0, v->GetDisplaySpeed());
} else {
str = STR_EMPTY;
diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm
index 4f92621be..21c31c7c4 100644
--- a/src/video/cocoa/event.mm
+++ b/src/video/cocoa/event.mm
@@ -288,9 +288,9 @@ static uint32 QZ_MapKey(unsigned short sym)
}
if (_current_mods & NSShiftKeyMask) key |= WKC_SHIFT;
- if (_current_mods & NSControlKeyMask) key |= (_patches.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
+ if (_current_mods & NSControlKeyMask) key |= (_settings.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
if (_current_mods & NSAlternateKeyMask) key |= WKC_ALT;
- if (_current_mods & NSCommandKeyMask) key |= (_patches.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
+ if (_current_mods & NSCommandKeyMask) key |= (_settings.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
return key << 16;
}
@@ -459,8 +459,8 @@ static bool QZ_PollEvent()
case NSLeftMouseDown:
{
uint32 keymask = 0;
- if (_patches.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSCommandKeyMask;
- if (_patches.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSControlKeyMask;
+ if (_settings.gui.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSCommandKeyMask;
+ if (_settings.gui.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSControlKeyMask;
pt = _cocoa_subdriver->GetMouseLocation(event);
@@ -602,8 +602,8 @@ static bool QZ_PollEvent()
} /* else: deltaY was 0.0 and we don't want to do anything */
/* Set the scroll count for scrollwheel scrolling */
- _cursor.h_wheel -= (int)([ event deltaX ]* 5 * _patches.scrollwheel_multiplier);
- _cursor.v_wheel -= (int)([ event deltaY ]* 5 * _patches.scrollwheel_multiplier);
+ _cursor.h_wheel -= (int)([ event deltaX ]* 5 * _settings.gui.scrollwheel_multiplier);
+ _cursor.v_wheel -= (int)([ event deltaY ]* 5 * _settings.gui.scrollwheel_multiplier);
break;
default:
@@ -671,7 +671,7 @@ void QZ_GameLoop()
bool old_ctrl_pressed = _ctrl_pressed;
- _ctrl_pressed = !!(_current_mods & ( _patches.right_mouse_btn_emulation != RMBE_CONTROL ? NSControlKeyMask : NSCommandKeyMask));
+ _ctrl_pressed = !!(_current_mods & ( _settings.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSControlKeyMask : NSCommandKeyMask));
_shift_pressed = !!(_current_mods & NSShiftKeyMask);
if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged();
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 030bdff17..51eee159e 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1020,7 +1020,7 @@ static void ViewportAddTownNames(DrawPixelInfo *dpi)
right > t->sign.left &&
left < t->sign.left + t->sign.width_1) {
AddStringToDraw(t->sign.left + 1, t->sign.top + 1,
- _patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
+ _settings.gui.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
t->index, t->population);
}
}
@@ -1036,7 +1036,7 @@ static void ViewportAddTownNames(DrawPixelInfo *dpi)
right > t->sign.left &&
left < t->sign.left + t->sign.width_1 * 2) {
AddStringToDraw(t->sign.left + 1, t->sign.top + 1,
- _patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
+ _settings.gui.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
t->index, t->population);
}
}
@@ -1591,7 +1591,7 @@ void UpdateViewportPosition(Window *w)
int delta_y = w->viewport->dest_scrollpos_y - w->viewport->scrollpos_y;
if (delta_x != 0 || delta_y != 0) {
- if (_patches.smooth_scroll) {
+ if (_settings.gui.smooth_scroll) {
int max_scroll = ScaleByMapSize1D(512);
/* Not at our desired positon yet... */
w->viewport->scrollpos_x += Clamp(delta_x / 4, -max_scroll, max_scroll);
@@ -2510,7 +2510,7 @@ static void CalcRaildirsDrawstyle(TileHighlightData *thd, int x, int y, int meth
}
}
- if (_patches.measure_tooltip) {
+ if (_settings.gui.measure_tooltip) {
TileIndex t0 = TileVirtXY(thd->selstart.x, thd->selstart.y);
TileIndex t1 = TileVirtXY(x, y);
uint distance = DistanceManhattan(t0, t1) + 1;
@@ -2590,7 +2590,7 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method)
style = HT_DIR_X;
calc_heightdiff_single_direction:;
- if (_patches.measure_tooltip) {
+ if (_settings.gui.measure_tooltip) {
TileIndex t0 = TileVirtXY(sx, sy);
TileIndex t1 = TileVirtXY(x, y);
uint distance = DistanceManhattan(t0, t1) + 1;
@@ -2618,7 +2618,7 @@ calc_heightdiff_single_direction:;
y = sy + Clamp(y - sy, -limit, limit);
} /* Fallthrough */
case VPM_X_AND_Y: { /* drag an X by Y area */
- if (_patches.measure_tooltip) {
+ if (_settings.gui.measure_tooltip) {
static const StringID measure_strings_area[] = {
STR_NULL, STR_NULL, STR_MEASURE_AREA, STR_MEASURE_AREA_HEIGHTDIFF
};
diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp
index d2afac4f4..7f41eba26 100644
--- a/src/water_cmd.cpp
+++ b/src/water_cmd.cpp
@@ -771,7 +771,7 @@ static Vehicle *FindFloodableVehicleOnTile(TileIndex tile)
}
/* if non-uniform stations are disabled, flood some train in this train station (if there is any) */
- if (!_patches.nonuniform_stations && IsTileType(tile, MP_STATION) && GetStationType(tile) == STATION_RAIL) {
+ if (!_settings.station.nonuniform_stations && IsTileType(tile, MP_STATION) && GetStationType(tile) == STATION_RAIL) {
const Station *st = GetStationByTile(tile);
BEGIN_TILE_LOOP(t, st->trainst_w, st->trainst_h, st->train_tile)
diff --git a/src/waypoint.cpp b/src/waypoint.cpp
index 8cf8880c1..92a52664b 100644
--- a/src/waypoint.cpp
+++ b/src/waypoint.cpp
@@ -210,7 +210,7 @@ CommandCost CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint3
tileh = GetTileSlope(tile, NULL);
if (tileh != SLOPE_FLAT &&
- (!_patches.build_on_slopes || IsSteepSlope(tileh) || !(tileh & (0x3 << axis)) || !(tileh & ~(0x3 << axis)))) {
+ (!_settings.construction.build_on_slopes || IsSteepSlope(tileh) || !(tileh & (0x3 << axis)) || !(tileh & ~(0x3 << axis)))) {
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
}
diff --git a/src/window.cpp b/src/window.cpp
index c5d127538..280ed78a8 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1217,11 +1217,11 @@ static bool HandleWindowDragging()
int nx = x;
int ny = y;
- if (_patches.window_snap_radius != 0) {
+ if (_settings.gui.window_snap_radius != 0) {
Window* const *vz;
- int hsnap = _patches.window_snap_radius;
- int vsnap = _patches.window_snap_radius;
+ int hsnap = _settings.gui.window_snap_radius;
+ int vsnap = _settings.gui.window_snap_radius;
int delta;
FOR_ALL_WINDOWS(vz) {
@@ -1467,7 +1467,7 @@ static bool HandleScrollbarScrolling()
static bool HandleViewportScroll()
{
- bool scrollwheel_scrolling = _patches.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
+ bool scrollwheel_scrolling = _settings.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
if (!_scrolling_viewport) return true;
@@ -1487,7 +1487,7 @@ static bool HandleViewportScroll()
}
Point delta;
- if (_patches.reverse_scroll) {
+ if (_settings.gui.reverse_scroll) {
delta.x = -_cursor.delta.x;
delta.y = -_cursor.delta.y;
} else {
@@ -1667,7 +1667,7 @@ static void HandleAutoscroll()
return;
}
- if (_patches.autoscroll && _game_mode != GM_MENU && !IsGeneratingWorld()) {
+ if (_settings.gui.autoscroll && _game_mode != GM_MENU && !IsGeneratingWorld()) {
int x = _cursor.pos.x;
int y = _cursor.pos.y;
Window *w = FindWindowFromPt(x, y);
@@ -1719,7 +1719,7 @@ void MouseLoop(MouseClick click, int mousewheel)
if (!HandleViewportScroll()) return;
if (!HandleMouseOver()) return;
- bool scrollwheel_scrolling = _patches.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
+ bool scrollwheel_scrolling = _settings.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
if (click == MC_NONE && mousewheel == 0 && !scrollwheel_scrolling) return;
int x = _cursor.pos.x;
@@ -1734,7 +1734,7 @@ void MouseLoop(MouseClick click, int mousewheel)
if (vp != NULL && (_game_mode == GM_MENU || IsGeneratingWorld())) return;
if (mousewheel != 0) {
- if (_patches.scrollwheel_scrolling == 0) {
+ if (_settings.gui.scrollwheel_scrolling == 0) {
/* Send mousewheel event to window */
w->OnMouseWheel(mousewheel);
}
@@ -2059,7 +2059,7 @@ int PositionMainToolbar(Window *w)
w = FindWindowById(WC_MAIN_TOOLBAR, 0);
}
- switch (_patches.toolbar_pos) {
+ switch (_settings.gui.toolbar_pos) {
case 1: w->left = (_screen.width - w->width) / 2; break;
case 2: w->left = _screen.width - w->width; break;
default: w->left = 0;
diff --git a/src/yapf/yapf_base.hpp b/src/yapf/yapf_base.hpp
index f83ecbb20..7ccd4ebf5 100644
--- a/src/yapf/yapf_base.hpp
+++ b/src/yapf/yapf_base.hpp
@@ -6,6 +6,7 @@
#define YAPF_BASE_HPP
#include "../debug.h"
+#include "../settings_type.h"
extern int _total_pf_time_us;
@@ -52,7 +53,7 @@ public:
protected:
Node* m_pBestDestNode; ///< pointer to the destination node found at last round
Node* m_pBestIntermediateNode; ///< here should be node closest to the destination if path not found
- const YapfSettings *m_settings; ///< current settings (_patches.yapf)
+ const YAPFSettings *m_settings; ///< current settings (_settings.yapf)
int m_max_search_nodes; ///< maximum number of nodes we are allowed to visit before we give up
const Vehicle* m_veh; ///< vehicle that we are trying to drive
@@ -73,7 +74,7 @@ public:
FORCEINLINE CYapfBaseT()
: m_pBestDestNode(NULL)
, m_pBestIntermediateNode(NULL)
- , m_settings(&_patches.yapf)
+ , m_settings(&_settings.pf.yapf)
, m_max_search_nodes(PfGetSettings().max_search_nodes)
, m_veh(NULL)
, m_stats_cost_calcs(0)
@@ -91,7 +92,7 @@ protected:
public:
/// return current settings (can be custom - player based - but later)
- FORCEINLINE const YapfSettings& PfGetSettings() const
+ FORCEINLINE const YAPFSettings& PfGetSettings() const
{
return *m_settings;
}
diff --git a/src/yapf/yapf_rail.cpp b/src/yapf/yapf_rail.cpp
index ffbb1a2c1..2651a9df4 100644
--- a/src/yapf/yapf_rail.cpp
+++ b/src/yapf/yapf_rail.cpp
@@ -254,7 +254,7 @@ Trackdir YapfChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir,
PfnChooseRailTrack pfnChooseRailTrack = &CYapfRail1::stChooseRailTrack;
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg) {
+ if (_settings.pf.forbid_90_deg) {
pfnChooseRailTrack = &CYapfRail2::stChooseRailTrack; // Trackdir, forbid 90-deg
}
@@ -311,7 +311,7 @@ bool YapfCheckReverseTrain(Vehicle* v)
PfnCheckReverseTrain pfnCheckReverseTrain = CYapfRail1::stCheckReverseTrain;
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg) {
+ if (_settings.pf.forbid_90_deg) {
pfnCheckReverseTrain = &CYapfRail2::stCheckReverseTrain; // Trackdir, forbid 90-deg
}
@@ -341,7 +341,7 @@ bool YapfFindNearestRailDepotTwoWay(Vehicle *v, int max_distance, int reverse_pe
PfnFindNearestDepotTwoWay pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail1::stFindNearestDepotTwoWay;
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg) {
+ if (_settings.pf.forbid_90_deg) {
pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail2::stFindNearestDepotTwoWay; // Trackdir, forbid 90-deg
}
diff --git a/src/yapf/yapf_road.cpp b/src/yapf/yapf_road.cpp
index 8f775bc3c..6234a7e63 100644
--- a/src/yapf/yapf_road.cpp
+++ b/src/yapf/yapf_road.cpp
@@ -407,7 +407,7 @@ Trackdir YapfChooseRoadTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir)
PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir, allow 90-deg
// check if non-default YAPF type should be used
- if (_patches.yapf.disable_node_optimization)
+ if (_settings.pf.yapf.disable_node_optimization)
pfnChooseRoadTrack = &CYapfRoad1::stChooseRoadTrack; // Trackdir, allow 90-deg
Trackdir td_ret = pfnChooseRoadTrack(v, tile, enterdir);
@@ -421,7 +421,7 @@ uint YapfRoadVehDistanceToTile(const Vehicle* v, TileIndex tile)
PfnDistanceToTile pfnDistanceToTile = &CYapfRoad2::stDistanceToTile; // default: ExitDir, allow 90-deg
// check if non-default YAPF type should be used
- if (_patches.yapf.disable_node_optimization)
+ if (_settings.pf.yapf.disable_node_optimization)
pfnDistanceToTile = &CYapfRoad1::stDistanceToTile; // Trackdir, allow 90-deg
// measure distance in YAPF units
@@ -450,7 +450,7 @@ Depot* YapfFindNearestRoadDepot(const Vehicle *v)
PfnFindNearestDepot pfnFindNearestDepot = &CYapfRoadAnyDepot2::stFindNearestDepot;
// check if non-default YAPF type should be used
- if (_patches.yapf.disable_node_optimization)
+ if (_settings.pf.yapf.disable_node_optimization)
pfnFindNearestDepot = &CYapfRoadAnyDepot1::stFindNearestDepot; // Trackdir, allow 90-deg
Depot* ret = pfnFindNearestDepot(v, tile, trackdir);
diff --git a/src/yapf/yapf_settings.h b/src/yapf/yapf_settings.h
deleted file mode 100644
index 18f7947b8..000000000
--- a/src/yapf/yapf_settings.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* $Id$ */
-
-/** @file yapf_settings.h Penalty settings for YAPF. */
-
-#if !defined(YAPF_SETTINGS_H) || defined(YS_DEF)
-
-# ifndef YAPF_SETTINGS_H
-# define YAPF_SETTINGS_H
-# endif
-
-# ifndef YS_DEF
-/*
- * if YS_DEF is not defined, we will only do following declaration:
- * struct YapfSettings {
- * bool disable_node_optimization;
- * uint32 max_search_nodes;
- * .... all other yapf related settings ...
- * };
- *
- * otherwise we will just expand YS_DEF_xx macros and then #undef them
- */
-# define YS_DEF_BEGIN struct YapfSettings {
-# define YS_DEF(type, name) type name;
-# define YS_DEF_END };
-
-# endif /* !YS_DEF */
-
-# ifndef YS_DEF_BEGIN
-# define YS_DEF_BEGIN
-# endif // YS_DEF_BEGIN
-
-# ifndef YS_DEF_END
-# define YS_DEF_END
-# endif // YS_DEF_END
-
-YS_DEF_BEGIN
- YS_DEF(bool , disable_node_optimization) ///< whether to use exit-dir instead of trackdir in node key
- YS_DEF(uint32, max_search_nodes) ///< stop path-finding when this number of nodes visited
- YS_DEF(bool , ship_use_yapf) ///< use YAPF for ships
- YS_DEF(bool , road_use_yapf) ///< use YAPF for road
- YS_DEF(bool , rail_use_yapf) ///< use YAPF for rail
- YS_DEF(uint32, road_slope_penalty) ///< penalty for up-hill slope
- YS_DEF(uint32, road_curve_penalty) ///< penalty for curves
- YS_DEF(uint32, road_crossing_penalty) ///< penalty for level crossing
- YS_DEF(uint32, road_stop_penalty) ///< penalty for going through a drive-through road stop
- YS_DEF(bool , rail_firstred_twoway_eol) ///< treat first red two-way signal as dead end
- YS_DEF(uint32, rail_firstred_penalty) ///< penalty for first red signal
- YS_DEF(uint32, rail_firstred_exit_penalty) ///< penalty for first red exit signal
- YS_DEF(uint32, rail_lastred_penalty) ///< penalty for last red signal
- YS_DEF(uint32, rail_lastred_exit_penalty) ///< penalty for last red exit signal
- YS_DEF(uint32, rail_station_penalty) ///< penalty for non-target station tile
- YS_DEF(uint32, rail_slope_penalty) ///< penalty for up-hill slope
- YS_DEF(uint32, rail_curve45_penalty) ///< penalty for curve
- YS_DEF(uint32, rail_curve90_penalty) ///< penalty for 90-deg curve
- YS_DEF(uint32, rail_depot_reverse_penalty) ///< penalty for reversing in the depot
- YS_DEF(uint32, rail_crossing_penalty) ///< penalty for level crossing
- YS_DEF(uint32, rail_look_ahead_max_signals)///< max. number of signals taken into consideration in look-ahead load balancer
- YS_DEF(int32 , rail_look_ahead_signal_p0) ///< constant in polynomial penalty function
- YS_DEF(int32 , rail_look_ahead_signal_p1) ///< constant in polynomial penalty function
- YS_DEF(int32 , rail_look_ahead_signal_p2) ///< constant in polynomial penalty function
-
- YS_DEF(uint32, rail_longer_platform_penalty) ///< penalty for longer station platform than train
- YS_DEF(uint32, rail_longer_platform_per_tile_penalty) ///< penalty for longer station platform than train (per tile)
- YS_DEF(uint32, rail_shorter_platform_penalty) ///< penalty for shorter station platform than train
- YS_DEF(uint32, rail_shorter_platform_per_tile_penalty) ///< penalty for shorter station platform than train (per tile)
-YS_DEF_END
-
-#undef YS_DEF_BEGIN
-#undef YS_DEF
-#undef YS_DEF_END
-
-#endif /* !YAPF_SETTINGS_H || YS_DEF */
diff --git a/src/yapf/yapf_ship.cpp b/src/yapf/yapf_ship.cpp
index 9a6f57123..bd433d84d 100644
--- a/src/yapf/yapf_ship.cpp
+++ b/src/yapf/yapf_ship.cpp
@@ -154,9 +154,9 @@ Trackdir YapfChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir,
PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir, allow 90-deg
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg)
+ if (_settings.pf.forbid_90_deg)
pfnChooseShipTrack = &CYapfShip3::ChooseShipTrack; // Trackdir, forbid 90-deg
- else if (_patches.yapf.disable_node_optimization)
+ else if (_settings.pf.yapf.disable_node_optimization)
pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir, allow 90-deg
Trackdir td_ret = pfnChooseShipTrack(v, tile, enterdir, tracks);