diff options
Diffstat (limited to 'openttd-git')
-rw-r--r-- | openttd-git/PKGBUILD | 8 | ||||
-rw-r--r-- | openttd-git/signaltunnel.patch | 50 | ||||
-rw-r--r-- | openttd-git/sloped-stations.patch | 58 | ||||
-rw-r--r-- | openttd-git/underground.patch | 300 |
4 files changed, 211 insertions, 205 deletions
diff --git a/openttd-git/PKGBUILD b/openttd-git/PKGBUILD index 4917012ae..941b2e704 100644 --- a/openttd-git/PKGBUILD +++ b/openttd-git/PKGBUILD @@ -1,6 +1,6 @@ # Maintainer: Erich Eckner <arch at eckner dot net> pkgname=openttd-git -pkgver=28924.14dc8dd61 +pkgver=28934.672c857e3 _commit=${pkgver#*.} pkgrel=1 pkgdesc="A FOSS clone of Transport Tycoon Deluxe." @@ -39,9 +39,9 @@ source=( "underground.patch" ) sha512sums=('SKIP' - '51e4205b5fc0f761b76a21508888f5e680f60fadccd8bbcd654b82e060c6ffa4d6787ea9bf3c45cb398a5cfcf9c77f649cb4c258f4c563204d6549c6d90e8103' - '6af30d34f88ffbec9220bf778497135be35f09b04c6a51f95b9b4d5e261ed6ca83b34980e54155ea6f1da00556f85c1e9bd50edcce2b1cca5061882194b32908' - '7bb8aa987eea963c03fc0cfa0d7a420f178a094c01df6151b6b4a55eca9a07a4fa28aacdf209745bc7b886ed315c7235d5849f961c2bbad0a049844a4cefe6ac') + '1f39b62ae364af2cade736218108a4e51af99c223a2c6e2072b22f26bd78a4a76f9c4246d5d089943f7243a95f2e40005f99b8ed8af7d435f025d66ae0565d32' + '15ca28a0d4225084174c7ad7280c95183ee322ee7cda6eb2b0d907f66be24f1b92ab2bf8fd66b102b8b1047ec446d518e33e0328a72196ea1882a26b069beb37' + '182304737c1467e4a3fdc45275c7abe31b72520bf098eb554fa1354209709e043cb1625a7bfd71becf74a0362e8ed064b7e6fe171db0bf753464953aeaa0835e') pkgver() { printf '%s.%s\n' \ diff --git a/openttd-git/signaltunnel.patch b/openttd-git/signaltunnel.patch index 60e0de7da..2b816fa53 100644 --- a/openttd-git/signaltunnel.patch +++ b/openttd-git/signaltunnel.patch @@ -1,8 +1,8 @@ diff --git a/src/lang/english.txt b/src/lang/english.txt -index 83a28d8cdc..fce2152428 100644 +index 9641ecc041..74b212dec2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt -@@ -1550,6 +1550,8 @@ STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying sh +@@ -1552,6 +1552,8 @@ STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying sh STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of leg profit to pay in feeder systems: {STRING2} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage of income given to the intermediate legs in feeder systems, giving more control over the income @@ -11,7 +11,7 @@ index 83a28d8cdc..fce2152428 100644 STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :When dragging, place signals every: {STRING2} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Set the distance at which signals will be built on a track up to the next obstacle (signal, junction), if signals are dragged STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tile{P 0 "" s} -@@ -2687,8 +2689,10 @@ STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Ship depot +@@ -2697,8 +2699,10 @@ STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Ship depot # Industries come directly from their industry names STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Railway tunnel @@ -23,7 +23,7 @@ index 83a28d8cdc..fce2152428 100644 STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Steel girder rail bridge STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Steel cantilever rail bridge diff --git a/src/lang/russian.txt b/src/lang/russian.txt -index 926420e850..10a488f1af 100644 +index 3a201d14c2..e6e88ac5f6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1702,6 +1702,8 @@ STR_CONFIG_SETTING_ALLOW_SHARES :Разреши @@ -47,10 +47,10 @@ index 926420e850..10a488f1af 100644 STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Стальной балочный ж/д мост STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Стальной консольный ж/д мост diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp -index 999f7f94de..728e252f94 100644 +index 31a7816509..3442e6f796 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp -@@ -360,7 +360,7 @@ protected: +@@ -372,7 +372,7 @@ protected: if (IsTunnel(m_new_tile)) { if (!m_is_tunnel) { DiagDirection tunnel_enterdir = GetTunnelBridgeDirection(m_new_tile); @@ -59,7 +59,7 @@ index 999f7f94de..728e252f94 100644 m_err = EC_NO_WAY; return false; } -@@ -368,7 +368,7 @@ protected: +@@ -380,7 +380,7 @@ protected: } else { // IsBridge(m_new_tile) if (!m_is_bridge) { DiagDirection ramp_enderdir = GetTunnelBridgeDirection(m_new_tile); @@ -69,10 +69,10 @@ index 999f7f94de..728e252f94 100644 return false; } diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp -index 0804a4d14a..9c44d4bdd0 100644 +index ab87fc40fd..ad0e91163a 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp -@@ -1048,9 +1048,12 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, +@@ -1056,9 +1056,12 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, if (sigtype > SIGTYPE_LAST) return CMD_ERROR; if (cycle_start > cycle_stop || cycle_stop > SIGTYPE_LAST) return CMD_ERROR; @@ -88,7 +88,7 @@ index 0804a4d14a..9c44d4bdd0 100644 return_cmd_error(STR_ERROR_THERE_IS_NO_RAILROAD_TRACK); } /* Protect against invalid signal copying */ -@@ -1059,6 +1062,53 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, +@@ -1067,6 +1070,53 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, CommandCost ret = CheckTileOwnership(tile); if (ret.Failed()) return ret; @@ -142,7 +142,7 @@ index 0804a4d14a..9c44d4bdd0 100644 /* See if this is a valid track combination for signals (no overlap) */ if (TracksOverlap(GetTrackBits(tile))) return_cmd_error(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK); -@@ -1068,7 +1118,6 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, +@@ -1076,7 +1126,6 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, /* you can not convert a signal if no signal is on track */ if (convert_signal && !HasSignalOnTrack(tile, track)) return_cmd_error(STR_ERROR_THERE_ARE_NO_SIGNALS); @@ -150,7 +150,7 @@ index 0804a4d14a..9c44d4bdd0 100644 if (!HasSignalOnTrack(tile, track)) { /* build new signals */ cost = CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_SIGNALS]); -@@ -1226,6 +1275,7 @@ static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal +@@ -1234,6 +1283,7 @@ static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal return true; case MP_TUNNELBRIDGE: { @@ -158,7 +158,7 @@ index 0804a4d14a..9c44d4bdd0 100644 TileIndex orig_tile = tile; // backup old value if (GetTunnelBridgeTransportType(tile) != TRANSPORT_RAIL) return false; -@@ -1337,7 +1387,8 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin +@@ -1345,7 +1395,8 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin bool had_success = false; for (;;) { /* only build/remove signals with the specified density */ @@ -168,7 +168,7 @@ index 0804a4d14a..9c44d4bdd0 100644 uint32 p1 = GB(TrackdirToTrack(trackdir), 0, 3); SB(p1, 3, 1, mode); SB(p1, 4, 1, semaphores); -@@ -1373,13 +1424,20 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin +@@ -1381,13 +1432,20 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin /* Collect cost. */ if (!test_only) { @@ -195,7 +195,7 @@ index 0804a4d14a..9c44d4bdd0 100644 /* The "No railway" error is the least important one. */ if (ret.GetErrorMessage() != STR_ERROR_THERE_IS_NO_RAILROAD_TRACK || last_error.GetErrorMessage() == INVALID_STRING_ID) { -@@ -1450,22 +1508,48 @@ CommandCost CmdBuildSignalTrack(TileIndex tile, DoCommandFlag flags, uint32 p1, +@@ -1458,22 +1516,48 @@ CommandCost CmdBuildSignalTrack(TileIndex tile, DoCommandFlag flags, uint32 p1, CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Track track = Extract<Track, 0, 3>(p1); @@ -251,7 +251,7 @@ index 0804a4d14a..9c44d4bdd0 100644 Train *v = nullptr; if (HasReservedTracks(tile, TrackToTrackBits(track))) { v = GetTrainForReservation(tile, track); -@@ -1501,7 +1585,7 @@ CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1 +@@ -1509,7 +1593,7 @@ CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1 MarkTileDirtyByTile(tile); } @@ -391,7 +391,7 @@ index 5e57e5216c..80ce1100a7 100644 [SDT_NULL] length = 1 diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp -index 71b34d6ba2..8ee34b5f00 100644 +index 71b34d6ba2..256982315c 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1851,6 +1851,17 @@ void ReverseTrainDirection(Train *v) @@ -663,7 +663,7 @@ index 71b34d6ba2..8ee34b5f00 100644 /* Perform look-ahead on tunnel exit. */ if (v->IsFrontEngine()) { diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp -index 78586b1a2e..89f756d17b 100644 +index 83cec4fd36..a39c4fa429 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -30,6 +30,7 @@ @@ -674,7 +674,7 @@ index 78586b1a2e..89f756d17b 100644 #include "sound_func.h" #include "tunnelbridge.h" #include "cheat_type.h" -@@ -1128,6 +1129,103 @@ static void DrawBridgeTramBits(int x, int y, int z, int offset, bool overlay, bo +@@ -1210,6 +1211,103 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off } } @@ -778,7 +778,7 @@ index 78586b1a2e..89f756d17b 100644 /** * Draws a tunnel of bridge tile. * For tunnels, this is rather simple, as you only need to draw the entrance. -@@ -1242,6 +1340,9 @@ static void DrawTile_TunnelBridge(TileInfo *ti) +@@ -1341,6 +1439,9 @@ static void DrawTile_TunnelBridge(TileInfo *ti) AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, ti->x, ti->y, BB_data[6], BB_data[7], TILE_HEIGHT, ti->z); AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, ti->x + BB_data[4], ti->y + BB_data[5], BB_data[6], BB_data[7], TILE_HEIGHT, ti->z); @@ -788,7 +788,7 @@ index 78586b1a2e..89f756d17b 100644 DrawBridgeMiddle(ti); } else { // IsBridge(ti->tile) const PalSpriteID *psid; -@@ -1349,6 +1450,9 @@ static void DrawTile_TunnelBridge(TileInfo *ti) +@@ -1446,6 +1547,9 @@ static void DrawTile_TunnelBridge(TileInfo *ti) } } @@ -798,7 +798,7 @@ index 78586b1a2e..89f756d17b 100644 DrawBridgeMiddle(ti); } } -@@ -1497,6 +1601,9 @@ void DrawBridgeMiddle(const TileInfo *ti) +@@ -1587,6 +1691,9 @@ void DrawBridgeMiddle(const TileInfo *ti) if (HasRailCatenaryDrawn(GetRailType(rampsouth))) { DrawRailCatenaryOnBridge(ti); } @@ -808,7 +808,7 @@ index 78586b1a2e..89f756d17b 100644 } /* draw roof, the component of the bridge which is logically between the vehicle and the camera */ -@@ -1585,9 +1692,9 @@ static void GetTileDesc_TunnelBridge(TileIndex tile, TileDesc *td) +@@ -1675,9 +1782,9 @@ static void GetTileDesc_TunnelBridge(TileIndex tile, TileDesc *td) TransportType tt = GetTunnelBridgeTransportType(tile); if (IsTunnel(tile)) { @@ -820,7 +820,7 @@ index 78586b1a2e..89f756d17b 100644 } td->owner[0] = GetTileOwner(tile); -@@ -1657,6 +1764,26 @@ static void TileLoop_TunnelBridge(TileIndex tile) +@@ -1760,6 +1867,26 @@ static void TileLoop_TunnelBridge(TileIndex tile) } } @@ -847,7 +847,7 @@ index 78586b1a2e..89f756d17b 100644 static TrackStatus GetTileTrackStatus_TunnelBridge(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) { TransportType transport_type = GetTunnelBridgeTransportType(tile); -@@ -1909,8 +2036,8 @@ extern const TileTypeProcs _tile_type_tunnelbridge_procs = { +@@ -2013,8 +2140,8 @@ extern const TileTypeProcs _tile_type_tunnelbridge_procs = { nullptr, // add_accepted_cargo_proc GetTileDesc_TunnelBridge, // get_tile_desc_proc GetTileTrackStatus_TunnelBridge, // get_tile_track_status_proc diff --git a/openttd-git/sloped-stations.patch b/openttd-git/sloped-stations.patch index f6a283c19..af55653bc 100644 --- a/openttd-git/sloped-stations.patch +++ b/openttd-git/sloped-stations.patch @@ -1,5 +1,5 @@ diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp -index 0804a4d14a..68513cfc59 100644 +index ab87fc40fd..f1f18d18df 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -189,14 +189,6 @@ RailType AllocateRailType(RailTypeLabel label) @@ -18,18 +18,18 @@ index 0804a4d14a..68513cfc59 100644 * --------- * |\ /| diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp -index e9edbf2549..fa60de4506 100644 +index 325dd0f6ea..5f148a81c3 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp -@@ -35,6 +35,7 @@ - #include "date_func.h" +@@ -39,6 +39,7 @@ #include "genworld.h" #include "company_gui.h" + #include "road_func.h" +#include "road_cmd.h" #include "table/strings.h" - -@@ -101,8 +102,6 @@ static const RoadBits _invalid_tileh_slopes_road[2][15] = { + #include "table/roadtypes.h" +@@ -256,8 +257,6 @@ static const RoadBits _invalid_tileh_slopes_road[2][15] = { } }; @@ -38,7 +38,7 @@ index e9edbf2549..fa60de4506 100644 /** * Is it allowed to remove the given road bits from the given tile? * @param tile the tile to remove the road from -@@ -1145,7 +1144,7 @@ struct DrawRoadTileStruct { +@@ -1301,7 +1300,7 @@ struct DrawRoadTileStruct { * @param bits The RoadBits part * @return The resulting Foundation */ @@ -47,7 +47,7 @@ index e9edbf2549..fa60de4506 100644 { /* Flat land and land without a road doesn't require a foundation */ if (tileh == SLOPE_FLAT || bits == ROAD_NONE) return FOUNDATION_NONE; -@@ -1167,13 +1166,6 @@ static Foundation GetRoadFoundation(Slope tileh, RoadBits bits) +@@ -1323,13 +1322,6 @@ static Foundation GetRoadFoundation(Slope tileh, RoadBits bits) return (bits == ROAD_X ? FOUNDATION_INCLINED_X : FOUNDATION_INCLINED_Y); } @@ -59,8 +59,8 @@ index e9edbf2549..fa60de4506 100644 -}; - /** - * Should the road be drawn as a unpaved snow/desert road? - * By default, roads are always drawn as unpaved if they are on desert or + * Get the sprite offset within a spritegroup. + * @param slope Slope diff --git a/src/road_cmd.h b/src/road_cmd.h index 3cf588dcd6..2a0da61427 100644 --- a/src/road_cmd.h @@ -78,10 +78,10 @@ index 3cf588dcd6..2a0da61427 100644 + #endif /* ROAD_CMD_H */ diff --git a/src/road_type.h b/src/road_type.h -index 7056f6d62c..c2693de90a 100644 +index f01d1d0353..a575491163 100644 --- a/src/road_type.h +++ b/src/road_type.h -@@ -72,4 +72,11 @@ enum RoadBits { +@@ -73,4 +73,11 @@ enum RoadBits { DECLARE_ENUM_AS_BIT_SET(RoadBits) template <> struct EnumPropsT<RoadBits> : MakeEnumPropsT<RoadBits, byte, ROAD_NONE, ROAD_END, ROAD_NONE, 4> {}; @@ -94,10 +94,10 @@ index 7056f6d62c..c2693de90a 100644 + #endif /* ROAD_TYPE_H */ diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp -index 9f98c3e885..a236dc3578 100644 +index d323bc1ecb..033792ff3e 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp -@@ -1483,7 +1483,7 @@ again: +@@ -1502,7 +1502,7 @@ again: v->x_pos = x; v->y_pos = y; v->UpdatePosition(); @@ -107,10 +107,10 @@ index 9f98c3e885..a236dc3578 100644 } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp -index 4aa6401279..7230ee2198 100644 +index 0ba824c0d0..9499f6815f 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp -@@ -55,6 +55,7 @@ +@@ -56,6 +56,7 @@ #include "linkgraph/linkgraph_base.h" #include "linkgraph/refresh.h" #include "widgets/station_widget.h" @@ -118,7 +118,7 @@ index 4aa6401279..7230ee2198 100644 #include "table/strings.h" -@@ -764,7 +765,7 @@ CommandCost ClearTile_Station(TileIndex tile, DoCommandFlag flags); +@@ -765,7 +766,7 @@ CommandCost ClearTile_Station(TileIndex tile, DoCommandFlag flags); * Checks if the given tile is buildable, flat and has a certain height. * @param tile TileIndex to check. * @param invalid_dirs Prohibited directions for slopes (set of #DiagDirection). @@ -127,7 +127,7 @@ index 4aa6401279..7230ee2198 100644 * @param allow_steep Whether steep slopes are allowed. * @param check_bridge Check for the existence of a bridge. * @return The cost in case of success, or an error code if it failed. -@@ -803,10 +804,10 @@ CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z +@@ -804,10 +805,10 @@ CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z } /* The level of this tile must be equal to allowed_z. */ @@ -140,7 +140,7 @@ index 4aa6401279..7230ee2198 100644 return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); } -@@ -854,14 +855,14 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo +@@ -855,14 +856,14 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector<Train *> &affected_vehicles, StationClassID spec_class, byte spec_index, byte plat_len, byte numtracks) { CommandCost cost(EXPENSES_CONSTRUCTION); @@ -157,8 +157,8 @@ index 4aa6401279..7230ee2198 100644 if (ret.Failed()) return ret; cost.AddCost(ret); -@@ -940,10 +941,10 @@ static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag fl - static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags, uint invalid_dirs, bool is_drive_through, bool is_truck_stop, Axis axis, StationID *station, RoadTypes rts) +@@ -941,10 +942,10 @@ static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag fl + static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags, uint invalid_dirs, bool is_drive_through, bool is_truck_stop, Axis axis, StationID *station, RoadType rt) { CommandCost cost(EXPENSES_CONSTRUCTION); - int allowed_z = -1; @@ -170,16 +170,16 @@ index 4aa6401279..7230ee2198 100644 if (ret.Failed()) return ret; cost.AddCost(ret); -@@ -1838,7 +1839,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin +@@ -1845,7 +1846,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin /* Total road stop cost. */ CommandCost cost(EXPENSES_CONSTRUCTION, roadstop_area.w * roadstop_area.h * _price[type ? PR_BUILD_STATION_TRUCK : PR_BUILD_STATION_BUS]); StationID est = INVALID_STATION; -- ret = CheckFlatLandRoadStop(roadstop_area, flags, is_drive_through ? 5 << axis : 1 << ddir, is_drive_through, type, axis, &est, rts); -+ ret = CheckFlatLandRoadStop(roadstop_area, flags, is_drive_through ? 0 : 1 << ddir, is_drive_through, type, axis, &est, rts); +- ret = CheckFlatLandRoadStop(roadstop_area, flags, is_drive_through ? 5 << axis : 1 << ddir, is_drive_through, type, axis, &est, rt); ++ ret = CheckFlatLandRoadStop(roadstop_area, flags, is_drive_through ? 0 : 1 << ddir, is_drive_through, type, axis, &est, rt); if (ret.Failed()) return ret; cost.AddCost(ret); -@@ -2785,6 +2786,32 @@ static void DrawTile_Station(TileInfo *ti) +@@ -2787,6 +2788,32 @@ static void DrawTile_Station(TileInfo *ti) palette = PALETTE_TO_GREY; } @@ -212,7 +212,7 @@ index 4aa6401279..7230ee2198 100644 if (layout == nullptr && (t == nullptr || t->seq == nullptr)) t = GetStationTileLayout(GetStationType(ti->tile), gfx); /* don't show foundation for docks */ -@@ -2851,10 +2878,10 @@ static void DrawTile_Station(TileInfo *ti) +@@ -2853,10 +2880,10 @@ static void DrawTile_Station(TileInfo *ti) } OffsetGroundSprite(31, 1); @@ -225,7 +225,7 @@ index 4aa6401279..7230ee2198 100644 } } -@@ -2910,14 +2937,64 @@ draw_default_foundation: +@@ -2912,14 +2939,64 @@ draw_default_foundation: DrawGroundSprite(overlay + overlay_offset, PALETTE_CRASH); } } else { @@ -293,7 +293,7 @@ index 4aa6401279..7230ee2198 100644 } } } -@@ -2970,6 +3047,16 @@ void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, Ro +@@ -3013,6 +3090,16 @@ void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, Ro static int GetSlopePixelZ_Station(TileIndex tile, uint x, uint y) { @@ -311,7 +311,7 @@ index 4aa6401279..7230ee2198 100644 } diff --git a/src/table/sprites.h b/src/table/sprites.h -index a573269975..7db27ec181 100644 +index 5f5aa47057..6a2c20cf46 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -260,7 +260,26 @@ static const SpriteID SPR_TRUCK_STOP_DT_Y_W = SPR_ROADSTOP_BASE + 4; diff --git a/openttd-git/underground.patch b/openttd-git/underground.patch index b5fc7769f..d3085404c 100644 --- a/openttd-git/underground.patch +++ b/openttd-git/underground.patch @@ -53,10 +53,10 @@ index 0000000000..a5947189b9 +* Expansion of the underground station does not work (when adding cells, a new one is added) +- GF. "jumps" (the non-editable part of the station changes randomly when the station is modified) diff --git a/source.list b/source.list -index f5089d03de..8422117262 100644 +index 4f9c8aa0d7..6e427ce4ec 100644 --- a/source.list +++ b/source.list -@@ -1173,3 +1173,12 @@ sound/null_s.cpp +@@ -1179,3 +1179,12 @@ sound/null_s.cpp # Threading thread.h @@ -432,7 +432,7 @@ index 66be73bd65..dced07599e 100644 static const byte _genterrain_tbl_1[5] = { 10, 22, 33, 37, 4 }; diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt -index 0b7d4aaef2..9e08e1703c 100644 +index c253c33370..c7955eaea6 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2569,7 +2569,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tremweg @@ -445,7 +445,7 @@ index 0b7d4aaef2..9e08e1703c 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasie klas: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasie tiepe: {LTBLUE}{STRING} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt -index af79f630fb..359074ec00 100644 +index 0bd31917c3..6a7a8750ec 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2204,7 +2204,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}مالك @@ -458,7 +458,7 @@ index af79f630fb..359074ec00 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK} فئة المحطة: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}نوع المحطة: {LTBLUE}{STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt -index 67125293f0..69960fe76e 100644 +index 841540c7ea..72d989e6a0 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2472,7 +2472,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tranbia @@ -471,7 +471,7 @@ index 67125293f0..69960fe76e 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Geltoki mota: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Geltoki mota: {LTBLUE}{STRING} diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt -index 2d05e68230..d2745f394e 100644 +index 5ddd3f8330..0624d4a206 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2915,7 +2915,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Улад @@ -484,7 +484,7 @@ index 2d05e68230..d2745f394e 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Кляса станцыі: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тып станцыi: {LTBLUE}{STRING} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt -index d7a4178c09..5c356dde80 100644 +index 4b839a5b03..f67853a2c1 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2586,7 +2586,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Dono da @@ -497,7 +497,7 @@ index d7a4178c09..5c356dde80 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe de Estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de Estação: {LTBLUE}{STRING} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt -index 004240b2d6..55778289b7 100644 +index 4d3301f2af..aa27a727c1 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2514,7 +2514,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Собс @@ -510,7 +510,7 @@ index 004240b2d6..55778289b7 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас на станцията: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип на станцията: {LTBLUE}{STRING} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt -index 413e189dd9..7ac8a6b9af 100644 +index f6c1b3a688..f5dcb0ba9d 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2603,7 +2603,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta @@ -523,7 +523,7 @@ index 413e189dd9..7ac8a6b9af 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe d'estació: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipus d'estació: {LTBLUE}{STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt -index aa1a5bcb3a..0858bad856 100644 +index 0b161d60ef..457b270cf9 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2703,7 +2703,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlasnik @@ -536,7 +536,7 @@ index aa1a5bcb3a..0858bad856 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Klasa postaje: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Vrsta postaje: {LTBLUE}{STRING} diff --git a/src/lang/czech.txt b/src/lang/czech.txt -index 06600fa4da..1fa40e20da 100644 +index a2dcd9f03e..729b0e0de3 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2670,7 +2670,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Majitel @@ -549,7 +549,7 @@ index 06600fa4da..1fa40e20da 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Třída stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Druh stanice: {LTBLUE}{STRING} diff --git a/src/lang/danish.txt b/src/lang/danish.txt -index dbd2e43a3a..776afeb49a 100644 +index b993b59619..ab3b6b41c8 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2604,7 +2604,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ejer af @@ -562,7 +562,7 @@ index dbd2e43a3a..776afeb49a 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt -index c28321141f..0cad5afc9a 100644 +index b8da710ec1..5582be8870 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2607,7 +2607,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eigenaar @@ -575,10 +575,10 @@ index c28321141f..0cad5afc9a 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} diff --git a/src/lang/english.txt b/src/lang/english.txt -index 83a28d8cdc..7464d04bd0 100644 +index 9641ecc041..9e58b6dd03 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt -@@ -462,6 +462,18 @@ STR_LANDSCAPING_MENU_PLANT_TREES :Plant trees +@@ -464,6 +464,18 @@ STR_LANDSCAPING_MENU_PLANT_TREES :Plant trees STR_LANDSCAPING_MENU_PLACE_SIGN :Place sign ############ range ends here @@ -597,7 +597,7 @@ index 83a28d8cdc..7464d04bd0 100644 ############ range for music menu starts STR_TOOLBAR_SOUND_MUSIC :Sound/music ############ range ends here -@@ -2607,7 +2619,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramway +@@ -2614,7 +2626,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramway STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Railway owner: {LTBLUE}{STRING1} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING1} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :None @@ -606,7 +606,7 @@ index 83a28d8cdc..7464d04bd0 100644 STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Built: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} -@@ -5088,3 +5100,35 @@ STR_PLANE :{BLACK}{PLANE} +@@ -5119,3 +5131,35 @@ STR_PLANE :{BLACK}{PLANE} STR_SHIP :{BLACK}{SHIP} STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY}) @@ -643,7 +643,7 @@ index 83a28d8cdc..7464d04bd0 100644 + +# end underground string diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt -index 529c1e03c5..c19564283c 100644 +index 50a35eee38..0d3ba9749a 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2543,7 +2543,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramway @@ -656,7 +656,7 @@ index 529c1e03c5..c19564283c 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt -index 62193bd46a..bfe35bdf82 100644 +index 3bf1874872..0b295bf280 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2604,7 +2604,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Streetca @@ -669,7 +669,7 @@ index 62193bd46a..bfe35bdf82 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Station class: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Station type: {LTBLUE}{STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt -index 688d713afd..74c436adb0 100644 +index 2ff87d0347..341597595c 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2173,7 +2173,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Posedant @@ -682,7 +682,7 @@ index 688d713afd..74c436adb0 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stacioklaso: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Staciotipo: {LTBLUE}{STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt -index 537f11557a..028d8fd974 100644 +index 44abe21965..82ac3ee995 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2631,7 +2631,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Trammite @@ -695,7 +695,7 @@ index 537f11557a..028d8fd974 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Jaama liik: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jaama rühm: {LTBLUE}{STRING} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt -index 4073b2515b..65472b75d8 100644 +index 9f288edb6f..e047224d1a 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2311,7 +2311,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Sporvogn @@ -708,7 +708,7 @@ index 4073b2515b..65472b75d8 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Støð klassi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Støð slag: {LTBLUE}{STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt -index d1bf5e0731..eca8873e7d 100644 +index c9d86cd791..a9e8c601da 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2607,7 +2607,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Raitioti @@ -721,7 +721,7 @@ index d1bf5e0731..eca8873e7d 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aseman luokka: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Aseman tyyppi: {LTBLUE}{STRING} diff --git a/src/lang/french.txt b/src/lang/french.txt -index da51ab78d4..25bd83aa03 100644 +index 9a90176f39..ced9a1c257 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2605,7 +2605,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Proprié @@ -734,7 +734,7 @@ index da51ab78d4..25bd83aa03 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Type de station{NBSP}: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Type de station{NBSP}: {LTBLUE}{STRING} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt -index 1a946afdfe..7017420dfa 100644 +index 2f09153fd4..670f0838eb 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2801,7 +2801,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Seilbhea @@ -747,7 +747,7 @@ index 1a946afdfe..7017420dfa 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Seòrsa an stèisein: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Seòrsa an stèisein: {LTBLUE}{STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt -index 149e29e497..9e5bc22794 100644 +index fa3c528879..e335df7caf 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2572,7 +2572,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta @@ -760,7 +760,7 @@ index 149e29e497..9e5bc22794 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt -index 35d02e8d16..8077199bc7 100644 +index 2c6b77a5bf..dde2b31f4d 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2592,7 +2592,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Straßen @@ -773,7 +773,7 @@ index 35d02e8d16..8077199bc7 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstyp: {LTBLUE}{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt -index aed86f55d4..20dba726bf 100644 +index 5dd253b5d8..fe7317afb8 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2711,7 +2711,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Ιδιο @@ -786,7 +786,7 @@ index aed86f55d4..20dba726bf 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Κατηγορία σταθμού: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Τύπος σταθμού: {LTBLUE}{STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt -index bda99e0d2c..78b0206669 100644 +index 68ea63f1c2..08e3cd5aa4 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2594,7 +2594,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}:בעל @@ -799,7 +799,7 @@ index bda99e0d2c..78b0206669 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}{LTBLUE}{STRING}: אופי התחנה STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK} {LTBLUE}{STRING}: סוג התחנה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt -index eae7abaec9..7bd76d267d 100644 +index b26940b0e0..fd6dffad21 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2668,7 +2668,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}A villam @@ -812,7 +812,7 @@ index eae7abaec9..7bd76d267d 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Állomás osztálya: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Állomás típusa: {LTBLUE}{STRING} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt -index 92a28d1bcd..16a33a1eea 100644 +index d279de9df7..829a04d4a6 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2418,7 +2418,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eigandi @@ -825,7 +825,7 @@ index 92a28d1bcd..16a33a1eea 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tegund stöðvar: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tegund stöðvar: {LTBLUE}{STRING} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt -index 3a66b6eb15..135b51c262 100644 +index 5e802f90e0..3ac70b2a84 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2588,7 +2588,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Pemilik @@ -838,7 +838,7 @@ index 3a66b6eb15..135b51c262 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Kelas Stasiun: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipe Stasiun: {LTBLUE}{STRING} diff --git a/src/lang/irish.txt b/src/lang/irish.txt -index 483657f303..f8be9d5cdc 100644 +index edb7990afa..ffc926fd5f 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2568,7 +2568,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Úinéir @@ -851,7 +851,7 @@ index 483657f303..f8be9d5cdc 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aicme an stáisiúin: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Cineál stáisiúin: {LTBLUE}{STRING} diff --git a/src/lang/italian.txt b/src/lang/italian.txt -index 696504b5a4..07d75e0827 100644 +index f458082688..3870591f93 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2637,7 +2637,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet @@ -864,7 +864,7 @@ index 696504b5a4..07d75e0827 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo stazione: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo stazione: {LTBLUE}{STRING} diff --git a/src/lang/korean.txt b/src/lang/korean.txt -index 3aff4a4ae0..f3d0d42b10 100644 +index 1e91fa0986..7ebc13549b 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2608,7 +2608,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}전찻 @@ -877,7 +877,7 @@ index 3aff4a4ae0..f3d0d42b10 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}역 분류: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}역 종류: {LTBLUE}{STRING} diff --git a/src/lang/latin.txt b/src/lang/latin.txt -index bb8d584085..5ab713c38e 100644 +index 7393be5566..3c5bc266cd 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2803,7 +2803,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Possesso @@ -890,7 +890,7 @@ index bb8d584085..5ab713c38e 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classis stationis: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typus stationis: {LTBLUE}{STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt -index 9635ed054b..88cf0889ac 100644 +index a683e05a77..7d8b579823 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2514,7 +2514,7 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dzelzce @@ -903,7 +903,7 @@ index 9635ed054b..88cf0889ac 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stacijas klase: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stacijas tips: {LTBLUE}{STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt -index 68bc4f9657..6b7b54485f 100644 +index 060c8ceef8..c627eb7c5b 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2787,7 +2787,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramvaja @@ -916,7 +916,7 @@ index 68bc4f9657..6b7b54485f 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stotelės rūšis: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stotelės tipas: {LTBLUE}{STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt -index 2f7cd1d061..dbc8bd5a86 100644 +index 9a9b9d3d52..f30d11c301 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2598,7 +2598,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramschi @@ -929,7 +929,7 @@ index 2f7cd1d061..dbc8bd5a86 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Statiounsklass: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Statiounstyp: {LTBLUE}{STRING} diff --git a/src/lang/malay.txt b/src/lang/malay.txt -index be78dc3d99..11ce2c0bdc 100644 +index f5af89d905..b89cbf8d2f 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2315,7 +2315,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Pemilik @@ -942,7 +942,7 @@ index be78dc3d99..11ce2c0bdc 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Kelas stesen: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jenis stesen: {LTBLUE}{STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt -index 3baf2badd9..40769e3099 100644 +index 7b9188f746..b6c3a96eb7 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2608,7 +2608,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eier av @@ -955,7 +955,7 @@ index 3baf2badd9..40769e3099 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasjonstype: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasjonstype: {LTBLUE}{STRING} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt -index 4342821243..9b03e66cbf 100644 +index 3d6c11ddf5..ce20a37a4d 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2491,7 +2491,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Trikkesp @@ -968,7 +968,7 @@ index 4342821243..9b03e66cbf 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasjonsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasjontype: {LTBLUE}{STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt -index cd2121671b..a6bc169353 100644 +index 21014a46f1..6e1e24b1c5 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2970,7 +2970,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Wlascici @@ -981,7 +981,7 @@ index cd2121671b..a6bc169353 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Rodzaj stacji: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stacji: {LTBLUE}{STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt -index 0c8361e54c..51ecc99d45 100644 +index 3758e5838c..0d0d91783e 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2605,7 +2605,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Dono da @@ -994,7 +994,7 @@ index 0c8361e54c..51ecc99d45 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo de Estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de Estação: {LTBLUE}{STRING} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt -index a4149798ad..05a7e29031 100644 +index bedab6c1ad..215c28cf80 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2550,7 +2550,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet @@ -1007,7 +1007,7 @@ index a4149798ad..05a7e29031 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clasa staţiei: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tip staţie: {LTBLUE}{STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt -index 926420e850..46ed8c3c02 100644 +index 3a201d14c2..2a57b1aee6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -588,6 +588,18 @@ STR_LANDSCAPING_MENU_PLANT_TREES :Высадка @@ -1038,7 +1038,7 @@ index 926420e850..46ed8c3c02 100644 STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построено: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Класс станции: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станции: {LTBLUE}{STRING} -@@ -5315,3 +5327,35 @@ STR_PLANE :{BLACK}{PLANE} +@@ -5313,3 +5325,35 @@ STR_PLANE :{BLACK}{PLANE} STR_SHIP :{BLACK}{SHIP} STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY}) @@ -1075,7 +1075,7 @@ index 926420e850..46ed8c3c02 100644 + +# end underground string diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt -index 36cac2be76..3b2db5b410 100644 +index b252081917..f7ccd994c8 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2776,7 +2776,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlasnik @@ -1088,7 +1088,7 @@ index 36cac2be76..3b2db5b410 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Klasa stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Vrsta stanice: {LTBLUE}{STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt -index 3e2767e48b..15da278201 100644 +index 3e00b67fc7..3097552be1 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2578,7 +2578,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}有轨 @@ -1101,7 +1101,7 @@ index 3e2767e48b..15da278201 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}车站分类: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}车站类型: {LTBLUE}{STRING} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt -index 47005d904b..a07e3e41d6 100644 +index d25c5d38cc..2edc9b56ed 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2636,7 +2636,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Vlastní @@ -1114,7 +1114,7 @@ index 47005d904b..a07e3e41d6 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Trieda stanice: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Typ stanice: {LTBLUE}{STRING} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt -index 7a86e2bc20..00ac4e59ba 100644 +index d358a190fe..546e4087db 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2722,7 +2722,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Lastnik @@ -1127,7 +1127,7 @@ index 7a86e2bc20..00ac4e59ba 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Razred postaje: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Vrsta postaje: {LTBLUE}{STRING} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt -index 82918400a8..1bebdb738e 100644 +index 5fb6609181..2fce4c2991 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2583,7 +2583,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta @@ -1140,7 +1140,7 @@ index 82918400a8..1bebdb738e 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt -index 335bbdba8c..c4c12abfae 100644 +index 66cd259696..bf7298a530 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2606,7 +2606,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propieta @@ -1153,7 +1153,7 @@ index 335bbdba8c..c4c12abfae 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clase de estación: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estación: {LTBLUE}{STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt -index 0cb8ef4974..6317177587 100644 +index edc9975cc1..168748bef3 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2591,7 +2591,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Spårvä @@ -1166,7 +1166,7 @@ index 0cb8ef4974..6317177587 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklass: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstyp: {LTBLUE}{STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt -index ae2767d7f7..18c1441612 100644 +index 25d93659a3..91d312912f 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2262,7 +2262,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}ட் @@ -1179,7 +1179,7 @@ index ae2767d7f7..18c1441612 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}நிலையத்தின் பிரிவு: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}நிலையத்தின் வகை: {LTBLUE}{STRING} diff --git a/src/lang/thai.txt b/src/lang/thai.txt -index 209a2db326..482487c77c 100644 +index 1d5a8ae253..b31b1e2ed5 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2517,7 +2517,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}ผู @@ -1192,7 +1192,7 @@ index 209a2db326..482487c77c 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}ประเภทของสถานี: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}รูปแบบของสถานี: {LTBLUE}{STRING} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt -index 79da3fe2fc..ed6625a65d 100644 +index 458ed3d5de..92397c63e5 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2568,7 +2568,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}電車 @@ -1205,7 +1205,7 @@ index 79da3fe2fc..ed6625a65d 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}車站風格:{LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}車站種類:{LTBLUE}{STRING} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt -index a9d1002e0f..2c8249bcc8 100644 +index 972e6470a6..d089a4e077 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2597,7 +2597,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Tramvay @@ -1218,7 +1218,7 @@ index a9d1002e0f..2c8249bcc8 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}İstasyon sınıfı: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}İstasyon türü: {LTBLUE}{STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt -index 54c3e01b1b..c310e695eb 100644 +index 1188b3954c..d30dc89cc0 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2735,7 +2735,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Влас @@ -1231,7 +1231,7 @@ index 54c3e01b1b..c310e695eb 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас станції: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип станції: {LTBLUE}{STRING} diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt -index 858154e392..ef47dd49b4 100644 +index 14e33cb825..e8da58e0eb 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2272,7 +2272,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}مالک @@ -1244,7 +1244,7 @@ index 858154e392..ef47dd49b4 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}کلاس ایستگاه: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}نوع ایستگاه: {LTBLUE}{STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt -index ec75b457aa..25508f44e3 100644 +index 8e902ff752..835fb5fe9e 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2585,7 +2585,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Chủ đ @@ -1257,7 +1257,7 @@ index ec75b457aa..25508f44e3 100644 STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Loại ga,bến: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Kiểu ga,bến: {LTBLUE}{STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt -index c36e45cf90..bc2e24726d 100644 +index 7d3c7c9a7c..8c0b68398a 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2571,7 +2571,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Perchenn @@ -1778,10 +1778,10 @@ index 3d09f26f26..251ea4990d 100644 _pause_mode = PM_UNPAUSED; _fast_forward = 0; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp -index 86c17cdccd..edb7be2522 100644 +index 353972d489..3d0c029a2e 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp -@@ -214,10 +214,11 @@ public: +@@ -217,10 +217,11 @@ public: /* Location */ char tmp[16]; seprintf(tmp, lastof(tmp), "0x%.4X", tile); @@ -1810,19 +1810,25 @@ index 8619bac6d9..c22b1d2cbc 100644 CursorID rail_swne; ///< Cursor for building rail in X direction CursorID rail_ew; ///< Cursor for building rail in E-W direction diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp -index 0804a4d14a..4476fdde76 100644 +index ab87fc40fd..e3df8ac977 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp -@@ -534,7 +534,7 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u - /* ...but tram is not required. */ - uint num_new_tram_pieces = (tram != ROAD_NONE) ? 2 - CountBits(tram) : 0; +@@ -535,12 +535,12 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u + + uint num_new_road_pieces = (road != ROAD_NONE) ? 2 - CountBits(road) : 0; + if (num_new_road_pieces > 0) { +- cost.AddCost(num_new_road_pieces * RoadBuildCost(roadtype_road)); ++ cost.AddCost(num_new_road_pieces * RoadBuildCost(roadtype_road) * UNDERGROUND_COST_MULTIPLIER(tile)); + } -- cost.AddCost((num_new_road_pieces + num_new_tram_pieces) * _price[PR_BUILD_ROAD]); -+ cost.AddCost((num_new_road_pieces + num_new_tram_pieces) * _price[PR_BUILD_ROAD] * UNDERGROUND_COST_MULTIPLIER(tile)); + uint num_new_tram_pieces = (tram != ROAD_NONE) ? 2 - CountBits(tram) : 0; + if (num_new_tram_pieces > 0) { +- cost.AddCost(num_new_tram_pieces * RoadBuildCost(roadtype_tram)); ++ cost.AddCost(num_new_tram_pieces * RoadBuildCost(roadtype_tram) * UNDERGROUND_COST_MULTIPLIER(tile)); + } if (flags & DC_EXEC) { - MakeRoadCrossing(tile, road_owner, tram_owner, _current_company, (track == TRACK_X ? AXIS_Y : AXIS_X), railtype, roadtypes, GetTownIndex(tile)); -@@ -593,7 +593,7 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u +@@ -600,7 +600,7 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u YapfNotifyTrackLayoutChange(tile, track); } @@ -1831,7 +1837,7 @@ index 0804a4d14a..4476fdde76 100644 return cost; } -@@ -637,7 +637,7 @@ CommandCost CmdRemoveSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, +@@ -644,7 +644,7 @@ CommandCost CmdRemoveSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, if (ret.Failed()) return ret; } @@ -1840,7 +1846,7 @@ index 0804a4d14a..4476fdde76 100644 if (flags & DC_EXEC) { if (HasReservedTracks(tile, trackbit)) { -@@ -670,7 +670,7 @@ CommandCost CmdRemoveSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, +@@ -678,7 +678,7 @@ CommandCost CmdRemoveSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, if ((present & trackbit) == 0) return_cmd_error(STR_ERROR_THERE_IS_NO_RAILROAD_TRACK); if (present == (TRACK_BIT_X | TRACK_BIT_Y)) crossing = true; @@ -1849,7 +1855,7 @@ index 0804a4d14a..4476fdde76 100644 /* Charge extra to remove signals on the track, if they are there */ if (HasSignalOnTrack(tile, track)) { -@@ -983,7 +983,7 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u +@@ -991,7 +991,7 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u if (!_settings_game.construction.build_on_slopes || !CanBuildDepotByTileh(dir, tileh)) { return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); } @@ -1858,7 +1864,7 @@ index 0804a4d14a..4476fdde76 100644 } cost.AddCost(DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR)); -@@ -1008,8 +1008,8 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u +@@ -1016,8 +1016,8 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u YapfNotifyTrackLayoutChange(tile, DiagDirToDiagTrack(dir)); } @@ -1869,7 +1875,7 @@ index 0804a4d14a..4476fdde76 100644 return cost; } -@@ -1659,7 +1659,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 +@@ -1667,7 +1667,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 InvalidateWindowData(WC_VEHICLE_DEPOT, tile); InvalidateWindowData(WC_BUILD_VEHICLE, tile); } @@ -1878,7 +1884,7 @@ index 0804a4d14a..4476fdde76 100644 break; default: // RAIL_TILE_NORMAL, RAIL_TILE_SIGNALS -@@ -1670,7 +1670,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 +@@ -1678,7 +1678,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 YapfNotifyTrackLayoutChange(tile, RemoveFirstTrack(&tracks)); } } @@ -1887,7 +1893,7 @@ index 0804a4d14a..4476fdde76 100644 break; } break; -@@ -1732,7 +1732,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 +@@ -1740,7 +1740,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } } @@ -1896,7 +1902,7 @@ index 0804a4d14a..4476fdde76 100644 break; } -@@ -1742,7 +1742,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 +@@ -1750,7 +1750,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 YapfNotifyTrackLayoutChange(tile, track); } @@ -1906,28 +1912,28 @@ index 0804a4d14a..4476fdde76 100644 } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp -index e9edbf2549..b3270e7004 100644 +index 325dd0f6ea..78672768ff 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp -@@ -255,7 +255,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec +@@ -407,7 +407,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec } } else { assert(IsDriveThroughStopTile(tile)); -- cost.AddCost(_price[PR_CLEAR_ROAD] * 2); -+ cost.AddCost(_price[PR_CLEAR_ROAD] * 2 * UNDERGROUND_COST_MULTIPLIER(tile)); +- cost.AddCost(RoadClearCost(existing_rt) * 2); ++ cost.AddCost(RoadClearCost(existing_rt) * 2 * UNDERGROUND_COST_MULTIPLIER(tile)); if (flags & DC_EXEC) { - Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != nullptr) { -@@ -737,7 +737,7 @@ do_clear:; + /* A full diagonal road tile has two road bits. */ + UpdateCompanyRoadInfrastructure(existing_rt, GetRoadOwner(tile, rtt), -2); +@@ -889,7 +889,7 @@ do_clear:; /* Count pieces */ CountBits(pieces); -- cost.AddCost(num_pieces * _price[PR_BUILD_ROAD]); -+ cost.AddCost(num_pieces * _price[PR_BUILD_ROAD] * UNDERGROUND_COST_MULTIPLIER(tile)); +- cost.AddCost(num_pieces * RoadBuildCost(rt)); ++ cost.AddCost(num_pieces * RoadBuildCost(rt) * UNDERGROUND_COST_MULTIPLIER(tile)); if (flags & DC_EXEC) { switch (GetTileType(tile)) { -@@ -1048,7 +1048,7 @@ CommandCost CmdBuildRoadDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, ui +@@ -1203,7 +1203,7 @@ CommandCost CmdBuildRoadDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, ui MarkTileDirtyByTile(tile); MakeDefaultName(dep); } @@ -1978,10 +1984,10 @@ index a857d5b15a..892eba93bf 100644 static void Check_MAPS() diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp -index 47c8488889..5b924025e1 100644 +index 58226ea5b2..d1d4cfb5df 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp -@@ -1324,6 +1324,7 @@ public: +@@ -1328,6 +1328,7 @@ public: WID_GL_MAPSIZE_X_PULLDOWN = ::WID_GL_MAPSIZE_X_PULLDOWN, ///< Dropdown 'map X size'. WID_GL_MAPSIZE_Y_PULLDOWN = ::WID_GL_MAPSIZE_Y_PULLDOWN, ///< Dropdown 'map Y size'. @@ -1989,7 +1995,7 @@ index 47c8488889..5b924025e1 100644 WID_GL_TOWN_PULLDOWN = ::WID_GL_TOWN_PULLDOWN, ///< Dropdown 'No. of towns'. WID_GL_INDUSTRY_PULLDOWN = ::WID_GL_INDUSTRY_PULLDOWN, ///< Dropdown 'No. of industries'. -@@ -1372,6 +1373,7 @@ public: +@@ -1376,6 +1377,7 @@ public: WID_CS_RANDOM_WORLD = ::WID_CS_RANDOM_WORLD, ///< Generate random land button WID_CS_MAPSIZE_X_PULLDOWN = ::WID_CS_MAPSIZE_X_PULLDOWN, ///< Pull-down arrow for x map size. WID_CS_MAPSIZE_Y_PULLDOWN = ::WID_CS_MAPSIZE_Y_PULLDOWN, ///< Pull-down arrow for y map size. @@ -2031,7 +2037,7 @@ index f2fbd283cd..359a0e1168 100644 byte oil_refinery_limit; ///< distance oil refineries allowed from map edge byte snow_line_height; ///< the configured snow line height diff --git a/src/station.cpp b/src/station.cpp -index e8ae1bc208..194f0edb28 100644 +index 096a3c3739..8c42d1ef81 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -13,6 +13,7 @@ @@ -2127,7 +2133,7 @@ index e8ae1bc208..194f0edb28 100644 bool empty = this->AfterRemoveTile(st, ta.tile); if (ta.w != 1 || ta.h != 1) empty = empty || this->AfterRemoveTile(st, TILE_ADDXY(ta.tile, ta.w - 1, ta.h - 1)); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp -index 4aa6401279..510bc30724 100644 +index 0ba824c0d0..2992988008 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -13,6 +13,7 @@ @@ -2138,7 +2144,7 @@ index 4aa6401279..510bc30724 100644 #include "viewport_func.h" #include "viewport_kdtree.h" #include "command_func.h" -@@ -99,21 +100,24 @@ bool IsHangar(TileIndex t) +@@ -100,21 +101,24 @@ bool IsHangar(TileIndex t) * @return Succeeded command (if zero or one station found) or failed command (for two or more stations found). */ template <class T> @@ -2172,7 +2178,7 @@ index 4aa6401279..510bc30724 100644 } *st = (closest_station == INVALID_STATION) ? nullptr : T::Get(closest_station); return CommandCost(); -@@ -799,7 +803,7 @@ CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z +@@ -800,7 +804,7 @@ CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); } } @@ -2181,16 +2187,16 @@ index 4aa6401279..510bc30724 100644 } /* The level of this tile must be equal to allowed_z. */ -@@ -1028,7 +1032,7 @@ static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags +@@ -1035,7 +1039,7 @@ static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags + ret = DoCommand(cur_tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + if (ret.Failed()) return ret; + cost.AddCost(ret); +- cost.AddCost(RoadBuildCost(rt) * 2); ++ cost.AddCost(RoadBuildCost(rt) * 2 * UNDERGROUND_COST_MULTIPLIER(cur_tile)); } - - uint roadbits_to_build = CountBits(rts) * 2 - num_roadbits; -- cost.AddCost(_price[PR_BUILD_ROAD] * roadbits_to_build); -+ cost.AddCost(_price[PR_BUILD_ROAD] * roadbits_to_build * UNDERGROUND_COST_MULTIPLIER(cur_tile)); } } - -@@ -1047,11 +1051,13 @@ CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis a +@@ -1055,11 +1059,13 @@ CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis a TileArea cur_ta = st->train_station; /* determine new size of train station region.. */ @@ -2209,7 +2215,7 @@ index 4aa6401279..510bc30724 100644 /* make sure the final size is not too big. */ if (new_ta.w > _settings_game.station.station_spread || new_ta.h > _settings_game.station.station_spread) { -@@ -1123,7 +1129,7 @@ void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSp +@@ -1131,7 +1137,7 @@ void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSp * @return command cost with the error or 'okay' */ template <class T, StringID error_message> @@ -2218,7 +2224,7 @@ index 4aa6401279..510bc30724 100644 { assert(*st == nullptr); bool check_surrounding = true; -@@ -1149,7 +1155,7 @@ CommandCost FindJoiningBaseStation(StationID existing_station, StationID station +@@ -1157,7 +1163,7 @@ CommandCost FindJoiningBaseStation(StationID existing_station, StationID station if (check_surrounding) { /* Make sure there is no more than one other station around us that is owned by us. */ @@ -2227,7 +2233,7 @@ index 4aa6401279..510bc30724 100644 if (ret.Failed()) return ret; } -@@ -1168,9 +1174,9 @@ CommandCost FindJoiningBaseStation(StationID existing_station, StationID station +@@ -1176,9 +1182,9 @@ CommandCost FindJoiningBaseStation(StationID existing_station, StationID station * @param st 'return' pointer for the found station * @return command cost with the error or 'okay' */ @@ -2239,7 +2245,7 @@ index 4aa6401279..510bc30724 100644 } /** -@@ -1279,8 +1285,8 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 +@@ -1287,8 +1293,8 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 CommandCost cost = CheckFlatLandRailStation(new_location, flags, axis, &est, rt, affected_vehicles, spec_class, spec_index, plat_len, numtracks); if (cost.Failed()) return cost; /* Add construction expenses. */ @@ -2250,7 +2256,7 @@ index 4aa6401279..510bc30724 100644 Station *st = nullptr; ret = FindJoiningStation(est, station_to_join, adjacent, new_location, &st); -@@ -1320,8 +1326,10 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 +@@ -1328,8 +1334,10 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 byte numtracks_orig; Track track; @@ -2262,7 +2268,7 @@ index 4aa6401279..510bc30724 100644 st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TRY); -@@ -1542,7 +1550,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector<T *> &affected_st +@@ -1550,7 +1558,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector<T *> &affected_st } /* If we reached here, the tile is valid so increase the quantity of tiles we will remove */ @@ -2271,7 +2277,7 @@ index 4aa6401279..510bc30724 100644 if (keep_rail || IsStationTileBlocked(tile)) { /* Don't refund the 'steel' of the track when we keep the -@@ -1621,7 +1629,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector<T *> &affected_st +@@ -1629,7 +1637,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector<T *> &affected_st CommandCost CmdRemoveFromRailStation(TileIndex start, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { TileIndex end = p1 == 0 ? start : p1; @@ -2280,7 +2286,7 @@ index 4aa6401279..510bc30724 100644 TileArea ta(start, end); std::vector<Station *> affected_stations; -@@ -1684,11 +1692,16 @@ CommandCost RemoveRailStation(T *st, DoCommandFlag flags, Money removal_cost) +@@ -1692,11 +1700,16 @@ CommandCost RemoveRailStation(T *st, DoCommandFlag flags, Money removal_cost) /* determine width and height of platforms */ TileArea ta = st->train_station; @@ -2299,7 +2305,7 @@ index 4aa6401279..510bc30724 100644 /* only remove tiles that are actually train station tiles */ if (st->TileBelongsToRailStation(tile)) { std::vector<T*> affected_stations; // dummy -@@ -2053,13 +2066,21 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui +@@ -2063,13 +2076,21 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui /* Bankrupting company is not supposed to remove roads, there may be road vehicles. */ if (!keep_drive_through_roads && (flags & DC_BANKRUPT)) return CMD_ERROR; @@ -2323,7 +2329,7 @@ index 4aa6401279..510bc30724 100644 /* Make sure the specified tile is a road stop of the correct type */ if (!IsTileType(cur_tile, MP_STATION) || !IsRoadStop(cur_tile) || (uint32)GetRoadStopType(cur_tile) != GB(p2, 0, 1)) continue; -@@ -2243,6 +2264,10 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint +@@ -2248,6 +2269,10 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (w > _settings_game.station.station_spread || h > _settings_game.station.station_spread) { return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT); } @@ -2335,7 +2341,7 @@ index 4aa6401279..510bc30724 100644 AirportTileTableIterator iter(as->table[layout], tile); CommandCost cost = CheckFlatLandAirport(iter, flags); diff --git a/src/station_gui.cpp b/src/station_gui.cpp -index 31da16238e..521e53381d 100644 +index 2bee2d80fb..5a956c6c83 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -21,6 +21,7 @@ @@ -2556,7 +2562,7 @@ index c599753498..869ff3e09a 100644 bool Contains(TileIndex tile) const; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp -index 8b5f79df21..99867aeffd 100644 +index 23c10fb727..b2c7ee31bd 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -13,7 +13,10 @@ @@ -2570,7 +2576,7 @@ index 8b5f79df21..99867aeffd 100644 #include "command_func.h" #include "vehicle_gui.h" #include "rail_gui.h" -@@ -22,6 +25,7 @@ +@@ -23,6 +26,7 @@ #include "vehicle_func.h" #include "sound_func.h" #include "terraform_gui.h" @@ -2578,7 +2584,7 @@ index 8b5f79df21..99867aeffd 100644 #include "strings_func.h" #include "company_func.h" #include "company_gui.h" -@@ -998,6 +1002,39 @@ static CallBackFunction MenuClickForest(int index) +@@ -1007,6 +1011,39 @@ static CallBackFunction MenuClickForest(int index) return CBF_NONE; } @@ -2618,21 +2624,21 @@ index 8b5f79df21..99867aeffd 100644 /* --- Music button menu --- */ static CallBackFunction ToolbarMusicClick(Window *w) -@@ -1314,9 +1351,10 @@ static MenuClickedProc * const _menu_clicked_procs[] = { - MenuClickBuildWater, // 23 - MenuClickBuildAir, // 24 - MenuClickForest, // 25 -- MenuClickMusicWindow, // 26 -- MenuClickNewspaper, // 27 -- MenuClickHelp, // 28 -+ MenuClickUnderground, // 26 -+ MenuClickMusicWindow, // 27 -+ MenuClickNewspaper, // 28 -+ MenuClickHelp, // 29 +@@ -1356,9 +1393,10 @@ static MenuClickedProc * const _menu_clicked_procs[] = { + MenuClickBuildWater, // 24 + MenuClickBuildAir, // 25 + MenuClickForest, // 26 +- MenuClickMusicWindow, // 27 +- MenuClickNewspaper, // 28 +- MenuClickHelp, // 29 ++ MenuClickUnderground, // 27 ++ MenuClickMusicWindow, // 28 ++ MenuClickNewspaper, // 29 ++ MenuClickHelp, // 30 }; /** Full blown container to make it behave exactly as we want :) */ -@@ -1481,7 +1519,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { +@@ -1523,7 +1561,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override { static const uint SMALLEST_ARRANGEMENT = 14; @@ -2641,7 +2647,7 @@ index 8b5f79df21..99867aeffd 100644 /* The number of buttons of each row of the toolbar should match the number of items which we want to be visible. * The total number of buttons should be equal to arrangable_count * 2. -@@ -1748,6 +1786,67 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { +@@ -1790,6 +1828,67 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { WID_TN_ZOOM_OUT, WID_TN_SWITCH_BAR, }; @@ -2709,7 +2715,7 @@ index 8b5f79df21..99867aeffd 100644 static const byte arrange_all[] = { WID_TN_PAUSE, WID_TN_FAST_FORWARD, -@@ -1775,6 +1874,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { +@@ -1818,6 +1917,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { WID_TN_WATER, WID_TN_AIR, WID_TN_LANDSCAPE, @@ -2717,7 +2723,7 @@ index 8b5f79df21..99867aeffd 100644 WID_TN_MUSIC_SOUND, WID_TN_MESSAGES, WID_TN_HELP -@@ -1789,7 +1889,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { +@@ -1832,7 +1932,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { } /* Introduce the split toolbar */ @@ -2726,7 +2732,7 @@ index 8b5f79df21..99867aeffd 100644 button_count = arrangable_count = full_buttons; spacer_count = this->spacers; -@@ -1940,6 +2040,7 @@ static ToolbarButtonProc * const _toolbar_button_procs[] = { +@@ -1989,6 +2089,7 @@ static ToolbarButtonProc * const _toolbar_button_procs[] = { ToolbarBuildWaterClick, ToolbarBuildAirClick, ToolbarForestClick, @@ -2734,7 +2740,7 @@ index 8b5f79df21..99867aeffd 100644 ToolbarMusicClick, ToolbarNewspaperClick, ToolbarHelpClick, -@@ -2225,6 +2326,7 @@ static NWidgetBase *MakeMainToolbar(int *biggest_index) +@@ -2280,6 +2381,7 @@ static NWidgetBase *MakeMainToolbar(int *biggest_index) SPR_IMG_BUILDWATER, // WID_TN_WATER SPR_IMG_BUILDAIR, // WID_TN_AIR SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE @@ -2743,10 +2749,10 @@ index 8b5f79df21..99867aeffd 100644 SPR_IMG_MESSAGES, // WID_TN_MESSAGES SPR_IMG_QUERY, // WID_TN_HELP diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp -index f3acfb4a38..fa90f16c5c 100644 +index 65032c1fb2..635243bf54 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp -@@ -13,6 +13,7 @@ +@@ -14,6 +14,7 @@ #include "road_internal.h" /* Cleaning up road bits */ #include "road_cmd.h" #include "landscape.h" @@ -2754,17 +2760,17 @@ index f3acfb4a38..fa90f16c5c 100644 #include "viewport_func.h" #include "viewport_kdtree.h" #include "cmd_helper.h" -@@ -2192,6 +2193,9 @@ static inline bool CanBuildHouseHere(TileIndex tile, bool noslope) +@@ -2261,6 +2262,9 @@ static inline bool CanBuildHouseHere(TileIndex tile, bool noslope) Slope slope = GetTileSlope(tile); if ((noslope && slope != SLOPE_FLAT) || IsSteepSlope(slope)) return false; + /* */ + if (IsUnderground(tile)) return false; + - /* building under a bridge? */ - if (IsBridgeAbove(tile)) return false; + /* at least one RoadTypes allow building the house here? */ + if (!RoadTypesAllowHouseHere(tile)) return false; -@@ -2623,6 +2627,8 @@ CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 +@@ -2695,6 +2699,8 @@ CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 t->UpdateVirtCoord(); InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1); @@ -2807,7 +2813,7 @@ index e982abfb28..a8283b8da8 100644 if (tree_to_plant != TREE_INVALID && !IsInsideBS(tree_to_plant, _tree_base_by_landscape[_settings_game.game_creation.landscape], _tree_count_by_landscape[_settings_game.game_creation.landscape])) return CMD_ERROR; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp -index 78586b1a2e..f297a7bd59 100644 +index 83cec4fd36..51d9f984b9 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -15,6 +15,7 @@ @@ -2818,7 +2824,7 @@ index 78586b1a2e..f297a7bd59 100644 #include "viewport_func.h" #include "cmd_helper.h" #include "command_func.h" -@@ -277,6 +278,10 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u +@@ -278,6 +279,10 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u return_cmd_error(STR_ERROR_CAN_T_START_AND_END_ON); } @@ -2829,7 +2835,7 @@ index 78586b1a2e..f297a7bd59 100644 Axis direction; if (TileX(tile_start) == TileX(tile_end)) { direction = AXIS_Y; -@@ -641,6 +646,12 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, DoCommandFlag flags, uint32 p1, +@@ -669,6 +674,12 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, DoCommandFlag flags, uint32 p1, for (;;) { end_tile += delta; if (!IsValidTile(end_tile)) return_cmd_error(STR_ERROR_TUNNEL_THROUGH_MAP_BORDER); @@ -3195,7 +3201,7 @@ index 0000000000..81b119545e + +#endif /* UNDERGROUND_GUI_H */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp -index 031b6f95e3..dde4eeffe4 100644 +index 6e26c7bfe8..1c1bf10adb 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -15,6 +15,7 @@ @@ -3383,10 +3389,10 @@ index 877efbb921..9766a06400 100644 WID_CS_START_DATE_TEXT, ///< Clickable start date value. WID_CS_START_DATE_UP, ///< Increase start year (start later). diff --git a/src/widgets/toolbar_widget.h b/src/widgets/toolbar_widget.h -index c317fc9574..280d0f969c 100644 +index 5b9d1e1568..8a865ab6d6 100644 --- a/src/widgets/toolbar_widget.h +++ b/src/widgets/toolbar_widget.h -@@ -42,6 +42,7 @@ enum ToolbarNormalWidgets { +@@ -43,6 +43,7 @@ enum ToolbarNormalWidgets { WID_TN_WATER, ///< Water building toolbar. WID_TN_AIR, ///< Airport building toolbar. WID_TN_LANDSCAPE, ///< Landscaping toolbar. |