OpenTTD Source 20260311-master-g511d3794ce
newgrf_station.cpp File Reference

Functions for dealing with station classes and custom stations. More...

#include "stdafx.h"
#include "debug.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "roadstop_base.h"
#include "newgrf_badge.h"
#include "newgrf_cargo.h"
#include "newgrf_station.h"
#include "newgrf_spritegroup.h"
#include "newgrf_sound.h"
#include "newgrf_railtype.h"
#include "town.h"
#include "newgrf_town.h"
#include "company_func.h"
#include "tunnelbridge_map.h"
#include "newgrf_animation_base.h"
#include "timer/timer_game_calendar.h"
#include "table/strings.h"
#include "newgrf_class_func.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  StationAnimationBase
 Helper class for animation control. More...

Enumerations

enum  TriggerArea : uint8_t { TA_TILE , TA_PLATFORM , TA_WHOLE }

Functions

TileArea GetRailTileArea (const BaseStation *st, TileIndex tile, TriggerArea ta)
 Get the tile area of a rail station with trigger area type.
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.
static TileIndex FindRailStationEnd (TileIndex tile, TileIndexDiff delta, bool check_type, bool check_axis)
 Find the end of a railway station, from the tile, in the direction of delta.
static uint32_t GetPlatformInfoHelper (TileIndex tile, bool check_type, bool check_axis, bool centred)
static uint32_t GetRailContinuationInfo (TileIndex tile)
SpriteID GetCustomStationRelocation (const StationSpec *statspec, BaseStation *st, TileIndex tile, uint32_t var10)
 Resolve sprites for drawing a station tile.
void GetCustomStationRelocation (SpriteLayoutProcessor &processor, const StationSpec *statspec, BaseStation *st, TileIndex tile)
SpriteID GetCustomStationFoundationRelocation (const StationSpec *statspec, BaseStation *st, TileIndex tile, uint layout, uint edge_info)
 Resolve the sprites for custom station foundations.
uint16_t GetStationCallback (CallbackID callback, uint32_t param1, uint32_t param2, const StationSpec *statspec, BaseStation *st, TileIndex tile, std::span< int32_t > regs100)
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.
std::optional< uint8_t > AllocateSpecToStation (const StationSpec *spec, BaseStation *st)
 Allocate a StationSpec to a Station.
void AssignSpecToStation (const StationSpec *spec, BaseStation *st, uint8_t specindex)
 Assign a previously allocated StationSpec specindex to a Station.
void DeallocateSpecFromStation (BaseStation *st, uint8_t specindex)
 Deallocate a StationSpec from a Station.
bool DrawStationTile (int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station)
 Draw representation of a station tile for GUI purposes.
const StationSpecGetStationSpec (TileIndex t)
uint16_t GetAnimStationCallback (CallbackID callback, uint32_t param1, uint32_t param2, const StationSpec *statspec, BaseStation *st, TileIndex tile, int)
 Perform the station callback in the context of the AnimationBase callback.
void AnimateStationTile (TileIndex tile)
void TriggerStationAnimation (BaseStation *st, TileIndex trigger_tile, StationAnimationTrigger trigger, CargoType cargo_type)
void TriggerStationRandomisation (BaseStation *st, TileIndex trigger_tile, StationRandomTrigger trigger, CargoType cargo_type)
 Trigger station randomisation.
void StationUpdateCachedTriggers (BaseStation *st)
 Update the cached animation trigger bitmask for a station.

Variables

static const uint NUM_STATIONSSPECS_PER_STATION = 255
 Maximum number of parts per station.

Detailed Description

Functions for dealing with station classes and custom stations.

Definition in file newgrf_station.cpp.

Enumeration Type Documentation

◆ TriggerArea

enum TriggerArea : uint8_t

Definition at line 70 of file newgrf_station.cpp.

Function Documentation

◆ AllocateSpecToStation()

std::optional< uint8_t > AllocateSpecToStation ( const StationSpec * spec,
BaseStation * st )

Allocate a StationSpec to a Station.

This is called once per build operation.

Parameters
specStationSpec to allocate.
stStation to allocate it to.
Returns
Index within the Station's station spec list, or std::nullopt if the allocation failed.

Definition at line 718 of file newgrf_station.cpp.

References NUM_STATIONSSPECS_PER_STATION, and BaseStation::speclist.

Referenced by CmdBuildRailStation(), CmdBuildRailWaypoint(), and MoveWaypointsToBaseStations().

◆ AnimateStationTile()

void AnimateStationTile ( TileIndex tile)

Definition at line 918 of file newgrf_station.cpp.

◆ AssignSpecToStation()

void AssignSpecToStation ( const StationSpec * spec,
BaseStation * st,
uint8_t specindex )

Assign a previously allocated StationSpec specindex to a Station.

Parameters
specStationSpec to assign..
stStation to allocate it to.
specindexSpec index of allocation.

Definition at line 753 of file newgrf_station.cpp.

References StationSpec::grf_prop, GRFFilePropsBase::grfid, GRFFilePropsBase::local_id, BaseStation::speclist, and StationUpdateCachedTriggers().

Referenced by CmdBuildRailStation(), CmdBuildRailWaypoint(), and 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 station spec list.

Definition at line 770 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, BaseStation::cached_cargo_triggers, GetCustomStationSpecIndex(), GetRailTileArea(), INVALID_TILE, BaseStation::speclist, StationUpdateCachedTriggers(), and BaseStation::TileBelongsToRailStation().

Referenced by CmdBuildRailStation(), CmdBuildRailWaypoint(), and RemoveFromRailBaseStation().

◆ DrawStationTile()

◆ FindRailStationEnd()

TileIndex FindRailStationEnd ( TileIndex tile,
TileIndexDiff delta,
bool check_type,
bool check_axis )
static

Find the end of a railway station, from the tile, in the direction of delta.

Parameters
tileStart tile.
deltaMovement direction.
check_typeStop when the custom station type changes.
check_axisStop when the station direction changes.
Returns
Found end of the railway station.

Definition at line 165 of file newgrf_station.cpp.

References AXIS_X, GetCustomStationSpecIndex(), GetRailStationAxis(), GetStationIndex(), HasStationRail(), IsTileType(), Station, and TileAdd().

◆ GetAnimStationCallback()

uint16_t GetAnimStationCallback ( CallbackID callback,
uint32_t param1,
uint32_t param2,
const StationSpec * statspec,
BaseStation * st,
TileIndex tile,
int  )

Perform the station callback in the context of the AnimationBase callback.

Parameters
callbackThe identifier of the callback.
param1The first parameter of the NewGRF callback.
param2The second parameter of the NewGRF callback.
statspecThe specification to run the callback on.
stThe station for the calback.
tileThe tile the station is at.
Returns
The NewGRF result of the callback.

Definition at line 904 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 660 of file newgrf_station.cpp.

References CBID_NO_CALLBACK.

Referenced by DrawCustomStationFoundations().

◆ GetCustomStationRelocation() [1/2]

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 StationSpecFlag::SeparateGround is set.
Returns
First sprite of the Action 1 spriteset to use, minus an offset of SPR_RAIL_PLATFORM_Y_FRONT (0x42D) to accommodate for weird NewGRF specs.

Definition at line 626 of file newgrf_station.cpp.

References CBID_NO_CALLBACK.

Referenced by DrawStationTile(), and DrawTile_Station().

◆ GetCustomStationRelocation() [2/2]

void GetCustomStationRelocation ( SpriteLayoutProcessor & processor,
const StationSpec * statspec,
BaseStation * st,
TileIndex tile )

Definition at line 636 of file newgrf_station.cpp.

◆ 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.

Parameters
axisThe axis of the platform.
tileThe tile layout number.
platformsNumber of platforms.
lengthLength of platforms.
xThe platform number.
yPosition along the platform.
centredWhether to 'center' the platform location, or use the absolute location.
Returns
Platform information in bit-stuffed format.

Definition at line 127 of file newgrf_station.cpp.

References AXIS_X, Clamp(), and SB().

Referenced by CmdBuildRailStation().

◆ GetPlatformInfoHelper()

uint32_t GetPlatformInfoHelper ( TileIndex tile,
bool check_type,
bool check_axis,
bool centred )
static

Definition at line 188 of file newgrf_station.cpp.

◆ GetRailContinuationInfo()

uint32_t GetRailContinuationInfo ( TileIndex tile)
static

Definition at line 204 of file newgrf_station.cpp.

◆ GetRailTileArea()

TileArea GetRailTileArea ( const BaseStation * st,
TileIndex tile,
TriggerArea ta )

Get the tile area of a rail station with trigger area type.

Parameters
stThe rail station or rail waypoint.
tileOrigin tile.
taTrigger area type.
Returns
The tile area.

Definition at line 83 of file newgrf_station.cpp.

References GetRailStationAxis(), BaseStation::GetTileArea(), IsCompatibleTrainStationTile(), SpecializedStation< Station, false >::IsExpected(), IsRailStationTile(), Rail, RailWaypoint, TileOffsByAxis(), TileX(), and TileY().

Referenced by DeallocateSpecFromStation(), and TriggerStationRandomisation().

◆ GetStationCallback()

uint16_t GetStationCallback ( CallbackID callback,
uint32_t param1,
uint32_t param2,
const StationSpec * statspec,
BaseStation * st,
TileIndex tile,
std::span< int32_t > regs100 )

Definition at line 674 of file newgrf_station.cpp.

◆ GetStationSpec()

const StationSpec * GetStationSpec ( TileIndex t)

Definition at line 885 of file newgrf_station.cpp.

◆ 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 690 of file newgrf_station.cpp.

References AXIS_Y, CALLBACK_FAILED, CBID_STATION_LAND_SLOPE_CHECK, GetErrorMessageFromLocationCallbackResult(), GetTileSlope(), StationSpec::grf_prop, GRFFilePropsBase::grffile, HasBit(), SLOPE_EW, TileX(), TileY(), and ToggleBit().

Referenced by CheckFlatLandRailStation().

◆ StationUpdateCachedTriggers()

void StationUpdateCachedTriggers ( BaseStation * st)

Update the cached animation trigger bitmask for a station.

Parameters
stStation to update.

Definition at line 1053 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, BaseStation::cached_cargo_triggers, GetStationSpecList(), and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set().

Referenced by AssignSpecToStation(), and DeallocateSpecFromStation().

◆ TriggerStationAnimation()

void TriggerStationAnimation ( BaseStation * st,
TileIndex trigger_tile,
StationAnimationTrigger trigger,
CargoType cargo_type )

Definition at line 926 of file newgrf_station.cpp.

◆ TriggerStationRandomisation()

Variable Documentation

◆ NUM_STATIONSSPECS_PER_STATION

const uint NUM_STATIONSSPECS_PER_STATION = 255
static

Maximum number of parts per station.

Definition at line 54 of file newgrf_station.cpp.

Referenced by AllocateSpecToStation().