summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/station_cmd.cpp10
-rw-r--r--src/station_map.h5
2 files changed, 13 insertions, 2 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 6e3e1b4d1..528352256 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -1806,7 +1806,15 @@ static int32 RemoveBuoy(Station *st, uint32 flags)
st->facilities &= ~FACIL_DOCK;
st->had_vehicle_of_type &= ~HVOT_BUOY;
- MakeWater(tile);
+ /* We have to set the water tile's state to the same state as before the
+ * buoy was placed. Otherwise one could plant a buoy on a canal edge,
+ * remove it and flood the land (if the canal edge is at level 0) */
+ Owner o = GetTileOwner(tile);
+ if (o == OWNER_WATER) {
+ MakeWater(tile);
+ } else {
+ MakeCanal(tile, o);
+ }
MarkTileDirtyByTile(tile);
UpdateStationVirtCoordDirty(st);
diff --git a/src/station_map.h b/src/station_map.h
index fed210766..1128a39f9 100644
--- a/src/station_map.h
+++ b/src/station_map.h
@@ -287,7 +287,10 @@ static inline void MakeAirport(TileIndex t, Owner o, StationID sid, byte section
static inline void MakeBuoy(TileIndex t, StationID sid)
{
- MakeStation(t, OWNER_NONE, sid, GFX_BUOY_BASE);
+ /* Make the owner of the buoy tile the same as the current owner of the
+ * water tile. In this way, we can reset the owner of the water to its
+ * original state when the buoy gets removed. */
+ MakeStation(t, GetTileOwner(t), sid, GFX_BUOY_BASE);
}
static inline void MakeDock(TileIndex t, Owner o, StationID sid, DiagDirection d)