diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 3d7812cbdb..30ee2825a5 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -115,6 +115,7 @@ void BuildObject(ObjectType type, TileIndex tile, CompanyID owner, Town *town, u assert(o->town != nullptr); TILE_AREA_LOOP(t, ta) { + if (IsWaterTile(t)) ClearNeighbourNonFloodingStates(t); WaterClass wc = (IsWaterTile(t) ? GetWaterClass(t) : WATER_CLASS_INVALID); /* Update company infrastructure counts for objects build on canals owned by nobody. */ if (wc == WATER_CLASS_CANAL && owner != OWNER_NONE && (IsTileOwner(tile, OWNER_NONE) || IsTileOwner(tile, OWNER_WATER))) { diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 8de5888d70..edfc939dfd 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -99,6 +99,7 @@ static void PlantTreesOnTile(TileIndex tile, TreeType treetype, uint count, uint switch (GetTileType(tile)) { case MP_WATER: ground = TREE_GROUND_SHORE; + ClearNeighbourNonFloodingStates(tile); break; case MP_CLEAR: diff --git a/src/water.h b/src/water.h index 27c3339c18..0ec972a3cd 100644 --- a/src/water.h +++ b/src/water.h @@ -24,6 +24,7 @@ enum FloodingBehaviour { }; FloodingBehaviour GetFloodingBehaviour(TileIndex tile); +void ClearNeighbourNonFloodingStates(TileIndex tile); void TileLoop_Water(TileIndex tile); bool FloodHalftile(TileIndex t); diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index b83d95cbfa..8f813818e4 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -88,7 +88,7 @@ static void MarkCanalsAndRiversAroundDirty(TileIndex tile) } } -static void ClearNeighbourNonFloodingStates(TileIndex tile) +void ClearNeighbourNonFloodingStates(TileIndex tile) { for (Direction dir = DIR_BEGIN; dir < DIR_END; dir++) { TileIndex dest = tile + TileOffsByDir(dir); diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index a5f76d4643..5aac1259cc 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -346,6 +346,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 MakeBuoy(tile, wp->index, GetWaterClass(tile)); CheckForDockingTile(tile); MarkTileDirtyByTile(tile); + ClearNeighbourNonFloodingStates(tile); wp->UpdateVirtCoord(); InvalidateWindowData(WC_WAYPOINT_VIEW, wp->index);