OpenTTD
Functions | Variables
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 "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 "game/game.hpp"
#include "core/random_func.hpp"
#include "core/backup_type.hpp"
#include "date_func.h"
#include "company_base.h"
#include "company_gui.h"
#include "newgrf_generic.h"
#include "table/strings.h"
#include "safeguards.h"
#include "table/water_land.h"

Go to the source code of this file.

Functions

static void MarkTileDirtyIfCanalOrRiver (TileIndex tile)
 Marks tile dirty if it is a canal or river tile. More...
 
static void MarkCanalsAndRiversAroundDirty (TileIndex tile)
 Marks the tiles around a tile as dirty, if they are canals or rivers. More...
 
CommandCost CmdBuildShipDepot (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build a ship depot. More...
 
void MakeWaterKeepingClass (TileIndex tile, Owner o)
 
static CommandCost RemoveShipDepot (TileIndex tile, DoCommandFlag flags)
 
static CommandCost DoBuildLock (TileIndex tile, DiagDirection dir, DoCommandFlag flags)
 Builds a lock. More...
 
static CommandCost RemoveLock (TileIndex tile, DoCommandFlag flags)
 Remove a lock. More...
 
CommandCost CmdBuildLock (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Builds a lock. More...
 
bool RiverModifyDesertZone (TileIndex tile, void *)
 Callback to create non-desert around a river tile. More...
 
CommandCost CmdBuildCanal (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build a piece of canal. More...
 
static CommandCost ClearTile_Water (TileIndex tile, DoCommandFlag flags)
 
bool IsWateredTile (TileIndex tile, Direction from)
 return true if a tile is a water tile wrt. More...
 
static void DrawWaterSprite (SpriteID base, uint offset, CanalFeature feature, TileIndex tile)
 Draw a water sprite, potentially with a NewGRF-modified sprite offset. More...
 
static void DrawWaterEdges (bool canal, uint offset, TileIndex tile)
 Draw canal or river edges. More...
 
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 DrawWaterTileStruct (const TileInfo *ti, const DrawTileSeqStruct *dtss, SpriteID base, uint offset, PaletteID palette, CanalFeature feature)
 Draw a build sprite sequence for water tiles. More...
 
static void DrawWaterLock (const TileInfo *ti)
 Draw a lock tile. More...
 
static void DrawWaterDepot (const TileInfo *ti)
 Draw a ship depot tile. More...
 
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, Axis axis, DepotPart part)
 
static int GetSlopePixelZ_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)
 Handle the flooding of a vehicle. More...
 
static VehicleFloodVehicleProc (Vehicle *v, void *data)
 Flood a vehicle if we are allowed to flood it, i.e. More...
 
static void FloodVehicles (TileIndex tile)
 Finds a vehicle to flood. More...
 
FloodingBehaviour GetFloodingBehaviour (TileIndex tile)
 Returns the behaviour of a tile during flooding. More...
 
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() More...
 
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, int 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). More...
 
const TileTypeProcs _tile_type_water_procs
 

Detailed Description

Handling of water tiles.

Definition in file water_cmd.cpp.

Function Documentation

◆ CmdBuildCanal()

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

Build a piece of canal.

Parameters
tileend tile of stretch-dragging
flagstype of operation
p1start tile of stretch-dragging
p2waterclass to build. sea and river can only be built in scenario editor
textunused
Returns
the cost of this operation or an error

Definition at line 394 of file water_cmd.cpp.

References CMD_ERROR, MapSize(), WATER_CLASS_CANAL, and WATER_CLASS_INVALID.

◆ CmdBuildLock()

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

Builds a lock.

Parameters
tiletile where to place the lock
flagstype of operation
p1unused
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 370 of file water_cmd.cpp.

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

◆ CmdBuildShipDepot()

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

Build a ship depot.

Parameters
tiletile where ship depot is built
flagstype of operation
p1bit 0 depot orientation (Axis)
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 102 of file water_cmd.cpp.

References AXIS_X, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_depot_pool >::CanAllocateItem(), CMD_ERROR, EXPENSES_CONSTRUCTION, GetWaterClass(), HasTileWaterGround(), IsBridgeAbove(), IsTileFlat(), return_cmd_error, and TileDiffXY().

◆ DoBuildLock()

static CommandCost DoBuildLock ( TileIndex  tile,
DiagDirection  dir,
DoCommandFlag  flags 
)
static

Builds a lock.

Parameters
tileCentral tile of the lock.
dirUphill direction.
flagsOperation to perform.
Returns
The cost in case of success, or an error code if it failed.

Definition at line 249 of file water_cmd.cpp.

References CommandCost::AddCost(), CMD_LANDSCAPE_CLEAR, DoCommand(), EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), GetWaterClass(), IsWaterTile(), CommandCost::Succeeded(), TileOffsByDiagDir(), and WATER_CLASS_CANAL.

Referenced by CmdBuildLock().

◆ DrawWaterDepot()

static void DrawWaterDepot ( const TileInfo ti)
static

Draw a ship depot tile.

Definition at line 773 of file water_cmd.cpp.

◆ DrawWaterEdges()

static void DrawWaterEdges ( bool  canal,
uint  offset,
TileIndex  tile 
)
static

Draw canal or river edges.

Parameters
canalTrue if canal edges should be drawn, false for river edges.
offsetSprite offset.
tileTile to draw.

Definition at line 634 of file water_cmd.cpp.

◆ DrawWaterLock()

static void DrawWaterLock ( const TileInfo ti)
static

Draw a lock tile.

Definition at line 734 of file water_cmd.cpp.

References GetLockPart(), and TileInfo::tile.

◆ DrawWaterSprite()

static void DrawWaterSprite ( SpriteID  base,
uint  offset,
CanalFeature  feature,
TileIndex  tile 
)
static

Draw a water sprite, potentially with a NewGRF-modified sprite offset.

Parameters
baseSprite base.
offsetSprite offset.
featureThe type of sprite that is drawn.
tileTile index to draw.

Definition at line 619 of file water_cmd.cpp.

◆ DrawWaterTileStruct()

static void DrawWaterTileStruct ( const TileInfo ti,
const DrawTileSeqStruct dtss,
SpriteID  base,
uint  offset,
PaletteID  palette,
CanalFeature  feature 
)
static

Draw a build sprite sequence for water tiles.

If buildings are invisible, nothing will be drawn.

Parameters
tiTile info.
dtssSprite sequence to draw.
baseBase sprite.
offsetAdditional sprite offset.
palettePalette to use.

Definition at line 717 of file water_cmd.cpp.

References IsInvisibilitySet(), DrawTileSeqStruct::IsTerminator(), PalSpriteID::sprite, and TO_BUILDINGS.

◆ FloodVehicle()

static void FloodVehicle ( Vehicle v)
static

Handle the flooding of a vehicle.

This sets the vehicle state to crashed, creates a newsitem and dirties the necessary windows.

Parameters
vThe vehicle to flood.

Definition at line 918 of file water_cmd.cpp.

References _settings_client, AddVehicleNewsItem(), Vehicle::Crash(), CreateEffectVehicleRel(), SoundSettings::disaster, EV_EXPLOSION_LARGE, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Game::NewEvent(), AI::NewEvent(), NT_ACCIDENT, Vehicle::owner, SetDParam(), ClientSettings::sound, and Vehicle::tile.

Referenced by FloodVehicleProc().

◆ FloodVehicleProc()

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
vThe vehicle to test for flooding.
dataThe z of level to flood.
Returns
NULL as we always want to remove everything.

Definition at line 936 of file water_cmd.cpp.

References AIR_SHADOW, Station::airport, AirportFTAClass::delta_z, Vehicle::First(), FloodVehicle(), SpecializedStation< Station, false >::GetByTile(), Airport::GetFTA(), GetTileMaxZ(), IsAirportTile(), Vehicle::subtype, Vehicle::tile, BaseVehicle::type, VEH_AIRCRAFT, VEH_ROAD, VEH_TRAIN, Vehicle::vehstatus, VS_CRASHED, and Vehicle::z_pos.

Referenced by FloodVehicles().

◆ 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
tilethe tile where to find a vehicle to flood

Definition at line 974 of file water_cmd.cpp.

References Station::airport, FindVehicleOnPos(), FloodVehicleProc(), GetBridgePixelHeight(), SpecializedStation< Station, false >::GetByTile(), GetOtherBridgeEnd(), IsAirportTile(), IsBridgeTile(), and TILE_AREA_LOOP.

◆ GetFloodingBehaviour()

FloodingBehaviour GetFloodingBehaviour ( TileIndex  tile)

Returns the behaviour of a tile during flooding.

Returns
Behaviour of the tile

Definition at line 1005 of file water_cmd.cpp.

References FLOOD_ACTIVE, FLOOD_DRYUP, FLOOD_NONE, GetTileSlope(), GetTileType(), GetWaterClass(), IsCoast(), IsSlopeWithOneCornerRaised(), MP_INDUSTRY, MP_OBJECT, MP_RAILWAY, MP_STATION, MP_WATER, and WATER_CLASS_SEA.

Referenced by CheckRailSlope(), and TileLoop_Water().

◆ IsWateredTile()

bool IsWateredTile ( TileIndex  tile,
Direction  from 
)

return true if a tile is a water tile wrt.

a certain direction.

Parameters
tileThe tile of interest.
fromThe direction of interest.
Returns
true iff the tile is water in the view of 'from'.

Definition at line 548 of file water_cmd.cpp.

References GetTileType(), GetWaterTileType(), and MP_WATER.

Referenced by CanalScopeResolver::GetVariable().

◆ MarkTileDirtyIfCanalOrRiver()

static void MarkTileDirtyIfCanalOrRiver ( TileIndex  tile)
inlinestatic

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

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

Parameters
tiletile to check

Definition at line 74 of file water_cmd.cpp.

References IsCanal(), IsRiver(), IsTileType(), IsValidTile(), MarkTileDirtyByTile(), and MP_WATER.

Referenced by MarkCanalsAndRiversAroundDirty().

◆ RemoveLock()

static CommandCost RemoveLock ( TileIndex  tile,
DoCommandFlag  flags 
)
static

◆ RiverModifyDesertZone()

bool RiverModifyDesertZone ( TileIndex  tile,
void *   
)

Callback to create non-desert around a river tile.

Definition at line 379 of file water_cmd.cpp.

References GetTropicZone(), SetTropicZone(), TROPICZONE_DESERT, and TROPICZONE_NORMAL.

◆ TileLoop_Water()

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
tilethe water/shore tile that floods

Definition at line 1153 of file water_cmd.cpp.

References _flood_from_dirs, AmbientSoundEffect(), DIR_BEGIN, DIR_END, DoDryUp(), DoFloodTile(), FLOOD_ACTIVE, FLOOD_DRYUP, FLOOD_PASSIVE, FOR_EACH_SET_BIT, GetFloodingBehaviour(), GetFoundationSlope(), GetTreeGround(), HasBit(), IsTileType(), IsValidTile(), MP_TREES, MP_WATER, ReverseDir(), SLOPE_HALFTILE_MASK, SLOPE_STEEP, TileOffsByDir(), and TREE_GROUND_SHORE.

Variable Documentation

◆ _flood_from_dirs

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),
}
East.
Southeast.
Northeast.
West.
North.
Northwest.
South.
Southwest.

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

Definition at line 50 of file water_cmd.cpp.

Referenced by TileLoop_Water().

◆ _tile_type_water_procs

const TileTypeProcs _tile_type_water_procs
Initial value:
= {
DrawTile_Water,
GetSlopePixelZ_Water,
ClearTile_Water,
NULL,
GetTileDesc_Water,
GetTileTrackStatus_Water,
ClickTile_Water,
NULL,
ChangeTileOwner_Water,
NULL,
VehicleEnter_Water,
GetFoundation_Water,
TerraformTile_Water,
}
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()
Definition: water_cmd.cpp:1153