@@ -560,12 +560,21 @@ CommandCost CmdBuildRoad(TileIndex tile,
MarkTileDirtyByTile(tile);
}
return CommandCost();
return_cmd_error(STR_ERROR_ALREADY_BUILT);
/* Disallow breaking end-of-line of someone else
* so trams can still reverse on this tile. */
if (rt == ROADTYPE_TRAM && HasExactlyOneBit(existing)) {
Owner owner = GetRoadOwner(tile, rt);
if (Company::IsValidID(owner)) {
CommandCost ret = CheckOwnership(owner);
if (ret.Failed()) return ret;
break;
case ROAD_TILE_CROSSING:
other_bits = GetCrossingRoadBits(tile);
if (pieces & ComplementRoadBits(other_bits)) goto do_clear;
@@ -960,13 +960,17 @@ static CommandCost CheckFlatLandRoadStop
num_roadbits += CountBits(GetRoadBits(cur_tile, ROADTYPE_ROAD));
/* There is a tram, check if we can build road+tram stop over it. */
if (HasBit(cur_rts, ROADTYPE_TRAM)) {
Owner tram_owner = GetRoadOwner(cur_tile, ROADTYPE_TRAM);
if (!_settings_game.construction.road_stop_on_competitor_road && tram_owner != OWNER_NONE) {
if (Company::IsValidID(tram_owner) &&
(!_settings_game.construction.road_stop_on_competitor_road ||
HasExactlyOneBit(GetRoadBits(cur_tile, ROADTYPE_TRAM)))) {
CommandCost ret = CheckOwnership(tram_owner);
num_roadbits += CountBits(GetRoadBits(cur_tile, ROADTYPE_TRAM));
Status change: