summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2015-06-20 13:11:09 +0000
committerfrosch <frosch@openttd.org>2015-06-20 13:11:09 +0000
commit904688c00a14cadce0c8a651146b305a33d39523 (patch)
tree6fa9d4952e4ffef06b885e258d692aa8c29c5318 /src
parentbf64a8c2006bae1734c2f7f1f7dc89b7474597f3 (diff)
downloadopenttd-904688c00a14cadce0c8a651146b305a33d39523.tar.xz
(svn r27308) -Fix [FS#6283]: Prevent breaking of tram-reversal points by adding more road pieces. (adf88)
Diffstat (limited to 'src')
-rw-r--r--src/road_cmd.cpp9
-rw-r--r--src/station_cmd.cpp6
2 files changed, 14 insertions, 1 deletions
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index dcf9b23d0..449a8016b 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -563,6 +563,15 @@ CommandCost CmdBuildRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
}
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;
}
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 1a641113a..f5ecd727c 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -963,7 +963,11 @@ static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags
/* 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 ||
+ /* Disallow breaking end-of-line of someone else
+ * so trams can still reverse on this tile. */
+ HasExactlyOneBit(GetRoadBits(cur_tile, ROADTYPE_TRAM)))) {
CommandCost ret = CheckOwnership(tram_owner);
if (ret.Failed()) return ret;
}