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 const SpriteGroupResolveStation (StationResolverObject &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 CanStationTileHavePylons (TileIndex tile)
 Check if a rail station tile shall have pylons when electrified.
bool CanStationTileHaveWires (TileIndex tile)
 Check if a rail station tile shall have wires when 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 TriggerStationRandomisation (Station *st, TileIndex 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   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 694 of file newgrf_station.cpp.

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

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

bool CanStationTileHavePylons ( TileIndex  tile  ) 

Check if a rail station tile shall have pylons when electrified.

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

Definition at line 895 of file newgrf_station.cpp.

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

Referenced by DrawCatenaryRailway().

bool CanStationTileHaveWires ( TileIndex  tile  ) 

Check if a rail station tile shall have wires when electrified.

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

Definition at line 909 of file newgrf_station.cpp.

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

Referenced by DrawCatenaryRailway(), and MaskWireBits().

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

References BaseStation::cached_anim_triggers, BaseStation::cached_cargo_triggers, free(), GetCustomStationSpecIndex(), StationSpecList::grfid, INVALID_TILE, StationSpecList::localidx, BaseStation::num_specs, ReallocT(), BaseStation::speclist, StationUpdateCachedTriggers(), 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 143 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 916 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, or 0 if default foundations shall be drawn.

Definition at line 635 of file newgrf_station.cpp.

References CBID_NO_CALLBACK, 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 to use, minus an offset of 0x42D to accommodate for weird NewGRF specs.

Definition at line 618 of file newgrf_station.cpp.

References CBID_NO_CALLBACK.

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

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

Referenced by CmdBuildRailStation().

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

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

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

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 665 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().

void StationUpdateCachedTriggers ( BaseStation st  ) 

Update the cached animation trigger bitmask for a station.

Parameters:
st Station to update.

Definition at line 1057 of file newgrf_station.cpp.

References BaseStation::cached_anim_triggers, BaseStation::cached_cargo_triggers, StationSpec::cargo_triggers, BaseStation::num_specs, BaseStation::speclist, and AnimationInfo::triggers.

Referenced by AllocateSpecToStation(), and DeallocateSpecFromStation().

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