OpenTTD
Macros | Typedefs | Enumerations | Functions | Variables
rail_cmd.cpp File Reference

Handling of rail tiles. More...

#include "stdafx.h"
#include "cmd_helper.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 "date_func.h"
#include "strings_func.h"
#include "company_gui.h"
#include "object_map.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.

Macros

#define MAYBE_DRAW_SIGNAL(x, y, z, t)   if (IsSignalPresent(tile, x)) DrawSingleSignal(tile, rti, t, GetSingleSignalState(tile, x), y, z)

Typedefs

typedef SmallVector< Train *, 16 > 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

 assert_compile (sizeof(_original_railtypes)<=sizeof(_railtypes))
void ResetRailTypes ()
 Reset all rail type information to its default values.
void ResolveRailTypeGUISprites (RailtypeInfo *rti)
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, uint flags)
 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 (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build a single piece of rail.
CommandCost CmdRemoveSingleRail (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 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 (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build or remove a stretch of railroad tracks.
CommandCost CmdBuildRailroadTrack (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build rail on a stretch of track.
CommandCost CmdRemoveRailroadTrack (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build rail on a stretch of track.
CommandCost CmdBuildTrainDepot (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build a train depot.
CommandCost CmdBuildSingleSignal (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build signals, alternate between double/single, signal/semaphore, pre/exit/combo-signals, and what-else not.
static bool CheckSignalAutoFill (TileIndex &tile, Trackdir &trackdir, int &signal_ctr, bool remove)
static CommandCost CmdSignalTrackHelper (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build many signals by dragging; AutoSignals.
CommandCost CmdBuildSignalTrack (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build signals on a stretch of track.
CommandCost CmdRemoveSingleSignal (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Remove signals.
CommandCost CmdRemoveSignalTrack (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Remove signals on a stretch of track.
static VehicleUpdateTrainPowerProc (Vehicle *v, void *data)
 Update power of train under which is the railtype being converted.
CommandCost CmdConvertRail (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Convert one rail type to the other.
static CommandCost RemoveTrainDepot (TileIndex tile, DoCommandFlag flags)
static CommandCost ClearTile_Track (TileIndex tile, DoCommandFlag 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_NW (const TileInfo *ti, SpriteID base_image)
static void DrawTrackFence_SE (const TileInfo *ti, SpriteID base_image)
static void DrawTrackFence_NW_SE (const TileInfo *ti, SpriteID base_image)
static void DrawTrackFence_NE (const TileInfo *ti, SpriteID base_image)
static void DrawTrackFence_SW (const TileInfo *ti, SpriteID base_image)
static void DrawTrackFence_NE_SW (const TileInfo *ti, SpriteID base_image)
static void DrawTrackFence_NS_1 (const TileInfo *ti, SpriteID base_image)
 Draw fence at eastern side of track.
static void DrawTrackFence_NS_2 (const TileInfo *ti, SpriteID base_image)
 Draw fence at western side of track.
static void DrawTrackFence_WE_1 (const TileInfo *ti, SpriteID base_image)
 Draw fence at southern side of track.
static void DrawTrackFence_WE_2 (const TileInfo *ti, SpriteID base_image)
 Draw fence at northern side of track.
static void DrawTrackDetails (const TileInfo *ti, const RailtypeInfo *rti)
static void DrawTrackSprite (SpriteID sprite, PaletteID pal, const TileInfo *ti, Slope s)
static void DrawTrackBitsOverlay (TileInfo *ti, TrackBits track, const RailtypeInfo *rti)
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)
static Foundation GetFoundation_Track (TileIndex tile, Slope tileh)
static void TileLoop_Track (TileIndex tile)
static TrackStatus GetTileTrackStatus_Track (TileIndex tile, TransportType mode, uint sub_mode, 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 VehicleEnterTileStatus VehicleEnter_Track (Vehicle *u, TileIndex tile, int x, int y)
 Tile callback routine when vehicle enters tile.
static CommandCost TestAutoslopeOnRailTile (TileIndex tile, uint flags, int z_old, Slope tileh_old, int z_new, Slope tileh_new, TrackBits rail_bits)
 Tests if autoslope is allowed.
static VehicleEnsureNoShipProc (Vehicle *v, void *data)
 Test-procedure for HasVehicleOnPos to check for a ship.
static CommandCost TerraformTile_Track (TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new)

Variables

RailtypeInfo _railtypes [RAILTYPE_END]
static const byte _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 uint32 _drawtile_track_palette
static const int INF = 1000
static const SubSprite _halftile_sub_sprite [4]
static const byte _fractcoords_behind [4] = { 0x8F, 0x8, 0x80, 0xF8 }
static const byte _fractcoords_enter [4] = { 0x8A, 0x48, 0x84, 0xA8 }
static const int8 _deltacoord_leaveoffset [8]
const TileTypeProcs _tile_type_rail_procs

Detailed Description

Handling of rail tiles.

Definition in file rail_cmd.cpp.

Enumeration Type Documentation

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

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

Tests if a track can be build on a tile.

Parameters
tilehTile slope.
rail_bitsTracks to build.
existingTracks already built.
tileTile (used for water test)
Returns
Error message or cost for foundation building.

Definition at line 379 of file rail_cmd.cpp.

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

Referenced by CmdBuildSingleRail(), and TestAutoslopeOnRailTile().

static CommandCost CheckTrackCombination ( TileIndex  tile,
TrackBits  to_build,
uint  flags 
)
static

Check that the new track bits may be built.

Parameters
tileTile to build on.
to_buildNew track bits.
flagsFlags of the operation.
Returns
Succeeded or failed command.

Definition at line 220 of file rail_cmd.cpp.

References DC_NO_RAIL_OVERLAP, GetTrackBits(), HasSignals(), IsPlainRail(), return_cmd_error, TRACK_BIT_HORZ, and TRACK_BIT_VERT.

Referenced by CmdBuildSingleRail().

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

Build rail on a stretch of track.

Stub for the unified rail builder/remover

Parameters
tilestart tile of drag
flagsoperation to perform
p1end tile of drag
p2various bitstuffed elements
  • p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
  • p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
  • p2 = (bit 7) - 0 = build, 1 = remove tracks
textunused
Returns
the cost of this operation or an error
See Also
CmdRailTrackHelper

Definition at line 894 of file rail_cmd.cpp.

References ClrBit(), and CmdRailTrackHelper().

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

Build signals on a stretch of track.

Stub for the unified signal builder/remover

Parameters
tilestart tile of drag
flagsoperation to perform
p1end tile of drag
p2various bitstuffed elements
  • p2 = (bit 0- 2) - track-orientation, valid values: 0-5 (Track enum)
  • p2 = (bit 3) - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  • p2 = (bit 4) - 0 = signals, 1 = semaphores
  • p2 = (bit 5) - 0 = build, 1 = remove signals
  • p2 = (bit 6) - 0 = selected stretch, 1 = auto fill
  • p2 = (bit 7- 9) - default signal type
  • p2 = (bit 24-31) - user defined signals_density
textunused
Returns
the cost of this operation or an error
See Also
CmdSignalTrackHelper

Definition at line 1398 of file rail_cmd.cpp.

References CmdSignalTrackHelper().

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

Build a single piece of rail.

Parameters
tiletile to build on
flagsoperation to perform
p1railtype of being built piece (normal, mono, maglev)
p2rail track to build
textunused
Returns
the cost of this operation or an error

Definition at line 413 of file rail_cmd.cpp.

References _current_company, CommandCost::AddCost(), AddTrackToSignalBuffer(), AXIS_X, AXIS_Y, CheckRailSlope(), CheckTileOwnership(), CheckTrackCombination(), CMD_CONVERT_RAIL, CMD_ERROR, CMD_LANDSCAPE_CLEAR, CountBits(), DC_EXEC, DirtyCompanyInfrastructureWindows(), DoCommand(), DRD_NONE, EnsureNoTrainOnTrack(), EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetCrossingRailBits(), GetDisallowedRoadDirections(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), GetRailType(), GetRoadBits(), GetRoadOwner(), GetRoadTypes(), GetTileOwner(), GetTileSlope(), GetTileType(), GetTownIndex(), GetTrackBits(), HasBit(), HasPowerOnRail(), HasRoadWorks(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Company::infrastructure, IsCompatibleRail(), IsLevelCrossing(), IsNormalRoad(), IsPlainRail(), IsSlopeWithOneCornerRaised(), IsTileType(), LEVELCROSSING_TRACKBIT_FACTOR, MakeRoadCrossing(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_WATER, RAIL_GROUND_BARREN, RAIL_GROUND_WATER, RailBuildCost(), RailNoLevelCrossings(), return_cmd_error, CompanyInfrastructure::road, ROAD_X, ROAD_Y, ROADTYPE_ROAD, ROADTYPE_TRAM, ROADTYPES_ALL, ROADTYPES_ROAD, ROADTYPES_TRAM, SetRoadOwner(), SetTrackBits(), CommandCost::Succeeded(), TRACK_BIT_NONE, TRACK_X, TRACK_Y, TracksOverlap(), TrackToTrackBits(), UpdateLevelCrossing(), VALID_LEVEL_CROSSING_SLOPES, ValParamRailtype(), and YapfNotifyTrackLayoutChange().

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

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, bit 4 (cycle signal-type) is ignored

Parameters
tiletile where to build the signals
flagsoperation to perform
p1various bitstuffed elements
  • p1 = (bit 0-2) - track-orientation, valid values: 0-5 (Track enum)
  • p1 = (bit 3) - 1 = override signal/semaphore, or pre/exit/combo signal or (for bit 7) toggle variant (CTRL-toggle)
  • p1 = (bit 4) - 0 = signals, 1 = semaphores
  • p1 = (bit 5-7) - type of the signal, for valid values see enum SignalType in rail_map.h
  • p1 = (bit 8) - convert the present signal type and variant
  • p1 = (bit 9-11)- start cycle from this signal type
  • p1 = (bit 12-14)-wrap around after this signal type
  • p1 = (bit 15-16)-cycle the signal direction this many times
  • p1 = (bit 17) - 1 = don't modify an existing signal but don't fail either, 0 = always set new signal type
p2used for CmdBuildManySignals() to copy direction of first signal
textunused
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 1002 of file rail_cmd.cpp.

References _current_company, _settings_game, AddTrackToSignalBuffer(), CheckTileOwnership(), CMD_ERROR, CountBits(), Vehicle::cur_speed, Vehicle::current_order, DC_EXEC, DirtyCompanyInfrastructureWindows(), EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), PathfinderSettings::forbid_90_deg, FreeTrainTrackReservation(), GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::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, return_cmd_error, SetHasSignals(), SetPresentSignals(), SetSignalStates(), SIG_ELECTRIC, SIG_SEMAPHORE, SignalOnTrack(), Vehicle::tile, TracksOverlap(), TrackToTrackBits(), TryPathReserve(), Vehicle::vehstatus, VS_STOPPED, and YapfNotifyTrackLayoutChange().

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

Convert one rail type to the other.

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

Parameters
tileend tile of rail conversion drag
flagsoperation to perform
p1start tile of drag
p2various bitstuffed elements:
  • p2 = (bit 0- 3) new railtype to convert to.
  • p2 = (bit 4) build diagonally or not.
textunused
Returns
the cost of this operation or an error

Definition at line 1518 of file rail_cmd.cpp.

References _settings_game, CommandCost::AddCost(), SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), CCF_TRACK, CheckTileOwnership(), CMD_ERROR, CountBits(), DC_EXEC, DiagDirToDiagTrack(), DirtyCompanyInfrastructureWindows(), VehicleSettings::disable_elrails, SmallVector< T, S >::End(), EnsureNoVehicleOnGround(), error(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), FindVehicleOnPos(), FreeTrainTrackReservation(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), CommandCost::GetCost(), GetCrossingRailTrack(), GetOtherTunnelBridgeEnd(), GetRailDepotTrack(), GetRailStationTrack(), GetRailTileType(), GetRailType(), GetReservedTrackbits(), GetTileOwner(), GetTileType(), GetTrackBits(), GetTrainForReservation(), GetTunnelBridgeDirection(), GetTunnelBridgeLength(), GetTunnelBridgeTransportType(), HasBit(), HasPowerOnRail(), HasStationRail(), HasTunnelBridgeReservation(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Company::infrastructure, INVALID_TILE, INVALID_TRACK, InvalidateWindowData(), IsBridge(), IsCompatibleRail(), IsLevelCrossing(), IsLevelCrossingTile(), IsPlainRailTile(), IsRailStationTile(), IsStationTileBlocked(), SmallVector< T, S >::Length(), LEVELCROSSING_TRACKBIT_FACTOR, CommandCost::MakeError(), MapSize(), MarkBridgeDirty(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, CompanyInfrastructure::rail, RAIL_TILE_DEPOT, RailConvertCost(), RailNoLevelCrossings(), RAILTYPE_ELECTRIC, RAILTYPE_RAIL, RemoveFirstTrack(), SetRailType(), TRACK_BIT_NONE, TracksOverlap(), TRANSPORT_RAIL, TryPathReserve(), TUNNELBRIDGE_TRACKBIT_FACTOR, TunnelBridgeIsFree(), UpdateTrainPowerProc(), ValParamRailtype(), GameSettings::vehicle, WC_BUILD_VEHICLE, WC_VEHICLE_DEPOT, and YapfNotifyTrackLayoutChange().

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

Build or remove a stretch of railroad tracks.

Parameters
tilestart tile of drag
flagsoperation to perform
p1end tile of drag
p2various bitstuffed elements
  • p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building
  • p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
  • p2 = (bit 7) - 0 = build, 1 = remove tracks
  • p2 = (bit 8) - 0 = build up to an obstacle, 1 = fail if an obstacle is found (used for AIs).
textunused
Returns
the cost of this operation or an error

Definition at line 834 of file rail_cmd.cpp.

References CommandCost::AddCost(), CMD_BUILD_SINGLE_RAIL, CMD_ERROR, CMD_REMOVE_SINGLE_RAIL, DoCommand(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), CommandCost::GetErrorMessage(), HasBit(), IsDiagonalTrackdir(), MapSize(), ToggleBit(), ToTileIndexDiff(), TrackdirToTrack(), TrackToTrackdir(), and ValParamRailtype().

Referenced by CmdBuildRailroadTrack(), and CmdRemoveRailroadTrack().

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

Build rail on a stretch of track.

Stub for the unified rail builder/remover

Parameters
tilestart tile of drag
flagsoperation to perform
p1end tile of drag
p2various bitstuffed elements
  • p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building
  • p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
  • p2 = (bit 7) - 0 = build, 1 = remove tracks
textunused
Returns
the cost of this operation or an error
See Also
CmdRailTrackHelper

Definition at line 913 of file rail_cmd.cpp.

References CmdRailTrackHelper(), and SetBit().

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

Remove signals on a stretch of track.

Stub for the unified signal builder/remover

Parameters
tilestart tile of drag
flagsoperation to perform
p1end tile of drag
p2various bitstuffed elements
  • p2 = (bit 0- 2) - track-orientation, valid values: 0-5 (Track enum)
  • p2 = (bit 3) - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  • p2 = (bit 4) - 0 = signals, 1 = semaphores
  • p2 = (bit 5) - 0 = build, 1 = remove signals
  • p2 = (bit 6) - 0 = selected stretch, 1 = auto fill
  • p2 = (bit 7- 9) - default signal type
  • p2 = (bit 24-31) - user defined signals_density
textunused
Returns
the cost of this operation or an error
See Also
CmdSignalTrackHelper

Definition at line 1490 of file rail_cmd.cpp.

References CmdSignalTrackHelper(), and SetBit().

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

Remove a single piece of track.

Parameters
tiletile to remove track from
flagsoperation to perform
p1unused
p2rail orientation
textunused
Returns
the cost of this operation or an error

Definition at line 576 of file rail_cmd.cpp.

References _current_company, CommandCost::AddCost(), AddTrackToSignalBuffer(), CheckTileOwnership(), CMD_ERROR, CMD_REMOVE_SIGNALS, CountBits(), DC_BANKRUPT, DC_EXEC, DeleteNewGRFInspectWindow(), DirtyCompanyInfrastructureWindows(), DoCommand(), EnsureNoTrainOnTrack(), EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), FreeTrainTrackReservation(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetCrossingRailBits(), GetCrossingRoadBits(), GetRailReservationTrackBits(), GetRailType(), GetRoadOwner(), GetRoadTypes(), GetTileOwner(), GetTileSlope(), GetTileType(), GetTownIndex(), GetTrackBits(), GetTrainForReservation(), HasReservedTracks(), HasSignalOnTrack(), INVALID_OWNER, IsLevelCrossing(), IsPlainRail(), IsSlopeWithOneCornerRaised(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), LEVELCROSSING_TRACKBIT_FACTOR, MakeRoadNormal(), MakeShore(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, OWNER_WATER, RAIL_GROUND_WATER, RailClearCost(), return_cmd_error, ROADTYPE_ROAD, ROADTYPE_TRAM, SetTrackBits(), SetTrackReservation(), TRACK_BIT_X, TRACK_BIT_Y, TRACK_X, TRACK_Y, TracksOverlap(), TrackToTrackBits(), TryPathReserve(), and YapfNotifyTrackLayoutChange().

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

Remove signals.

Parameters
tilecoordinates where signal is being deleted from
flagsoperation to perform
p1various bitstuffed elements, only track information is used
  • (bit 0- 2) - track-orientation, valid values: 0-5 (Track enum)
  • (bit 3) - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  • (bit 4) - 0 = signals, 1 = semaphores
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 1415 of file rail_cmd.cpp.

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

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

Build many signals by dragging; AutoSignals.

Parameters
tilestart tile of drag
flagsoperation to perform
p1end tile of drag
p2various bitstuffed elements
  • p2 = (bit 0- 2) - track-orientation, valid values: 0-5 (Track enum)
  • p2 = (bit 3) - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
  • p2 = (bit 4) - 0 = signals, 1 = semaphores
  • p2 = (bit 5) - 0 = build, 1 = remove signals
  • p2 = (bit 6) - 0 = selected stretch, 1 = auto fill
  • p2 = (bit 7- 9) - default signal type
  • p2 = (bit 10) - 0 = keep fixed distance, 1 = minimise gaps between signals
  • p2 = (bit 24-31) - user defined signals_density
textunused
Returns
the cost of this operation or an error

Definition at line 1228 of file rail_cmd.cpp.

References CommandCost::AddCost(), ClrBit(), CMD_BUILD_SIGNALS, CMD_ERROR, CMD_REMOVE_SIGNALS, DC_EXEC, DoCommand(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), GB(), CommandCost::GetErrorMessage(), GetPresentSignals(), HasBit(), HasSignalOnTrack(), HasTrack(), INVALID_STRING_ID, INVALID_TILE, INVALID_TRACKDIR, IsDiagonalTrackdir(), IsPlainRailTile(), MapSize(), return_cmd_error, SB(), SetBit(), SIG_ELECTRIC, SignalAgainstTrackdir(), SignalAlongTrackdir(), SignalOnTrack(), SIGTYPE_ENTRY, SIGTYPE_EXIT, SIGTYPE_NORMAL, ToggleBit(), ToTileIndexDiff(), TrackdirToTrack(), and TrackToTrackdir().

Referenced by CmdBuildSignalTrack(), and CmdRemoveSignalTrack().

static void DrawTrackBits ( TileInfo ti,
TrackBits  track 
)
static
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
tileThe tile.
trackThe track.
Returns
Succeeded command (no train found), or a failed command (a train was found).

Definition at line 207 of file rail_cmd.cpp.

References EnsureNoTrainOnTrackBits(), and TrackToTrackBits().

Referenced by CmdBuildSingleRail(), and CmdRemoveSingleRail().

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
tThe tile to flood.
Returns
true if something was flooded.

Definition at line 719 of file rail_cmd.cpp.

References _current_company, ApplyFoundationToSlope(), CMD_REMOVE_SINGLE_RAIL, CornerToTrackBits(), DC_EXEC, DoCommand(), FIND_FIRST_BIT, GetHighestSlopeCorner(), GetRailFoundation(), GetTileSlope(), GetTrackBits(), IsNonContinuousFoundation(), IsPlainRailTile(), IsSlopeWithOneCornerRaised(), IsSlopeWithThreeCornersRaised(), IsSteepSlope(), MakeShore(), MarkTileDirtyByTile(), OppositeCorner(), OWNER_WATER, RAIL_GROUND_WATER, Backup< T >::Restore(), and CommandCost::Succeeded().

Referenced by DoFloodTile().

Foundation GetRailFoundation ( Slope  tileh,
TrackBits  bits 
)
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 1821 of file rail_cmd.cpp.

References TRACK_LEFT, TRACK_LOWER, TRACK_RIGHT, and TRACK_UPPER.

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

Tests if autoslope is allowed.

Parameters
tileThe tile.
flagsTerraform command flags.
z_oldOld TileZ.
tileh_oldOld TileSlope.
z_newNew TileZ.
tileh_newNew TileSlope.
rail_bitsTrackbits.

Definition at line 2893 of file rail_cmd.cpp.

References _settings_game, CommandCost::AddCost(), ApplyFoundationToSlope(), AutoslopeEnabled(), ConstructionSettings::build_on_slopes, CheckRailSlope(), GameSettings::construction, EXPENSES_CONSTRUCTION, GetRailFoundation(), GetSlopeZInCorner(), IsSlopeWithOneCornerRaised(), RAIL_GROUND_BARREN, RAIL_GROUND_WATER, RemoveHalftileSlope(), return_cmd_error, and TRACK_BIT_NONE.

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
vvehicle outside (leaving) the depot
Returns
number of ticks when the next wagon will leave

Definition at line 2813 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().

static VehicleEnterTileStatus VehicleEnter_Track ( Vehicle u,
TileIndex  tile,
int  x,
int  y 
)
static

Variable Documentation

const int8 _deltacoord_leaveoffset[8]
static
Initial value:
{
-1, 0, 1, 0,
0, 1, 0, -1
}

Definition at line 2801 of file rail_cmd.cpp.

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 2003 of file rail_cmd.cpp.

const TileTypeProcs _tile_type_rail_procs
Initial value:
{
DrawTile_Track,
GetSlopePixelZ_Track,
ClearTile_Track,
NULL,
GetTileDesc_Track,
GetTileTrackStatus_Track,
ClickTile_Track,
NULL,
TileLoop_Track,
ChangeTileOwner_Track,
NULL,
GetFoundation_Track,
TerraformTile_Track,
}
const byte _track_sloped_sprites[14]
static
Initial value:
{
14, 15, 22, 13,
0, 21, 17, 12,
23, 0, 18, 20,
19, 16
}

Definition at line 160 of file rail_cmd.cpp.

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 764 of file rail_cmd.cpp.

const TrackBits _valid_tracks_on_leveled_foundation[15]
static
Initial value:

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

Definition at line 271 of file rail_cmd.cpp.

const TrackBits _valid_tracks_without_foundation[15]
static
Initial value:

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

Definition at line 249 of file rail_cmd.cpp.