Data Structures | Typedefs | Functions | Variables

train_cmd.cpp File Reference

Handling of trains. More...

#include "stdafx.h"
#include "error.h"
#include "articulated_vehicles.h"
#include "command_func.h"
#include "pathfinder/npf/npf_func.h"
#include "pathfinder/yapf/yapf.hpp"
#include "news_func.h"
#include "company_func.h"
#include "newgrf_sound.h"
#include "newgrf_text.h"
#include "strings_func.h"
#include "viewport_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
#include "newgrf_station.h"
#include "effectvehicle_func.h"
#include "network/network.h"
#include "spritecache.h"
#include "core/random_func.hpp"
#include "company_base.h"
#include "newgrf.h"
#include "order_backup.h"
#include "zoom_func.h"
#include "table/strings.h"
#include "table/train_cmd.h"

Go to the source code of this file.

Data Structures

class  VehicleOrderSaver
 This class will save the current order of a vehicle and restore it on destruction. More...
struct  RailtypeSlowdownParams
 Data structure for storing engine speed changes of a rail type. More...
struct  TrainCollideChecker
 Temporary data storage for testing collisions. More...

Typedefs

typedef SmallVector< Train *, 16 > TrainList
 Helper type for lists/vectors of trains.

Functions

static Track ChooseTrainTrack (Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool force_res, bool *got_reservation, bool mark_stuck)
static bool TrainCheckIfLineEnds (Train *v, bool reverse)
 Checks for line end.
bool TrainController (Train *v, Vehicle *nomove, bool reverse)
 Move a vehicle chain one movement stop forwards.
static TileIndex TrainApproachingCrossingTile (const Train *v)
 Determines whether train is approaching a rail-road crossing (thus making it barred).
static void CheckIfTrainNeedsService (Train *v)
 Check whether a train needs serivce, and if so, find a depot or service it.
static void CheckNextTrainTile (Train *v)
 Check if the train is on the last reserved tile and try to extend the path then.
static DiagDirection TrainExitDir (Direction direction, TrackBits track)
 Determine the side in which the train will leave the tile.
byte FreightWagonMult (CargoID cargo)
 Return the cargo weight multiplier to use for a rail vehicle.
void CheckTrainsLengths ()
 Checks if lengths of all rail vehicles are valid.
int GetTrainStopLocation (StationID station_id, TileIndex tile, const Train *v, int *station_ahead, int *station_length)
 Get the stop location of (the center) of the front vehicle of a train at a platform of a station.
static SpriteID GetDefaultTrainSprite (uint8 spritenum, Direction direction)
static SpriteID GetRailIcon (EngineID engine, bool rear_head, int &y, EngineImageType image_type)
void DrawTrainEngine (int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
static CommandCost CmdBuildRailWagon (TileIndex tile, DoCommandFlag flags, const Engine *e, Vehicle **ret)
 Build a railroad wagon.
static void NormalizeTrainVehInDepot (const Train *u)
 Move all free vehicles in the depot to the train.
static void AddRearEngineToMultiheadedTrain (Train *v)
CommandCost CmdBuildRailVehicle (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret)
 Build a railroad vehicle.
static Train * FindGoodVehiclePos (const Train *src)
static void MakeTrainBackup (TrainList &list, Train *t)
 Make a backup of a train into a train list.
static void RestoreTrainBackup (TrainList &list)
 Restore the train from the backup list.
static void RemoveFromConsist (Train *part, bool chain=false)
 Remove the given wagon from its consist.
static void InsertInConsist (Train *dst, Train *chain)
 Inserts a chain into the train at dst.
static void NormaliseDualHeads (Train *t)
 Normalise the dual heads in the train, i.e.
static void NormaliseSubtypes (Train *chain)
 Normalise the sub types of the parts in this chain.
static CommandCost CheckNewTrain (Train *original_dst, Train *dst, Train *original_src, Train *src)
 Check/validate whether we may actually build a new train.
static CommandCost CheckTrainAttachment (Train *t)
 Check whether the train parts can be attached.
static CommandCost ValidateTrains (Train *original_dst, Train *dst, Train *original_src, Train *src, bool check_limit)
 Validate whether we are going to create valid trains.
static void ArrangeTrains (Train **dst_head, Train *dst, Train **src_head, Train *src, bool move_chain)
 Arrange the trains in the wanted way.
static void NormaliseTrainHead (Train *head)
 Normalise the head of the train again, i.e.
CommandCost CmdMoveRailVehicle (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Move a rail vehicle around inside the depot.
CommandCost CmdSellRailWagon (DoCommandFlag flags, Vehicle *t, uint16 data, uint32 user)
 Sell a (single) train wagon/engine.
static void MarkTrainAsStuck (Train *v)
 Mark a train as stuck and stop it if it isn't stopped right now.
static void SwapTrainFlags (uint16 *swap_flag1, uint16 *swap_flag2)
 Swap the two up/down flags in two ways:


static void UpdateStatusAfterSwap (Train *v)
 Updates some variables after swapping the vehicle.
void ReverseTrainSwapVeh (Train *v, int l, int r)
 Swap vehicles l and r in consist v, and reverse their direction.
static VehicleTrainOnTileEnum (Vehicle *v, void *)
 Check if the vehicle is a train.
static VehicleTrainApproachingCrossingEnum (Vehicle *v, void *data)
 Checks if a train is approaching a rail-road crossing.
static bool TrainApproachingCrossing (TileIndex tile)
 Finds a vehicle approaching rail-road crossing.
void UpdateLevelCrossing (TileIndex tile, bool sound)
 Sets correct crossing state.
static void MaybeBarCrossingWithSound (TileIndex tile)
 Bars crossing and plays ding-ding sound if not barred already.
static void AdvanceWagonsBeforeSwap (Train *v)
 Advances wagons for train reversing, needed for variable length wagons.
static void AdvanceWagonsAfterSwap (Train *v)
 Advances wagons for train reversing, needed for variable length wagons.
void ReverseTrainDirection (Train *v)
 Turn a train around.
CommandCost CmdReverseTrainDirection (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Reverse train.
CommandCost CmdForceTrainProceed (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Force a train through a red signal.
static FindDepotData FindClosestTrainDepot (Train *v, int max_distance)
 Try to find a depot nearby.
static bool CheckTrainStayInDepot (Train *v)
 Will the train stay in the depot the next tick?
static void ClearPathReservation (const Train *v, TileIndex tile, Trackdir track_dir)
 Clear the reservation of tile that was just left by a wagon on track_dir.
void FreeTrainTrackReservation (const Train *v, TileIndex origin, Trackdir orig_td)
 Free the reserved path in front of a vehicle.
static Track DoTrainPathfind (const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest)
 Perform pathfinding for a train.
static PBSTileInfo ExtendTrainReservation (const Train *v, TrackBits *new_tracks, DiagDirection *enterdir)
 Extend a train path as far as possible.
static bool TryReserveSafeTrack (const Train *v, TileIndex tile, Trackdir td, bool override_tailtype)
 Try to reserve any path to a safe tile, ignoring the vehicle's destination.
bool TryPathReserve (Train *v, bool mark_as_stuck, bool first_tile_okay)
 Try to reserve a path to a safe position.
static bool CheckReverseTrain (const Train *v)
static void TrainEnterStation (Train *v, StationID station)
 Trains enters a station, send out a news item if it is the first train, and start loading.
static bool CheckCompatibleRail (const Train *v, TileIndex tile)
static void AffectSpeedByZChange (Train *v, int old_z)
 Modify the speed of the vehicle due to a change in altitude.
static bool TrainMovedChangeSignals (TileIndex tile, DiagDirection dir)
static uint TrainCrashed (Train *v)
 Marks train as crashed and creates an AI event.
static VehicleFindTrainCollideEnum (Vehicle *v, void *data)
 Collision test function.
static bool CheckTrainCollision (Train *v)
 Checks whether the specified train has a collision with another vehicle.
static VehicleCheckTrainAtSignal (Vehicle *v, void *data)
static VehicleCollectTrackbitsFromCrashedVehiclesEnum (Vehicle *v, void *data)
 Collect trackbits of all crashed train vehicles on a tile.
static void DeleteLastWagon (Train *v)
 Deletes/Clears the last wagon of a crashed train.
static void ChangeTrainDirRandomly (Train *v)
 Rotate all vehicles of a (crashed) train chain randomly to animate the crash.
static bool HandleCrashedTrain (Train *v)
 Handle a crashed train.
static bool TrainApproachingLineEnd (Train *v, bool signal, bool reverse)
 Train is approaching line end, slow down and possibly reverse.
static bool TrainCanLeaveTile (const Train *v)
 Determines whether train would like to leave the tile.
static bool TrainLocoHandler (Train *v, bool mode)

Variables

static const byte _vehicle_initial_x_fract [4] = {10, 8, 4, 8}
static const byte _vehicle_initial_y_fract [4] = { 8, 4, 8, 10}
static const byte _initial_tile_subcoord [6][4][3]
static const RailtypeSlowdownParams _railtype_slowdown []
 Speed update fractions for each rail type.
static const uint16 _breakdown_speeds [16]
 Maximum speeds for train that is broken down or approaching line end.

Detailed Description

Handling of trains.

Definition in file train_cmd.cpp.


Function Documentation

static void AdvanceWagonsAfterSwap ( Train *  v  )  [static]

Advances wagons for train reversing, needed for variable length wagons.

This one is called after the train is reversed.

Parameters:
v First vehicle in chain

Definition at line 1706 of file train_cmd.cpp.

References Vehicle::first, GetRailDepotTrack(), Vehicle::Last(), TicksToLeaveDepot(), TRACK_BIT_DEPOT, TrackToTrackBits(), and TrainController().

Referenced by ReverseTrainDirection().

static void AdvanceWagonsBeforeSwap ( Train *  v  )  [static]

Advances wagons for train reversing, needed for variable length wagons.

This one is called before the train is reversed.

Parameters:
v First vehicle in chain

Definition at line 1678 of file train_cmd.cpp.

References Vehicle::first, Vehicle::Last(), and TrainController().

Referenced by ReverseTrainDirection().

static void AffectSpeedByZChange ( Train *  v,
int  old_z 
) [inline, static]

Modify the speed of the vehicle due to a change in altitude.

Parameters:
v Train to update.
old_z Previous height.

Definition at line 2819 of file train_cmd.cpp.

References _settings_game, VehicleSettings::train_acceleration_model, GameSettings::vehicle, RailtypeSlowdownParams::z_down, and RailtypeSlowdownParams::z_up.

Referenced by TrainController().

static void ArrangeTrains ( Train **  dst_head,
Train *  dst,
Train **  src_head,
Train *  src,
bool  move_chain 
) [static]

Arrange the trains in the wanted way.

Parameters:
dst_head The destination chain of the to be moved vehicle.
dst The destination for the to be moved vehicle.
src_head The source chain of the to be moved vehicle.
src The to be moved vehicle.
move_chain Whether to move all vehicles after src or not.

Definition at line 1046 of file train_cmd.cpp.

References InsertInConsist(), NormaliseDualHeads(), and RemoveFromConsist().

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

static void ChangeTrainDirRandomly ( Train *  v  )  [static]

Rotate all vehicles of a (crashed) train chain randomly to animate the crash.

Parameters:
v First crashed vehicle.

Definition at line 3456 of file train_cmd.cpp.

References ChangeDir(), DIRDIFF_45RIGHT, EIT_ON_MAP, GB(), TRACK_BIT_WORMHOLE, VehicleUpdatePosition(), and VS_HIDDEN.

Referenced by HandleCrashedTrain().

static void CheckIfTrainNeedsService ( Train *  v  )  [static]
static CommandCost CheckNewTrain ( Train *  original_dst,
Train *  dst,
Train *  original_src,
Train *  src 
) [static]

Check/validate whether we may actually build a new train.

Note:
All vehicles are/were 'heads' of their chains.
Parameters:
original_dst The original destination chain.
dst The destination chain after constructing the train.
original_dst The original source chain.
dst The source chain after constructing the train.
Returns:
possible error of this command.

Definition at line 906 of file train_cmd.cpp.

References _settings_game, GetFreeUnitNumber(), VehicleSettings::max_trains, return_cmd_error, VEH_TRAIN, and GameSettings::vehicle.

Referenced by ValidateTrains().

static void CheckNextTrainTile ( Train *  v  )  [static]
static CommandCost CheckTrainAttachment ( Train *  t  )  [static]

Check whether the train parts can be attached.

Parameters:
t the train to check
Returns:
possible error of this command.

Definition at line 930 of file train_cmd.cpp.

References _settings_game, CALLBACK_FAILED, CBID_TRAIN_ALLOW_WAGON_ATTACH, error(), ErrorUnknownCallbackResult(), GetGRFStringID(), GetVehicleCallbackParent(), INVALID_ENGINE, VehicleSettings::max_train_length, Vehicle::Next(), Vehicle::next, return_cmd_error, Vehicle::SetNext(), TILE_SIZE, and GameSettings::vehicle.

Referenced by ValidateTrains().

static bool CheckTrainCollision ( Train *  v  )  [static]

Checks whether the specified train has a collision with another vehicle.

If so, destroys this vehicle, and the other vehicle if its subtype has TS_Front. Reports the incident in a flashy news item, modifies station ratings and plays a sound.

Parameters:
v Train to test.

Definition at line 2986 of file train_cmd.cpp.

References AddVehicleNewsItem(), FindTrainCollideEnum(), FindVehicleOnPos(), FindVehicleOnPosXY(), GetOtherTunnelBridgeEnd(), NS_ACCIDENT, TrainCollideChecker::num, SetDParam(), TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, and TrainCollideChecker::v.

void CheckTrainsLengths (  ) 

Checks if lengths of all rail vehicles are valid.

If not, shows an error message.

Definition at line 86 of file train_cmd.cpp.

References _networking, abs(), CMD_PAUSE, DoCommandP(), Vehicle::first, INVALID_STRING_ID, max(), PM_PAUSED_ERROR, SetDParam(), ShowErrorMessage(), TicksToLeaveDepot(), TRACK_BIT_DEPOT, and WL_CRITICAL.

Referenced by InitializeWindowsAndCaches(), and ReloadNewGRFData().

static bool CheckTrainStayInDepot ( Train *  v  )  [static]
static void ClearPathReservation ( const Train *  v,
TileIndex  tile,
Trackdir  track_dir 
) [static]
CommandCost CmdBuildRailVehicle ( TileIndex  tile,
DoCommandFlag  flags,
const Engine e,
uint16  data,
Vehicle **  ret 
)
static CommandCost CmdBuildRailWagon ( TileIndex  tile,
DoCommandFlag  flags,
const Engine e,
Vehicle **  ret 
) [static]

Build a railroad wagon.

Parameters:
tile tile of the depot where rail-vehicle is built.
flags type of operation.
e the engine to build.
ret[out] the vehicle that has been built.
Returns:
the cost of this operation or an error.

< Same depot

< A free wagon chain

< Same type

< Don't connect to ourself

< Not crashed/flooded

Definition at line 530 of file train_cmd.cpp.

References _cur_year, _current_company, AddArticulatedParts(), RailVehicleInfo::capacity, CheckConsistencyOfArticulatedVehicle(), CMD_ERROR, DC_EXEC, DEFAULT_GROUP, DiagDirToDir(), DoCommand(), Engine::GetDefaultCargoType(), GetRailDepotDirection(), GetRailType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_ENGINE, InvalidateWindowData(), IsCompatibleRail(), Vehicle::spritenum, TILE_SIZE, TileX(), TileY(), UpdateTrainGroupID(), VehicleRandomBits(), VehicleUpdatePosition(), VS_HIDDEN, and WC_VEHICLE_DEPOT.

Referenced by CmdBuildRailVehicle().

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

Force a train through a red signal.

Parameters:
tile unused
flags type of operation
p1 train to ignore the red signal
p2 unused
text unused
Returns:
the cost of this operation or an error

Definition at line 1926 of file train_cmd.cpp.

References CheckOwnership(), CMD_ERROR, DC_EXEC, CommandCost::Failed(), SpecializedVehicle< T, Type >::GetIfValid(), HasBit(), SetWindowDirty(), TFP_NONE, TFP_SIGNAL, TFP_STUCK, VRF_TRAIN_STUCK, and WC_VEHICLE_VIEW.

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

Move a rail vehicle around inside the depot.

Parameters:
tile unused
flags type of operation Note: DC_AUTOREPLACE is set when autoreplace tries to undo its modifications or moves vehicles to temporary locations inside the depot.
p1 various bitstuffed elements

  • p1 (bit 0 - 19) source vehicle index
  • p1 (bit 20) move all vehicles following the source vehicle
p2 what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line
text unused
Returns:
the cost of this operation or an error

Definition at line 1120 of file train_cmd.cpp.

References _current_company, ArrangeTrains(), CheckCargoCapacity(), CheckOwnership(), CMD_ERROR, GroupStatistics::CountVehicle(), DC_AUTOREPLACE, DC_EXEC, DC_NO_CARGO_CAP_CHECK, DEFAULT_GROUP, DeleteVehicleOrders(), DeleteWindowById(), CommandCost::Failed(), GB(), SpecializedVehicle< T, Type >::GetIfValid(), HasBit(), INVALID_VEHICLE, InvalidateWindowClassesData(), InvalidateWindowData(), MakeTrainBackup(), NormaliseSubtypes(), NormaliseTrainHead(), RemoveVehicleFromGroup(), RestoreTrainBackup(), return_cmd_error, SetTrainGroupID(), SetWindowDirty(), ValidateTrains(), VS_CRASHED, WC_COMPANY, WC_TRAINS_LIST, WC_VEHICLE_DEPOT, WC_VEHICLE_DETAILS, WC_VEHICLE_ORDERS, WC_VEHICLE_REFIT, WC_VEHICLE_TIMETABLE, and WC_VEHICLE_VIEW.

CommandCost CmdReverseTrainDirection ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)
CommandCost CmdSellRailWagon ( DoCommandFlag  flags,
Vehicle t,
uint16  data,
uint32  user 
)

Sell a (single) train wagon/engine.

Parameters:
flags type of operation
t the train wagon to sell
data the selling mode

  • data = 0: only sell the single dragged wagon/engine (and any belonging rear-engines)
  • data = 1: sell the vehicle and all vehicles following it in the chain if the wagon is dragged, don't delete the possibly belonging rear-engine to some front
user the user for the order backup.
Returns:
the cost of this operation or an error

Definition at line 1308 of file train_cmd.cpp.

References CommandCost::AddCost(), ArrangeTrains(), OrderBackup::Backup(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::CanAllocateItem(), GroupStatistics::CountVehicle(), DC_AUTOREPLACE, DC_EXEC, DeleteVehicleOrders(), EXPENSES_NEW_VEHICLES, CommandCost::Failed(), Vehicle::First(), Vehicle::first, SpecializedVehicle< T, Type >::From(), HasBit(), InvalidateWindowClassesData(), InvalidateWindowData(), IsLocalCompany(), MAKE_ORDER_BACKUP_FLAG, MakeTrainBackup(), Vehicle::Next(), NormaliseSubtypes(), NormaliseTrainHead(), RestoreTrainBackup(), return_cmd_error, ShowVehicleViewWindow(), ValidateTrains(), Vehicle::value, WC_TRAINS_LIST, and WC_VEHICLE_DEPOT.

Referenced by CmdSellVehicle().

static Vehicle* CollectTrackbitsFromCrashedVehiclesEnum ( Vehicle v,
void *  data 
) [static]

Collect trackbits of all crashed train vehicles on a tile.

Parameters:
v Vehicle passed from Find/HasVehicleOnPos()
data trackdirbits for the result
Returns:
NULL to iterate over all vehicles on the tile.

Definition at line 3369 of file train_cmd.cpp.

References DiagDirToDiagTrackBits(), GetTunnelBridgeDirection(), Vehicle::tile, TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, BaseVehicle::type, VEH_TRAIN, Vehicle::vehstatus, and VS_CRASHED.

Referenced by DeleteLastWagon().

static void DeleteLastWagon ( Train *  v  )  [static]

Deletes/Clears the last wagon of a crashed train.

It takes the engine of the train, then goes to the last wagon and deletes that. Each call to this function will remove the last wagon of a crashed train. If this wagon was on a crossing, or inside a tunnel/bridge, recalculate the signals as they might need updating

Parameters:
v the Vehicle of which last wagon is to be removed

Definition at line 3393 of file train_cmd.cpp.

References CollectTrackbitsFromCrashedVehiclesEnum(), DiagDirToDiagTrackBits(), FindVehicleOnPos(), FOR_EACH_SET_TRACK, GetTunnelBridgeDirection(), HasReservedTracks(), INVALID_DIAGDIR, IsLevelCrossingTile(), IsRailDepotTile(), IsTileType(), MP_TUNNELBRIDGE, SetSignalsOnBothDir(), SetWindowDirty(), TRACK_BEGIN, TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, TRACK_X, TRACK_Y, TrackBitsToTrack(), TryReserveRailTrack(), UnreserveRailTrack(), UpdateLevelCrossing(), UpdateSignalsOnSegment(), and WC_VEHICLE_DEPOT.

Referenced by HandleCrashedTrain().

static Track DoTrainPathfind ( const Train *  v,
TileIndex  tile,
DiagDirection  enterdir,
TrackBits  tracks,
bool &  path_found,
bool  do_track_reservation,
PBSTileInfo dest 
) [static]

Perform pathfinding for a train.

Parameters:
v The train
tile The tile the train is about to enter
enterdir Diagonal direction the train is coming from
tracks Usable tracks on the new tile
path_found [out] Whether a path has been found or not.
do_track_reservation Path reservation is requested
dest [out] State and destination of the requested path
Returns:
The best track the train should follow

Definition at line 2262 of file train_cmd.cpp.

References _settings_game, NPFTrainChooseTrack(), PathfinderSettings::pathfinder_for_trains, GameSettings::pf, VPF_NPF, VPF_YAPF, and YapfTrainChooseTrack().

static PBSTileInfo ExtendTrainReservation ( const Train *  v,
TrackBits new_tracks,
DiagDirection enterdir 
) [static]

Extend a train path as far as possible.

Stops on encountering a safe tile, another reservation or a track choice.

Returns:
INVALID_TILE indicates that the reservation failed.

Definition at line 2277 of file train_cmd.cpp.

References _settings_game, FindFirstTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), FollowTrainReservation(), PathfinderSettings::forbid_90_deg, HasOnewaySignalBlockingTrackdir(), HasReservedTracks(), IsPlainRail(), IsSafeWaitingPosition(), IsTileType(), IsWaitingPositionFree(), KillFirstBit(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_is_station, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_tile, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_old_td, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_old_tile, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_tiles_skipped, MP_RAILWAY, GameSettings::pf, PBSTileInfo::tile, TileOffsByDiagDir(), PBSTileInfo::trackdir, TRACKDIR_BIT_NONE, TrackdirBitsToTrackBits(), TrackdirCrossesTrackdirs(), TrackdirReachesTrackdirs(), TrackdirToTrack(), TryReserveRailTrack(), and UnreserveRailTrack().

static FindDepotData FindClosestTrainDepot ( Train *  v,
int  max_distance 
) [static]

Try to find a depot nearby.

Parameters:
v Train that wants a depot.
max_distance Maximal search distance.
Returns:
Information where the closest train depot is located.
Precondition:
The given vehicle must not be crashed!

Definition at line 1955 of file train_cmd.cpp.

References _settings_game, FollowTrainReservation(), IsRailDepotTile(), NPFTrainFindNearestDepot(), PathfinderSettings::pathfinder_for_trains, GameSettings::pf, PBSTileInfo::tile, VPF_NPF, VPF_YAPF, VS_CRASHED, and YapfTrainFindNearestDepot().

Referenced by CheckIfTrainNeedsService().

static Vehicle* FindTrainCollideEnum ( Vehicle v,
void *  data 
) [static]

Collision test function.

Parameters:
v Train vehicle to test collision with.
data Train being examined.
Returns:
NULL (always continue search)

Definition at line 2939 of file train_cmd.cpp.

References abs(), Vehicle::First(), TrainCollideChecker::num, Vehicle::owner, TrainCrashed(), BaseVehicle::type, TrainCollideChecker::v, VEH_TRAIN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

Referenced by CheckTrainCollision().

void FreeTrainTrackReservation ( const Train *  v,
TileIndex  origin,
Trackdir  orig_td 
)

Free the reserved path in front of a vehicle.

Parameters:
v Train owning the reserved path.
origin Tile to start clearing (if INVALID_TILE, use the current tile of v).
orig_td Track direction (if INVALID_TRACKDIR, use the track direction of v).

Definition at line 2193 of file train_cmd.cpp.

References ClearPathReservation(), RailtypeInfo::compatible_railtypes, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailTypeInfo(), GetReservedTrackbits(), GetSignalStateByTrackdir(), GetStationIndex(), HasPbsSignalOnTrackdir(), HasSignalOnTrackdir(), INVALID_TILE, INVALID_TRACKDIR, IsOnewaySignal(), IsRailStationTile(), IsTileType(), IsValidTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_is_bridge, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_is_station, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_is_tunnel, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_tile, MarkTileDirtyByTile(), MP_RAILWAY, MP_TUNNELBRIDGE, RemoveFirstTrackdir(), ReverseTrackdir(), SetSignalStateByTrackdir(), SIGNAL_STATE_RED, TrackBitsToTrackdirBits(), TRACKDIR_BIT_NONE, TrackdirToTrack(), TracksOverlap(), TrackToTrackBits(), and UnreserveRailTrack().

Referenced by CmdBuildRailStation(), CmdBuildSingleSignal(), CmdConvertRail(), CmdRemoveSingleRail(), DoClearBridge(), DoClearTunnel(), RemoveFromRailBaseStation(), RemoveRailStation(), and ReverseTrainDirection().

byte FreightWagonMult ( CargoID  cargo  ) 

Return the cargo weight multiplier to use for a rail vehicle.

Parameters:
cargo Cargo type to get multiplier for
Returns:
Cargo weight multiplier

Definition at line 79 of file train_cmd.cpp.

References _settings_game, VehicleSettings::freight_trains, CargoSpec::Get(), and GameSettings::vehicle.

Referenced by DrawTrainDetails(), FINAL::GetWeight(), TrainDetailsCapacityTab(), and TrainDetailsCargoTab().

int GetTrainStopLocation ( StationID  station_id,
TileIndex  tile,
const Train *  v,
int *  station_ahead,
int *  station_length 
)

Get the stop location of (the center) of the front vehicle of a train at a platform of a station.

Parameters:
station_id the ID of the station where we're stopping
tile the tile where the vehicle currently is
v the vehicle to get the stop location of
station_ahead 'return' the amount of 1/16th tiles in front of the train
station_length 'return' the station length in 1/16th tiles
Returns:
the location, calculated from the begin of the station to stop at.

Definition at line 257 of file train_cmd.cpp.

References DirToDiagDir(), SpecializedVehicle< T, Type >::Get(), OSL_PLATFORM_FAR_END, OSL_PLATFORM_MIDDLE, OSL_PLATFORM_NEAR_END, and TILE_SIZE.

static bool HandleCrashedTrain ( Train *  v  )  [static]

Handle a crashed train.

Parameters:
v First train vehicle.
Returns:
Vehicle chain still exists.

Definition at line 3484 of file train_cmd.cpp.

References Chance16R(), ChangeTrainDirRandomly(), CreateEffectVehicleRel(), DeleteLastWagon(), EV_EXPLOSION_LARGE, EV_EXPLOSION_SMALL, GB(), Vehicle::Next(), and VS_HIDDEN.

static void InsertInConsist ( Train *  dst,
Train *  chain 
) [static]

Inserts a chain into the train at dst.

Parameters:
dst the place where to append after.
chain the chain to actually add.

Definition at line 838 of file train_cmd.cpp.

Referenced by ArrangeTrains(), and NormaliseDualHeads().

static void MakeTrainBackup ( TrainList list,
Train *  t 
) [static]

Make a backup of a train into a train list.

Parameters:
list to make the backup in
t the train to make the backup of

Definition at line 788 of file train_cmd.cpp.

References SmallVector< T, S >::Append().

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

static void MarkTrainAsStuck ( Train *  v  )  [static]

Mark a train as stuck and stop it if it isn't stopped right now.

Parameters:
v Train to mark as being stuck.

Definition at line 1455 of file train_cmd.cpp.

References HasBit(), SetBit(), SetWindowWidgetDirty(), VRF_TRAIN_STUCK, WC_VEHICLE_VIEW, and WID_VV_START_STOP.

Referenced by CheckTrainStayInDepot(), ReverseTrainDirection(), TrainController(), and TryPathReserve().

static void MaybeBarCrossingWithSound ( TileIndex  tile  )  [inline, static]

Bars crossing and plays ding-ding sound if not barred already.

Parameters:
tile tile with crossing
Precondition:
tile is a rail-road crossing

Definition at line 1663 of file train_cmd.cpp.

References BarCrossing(), IsCrossingBarred(), and MarkTileDirtyByTile().

Referenced by ReverseTrainDirection(), and TrainCheckIfLineEnds().

static void NormaliseDualHeads ( Train *  t  )  [static]

Normalise the dual heads in the train, i.e.

if one is missing move that one to this train.

Parameters:
t the train to normalise.

Definition at line 852 of file train_cmd.cpp.

References InsertInConsist(), and RemoveFromConsist().

Referenced by ArrangeTrains().

static void NormaliseSubtypes ( Train *  chain  )  [static]

Normalise the sub types of the parts in this chain.

Parameters:
chain the chain to normalise.

Definition at line 874 of file train_cmd.cpp.

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

static void NormaliseTrainHead ( Train *  head  )  [static]

Normalise the head of the train again, i.e.

that is tell the world that we have changed and update all kinds of variables.

Parameters:
head the train to update.

Definition at line 1087 of file train_cmd.cpp.

References GetFreeUnitNumber(), InvalidateWindowData(), SetWindowWidgetDirty(), UpdateTrainGroupID(), VEH_TRAIN, WC_VEHICLE_REFIT, WC_VEHICLE_VIEW, and WID_VV_REFIT.

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

static void RemoveFromConsist ( Train *  part,
bool  chain = false 
) [static]

Remove the given wagon from its consist.

Parameters:
part the part of the train to remove.
chain whether to remove the whole chain.

Definition at line 821 of file train_cmd.cpp.

Referenced by ArrangeTrains(), and NormaliseDualHeads().

static void RestoreTrainBackup ( TrainList list  )  [static]

Restore the train from the backup list.

Parameters:
list the train to restore.

Definition at line 797 of file train_cmd.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), and SmallVector< T, S >::Length().

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

void ReverseTrainDirection ( Train *  v  ) 
void ReverseTrainSwapVeh ( Train *  v,
int  l,
int  r 
)

Swap vehicles l and r in consist v, and reverse their direction.

Parameters:
v Consist to change.
l Vehicle index in the consist of the first vehicle.
r Vehicle index in the consist of the second vehicle.

Definition at line 1544 of file train_cmd.cpp.

References Swap(), SwapTrainFlags(), UpdateStatusAfterSwap(), and VS_HIDDEN.

Referenced by FixupTrainLengths(), and ReverseTrainDirection().

static void SwapTrainFlags ( uint16 *  swap_flag1,
uint16 *  swap_flag2 
) [static]

Swap the two up/down flags in two ways:

Parameters:
swap_flag1 [inout] First train flag.
swap_flag2 [inout] Second train flag.

Definition at line 1479 of file train_cmd.cpp.

References ClrBit(), GVF_GOINGDOWN_BIT, GVF_GOINGUP_BIT, HasBit(), and SetBit().

Referenced by ReverseTrainSwapVeh().

static bool TrainApproachingCrossing ( TileIndex  tile  )  [static]

Finds a vehicle approaching rail-road crossing.

Parameters:
tile tile to test
Returns:
true if a vehicle is approaching the crossing
Precondition:
tile is a rail-road crossing

Definition at line 1619 of file train_cmd.cpp.

References AxisToDiagDir(), GetCrossingRailAxis(), HasVehicleOnPos(), IsLevelCrossingTile(), ReverseDiagDir(), TileOffsByDiagDir(), and TrainApproachingCrossingEnum().

Referenced by UpdateLevelCrossing().

static Vehicle* TrainApproachingCrossingEnum ( Vehicle v,
void *  data 
) [static]

Checks if a train is approaching a rail-road crossing.

Parameters:
v vehicle on tile
data tile with crossing we are testing
Returns:
v if it is approaching a crossing, NULL otherwise

Definition at line 1598 of file train_cmd.cpp.

References SpecializedVehicle< T, Type >::From(), TrainApproachingCrossingTile(), BaseVehicle::type, VEH_TRAIN, Vehicle::vehstatus, and VS_CRASHED.

Referenced by TrainApproachingCrossing().

static TileIndex TrainApproachingCrossingTile ( const Train *  v  )  [static]

Determines whether train is approaching a rail-road crossing (thus making it barred).

Parameters:
v front engine of train
Returns:
TileIndex of crossing the train is approaching, else INVALID_TILE
Precondition:
v in non-crashed front engine

Definition at line 3611 of file train_cmd.cpp.

References DiagDirToAxis(), GetCrossingRoadAxis(), INVALID_TILE, IsLevelCrossingTile(), TileOffsByDiagDir(), TrainCanLeaveTile(), TrainExitDir(), and VS_CRASHED.

Referenced by ReverseTrainDirection(), TrainApproachingCrossingEnum(), and TrainController().

static bool TrainApproachingLineEnd ( Train *  v,
bool  signal,
bool  reverse 
) [static]

Train is approaching line end, slow down and possibly reverse.

Parameters:
v front train engine
signal not line end, just a red signal
reverse Set to false to not execute the vehicle reversing. This does not change any other logic.
Returns:
true iff we did NOT have to reverse

Definition at line 3536 of file train_cmd.cpp.

References DIR_E, DIR_N, DIR_NE, DIR_NW, DIR_S, DIR_SE, DIR_W, IsDiagonalDirection(), ReverseTrainDirection(), and TILE_SIZE.

Referenced by TrainCheckIfLineEnds().

static bool TrainCanLeaveTile ( const Train *  v  )  [static]

Determines whether train would like to leave the tile.

Parameters:
v train to test
Returns:
true iff vehicle is NOT entering or inside a depot or tunnel/bridge

Definition at line 3581 of file train_cmd.cpp.

References DiagDirToDir(), GetRailDepotDirection(), GetTunnelBridgeDirection(), IsRailDepotTile(), IsTileType(), MP_TUNNELBRIDGE, ReverseDiagDir(), TRACK_BIT_DEPOT, and TRACK_BIT_WORMHOLE.

Referenced by TrainApproachingCrossingTile(), and TrainCheckIfLineEnds().

static bool TrainCheckIfLineEnds ( Train *  v,
bool  reverse 
) [static]

Checks for line end.

Also, bars crossing at next tile if needed

Parameters:
v vehicle we are checking
reverse Set to false to not execute the vehicle reversing. This does not change any other logic.
Returns:
true iff we did NOT have to reverse

Definition at line 3638 of file train_cmd.cpp.

References _settings_game, DiagdirReachesTrackdirs(), FindFirstTrack(), PathfinderSettings::forbid_90_deg, GB(), GetTileTrackStatus(), IsLevelCrossingTile(), MaybeBarCrossingWithSound(), GameSettings::pf, ReverseDiagDir(), TileOffsByDiagDir(), TRACK_BIT_NONE, TrackCrossesTracks(), TrackdirBitsToTrackBits(), TrackStatusToRedSignals(), TrackStatusToTrackdirBits(), TrainApproachingLineEnd(), TrainCanLeaveTile(), TrainExitDir(), and TRANSPORT_RAIL.

Referenced by TrainController().

bool TrainController ( Train *  v,
Vehicle nomove,
bool  reverse 
)

Move a vehicle chain one movement stop forwards.

Parameters:
v First vehicle to move.
nomove Stop moving this and all following vehicles.
reverse Set to false to not execute the vehicle reversing. This does not change any other logic.
Returns:
True if the vehicle could be moved forward, false otherwise.

Definition at line 3041 of file train_cmd.cpp.

References _settings_game, AffectSpeedByZChange(), CheckNextTrainTile(), ClearPathReservation(), DiagdirBetweenTiles(), DiagdirReachesTrackdirs(), DiagDirToDiagTrack(), DIRDIFF_45LEFT, DIRDIFF_45RIGHT, DirDifference(), error(), FIND_FIRST_BIT, FindFirstTrack(), FindFirstTrackdir(), PathfinderSettings::forbid_90_deg, GetBridgeSpec(), GetBridgeType(), GetNewVehiclePos(), GetOtherTunnelBridgeEnd(), GetReservedTrackbits(), GetTileRailType(), GetTileTrackStatus(), GetTunnelBridgeDirection(), HasBit(), HasCrossingReservation(), HasOnewaySignalBlockingTrackdir(), HasPbsSignalOnTrackdir(), HasReservedTracks(), HasSignalOnTrackdir(), HasSignals(), HasVehicleOnPos(), INVALID_TILE, IsLevelCrossingTile(), IsPlainRailTile(), IsTileType(), IsTunnel(), IsValidDiagDirection(), RailtypeSlowdownParams::large_turn, MarkTileDirtyByTile(), MarkTrainAsStuck(), min(), MP_TUNNELBRIDGE, GetNewVehiclePosResult::new_tile, Vehicle::Next(), GetNewVehiclePosResult::old_tile, PathfinderSettings::path_backoff_interval, GameSettings::pf, PathfinderSettings::reverse_at_signals, ReverseDiagDir(), ReverseTrackdir(), ReverseTrainDirection(), SetSignalStateByTrackdir(), SetWindowDirty(), SIGNAL_STATE_RED, SIGSEG_PBS, SIGTYPE_PBS, RailtypeSlowdownParams::small_turn, BridgeSpec::speed, TFP_NONE, TFP_STUCK, TileAddByDiagDir(), TRACK_BIT_DEPOT, TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_NONE, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, TRACK_BIT_WORMHOLE, TRACK_BIT_X, TRACK_BIT_Y, TrackBitsToTrack(), TrackCrossesTracks(), TrackdirBitsToTrackBits(), TrackDirectionToTrackdir(), TrackdirToExitdir(), TrackdirToTrack(), TrackStatusToRedSignals(), TrackStatusToTrackdirBits(), TrackToTrackBits(), VehicleSettings::train_acceleration_model, TrainApproachingCrossingTile(), TrainCheckIfLineEnds(), TrainEnterStation(), TRANSPORT_RAIL, TryPathReserve(), TryReserveRailTrack(), UpdateLevelCrossing(), UpdateSignalsOnSegment(), GameSettings::vehicle, VehicleEnterTile(), VehicleUpdatePosition(), VehicleUpdateViewport(), VETS_CANNOT_ENTER, VETS_ENTERED_STATION, VETS_ENTERED_WORMHOLE, VETS_STATION_ID_OFFSET, VRF_TRAIN_STUCK, VS_HIDDEN, PathfinderSettings::wait_oneway_signal, PathfinderSettings::wait_twoway_signal, WC_VEHICLE_VIEW, and GetNewVehiclePosResult::y.

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

static uint TrainCrashed ( Train *  v  )  [static]

Marks train as crashed and creates an AI event.

Doesn't do anything if the train is crashed already.

Parameters:
v first vehicle of chain
Returns:
number of victims (including 2 drivers; zero if train was already crashed)

Definition at line 2909 of file train_cmd.cpp.

References Game::NewEvent(), AI::NewEvent(), and VS_CRASHED.

Referenced by FindTrainCollideEnum().

static void TrainEnterStation ( Train *  v,
StationID  station 
) [static]

Trains enters a station, send out a news item if it is the first train, and start loading.

Parameters:
v Train that entered the station.
station Station visited.

Definition at line 2763 of file train_cmd.cpp.

References _local_company, AddVehicleNewsItem(), HVOT_TRAIN, Game::NewEvent(), AI::NewEvent(), NS_ARRIVAL_COMPANY, NS_ARRIVAL_OTHER, SAT_TRAIN_ARRIVES, SetDParam(), SetWindowDirty(), and WC_VEHICLE_VIEW.

Referenced by TrainController().

static DiagDirection TrainExitDir ( Direction  direction,
TrackBits  track 
) [inline, static]

Determine the side in which the train will leave the tile.

Parameters:
direction vehicle direction
track vehicle track bits
Returns:
side of tile the train will leave

Definition at line 59 of file train_cmd.cpp.

References ChangeDiagDir(), DIAGDIRDIFF_90LEFT, DirToDiagDir(), HasBit(), and TRACK_BIT_UPPER.

Referenced by ReverseTrainDirection(), TrainApproachingCrossingTile(), and TrainCheckIfLineEnds().

static Vehicle* TrainOnTileEnum ( Vehicle v,
void *   
) [static]

Check if the vehicle is a train.

Parameters:
v vehicle on tile
Returns:
v if it is a train, NULL otherwise

Definition at line 1586 of file train_cmd.cpp.

References BaseVehicle::type, and VEH_TRAIN.

Referenced by UpdateLevelCrossing().

bool TryPathReserve ( Train *  v,
bool  mark_as_stuck,
bool  first_tile_okay 
)
static bool TryReserveSafeTrack ( const Train *  v,
TileIndex  tile,
Trackdir  td,
bool  override_tailtype 
) [static]

Try to reserve any path to a safe tile, ignoring the vehicle's destination.

Safe tiles are tiles in front of a signal, depots and station tiles at end of line.

Parameters:
v The vehicle.
tile The tile the search should start from.
td The trackdir the search should start from.
override_railtype Whether all physically compatible railtypes should be followed.
Returns:
True if a path to a safe stopping tile could be reserved.

Definition at line 2369 of file train_cmd.cpp.

References _settings_game, NPFTrainFindNearestSafeTile(), PathfinderSettings::pathfinder_for_trains, GameSettings::pf, VPF_NPF, VPF_YAPF, and YapfTrainFindNearestSafeTile().

void UpdateLevelCrossing ( TileIndex  tile,
bool  sound 
)

Sets correct crossing state.

Parameters:
tile tile to update
sound should we play sound?
Precondition:
tile is a rail-road crossing

Definition at line 1641 of file train_cmd.cpp.

References HasCrossingReservation(), HasVehicleOnPos(), IsCrossingBarred(), IsLevelCrossingTile(), MarkTileDirtyByTile(), SetCrossingBarred(), TrainApproachingCrossing(), and TrainOnTileEnum().

Referenced by AfterLoadGame(), ChangeOwnershipOfCompanyItems(), CmdBuildRoad(), CmdBuildSingleRail(), DeleteLastWagon(), ReverseTrainDirection(), TrainController(), and UnreserveRailTrack().

static void UpdateStatusAfterSwap ( Train *  v  )  [static]

Updates some variables after swapping the vehicle.

Parameters:
v swapped vehicle

Definition at line 1507 of file train_cmd.cpp.

References IsBridgeTile(), IsTileType(), MP_TUNNELBRIDGE, ReverseDir(), TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, VehicleEnterTile(), and VehicleUpdatePosition().

Referenced by ReverseTrainSwapVeh().

static CommandCost ValidateTrains ( Train *  original_dst,
Train *  dst,
Train *  original_src,
Train *  src,
bool  check_limit 
) [static]

Validate whether we are going to create valid trains.

Note:
All vehicles are/were 'heads' of their chains.
Parameters:
original_dst The original destination chain.
dst The destination chain after constructing the train.
original_dst The original source chain.
dst The source chain after constructing the train.
check_limit Whether to check the vehicle limit.
Returns:
possible error of this command.

Definition at line 1026 of file train_cmd.cpp.

References CheckNewTrain(), CheckTrainAttachment(), and CommandCost::Failed().

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().


Variable Documentation

const uint16 _breakdown_speeds[16] [static]
Initial value:
 {
  225, 210, 195, 180, 165, 150, 135, 120, 105, 90, 75, 60, 45, 30, 15, 15
}

Maximum speeds for train that is broken down or approaching line end.

Definition at line 3523 of file train_cmd.cpp.

const byte _initial_tile_subcoord[6][4][3] [static]
Initial value:
 {
{{ 15, 8, 1 }, { 0, 0, 0 }, { 0, 8, 5 }, { 0,  0, 0 }},
{{  0, 0, 0 }, { 8, 0, 3 }, { 0, 0, 0 }, { 8, 15, 7 }},
{{  0, 0, 0 }, { 7, 0, 2 }, { 0, 7, 6 }, { 0,  0, 0 }},
{{ 15, 8, 2 }, { 0, 0, 0 }, { 0, 0, 0 }, { 8, 15, 6 }},
{{ 15, 7, 0 }, { 8, 0, 4 }, { 0, 0, 0 }, { 0,  0, 0 }},
{{  0, 0, 0 }, { 0, 0, 0 }, { 0, 8, 4 }, { 7, 15, 0 }},
}

Definition at line 2241 of file train_cmd.cpp.

Initial value:
 {
  
  {256 / 4, 256 / 2, 256 / 4, 2}, 
  {256 / 4, 256 / 2, 256 / 4, 2}, 
  {256 / 4, 256 / 2, 256 / 4, 2}, 
  {0,       256 / 2, 256 / 4, 2}, 
}

Speed update fractions for each rail type.

Definition at line 2806 of file train_cmd.cpp.