OpenTTD Source: src/rail_cmd.cpp File Reference

OpenTTD Source 15.0-RC2

Data Structures | Typedefs | Enumerations | Functions | Variables
rail_cmd.cpp File Reference

Handling of rail tiles. More...

`#include "stdafx.h"`
`#include "viewport_func.h"`
`#include "command_func.h"`
`#include "depot_base.h"`
`#include "pathfinder/yapf/yapf_cache.h"`
`#include "newgrf_debug.h"`
`#include "newgrf_railtype.h"`
`#include "train.h"`
`#include "autoslope.h"`
`#include "water.h"`
`#include "tunnelbridge_map.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "tunnelbridge.h"`
`#include "elrail_func.h"`
`#include "town.h"`
`#include "pbs.h"`
`#include "company_base.h"`
`#include "core/backup_type.hpp"`
`#include "core/container_func.hpp"`
`#include "timer/timer_game_calendar.h"`
`#include "strings_func.h"`
`#include "company_gui.h"`
`#include "object_map.h"`
`#include "rail_cmd.h"`
`#include "landscape_cmd.h"`
`#include "table/strings.h"`
`#include "table/railtypes.h"`
`#include "table/track_land.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | FenceOffset
| Offsets for drawing fences. More...

## Typedefs
typedef std::vector< Train * > | TrainList
| Helper type for lists/vectors of trains.

## Enumerations
enum | SignalOffsets { SIGNAL_TO_SOUTHWEST , SIGNAL_TO_NORTHEAST , SIGNAL_TO_SOUTHEAST , SIGNAL_TO_NORTHWEST , SIGNAL_TO_EAST , SIGNAL_TO_WEST , SIGNAL_TO_SOUTH , SIGNAL_TO_NORTH }
| Enum holding the signal offset in the sprite sheet according to the side it is representing. More...

## Functions
void | ResetRailTypes ()
| Reset all rail type information to its default values.
void | ResolveRailTypeGUISprites (RailTypeInfo *rti)
static bool | CompareRailTypes (const RailType &first, const RailType &second)
| Compare railtypes based on their sorting order.
void | InitRailTypes ()
| Resolve sprites of custom rail types.
RailType | AllocateRailType (RailTypeLabel label)
| Allocate a new rail type label.
static CommandCost | EnsureNoTrainOnTrack (TileIndex tile, Track track)
| Tests if a vehicle interacts with the specified track.
static CommandCost | CheckTrackCombination (TileIndex tile, TrackBits to_build)
| Check that the new track bits may be built.
Foundation | GetRailFoundation (Slope tileh, TrackBits bits)
| Checks if a track combination is valid on a specific slope and returns the needed foundation.
static CommandCost | CheckRailSlope (Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
| Tests if a track can be build on a tile.
static bool | ValParamTrackOrientation (Track track)
CommandCost | CmdBuildSingleRail (DoCommandFlags flags, TileIndex tile, RailType railtype, Track track, bool auto_remove_signals)
| Build a single piece of rail.
CommandCost | CmdRemoveSingleRail (DoCommandFlags flags, TileIndex tile, Track track)
| Remove a single piece of track.
bool | FloodHalftile (TileIndex t)
| Called from water_cmd if a non-flat rail-tile gets flooded and should be converted to shore.
static CommandCost | ValidateAutoDrag (Trackdir *trackdir, TileIndex start, TileIndex end)
static CommandCost | CmdRailTrackHelper (DoCommandFlags flags, TileIndex tile, TileIndex end_tile, RailType railtype, Track track, bool remove, bool auto_remove_signals, bool fail_on_obstacle)
| Build or remove a stretch of railroad tracks.
CommandCost | CmdBuildRailroadTrack (DoCommandFlags flags, TileIndex end_tile, TileIndex start_tile, RailType railtype, Track track, bool auto_remove_signals, bool fail_on_obstacle)
| Build rail on a stretch of track.
CommandCost | CmdRemoveRailroadTrack (DoCommandFlags flags, TileIndex end_tile, TileIndex start_tile, Track track)
| Build rail on a stretch of track.
CommandCost | CmdBuildTrainDepot (DoCommandFlags flags, TileIndex tile, RailType railtype, DiagDirection dir)
| Build a train depot.
CommandCost | CmdBuildSingleSignal (DoCommandFlags flags, TileIndex tile, Track track, SignalType sigtype, SignalVariant sigvar, bool convert_signal, bool skip_existing_signals, bool ctrl_pressed, SignalType cycle_start, SignalType cycle_stop, uint8_t num_dir_cycle, uint8_t signals_copy)
| Build signals, alternate between double/single, signal/semaphore, pre/exit/combo-signals, and what-else not.
static bool | AdvanceSignalAutoFill (TileIndex &tile, Trackdir &trackdir, bool remove)
static CommandCost | CmdSignalTrackHelper (DoCommandFlags flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool remove, bool autofill, bool minimise_gaps, int signal_density)
| Build many signals by dragging; AutoSignals.
CommandCost | CmdBuildSignalTrack (DoCommandFlags flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool autofill, bool minimise_gaps, uint8_t signal_density)
| Build signals on a stretch of track.
CommandCost | CmdRemoveSingleSignal (DoCommandFlags flags, TileIndex tile, Track track)
| Remove signals.
CommandCost | CmdRemoveSignalTrack (DoCommandFlags flags, TileIndex tile, TileIndex end_tile, Track track, bool autofill)
| Remove signals on a stretch of track.
CommandCost | CmdConvertRail (DoCommandFlags flags, TileIndex tile, TileIndex area_start, RailType totype, bool diagonal)
| Convert one rail type to the other.
static CommandCost | RemoveTrainDepot (TileIndex tile, DoCommandFlags flags)
static CommandCost | ClearTile_Track (TileIndex tile, DoCommandFlags flags)
static uint | GetSaveSlopeZ (uint x, uint y, Track track)
| Get surface height in point (x,y) On tiles with halftile foundations move (x,y) to a safe point wrt.
static void | DrawSingleSignal (TileIndex tile, const RailTypeInfo *rti, Track track, SignalState condition, SignalOffsets image, uint pos)
static void | DrawTrackFence (const TileInfo *ti, const PalSpriteID &psid, uint num_sprites, RailFenceOffset rfo)
| Draw a track fence.
static void | DrawTrackFence_NW (const TileInfo *ti, const PalSpriteID &psid, uint num_sprites)
| Draw fence at NW border matching the tile slope.
static void | DrawTrackFence_SE (const TileInfo *ti, const PalSpriteID &psid, uint num_sprites)
| Draw fence at SE border matching the tile slope.
static void | DrawTrackFence_NE (const TileInfo *ti, const PalSpriteID &psid, uint num_sprites)
| Draw fence at NE border matching the tile slope.
static void | DrawTrackFence_SW (const TileInfo *ti, const PalSpriteID &psid, uint num_sprites)
| Draw fence at SW border matching the tile slope.
static void | DrawTrackDetails (const TileInfo *ti, const RailTypeInfo *rti, PaletteID pal)
| Draw track fences.
static void | DrawTrackSprite (SpriteID sprite, PaletteID pal, const TileInfo *ti, Slope s)
static void | DrawTrackBitsOverlay (TileInfo *ti, TrackBits track, const RailTypeInfo *rti)
static int | GetJunctionGroundSpriteOffset (TrackBits track)
| Returns which of the 5 junction-'Rail underlays' to use for the given track bits.
static void | DrawTrackBits (TileInfo *ti, TrackBits track)
| Draw ground sprite and track bits.
static void | DrawSignals (TileIndex tile, TrackBits rails, const RailTypeInfo *rti)
static void | DrawTile_Track (TileInfo *ti)
void | DrawTrainDepotSprite (int x, int y, int dir, RailType railtype)
static int | GetSlopePixelZ_Track (TileIndex tile, uint x, uint y, bool)
static Foundation | GetFoundation_Track (TileIndex tile, Slope tileh)
static void | TileLoop_Track (TileIndex tile)
static TrackStatus | GetTileTrackStatus_Track (TileIndex tile, TransportType mode, uint, DiagDirection side)
static bool | ClickTile_Track (TileIndex tile)
static void | GetTileDesc_Track (TileIndex tile, TileDesc &td)
static void | ChangeTileOwner_Track (TileIndex tile, Owner old_owner, Owner new_owner)
int | TicksToLeaveDepot (const Train *v)
| Compute number of ticks when next wagon will leave a depot.
static VehicleEnterTileStates | VehicleEnter_Track (Vehicle *u, TileIndex tile, int x, int y)
| Tile callback routine when vehicle enters tile.
static CommandCost | TestAutoslopeOnRailTile (TileIndex tile, DoCommandFlags flags, int z_old, Slope tileh_old, int z_new, Slope tileh_new, TrackBits rail_bits)
| Tests if autoslope is allowed.
static CommandCost | TerraformTile_Track (TileIndex tile, DoCommandFlags flags, int z_new, Slope tileh_new)
static CommandCost | CheckBuildAbove_Track (TileIndex tile, DoCommandFlags flags, Axis, int)

## Variables
RailTypeInfo | _railtypes [RAILTYPE_END]
std::vector< RailType > | _sorted_railtypes
| Sorted list of rail types.
RailTypes | _railtypes_hidden_mask
static const uint8_t | _track_sloped_sprites [14]
static const TrackBits | _valid_tracks_without_foundation [15]
| Valid TrackBits on a specific (non-steep)-slope without foundation.
static const TrackBits | _valid_tracks_on_leveled_foundation [15]
| Valid TrackBits on a specific (non-steep)-slope with leveled foundation.
static const TileIndexDiffC | _trackdelta []
static const FenceOffset | _fence_offsets []
| Offsets for drawing fences.
static const int | INF = 1000
static const SubSprite | _halftile_sub_sprite [4]
static const uint8_t | _fractcoords_behind [4] = { 0x8F, 0x8, 0x80, 0xF8 }
static const uint8_t | _fractcoords_enter [4] = { 0x8A, 0x48, 0x84, 0xA8 }
static const int8_t | _deltacoord_leaveoffset [8]
const TileTypeProcs | _tile_type_rail_procs

## Detailed Description

Handling of rail tiles.

Definition in file rail_cmd.cpp.

## Typedef Documentation

## ◆ TrainList

typedef std::vector<Train *> TrainList

Helper type for lists/vectors of trains.

Definition at line 44 of file rail_cmd.cpp.

## Enumeration Type Documentation

## ◆ SignalOffsets

enum SignalOffsets

Enum holding the signal offset in the sprite sheet according to the side it is representing.

Definition at line 51 of file rail_cmd.cpp.

## Function Documentation

## ◆ AdvanceSignalAutoFill()

static bool AdvanceSignalAutoFill | ( | TileIndex & | tile,
|  | Trackdir & | trackdir,
|  | bool | remove
| ) |  |
| static

Definition at line 1196 of file rail_cmd.cpp.

## ◆ AllocateRailType()

RailType AllocateRailType | ( | RailTypeLabel | label | ) |

Allocate a new rail type label.

Definition at line 148 of file rail_cmd.cpp.

References _original_railtypes, RailTypeInfo::alternate_labels, RailTypeInfo::compatible_railtypes, RailTypeInfo::Index(), RailTypeInfo::introduces_railtypes, INVALID_RAILTYPE, RailTypeInfo::label, RailTypeInfo::powered_railtypes, RAILTYPE_RAIL, and RailTypeInfo::sorting_order.

## ◆ ChangeTileOwner_Track()

static void ChangeTileOwner_Track | ( | TileIndex | tile,
|  | Owner | old_owner,
|  | Owner | new_owner
| ) |  |
| static

Definition at line 2884 of file rail_cmd.cpp.

## ◆ CheckBuildAbove_Track()

static CommandCost CheckBuildAbove_Track | ( | TileIndex | tile,
|  | DoCommandFlags | flags,
|  | Axis | ,
|  | int |
| ) |  |
| static

Definition at line 3092 of file rail_cmd.cpp.

## ◆ CheckRailSlope()

static CommandCost CheckRailSlope | ( | Slope | tileh,
|  | TrackBits | rail_bits,
|  | TrackBits | existing,
|  | TileIndex | tile
| ) |  |
| static

Tests if a track can be build on a tile.

Parameters

  tileh | Tile slope.
  rail_bits | Tracks to build.
  existing | Tracks already built.
  tile | Tile (used for water test)

Returns
  Error message or cost for foundation building.

Definition at line 389 of file rail_cmd.cpp.

References _settings_game, _valid_tracks_on_leveled_foundation, ConstructionSettings::build_on_slopes, GameSettings::construction, EXPENSES_CONSTRUCTION, FLOOD_NONE, FOUNDATION_INVALID, FOUNDATION_NONE, GetFloodingBehaviour(), GetRailFoundation(), and IsSteepSlope().

Referenced by CmdBuildSingleRail(), and TestAutoslopeOnRailTile().

## ◆ CheckTrackCombination()

static CommandCost CheckTrackCombination | ( | TileIndex | tile,
|  | TrackBits | to_build
| ) |  |
| static

Check that the new track bits may be built.

Parameters

  tile | Tile to build on.
  to_build | New track bits.

Returns
  Succeeded or failed command.

Definition at line 238 of file rail_cmd.cpp.

References GetTrackBits(), and IsPlainRail().

Referenced by CmdBuildSingleRail().

## ◆ ClearTile_Track()

static CommandCost ClearTile_Track | ( | TileIndex | tile,
|  | DoCommandFlags | flags
| ) |  |
| static

Definition at line 1792 of file rail_cmd.cpp.

## ◆ ClickTile_Track()

static bool ClickTile_Track | ( | TileIndex | tile | ) |
| static

Definition at line 2783 of file rail_cmd.cpp.

## ◆ CmdBuildRailroadTrack()

CommandCost CmdBuildRailroadTrack | ( | DoCommandFlags | flags,
|  | TileIndex | end_tile,
|  | TileIndex | start_tile,
|  | RailType | railtype,
|  | Track | track,
|  | bool | auto_remove_signals,
|  | bool | fail_on_obstacle
| ) |  |

Build rail on a stretch of track.

Stub for the unified rail builder/remover

Parameters

  flags | operation to perform
  end_tile | end tile of drag
  start_tile | start tile of drag
  railtype | railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building
  track | track-orientation
  auto_remove_signals | false = build up to an obstacle, true = fail if an obstacle is found (used for AIs).
  fail_on_obstacle | false = error on signal in the way, true = auto remove signals when in the way

See also
  CmdRailTrackHelper

Definition at line 930 of file rail_cmd.cpp.

References CmdRailTrackHelper().

## ◆ CmdBuildSignalTrack()

CommandCost CmdBuildSignalTrack | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | TileIndex | end_tile,
|  | Track | track,
|  | SignalType | sigtype,
|  | SignalVariant | sigvar,
|  | bool | mode,
|  | bool | autofill,
|  | bool | minimise_gaps,
|  | uint8_t | signal_density
| ) |  |

Build signals on a stretch of track.

Stub for the unified signal builder/remover

Parameters

  flags | operation to perform
  tile | start tile of drag
  end_tile | end tile of drag
  track | track-orientation
  sigtype | default signal type
  sigvar | signal variant to build
  mode | true = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  autofill | fill beyond selected stretch?
  minimise_gaps | false = keep fixed distance, true = minimise gaps between signals
  signal_density | user defined signals_density

Returns
  the cost of this operation or an error

See also
  CmdSignalTrackHelper

Definition at line 1446 of file rail_cmd.cpp.

References CmdSignalTrackHelper().

## ◆ CmdBuildSingleRail()

CommandCost CmdBuildSingleRail | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | RailType | railtype,
|  | Track | track,
|  | bool | auto_remove_signals
| ) |  |

Build a single piece of rail.

Parameters

  flags | operation to perform
  tile | tile to build on
  railtype | railtype of being built piece (normal, mono, maglev)
  track | track-orientation
  auto_remove_signals | false = error on signal in the way, true = auto remove signals when in the way

Returns
  the cost of this operation or an error

Definition at line 423 of file rail_cmd.cpp.

References _current_company, _settings_game, CommandCost::AddCost(), AddTrackToSignalBuffer(), AXIS_X, AXIS_Y, Barren, CheckForDockingTile(), CheckOwnership(), CheckRailSlope(), CheckTileOwnership(), CheckTrackCombination(), CMD_ERROR, GameSettings::construction, CountBits(), ConstructionSettings::crossing_with_competitor, DirtyCompanyInfrastructureWindows(), DRD_NONE, EnsureNoTrainOnTrack(), EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), CommandCost::GetCost(), GetCrossingRailBits(), GetCrossingRoadAxis(), GetDisallowedRoadDirections(), GetRailType(), GetRoadBits(), GetRoadOwner(), GetTileOwner(), GetTileSlope(), GetTileType(), GetTownIndex(), GetTrackBits(), HalfTileWater, HasBit(), HasExactlyOneBit(), HasPowerOnRail(), HasRoadWorks(), HasSignalOnTrack(), HasSignals(), HasTrack(), INVALID_ROADTYPE, IsCompatibleRail(), IsLevelCrossing(), IsNormalRoad(), IsPlainRail(), IsSlopeWithOneCornerRaised(), IsTileType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::IsValidID(), LEVELCROSSING_TRACKBIT_FACTOR, MakeRoadCrossing(), MarkDirtyAdjacentLevelCrossingTiles(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_WATER, OWNER_DEITY, RailBuildCost(), RailNoLevelCrossings(), ROAD_NONE, ROAD_X, ROAD_Y, RoadBuildCost(), RoadNoLevelCrossing(), RTT_ROAD, RTT_TRAM, SetTrackBits(), CommandCost::Succeeded(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TRACK_BEGIN, TRACK_BIT_NONE, TRACK_END, TRACK_X, TRACK_Y, TracksOverlap(), TrackToTrackBits(), UpdateLevelCrossing(), VALID_LEVEL_CROSSING_SLOPES, ValParamRailType(), and YapfNotifyTrackLayoutChange().

## ◆ CmdBuildSingleSignal()

CommandCost CmdBuildSingleSignal | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | Track | track,
|  | SignalType | sigtype,
|  | SignalVariant | sigvar,
|  | bool | convert_signal,
|  | bool | skip_existing_signals,
|  | bool | ctrl_pressed,
|  | SignalType | cycle_start,
|  | SignalType | cycle_stop,
|  | uint8_t | num_dir_cycle,
|  | uint8_t | signals_copy
| ) |  |

Build signals, alternate between double/single, signal/semaphore, pre/exit/combo-signals, and what-else not.

If the rail piece does not have any signals, signal cycling is ignored

Parameters

  flags | operation to perform
  tile | tile where to build the signals
  track | track-orientation
  sigtype | type of the signal
  sigvar | variant of signal type (normal/semaphore)
  ctrl_pressed | true = override signal/semaphore, or pre/exit/combo signal or toggle variant (CTRL-toggle)
  convert_signal | convert the present signal type and variant
  cycle_start | start cycle from this signal type
  cycle_stop | wrap around after this signal type
  num_dir_cycle | cycle the signal direction this many times
  skip_existing_signals | true = don't modify an existing signal but don't fail either, false = always set new signal type
  signals_copy | used for CmdBuildManySignals() to copy direction of first signal

Returns
  the cost of this operation or an error

Todo:
  p2 should be replaced by two bits for "along" and "against" the track.

Definition at line 1049 of file rail_cmd.cpp.

References _current_company, _settings_game, AddTrackToSignalBuffer(), CheckTileOwnership(), CMD_ERROR, CountBits(), Vehicle::cur_speed, Vehicle::current_order, DirtyCompanyInfrastructureWindows(), EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), PathfinderSettings::forbid_90_deg, FreeTrainTrackReservation(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), GetPresentSignals(), GetRailReservationTrackBits(), GetSignalStates(), GetTileOwner(), GetTrackBits(), GetTrainForReservation(), Train::GetVehicleTrackdir(), HasBit(), HasReservedTracks(), HasSignalOnTrack(), HasSignals(), HasTrack(), IsPlainRailTile(), IsSafeWaitingPosition(), Order::IsType(), KillFirstBit(), MarkTileDirtyByTile(), GameSettings::pf, SetHasSignals(), SetPresentSignals(), SetSignalStates(), SIG_ELECTRIC, SIG_SEMAPHORE, SignalOnTrack(), Stopped, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), Vehicle::tile, TRACK_BIT_DEPOT, TracksOverlap(), TrackToTrackBits(), TryPathReserve(), Vehicle::vehstatus, and YapfNotifyTrackLayoutChange().

## ◆ CmdBuildTrainDepot()

CommandCost CmdBuildTrainDepot | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | RailType | railtype,
|  | DiagDirection | dir
| ) |  |

Build a train depot.

Parameters

  flags | operation to perform
  tile | position of the train depot
  railtype | rail type
  dir | entrance direction

Returns
  the cost of this operation or an error

Todo:
  When checking for the tile slope, distinguish between "Flat land required" and "land sloped in wrong direction"

Definition at line 961 of file rail_cmd.cpp.

References _current_company, _settings_game, CommandCost::AddCost(), AddSideToSignalBuffer(), ConstructionSettings::build_on_slopes, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_depot_pool >::CanAllocateItem(), CanBuildDepotByTileh(), CheckTileOwnership(), CMD_ERROR, GameSettings::construction, DiagDirToDiagTrack(), DirtyCompanyInfrastructureWindows(), EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), GetRailDepotDirection(), GetRailType(), GetTileSlope(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, INVALID_DIAGDIR, IsBridgeAbove(), IsRailDepotTile(), IsValidDiagDirection(), MakeDefaultName(), MakeRailDepot(), MarkTileDirtyByTile(), RailBuildCost(), SetRailDepotExitDirection(), SLOPE_FLAT, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), ValParamRailType(), and YapfNotifyTrackLayoutChange().

## ◆ CmdConvertRail()

CommandCost CmdConvertRail | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | TileIndex | area_start,
|  | RailType | totype,
|  | bool | diagonal
| ) |  |

Convert one rail type to the other.

You can convert normal rail to monorail/maglev easily or vice-versa.

Parameters

  flags | operation to perform
  tile | end tile of rail conversion drag
  area_start | start tile of drag
  totype | new railtype to convert to.
  diagonal | build diagonally or not.

Returns
  the cost of this operation or an error

Definition at line 1539 of file rail_cmd.cpp.

References _settings_game, CommandCost::AddCost(), CCF_TRACK, CheckTileOwnership(), CMD_ERROR, CountBits(), TileIterator::Create(), Depot, DiagDirToDiagTrack(), DirtyCompanyInfrastructureWindows(), VehicleSettings::disable_elrails, EnsureNoTrainOnTrackBits(), EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), FreeTrainTrackReservation(), SpecializedVehicle< T, Type >::From(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), GetCrossingRailTrack(), GetOtherTunnelBridgeEnd(), GetRailDepotTrack(), GetRailStationTrack(), GetRailTileType(), GetRailType(), GetReservedTrackbits(), GetTileOwner(), GetTileType(), GetTrackBits(), GetTrainForReservation(), GetTunnelBridgeDirection(), GetTunnelBridgeLength(), GetTunnelBridgeTransportType(), HasPowerOnRail(), HasStationRail(), HasTunnelBridgeReservation(), include(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, Company::infrastructure, INVALID_TILE, INVALID_TRACK, InvalidateWindowData(), IsBridge(), IsCompatibleRail(), IsLevelCrossing(), IsLevelCrossingTile(), IsPlainRailTile(), IsRailStationTile(), IsStationTileBlocked(), LEVELCROSSING_TRACKBIT_FACTOR, CommandCost::MakeError(), MarkBridgeDirty(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, CompanyInfrastructure::rail, RailConvertCost(), RailNoLevelCrossings(), RAILTYPE_ELECTRIC, RAILTYPE_RAIL, RemoveFirstTrack(), SetRailType(), Map::Size(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TRACK_BIT_NONE, TracksOverlap(), TRANSPORT_RAIL, TryPathReserve(), TUNNELBRIDGE_TRACKBIT_FACTOR, TunnelBridgeIsFree(), ValParamRailType(), VEH_TRAIN, GameSettings::vehicle, WC_BUILD_VEHICLE, WC_VEHICLE_DEPOT, and YapfNotifyTrackLayoutChange().

## ◆ CmdRailTrackHelper()

static CommandCost CmdRailTrackHelper | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | TileIndex | end_tile,
|  | RailType | railtype,
|  | Track | track,
|  | bool | remove,
|  | bool | auto_remove_signals,
|  | bool | fail_on_obstacle
| ) |  |
| static

Build or remove a stretch of railroad tracks.

Parameters

  flags | operation to perform
  tile | start tile of drag
  end_tile | end tile of drag
  railtype | railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building
  track | track-orientation
  remove | remove tracks?
  auto_remove_signals | false = error on signal in the way, true = auto remove signals when in the way, only used for building
  fail_on_obstacle | false = build starting from and up to an obstacle, true = fail if an obstacle is found (used for AIs)

Returns
  the cost of this operation or an error

Definition at line 873 of file rail_cmd.cpp.

References CommandCost::AddCost(), CMD_ERROR, EXPENSES_CONSTRUCTION, CommandCost::Failed(), CommandCost::GetCost(), CommandCost::GetErrorMessage(), IsDiagonalTrackdir(), Map::Size(), ToggleBit(), ToTileIndexDiff(), TrackdirToTrack(), TrackToTrackdir(), and ValParamRailType().

Referenced by CmdBuildRailroadTrack(), and CmdRemoveRailroadTrack().

## ◆ CmdRemoveRailroadTrack()

CommandCost CmdRemoveRailroadTrack | ( | DoCommandFlags | flags,
|  | TileIndex | end_tile,
|  | TileIndex | start_tile,
|  | Track | track
| ) |  |

Build rail on a stretch of track.

Stub for the unified rail builder/remover

Parameters

  flags | operation to perform
  end_tile | end tile of drag
  start_tile | start tile of drag
  track | track-orientation

Returns
  the cost of this operation or an error

See also
  CmdRailTrackHelper

Definition at line 945 of file rail_cmd.cpp.

References CmdRailTrackHelper(), and INVALID_RAILTYPE.

## ◆ CmdRemoveSignalTrack()

CommandCost CmdRemoveSignalTrack | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | TileIndex | end_tile,
|  | Track | track,
|  | bool | autofill
| ) |  |

Remove signals on a stretch of track.

Stub for the unified signal builder/remover

Parameters

  flags | operation to perform
  tile | start tile of drag
  end_tile | end tile of drag
  track | track-orientation
  autofill | fill beyond selected stretch?

Returns
  the cost of this operation or an error

See also
  CmdSignalTrackHelper

Definition at line 1524 of file rail_cmd.cpp.

References CmdSignalTrackHelper(), SIG_ELECTRIC, and SIGTYPE_BLOCK.

## ◆ CmdRemoveSingleRail()

CommandCost CmdRemoveSingleRail | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | Track | track
| ) |  |

Remove a single piece of track.

Parameters

  flags | operation to perform
  tile | tile to remove track from
  track | rail orientation

Returns
  the cost of this operation or an error

Definition at line 612 of file rail_cmd.cpp.

References _current_company, CommandCost::AddCost(), AddTrackToSignalBuffer(), Bankrupt, CheckTileOwnership(), CMD_ERROR, CountBits(), DeleteNewGRFInspectWindow(), DirtyCompanyInfrastructureWindows(), EnsureNoTrainOnTrack(), EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), FreeTrainTrackReservation(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), GetCrossingRailBits(), GetCrossingRoadAxis(), GetCrossingRoadBits(), GetRailReservationTrackBits(), GetRailType(), GetRoadOwner(), GetTileOwner(), GetTileSlope(), GetTileType(), GetTownIndex(), GetTrackBits(), GetTrainForReservation(), HalfTileWater, HasReservedTracks(), HasSignalOnTrack(), INVALID_OWNER, IsDockingTile(), IsLevelCrossing(), IsPlainRail(), IsSlopeWithOneCornerRaised(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::IsValidID(), LEVELCROSSING_TRACKBIT_FACTOR, MakeRoadNormal(), MakeShore(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, OWNER_WATER, RailClearCost(), RTT_ROAD, RTT_TRAM, SetDockingTile(), SetTrackBits(), SetTrackReservation(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TRACK_BIT_X, TRACK_BIT_Y, TRACK_X, TRACK_Y, TracksOverlap(), TrackToTrackBits(), TryPathReserve(), UpdateAdjacentLevelCrossingTilesOnLevelCrossingRemoval(), and YapfNotifyTrackLayoutChange().

## ◆ CmdRemoveSingleSignal()

CommandCost CmdRemoveSingleSignal | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | Track | track
| ) |  |

Remove signals.

Parameters

  flags | operation to perform
  tile | coordinates where signal is being deleted from
  track | track-orientation

Returns
  the cost of this operation or an error

Definition at line 1458 of file rail_cmd.cpp.

References _current_company, AddTrackToSignalBuffer(), CheckTileOwnership(), CountBits(), DirtyCompanyInfrastructureWindows(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), GetPresentSignals(), GetReservedTrackbits(), GetTileOwner(), GetTrainForReservation(), HasReservedTracks(), HasSignalOnTrack(), HasSignalOnTrackdir(), HasTrack(), INVALID_TRACK, IsPlainRailTile(), MarkTileDirtyByTile(), OWNER_WATER, ReverseTrackdir(), SetHasSignals(), SetPresentSignals(), SetSignalStates(), SIG_ELECTRIC, SignalOnTrack(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TileAddByDiagDir(), TrackBitsToTrack(), TrackdirBitsToTrackBits(), TrackdirReachesTrackdirs(), TrackdirToExitdir(), TrackToTrackBits(), TrackToTrackdir(), TryPathReserve(), and YapfNotifyTrackLayoutChange().

## ◆ CmdSignalTrackHelper()

static CommandCost CmdSignalTrackHelper | ( | DoCommandFlags | flags,
|  | TileIndex | tile,
|  | TileIndex | end_tile,
|  | Track | track,
|  | SignalType | sigtype,
|  | SignalVariant | sigvar,
|  | bool | mode,
|  | bool | remove,
|  | bool | autofill,
|  | bool | minimise_gaps,
|  | int | signal_density
| ) |  |
| static

Build many signals by dragging; AutoSignals.

Parameters

  flags | operation to perform
  tile | start tile of drag
  end_tile | end tile of drag
  track | track-orientation
  sigtype | default signal type
  sigvar | signal variant to build
  mode | true = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  remove | remove signals?
  autofill | fill beyond selected stretch?
  minimise_gaps | false = keep fixed distance, true = minimise gaps between signals
  signal_density | user defined signals_density

Returns
  the cost of this operation or an error

Definition at line 1255 of file rail_cmd.cpp.

References CommandCost::AddCost(), CMD_ERROR, Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), CommandCost::GetCost(), CommandCost::GetErrorMessage(), GetOtherTunnelBridgeEnd(), GetPresentSignals(), GetTileType(), GetTunnelBridgeLength(), HasBit(), HasSignalOnTrack(), HasTrack(), INVALID_STRING_ID, INVALID_TILE, INVALID_TRACKDIR, IsDiagonalTrackdir(), IsPlainRailTile(), MP_RAILWAY, MP_ROAD, MP_TUNNELBRIDGE, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), SetBit(), SIG_SEMAPHORE, SignalAgainstTrackdir(), SignalAlongTrackdir(), SignalOnTrack(), SIGTYPE_BLOCK, SIGTYPE_ENTRY, SIGTYPE_EXIT, Map::Size(), CommandCost::Succeeded(), ToggleBit(), ToTileIndexDiff(), TrackdirToTrack(), and TrackToTrackdir().

Referenced by CmdBuildSignalTrack(), and CmdRemoveSignalTrack().

## ◆ CompareRailTypes()

static bool CompareRailTypes | ( | const RailType & | first,
|  | const RailType & | second
| ) |  |
| static

Compare railtypes based on their sorting order.

Parameters

  first | The railtype to compare to.
  second | The railtype to compare.

Returns
  True iff the first should be sorted before the second.

Definition at line 122 of file rail_cmd.cpp.

References GetRailTypeInfo(), and RailTypeInfo::sorting_order.

Referenced by InitRailTypes().

## ◆ DrawSignals()

static void DrawSignals | ( | TileIndex | tile,
|  | TrackBits | rails,
|  | const RailTypeInfo * | rti
| ) |  |
| static

Definition at line 2388 of file rail_cmd.cpp.

## ◆ DrawSingleSignal()

static void DrawSingleSignal | ( | TileIndex | tile,
|  | const RailTypeInfo * | rti,
|  | Track | track,
|  | SignalState | condition,
|  | SignalOffsets | image,
|  | uint | pos
| ) |  |
| static

Definition at line 1863 of file rail_cmd.cpp.

## ◆ DrawTile_Track()

static void DrawTile_Track | ( | TileInfo * | ti | ) |
| static

Definition at line 2422 of file rail_cmd.cpp.

## ◆ DrawTrackBits()

static void DrawTrackBits | ( | TileInfo * | ti,
|  | TrackBits | track
| ) |  |
| static

Draw ground sprite and track bits.

Parameters

  ti | TileInfo
  track | TrackBits to draw

Definition at line 2241 of file rail_cmd.cpp.

References _settings_client, Barren, RailTypeInfo::base_sprites, ComplementSlope(), CornerToTrackBits(), DrawFoundation(), DrawGroundSprite(), FOUNDATION_NONE, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetHalftileFoundationCorner(), GetHighestSlopeCorner(), GetJunctionGroundSpriteOffset(), GetRailFoundation(), GetRailReservationTrackBits(), GetRailType(), GetRailTypeInfo(), RailTypeInfo::ground, ClientSettings::gui, HalftileFoundation(), HalfTileSnow, HalfTileWater, HasReservedTracks(), IsNonContinuousFoundation(), IsSteepSlope(), IsValidCorner(), OppositeCorner(), PALETTE_CRASH, PALETTE_TO_BARE_LAND, GUISettings::show_track_reservation, RailTypeInfo::single_e, RailTypeInfo::single_n, RailTypeInfo::single_s, RailTypeInfo::single_sloped, RailTypeInfo::single_w, RailTypeInfo::single_x, RailTypeInfo::single_y, SLOPE_E, SLOPE_ELEVATED, SLOPE_FLAT, SLOPE_N, SLOPE_S, SLOPE_W, SlopeToSpriteOffset(), SlopeWithThreeCornersRaised(), RailTypeInfo::snow_offset, SnowOrDesert, TileInfo::tile, TILE_HEIGHT, TileInfo::tileh, TRACK_BIT_CROSS, TRACK_BIT_HORZ, TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, TRACK_BIT_VERT, TRACK_BIT_X, TRACK_BIT_Y, RailTypeInfo::track_ns, and RailTypeInfo::track_y.

## ◆ DrawTrackBitsOverlay()

static void DrawTrackBitsOverlay | ( | TileInfo * | ti,
|  | TrackBits | track,
|  | const RailTypeInfo * | rti
| ) |  |
| static

Definition at line 2057 of file rail_cmd.cpp.

## ◆ DrawTrackDetails()

static void DrawTrackDetails | ( | const TileInfo * | ti,
|  | const RailTypeInfo * | rti,
|  | PaletteID | pal
| ) |  |
| static

Draw track fences.

Parameters

  ti | Tile drawing information.
  rti | Rail type information.

Definition at line 1992 of file rail_cmd.cpp.

References ComplementSlope(), DrawTrackFence(), DrawTrackFence_NE(), DrawTrackFence_NW(), DrawTrackFence_SE(), DrawTrackFence_SW(), FenceHoriz1, FenceHoriz2, FenceNE, FenceNESW, FenceNW, FenceSE, FenceSENW, FenceSW, FenceVert1, FenceVert2, GetCustomRailSprite(), GetHalftileSlopeCorner(), GetHighestSlopeCorner(), HalfTileWater, IsHalftileSlope(), OppositeCorner(), RFO_FLAT_LEFT, RFO_FLAT_LOWER, RFO_FLAT_RIGHT, RFO_FLAT_UPPER, RTSG_FENCES, PalSpriteID::sprite, TCX_NORMAL, TCX_UPPER_HALFTILE, TileInfo::tile, and TileInfo::tileh.

## ◆ DrawTrackFence()

static void DrawTrackFence | ( | const TileInfo * | ti,
|  | const PalSpriteID & | psid,
|  | uint | num_sprites,
|  | RailFenceOffset | rfo
| ) |  |
| static

Draw a track fence.

Parameters

  ti | Tile drawing information.
  base_image | First fence sprite.
  num_sprites | Number of fence sprites.
  rfo | Fence to draw.

Definition at line 1938 of file rail_cmd.cpp.

References _fence_offsets, AddSortableSpriteToDraw(), GetSlopePixelZInCorner(), FenceOffset::height_ref, PalSpriteID::pal, RemoveHalftileSlope(), PalSpriteID::sprite, TileInfo::tileh, Coord3D< T >::x, Coord3D< T >::y, and Coord3D< T >::z.

Referenced by DrawTrackDetails(), DrawTrackFence_NE(), DrawTrackFence_NW(), DrawTrackFence_SE(), and DrawTrackFence_SW().

## ◆ DrawTrackFence_NE()

static void DrawTrackFence_NE | ( | const TileInfo * | ti,
|  | const PalSpriteID & | psid,
|  | uint | num_sprites
| ) |  |
| static

Draw fence at NE border matching the tile slope.

Definition at line 1970 of file rail_cmd.cpp.

References DrawTrackFence(), RFO_FLAT_Y_NE, RFO_SLOPE_NW_NE, RFO_SLOPE_SE_NE, SLOPE_E, SLOPE_NE, and TileInfo::tileh.

Referenced by DrawTrackDetails().

## ◆ DrawTrackFence_NW()

static void DrawTrackFence_NW | ( | const TileInfo * | ti,
|  | const PalSpriteID & | psid,
|  | uint | num_sprites
| ) |  |
| static

Draw fence at NW border matching the tile slope.

Definition at line 1950 of file rail_cmd.cpp.

References DrawTrackFence(), RFO_FLAT_X_NW, RFO_SLOPE_NE_NW, RFO_SLOPE_SW_NW, SLOPE_NW, SLOPE_W, and TileInfo::tileh.

Referenced by DrawTrackDetails().

## ◆ DrawTrackFence_SE()

static void DrawTrackFence_SE | ( | const TileInfo * | ti,
|  | const PalSpriteID & | psid,
|  | uint | num_sprites
| ) |  |
| static

Draw fence at SE border matching the tile slope.

Definition at line 1960 of file rail_cmd.cpp.

References DrawTrackFence(), RFO_FLAT_X_SE, RFO_SLOPE_NE_SE, RFO_SLOPE_SW_SE, SLOPE_S, SLOPE_SE, and TileInfo::tileh.

Referenced by DrawTrackDetails().

## ◆ DrawTrackFence_SW()

static void DrawTrackFence_SW | ( | const TileInfo * | ti,
|  | const PalSpriteID & | psid,
|  | uint | num_sprites
| ) |  |
| static

Draw fence at SW border matching the tile slope.

Definition at line 1980 of file rail_cmd.cpp.

References DrawTrackFence(), RFO_FLAT_Y_SW, RFO_SLOPE_NW_SW, RFO_SLOPE_SE_SW, SLOPE_S, SLOPE_SW, and TileInfo::tileh.

Referenced by DrawTrackDetails().

## ◆ DrawTrackSprite()

static void DrawTrackSprite | ( | SpriteID | sprite,
|  | PaletteID | pal,
|  | const TileInfo * | ti,
|  | Slope | s
| ) |  |
| inlinestatic

Definition at line 2052 of file rail_cmd.cpp.

## ◆ DrawTrainDepotSprite()

void DrawTrainDepotSprite | ( | int | x,
|  | int | y,
|  | int | dir,
|  | RailType | railtype
| ) |  |

Definition at line 2550 of file rail_cmd.cpp.

## ◆ EnsureNoTrainOnTrack()

static CommandCost EnsureNoTrainOnTrack | ( | TileIndex | tile,
|  | Track | track
| ) |  |
| static

Tests if a vehicle interacts with the specified track.

All track bits interact except parallel TRACK_BIT_HORZ or TRACK_BIT_VERT.

Parameters

  tile | The tile.
  track | The track.

Returns
  Succeeded command (no train found), or a failed command (a train was found).

Definition at line 226 of file rail_cmd.cpp.

References EnsureNoTrainOnTrackBits(), and TrackToTrackBits().

Referenced by CmdBuildSingleRail(), and CmdRemoveSingleRail().

## ◆ FloodHalftile()

bool FloodHalftile | ( | TileIndex | t | ) |

Called from water_cmd if a non-flat rail-tile gets flooded and should be converted to shore.

The function floods the lower halftile, if the tile has a halftile foundation.

Parameters

  t | The tile to flood.

Returns
  true if something was flooded.

Definition at line 759 of file rail_cmd.cpp.

References _current_company, ApplyFoundationToSlope(), CornerToTrackBits(), Execute, FindFirstTrack(), GetHighestSlopeCorner(), GetRailFoundation(), GetTileSlope(), GetTrackBits(), HalfTileWater, IsNonContinuousFoundation(), IsPlainRailTile(), IsSlopeWithOneCornerRaised(), IsSlopeWithThreeCornersRaised(), IsSteepSlope(), MakeShore(), MarkTileDirtyByTile(), OppositeCorner(), OWNER_WATER, Backup< T >::Restore(), and TRACK_BIT_NONE.

Referenced by DoFloodTile().

## ◆ GetFoundation_Track()

static Foundation GetFoundation_Track | ( | TileIndex | tile,
|  | Slope | tileh
| ) |  |
| static

Definition at line 2590 of file rail_cmd.cpp.

## ◆ GetJunctionGroundSpriteOffset()

static int GetJunctionGroundSpriteOffset | ( | TrackBits | track | ) |
| static

Returns which of the 5 junction-'Rail underlays' to use for the given track bits.

See https://newgrf-specs.tt-wiki.net/wiki/Action3/Railtypes for the cases.

Precondition
  The track bits describe a junction, so at least two bits are set.

Parameters

  track | The track bits to consider.

Returns
  The offset in the five junction ground sprites.

Definition at line 2224 of file rail_cmd.cpp.

References TRACK_BIT_3WAY_NE, TRACK_BIT_3WAY_NW, TRACK_BIT_3WAY_SE, and TRACK_BIT_3WAY_SW.

Referenced by DrawTrackBits().

## ◆ GetRailFoundation()

Foundation GetRailFoundation | ( | Slope | tileh,
|  | TrackBits | bits
| ) |  |

Checks if a track combination is valid on a specific slope and returns the needed foundation.

Parameters

  tileh | Tile slope.
  bits | Trackbits.

Returns
  Needed foundation or FOUNDATION_INVALID if track/slope combination is not allowed.

Definition at line 309 of file rail_cmd.cpp.

References _valid_tracks_without_foundation, CornerToTrackBits(), FOUNDATION_INCLINED_X, FOUNDATION_INCLINED_Y, FOUNDATION_INVALID, FOUNDATION_LEVELED, FOUNDATION_NONE, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetHighestSlopeCorner(), HalftileFoundation(), IsSlopeWithOneCornerRaised(), IsSlopeWithThreeCornersRaised(), IsSteepSlope(), OppositeCorner(), SLOPE_E, SLOPE_N, SLOPE_S, SLOPE_W, SlopeWithOneCornerRaised(), SlopeWithThreeCornersRaised(), SpecialRailFoundation(), TRACK_BIT_HORZ, TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_NONE, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, TRACK_BIT_VERT, TRACK_BIT_X, TRACK_BIT_Y, and TracksOverlap().

Referenced by CheckRailSlope(), DrawRailCatenaryRailway(), DrawTrackBits(), FloodHalftile(), and TestAutoslopeOnRailTile().

## ◆ GetSaveSlopeZ()

static uint GetSaveSlopeZ | ( | uint | x,
|  | uint | y,
|  | Track | track
| ) |  |
| static

Get surface height in point (x,y) On tiles with halftile foundations move (x,y) to a safe point wrt.

track

Definition at line 1851 of file rail_cmd.cpp.

References GetSlopePixelZ(), TRACK_LEFT, TRACK_LOWER, TRACK_RIGHT, and TRACK_UPPER.

## ◆ GetSlopePixelZ_Track()

static int GetSlopePixelZ_Track | ( | TileIndex | tile,
|  | uint | x,
|  | uint | y,
|  | bool |
| ) |  |
| static

Definition at line 2577 of file rail_cmd.cpp.

## ◆ GetTileDesc_Track()

static void GetTileDesc_Track | ( | TileIndex | tile,
|  | TileDesc & | td
| ) |  |
| static

Definition at line 2791 of file rail_cmd.cpp.

## ◆ GetTileTrackStatus_Track()

static TrackStatus GetTileTrackStatus_Track | ( | TileIndex | tile,
|  | TransportType | mode,
|  | uint | ,
|  | DiagDirection | side
| ) |  |
| static

Definition at line 2721 of file rail_cmd.cpp.

## ◆ InitRailTypes()

void InitRailTypes | ( |  | ) |

Resolve sprites of custom rail types.

Definition at line 130 of file rail_cmd.cpp.

References _sorted_railtypes, CompareRailTypes(), RailTypeInfo::flags, Hidden, RailTypeInfo::Index(), RailTypeInfo::label, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

Referenced by AfterLoadGRFs().

## ◆ RemoveTrainDepot()

static CommandCost RemoveTrainDepot | ( | TileIndex | tile,
|  | DoCommandFlags | flags
| ) |  |
| static

Definition at line 1758 of file rail_cmd.cpp.

## ◆ ResetRailTypes()

void ResetRailTypes | ( |  | ) |

Reset all rail type information to its default values.

Definition at line 65 of file rail_cmd.cpp.

References _original_railtypes.

Referenced by ResetNewGRFData().

## ◆ ResolveRailTypeGUISprites()

void ResolveRailTypeGUISprites | ( | RailTypeInfo * | rti | ) |

Definition at line 75 of file rail_cmd.cpp.

## ◆ TerraformTile_Track()

static CommandCost TerraformTile_Track | ( | TileIndex | tile,
|  | DoCommandFlags | flags,
|  | int | z_new,
|  | Slope | tileh_new
| ) |  |
| static

Definition at line 3043 of file rail_cmd.cpp.

## ◆ TestAutoslopeOnRailTile()

static CommandCost TestAutoslopeOnRailTile | ( | TileIndex | tile,
|  | DoCommandFlags | flags,
|  | int | z_old,
|  | Slope | tileh_old,
|  | int | z_new,
|  | Slope | tileh_new,
|  | TrackBits | rail_bits
| ) |  |
| static

Tests if autoslope is allowed.

Parameters

  tile | The tile.
  flags | Terraform command flags.
  z_old | Old TileZ.
  tileh_old | Old TileSlope.
  z_new | New TileZ.
  tileh_new | New TileSlope.
  rail_bits | Trackbits.

Definition at line 3004 of file rail_cmd.cpp.

References _settings_game, CommandCost::AddCost(), ApplyFoundationToSlope(), AutoslopeEnabled(), Barren, ConstructionSettings::build_on_slopes, CheckRailSlope(), GameSettings::construction, Execute, EXPENSES_CONSTRUCTION, GetRailFoundation(), GetSlopeZInCorner(), HalfTileWater, IsSlopeWithOneCornerRaised(), RemoveHalftileSlope(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_NONE, TRACK_BIT_RIGHT, and TRACK_BIT_UPPER.

## ◆ TicksToLeaveDepot()

int TicksToLeaveDepot | ( | const Train * | v | ) |

Compute number of ticks when next wagon will leave a depot.

Negative means next wagon should have left depot n ticks before.

Parameters

  v | vehicle outside (leaving) the depot

Returns
  number of ticks when the next wagon will leave

Definition at line 2926 of file rail_cmd.cpp.

References Train::CalcNextVehicleOffset(), DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, GetRailDepotDirection(), Vehicle::tile, Vehicle::x_pos, and Vehicle::y_pos.

Referenced by AdvanceWagonsAfterSwap(), CheckTrainsLengths(), and FixupTrainLengths().

## ◆ TileLoop_Track()

static void TileLoop_Track | ( | TileIndex | tile | ) |
| static

Definition at line 2595 of file rail_cmd.cpp.

## ◆ ValidateAutoDrag()

static CommandCost ValidateAutoDrag | ( | Trackdir * | trackdir,
|  | TileIndex | start,
|  | TileIndex | end
| ) |  |
| static

Definition at line 814 of file rail_cmd.cpp.

## ◆ ValParamTrackOrientation()

static bool ValParamTrackOrientation | ( | Track | track | ) |
| inlinestatic

Definition at line 409 of file rail_cmd.cpp.

## ◆ VehicleEnter_Track()

static VehicleEnterTileStates VehicleEnter_Track | ( | Vehicle * | u,
|  | TileIndex | tile,
|  | int | x,
|  | int | y
| ) |  |
| static

Tile callback routine when vehicle enters tile.

See also
  vehicle_enter_tile_proc

Definition at line 2944 of file rail_cmd.cpp.

References AXIS_X, Train::CalcNextVehicleOffset(), CannotEnter, DiagDirToAxis(), DiagDirToDir(), Vehicle::direction, EnteredWormhole, SpecializedVehicle< T, Type >::First(), SpecializedVehicle< T, Type >::From(), GetRailDepotDirection(), Hidden, InvalidateWindowData(), IsRailDepotTile(), SpecializedVehicle< T, Type >::Next(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), ReverseDiagDir(), ReverseDir(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), Vehicle::tile, TRACK_BIT_DEPOT, TRACK_BIT_X, TRACK_BIT_Y, BaseVehicle::type, VEH_TRAIN, VehicleEnterDepot(), Vehicle::vehstatus, and WC_VEHICLE_DEPOT.

## Variable Documentation

## ◆ _deltacoord_leaveoffset

const int8_t _deltacoord_leaveoffset[8]
| static

Initial value:
= {
-1, 0, 1, 0,
0, 1, 0, -1
}

Definition at line 2914 of file rail_cmd.cpp.

## ◆ _fence_offsets

const FenceOffset _fence_offsets[]
| static

Initial value:
= {
{ CORNER_INVALID, 0, 1, 16, 1 },
{ CORNER_INVALID, 1, 0, 1, 16 },
{ CORNER_W, 8, 8, 1, 1 },
{ CORNER_N, 8, 8, 1, 1 },
{ CORNER_INVALID, 0, 1, 16, 1 },
{ CORNER_INVALID, 1, 0, 1, 16 },
{ CORNER_INVALID, 0, 1, 16, 1 },
{ CORNER_INVALID, 1, 0, 1, 16 },
{ CORNER_INVALID, 0, 15, 16, 1 },
{ CORNER_INVALID, 15, 0, 1, 16 },
{ CORNER_E, 8, 8, 1, 1 },
{ CORNER_S, 8, 8, 1, 1 },
{ CORNER_INVALID, 0, 15, 16, 1 },
{ CORNER_INVALID, 15, 0, 1, 16 },
{ CORNER_INVALID, 0, 15, 16, 1 },
{ CORNER_INVALID, 15, 0, 1, 16 },
}

Offsets for drawing fences.

Definition at line 1912 of file rail_cmd.cpp.

Referenced by DrawTrackFence().

## ◆ _fractcoords_behind

const uint8_t _fractcoords_behind[4] = { 0x8F, 0x8, 0x80, 0xF8 }
| static

Definition at line 2912 of file rail_cmd.cpp.

## ◆ _fractcoords_enter

const uint8_t _fractcoords_enter[4] = { 0x8A, 0x48, 0x84, 0xA8 }
| static

Definition at line 2913 of file rail_cmd.cpp.

## ◆ _halftile_sub_sprite

const SubSprite _halftile_sub_sprite[4]
| static

Initial value:
= {
{ -INF , -INF , 32 - 33, INF },
{ -INF , 0 + 7, INF , INF },
{ -31 + 33, -INF , INF , INF },
{ -INF , -INF , INF , 30 - 23 }
}

Definition at line 2045 of file rail_cmd.cpp.

## ◆ _railtypes

RailTypeInfo _railtypes[RAILTYPE_END]

Definition at line 46 of file rail_cmd.cpp.

## ◆ _railtypes_hidden_mask

RailTypes _railtypes_hidden_mask

Definition at line 48 of file rail_cmd.cpp.

## ◆ _sorted_railtypes

std::vector<RailType> _sorted_railtypes

Sorted list of rail types.

Definition at line 47 of file rail_cmd.cpp.

Referenced by GetRailTypeDropDownList(), InitRailTypes(), SetDefaultRailGui(), ReplaceVehicleWindow::UpdateWidgetSize(), and CompanyInfrastructureWindow::UpdateWidgetSize().

## ◆ _tile_type_rail_procs

const TileTypeProcs _tile_type_rail_procs
| extern

Initial value:
= {
DrawTile_Track,
GetSlopePixelZ_Track,
ClearTile_Track,
nullptr,
GetTileDesc_Track,
GetTileTrackStatus_Track,
ClickTile_Track,
nullptr,
TileLoop_Track,
ChangeTileOwner_Track,
nullptr,
VehicleEnter_Track,
GetFoundation_Track,
TerraformTile_Track,
CheckBuildAbove_Track,
}
VehicleEnter_Track
static VehicleEnterTileStates VehicleEnter_Track(Vehicle *u, TileIndex tile, int x, int y)
Tile callback routine when vehicle enters tile.
Definition rail_cmd.cpp:2944

Definition at line 52 of file landscape.cpp.

## ◆ _track_sloped_sprites

const uint8_t _track_sloped_sprites[14]
| static

Initial value:
= {
14, 15, 22, 13,
0, 21, 17, 12,
23, 0, 18, 20,
19, 16
}

Definition at line 179 of file rail_cmd.cpp.

## ◆ _trackdelta

const TileIndexDiffC _trackdelta[]
| static

Initial value:
= {
{ -1, 0 }, { 0, 1 }, { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, 1 },
{ 0, 0 },
{ 0, 0 },
{ 1, 0 }, { 0, -1 }, { 0, -1 }, { 1, 0 }, { 0, -1 }, { -1, 0 },
{ 0, 0 },
{ 0, 0 }
}

Definition at line 804 of file rail_cmd.cpp.

## ◆ _valid_tracks_on_leveled_foundation

const TrackBits _valid_tracks_on_leveled_foundation[15]
| static

Initial value:
= {
TRACK_BIT_NONE,
TRACK_BIT_LEFT,
TRACK_BIT_LOWER,
TRACK_BIT_Y | TRACK_BIT_LOWER | TRACK_BIT_LEFT,
TRACK_BIT_RIGHT,
TRACK_BIT_ALL,
TRACK_BIT_X | TRACK_BIT_LOWER | TRACK_BIT_RIGHT,
TRACK_BIT_ALL,
TRACK_BIT_UPPER,
TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_LEFT,
TRACK_BIT_ALL,
TRACK_BIT_ALL,
TRACK_BIT_Y | TRACK_BIT_UPPER | TRACK_BIT_RIGHT,
TRACK_BIT_ALL,
TRACK_BIT_ALL
}
TRACK_BIT_UPPER
@ TRACK_BIT_UPPER
Upper track.
Definition track_type.h:39
TRACK_BIT_LEFT
@ TRACK_BIT_LEFT
Left track.
Definition track_type.h:41
TRACK_BIT_Y
@ TRACK_BIT_Y
Y-axis track.
Definition track_type.h:38
TRACK_BIT_NONE
@ TRACK_BIT_NONE
No track.
Definition track_type.h:36
TRACK_BIT_X
@ TRACK_BIT_X
X-axis track.
Definition track_type.h:37
TRACK_BIT_LOWER
@ TRACK_BIT_LOWER
Lower track.
Definition track_type.h:40
TRACK_BIT_ALL
@ TRACK_BIT_ALL
All possible tracks.
Definition track_type.h:50
TRACK_BIT_RIGHT
@ TRACK_BIT_RIGHT
Right track.
Definition track_type.h:42

Valid TrackBits on a specific (non-steep)-slope with leveled foundation.

Definition at line 281 of file rail_cmd.cpp.

Referenced by CheckRailSlope().

## ◆ _valid_tracks_without_foundation

const TrackBits _valid_tracks_without_foundation[15]
| static

Initial value:
= {
TRACK_BIT_ALL,
TRACK_BIT_RIGHT,
TRACK_BIT_UPPER,
TRACK_BIT_X,
TRACK_BIT_LEFT,
TRACK_BIT_NONE,
TRACK_BIT_Y,
TRACK_BIT_LOWER,
TRACK_BIT_LOWER,
TRACK_BIT_Y,
TRACK_BIT_NONE,
TRACK_BIT_LEFT,
TRACK_BIT_X,
TRACK_BIT_UPPER,
TRACK_BIT_RIGHT,
}

Valid TrackBits on a specific (non-steep)-slope without foundation.

Definition at line 259 of file rail_cmd.cpp.

Referenced by GetRailFoundation().

## ◆ INF

const int INF = 1000
| static

Definition at line 2044 of file rail_cmd.cpp.