summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tunnelbridge_cmd.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c
index 85eb50d62..c0151655e 100644
--- a/tunnelbridge_cmd.c
+++ b/tunnelbridge_cmd.c
@@ -800,7 +800,7 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, uint totype, bool exec)
}
return _price.build_rail >> 1;
} else if ((_m[tile].m5 & 0xC6) == 0x80) {
- TileIndex starttile;
+ TileIndexDiff delta;
int32 cost;
uint z = TilePixelHeight(tile);
@@ -809,7 +809,7 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, uint totype, bool exec)
if (!CheckTileOwnership(tile)) return CMD_ERROR;
// railway bridge
- starttile = tile = FindEdgesOfBridge(tile, &endtile);
+ tile = FindEdgesOfBridge(tile, &endtile);
// Make sure there's no vehicle on the bridge
v = FindVehicleBetween(tile, endtile, z);
if (v != NULL) {
@@ -817,25 +817,24 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, uint totype, bool exec)
return CMD_ERROR;
}
- if (!EnsureNoVehicle(starttile) || !EnsureNoVehicle(endtile)) {
+ if (!EnsureNoVehicle(tile) || !EnsureNoVehicle(endtile)) {
_error_message = STR_8803_TRAIN_IN_THE_WAY;
return CMD_ERROR;
}
if (GB(_m[tile].m3, 0, 4) == totype) return CMD_ERROR;
- cost = 0;
- do {
+
+ SB(_m[tile].m3, 0, 4, totype);
+ SB(_m[endtile].m3, 0, 4, totype);
+ cost = 2 * (_price.build_rail >> 1);
+ delta = TileOffsByDir(GetBridgeRampDirection(tile));
+ for (tile += delta; tile != endtile; tile += delta) {
if (exec) {
- if (tile == starttile || tile == endtile) {
- SB(_m[tile].m3, 0, 4, totype);
- } else {
- SB(_m[tile].m3, 4, 4, totype);
- }
+ SB(_m[tile].m3, 4, 4, totype);
MarkTileDirtyByTile(tile);
}
cost += _price.build_rail >> 1;
- tile += GB(_m[tile].m5, 0, 1) ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
- } while (tile <= endtile);
+ }
return cost;
} else