diff -r 882af4997b60 -r a5f08e17f4a0 water_cmd.c --- a/water_cmd.c Thu Jun 01 22:20:40 2006 +0000 +++ b/water_cmd.c Fri Jun 02 13:05:41 2006 +0000 @@ -20,7 +20,7 @@ #include "train.h" #include "water_map.h" -const SpriteID _water_shore_sprites[15] = { +static const SpriteID _water_shore_sprites[] = { 0, SPR_SHORE_TILEH_1, SPR_SHORE_TILEH_2, @@ -65,6 +65,8 @@ if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2)) return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER); + if (IsBridgeAbove(tile) || IsBridgeAbove(tile2)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); + ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); if (CmdFailed(ret)) return CMD_ERROR; ret = DoCommand(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR); @@ -139,6 +141,8 @@ return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); } + if (IsBridgeAbove(tile) || IsBridgeAbove(tile - delta) || IsBridgeAbove(tile + delta)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); + if (flags & DC_EXEC) { MakeLock(tile, dir); MarkTileDirtyByTile(tile); @@ -227,6 +231,8 @@ cost = 0; BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) { + int32 ret; + if (GetTileSlope(tile, NULL) != SLOPE_FLAT) { return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); } @@ -234,26 +240,12 @@ // can't make water of water! if (IsTileType(tile, MP_WATER)) continue; - /* is middle piece of a bridge? */ - if (IsBridgeTile(tile) && IsBridgeMiddle(tile)) { - if (IsTransportUnderBridge(tile)) { - return_cmd_error(STR_5800_OBJECT_IN_THE_WAY); - } - - if (IsWaterUnderBridge(tile)) return_cmd_error(STR_1007_ALREADY_BUILT); - - if (flags & DC_EXEC) SetWaterUnderBridge(tile); - } else { - /* no bridge, try to clear it. */ - int32 ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); - - if (CmdFailed(ret)) return ret; - cost += ret; - - if (flags & DC_EXEC) MakeWater(tile); - } + ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + if (CmdFailed(ret)) return ret; + cost += ret; if (flags & DC_EXEC) { + MakeWater(tile); MarkTileDirtyByTile(tile); MarkTilesAroundDirty(tile); } @@ -336,17 +328,9 @@ static bool IsWateredTile(TileIndex tile) { switch (GetTileType(tile)) { - case MP_WATER: - return !IsCoast(tile); - - case MP_STATION: - return IsOilRig(tile) || IsDock(tile) || IsBuoy_(tile); - - case MP_TUNNELBRIDGE: - return IsBridge(tile) && IsBridgeMiddle(tile) && IsWaterUnderBridge(tile); - - default: - return false; + case MP_WATER: return !IsCoast(tile); + case MP_STATION: return IsOilRig(tile) || IsDock(tile) || IsBuoy_(tile); + default: return false; } } @@ -422,11 +406,13 @@ case WATER_CLEAR: DrawGroundSprite(SPR_FLAT_WATER_TILE); if (ti->z != 0) DrawCanalWater(ti->tile); + DrawBridgeMiddle(ti); break; case WATER_COAST: assert(!IsSteepSlope(ti->tileh)); DrawGroundSprite(_water_shore_sprites[ti->tileh]); + DrawBridgeMiddle(ti); break; case WATER_LOCK: { @@ -536,27 +522,10 @@ } break; - case MP_TUNNELBRIDGE: - if (IsBridge(target) && IsBridgeMiddle(target) && IsClearUnderBridge(target)) { - SetWaterUnderBridge(target); - MarkTileDirtyByTile(target); - } - break; - default: break; } } else { - if (IsBridgeTile(target) && IsBridgeMiddle(target)) { - if (IsWaterUnderBridge(target) || - (IsTransportUnderBridge(target) && GetTransportTypeUnderBridge(target) == TRANSPORT_WATER)) { // XXX does this happen at all? - return; - } - SetWaterUnderBridge(target); - MarkTileDirtyByTile(target); - return; - } - _current_player = OWNER_WATER; { Vehicle *v = FindVehicleOnTileZ(target, 0);