diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 6d26888d14..211e89b4a0 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -495,11 +495,14 @@ CommandCost CmdBuildCanal(DoCommandFlag flags, TileIndex tile, TileIndex start_t FALLTHROUGH; default: - MakeCanal(current_tile, _current_company, Random()); - if (Company::IsValidID(_current_company)) { + /* If we overbuild a water object with a canal, don't update the infrastructure total. */ + bool is_existing_canal = IsTileType(current_tile, MP_WATER) && IsCanal(current_tile); + if (Company::IsValidID(_current_company) && !is_existing_canal) { Company::Get(_current_company)->infrastructure.water++; DirtyCompanyInfrastructureWindows(_current_company); } + + MakeCanal(current_tile, _current_company, Random()); break; } MarkTileDirtyByTile(current_tile);