OpenTTD Source 20250924-master-gbec4e71d53
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)
 Wrapper for animation control, see GetStationCallback.
 
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 699 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 890 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 734 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 751 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()

static 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 158 of file newgrf_station.cpp.

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

◆ GetAnimStationCallback()

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

Wrapper for animation control, see GetStationCallback.

Definition at line 876 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 641 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 613 of file newgrf_station.cpp.

References CBID_NO_CALLBACK.

Referenced by DrawStationTile().

◆ GetCustomStationRelocation() [2/2]

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

Definition at line 621 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.

Returns
Platform information in bit-stuffed format.

Definition at line 120 of file newgrf_station.cpp.

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

Referenced by CmdBuildRailStation().

◆ GetPlatformInfoHelper()

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

Definition at line 181 of file newgrf_station.cpp.

◆ GetRailContinuationInfo()

static uint32_t GetRailContinuationInfo ( TileIndex  tile)
static

Definition at line 197 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(), 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 655 of file newgrf_station.cpp.

◆ GetStationSpec()

const StationSpec * GetStationSpec ( TileIndex  t)

Definition at line 866 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 671 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 1020 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, BaseStation::cached_cargo_triggers, 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 898 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().