diff --git a/src/landscape.cpp b/src/landscape.cpp index a9c985b592..fe8d50ed7d 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -755,7 +755,7 @@ CommandCost CmdLandscapeClear(TileIndex tile, DoCommandFlag flags, uint32 p1, ui if (flags & DC_EXEC) { if (c != nullptr) c->clear_limit -= 1 << 16; - if (do_clear) DoClearSquare(tile); + if (do_clear) ForceClearWaterTile(tile); } return cost; } diff --git a/src/water.h b/src/water.h index 0ec972a3cd..6d044cdaec 100644 --- a/src/water.h +++ b/src/water.h @@ -44,6 +44,8 @@ static const uint RIVER_OFFSET_DESERT_DISTANCE = 5; ///< Circular tile search ra bool IsWateredTile(TileIndex tile, Direction from); +void ForceClearWaterTile(TileIndex tile); + /** * Calculates the maintenance cost of a number of canal tiles. * @param num Number of canal tiles. diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 97755ef187..d2ae3178b5 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -634,6 +634,15 @@ static CommandCost ClearTile_Water(TileIndex tile, DoCommandFlag flags) } } +void ForceClearWaterTile(TileIndex tile) +{ + bool remove = IsDockingTile(tile); + DoClearSquare(tile); + MarkCanalsAndRiversAroundDirty(tile); + if (remove) RemoveDockingTile(tile); + ClearNeighbourNonFloodingStates(tile); +} + /** * return true if a tile is a water tile wrt. a certain direction. *