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 | AccelerationSlowdownParams
| Data structure for storing engine speed changes of an acceleration 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: Swap values of swap_flag1 and swap_flag2, and If going up previously (GVF_GOINGUP_BIT set), the GVF_GOINGDOWN_BIT is set, and vice versa.
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 Vehicle * | TrainOnTileEnum (Vehicle *v, void *)
| Check if the vehicle is a train.
static Vehicle * | TrainApproachingCrossingEnum (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 Vehicle * | FindTrainCollideEnum (Vehicle *v, void *data)
| Collision test function.
static bool | CheckTrainCollision (Train *v)
| Checks whether the specified train has a collision with another vehicle.
static Vehicle * | CheckTrainAtSignal (Vehicle *v, void *data)
static Vehicle * | CollectTrackbitsFromCrashedVehiclesEnum (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 AccelerationSlowdownParams | _accel_slowdown []
| Speed update fractions for each acceleration 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 1683 of file train_cmd.cpp.

References Train::CalcNextVehicleOffset(), Vehicle::first, GetRailDepotTrack(), SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), SpecializedVehicle< T, Type >::Previous(), TicksToLeaveDepot(), Vehicle::tile, TRACK_BIT_DEPOT, TrackToTrackBits(), TrainController(), and Vehicle::vehstatus.

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 1655 of file train_cmd.cpp.

References Train::CalcNextVehicleOffset(), Vehicle::first, SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), SpecializedVehicle< T, Type >::Previous(), 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 2808 of file train_cmd.cpp.

References _settings_game, RailtypeInfo::acceleration_type, Vehicle::cur_speed, GetRailTypeInfo(), VehicleSettings::train_acceleration_model, GameSettings::vehicle, AccelerationSlowdownParams::z_down, Vehicle::z_pos, and AccelerationSlowdownParams::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 1023 of file train_cmd.cpp.

References Train::GetNextUnit(), SpecializedVehicle< T, Type >::GetNextVehicle(), InsertInConsist(), GroundVehicle< T, Type >::IsMultiheaded(), 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 3442 of file train_cmd.cpp.

References ChangeDir(), Vehicle::cur_image, DIRDIFF_45RIGHT, Vehicle::direction, EIT_ON_MAP, GB(), Train::GetImage(), SpecializedVehicle< T, Type >::Next(), TRACK_BIT_WORMHOLE, Train::UpdateDeltaXY(), GroundVehicle< T, Type >::UpdateInclination(), VehicleUpdatePosition(), Vehicle::vehstatus, and VS_HIDDEN.

Referenced by HandleCrashedTrain().

static void CheckIfTrainNeedsService | ( | Train * | v | ) | `[static]`

Check whether a train needs serivce, and if so, find a depot or service it.

Returns:
  v Train to check.

Definition at line 3871 of file train_cmd.cpp.

References _settings_game, FindDepotData::best_length, Chance16(), Vehicle::current_order, Vehicle::dest_tile, FindClosestTrainDepot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetDepotIndex(), Order::GetDestination(), GroundVehicle< T, Type >::gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, GroundVehicle< T, Type >::IsChainInDepot(), Order::IsType(), Order::MakeDummy(), Order::MakeGoToDepot(), YAPFSettings::maximum_go_to_depot_penalty, NPFSettings::maximum_go_to_depot_penalty, Vehicle::NeedsAutomaticServicing(), PathfinderSettings::npf, ODTFB_SERVICE, Vehicle::owner, PathfinderSettings::pathfinder_for_trains, GameSettings::pf, SetBit(), SetWindowWidgetDirty(), FindDepotData::tile, VPF_NPF, VPF_YAPF, WC_VEHICLE_VIEW, WID_VV_START_STOP, and PathfinderSettings::yapf.

Referenced by Train::OnNewDay().

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 883 of file train_cmd.cpp.

References _settings_game, GetFreeUnitNumber(), GroundVehicle< T, Type >::IsEngine(), VehicleSettings::max_trains, return_cmd_error, VEH_TRAIN, and GameSettings::vehicle.

Referenced by ValidateTrains().

static void CheckNextTrainTile | ( | Train * | v | ) | `[static]`

Check if the train is on the last reserved tile and try to extend the path then.

Parameters:

  | v | Train that needs its path extended.

Definition at line 1994 of file train_cmd.cpp.

References _settings_game, Vehicle::current_order, Vehicle::dest_tile, FindFirstTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), PathfinderSettings::forbid_90_deg, Order::GetDestination(), Vehicle::GetNumOrders(), GetSignalStateByTrackdir(), GetStationIndex(), Order::GetType(), Train::GetVehicleTrackdir(), HasPbsSignalOnTrackdir(), HasReservedTracks(), HasSignalOnTrackdir(), IsRailStationTile(), IsRailWaypointTile(), IsTileType(), KillFirstBit(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, 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, MP_RAILWAY, PathfinderSettings::path_backoff_interval, GameSettings::pf, ProcessOrders(), Order::ShouldStopAtStation(), SIGNAL_STATE_RED, Vehicle::tile, TRACK_BIT_DEPOT, TrackCrossesTracks(), TrackdirBitsToTrackBits(), and TrackdirToTrack().

Referenced by ReverseTrainDirection(), and TrainController().

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 907 of file train_cmd.cpp.

References _settings_game, GroundVehicleCache::cached_veh_length, CALLBACK_FAILED, CBID_TRAIN_ALLOW_WAGON_ATTACH, Vehicle::engine_type, error(), ErrorUnknownCallbackResult(), GroundVehicleCache::first_engine, GroundVehicle< T, Type >::gcache, Vehicle::GetGRF(), Vehicle::GetGRFID(), GetGRFStringID(), GetVehicleCallbackParent(), INVALID_ENGINE, Vehicle::InvalidateNewGRFCache(), Vehicle::IsArticulatedPart(), GroundVehicle< T, Type >::IsEngine(), GroundVehicle< T, Type >::IsRearDualheaded(), VehicleSettings::max_train_length, Vehicle::next, SpecializedVehicle< T, Type >::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 2975 of file train_cmd.cpp.

References AddVehicleNewsItem(), FindTrainCollideEnum(), FindVehicleOnPos(), FindVehicleOnPosXY(), GetOtherTunnelBridgeEnd(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, NT_ACCIDENT, TrainCollideChecker::num, Vehicle::owner, SetDParam(), Vehicle::tile, TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, TrainCollideChecker::v, Vehicle::x_pos, and Vehicle::y_pos.

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(), SpecializedVehicle< T, Type >::First(), Vehicle::first, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_STRING_ID, max(), SpecializedVehicle< T, Type >::Next(), Vehicle::owner, PM_PAUSED_ERROR, SetDParam(), ShowErrorMessage(), TicksToLeaveDepot(), TRACK_BIT_DEPOT, Vehicle::vehstatus, and WL_CRITICAL.

Referenced by InitializeWindowsAndCaches(), and ReloadNewGRFData().

static bool CheckTrainStayInDepot | ( | Train * | v | ) | `[static]`

Will the train stay in the depot the next tick?

Parameters:

  | v | Train to check.

Returns:
  True if it stays in the depot, false otherwise.

Definition at line 2056 of file train_cmd.cpp.

References _settings_client, _settings_game, GroundVehicleCache::cached_power, Vehicle::cur_speed, Vehicle::current_order, Vehicle::dest_tile, Vehicle::direction, GroundVehicle< T, Type >::gcache, ClientSettings::gui, HasDepotReservation(), INVALID_DIAGDIR, InvalidateWindowData(), Order::IsType(), MarkTileDirtyByTile(), MarkTrainAsStuck(), SpecializedVehicle< T, Type >::Next(), Vehicle::owner, GameSettings::pf, Train::PlayLeaveStationSound(), PathfinderSettings::reserve_paths, SetDepotReservation(), SetWindowClassesDirty(), SetWindowDirty(), GUISettings::show_track_reservation, SIGSEG_FULL, SIGSEG_PBS, TFP_NONE, Vehicle::tile, TRACK_BIT_DEPOT, TryPathReserve(), Train::UpdateAcceleration(), UpdateSignalsOnSegment(), SpecializedVehicle< T, Type >::UpdateViewport(), VehicleEnterDepot(), VehicleUpdatePosition(), Vehicle::vehstatus, Train::wait_counter, WC_TRAINS_LIST, and WC_VEHICLE_DEPOT.

static void ClearPathReservation | ( | const Train * | v,
|  | TileIndex | tile,
|  | Trackdir | track_dir |
| ) |  |  | `[static]`

Clear the reservation of tile that was just left by a wagon on track_dir.

Parameters:

  | v | Train owning the reservation.
  | tile | Tile with reservation to clear.
  | track_dir | Track direction to clear.

Definition at line 2136 of file train_cmd.cpp.

References _settings_client, GetOtherTunnelBridgeEnd(), GetTunnelBridgeDirection(), ClientSettings::gui, IsCompatibleTrainStationTile(), IsRailStationTile(), IsTileType(), MarkTileDirtyByTile(), MP_TUNNELBRIDGE, ReverseDiagDir(), SetRailStationPlatformReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, TileAddByDiagDir(), TrackdirToExitdir(), TrackdirToTrack(), TunnelBridgeIsFree(), and UnreserveRailTrack().

Referenced by Train::Crash(), FreeTrainTrackReservation(), and TrainController().

CommandCost CmdBuildRailVehicle | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | const Engine * | e,
|  | uint16 | data,
|  | Vehicle ** | ret |
| ) |  |  |

Build a railroad vehicle.

Parameters:

  | tile | tile of the depot where rail-vehicle is built.
  | flags | type of operation.
  | e | the engine to build.
  | data | bit 0 prevents any free cars from being added to the train.
  | ret[out] | the vehicle that has been built.

Returns:
  the cost of this operation or an error.

Definition at line 662 of file train_cmd.cpp.

References _cur_year, _current_company, _date, AddArticulatedParts(), Vehicle::build_year, RailVehicleInfo::capacity, Vehicle::cargo_cap, Vehicle::cargo_type, CheckConsistencyOfArticulatedVehicle(), CMD_ERROR, CmdBuildRailWagon(), Train::ConsistChanged(), Vehicle::cur_image, Vehicle::date_of_last_service, DC_AUTOREPLACE, DC_EXEC, DEFAULT_GROUP, DiagDirToDir(), Vehicle::direction, ENGINE_EXCLUSIVE_PREVIEW, Vehicle::engine_type, GroundVehicleCache::first_engine, Engine::flags, GroundVehicle< T, Type >::gcache, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Engine::GetDefaultCargoType(), Engine::GetLifeLengthInDays(), GetRailDepotDirection(), GetRailType(), Vehicle::group_id, HasBit(), HasPowerOnRail(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_ENGINE, Vehicle::last_loading_station, Vehicle::last_station_visited, Vehicle::max_age, NormalizeTrainVehInDepot(), Vehicle::owner, RAILVEH_MULTIHEAD, RAILVEH_WAGON, Vehicle::random_bits, Engine::reliability, Vehicle::reliability, Engine::reliability_spd_dec, Vehicle::reliability_spd_dec, SetBit(), GroundVehicle< T, Type >::SetEngine(), GroundVehicle< T, Type >::SetFrontEngine(), Vehicle::spritenum, Vehicle::tile, TILE_SIZE, TileX(), TileY(), UpdateTrainGroupID(), VehicleRandomBits(), VehicleUpdatePosition(), Vehicle::vehstatus, VF_BUILT_AS_PROTOTYPE, VS_HIDDEN, VS_STOPPED, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

Referenced by CmdBuildVehicle().

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 534 of file train_cmd.cpp.

References _cur_year, _current_company, AddArticulatedParts(), Vehicle::build_year, RailVehicleInfo::capacity, Vehicle::cargo_cap, Vehicle::cargo_type, CheckConsistencyOfArticulatedVehicle(), CMD_ERROR, Train::ConsistChanged(), Vehicle::cur_image, DC_EXEC, DEFAULT_GROUP, DiagDirToDir(), Vehicle::direction, DoCommand(), Vehicle::engine_type, SpecializedVehicle< T, Type >::First(), GroundVehicleCache::first_engine, GroundVehicle< T, Type >::gcache, Engine::GetDefaultCargoType(), GetRailDepotDirection(), GetRailType(), Vehicle::group_id, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_ENGINE, InvalidateWindowData(), IsCompatibleRail(), GroundVehicle< T, Type >::IsFreeWagon(), SpecializedVehicle< T, Type >::Last(), Vehicle::owner, Vehicle::random_bits, GroundVehicle< T, Type >::SetFreeWagon(), GroundVehicle< T, Type >::SetWagon(), Vehicle::spritenum, Vehicle::tile, TILE_SIZE, TileX(), TileY(), UpdateTrainGroupID(), VehicleRandomBits(), VehicleUpdatePosition(), Vehicle::vehstatus, VS_HIDDEN, WC_VEHICLE_DEPOT, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

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 1906 of file train_cmd.cpp.

References CheckOwnership(), CMD_ERROR, DC_EXEC, CommandCost::Failed(), SpecializedVehicle< Train, Type >::GetIfValid(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, GroundVehicle< T, Type >::IsChainInDepot(), Train::IsPrimaryVehicle(), Vehicle::owner, 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 1097 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(), SpecializedVehicle< T, Type >::First(), GB(), SpecializedVehicle< T, Type >::GetFirstEnginePart(), SpecializedVehicle< Train, Type >::GetIfValid(), SpecializedVehicle< T, Type >::GetLastEnginePart(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_VEHICLE, InvalidateWindowClassesData(), InvalidateWindowData(), GroundVehicle< T, Type >::IsEngine(), Vehicle::IsFrontEngine(), GroundVehicle< T, Type >::IsRearDualheaded(), Vehicle::IsStoppedInDepot(), MakeTrainBackup(), NormaliseSubtypes(), NormaliseTrainHead(), Vehicle::owner, RemoveVehicleFromGroup(), RestoreTrainBackup(), return_cmd_error, SetTrainGroupID(), SetWindowDirty(), Vehicle::tile, Vehicle::unitnumber, ValidateTrains(), Vehicle::vehstatus, 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 |
| ) |  |  |

Reverse train.

Parameters:

  | tile | unused
  | flags | type of operation
  | p1 | train to reverse
  | p2 | if true, reverse a unit in a train (needs to be in a depot)
  | text | unused

Returns:
  the cost of this operation or an error

Definition at line 1833 of file train_cmd.cpp.

References _settings_game, Vehicle::breakdown_ctr, CBM_VEHICLE_ARTIC_ENGINE, CheckOwnership(), CMD_ERROR, Train::ConsistChanged(), Vehicle::cur_speed, Vehicle::current_order, DC_EXEC, EF_RAIL_FLIPS, Vehicle::engine_type, CommandCost::Failed(), Vehicle::fill_percent_te_id, SpecializedVehicle< T, Type >::First(), SpecializedVehicle< Train, Type >::GetIfValid(), GetStationIndex(), HasBit(), HideFillingPercent(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, GroundVehicle< T, Type >::IsMultiheaded(), Vehicle::IsStoppedInDepot(), IsTileType(), Order::IsType(), Vehicle::LeaveStation(), MP_STATION, Vehicle::Next(), Vehicle::owner, return_cmd_error, ReverseTrainDirection(), GroundVehicle< T, Type >::SetLastSpeed(), SetWindowClassesDirty(), SetWindowDirty(), Vehicle::tile, ToggleBit(), VehicleSettings::train_acceleration_model, GameSettings::vehicle, Vehicle::vehstatus, VRF_REVERSE_DIRECTION, VS_CRASHED, WC_TRAINS_LIST, WC_VEHICLE_DEPOT, WC_VEHICLE_DETAILS, and WC_VEHICLE_VIEW.

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 1285 of file train_cmd.cpp.

References CommandCost::AddCost(), Vehicle::AddToShared(), ArrangeTrains(), OrderBackup::Backup(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::CanAllocateItem(), Vehicle::CopyVehicleConfigAndStatistics(), GroupStatistics::CountVehicle(), DC_AUTOREPLACE, DC_EXEC, DeleteVehicleOrders(), EXPENSES_NEW_VEHICLES, CommandCost::Failed(), SpecializedVehicle< T, Type >::First(), Vehicle::first, SpecializedVehicle< Train, Type >::From(), SpecializedVehicle< T, Type >::GetFirstEnginePart(), HasBit(), InvalidateWindowClassesData(), InvalidateWindowData(), GroundVehicle< T, Type >::IsEngine(), Vehicle::IsFrontEngine(), IsLocalCompany(), Train::IsPrimaryVehicle(), GroundVehicle< T, Type >::IsRearDualheaded(), Vehicle::list, MAKE_ORDER_BACKUP_FLAG, MakeTrainBackup(), Vehicle::Next(), NormaliseSubtypes(), NormaliseTrainHead(), Vehicle::orders, RestoreTrainBackup(), return_cmd_error, ShowVehicleViewWindow(), Vehicle::tile, 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 3355 of file train_cmd.cpp.

References DiagDirToDiagTrackBits(), SpecializedVehicle< Train, Type >::From(), 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 3379 of file train_cmd.cpp.

References CollectTrackbitsFromCrashedVehiclesEnum(), Train::ConsistChanged(), DiagDirToDiagTrackBits(), FindVehicleOnPos(), SpecializedVehicle< T, Type >::First(), FOR_EACH_SET_TRACK, GetTunnelBridgeDirection(), HasReservedTracks(), INVALID_DIAGDIR, IsLevelCrossingTile(), IsRailDepotTile(), IsTileType(), MP_TUNNELBRIDGE, SpecializedVehicle< T, Type >::Next(), Vehicle::owner, Vehicle::SetNext(), SetSignalsOnBothDir(), SetWindowDirty(), Vehicle::tile, 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 2252 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 2267 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 1937 of file train_cmd.cpp.

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

Referenced by CheckIfTrainNeedsService(), and Train::FindClosestDepot().

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 2928 of file train_cmd.cpp.

References abs(), GroundVehicleCache::cached_veh_length, SpecializedVehicle< T, Type >::First(), SpecializedVehicle< Train, Type >::From(), GroundVehicle< T, Type >::gcache, 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 2175 of file train_cmd.cpp.

References ClearPathReservation(), RailtypeInfo::compatible_railtypes, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailDepotDirection(), GetRailTypeInfo(), GetReservedTrackbits(), GetSignalStateByTrackdir(), GetStationIndex(), Train::GetVehicleTrackdir(), HasPbsSignalOnTrackdir(), HasSignalOnTrackdir(), INVALID_TILE, INVALID_TRACKDIR, Vehicle::IsFrontEngine(), IsOnewaySignal(), IsRailDepotTile(), 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, SpecializedVehicle< T, Type >::Next(), RemoveFirstTrackdir(), ReverseTrackdir(), SetSignalStateByTrackdir(), SIGNAL_STATE_RED, Vehicle::tile, TRACK_BIT_DEPOT, TrackBitsToTrackdirBits(), TRACKDIR_BIT_NONE, TrackdirToExitdir(), TrackdirToTrack(), TracksOverlap(), TrackToTrackBits(), and UnreserveRailTrack().

Referenced by CmdBuildRailStation(), CmdBuildSingleSignal(), CmdConvertRail(), CmdRemoveSingleRail(), Train::Crash(), 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(), Train::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 258 of file train_cmd.cpp.

References GroundVehicleCache::cached_total_length, GroundVehicleCache::cached_veh_length, Vehicle::current_order, Vehicle::direction, DirToDiagDir(), GroundVehicle< T, Type >::gcache, SpecializedStation< Station, false >::Get(), Order::GetDestination(), Station::GetPlatformLength(), Order::GetStopLocation(), Order::IsType(), OSL_PLATFORM_FAR_END, OSL_PLATFORM_MIDDLE, OSL_PLATFORM_NEAR_END, and TILE_SIZE.

Referenced by Train::GetCurrentMaxSpeed().

static bool HandleCrashedTrain | ( | Train * | v | ) | `[static]`

Handle a crashed train.

Parameters:

  | v | First train vehicle.

Returns:
  Vehicle chain still exists.

Definition at line 3470 of file train_cmd.cpp.

References Chance16R(), ChangeTrainDirRandomly(), Train::crash_anim_pos, CreateEffectVehicleRel(), DeleteLastWagon(), EV_EXPLOSION_LARGE, EV_EXPLOSION_SMALL, GB(), SpecializedVehicle< T, Type >::Next(), Vehicle::Next(), Vehicle::tick_counter, Vehicle::vehstatus, 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 815 of file train_cmd.cpp.

References Vehicle::IsArticulatedPart(), SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), and Vehicle::SetNext().

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 765 of file train_cmd.cpp.

References SmallVector< T, S >::Append(), and SpecializedVehicle< T, Type >::Next().

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 1432 of file train_cmd.cpp.

References Vehicle::cur_speed, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, SetBit(), GroundVehicle< T, Type >::SetLastSpeed(), SetWindowWidgetDirty(), Vehicle::subspeed, VRF_TRAIN_STUCK, Train::wait_counter, 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 1640 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 829 of file train_cmd.cpp.

References SpecializedVehicle< T, Type >::GetNextVehicle(), InsertInConsist(), GroundVehicle< T, Type >::IsEngine(), GroundVehicle< T, Type >::IsMultiheaded(), SpecializedVehicle< T, Type >::Next(), 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 851 of file train_cmd.cpp.

References GroundVehicle< T, Type >::ClearFreeWagon(), GroundVehicle< T, Type >::ClearFrontEngine(), GroundVehicle< T, Type >::IsEngine(), GroundVehicle< T, Type >::IsWagon(), SpecializedVehicle< T, Type >::Next(), SpecializedVehicle< T, Type >::Previous(), GroundVehicle< T, Type >::SetFreeWagon(), and GroundVehicle< T, Type >::SetFrontEngine().

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 1064 of file train_cmd.cpp.

References Train::ConsistChanged(), GetFreeUnitNumber(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowData(), Vehicle::IsFrontEngine(), SetWindowWidgetDirty(), Vehicle::unitnumber, 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 798 of file train_cmd.cpp.

References SpecializedVehicle< T, Type >::GetLastEnginePart(), SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), SpecializedVehicle< T, Type >::Previous(), and Vehicle::SetNext().

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 774 of file train_cmd.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), SmallVector< T, S >::Length(), SpecializedVehicle< T, Type >::Previous(), and Vehicle::SetNext().

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

void ReverseTrainDirection | ( | Train * | v | ) |

Turn a train around.

Parameters:

  | v | Train to turn around.

Definition at line 1740 of file train_cmd.cpp.

References _settings_game, AdvanceWagonsAfterSwap(), AdvanceWagonsBeforeSwap(), CheckNextTrainTile(), ClrBit(), Train::ConsistChanged(), Vehicle::current_order, Vehicle::direction, FindFirstTrack(), FreeTrainTrackReservation(), GetRailDepotDirection(), Order::GetType(), Train::GetVehicleTrackdir(), HasBit(), HasSignalOnTrackdir(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_TILE, InvalidateWindowData(), IsRailDepotTile(), IsRailStationTile(), IsTileType(), MarkTrainAsStuck(), MaybeBarCrossingWithSound(), MP_RAILWAY, MP_TUNNELBRIDGE, SpecializedVehicle< T, Type >::Next(), Vehicle::owner, GameSettings::pf, PathfinderSettings::reserve_paths, ReverseTrainSwapVeh(), SetRailStationPlatformReservation(), SetWindowWidgetDirty(), SIGSEG_PBS, Vehicle::tile, ToggleBit(), TRACK_BIT_DEPOT, TrackdirToExitdir(), TrainApproachingCrossingTile(), TrainExitDir(), TryPathReserve(), UpdateLevelCrossing(), UpdateSignalsOnSegment(), SpecializedVehicle< T, Type >::UpdateViewport(), VRF_TOGGLE_REVERSE, VRF_TRAIN_STUCK, Train::wait_counter, WC_VEHICLE_DEPOT, WC_VEHICLE_VIEW, and WID_VV_START_STOP.

Referenced by CmdReverseTrainDirection(), TrainApproachingLineEnd(), and TrainController().

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 1521 of file train_cmd.cpp.

References Vehicle::direction, GroundVehicle< T, Type >::gv_flags, SpecializedVehicle< T, Type >::Next(), Swap(), SwapTrainFlags(), Vehicle::tile, UpdateStatusAfterSwap(), Vehicle::vehstatus, VS_HIDDEN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

Referenced by FixupTrainLengths(), and ReverseTrainDirection().

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

Swap the two up/down flags in two ways:

- Swap values of swap_flag1 and swap_flag2, and
- If going up previously (GVF_GOINGUP_BIT set), the GVF_GOINGDOWN_BIT is set, and vice versa.

Parameters:

  | swap_flag1 | [inout] First train flag.
  | swap_flag2 | [inout] Second train flag.

Definition at line 1456 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 1596 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 1575 of file train_cmd.cpp.

References SpecializedVehicle< Train, Type >::From(), Vehicle::IsFrontEngine(), 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 3597 of file train_cmd.cpp.

References DiagDirToAxis(), Vehicle::direction, GetCrossingRoadAxis(), INVALID_TILE, Vehicle::IsFrontEngine(), IsLevelCrossingTile(), Vehicle::tile, TileOffsByDiagDir(), TrainCanLeaveTile(), TrainExitDir(), Vehicle::vehstatus, and VS_CRASHED.

Referenced by Train::Crash(), 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 3522 of file train_cmd.cpp.

References GroundVehicleCache::cached_veh_length, Vehicle::cur_speed, DIR_E, DIR_N, DIR_NE, DIR_NW, DIR_S, DIR_SE, DIR_W, Vehicle::direction, GroundVehicle< T, Type >::gcache, IsDiagonalDirection(), ReverseTrainDirection(), TILE_SIZE, Vehicle::vehstatus, Vehicle::x_pos, and Vehicle::y_pos.

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 3567 of file train_cmd.cpp.

References DiagDirToDir(), Vehicle::direction, GetRailDepotDirection(), GetTunnelBridgeDirection(), IsRailDepotTile(), IsTileType(), MP_TUNNELBRIDGE, ReverseDiagDir(), Vehicle::tile, 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 3624 of file train_cmd.cpp.

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

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 3027 of file train_cmd.cpp.

References _settings_game, RailtypeInfo::acceleration_type, AffectSpeedByZChange(), TrainCache::cached_max_curve_speed, CheckNextTrainTile(), ClearPathReservation(), Vehicle::cur_speed, DiagdirBetweenTiles(), DiagdirReachesTrackdirs(), DiagDirToDiagTrack(), DIRDIFF_45LEFT, DIRDIFF_45RIGHT, DirDifference(), error(), FIND_FIRST_BIT, FindFirstTrack(), FindFirstTrackdir(), SpecializedVehicle< T, Type >::First(), PathfinderSettings::forbid_90_deg, GetBridgeSpec(), GetBridgeType(), Train::GetCurveSpeedLimit(), GetNewVehiclePos(), GetOtherTunnelBridgeEnd(), GetRailTypeInfo(), GetReservedTrackbits(), GetTileRailType(), GetTileTrackStatus(), GetTunnelBridgeDirection(), HasBit(), HasCrossingReservation(), HasOnewaySignalBlockingTrackdir(), HasPbsSignalOnTrackdir(), HasReservedTracks(), HasSignalOnTrackdir(), HasSignals(), HasVehicleOnPos(), INVALID_TILE, IsLevelCrossingTile(), IsPlainRailTile(), IsTileType(), IsTunnel(), IsValidDiagDirection(), AccelerationSlowdownParams::large_turn, MarkTileDirtyByTile(), MarkTrainAsStuck(), min(), MP_TUNNELBRIDGE, GetNewVehiclePosResult::new_tile, SpecializedVehicle< T, Type >::Next(), GetNewVehiclePosResult::old_tile, PathfinderSettings::path_backoff_interval, GameSettings::pf, SpecializedVehicle< T, Type >::Previous(), PathfinderSettings::reverse_at_signals, ReverseDiagDir(), ReverseTrackdir(), ReverseTrainDirection(), SetSignalStateByTrackdir(), SetWindowDirty(), SIGNAL_STATE_RED, SIGSEG_PBS, SIGTYPE_PBS, AccelerationSlowdownParams::small_turn, BridgeSpec::speed, TFP_NONE, TFP_STUCK, Vehicle::tile, 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 2898 of file train_cmd.cpp.

References Train::Crash(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Game::NewEvent(), AI::NewEvent(), Vehicle::owner, Train::ReserveTrackUnderConsist(), Vehicle::tile, Vehicle::vehstatus, 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 2753 of file train_cmd.cpp.

References _local_company, AddVehicleNewsItem(), Vehicle::BeginLoading(), SpecializedStation< Station, false >::Get(), HVOT_TRAIN, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Vehicle::last_station_visited, Game::NewEvent(), AI::NewEvent(), NT_ARRIVAL_COMPANY, NT_ARRIVAL_OTHER, Vehicle::owner, SAT_TRAIN_ARRIVES, SetDParam(), SetWindowDirty(), Vehicle::tile, 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 1563 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 |
| ) |  |  |

Try to reserve a path to a safe position.

Parameters:

  | v | The vehicle
  | mark_as_stuck | Should the train be marked as stuck on a failed reservation?
  | first_tile_okay | True if no path should be reserved if the current tile is a safe position.

Returns:
  True if a path could be reserved.

Definition at line 2612 of file train_cmd.cpp.

References _settings_client, _settings_game, ClrBit(), DiagdirReachesTrackdirs(), DiagdirReachesTracks(), FollowTrainReservation(), PathfinderSettings::forbid_90_deg, GetRailDepotDirection(), GetTileTrackStatus(), ClientSettings::gui, HasBit(), HasDepotReservation(), HasReservedTracks(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Vehicle::IsFrontEngine(), MarkTileDirtyByTile(), MarkTrainAsStuck(), PBSTileInfo::okay, GameSettings::pf, SetDepotReservation(), SetWindowWidgetDirty(), GUISettings::show_track_reservation, PBSTileInfo::tile, Vehicle::tile, TileAddByDiagDir(), TRACK_BIT_DEPOT, TrackCrossesTracks(), PBSTileInfo::trackdir, TrackdirBitsToTrackBits(), TrackdirToExitdir(), TrackdirToTrack(), TrackStatusToTrackdirBits(), TRANSPORT_RAIL, VRF_TRAIN_STUCK, Train::wait_counter, WC_VEHICLE_VIEW, and WID_VV_START_STOP.

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

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 2359 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 1618 of file train_cmd.cpp.

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

Referenced by AfterLoadGame(), ChangeOwnershipOfCompanyItems(), CmdBuildRoad(), CmdBuildSingleRail(), Train::Crash(), 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 1484 of file train_cmd.cpp.

References Vehicle::direction, IsBridgeTile(), IsTileType(), MP_TUNNELBRIDGE, ReverseDir(), Vehicle::tile, TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, GroundVehicle< T, Type >::UpdateInclination(), SpecializedVehicle< T, Type >::UpdateViewport(), VehicleEnterTile(), VehicleUpdatePosition(), Vehicle::x_pos, and Vehicle::y_pos.

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 1003 of file train_cmd.cpp.

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

Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().

## Variable Documentation

const AccelerationSlowdownParams _accel_slowdown[]`[static]`

Initial value:

     {

      {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 acceleration type.

Definition at line 2796 of file train_cmd.cpp.

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 3509 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 2231 of file train_cmd.cpp.