OpenTTD Source  1.11.0-beta2
elrail_data.h File Reference

Go to the source code of this file.

Data Structures

struct  SortableSpriteStruct
 

Macros

#define PCP_NOT_ON_TRACK   0xFF
 
#define NUM_IGNORE_GROUPS   3
 
#define IGNORE_NONE   0xFF
 

Enumerations

enum  TLG {
  XEVEN_YEVEN = 0, XEVEN_YODD = 1, XODD_YEVEN = 2, XODD_YODD = 3,
  TLG_END
}
 Tile Location group. More...
 
enum  TileSource { TS_HOME = 0, TS_NEIGHBOUR = 1, TS_END }
 When determining the pylon configuration on the edge, two tiles are taken into account: the tile being drawn itself (the home tile, the one in ti->tile), and the neighbouring tile.
 
enum  PylonSpriteOffset {
  PSO_Y_NE, PSO_Y_SW, PSO_X_NW, PSO_X_SE,
  PSO_EW_N, PSO_EW_S, PSO_NS_W, PSO_NS_E
}
 Offset for pylon sprites from the base pylon sprite.
 
enum  WireSpriteOffset {
  WSO_X_SHORT, WSO_Y_SHORT, WSO_EW_SHORT, WSO_NS_SHORT,
  WSO_X_SHORT_DOWN, WSO_Y_SHORT_UP, WSO_X_SHORT_UP, WSO_Y_SHORT_DOWN,
  WSO_X_SW, WSO_Y_SE, WSO_EW_E, WSO_NS_S,
  WSO_X_SW_DOWN, WSO_Y_SE_UP, WSO_X_SW_UP, WSO_Y_SE_DOWN,
  WSO_X_NE, WSO_Y_NW, WSO_EW_W, WSO_NS_N,
  WSO_X_NE_DOWN, WSO_Y_NW_UP, WSO_X_NE_UP, WSO_Y_NW_DOWN,
  WSO_ENTRANCE_SW, WSO_ENTRANCE_NW, WSO_ENTRANCE_NE, WSO_ENTRANCE_SE
}
 Offset for wire sprites from the base wire sprite.
 
enum  RailCatenarySprite {
  WIRE_X_FLAT_SW, WIRE_X_FLAT_NE, WIRE_X_FLAT_BOTH, WIRE_X_UP_SW,
  WIRE_X_UP_NE, WIRE_X_UP_BOTH, WIRE_X_DOWN_SW, WIRE_X_DOWN_NE,
  WIRE_X_DOWN_BOTH, WIRE_Y_FLAT_SE, WIRE_Y_FLAT_NW, WIRE_Y_FLAT_BOTH,
  WIRE_Y_UP_SE, WIRE_Y_UP_NW, WIRE_Y_UP_BOTH, WIRE_Y_DOWN_SE,
  WIRE_Y_DOWN_NW, WIRE_Y_DOWN_BOTH, WIRE_NS_W_BOTH, WIRE_NS_E_BOTH,
  WIRE_NS_W_N, WIRE_NS_E_N, WIRE_NS_W_S, WIRE_NS_E_S,
  WIRE_EW_N_BOTH, WIRE_EW_S_BOTH, WIRE_EW_N_W, WIRE_EW_S_W,
  WIRE_EW_N_E, WIRE_EW_S_E, INVALID_CATENARY = 0xFF
}
 Refers to a certain element of the catenary. More...
 

Variables

static const uint NUM_TRACKS_AT_PCP = 6
 
static const byte AllowedPPPonPCP [DIAGDIR_END]
 Which PPPs are possible at all on a given PCP. More...
 
static const byte OwnedPPPonPCP [DIAGDIR_END]
 Which of the PPPs are inside the tile. More...
 
static const DiagDirection PCPpositions [TRACK_END][2]
 Maps a track bit onto two PCP positions. More...
 
static const byte PreferredPPPofTrackAtPCP [TRACK_END][DIAGDIR_END]
 Preferred points of each trackbit. More...
 
static const byte IgnoredPCP [NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END]
 In case we have a straight line, we place pylon only every two tiles, so there are certain tiles which we ignore. More...
 
static const byte DisallowedPPPofTrackAtPCP [TRACK_END][DIAGDIR_END]
 Which pylons can definitely NOT be built. More...
 
static const Track TracksAtPCP [DIAGDIR_END][NUM_TRACKS_AT_PCP]
 
static const TileSource TrackSourceTile [DIAGDIR_END][NUM_TRACKS_AT_PCP]
 
static const Direction PPPorder [DIAGDIR_END][TLG_END][DIR_END]
 
static const int8 x_pcp_offsets [DIAGDIR_END] = {0, 8, 16, 8}
 
static const int8 y_pcp_offsets [DIAGDIR_END] = {8, 16, 8, 0}
 
static const int8 x_ppp_offsets [DIR_END] = {-2, -4, -2, 0, 2, 4, 2, 0}
 
static const int8 y_ppp_offsets [DIR_END] = {-2, 0, 2, 4, 2, 0, -2, -4}
 
static const uint8 pylon_sprites []
 
static const uint ELRAIL_ELEVATION = 10
 Distance between wire and rail.
 
static const uint ELRAIL_ELEVRAISE = ELRAIL_ELEVATION + TILE_HEIGHT
 Wires that a draw one level higher than the north corner.
 
static const SortableSpriteStruct RailCatenarySpriteData []
 
static const SortableSpriteStruct RailCatenarySpriteData_Depot []
 
static const SortableSpriteStruct RailCatenarySpriteData_Tunnel []
 
static const RailCatenarySprite Wires [5][TRACK_END][4]
 

Detailed Description

Stores all the data for overhead wire and pylon drawing.

See also
elrail.c

Definition in file elrail_data.h.

Enumeration Type Documentation

◆ RailCatenarySprite

Refers to a certain element of the catenary.

Identifiers for Wires:

  1. Direction of the wire
  2. Slope of the tile for diagonals, placement inside the track for horiz/vertical pieces
  3. Place where a pylon should be

Identifiers for Pylons:

  1. Direction of the wire
  2. Slope of the tile
  3. Position of the Pylon relative to the track
  4. Position of the Pylon inside the tile

Definition at line 420 of file elrail_data.h.

◆ TLG

enum TLG

Tile Location group.

This defines whether the X and or Y coordinate of a tile is even

Definition at line 20 of file elrail_data.h.

Variable Documentation

◆ AllowedPPPonPCP

const byte AllowedPPPonPCP[DIAGDIR_END]
static
Initial value:
= {
1 << DIR_N | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W | 1 << DIR_NW,
1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
1 << DIR_N | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W | 1 << DIR_NW,
1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
}

Which PPPs are possible at all on a given PCP.

Definition at line 43 of file elrail_data.h.

◆ DisallowedPPPofTrackAtPCP

const byte DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END]
static
Initial value:
= {
{1 << DIR_SW | 1 << DIR_NE, 0, 1 << DIR_SW | 1 << DIR_NE, 0 },
{0, 1 << DIR_NW | 1 << DIR_SE, 0, 1 << DIR_NW | 1 << DIR_SE},
{1 << DIR_W | 1 << DIR_E, 0, 0, 1 << DIR_W | 1 << DIR_E },
{0, 1 << DIR_W | 1 << DIR_E, 1 << DIR_W | 1 << DIR_E, 0 },
{0, 0, 1 << DIR_S | 1 << DIR_N, 1 << DIR_N | 1 << DIR_S },
{1 << DIR_S | 1 << DIR_N, 1 << DIR_S | 1 << DIR_N, 0, 0, },
}

Which pylons can definitely NOT be built.

Definition at line 197 of file elrail_data.h.

◆ IgnoredPCP

const byte IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END]
static

In case we have a straight line, we place pylon only every two tiles, so there are certain tiles which we ignore.

A straight line is found if we have exactly two PPPs.

Definition at line 122 of file elrail_data.h.

◆ OwnedPPPonPCP

const byte OwnedPPPonPCP[DIAGDIR_END]
static
Initial value:
= {
1 << DIR_SE | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
1 << DIR_N | 1 << DIR_SW | 1 << DIR_W | 1 << DIR_NW,
1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_NW,
1 << DIR_NE | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S
}

Which of the PPPs are inside the tile.

For the two PPPs on the tile border the following system is used: if you rotate the PCP so that it is in the north, the eastern PPP belongs to the tile.

Definition at line 55 of file elrail_data.h.

◆ PCPpositions

const DiagDirection PCPpositions[TRACK_END][2]
static
Initial value:

Maps a track bit onto two PCP positions.

Definition at line 63 of file elrail_data.h.

◆ PPPorder

◆ PreferredPPPofTrackAtPCP

const byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END]
static

Preferred points of each trackbit.

Those are the ones perpendicular to the track, plus the point in extension of the track (to mark end-of-track). PCPs which are not on either end of the track are fully preferred.

See also
PCPpositions

Definition at line 79 of file elrail_data.h.

◆ pylon_sprites

const uint8 pylon_sprites[]
static
Initial value:
= {
PSO_EW_N,
PSO_Y_NE,
PSO_NS_E,
PSO_X_SE,
PSO_EW_S,
PSO_Y_SW,
PSO_NS_W,
PSO_X_NW,
}

Definition at line 269 of file elrail_data.h.

◆ RailCatenarySpriteData_Depot

const SortableSpriteStruct RailCatenarySpriteData_Depot[]
static
Initial value:
= {
{ WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
{ WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
{ WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
{ WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }
}

Definition at line 393 of file elrail_data.h.

◆ RailCatenarySpriteData_Tunnel

const SortableSpriteStruct RailCatenarySpriteData_Tunnel[]
static
Initial value:
= {
{ WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
{ WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
{ WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
{ WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }
}

Definition at line 400 of file elrail_data.h.

◆ TracksAtPCP

◆ TrackSourceTile

const TileSource TrackSourceTile[DIAGDIR_END][NUM_TRACKS_AT_PCP]
static
Initial value:
= {
{TS_HOME, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME },
{TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_HOME },
{TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME , TS_HOME , TS_NEIGHBOUR},
{TS_HOME, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR},
}

Definition at line 216 of file elrail_data.h.

DIAGDIR_SE
@ DIAGDIR_SE
Southeast.
Definition: direction_type.h:80
DIR_SW
@ DIR_SW
Southwest.
Definition: direction_type.h:31
DIR_SE
@ DIR_SE
Southeast.
Definition: direction_type.h:29
DIR_NW
@ DIR_NW
Northwest.
Definition: direction_type.h:33
TRACK_LOWER
@ TRACK_LOWER
Track in the lower corner of the tile (south)
Definition: track_type.h:24
TRACK_X
@ TRACK_X
Track along the x-axis (north-east to south-west)
Definition: track_type.h:21
DIAGDIR_NW
@ DIAGDIR_NW
Northwest.
Definition: direction_type.h:82
DIR_W
@ DIR_W
West.
Definition: direction_type.h:32
DIR_N
@ DIR_N
North.
Definition: direction_type.h:26
TRACK_RIGHT
@ TRACK_RIGHT
Track in the right corner of the tile (east)
Definition: track_type.h:26
DIAGDIR_SW
@ DIAGDIR_SW
Southwest.
Definition: direction_type.h:81
TRACK_Y
@ TRACK_Y
Track along the y-axis (north-west to south-east)
Definition: track_type.h:22
DIR_E
@ DIR_E
East.
Definition: direction_type.h:28
TRACK_UPPER
@ TRACK_UPPER
Track in the upper corner of the tile (north)
Definition: track_type.h:23
DIR_NE
@ DIR_NE
Northeast.
Definition: direction_type.h:27
ELRAIL_ELEVATION
static const uint ELRAIL_ELEVATION
Distance between wire and rail.
Definition: elrail_data.h:328
DIR_S
@ DIR_S
South.
Definition: direction_type.h:30
TRACK_LEFT
@ TRACK_LEFT
Track in the left corner of the tile (west)
Definition: track_type.h:25
DIAGDIR_NE
@ DIAGDIR_NE
Northeast, upper right on your monitor.
Definition: direction_type.h:79