OpenTTD
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 "newgrf_debug.h"
#include "table/strings.h"
#include "table/train_cmd.h"
#include "safeguards.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 service, 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.
template<>
bool IsValidImageIndex< VEH_TRAIN > (uint8 image_index)
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)
void GetTrainSpriteSize (EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
 Get the size of the sprite of a train sprite heading west, or both heads (used for lists).
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 TrainFindGoodVehiclePos (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
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
vFirst vehicle in chain

Definition at line 1753 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(), Vehicle::vehstatus, and VS_HIDDEN.

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
vFirst vehicle in chain

Definition at line 1725 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 
)
inlinestatic

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

Parameters
vTrain to update.
old_zPrevious height.

Definition at line 2884 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_headThe destination chain of the to be moved vehicle.
dstThe destination for the to be moved vehicle.
src_headThe source chain of the to be moved vehicle.
srcThe to be moved vehicle.
move_chainWhether to move all vehicles after src or not.

Definition at line 1091 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
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_dstThe original destination chain.
dstThe destination chain after constructing the train.
original_dstThe original source chain.
dstThe source chain after constructing the train.
Returns
possible error of this command.

Definition at line 951 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
static CommandCost CheckTrainAttachment ( Train t)
static
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
vTrain to test.

Definition at line 3051 of file train_cmd.cpp.

References _settings_client, AddVehicleNewsItem(), SoundSettings::disaster, 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(), ClientSettings::sound, Vehicle::tile, TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, TrainCollideChecker::v, Vehicle::x_pos, and Vehicle::y_pos.

void CheckTrainsLengths ( )
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 
)

Build a railroad vehicle.

Parameters
tiletile of the depot where rail-vehicle is built.
flagstype of operation.
ethe engine to build.
databit 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 728 of file train_cmd.cpp.

References _cur_year, _current_company, _date, AddArticulatedParts(), Vehicle::build_year, RailVehicleInfo::capacity, Vehicle::cargo_cap, Vehicle::cargo_type, CCF_ARRANGE, 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, Vehicle::refit_cap, 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(), TRACK_BIT_DEPOT, Vehicle::UpdatePosition(), UpdateTrainGroupID(), BaseConsist::vehicle_flags, VehicleRandomBits(), Vehicle::vehstatus, VF_BUILT_AS_PROTOTYPE, VS_DEFPAL, 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
tiletile of the depot where rail-vehicle is built.
flagstype of operation.
ethe 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 598 of file train_cmd.cpp.

References _cur_year, _current_company, AddArticulatedParts(), Vehicle::build_year, RailVehicleInfo::capacity, Vehicle::cargo_cap, Vehicle::cargo_type, CCF_ARRANGE, CheckConsistencyOfArticulatedVehicle(), CMD_ERROR, CMD_MOVE_RAIL_VEHICLE, 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, Vehicle::refit_cap, GroundVehicle< T, Type >::SetFreeWagon(), GroundVehicle< T, Type >::SetWagon(), Vehicle::spritenum, Vehicle::tile, TILE_SIZE, TileX(), TileY(), TRACK_BIT_DEPOT, Vehicle::UpdatePosition(), UpdateTrainGroupID(), VehicleRandomBits(), Vehicle::vehstatus, VS_CRASHED, VS_DEFPAL, 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
tileunused
flagstype of operation
p1train to ignore the red signal
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 1976 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
tileunused
flagstype of operation Note: DC_AUTOREPLACE is set when autoreplace tries to undo its modifications or moves vehicles to temporary locations inside the depot.
p1various bitstuffed elements
  • p1 (bit 0 - 19) source vehicle index
  • p1 (bit 20) move all vehicles following the source vehicle
p2what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line
textunused
Returns
the cost of this operation or an error

Definition at line 1165 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, DeleteNewGRFInspectWindow(), 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(), Train::MarkDirty(), 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 
)
CommandCost CmdSellRailWagon ( DoCommandFlag  flags,
Vehicle t,
uint16  data,
uint32  user 
)

Sell a (single) train wagon/engine.

Parameters
flagstype of operation
tthe train wagon to sell
datathe 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
userthe user for the order backup.
Returns
the cost of this operation or an error

Definition at line 1359 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(), Vehicle::first, SpecializedVehicle< T, Type >::First(), SpecializedVehicle< Train, Type >::From(), SpecializedVehicle< T, Type >::GetFirstEnginePart(), HasBit(), InvalidateWindowClassesData(), InvalidateWindowData(), GroundVehicle< T, Type >::IsEngine(), Vehicle::IsFrontEngine(), Train::IsPrimaryVehicle(), GroundVehicle< T, Type >::IsRearDualheaded(), Vehicle::list, MAKE_ORDER_BACKUP_FLAG, MakeTrainBackup(), Vehicle::Next(), NormaliseSubtypes(), NormaliseTrainHead(), Vehicle::orders, RestoreTrainBackup(), return_cmd_error, 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
vVehicle passed from Find/HasVehicleOnPos()
datatrackdirbits for the result
Returns
NULL to iterate over all vehicles on the tile.

Definition at line 3424 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
vthe Vehicle of which last wagon is to be removed

Definition at line 3448 of file train_cmd.cpp.

References CCF_ARRANGE, CollectTrackbitsFromCrashedVehiclesEnum(), Train::ConsistChanged(), DiagDirToDiagTrackBits(), FindVehicleOnPos(), SpecializedVehicle< T, Type >::First(), FOR_EACH_SET_TRACK, GetTunnelBridgeDirection(), HasReservedTracks(), INVALID_DIAGDIR, IsLevelCrossingTile(), IsRailDepotTile(), IsTileType(), Vehicle::last_station_visited, MP_TUNNELBRIDGE, SpecializedVehicle< T, Type >::Next(), Vehicle::owner, Vehicle::SetNext(), SetSignalsOnBothDir(), SetWindowDirty(), Vehicle::tile, TRACK_BEGIN, TRACK_BIT_DEPOT, TRACK_BIT_NONE, 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
vThe train
tileThe tile the train is about to enter
enterdirDiagonal direction the train is coming from
tracksUsable tracks on the new tile
path_found[out] Whether a path has been found or not.
do_track_reservationPath reservation is requested
dest[out] State and destination of the requested path
Returns
The best track the train should follow

Definition at line 2326 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 2341 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
vTrain that wants a depot.
max_distanceMaximal search distance.
Returns
Information where the closest train depot is located.
Precondition
The given vehicle must not be crashed!

Definition at line 2007 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
void FreeTrainTrackReservation ( const Train v,
TileIndex  origin,
Trackdir  orig_td 
)

Free the reserved path in front of a vehicle.

Parameters
vTrain owning the reserved path.
originTile to start clearing (if INVALID_TILE, use the current tile of v).
orig_tdTrack direction (if INVALID_TRACKDIR, use the track direction of v).

Definition at line 2249 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(), and ReverseTrainDirection().

byte FreightWagonMult ( CargoID  cargo)

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

Parameters
cargoCargo type to get multiplier for
Returns
Cargo weight multiplier

Definition at line 87 of file train_cmd.cpp.

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

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

void GetTrainSpriteSize ( EngineID  engine,
uint &  width,
uint &  height,
int &  xoffs,
int &  yoffs,
EngineImageType  image_type 
)

Get the size of the sprite of a train sprite heading west, or both heads (used for lists).

Parameters
engineThe engine to get the sprite from.
[out]widthThe width of the sprite.
[out]heightThe height of the sprite.
[out]xoffsNumber of pixels to shift the sprite to the right.
[out]yoffsNumber of pixels to shift the sprite downwards.
image_typeContext the sprite is used in.

Definition at line 566 of file train_cmd.cpp.

References Sprite::height, min(), RAILVEH_MULTIHEAD, ScaleGUITrad(), ST_NORMAL, UnScaleGUI(), Sprite::width, Sprite::x_offs, and Sprite::y_offs.

Referenced by EnginePreviewWindow::UpdateWidgetSize().

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_idthe ID of the station where we're stopping
tilethe tile where the vehicle currently is
vthe 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 279 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
static void InsertInConsist ( Train dst,
Train chain 
)
static

Inserts a chain into the train at dst.

Parameters
dstthe place where to append after.
chainthe chain to actually add.

Definition at line 883 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
listto make the backup in
tthe train to make the backup of

Definition at line 833 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
static void MaybeBarCrossingWithSound ( TileIndex  tile)
inlinestatic

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

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

Definition at line 1710 of file train_cmd.cpp.

References _settings_client, SoundSettings::ambient, BarCrossing(), IsCrossingBarred(), MarkTileDirtyByTile(), and ClientSettings::sound.

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
tthe train to normalise.

Definition at line 897 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
static void NormaliseTrainHead ( Train head)
static
static void RemoveFromConsist ( Train part,
bool  chain = false 
)
static

Remove the given wagon from its consist.

Parameters
partthe part of the train to remove.
chainwhether to remove the whole chain.

Definition at line 866 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
listthe train to restore.

Definition at line 842 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)
void ReverseTrainSwapVeh ( Train v,
int  l,
int  r 
)

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

Parameters
vConsist to change.
lVehicle index in the consist of the first vehicle.
rVehicle index in the consist of the second vehicle.

Definition at line 1591 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 1526 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
tiletile to test
Returns
true if a vehicle is approaching the crossing
Precondition
tile is a rail-road crossing

Definition at line 1666 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
vvehicle on tile
datatile with crossing we are testing
Returns
v if it is approaching a crossing, NULL otherwise

Definition at line 1645 of file train_cmd.cpp.

References SpecializedVehicle< Train, Type >::From(), Vehicle::IsFrontEngine(), Vehicle::tile, 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
vfront engine of train
Returns
TileIndex of crossing the train is approaching, else INVALID_TILE
Precondition
v in non-crashed front engine

Definition at line 3667 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
vfront train engine
signalnot line end, just a red signal
reverseSet 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 3592 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, VS_TRAIN_SLOWING, 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
vtrain to test
Returns
true iff vehicle is NOT entering or inside a depot or tunnel/bridge

Definition at line 3637 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
bool TrainController ( Train v,
Vehicle nomove,
bool  reverse 
)

Move a vehicle chain one movement stop forwards.

Parameters
vFirst vehicle to move.
nomoveStop moving this and all following vehicles.
reverseSet 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 3103 of file train_cmd.cpp.

References _settings_client, _settings_game, RailtypeInfo::acceleration_type, AffectSpeedByZChange(), SoundSettings::ambient, TrainCache::cached_max_curve_speed, CCF_TRACK, CheckNextTrainTile(), ClearPathReservation(), DIAGDIR_BEGIN, DIAGDIR_END, DiagdirBetweenTiles(), DiagdirReachesTrackdirs(), DiagDirToDiagTrack(), DIRDIFF_45LEFT, DIRDIFF_45RIGHT, DirDifference(), error(), FIND_FIRST_BIT, FindFirstTrack(), FindFirstTrackdir(), SpecializedVehicle< T, Type >::First(), PathfinderSettings::forbid_90_deg, 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(), 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, ClientSettings::sound, TFP_NONE, TFP_SIGNAL, 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(), 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
vfirst vehicle of chain
Returns
number of victims (including 2 drivers; zero if train was already crashed)

Definition at line 2974 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
static DiagDirection TrainExitDir ( Direction  direction,
TrackBits  track 
)
inlinestatic

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

Parameters
directionvehicle direction
trackvehicle track bits
Returns
side of tile the train will leave

Definition at line 67 of file train_cmd.cpp.

References ChangeDiagDir(), DIAGDIR_END, DIAGDIRDIFF_90LEFT, DirToDiagDir(), HasBit(), TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, 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
vvehicle on tile
Returns
v if it is a train, NULL otherwise

Definition at line 1633 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
vThe vehicle.
tileThe tile the search should start from.
tdThe trackdir the search should start from.
override_railtypeWhether all physically compatible railtypes should be followed.
Returns
True if a path to a safe stopping tile could be reserved.

Definition at line 2433 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 
)
static void UpdateStatusAfterSwap ( Train v)
static
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_dstThe original destination chain.
dstThe destination chain after constructing the train.
original_dstThe original source chain.
dstThe source chain after constructing the train.
check_limitWhether to check the vehicle limit.
Returns
possible error of this command.

Definition at line 1071 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 2872 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 3579 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 2305 of file train_cmd.cpp.