40 static const uint NUM_TRACKS_AT_PCP = 6;
72 #define PCP_NOT_ON_TRACK 0xFF 112 #undef PCP_NOT_ON_TRACK 115 #define NUM_IGNORE_GROUPS 3 116 #define IGNORE_NONE 0xFF 217 {TS_HOME, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME },
218 {TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_HOME },
219 {TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME , TS_HOME , TS_NEIGHBOUR},
220 {TS_HOME, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR},
248 static const int8 x_pcp_offsets[
DIAGDIR_END] = {0, 8, 16, 8};
249 static const int8 y_pcp_offsets[
DIAGDIR_END] = {8, 16, 8, 0};
251 static const int8 x_ppp_offsets[
DIR_END] = {-2, -4, -2, 0, 2, 4, 2, 0};
252 static const int8 y_ppp_offsets[
DIR_END] = {-2, 0, 2, 4, 2, 0, -2, -4};
269 static const uint8 pylon_sprites[] = {
337 { WSO_X_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
338 { WSO_X_SHORT, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
343 { WSO_X_NE_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE },
344 { WSO_X_SHORT_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE },
348 { WSO_X_SW_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION },
349 { WSO_X_NE_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION },
350 { WSO_X_SHORT_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION },
356 { WSO_Y_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
357 { WSO_Y_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
358 { WSO_Y_SHORT, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
362 { WSO_Y_SE_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE },
363 { WSO_Y_NW_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE },
364 { WSO_Y_SHORT_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE },
368 { WSO_Y_SE_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION },
369 { WSO_Y_NW_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION },
370 { WSO_Y_SHORT_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION },
373 { WSO_NS_SHORT, 8, 0, 8, 8, 1, ELRAIL_ELEVATION },
374 { WSO_NS_SHORT, 0, 8, 8, 8, 1, ELRAIL_ELEVATION },
376 { WSO_NS_N, 8, 0, 8, 8, 1, ELRAIL_ELEVATION },
377 { WSO_NS_N, 0, 8, 8, 8, 1, ELRAIL_ELEVATION },
379 { WSO_NS_S, 8, 0, 8, 8, 1, ELRAIL_ELEVATION },
380 { WSO_NS_S, 0, 8, 8, 8, 1, ELRAIL_ELEVATION },
383 { WSO_EW_SHORT, 7, 0, 1, 1, 1, ELRAIL_ELEVATION },
384 { WSO_EW_SHORT, 15, 8, 3, 3, 1, ELRAIL_ELEVATION },
386 { WSO_EW_W, 7, 0, 1, 1, 1, ELRAIL_ELEVATION },
387 { WSO_EW_W, 15, 8, 3, 3, 1, ELRAIL_ELEVATION },
389 { WSO_EW_E, 7, 0, 1, 1, 1, ELRAIL_ELEVATION },
390 { WSO_EW_E, 15, 8, 3, 3, 1, ELRAIL_ELEVATION }
395 { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
396 { WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
397 { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }
402 { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION },
403 { WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION },
404 { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }
463 INVALID_CATENARY = 0xFF
474 {INVALID_CATENARY, WIRE_X_FLAT_NE, WIRE_X_FLAT_SW, WIRE_X_FLAT_BOTH},
475 {INVALID_CATENARY, WIRE_Y_FLAT_SE, WIRE_Y_FLAT_NW, WIRE_Y_FLAT_BOTH},
476 {INVALID_CATENARY, WIRE_EW_N_W, WIRE_EW_N_E, WIRE_EW_N_BOTH},
477 {INVALID_CATENARY, WIRE_EW_S_E, WIRE_EW_S_W, WIRE_EW_S_BOTH},
478 {INVALID_CATENARY, WIRE_NS_W_S, WIRE_NS_W_N, WIRE_NS_W_BOTH},
479 {INVALID_CATENARY, WIRE_NS_E_N, WIRE_NS_E_S, WIRE_NS_E_BOTH},
481 {INVALID_CATENARY, WIRE_X_UP_NE, WIRE_X_UP_SW, WIRE_X_UP_BOTH},
482 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
483 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
484 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
485 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
486 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
488 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
489 {INVALID_CATENARY, WIRE_Y_UP_SE, WIRE_Y_UP_NW, WIRE_Y_UP_BOTH},
490 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
491 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
492 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
493 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
495 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
496 {INVALID_CATENARY, WIRE_Y_DOWN_SE, WIRE_Y_DOWN_NW, WIRE_Y_DOWN_BOTH},
497 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
498 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
499 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
500 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
502 {INVALID_CATENARY, WIRE_X_DOWN_NE, WIRE_X_DOWN_SW, WIRE_X_DOWN_BOTH},
503 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
504 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
505 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
506 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
507 {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
Track along the x-axis (north-east to south-west)
static const byte AllowedPPPonPCP[DIAGDIR_END]
Which PPPs are possible at all on a given PCP.
Track in the lower corner of the tile (south)
static const byte DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END]
Which pylons can definitely NOT be built.
static const byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END]
Preferred points of each trackbit.
TileSource
When determining the pylon configuration on the edge, two tiles are taken into account: the tile bein...
static const byte OwnedPPPonPCP[DIAGDIR_END]
Which of the PPPs are inside the tile.
static const uint ELRAIL_ELEVRAISE
Wires that a draw one level higher than the north corner.
Track in the right corner of the tile (east)
static const DiagDirection PCPpositions[TRACK_END][2]
Maps a track bit onto two PCP positions.
Direction
Defines the 8 directions on the map.
static const uint TILE_HEIGHT
Height of a height level in world coordinate AND in pixels in #ZOOM_LVL_BASE.
PylonSpriteOffset
Offset for pylon sprites from the base pylon sprite.
WireSpriteOffset
Offset for wire sprites from the base wire sprite.
Track along the y-axis (north-west to south-east)
static const uint ELRAIL_ELEVATION
Distance between wire and rail.
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 whic...
Track
These are used to specify a single track.
RailCatenarySprite
Refers to a certain element of the catenary.
DiagDirection
Enumeration for diagonal directions.
Northeast, upper right on your monitor.
Track in the left corner of the tile (west)
Track in the upper corner of the tile (north)