diff options
Diffstat (limited to 'water_cmd.c')
-rw-r--r-- | water_cmd.c | 63 |
1 files changed, 16 insertions, 47 deletions
diff --git a/water_cmd.c b/water_cmd.c index 086ff36f1..ff48573f3 100644 --- a/water_cmd.c +++ b/water_cmd.c @@ -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 @@ int32 CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) 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 @@ static int32 DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags) 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 @@ int32 CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) 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 @@ int32 CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) // 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 int32 ClearTile_Water(TileIndex tile, byte flags) 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 @@ static void DrawTile_Water(TileInfo *ti) 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 @@ static void TileLoopWaterHelper(TileIndex tile, const TileIndexDiffC *offs) } 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); |