| OpenTTD
    | 
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 void | GetRailIcon (EngineID engine, bool rear_head, int &y, EngineImageType image_type, VehicleSpriteSeq *result) | 
| 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 Train * | FindGoodVehiclePos (const Train *src) | 
| static void | MakeTrainBackup (TrainList &list, Train *t) | 
| Make a backup of a train into a train list. | |
| static void | RestoreTrainBackup (TrainList &list) | 
| Restore the train from the backup list. | |
| static void | RemoveFromConsist (Train *part, bool chain=false) | 
| Remove the given wagon from its consist. | |
| static void | InsertInConsist (Train *dst, Train *chain) | 
| Inserts a chain into the train at dst. | |
| static void | NormaliseDualHeads (Train *t) | 
| Normalise the dual heads in the train, i.e. | |
| static void | NormaliseSubtypes (Train *chain) | 
| Normalise the sub types of the parts in this chain. | |
| static CommandCost | CheckNewTrain (Train *original_dst, Train *dst, Train *original_src, Train *src) | 
| Check/validate whether we may actually build a new train. | |
| static CommandCost | CheckTrainAttachment (Train *t) | 
| Check whether the train parts can be attached. | |
| static CommandCost | ValidateTrains (Train *original_dst, Train *dst, Train *original_src, Train *src, bool check_limit) | 
| Validate whether we are going to create valid trains. | |
| static void | ArrangeTrains (Train **dst_head, Train *dst, Train **src_head, Train *src, bool move_chain) | 
| Arrange the trains in the wanted way. | |
| static void | NormaliseTrainHead (Train *head) | 
| Normalise the head of the train again, i.e. | |
| CommandCost | CmdMoveRailVehicle (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) | 
| Move a rail vehicle around inside the depot. | |
| CommandCost | CmdSellRailWagon (DoCommandFlag flags, Vehicle *t, uint16 data, uint32 user) | 
| Sell a (single) train wagon/engine. | |
| static void | MarkTrainAsStuck (Train *v) | 
| Mark a train as stuck and stop it if it isn't stopped right now. | |
| static void | SwapTrainFlags (uint16 *swap_flag1, uint16 *swap_flag2) | 
| Swap the two up/down flags in two ways: | |
| static void | UpdateStatusAfterSwap (Train *v) | 
| Updates some variables after swapping the vehicle. | |
| void | ReverseTrainSwapVeh (Train *v, int l, int r) | 
| Swap vehicles l and r in consist v, and reverse their direction. | |
| static 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. | |
Handling of trains.
Definition in file train_cmd.cpp.
| 
 | static | 
Advances wagons for train reversing, needed for variable length wagons.
This one is called after the train is reversed.
| v | First vehicle in chain | 
Definition at line 1764 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 | 
Advances wagons for train reversing, needed for variable length wagons.
This one is called before the train is reversed.
| v | First vehicle in chain | 
Definition at line 1736 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().
| 
 | inlinestatic | 
Modify the speed of the vehicle due to a change in altitude.
| v | Train to update. | 
| old_z | Previous height. | 
Definition at line 2895 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 | 
Arrange the trains in the wanted way.
| 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 1102 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 | 
Rotate all vehicles of a (crashed) train chain randomly to animate the crash.
| v | First crashed vehicle. | 
Definition at line 3523 of file train_cmd.cpp.
References ChangeDir(), DIRDIFF_45LEFT, DIRDIFF_45RIGHT, DIRDIFF_SAME, Vehicle::direction, GB(), SpecializedVehicle< T, Type >::Next(), TRACK_BIT_WORMHOLE, GroundVehicle< T, Type >::UpdateInclination(), Vehicle::UpdatePosition(), SpecializedVehicle< T, Type >::UpdateViewport(), Vehicle::vehstatus, and VS_HIDDEN.
Referenced by HandleCrashedTrain().
| 
 | static | 
Check whether a train needs service, and if so, find a depot or service it.
Definition at line 3952 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(), NPFSettings::maximum_go_to_depot_penalty, YAPFSettings::maximum_go_to_depot_penalty, Vehicle::NeedsAutomaticServicing(), PathfinderSettings::npf, ODTFB_SERVICE, Vehicle::owner, PathfinderSettings::pathfinder_for_trains, GameSettings::pf, SetBit(), SetWindowWidgetDirty(), FindDepotData::tile, VehicleServiceInDepot(), VPF_NPF, VPF_YAPF, WC_VEHICLE_VIEW, WID_VV_START_STOP, and PathfinderSettings::yapf.
Referenced by Train::OnNewDay().
| 
 | static | 
Check/validate whether we may actually build a new train.
| 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. | 
Definition at line 962 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 | 
Check if the train is on the last reserved tile and try to extend the path then.
| v | Train that needs its path extended. | 
Definition at line 2075 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(), TRACKDIR_BIT_NONE, TrackdirBitsToTrackBits(), and TrackdirToTrack().
Referenced by ReverseTrainDirection(), and TrainController().
| 
 | static | 
Check whether the train parts can be attached.
| t | the train to check | 
Definition at line 986 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 | 
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.
| v | Train to test. | 
Definition at line 3062 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 | ( | ) | 
Checks if lengths of all rail vehicles are valid.
If not, shows an error message.
Definition at line 94 of file train_cmd.cpp.
References _networking, abs(), CMD_PAUSE, DoCommandP(), Vehicle::first, SpecializedVehicle< T, Type >::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, VS_CRASHED, and WL_CRITICAL.
Referenced by InitializeWindowsAndCaches(), and ReloadNewGRFData().
| 
 | static | 
Will the train stay in the depot the next tick?
| v | Train to check. | 
Definition at line 2137 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, TRACK_BIT_X, TRACK_BIT_Y, TryPathReserve(), Train::UpdateAcceleration(), Vehicle::UpdatePosition(), UpdateSignalsOnSegment(), SpecializedVehicle< T, Type >::UpdateViewport(), VehicleEnterDepot(), VehicleServiceInDepot(), Vehicle::vehstatus, VS_HIDDEN, VS_STOPPED, Train::wait_counter, WC_TRAINS_LIST, and WC_VEHICLE_DEPOT.
Clear the reservation of tile that was just left by a wagon on track_dir.
| v | Train owning the reservation. | 
| tile | Tile with reservation to clear. | 
| track_dir | Track direction to clear. | 
Definition at line 2217 of file train_cmd.cpp.
References _settings_client, GetOtherTunnelBridgeEnd(), GetTunnelBridgeDirection(), ClientSettings::gui, IsBridge(), IsCompatibleTrainStationTile(), IsRailStationTile(), IsTileType(), MarkBridgeDirty(), 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.
| 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. | 
Definition at line 739 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::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, VehicleSpriteSeq::Set(), SetBit(), GroundVehicle< T, Type >::SetEngine(), GroundVehicle< T, Type >::SetFrontEngine(), Vehicle::sprite_seq, 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 | 
Build a railroad wagon.
| 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. | 
< Same depot
< A free wagon chain
< Same type
< Don't connect to ourself
< Not crashed/flooded
Definition at line 607 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, CMD_MOVE_RAIL_VEHICLE, Train::ConsistChanged(), Vehicle::date_of_last_service, 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, VehicleSpriteSeq::Set(), GroundVehicle< T, Type >::SetFreeWagon(), GroundVehicle< T, Type >::SetWagon(), Vehicle::sprite_seq, 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.
| tile | unused | 
| flags | type of operation | 
| p1 | train to ignore the red signal | 
| p2 | unused | 
| text | unused | 
Definition at line 1987 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.
| 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 
 | 
| p2 | what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line | 
| text | unused | 
Definition at line 1176 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 | ||
| ) | 
Reverse train.
| 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 | 
Definition at line 1914 of file train_cmd.cpp.
References _settings_game, Vehicle::breakdown_ctr, CBM_VEHICLE_ARTIC_ENGINE, CCF_ARRANGE, 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(), TFP_NONE, 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.
| flags | type of operation | 
| t | the train wagon to sell | 
| data | the selling mode 
 | 
| user | the user for the order backup. | 
Definition at line 1370 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().
Collect trackbits of all crashed train vehicles on a tile.
| v | Vehicle passed from Find/HasVehicleOnPos() | 
| data | trackdirbits for the result | 
Definition at line 3435 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 | 
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
| v | the Vehicle of which last wagon is to be removed | 
Definition at line 3459 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 | 
Perform pathfinding for a train.
| 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 | 
Definition at line 2337 of file train_cmd.cpp.
References _settings_game, NPFTrainChooseTrack(), PathfinderSettings::pathfinder_for_trains, GameSettings::pf, VPF_NPF, VPF_YAPF, and YapfTrainChooseTrack().
| 
 | static | 
Extend a train path as far as possible.
Stops on encountering a safe tile, another reservation or a track choice.
Definition at line 2352 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 | 
Try to find a depot nearby.
| v | Train that wants a depot. | 
| max_distance | Maximal search distance. | 
Definition at line 2018 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().
Collision test function.
| v | Train vehicle to test collision with. | 
| data | Train being examined. | 
NULL (always continue search) Definition at line 3015 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, TRACK_BIT_DEPOT, TrainCrashed(), BaseVehicle::type, TrainCollideChecker::v, VEH_TRAIN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.
Referenced by CheckTrainCollision().
Free the reserved path in front of a vehicle.
| 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 2260 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.
| cargo | Cargo type to get multiplier for | 
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).
| engine | The engine to get the sprite from. | |
| [out] | width | The width of the sprite. | 
| [out] | height | The height of the sprite. | 
| [out] | xoffs | Number of pixels to shift the sprite to the right. | 
| [out] | yoffs | Number of pixels to shift the sprite downwards. | 
| image_type | Context the sprite is used in. | 
Definition at line 572 of file train_cmd.cpp.
References VehicleSpriteSeq::GetBounds(), min(), RAILVEH_MULTIHEAD, ScaleGUITrad(), and UnScaleGUI().
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.
| 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 | 
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 | 
Handle a crashed train.
| v | First train vehicle. | 
Definition at line 3551 of file train_cmd.cpp.
References Chance16R(), ChangeTrainDirRandomly(), Train::crash_anim_pos, CreateEffectVehicleRel(), DeleteLastWagon(), EV_EXPLOSION_LARGE, EV_EXPLOSION_SMALL, GB(), Vehicle::Next(), SpecializedVehicle< T, Type >::Next(), Vehicle::tick_counter, Vehicle::vehstatus, and VS_HIDDEN.
Inserts a chain into the train at dst.
| dst | the place where to append after. | 
| chain | the chain to actually add. | 
Definition at line 894 of file train_cmd.cpp.
References Vehicle::IsArticulatedPart(), SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), and Vehicle::SetNext().
Referenced by ArrangeTrains(), and NormaliseDualHeads().
Make a backup of a train into a train list.
| list | to make the backup in | 
| t | the train to make the backup of | 
Definition at line 844 of file train_cmd.cpp.
References SmallVector< T, S >::Append(), and SpecializedVehicle< T, Type >::Next().
Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().
| 
 | static | 
Mark a train as stuck and stop it if it isn't stopped right now.
| v | Train to mark as being stuck. | 
Definition at line 1513 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().
| 
 | inlinestatic | 
Bars crossing and plays ding-ding sound if not barred already.
| tile | tile with crossing | 
Definition at line 1721 of file train_cmd.cpp.
References _settings_client, SoundSettings::ambient, BarCrossing(), IsCrossingBarred(), MarkTileDirtyByTile(), and ClientSettings::sound.
Referenced by ReverseTrainDirection(), and TrainCheckIfLineEnds().
| 
 | static | 
Normalise the dual heads in the train, i.e.
if one is missing move that one to this train.
| t | the train to normalise. | 
Definition at line 908 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 | 
Normalise the sub types of the parts in this chain.
| chain | the chain to normalise. | 
Definition at line 930 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 | 
Normalise the head of the train again, i.e.
that is tell the world that we have changed and update all kinds of variables.
| head | the train to update. | 
Definition at line 1143 of file train_cmd.cpp.
References CCF_ARRANGE, 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, VIWD_CONSIST_CHANGED, WC_VEHICLE_REFIT, WC_VEHICLE_VIEW, and WID_VV_REFIT.
Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().
| 
 | static | 
Remove the given wagon from its consist.
| part | the part of the train to remove. | 
| chain | whether to remove the whole chain. | 
Definition at line 877 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 | 
Restore the train from the backup list.
| list | the train to restore. | 
Definition at line 853 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.
| v | Train to turn around. | 
Definition at line 1821 of file train_cmd.cpp.
References _settings_game, AdvanceWagonsAfterSwap(), AdvanceWagonsBeforeSwap(), CCF_TRACK, 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_DIAGDIR, 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.
| 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 1602 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 | 
Swap the two up/down flags in two ways:
| swap_flag1 | [inout] First train flag. | 
| swap_flag2 | [inout] Second train flag. | 
Definition at line 1537 of file train_cmd.cpp.
References ClrBit(), GVF_GOINGDOWN_BIT, GVF_GOINGUP_BIT, HasBit(), and SetBit().
Referenced by ReverseTrainSwapVeh().
| 
 | static | 
Finds a vehicle approaching rail-road crossing.
| tile | tile to test | 
Definition at line 1677 of file train_cmd.cpp.
References AxisToDiagDir(), GetCrossingRailAxis(), HasVehicleOnPos(), IsLevelCrossingTile(), ReverseDiagDir(), TileOffsByDiagDir(), and TrainApproachingCrossingEnum().
Referenced by UpdateLevelCrossing().
Checks if a train is approaching a rail-road crossing.
| v | vehicle on tile | 
| data | tile with crossing we are testing | 
Definition at line 1656 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().
Determines whether train is approaching a rail-road crossing (thus making it barred)
| v | front engine of train | 
Definition at line 3678 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 | 
Train is approaching line end, slow down and possibly reverse.
| 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. | 
Definition at line 3603 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 | 
Determines whether train would like to leave the tile.
| v | train to test | 
Definition at line 3648 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 | 
Checks for line end.
Also, bars crossing at next tile if needed
| v | vehicle we are checking | 
| reverse | Set to false to not execute the vehicle reversing. This does not change any other logic. | 
Definition at line 3705 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, Vehicle::vehstatus, and VS_TRAIN_SLOWING.
Referenced by TrainController().
Move a vehicle chain one movement stop forwards.
| 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. | 
Definition at line 3114 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 | 
Marks train as crashed and creates an AI event.
Doesn't do anything if the train is crashed already.
| v | first vehicle of chain | 
Definition at line 2985 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 | 
Trains enters a station, send out a news item if it is the first train, and start loading.
Definition at line 2839 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(), SRT_TRAIN_ARRIVES, TFP_NONE, Vehicle::tile, TriggerStationRandomisation(), and WC_VEHICLE_VIEW.
Referenced by TrainController().
| 
 | inlinestatic | 
Determine the side in which the train will leave the tile.
| direction | vehicle direction | 
| track | vehicle track bits | 
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().
Check if the vehicle is a train.
| v | vehicle on tile | 
Definition at line 1644 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.
| 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. | 
Definition at line 2697 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(), ReverseTrainDirection(), and TrainController().
| 
 | 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.
| 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. | 
Definition at line 2444 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.
| tile | tile to update | 
| sound | should we play sound? | 
Definition at line 1699 of file train_cmd.cpp.
References _settings_client, SoundSettings::ambient, HasCrossingReservation(), HasVehicleOnPos(), IsCrossingBarred(), IsLevelCrossingTile(), MarkTileDirtyByTile(), SetCrossingBarred(), ClientSettings::sound, TrainApproachingCrossing(), and TrainOnTileEnum().
Referenced by AfterLoadGame(), ChangeOwnershipOfCompanyItems(), CmdBuildRoad(), CmdBuildSingleRail(), Train::Crash(), DeleteLastWagon(), ReverseTrainDirection(), TrainController(), and UnreserveRailTrack().
| 
 | static | 
Updates some variables after swapping the vehicle.
| v | swapped vehicle | 
Definition at line 1565 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(), Vehicle::UpdatePosition(), SpecializedVehicle< T, Type >::UpdateViewport(), VehicleEnterTile(), Vehicle::x_pos, and Vehicle::y_pos.
Referenced by ReverseTrainSwapVeh().
| 
 | static | 
Validate whether we are going to create valid trains.
| 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. | 
Definition at line 1082 of file train_cmd.cpp.
References CheckNewTrain(), CheckTrainAttachment(), and CommandCost::Failed().
Referenced by CmdMoveRailVehicle(), and CmdSellRailWagon().
| 
 | static | 
Speed update fractions for each acceleration type.
Definition at line 2883 of file train_cmd.cpp.
| 
 | static | 
Maximum speeds for train that is broken down or approaching line end.
Definition at line 3590 of file train_cmd.cpp.
| 
 | static | 
Definition at line 2316 of file train_cmd.cpp.
 1.8.1.2
 1.8.1.2