Data Structures | Enumerations | Functions | Variables

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"

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 GetPlatformInfo (Axis axis, byte 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 GetPlatformInfoHelper (TileIndex tile, bool check_type, bool check_axis, bool centred)
static uint32 GetRailContinuationInfo (TileIndex tile)
static uint32 StationGetRandomBits (const ResolverObject *object)
static uint32 StationGetTriggers (const ResolverObject *object)
static void StationSetTriggers (const ResolverObject *object, int triggers)
static uint32 StationGetVariable (const ResolverObject *object, byte variable, uint32 parameter, bool *available)
static const SpriteGroupStationResolveReal (const ResolverObject *object, const RealSpriteGroup *group)
void StationStorePSA (ResolverObject *object, uint pos, int32 value)
 Store a value into the persistent storage of the object's parent.
static void NewStationResolver (ResolverObject *res, const StationSpec *statspec, BaseStation *st, TileIndex tile)
static const SpriteGroupResolveStation (ResolverObject *object)
SpriteID GetCustomStationRelocation (const StationSpec *statspec, BaseStation *st, TileIndex tile, uint32 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 GetStationCallback (CallbackID callback, uint32 param1, uint32 param2, const StationSpec *statspec, BaseStation *st, TileIndex tile)
CommandCost PerformStationTileSlopeCheck (TileIndex north_tile, TileIndex cur_tile, const StationSpec *statspec, Axis axis, byte plat_len, byte 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, byte 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)
bool IsStationTileBlocked (TileIndex tile)
 Check whether a rail station tile is NOT traversable.
bool IsStationTileElectrifiable (TileIndex tile)
 Check if a rail station tile can be electrified.
uint16 GetAnimStationCallback (CallbackID callback, uint32 param1, uint32 param2, const StationSpec *statspec, BaseStation *st, TileIndex tile, int extra_data)
 Wrapper for animation control, see GetStationCallback.
void AnimateStationTile (TileIndex tile)
void TriggerStationAnimation (BaseStation *st, TileIndex tile, StationAnimationTrigger trigger, CargoID cargo_type)
void StationUpdateAnimTriggers (BaseStation *st)
 Update the cached animation trigger bitmask for a station.
void GetStationResolver (ResolverObject *ro, uint index)
 Resolve a station's spec and such so we can get a variable.

Variables

static const uint MAX_SPECLIST = 255
struct {
   uint32   v40
   uint32   v41
   uint32   v45
   uint32   v46
   uint32   v47
   uint32   v49
   uint8   valid
 Bits indicating what variable is valid (for each bit, 0 is invalid, 1 is valid).
_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.


Function Documentation

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

Allocate a StationSpec to a Station.

This is called once per build operation.

Parameters:
statspec StationSpec to allocate.
st Station to allocate it to.
exec Whether to actually allocate the spec.
Returns:
Index within the Station's spec list, or -1 if the allocation failed.

Definition at line 709 of file newgrf_station.cpp.

References StationSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, StationSpecList::grfid, GRFFilePropsBase< Tcnt >::local_id, StationSpecList::localidx, BaseStation::num_specs, ReallocT(), and BaseStation::speclist.

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

void DeallocateSpecFromStation ( BaseStation st,
byte  specindex 
)

Deallocate a StationSpec from a Station.

Called when removing a single station tile.

Parameters:
st Station to work with.
specindex Index of the custom station within the Station's spec list.
Returns:
Indicates whether the StationSpec was deallocated.

Definition at line 760 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, free(), GetCustomStationSpecIndex(), StationSpecList::grfid, INVALID_TILE, StationSpecList::localidx, BaseStation::num_specs, ReallocT(), BaseStation::speclist, StationUpdateAnimTriggers(), TILE_AREA_LOOP, and BaseStation::TileBelongsToRailStation().

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

bool DrawStationTile ( int  x,
int  y,
RailType  railtype,
Axis  axis,
StationClassID  sclass,
uint  station 
)
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:
tile Start tile.
delta Movement direction.
check_type Stop when the custom station type changes.
check_axis Stop when the station direction changes.
Returns:
Found end of the railway station.

Definition at line 141 of file newgrf_station.cpp.

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

uint16 GetAnimStationCallback ( CallbackID  callback,
uint32  param1,
uint32  param2,
const StationSpec statspec,
BaseStation st,
TileIndex  tile,
int  extra_data 
)

Wrapper for animation control, see GetStationCallback.

Definition at line 912 of file newgrf_station.cpp.

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

Resolve the sprites for custom station foundations.

Parameters:
statspec Station spec
st Station
tile Station tile being drawn
layout Spritelayout as returned by previous callback
edge_info Information 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.

Definition at line 635 of file newgrf_station.cpp.

References ClearRegister(), and GetRegister().

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

Resolve sprites for drawing a station tile.

Parameters:
statspec Station spec
st Station (NULL in GUI)
tile Station tile being drawn (INVALID_TILE in GUI)
var10 Value 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 ot use, minus an offset of 0x42D to accommodate for weird NewGRF specs.

Definition at line 613 of file newgrf_station.cpp.

Referenced by DrawStationTile().

uint32 GetPlatformInfo ( Axis  axis,
byte  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 103 of file newgrf_station.cpp.

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

Referenced by CmdBuildRailStation().

void GetStationResolver ( ResolverObject ro,
uint  index 
)

Resolve a station's spec and such so we can get a variable.

Parameters:
ro The resolver object to fill.
index The station to get the data from.

Definition at line 989 of file newgrf_station.cpp.

bool IsStationTileBlocked ( TileIndex  tile  ) 

Check whether a rail station tile is NOT traversable.

Parameters:
tile Tile to test.
Returns:
Station tile is blocked.
Note:
This could be cached (during build) in the map array to save on all the dereferencing.

Definition at line 889 of file newgrf_station.cpp.

References StationSpec::blocked, GetStationGfx(), and HasBit().

Referenced by AfterLoadCompanyStats(), CmdBuildRailStation(), CmdConvertRail(), ExploreSegment(), IsCompatibleTrainStationTile(), RemoveFromRailBaseStation(), and RemoveRailStation().

bool IsStationTileElectrifiable ( TileIndex  tile  ) 

Check if a rail station tile can be electrified.

Parameters:
tile Tile to test.
Returns:
Tile can be electrified.
Note:
This could be cached (during build) in the map array to save on all the dereferencing.

Definition at line 902 of file newgrf_station.cpp.

References GetStationGfx(), HasBit(), StationSpec::pylons, and StationSpec::wires.

Referenced by GetRailTrackBitsUniversal().

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

Check the slope of a tile of a new station.

Parameters:
north_tile Norther tile of the station rect.
cur_tile Tile to check.
statspec Station spec.
axis Axis of the new station.
plat_len Platform length.
numtracks Number of platforms.
Returns:
Succeeded or failed command.

Definition at line 677 of file newgrf_station.cpp.

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

Referenced by CheckFlatLandRailStation().

void StationStorePSA ( ResolverObject object,
uint  pos,
int32  value 
)

Store a value into the persistent storage of the object's parent.

Parameters:
object Object that we want to query.
pos Position in the persistent storage to use.
value Value to store.

Definition at line 536 of file newgrf_station.cpp.

References ResolverObject::grffile, ResolverObject::scope, BaseStation::town, TownStorePSA(), and VSG_SCOPE_PARENT.

void StationUpdateAnimTriggers ( BaseStation st  ) 

Update the cached animation trigger bitmask for a station.

Parameters:
st Station to update.

Definition at line 972 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, BaseStation::num_specs, BaseStation::speclist, and AnimationInfo::triggers.

Referenced by DeallocateSpecFromStation().