# water_cmd.cpp File Reference

Handling of water tiles. More...

`#include "stdafx.h"`
`#include "cmd_helper.h"`
`#include "landscape.h"`
`#include "viewport_func.h"`
`#include "command_func.h"`
`#include "town.h"`
`#include "news_func.h"`
`#include "depot_base.h"`
`#include "depot_func.h"`
`#include "water.h"`
`#include "industry_map.h"`
`#include "newgrf_canal.h"`
`#include "strings_func.h"`
`#include "functions.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "company_func.h"`
`#include "clear_map.h"`
`#include "tree_map.h"`
`#include "aircraft.h"`
`#include "effectvehicle_func.h"`
`#include "tunnelbridge_map.h"`
`#include "station_base.h"`
`#include "ai/ai.hpp"`
`#include "core/random_func.hpp"`
`#include "table/sprites.h"`
`#include "table/strings.h"`
`#include "table/water_land.h"`

Go to the source code of this file.

## Data Structures

struct | LocksDrawTileStruct

## Enumerations

enum | FloodingBehaviour { FLOOD_NONE, FLOOD_ACTIVE, FLOOD_PASSIVE, FLOOD_DRYUP }
| Describes the behaviour of a tile during flooding. More...

## Functions

static void | MarkTileDirtyIfCanalOrRiver (TileIndex tile)
| Marks tile dirty if it is a canal or river tile.
static void | MarkCanalsAndRiversAroundDirty (TileIndex tile)
| Marks the tiles around a tile as dirty, if they are canals or rivers.
CommandCost | CmdBuildShipDepot (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Build a ship depot.
void | MakeWaterKeepingClass (TileIndex tile, Owner o)
static CommandCost | RemoveShipDepot (TileIndex tile, DoCommandFlag flags)
static CommandCost | DoBuildShiplift (TileIndex tile, DiagDirection dir, DoCommandFlag flags)
| build a shiplift
static CommandCost | RemoveShiplift (TileIndex tile, DoCommandFlag flags)
CommandCost | CmdBuildLock (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Builds a lock (ship-lift).
CommandCost | CmdBuildCanal (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Build a piece of canal.
static CommandCost | ClearTile_Water (TileIndex tile, DoCommandFlag flags)
static bool | IsWateredTile (TileIndex tile, Direction from)
| return true if a tile is a water tile wrt.
static void | DrawWaterEdges (SpriteID base, TileIndex tile)
static void | DrawSeaWater (TileIndex tile)
| Draw a plain sea water tile with no edges.
static void | DrawCanalWater (TileIndex tile)
| draw a canal styled water tile with dikes around
static void | DrawWaterStuff (const TileInfo *ti, const WaterDrawTileStruct *wdts, PaletteID palette, uint base, bool draw_ground)
static void | DrawRiverWater (const TileInfo *ti)
void | DrawShoreTile (Slope tileh)
void | DrawWaterClassGround (const TileInfo *ti)
static void | DrawTile_Water (TileInfo *ti)
void | DrawShipDepotSprite (int x, int y, int image)
static uint | GetSlopeZ_Water (TileIndex tile, uint x, uint y)
static Foundation | GetFoundation_Water (TileIndex tile, Slope tileh)
static void | GetTileDesc_Water (TileIndex tile, TileDesc *td)
static void | FloodVehicle (Vehicle *v)
static Vehicle * | FloodVehicleProc (Vehicle *v, void *data)
| Flood a vehicle if we are allowed to flood it, i.e.
static void | FloodVehicles (TileIndex tile)
| Finds a vehicle to flood.
static FloodingBehaviour | GetFloodingBehaviour (TileIndex tile)
| Returns the behaviour of a tile during flooding.
void | DoFloodTile (TileIndex target)
| Floods a tile.
static void | DoDryUp (TileIndex tile)
| Drys a tile up.
void | TileLoop_Water (TileIndex tile)
| Let a water tile floods its diagonal adjoining tiles called from tunnelbridge_cmd, and by TileLoop_Industry() and TileLoop_Track().
void | ConvertGroundTilesIntoWaterTiles ()
static TrackStatus | GetTileTrackStatus_Water (TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
static bool | ClickTile_Water (TileIndex tile)
static void | ChangeTileOwner_Water (TileIndex tile, Owner old_owner, Owner new_owner)
static VehicleEnterTileStatus | VehicleEnter_Water (Vehicle *v, TileIndex tile, int x, int y)
static CommandCost | TerraformTile_Water (TileIndex tile, DoCommandFlag flags, uint z_new, Slope tileh_new)

## Variables

static const uint8 | _flood_from_dirs []
| Describes from which directions a specific slope can be flooded (if the tile is floodable at all).
const TileTypeProcs | _tile_type_water_procs

## Detailed Description

Handling of water tiles.

Definition in file water_cmd.cpp.

## Enumeration Type Documentation

enum FloodingBehaviour

Describes the behaviour of a tile during flooding.

Enumerator:

  FLOOD_NONE | The tile does not flood neighboured tiles.
  FLOOD_ACTIVE | The tile floods neighboured tiles.
  FLOOD_PASSIVE | The tile does not actively flood neighboured tiles, but it prevents them from drying up.
  FLOOD_DRYUP | The tile drys up if it is not constantly flooded from neighboured tiles.

Definition at line 44 of file water_cmd.cpp.

## Function Documentation

CommandCost CmdBuildCanal | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text |
| ) |  |  |

Build a piece of canal.

Parameters:

  | tile | end tile of stretch-dragging
  | flags | type of operation
  | p1 | start tile of stretch-dragging
  | p2 | specifies canal (0), water (1) or river (2); last two can only be built in scenario editor
  | text | unused

Returns:
  the cost of this operation or an error

Definition at line 290 of file water_cmd.cpp.

References CommandCost::AddCost(), CMD_ERROR, CMD_LANDSCAPE_CLEAR, DoCommand(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), CommandCost::GetCost(), GetTileSlope(), TileArea::h, IsInclinedSlope(), IsTileOwner(), IsTileType(), MakeCanal(), MakeRiver(), MakeSea(), MapSize(), MarkCanalsAndRiversAroundDirty(), MarkTileDirtyByTile(), MP_WATER, OWNER_WATER, return_cmd_error, SLOPE_FLAT, TILE_AREA_LOOP, TileHeight(), and TileArea::w.

CommandCost CmdBuildLock | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text |
| ) |  |  |

Builds a lock (ship-lift).

Parameters:

  | tile | tile where to place the lock
  | flags | type of operation
  | p1 | unused
  | p2 | unused
  | text | unused

Returns:
  the cost of this operation or an error

Definition at line 271 of file water_cmd.cpp.

References DoBuildShiplift(), GetInclinedSlopeDirection(), GetTileSlope(), INVALID_DIAGDIR, and return_cmd_error.

CommandCost CmdBuildShipDepot | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text |
| ) |  |  |

Build a ship depot.

Parameters:

  | tile | tile where ship depot is built
  | flags | type of operation
  | p1 | bit 0 depot orientation (Axis)
  | p2 | unused
  | text | unused

Returns:
  the cost of this operation or an error

Definition at line 105 of file water_cmd.cpp.

References AXIS_X, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_depot_pool >::CanAllocateItem(), CMD_ERROR, CMD_LANDSCAPE_CLEAR, DC_EXEC, DoCommand(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), GetTileSlope(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem< Tpool >::index, IsBridgeAbove(), MarkTileDirtyByTile(), return_cmd_error, SLOPE_FLAT, and TileDiffXY().

static Vehicle* FloodVehicleProc | ( | Vehicle * | v,
|  | void * | data |
| ) |  |  | `[static]`

Flood a vehicle if we are allowed to flood it, i.e.

when it is on the ground.

Parameters:

  | v | The vehicle to test for flooding.
  | data | The z of level to flood.

Returns:
  NULL as we always want to remove everything.

Definition at line 707 of file water_cmd.cpp.

References AIR_SHADOW, Vehicle::subtype, BaseVehicle::type, VEH_AIRCRAFT, VEH_DISASTER, and Vehicle::vehstatus.

Referenced by FloodVehicles().

static void FloodVehicles | ( | TileIndex | tile | ) | `[static]`

Finds a vehicle to flood.

It does not find vehicles that are already crashed on bridges, i.e. flooded.

Parameters:

  | tile | the tile where to find a vehicle to flood

Definition at line 723 of file water_cmd.cpp.

References _settings_game, Station::airport_tile, AirportFTAClass::delta_z, FindVehicleOnPos(), FloodVehicleProc(), GetBridgeHeight(), SpecializedStation< Station, false >::GetByTile(), GetOtherBridgeEnd(), GetStationType(), IsAirportTile(), IsBridgeTile(), IsTileType(), MP_STATION, StationSettings::nonuniform_stations, AirportSpec::size_x, AirportSpec::size_y, GameSettings::station, TILE_ADDXY, TILE_AREA_LOOP, Station::TileBelongsToRailStation(), and BaseStation::train_station.

Referenced by DoFloodTile().

static FloodingBehaviour GetFloodingBehaviour | ( | TileIndex | tile | ) | `[static]`

Returns the behaviour of a tile during flooding.

Returns:
  Behaviour of the tile

Definition at line 801 of file water_cmd.cpp.

References FLOOD_ACTIVE, FLOOD_DRYUP, FLOOD_NONE, GetTileSlope(), GetTileType(), GetTreeGround(), IsBuoy(), IsDock(), IsIndustryTileOnWater(), IsOilRig(), IsSlopeWithOneCornerRaised(), MP_INDUSTRY, MP_RAILWAY, MP_STATION, MP_TREES, MP_WATER, RAIL_GROUND_WATER, SLOPE_FLAT, and TREE_GROUND_SHORE.

Referenced by TileLoop_Water().

static bool IsWateredTile | ( | TileIndex | tile,
|  | Direction | from |
| ) |  |  | `[static]`

return true if a tile is a water tile wrt.

a certain direction.

Parameters:

  | tile | The tile of interest.
  | from | The direction of interest.

Returns:
  true iff the tile is water in the view of 'from'.

Definition at line 411 of file water_cmd.cpp.

References DiagDirToAxis(), DIR_E, DIR_N, DIR_NE, DIR_NW, DIR_S, DIR_SE, DIR_SW, DIR_W, DirToDiagDir(), GetIndustryIndex(), GetTileSlope(), GetTileType(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), IsBuoy(), IsDock(), IsIndustryTileOnWater(), IsOilRig(), IsPlainRail(), IsTileType(), MP_INDUSTRY, MP_RAILWAY, MP_STATION, MP_TUNNELBRIDGE, MP_WATER, RAIL_GROUND_WATER, ReverseDiagDir(), SLOPE_E, SLOPE_FLAT, SLOPE_N, SLOPE_S, SLOPE_W, TileOffsByDir(), TRANSPORT_WATER, and WATER_CLASS_INVALID.

static void MarkTileDirtyIfCanalOrRiver | ( | TileIndex | tile | ) | `[inline, static]`

Marks tile dirty if it is a canal or river tile.

Called to avoid glitches when flooding tiles next to canal tile.

Parameters:

  | tile | tile to check

Definition at line 78 of file water_cmd.cpp.

References IsTileType(), MarkTileDirtyByTile(), and MP_WATER.

Referenced by MarkCanalsAndRiversAroundDirty().

void TileLoop_Water | ( | TileIndex | tile | ) |

Let a water tile floods its diagonal adjoining tiles called from tunnelbridge_cmd, and by TileLoop_Industry() and TileLoop_Track().

Parameters:

  | tile | the water/shore tile that floods

Definition at line 954 of file water_cmd.cpp.

References _flood_from_dirs, AddTileIndexDiffCWrap(), DIR_BEGIN, DIR_END, DoDryUp(), DoFloodTile(), FLOOD_ACTIVE, FLOOD_DRYUP, FLOOD_PASSIVE, FOR_EACH_SET_BIT, GetFloodingBehaviour(), GetFoundationSlope(), HasBit(), INVALID_TILE, IsTileType(), MP_WATER, ReverseDir(), SLOPE_HALFTILE_MASK, SLOPE_STEEP, and TileIndexDiffCByDir().

## Variable Documentation

const uint8 _flood_from_dirs[]`[static]`

Initial value:

     {
      (1 << DIR_NW) | (1 << DIR_SW) | (1 << DIR_SE) | (1 << DIR_NE),
      (1 << DIR_NE) | (1 << DIR_SE),
      (1 << DIR_NW) | (1 << DIR_NE),
      (1 << DIR_NE),
      (1 << DIR_NW) | (1 << DIR_SW),
      0,
      (1 << DIR_NW),
      (1 << DIR_N ) | (1 << DIR_NW) | (1 << DIR_NE),
      (1 << DIR_SW) | (1 << DIR_SE),
      (1 << DIR_SE),
      0,
      (1 << DIR_E ) | (1 << DIR_NE) | (1 << DIR_SE),
      (1 << DIR_SW),
      (1 << DIR_S ) | (1 << DIR_SW) | (1 << DIR_SE),
      (1 << DIR_W ) | (1 << DIR_SW) | (1 << DIR_NW),
    }

Describes from which directions a specific slope can be flooded (if the tile is floodable at all).

Definition at line 54 of file water_cmd.cpp.

Referenced by TileLoop_Water().

const TileTypeProcs _tile_type_water_procs

Initial value:

     {
      DrawTile_Water,
      GetSlopeZ_Water,
      ClearTile_Water,
      NULL,
      GetTileDesc_Water,
      GetTileTrackStatus_Water,
      ClickTile_Water,
      NULL,
      TileLoop_Water,
      ChangeTileOwner_Water,
      NULL,
      VehicleEnter_Water,
      GetFoundation_Water,
      TerraformTile_Water,
    }