OpenTTD Source 20241224-master-gee860a5c8e
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_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 "newgrf_class_func.h"
#include "timer/timer_game_calendar.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

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

Enumerations

enum  TriggerArea { TA_TILE , TA_PLATFORM , TA_WHOLE }
 

Functions

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.
 
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)
 
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.
 
int AllocateSpecToStation (const StationSpec *statspec, BaseStation *st, bool exec)
 Allocate a StationSpec 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, CargoID cargo_type)
 
void TriggerStationRandomisation (Station *st, TileIndex trigger_tile, StationRandomTrigger trigger, CargoID 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.
 
struct { 
 
   uint32_t   v40 
 
   uint32_t   v41 
 
   uint32_t   v45 
 
   uint32_t   v46 
 
   uint32_t   v47 
 
   uint32_t   v49 
 
   uint8_t   valid 
 Bits indicating what variable is valid (for each bit, 0 is invalid, 1 is valid). More...
 
_svc 
 Station variable cache This caches 'expensive' station variable lookups which iterate over several tiles that may be called multiple times per Resolve().
 

Detailed Description

Functions for dealing with station classes and custom stations.

Definition in file newgrf_station.cpp.

Enumeration Type Documentation

◆ TriggerArea

enum TriggerArea

Definition at line 52 of file newgrf_station.cpp.

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 >::grfid, GRFFilePropsBase< Tcnt >::local_id, NUM_STATIONSSPECS_PER_STATION, BaseStation::speclist, and StationUpdateCachedTriggers().

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

◆ AnimateStationTile()

void AnimateStationTile ( TileIndex  tile)

Definition at line 870 of file newgrf_station.cpp.

◆ 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 BaseStation::cached_anim_triggers, BaseStation::cached_cargo_triggers, GetCustomStationSpecIndex(), 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 142 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 856 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, GetRegister(), 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().

Referenced by DrawStationTile().

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

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

Referenced by CmdBuildRailStation().

◆ GetPlatformInfoHelper()

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

Definition at line 165 of file newgrf_station.cpp.

◆ GetRailContinuationInfo()

static uint32_t GetRailContinuationInfo ( TileIndex  tile)
static

Definition at line 181 of file newgrf_station.cpp.

◆ GetStationCallback()

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

Definition at line 641 of file newgrf_station.cpp.

◆ GetStationSpec()

const StationSpec * GetStationSpec ( TileIndex  t)

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

References AXIS_Y, CALLBACK_FAILED, CBID_STATION_LAND_SLOPE_CHECK, GetErrorMessageFromLocationCallbackResult(), GetTileSlope(), StationSpec::grf_prop, GRFFilePropsBase< Tcnt >::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 994 of file newgrf_station.cpp.

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

Referenced by AllocateSpecToStation(), and DeallocateSpecFromStation().

◆ TriggerStationAnimation()

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

Definition at line 878 of file newgrf_station.cpp.

◆ TriggerStationRandomisation()

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

Variable Documentation

◆ NUM_STATIONSSPECS_PER_STATION

const uint NUM_STATIONSSPECS_PER_STATION = 255
static

Maximum number of parts per station.

Definition at line 50 of file newgrf_station.cpp.

Referenced by AllocateSpecToStation().

◆ v40

uint32_t v40

Definition at line 241 of file newgrf_station.cpp.

◆ v41

uint32_t v41

Definition at line 242 of file newgrf_station.cpp.

◆ v45

uint32_t v45

Definition at line 243 of file newgrf_station.cpp.

◆ v46

uint32_t v46

Definition at line 244 of file newgrf_station.cpp.

◆ v47

uint32_t v47

Definition at line 245 of file newgrf_station.cpp.

◆ v49

uint32_t v49

Definition at line 246 of file newgrf_station.cpp.

◆ valid

uint8_t valid

Bits indicating what variable is valid (for each bit, 0 is invalid, 1 is valid).

Definition at line 247 of file newgrf_station.cpp.

Referenced by CYapfBaseT< Types >::AddNewNode(), Packet::PrepareToRead(), Window::SetWidgetHighlight(), ScriptDebugWindow::UpdateAIButtonsState(), and ScriptDebugWindow::UpdateGSButtonState().