Defines | 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 "window_func.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 "programmable_signals.h"
#include "company_gui.h"
#include "table/strings.h"
#include "table/railtypes.h"
#include "table/track_land.h"

Go to the source code of this file.

Defines

#define MAYBE_DRAW_SIGNAL(x, y, z, t)   if (IsSignalPresent(tile, x)) DrawSingleSignal(tile, 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 = 0, SIGNAL_TO_NORTHEAST = 2, SIGNAL_TO_SOUTHEAST = 4, SIGNAL_TO_NORTHWEST = 6,
  SIGNAL_TO_EAST = 8, SIGNAL_TO_WEST = 10, SIGNAL_TO_SOUTH = 12, SIGNAL_TO_NORTH = 14
}
 

Enums holding the offsets from base signal sprite, 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, Track track, byte condition, uint 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)
static void DrawTile_Track (TileInfo *ti)
void DrawTrainDepotSprite (int x, int y, int dir, RailType railtype)
static uint GetSlopeZ_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, uint z_old, Slope tileh_old, uint z_new, Slope tileh_new, TrackBits rail_bits)
 Tests if autoslope is allowed.
static CommandCost TerraformTile_Track (TileIndex tile, DoCommandFlag flags, uint 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

Enums holding the offsets from base signal sprite, according to the side it is representing.

The addtion of 2 per enum is necessary in order to "jump" over the green state sprite, all signal sprites being in pair, starting with the off-red state

Definition at line 2366 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:
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 344 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:
tile Tile to build on.
to_build New track bits.
flags Flags of the operation.
Returns:
Succeeded or failed command.

Definition at line 185 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:
tile start tile of drag
flags operation to perform
p1 end tile of drag
p2 various 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
text unused
Returns:
the cost of this operation or an error
See also:
CmdRailTrackHelper

Definition at line 868 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:
tile start tile of drag
flags operation to perform
p1 end tile of drag
p2 various 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
text unused
Returns:
the cost of this operation or an error
See also:
CmdSignalTrackHelper

Definition at line 1416 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:
tile tile to build on
flags operation to perform
p1 railtype of being built piece (normal, mono, maglev)
p2 rail track to build
text unused
Returns:
the cost of this operation or an error

Definition at line 378 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(), 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, 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, Company::road_infrastructure, ROAD_X, ROAD_Y, ROADTYPE_ROAD, ROADTYPE_TRAM, ROADTYPES_ALL, 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:
tile tile where to build the signals
flags operation to perform
p1 various 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-14)- cycle through which signal set?
  • 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
p2 used for CmdBuildManySignals() to copy direction of first signal
text unused
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 976 of file rail_cmd.cpp.

References _current_company, _settings_game, AddSideToSignalBuffer(), AddTrackToSignalBuffer(), CheckTileOwnership(), ClrBitTunnelBridgeExit(), ClrBitTunnelBridgeSignal(), CMD_ERROR, CountBits(), Vehicle::cur_speed, Vehicle::current_order, DC_EXEC, DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, DirtyCompanyInfrastructureWindows(), EnsureNoTrainOnTrack(), 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(), GetOtherTunnelBridgeEnd(), GetPresentSignals(), GetRailReservationTrackBits(), GetSignalStates(), GetTileOwner(), GetTrackBits(), GetTrainForReservation(), GetTunnelBridgeDirection(), GetTunnelBridgeLength(), GetTunnelBridgeTransportType(), Train::GetVehicleTrackdir(), HasBit(), HasReservedTracks(), HasSignalOnTrack(), HasSignals(), HasTrack(), HasWormholeSignals(), INVALID_DIAGDIR, IsPbsSignal(), IsPlainRailTile(), IsProgrammableSignal(), IsSafeWaitingPosition(), IsSpeedSignal(), IsTileType(), IsTunnelBridgeEntrance(), Order::IsType(), KillFirstBit(), MarkTileDirtyByTile(), MP_TUNNELBRIDGE, GameSettings::pf, return_cmd_error, SetBitTunnelBridgeExit(), SetBitTunnelBridgeSignal(), SetHasSignals(), SetPresentSignals(), SetSignalStates(), SIG_ELECTRIC, SIG_SEMAPHORE, SignalOnTrack(), Vehicle::tile, TRACK_BIT_HORZ, TRACK_BIT_NONE, TRACK_BIT_VERT, TrackToTrackBits(), TRANSPORT_RAIL, 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:
tile end tile of rail conversion drag
flags operation to perform
p1 start tile of drag
p2 new railtype to convert to
text unused
Returns:
the cost of this operation or an error

Definition at line 1564 of file rail_cmd.cpp.

References _settings_game, CommandCost::AddCost(), SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), 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(), TileArea::h, HasPowerOnRail(), HasStationRail(), HasTunnelBridgeReservation(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_TRACK, InvalidateWindowData(), IsBridge(), IsCompatibleRail(), IsLevelCrossing(), IsLevelCrossingTile(), IsPlainRailTile(), IsRailStationTile(), IsStationTileBlocked(), SmallVector< T, S >::Length(), LEVELCROSSING_TRACKBIT_FACTOR, CommandCost::MakeError(), MapSize(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, Company::rail_infrastructure, RAIL_TILE_DEPOT, RailConvertCost(), RailNoLevelCrossings(), RAILTYPE_ELECTRIC, RAILTYPE_RAIL, RemoveFirstTrack(), SetRailType(), TileArea::tile, TILE_AREA_LOOP, TileOffsByDiagDir(), TileX(), TileY(), TRACK_BIT_NONE, TracksOverlap(), TRANSPORT_RAIL, TryPathReserve(), TUNNELBRIDGE_TRACKBIT_FACTOR, TunnelBridgeIsFree(), UpdateTrainPowerProc(), ValParamRailtype(), GameSettings::vehicle, TileArea::w, 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:
tile start tile of drag
flags operation to perform
p1 end tile of drag
p2 various 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
  • p2 = (bit 8) - 0 = build up to an obstacle, 1 = fail if an obstacle is found (used for AIs).
text unused
Returns:
the cost of this operation or an error

Definition at line 806 of file rail_cmd.cpp.

References CommandCost::AddCost(), CMD_BUILD_SINGLE_RAIL, CMD_ERROR, CMD_REMOVE_SINGLE_RAIL, DC_EXEC, 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:
tile start tile of drag
flags operation to perform
p1 end tile of drag
p2 various 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
text unused
Returns:
the cost of this operation or an error
See also:
CmdRailTrackHelper

Definition at line 887 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:
tile start tile of drag
flags operation to perform
p1 end tile of drag
p2 various 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
text unused
Returns:
the cost of this operation or an error
See also:
CmdSignalTrackHelper

Definition at line 1538 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:
tile tile to remove track from
flags operation to perform
p1 unused
p2 rail orientation
text unused
Returns:
the cost of this operation or an error

Definition at line 540 of file rail_cmd.cpp.

References _current_company, CommandCost::AddCost(), AddTrackToSignalBuffer(), CheckRemoveSignal(), 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(), 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:
tile coordinates where signal is being deleted from
flags operation to perform
p1 various 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
p2 unused
text unused
Returns:
the cost of this operation or an error

Definition at line 1433 of file rail_cmd.cpp.

References _current_company, _m, AddTrackToSignalBuffer(), CheckRemoveSignal(), CheckTileOwnership(), ClrBitTunnelBridgeExit(), ClrBitTunnelBridgeSignal(), CountBits(), DC_EXEC, DirtyCompanyInfrastructureWindows(), EnsureNoTrainOnTrack(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetOtherTunnelBridgeEnd(), GetPresentSignals(), GetReservedTrackbits(), GetTileOwner(), GetTrainForReservation(), GetTunnelBridgeLength(), GetTunnelBridgeTransportType(), HasReservedTracks(), HasSignalOnTrack(), HasSignalOnTrackdir(), HasTrack(), HasWormholeSignals(), INVALID_TRACK, IsPbsSignal(), IsPlainRailTile(), IsTileType(), Tile::m2, MarkTileDirtyByTile(), MP_TUNNELBRIDGE, OWNER_WATER, return_cmd_error, ReverseTrackdir(), SetHasSignals(), SetPresentSignals(), SetSignalStates(), SIG_ELECTRIC, SignalOnTrack(), TileAddByDiagDir(), TrackBitsToTrack(), TrackdirBitsToTrackBits(), TrackdirReachesTrackdirs(), TrackdirToExitdir(), TrackToTrackBits(), TrackToTrackdir(), TRANSPORT_RAIL, 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:
tile start tile of drag
flags operation to perform
p1 end tile of drag
p2 various 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
text unused
Returns:
the cost of this operation or an error

Definition at line 1273 of file rail_cmd.cpp.

References CommandCost::AddCost(), CMD_BUILD_SIGNALS, CMD_ERROR, CMD_REMOVE_SIGNALS, DoCommand(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), GB(), CommandCost::GetErrorMessage(), GetPresentSignals(), GetTunnelBridgeDirection(), HasBit(), HasSignalOnTrack(), HasTrack(), INVALID_STRING_ID, IsDiagonalTrackdir(), IsPbsSignal(), IsPlainRailTile(), IsTileType(), MapSize(), MP_TUNNELBRIDGE, return_cmd_error, SB(), SetBit(), SignalAgainstTrackdir(), SignalAlongTrackdir(), SignalOnTrack(), SIGTYPE_ENTRY, SIGTYPE_EXIT, CommandCost::Succeeded(), ToggleBit(), ToTileIndexDiff(), TrackdirToExitdir(), 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:
tile The tile.
track The track.
Returns:
Succeeded command (no train found), or a failed command (a train was found).

Definition at line 172 of file rail_cmd.cpp.

References EnsureNoTrainOnTrackBits(), and TrackToTrackBits().

Referenced by CmdBuildSingleRail(), CmdBuildSingleSignal(), CmdRemoveSingleRail(), and CmdRemoveSingleSignal().

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

References TRACK_LEFT, TRACK_LOWER, TRACK_RIGHT, and TRACK_UPPER.

static CommandCost TestAutoslopeOnRailTile ( TileIndex  tile,
uint  flags,
uint  z_old,
Slope  tileh_old,
uint  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 3041 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:
v vehicle outside (leaving) the depot
Returns:
number of ticks when the next wagon will leave

Definition at line 2960 of file rail_cmd.cpp.

References GroundVehicleCache::cached_veh_length, DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, GroundVehicle< T, Type >::gcache, GetRailDepotDirection(), Vehicle::tile, Vehicle::x_pos, and Vehicle::y_pos.

Referenced by AdvanceWagonsAfterSwap(), and CheckTrainsLengths().

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

const TileTypeProcs _tile_type_rail_procs
Initial value:
 {
  DrawTile_Track,           
  GetSlopeZ_Track,          
  ClearTile_Track,          
  NULL,                     
  GetTileDesc_Track,        
  GetTileTrackStatus_Track, 
  ClickTile_Track,          
  NULL,                     
  TileLoop_Track,           
  ChangeTileOwner_Track,    
  NULL,                     
  VehicleEnter_Track,       
  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 125 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 736 of file rail_cmd.cpp.

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
}

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

Definition at line 236 of file rail_cmd.cpp.

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