From df0aa2ed4bb4d950ae25aacedbfc618af6973169 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 19 Nov 2018 20:35:57 +0000 Subject: [PATCH] Add pillar and station height checks to bridge upgrade command --- src/tunnelbridge_cmd.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index ee7d42093a..060cd7606a 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -411,6 +411,31 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u is_new_owner = (owner == OWNER_NONE); if (is_new_owner) owner = company; + TileIndexDiff delta = (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); + for (TileIndex tile = tile_start + delta; tile != tile_end; tile += delta) { + if (IsTileType(tile, MP_STATION)) { + switch (GetStationType(tile)) { + case STATION_RAIL: + case STATION_WAYPOINT: { + CommandCost ret = IsRailStationBridgeAboveOk(tile, GetStationSpec(tile), GetStationGfx(tile), tile_start, tile_end, z_start + 1, bridge_type, transport_type); + if (ret.Failed()) { + if (ret.GetErrorMessage() != INVALID_STRING_ID) return ret; + ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + if (ret.Failed()) return ret; + } + break; + } + + default: + if (!_settings_game.construction.allow_stations_under_bridges) { + CommandCost ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + if (ret.Failed()) return ret; + } + break; + } + } + } + is_upgrade = true; } else { /* Build a new bridge. */