(svn r14314) -Fix: pay for two road bits when adding/removing roadtype at drive through road stop/level crossing
authorsmatz
Sat, 13 Sep 2008 17:06:44 +0000
changeset 10128 a4db5a618fc5
parent 10127 4f53c1cfcfe9
child 10129 86af33783c5e
(svn r14314) -Fix: pay for two road bits when adding/removing roadtype at drive through road stop/level crossing
src/road_cmd.cpp
--- a/src/road_cmd.cpp	Sat Sep 13 15:49:29 2008 +0000
+++ b/src/road_cmd.cpp	Sat Sep 13 17:06:44 2008 +0000
@@ -255,7 +255,8 @@
 				}
 			}
 		} 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 @@
 					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 @@
 		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;
 			}