NewGRF handling of engines. More...
#include "stdafx.h"
#include "debug.h"
#include "train.h"
#include "roadveh.h"
#include "company_func.h"
#include "newgrf_cargo.h"
#include "newgrf_spritegroup.h"
#include "date_func.h"
#include "vehicle_func.h"
#include "core/random_func.hpp"
#include "aircraft.h"
#include "station_base.h"
#include "company_base.h"
#include "newgrf_railtype.h"
#include "ship.h"
Go to the source code of this file.
Data Structures | |
struct | WagonOverride |
struct | ListOrderChange |
Enumerations | |
enum | TTDPAircraftMovementStates { AMS_TTDP_HANGAR, AMS_TTDP_TO_HANGAR, AMS_TTDP_TO_PAD1, AMS_TTDP_TO_PAD2, AMS_TTDP_TO_PAD3, AMS_TTDP_TO_ENTRY_2_AND_3, AMS_TTDP_TO_ENTRY_2_AND_3_AND_H, AMS_TTDP_TO_JUNCTION, AMS_TTDP_LEAVE_RUNWAY, AMS_TTDP_TO_INWAY, AMS_TTDP_TO_RUNWAY, AMS_TTDP_TO_OUTWAY, AMS_TTDP_WAITING, AMS_TTDP_TAKEOFF, AMS_TTDP_TO_TAKEOFF, AMS_TTDP_CLIMBING, AMS_TTDP_FLIGHT_APPROACH, AMS_TTDP_UNUSED_0x11, AMS_TTDP_FLIGHT_TO_TOWER, AMS_TTDP_UNUSED_0x13, AMS_TTDP_FLIGHT_FINAL, AMS_TTDP_FLIGHT_DESCENT, AMS_TTDP_BRAKING, AMS_TTDP_HELI_TAKEOFF_AIRPORT, AMS_TTDP_HELI_TO_TAKEOFF_AIRPORT, AMS_TTDP_HELI_LAND_AIRPORT, AMS_TTDP_HELI_TAKEOFF_HELIPORT, AMS_TTDP_HELI_TO_TAKEOFF_HELIPORT, AMS_TTDP_HELI_LAND_HELIPORT } |
enum | TTDPAircraftMovementActions { AMA_TTDP_IN_HANGAR, AMA_TTDP_ON_PAD1, AMA_TTDP_ON_PAD2, AMA_TTDP_ON_PAD3, AMA_TTDP_HANGAR_TO_PAD1, AMA_TTDP_HANGAR_TO_PAD2, AMA_TTDP_HANGAR_TO_PAD3, AMA_TTDP_LANDING_TO_PAD1, AMA_TTDP_LANDING_TO_PAD2, AMA_TTDP_LANDING_TO_PAD3, AMA_TTDP_PAD1_TO_HANGAR, AMA_TTDP_PAD2_TO_HANGAR, AMA_TTDP_PAD3_TO_HANGAR, AMA_TTDP_PAD1_TO_TAKEOFF, AMA_TTDP_PAD2_TO_TAKEOFF, AMA_TTDP_PAD3_TO_TAKEOFF, AMA_TTDP_HANGAR_TO_TAKOFF, AMA_TTDP_LANDING_TO_HANGAR, AMA_TTDP_IN_FLIGHT } |
Functions | |
void | SetWagonOverrideSprites (EngineID engine, CargoID cargo, const SpriteGroup *group, EngineID *train_id, uint trains) |
const SpriteGroup * | GetWagonOverrideSpriteSet (EngineID engine, CargoID cargo, EngineID overriding_engine) |
void | UnloadWagonOverrides (Engine *e) |
Unload all wagon override sprite groups. | |
void | SetCustomEngineSprites (EngineID engine, byte cargo, const SpriteGroup *group) |
void | SetEngineGRF (EngineID engine, const GRFFile *file) |
Tie a GRFFile entry to an engine, to allow us to retrieve GRF parameters etc during a game. | |
static int | MapOldSubType (const Vehicle *v) |
static byte | MapAircraftMovementState (const Aircraft *v) |
Map OTTD aircraft movement states to TTDPatch style movement states (VarAction 2 Variable 0xE2). | |
static byte | MapAircraftMovementAction (const Aircraft *v) |
Map OTTD aircraft movement states to TTDPatch style movement actions (VarAction 2 Variable 0xE6) This is not fully supported yet but it's enough for Planeset. | |
static const Vehicle * | GRV (const ResolverObject *object) |
static uint32 | VehicleGetRandomBits (const ResolverObject *object) |
static uint32 | VehicleGetTriggers (const ResolverObject *object) |
static void | VehicleSetTriggers (const ResolverObject *object, int triggers) |
static const Livery * | LiveryHelper (EngineID engine, const Vehicle *v) |
Determines the livery of an engine. | |
static uint32 | PositionHelper (const Vehicle *v, bool consecutive) |
Helper to get the position of a vehicle within a chain of vehicles. | |
static uint32 | VehicleGetVariable (Vehicle *v, const ResolverObject *object, byte variable, uint32 parameter, bool *available) |
static uint32 | VehicleGetVariable (const ResolverObject *object, byte variable, uint32 parameter, bool *available) |
static const SpriteGroup * | VehicleResolveReal (const ResolverObject *object, const RealSpriteGroup *group) |
static void | NewVehicleResolver (ResolverObject *res, EngineID engine_type, const Vehicle *v) |
static const SpriteGroup * | GetVehicleSpriteGroup (EngineID engine, const Vehicle *v, bool use_cache=true) |
Retrieve the SpriteGroup for the specified vehicle. | |
SpriteID | GetCustomEngineSprite (EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type) |
SpriteID | GetRotorOverrideSprite (EngineID engine, const Aircraft *v, bool info_view, EngineImageType image_type) |
bool | UsesWagonOverride (const Vehicle *v) |
Check if a wagon is currently using a wagon override. | |
uint16 | GetVehicleCallback (CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v) |
Evaluate a newgrf callback for vehicles. | |
uint16 | GetVehicleCallbackParent (CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v, const Vehicle *parent) |
Evaluate a newgrf callback for vehicles with a different vehicle for parent scope. | |
uint | GetVehicleProperty (const Vehicle *v, PropertyID property, uint orig_value) |
uint | GetEngineProperty (EngineID engine, PropertyID property, uint orig_value, const Vehicle *v) |
static void | DoTriggerVehicle (Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first) |
void | TriggerVehicle (Vehicle *v, VehicleTrigger trigger) |
void | AlterVehicleListOrder (EngineID engine, uint target) |
Record a vehicle ListOrderChange. | |
static int CDECL | EnginePreSort (const EngineID *a, const EngineID *b) |
Comparator function to sort engines via scope-GRFID and local ID. | |
void | CommitVehicleListOrderChanges () |
Deternine default engine sorting and execute recorded ListOrderChanges from AlterVehicleListOrder. | |
void | GetVehicleResolver (ResolverObject *ro, uint index) |
Resolve an engine's spec and such so we can get a variable. | |
void | FillNewGRFVehicleCache (const Vehicle *v) |
Fill the grf_cache of the given vehicle. | |
Variables | |
static SmallVector < ListOrderChange, 16 > | _list_order_changes |
NewGRF handling of engines.
Definition in file newgrf_engine.cpp.
void AlterVehicleListOrder | ( | EngineID | engine, | |
uint | target | |||
) |
Record a vehicle ListOrderChange.
engine | Engine to move | |
target | Local engine ID to move engine in front of |
Definition at line 1206 of file newgrf_engine.cpp.
References SmallVector< T, S >::Append(), and ListOrderChange::target.
Referenced by AircraftVehicleChangeInfo(), RailVehicleChangeInfo(), RoadVehicleChangeInfo(), and ShipVehicleChangeInfo().
Comparator function to sort engines via scope-GRFID and local ID.
a | left side | |
b | right side |
Definition at line 1220 of file newgrf_engine.cpp.
References SmallVector< T, S >::Get(), EngineIDMapping::grfid, EngineIDMapping::internal_id, and EngineIDMapping::type.
void FillNewGRFVehicleCache | ( | const Vehicle * | v | ) |
Fill the grf_cache of the given vehicle.
v | The vehicle to fill the cache for. |
Definition at line 1303 of file newgrf_engine.cpp.
References NewGRFCache::cache_valid, GetVehicleResolver(), Vehicle::grf_cache, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, lengthof, NCVV_COMPANY_INFORMATION, NCVV_CONSIST_CARGO_INFORMATION, NCVV_END, NCVV_POSITION_CONSIST_LENGTH, and NCVV_POSITION_SAME_ID_LENGTH.
Referenced by CheckCaches().
uint16 GetVehicleCallback | ( | CallbackID | callback, | |
uint32 | param1, | |||
uint32 | param2, | |||
EngineID | engine, | |||
const Vehicle * | v | |||
) |
Evaluate a newgrf callback for vehicles.
callback | The callback to evalute | |
param1 | First parameter of the callback | |
param2 | Second parameter of the callback | |
engine | Engine type of the vehicle to evaluate the callback for | |
v | The vehicle to evaluate the callback for, or NULL if it doesnt exist yet |
Definition at line 1054 of file newgrf_engine.cpp.
References CALLBACK_FAILED, GetVehicleSpriteGroup(), and SpriteGroup::Resolve().
Referenced by RefitWindow::BuildRefitList(), CmdStartStopVehicle(), Train::ConsistChanged(), Engine::DetermineCapacity(), GetBestFittingSubType(), GetCargoSubtypeText(), GetNextArticulatedPart(), GetRefitCostFactor(), GetRoadVehLength(), LoadUnloadVehicle(), PlayVehicleSound(), RunVehicleDayProc(), ShowAdditionalText(), and Vehicle::UpdateVisualEffect().
uint16 GetVehicleCallbackParent | ( | CallbackID | callback, | |
uint32 | param1, | |||
uint32 | param2, | |||
EngineID | engine, | |||
const Vehicle * | v, | |||
const Vehicle * | parent | |||
) |
Evaluate a newgrf callback for vehicles with a different vehicle for parent scope.
callback | The callback to evalute | |
param1 | First parameter of the callback | |
param2 | Second parameter of the callback | |
engine | Engine type of the vehicle to evaluate the callback for | |
v | The vehicle to evaluate the callback for, or NULL if it doesnt exist yet | |
parent | The vehicle to use for parent scope |
Definition at line 1081 of file newgrf_engine.cpp.
References CALLBACK_FAILED, GetVehicleSpriteGroup(), and SpriteGroup::Resolve().
Referenced by CheckTrainAttachment().
void GetVehicleResolver | ( | ResolverObject * | ro, | |
uint | index | |||
) |
Resolve an engine's spec and such so we can get a variable.
ro | The resolver object to fill. | |
index | The vehicle to get the data from. |
Definition at line 1293 of file newgrf_engine.cpp.
References Vehicle::engine_type, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Get().
Referenced by FillNewGRFVehicleCache().
static const SpriteGroup* GetVehicleSpriteGroup | ( | EngineID | engine, | |
const Vehicle * | v, | |||
bool | use_cache = true | |||
) | [static] |
Retrieve the SpriteGroup for the specified vehicle.
If the vehicle is not specified, the purchase list group for the engine is chosen. For trains, an additional engine override lookup is performed.
engine | Engine type of the vehicle. | |
v | The vehicle itself. | |
use_cache | Use cached override |
Definition at line 958 of file newgrf_engine.cpp.
References Vehicle::cargo_type, Vehicle::engine_type, GroundVehicleCache::first_engine, SpecializedVehicle< Train, Type >::From(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Vehicle::GetGroundVehicleCache(), Engine::grf_prop, Vehicle::IsGroundVehicle(), lengthof, GRFFilePropsBase< Tcnt >::spritegroup, BaseVehicle::type, and VEH_TRAIN.
Referenced by GetVehicleCallback(), and GetVehicleCallbackParent().
Determines the livery of an engine.
This always uses dual company colours independent of GUI settings. So it is desync-safe.
Definition at line 425 of file newgrf_engine.cpp.
References _current_company, Vehicle::engine_type, GroundVehicleCache::first_engine, GetEngineLivery(), Vehicle::GetGroundVehicleCache(), INVALID_ENGINE, Vehicle::IsGroundVehicle(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), LIT_ALL, and Vehicle::owner.
static uint32 PositionHelper | ( | const Vehicle * | v, | |
bool | consecutive | |||
) | [static] |
Helper to get the position of a vehicle within a chain of vehicles.
v | the vehicle to get the position of. | |
consecutive | whether to look at the whole chain or the vehicles with the same 'engine type'. |
Definition at line 448 of file newgrf_engine.cpp.
References Vehicle::engine_type, Vehicle::First(), and Vehicle::Next().
Tie a GRFFile entry to an engine, to allow us to retrieve GRF parameters etc during a game.
Definition at line 107 of file newgrf_engine.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::grf_prop, and GRFFilePropsBase< Tcnt >::grffile.
bool UsesWagonOverride | ( | const Vehicle * | v | ) |
Check if a wagon is currently using a wagon override.
v | The wagon to check |
Definition at line 1039 of file newgrf_engine.cpp.
References SpecializedVehicle< Train, Type >::From(), BaseVehicle::type, and VEH_TRAIN.
Referenced by Train::ConsistChanged(), and GetEngineLiveryScheme().