diff --git a/train_cmd.c b/train_cmd.c index 5853116b1c..1ce1631ee8 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -2049,13 +2049,13 @@ static bool CheckCompatibleRail(const Vehicle *v, TileIndex tile) case MP_TUNNELBRIDGE: if ((_map5[tile] & 0xC0) == 0xC0) { // is bridge middle part? - TileInfo ti; - FindLandscapeHeightByTile(&ti, tile); + uint height; + uint tileh = GetTileSlope(tile, &height); // correct Z position of a train going under a bridge on slopes - if (CORRECT_Z(ti.tileh)) ti.z += 8; + if (CORRECT_Z(tileh)) height += 8; - if (v->z_pos != ti.z) return true; // train is going over bridge + if (v->z_pos != height) return true; // train is going over bridge } break; diff --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c index 156ea8a23c..62418e2d30 100644 --- a/tunnelbridge_cmd.c +++ b/tunnelbridge_cmd.c @@ -905,9 +905,7 @@ int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec) static uint GetBridgeHeight(const TileInfo *ti) { uint delta; - TileInfo ti_end; - uint tile = ti->tile; - uint z_correction = 0; + TileIndex tile = ti->tile; // find the end tile of the bridge. delta = (_map5[tile] & 1) ? TILE_XY(0,1) : TILE_XY(1,0); @@ -916,14 +914,10 @@ static uint GetBridgeHeight(const TileInfo *ti) tile += delta; } while (_map5[tile] & 0x40); // while bridge middle parts - // if the end of the bridge is on a tileh 7, the z coordinate is 1 tile too low - // correct it. - FindLandscapeHeightByTile(&ti_end, tile); - if (HASBIT(1 << 7, ti_end.tileh)) - z_correction += 8; - - // return the height there (the height of the NORTH CORNER) - return TilePixelHeight(tile) + z_correction; + /* Return the height there (the height of the NORTH CORNER) + * If the end of the bridge is on a tileh 7 (all raised, except north corner), + * the z coordinate is 1 height level too low. Compensate for that */ + return TilePixelHeight(tile) + (GetTileSlope(tile, NULL) == 7 ? 8 : 0); } static const byte _bridge_foundations[2][16] = { diff --git a/vehicle.c b/vehicle.c index ffe2e392e1..915da38da4 100644 --- a/vehicle.c +++ b/vehicle.c @@ -82,10 +82,7 @@ static inline uint Correct_Z(uint tileh) uint GetCorrectTileHeight(TileIndex tile) { - TileInfo ti; - - FindLandscapeHeightByTile(&ti, tile); - return Correct_Z(ti.tileh); + return Correct_Z(GetTileSlope(tile, NULL)); } bool EnsureNoVehicleZ(TileIndex tile, byte z)