OpenTTD Source  20241121-master-g67a0fccfad
newgrf_station.h File Reference

Header file for NewGRF stations. More...

#include "core/enum_type.hpp"
#include "newgrf_animation_type.h"
#include "newgrf_callbacks.h"
#include "newgrf_class.h"
#include "newgrf_commons.h"
#include "cargo_type.h"
#include "station_type.h"
#include "rail_type.h"
#include "newgrf_spritegroup.h"
#include "newgrf_town.h"

Go to the source code of this file.

Data Structures

struct  StationScopeResolver
 Scope resolver for stations. More...
 
struct  StationResolverObject
 Station resolver. More...
 
struct  StationSpec
 Station specification. More...
 

Typedefs

using StationClass = NewGRFClass< StationSpec, StationClassID, STAT_CLASS_MAX >
 Class containing information relating to station classes.
 

Enumerations

enum  StationClassID : uint16_t { STAT_CLASS_BEGIN = 0 , STAT_CLASS_DFLT = 0 , STAT_CLASS_WAYP , STAT_CLASS_MAX = UINT16_MAX }
 
enum  StationSpecFlags {
  SSF_SEPARATE_GROUND , SSF_DIV_BY_STATION_SIZE , SSF_CB141_RANDOM_BITS , SSF_CUSTOM_FOUNDATIONS ,
  SSF_EXTENDED_FOUNDATIONS
}
 Allow incrementing of StationClassID variables. More...
 
enum  StationRandomTrigger {
  SRT_NEW_CARGO , SRT_CARGO_TAKEN , SRT_TRAIN_ARRIVES , SRT_TRAIN_DEPARTS ,
  SRT_TRAIN_LOADS , SRT_PATH_RESERVATION
}
 Randomisation triggers for stations. More...
 

Functions

 DECLARE_ENUM_AS_BIT_SET (StationSpec::TileFlags)
 
const StationSpecGetStationSpec (TileIndex t)
 
uint16_t GetStationLayoutKey (uint8_t platforms, uint8_t length)
 Get the station layout key for a given station layout size. More...
 
bool IsWaypointClass (const StationClass &cls)
 Test if a StationClass is the waypoint class. More...
 
uint32_t GetPlatformInfo (Axis axis, uint8_t tile, int platforms, int length, int x, int y, bool centred)
 Evaluate a tile's position within a station, and return the result in a bit-stuffed format. More...
 
SpriteID GetCustomStationRelocation (const StationSpec *statspec, BaseStation *st, TileIndex tile, uint32_t var10=0)
 Resolve sprites for drawing a station tile. More...
 
SpriteID GetCustomStationFoundationRelocation (const StationSpec *statspec, BaseStation *st, TileIndex tile, uint layout, uint edge_info)
 Resolve the sprites for custom station foundations. More...
 
uint16_t GetStationCallback (CallbackID callback, uint32_t param1, uint32_t param2, const StationSpec *statspec, BaseStation *st, TileIndex tile)
 
CommandCost PerformStationTileSlopeCheck (TileIndex north_tile, TileIndex cur_tile, const StationSpec *statspec, Axis axis, uint8_t plat_len, uint8_t numtracks)
 Check the slope of a tile of a new station. More...
 
int AllocateSpecToStation (const StationSpec *statspec, BaseStation *st, bool exec)
 Allocate a StationSpec to a Station. More...
 
void DeallocateSpecFromStation (BaseStation *st, uint8_t specindex)
 Deallocate a StationSpec from a Station. More...
 
bool DrawStationTile (int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station)
 Draw representation of a station tile for GUI purposes. More...
 
void AnimateStationTile (TileIndex tile)
 
void TriggerStationAnimation (BaseStation *st, TileIndex tile, StationAnimationTrigger trigger, CargoID cargo_type=INVALID_CARGO)
 
void TriggerStationRandomisation (Station *st, TileIndex tile, StationRandomTrigger trigger, CargoID cargo_type=INVALID_CARGO)
 Trigger station randomisation. More...
 
void StationUpdateCachedTriggers (BaseStation *st)
 Update the cached animation trigger bitmask for a station. More...
 

Variables

static const uint32_t STATION_CLASS_LABEL_DEFAULT = 'DFLT'
 
static const uint32_t STATION_CLASS_LABEL_WAYPOINT = 'WAYP'
 

Detailed Description

Header file for NewGRF stations.

Definition in file newgrf_station.h.

Enumeration Type Documentation

◆ StationClassID

enum StationClassID : uint16_t
Enumerator
STAT_CLASS_BEGIN 

the lowest valid value

STAT_CLASS_DFLT 

Default station class.

STAT_CLASS_WAYP 

Waypoint class.

STAT_CLASS_MAX 

Maximum number of classes.

Definition at line 86 of file newgrf_station.h.

◆ StationRandomTrigger

Randomisation triggers for stations.

Enumerator
SRT_NEW_CARGO 

Trigger station on new cargo arrival.

SRT_CARGO_TAKEN 

Trigger station when cargo is completely taken.

SRT_TRAIN_ARRIVES 

Trigger platform when train arrives.

SRT_TRAIN_DEPARTS 

Trigger platform when train leaves.

SRT_TRAIN_LOADS 

Trigger platform when train loads/unloads.

SRT_PATH_RESERVATION 

Trigger platform when train reserves path.

Definition at line 105 of file newgrf_station.h.

◆ StationSpecFlags

Allow incrementing of StationClassID variables.

Enumerator
SSF_SEPARATE_GROUND 

Use different sprite set for ground sprites.

SSF_DIV_BY_STATION_SIZE 

Divide cargo amount by station size.

SSF_CB141_RANDOM_BITS 

Callback 141 needs random bits.

SSF_CUSTOM_FOUNDATIONS 

Draw custom foundations.

SSF_EXTENDED_FOUNDATIONS 

Extended foundation block instead of simple.

Definition at line 96 of file newgrf_station.h.

Function Documentation

◆ AllocateSpecToStation()

int AllocateSpecToStation ( const StationSpec statspec,
BaseStation st,
bool  exec 
)

Allocate a StationSpec to a Station.

This is called once per build operation.

Parameters
statspecStationSpec to allocate.
stStation to allocate it to.
execWhether to actually allocate the spec.
Returns
Index within the Station's spec list, or -1 if the allocation failed.

Definition at line 685 of file newgrf_station.cpp.

References StationSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, GRFFilePropsBase< Tcnt >::local_id, NUM_STATIONSSPECS_PER_STATION, BaseStation::speclist, and StationUpdateCachedTriggers().

Referenced by MoveWaypointsToBaseStations().

◆ DeallocateSpecFromStation()

void DeallocateSpecFromStation ( BaseStation st,
uint8_t  specindex 
)

Deallocate a StationSpec from a Station.

Called when removing a single station tile.

Parameters
stStation to work with.
specindexIndex of the custom station within the Station's spec list.
Returns
Indicates whether the StationSpec was deallocated.

Definition at line 727 of file newgrf_station.cpp.

References INVALID_TILE.

◆ DrawStationTile()

bool DrawStationTile ( int  x,
int  y,
RailType  railtype,
Axis  axis,
StationClassID  sclass,
uint  station 
)

Draw representation of a station tile for GUI purposes.

Parameters
xPosition x of image.
yPosition y of image.
axisAxis.
railtypeRail type.
sclass,stationType of station.
stationstation ID
Returns
True if the tile was drawn (allows for fallback to default graphic)

Definition at line 775 of file newgrf_station.cpp.

◆ GetCustomStationFoundationRelocation()

SpriteID GetCustomStationFoundationRelocation ( const StationSpec statspec,
BaseStation st,
TileIndex  tile,
uint  layout,
uint  edge_info 
)

Resolve the sprites for custom station foundations.

Parameters
statspecStation spec
stStation
tileStation tile being drawn
layoutSpritelayout as returned by previous callback
edge_infoInformation about northern tile edges; whether they need foundations or merge into adjacent tile's foundations.
Returns
First sprite of a set of foundation sprites for various slopes, or 0 if default foundations shall be drawn.

Definition at line 628 of file newgrf_station.cpp.

References CBID_NO_CALLBACK, and SpriteGroup::Resolve().

◆ GetCustomStationRelocation()

SpriteID GetCustomStationRelocation ( const StationSpec statspec,
BaseStation st,
TileIndex  tile,
uint32_t  var10 
)

Resolve sprites for drawing a station tile.

Parameters
statspecStation spec
stStation (nullptr in GUI)
tileStation tile being drawn (INVALID_TILE in GUI)
var10Value to put in variable 10; normally 0; 1 when resolving the groundsprite and SSF_SEPARATE_GROUND is set.
Returns
First sprite of the Action 1 spriteset to use, minus an offset of 0x42D to accommodate for weird NewGRF specs.

Definition at line 611 of file newgrf_station.cpp.

References CBID_NO_CALLBACK, and SpriteGroup::Resolve().

◆ GetPlatformInfo()

uint32_t GetPlatformInfo ( Axis  axis,
uint8_t  tile,
int  platforms,
int  length,
int  x,
int  y,
bool  centred 
)

Evaluate a tile's position within a station, and return the result in a bit-stuffed format.

if not centered: .TNLcCpP, if centered: .TNL..CP

  • T = Tile layout number (GetStationGfx)
  • N = Number of platforms
  • L = Length of platforms
  • C = Current platform number from start, c = from end
  • P = Position along platform from start, p = from end

if centered, C/P start from the centre and c/p are not available.

Returns
Platform information in bit-stuffed format.

Definition at line 104 of file newgrf_station.cpp.

◆ GetStationLayoutKey()

uint16_t GetStationLayoutKey ( uint8_t  platforms,
uint8_t  length 
)
inline

Get the station layout key for a given station layout size.

Parameters
platformsNumber of platforms.
lengthLength of platforms.
Returns
Key of station layout.

Definition at line 189 of file newgrf_station.h.

Referenced by GetStationLayout().

◆ IsWaypointClass()

bool IsWaypointClass ( const StationClass cls)
inline

Test if a StationClass is the waypoint class.

Parameters
clsStationClass to test.
Returns
true if the class is the waypoint class.

Definition at line 199 of file newgrf_station.h.

References NewGRFClass< Tspec, Tindex, Tmax >::global_id.

◆ PerformStationTileSlopeCheck()

CommandCost PerformStationTileSlopeCheck ( TileIndex  north_tile,
TileIndex  cur_tile,
const StationSpec statspec,
Axis  axis,
uint8_t  plat_len,
uint8_t  numtracks 
)

Check the slope of a tile of a new station.

Parameters
north_tileNorther tile of the station rect.
cur_tileTile to check.
statspecStation spec.
axisAxis of the new station.
plat_lenPlatform length.
numtracksNumber of platforms.
Returns
Succeeded or failed command.

Definition at line 657 of file newgrf_station.cpp.

References AXIS_Y, CBID_STATION_LAND_SLOPE_CHECK, GetTileSlope(), and HasBit().

◆ StationUpdateCachedTriggers()

void StationUpdateCachedTriggers ( BaseStation st)

Update the cached animation trigger bitmask for a station.

Parameters
stStation to update.

Definition at line 994 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, and BaseStation::cached_cargo_triggers.

Referenced by AllocateSpecToStation().

◆ TriggerStationRandomisation()

void TriggerStationRandomisation ( Station st,
TileIndex  trigger_tile,
StationRandomTrigger  trigger,
CargoID  cargo_type 
)

Trigger station randomisation.

Parameters
ststation being triggered
trigger_tilespecific tile of platform to trigger
triggertrigger type
cargo_typecargo type causing trigger

Definition at line 919 of file newgrf_station.cpp.

Referenced by CYapfReserveTrack< Types >::ReserveRailStationPlatform(), TrainEnterStation(), and TryReserveRailTrack().