From d5ca29a5ab286825ed4bb2f6939ed2d51d483f41 Mon Sep 17 00:00:00 2001 From: smatz Date: Sat, 13 Sep 2008 17:06:44 +0000 Subject: [PATCH] (svn r14314) -Fix: pay for two road bits when adding/removing roadtype at drive through road stop/level crossing --- src/road_cmd.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 900dbbd1a7..cc0a092acd 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -255,7 +255,8 @@ static CommandCost RemoveRoad(TileIndex tile, uint32 flags, RoadBits pieces, Roa } } } else { - cost.AddCost(_price.remove_road); + assert(IsDriveThroughStopTile(tile)); + cost.AddCost(_price.remove_road * 2); if (flags & DC_EXEC) { SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt)); MarkTileDirtyByTile(tile); @@ -525,6 +526,7 @@ CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (HasTileRoadType(tile, rt)) return_cmd_error(STR_1007_ALREADY_BUILT); other_bits = GetCrossingRoadBits(tile); if (pieces & ComplementRoadBits(other_bits)) goto do_clear; + pieces = other_bits; // we need to pay for both roadbits break; default: @@ -577,7 +579,9 @@ CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) case MP_STATION: if (!IsRoadStop(tile)) goto do_clear; if (IsDriveThroughStopTile(tile)) { - if (pieces & ~AxisToRoadBits(DiagDirToAxis(GetRoadStopDir(tile)))) goto do_clear; + RoadBits curbits = AxisToRoadBits(DiagDirToAxis(GetRoadStopDir(tile))); + if (pieces & ~curbits) goto do_clear; + pieces = curbits; // we need to pay for both roadbits } else { if (pieces & ~DiagDirToRoadBits(GetRoadStopDir(tile))) goto do_clear; }