Index: src/water_cmd.cpp =================================================================== --- src/water_cmd.cpp (revision 12032) +++ src/water_cmd.cpp (working copy) @@ -108,12 +108,6 @@ /* Mark tile dirty in all cases */ MarkTileDirtyByTile(t); - /* Non-sealevel -> canal */ - if (TileHeight(t) != 0) { - MakeCanal(t, o, Random()); - return; - } - bool has_water = false; bool has_canal = false; @@ -121,7 +115,7 @@ TileIndex neighbour = TileAddByDiagDir(t, dir); switch (GetTileType(neighbour)) { case MP_WATER: - has_water |= IsSea(neighbour) || IsCoast(neighbour) || (IsShipDepot(neighbour) && GetShipDepotWaterOwner(neighbour) == OWNER_WATER); + has_water |= IsRiver(neighbour) || IsSea(neighbour) || IsCoast(neighbour) || (IsShipDepot(neighbour) && GetShipDepotWaterOwner(neighbour) == OWNER_WATER); has_canal |= IsCanal(neighbour) || (IsShipDepot(neighbour) && GetShipDepotWaterOwner(neighbour) != OWNER_WATER); break; @@ -138,6 +132,7 @@ default: break; } } + if (has_canal || !has_water) { MakeCanal(t, o, Random()); } else {