Data Structures | Macros | Functions | Variables
roadveh_cmd.cpp File Reference

Handling of road vehicles. More...

#include "stdafx.h"
#include "roadveh.h"
#include "command_func.h"
#include "news_func.h"
#include "pathfinder/npf/npf_func.h"
#include "station_base.h"
#include "company_func.h"
#include "articulated_vehicles.h"
#include "newgrf_sound.h"
#include "pathfinder/yapf/yapf.h"
#include "strings_func.h"
#include "tunnelbridge_map.h"
#include "date_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
#include "depot_map.h"
#include "effectvehicle_func.h"
#include "roadstop_base.h"
#include "spritecache.h"
#include "core/random_func.hpp"
#include "company_base.h"
#include "core/backup_type.hpp"
#include "newgrf.h"
#include "zoom_func.h"
#include "table/strings.h"
#include "safeguards.h"
#include "table/roadveh_movement.h"

Go to the source code of this file.

Data Structures

struct  RoadVehFindData
struct  OvertakeData
struct  RoadDriveEntry


#define return_track(x)   { best_track = (Trackdir)x; goto found_best_track; }


 assert_compile (lengthof(_roadveh_images)==lengthof(_roadveh_full_adder))
bool IsValidImageIndex< VEH_ROAD > (uint8 image_index)
static void GetRoadVehIcon (EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result)
void DrawRoadVehEngine (int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
 Draw a road vehicle engine. More...
void GetRoadVehSpriteSize (EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
 Get the size of the sprite of a road vehicle sprite heading west (used for lists). More...
static uint GetRoadVehLength (const RoadVehicle *v)
 Get length of a road vehicle. More...
void RoadVehUpdateCache (RoadVehicle *v, bool same_length)
 Update the cache of a road vehicle. More...
CommandCost CmdBuildRoadVehicle (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret)
 Build a road vehicle. More...
static FindDepotData FindClosestRoadDepot (const RoadVehicle *v, int max_distance)
CommandCost CmdTurnRoadVeh (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Turn a roadvehicle around. More...
static void DeleteLastRoadVeh (RoadVehicle *v)
 Delete last vehicle of a chain road vehicles. More...
static void RoadVehSetRandomDirection (RoadVehicle *v)
static bool RoadVehIsCrashed (RoadVehicle *v)
 Road vehicle chain has crashed. More...
static VehicleEnumCheckRoadVehCrashTrain (Vehicle *v, void *data)
 Check routine whether a road and a train vehicle have collided. More...
static void RoadVehCrash (RoadVehicle *v)
static bool RoadVehCheckTrainCrash (RoadVehicle *v)
static void StartRoadVehSound (const RoadVehicle *v)
static VehicleEnumCheckRoadVehClose (Vehicle *v, void *data)
static RoadVehicleRoadVehFindCloseTo (RoadVehicle *v, int x, int y, Direction dir, bool update_blocked_ctr=true)
static void RoadVehArrivesAt (const RoadVehicle *v, Station *st)
 A road vehicle arrives at a station. More...
static Direction RoadVehGetNewDirection (const RoadVehicle *v, int x, int y)
static Direction RoadVehGetSlidingDirection (const RoadVehicle *v, int x, int y)
static VehicleEnumFindVehBlockingOvertake (Vehicle *v, void *data)
static bool CheckRoadBlockedForOvertaking (OvertakeData *od)
 Check if overtaking is possible on a piece of track. More...
static void RoadVehCheckOvertake (RoadVehicle *v, RoadVehicle *u)
static void RoadZPosAffectSpeed (RoadVehicle *v, int old_z)
static int PickRandomBit (uint bits)
static Trackdir RoadFindPathToDest (RoadVehicle *v, TileIndex tile, DiagDirection enterdir)
 Returns direction to for a road vehicle to take or INVALID_TRACKDIR if the direction is currently blocked. More...
static bool RoadVehLeaveDepot (RoadVehicle *v, bool first)
static Trackdir FollowPreviousRoadVehicle (const RoadVehicle *v, const RoadVehicle *prev, TileIndex tile, DiagDirection entry_dir, bool already_reversed)
static bool CanBuildTramTrackOnTile (CompanyID c, TileIndex t, RoadBits r)
 Can a tram track build without destruction on the given tile? More...
bool IndividualRoadVehicleController (RoadVehicle *v, const RoadVehicle *prev)
static bool RoadVehController (RoadVehicle *v)
static void CheckIfRoadVehNeedsService (RoadVehicle *v)


static const uint16 _roadveh_images []
static const uint16 _roadveh_full_adder []
static const Trackdir _road_reverse_table [DIAGDIR_END]

Detailed Description

Handling of road vehicles.

Definition in file roadveh_cmd.cpp.

Function Documentation

◆ CanBuildTramTrackOnTile()

static bool CanBuildTramTrackOnTile ( CompanyID  c,
TileIndex  t,
RoadBits  r 

Can a tram track build without destruction on the given tile?

cthe company that would be building the tram tracks
tthe tile to build on.
rthe road bits needed.
true when a track track can be build on 't'

Definition at line 1100 of file roadveh_cmd.cpp.

References _current_company.

◆ CheckRoadBlockedForOvertaking()

static bool CheckRoadBlockedForOvertaking ( OvertakeData od)

Check if overtaking is possible on a piece of track.

odInformation about the tile and the involved vehicles
true if we have to abort overtaking

Definition at line 783 of file roadveh_cmd.cpp.

References GetTileTrackStatus(), HasBit(), HasVehicleOnPos(), TRACK_BIT_CROSS, TRACKDIR_BIT_NONE, TrackdirBitsToTrackBits(), TrackStatusToRedSignals(), TrackStatusToTrackdirBits(), and TRANSPORT_ROAD.

◆ CmdBuildRoadVehicle()

CommandCost CmdBuildRoadVehicle ( TileIndex  tile,
DoCommandFlag  flags,
const Engine e,
uint16  data,
Vehicle **  ret 

Build a road vehicle.

tiletile of the depot where road vehicle is built.
flagstype of operation.
ethe engine to build.
ret[out]the vehicle that has been built.
the cost of this operation or an error.

Definition at line 260 of file roadveh_cmd.cpp.

References _current_company, DC_EXEC, DiagDirToDir(), Vehicle::direction, EF_ROAD_TRAM, GetRoadDepotDirection(), HasBit(), HasTileRoadType(), EngineInfo::misc_flags, Vehicle::owner, return_cmd_error, ROADTYPE_TRAM, RoadVehicle::RoadVehicle(), and Vehicle::tile.

◆ CmdTurnRoadVeh()

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

Turn a roadvehicle around.

flagsoperation to perform
p1vehicle ID to turn
the cost of this operation or an error

Definition at line 367 of file roadveh_cmd.cpp.

References Vehicle::breakdown_ctr, CheckOwnership(), CMD_ERROR, Vehicle::current_order, CommandCost::Failed(), SpecializedVehicle< RoadVehicle, Type >::GetIfValid(), RoadVehicle::IsInDepot(), RoadVehicle::IsPrimaryVehicle(), Order::IsType(), RoadVehicle::overtaking, Vehicle::owner, RVSB_WORMHOLE, RoadVehicle::state, Vehicle::vehstatus, VS_CRASHED, and VS_STOPPED.

◆ DeleteLastRoadVeh()

static void DeleteLastRoadVeh ( RoadVehicle v)

Delete last vehicle of a chain road vehicles.

vFirst roadvehicle.

Definition at line 465 of file roadveh_cmd.cpp.

References Vehicle::first, SpecializedVehicle< T, Type >::First(), IsInsideMM(), Vehicle::last_station_visited, SpecializedVehicle< T, Type >::Next(), RVSB_IN_ROAD_STOP, Vehicle::SetNext(), and RoadVehicle::state.

◆ DrawRoadVehEngine()

void DrawRoadVehEngine ( int  left,
int  right,
int  preferred_x,
int  y,
EngineID  engine,
PaletteID  pal,
EngineImageType  image_type 

Draw a road vehicle engine.

leftLeft edge to draw within.
rightRight edge to draw within.
preferred_xPreferred position of the engine.
yVertical position of the engine.
engineEngine to draw
palPalette to use.

Definition at line 146 of file roadveh_cmd.cpp.

◆ EnumCheckRoadVehCrashTrain()

static Vehicle* EnumCheckRoadVehCrashTrain ( Vehicle v,
void *  data 

Check routine whether a road and a train vehicle have collided.

vTrain vehicle to test.
dataRoad vehicle to test.
Train vehicle if the vehicles collided, else NULL.

Definition at line 520 of file roadveh_cmd.cpp.

References abs(), BaseVehicle::type, VEH_TRAIN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

◆ GetRoadVehLength()

static uint GetRoadVehLength ( const RoadVehicle v)

Get length of a road vehicle.

vRoad vehicle to query length.
Length of the given road vehicle.

Definition at line 188 of file roadveh_cmd.cpp.

References CALLBACK_FAILED, Vehicle::GetEngine(), Engine::GetGRF(), and VEHICLE_LENGTH.

◆ GetRoadVehSpriteSize()

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

Get the size of the sprite of a road vehicle sprite heading west (used for lists).

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 169 of file roadveh_cmd.cpp.

◆ RoadFindPathToDest()

static Trackdir RoadFindPathToDest ( RoadVehicle v,
TileIndex  tile,
DiagDirection  enterdir 

Returns direction to for a road vehicle to take or INVALID_TRACKDIR if the direction is currently blocked.

vthe Vehicle to do the pathfinding for
tilethe where to start the pathfinding
enterdirthe direction the vehicle enters the tile from
the Trackdir to take

Definition at line 878 of file roadveh_cmd.cpp.

References _settings_game, DiagdirReachesTrackdirs(), RoadStop::GetByTile(), GetRoadDepotDirection(), GetRoadStopDir(), GetRoadStopType(), GetRoadTypes(), GetTileTrackStatus(), Vehicle::HasArticulatedPart(), RoadVehicle::IsBus(), IsRoadDepot(), IsStandardRoadStopTile(), IsTileOwner(), IsTileType(), MP_ROAD, MP_STATION, Vehicle::owner, GameSettings::pf, ROADSTOP_BUS, ROADSTOP_TRUCK, PathfinderSettings::roadveh_queue, TRACKDIR_BIT_NONE, TrackStatusToRedSignals(), TrackStatusToTrackdirBits(), and TRANSPORT_ROAD.

◆ RoadVehArrivesAt()

static void RoadVehArrivesAt ( const RoadVehicle v,
Station st 

A road vehicle arrives at a station.

If it is the first time, create a news item.

vRoad vehicle that arrived.
stStation where the road vehicle arrived.

Definition at line 685 of file roadveh_cmd.cpp.

References _local_company, AddVehicleNewsItem(), HVOT_BUS, HVOT_TRUCK, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, RoadVehicle::IsBus(), Game::NewEvent(), AI::NewEvent(), NT_ARRIVAL_COMPANY, NT_ARRIVAL_OTHER, Vehicle::owner, ROADTYPE_ROAD, and SetDParam().

◆ RoadVehIsCrashed()

static bool RoadVehIsCrashed ( RoadVehicle v)

Road vehicle chain has crashed.

vFirst roadvehicle.
whether the chain still exists.

Definition at line 498 of file roadveh_cmd.cpp.

References RoadVehicle::crashed_ctr, CreateEffectVehicleRel(), EV_EXPLOSION_LARGE, and Vehicle::tick_counter.

◆ RoadVehUpdateCache()

void RoadVehUpdateCache ( RoadVehicle v,
bool  same_length 

Update the cache of a road vehicle.

vRoad vehicle needing an update of its cache.
same_lengthshould length of vehicles stay the same?
v must be first road vehicle.

Definition at line 216 of file roadveh_cmd.cpp.

Variable Documentation

◆ _road_reverse_table

const Trackdir _road_reverse_table[DIAGDIR_END]
Initial value:
= {
(Road vehicle) reverse direction north-east
Definition: track_type.h:82
(Road vehicle) reverse direction south-west
Definition: track_type.h:90
(Road vehicle) reverse direction south-east
Definition: track_type.h:83
(Road vehicle) reverse direction north-west
Definition: track_type.h:91

Definition at line 72 of file roadveh_cmd.cpp.

◆ _roadveh_full_adder

const uint16 _roadveh_full_adder[]
Initial value:
= {
0, 88, 0, 0, 0, 0, 48, 48,
48, 48, 0, 0, 64, 64, 0, 16,
16, 0, 88, 0, 0, 0, 0, 48,
48, 48, 48, 0, 0, 64, 64, 0,
16, 16, 0, 88, 0, 0, 0, 0,
48, 48, 48, 48, 0, 0, 64, 64,
0, 16, 16, 0, 8, 8, 8, 8,
0, 0, 0, 8, 8, 8, 8

Definition at line 54 of file roadveh_cmd.cpp.

◆ _roadveh_images

const uint16 _roadveh_images[]
Initial value:
= {
0xCD4, 0xCDC, 0xCE4, 0xCEC, 0xCF4, 0xCFC, 0xD0C, 0xD14,
0xD24, 0xD1C, 0xD2C, 0xD04, 0xD1C, 0xD24, 0xD6C, 0xD74,
0xD7C, 0xC14, 0xC1C, 0xC24, 0xC2C, 0xC34, 0xC3C, 0xC4C,
0xC54, 0xC64, 0xC5C, 0xC6C, 0xC44, 0xC5C, 0xC64, 0xCAC,
0xCB4, 0xCBC, 0xD94, 0xD9C, 0xDA4, 0xDAC, 0xDB4, 0xDBC,
0xDCC, 0xDD4, 0xDE4, 0xDDC, 0xDEC, 0xDC4, 0xDDC, 0xDE4,
0xE2C, 0xE34, 0xE3C, 0xC14, 0xC1C, 0xC2C, 0xC3C, 0xC4C,
0xC5C, 0xC64, 0xC6C, 0xC74, 0xC84, 0xC94, 0xCA4

Definition at line 43 of file roadveh_cmd.cpp.