diff --git a/src/rail.cpp b/src/rail.cpp index c5e0d7a6cb..e09f1b4e20 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -15,140 +15,10 @@ #include "company_base.h" #include "engine_base.h" +#include "table/track_data.h" + #include "safeguards.h" -/* XXX: Below 3 tables store duplicate data. Maybe remove some? */ -/* Maps a trackdir to the bit that stores its status in the map arrays, in the - * direction along with the trackdir */ -extern const uint8_t _signal_along_trackdir[TRACKDIR_END] = { - 0x8, 0x8, 0x8, 0x2, 0x4, 0x1, 0, 0, - 0x4, 0x4, 0x4, 0x1, 0x8, 0x2 -}; - -/* Maps a trackdir to the bit that stores its status in the map arrays, in the - * direction against the trackdir */ -extern const uint8_t _signal_against_trackdir[TRACKDIR_END] = { - 0x4, 0x4, 0x4, 0x1, 0x8, 0x2, 0, 0, - 0x8, 0x8, 0x8, 0x2, 0x4, 0x1 -}; - -/* Maps a Track to the bits that store the status of the two signals that can - * be present on the given track */ -extern const uint8_t _signal_on_track[] = { - 0xC, 0xC, 0xC, 0x3, 0xC, 0x3 -}; - -/* Maps a diagonal direction to the all trackdirs that are connected to any - * track entering in this direction (including those making 90 degree turns) - */ -extern const TrackdirBits _exitdir_reaches_trackdirs[] = { - TRACKDIR_BIT_X_NE | TRACKDIR_BIT_LOWER_E | TRACKDIR_BIT_LEFT_N, // DIAGDIR_NE - TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_LEFT_S | TRACKDIR_BIT_UPPER_E, // DIAGDIR_SE - TRACKDIR_BIT_X_SW | TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_RIGHT_S, // DIAGDIR_SW - TRACKDIR_BIT_Y_NW | TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_LOWER_W // DIAGDIR_NW -}; - -extern const Trackdir _next_trackdir[TRACKDIR_END] = { - TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_LOWER_E, TRACKDIR_UPPER_E, TRACKDIR_RIGHT_S, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, - TRACKDIR_X_SW, TRACKDIR_Y_NW, TRACKDIR_LOWER_W, TRACKDIR_UPPER_W, TRACKDIR_RIGHT_N, TRACKDIR_LEFT_N -}; - -/* Maps a trackdir to all trackdirs that make 90 deg turns with it. */ -extern const TrackdirBits _track_crosses_trackdirs[TRACK_END] = { - TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_Y_NW, // TRACK_X - TRACKDIR_BIT_X_NE | TRACKDIR_BIT_X_SW, // TRACK_Y - TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S, // TRACK_UPPER - TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S, // TRACK_LOWER - TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E, // TRACK_LEFT - TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E // TRACK_RIGHT -}; - -/* Maps a track to all tracks that make 90 deg turns with it. */ -extern const TrackBits _track_crosses_tracks[] = { - TRACK_BIT_Y, // TRACK_X - TRACK_BIT_X, // TRACK_Y - TRACK_BIT_VERT, // TRACK_UPPER - TRACK_BIT_VERT, // TRACK_LOWER - TRACK_BIT_HORZ, // TRACK_LEFT - TRACK_BIT_HORZ // TRACK_RIGHT -}; - -/* Maps a trackdir to the (4-way) direction the tile is exited when following - * that trackdir */ -extern const DiagDirection _trackdir_to_exitdir[TRACKDIR_END] = { - DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_NE, - DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE, -}; - -extern const Trackdir _track_exitdir_to_trackdir[][DIAGDIR_END] = { - {TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR}, - {INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW}, - {TRACKDIR_UPPER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_W}, - {INVALID_TRACKDIR, TRACKDIR_LOWER_E, TRACKDIR_LOWER_W, INVALID_TRACKDIR}, - {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LEFT_S, TRACKDIR_LEFT_N}, - {TRACKDIR_RIGHT_N, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR} -}; - -extern const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END] = { - {TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR}, - {INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW}, - {INVALID_TRACKDIR, TRACKDIR_UPPER_E, TRACKDIR_UPPER_W, INVALID_TRACKDIR}, - {TRACKDIR_LOWER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_W}, - {TRACKDIR_LEFT_N, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR}, - {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_RIGHT_S, TRACKDIR_RIGHT_N} -}; - -extern const Trackdir _track_direction_to_trackdir[][DIR_END] = { - {INVALID_TRACKDIR, TRACKDIR_X_NE, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR, INVALID_TRACKDIR}, - {INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_Y_NW}, - {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_W, INVALID_TRACKDIR}, - {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_W, INVALID_TRACKDIR}, - {TRACKDIR_LEFT_N, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR}, - {TRACKDIR_RIGHT_N, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR} -}; - -extern const Trackdir _dir_to_diag_trackdir[] = { - TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW, -}; - -extern const TrackBits _corner_to_trackbits[] = { - TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, -}; - -extern const TrackdirBits _uphill_trackdirs[] = { - TRACKDIR_BIT_NONE , ///< 0 SLOPE_FLAT - TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_NW, ///< 1 SLOPE_W -> inclined for diagonal track - TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_SE, ///< 2 SLOPE_S -> inclined for diagonal track - TRACKDIR_BIT_X_SW , ///< 3 SLOPE_SW - TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_SE, ///< 4 SLOPE_E -> inclined for diagonal track - TRACKDIR_BIT_NONE , ///< 5 SLOPE_EW - TRACKDIR_BIT_Y_SE , ///< 6 SLOPE_SE - TRACKDIR_BIT_NONE , ///< 7 SLOPE_WSE -> leveled - TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_NW, ///< 8 SLOPE_N -> inclined for diagonal track - TRACKDIR_BIT_Y_NW , ///< 9 SLOPE_NW - TRACKDIR_BIT_NONE , ///< 10 SLOPE_NS - TRACKDIR_BIT_NONE , ///< 11 SLOPE_NWS -> leveled - TRACKDIR_BIT_X_NE , ///< 12 SLOPE_NE - TRACKDIR_BIT_NONE , ///< 13 SLOPE_ENW -> leveled - TRACKDIR_BIT_NONE , ///< 14 SLOPE_SEN -> leveled - TRACKDIR_BIT_NONE , ///< 15 invalid - TRACKDIR_BIT_NONE , ///< 16 invalid - TRACKDIR_BIT_NONE , ///< 17 invalid - TRACKDIR_BIT_NONE , ///< 18 invalid - TRACKDIR_BIT_NONE , ///< 19 invalid - TRACKDIR_BIT_NONE , ///< 20 invalid - TRACKDIR_BIT_NONE , ///< 21 invalid - TRACKDIR_BIT_NONE , ///< 22 invalid - TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_SE, ///< 23 SLOPE_STEEP_S -> inclined for diagonal track - TRACKDIR_BIT_NONE , ///< 24 invalid - TRACKDIR_BIT_NONE , ///< 25 invalid - TRACKDIR_BIT_NONE , ///< 26 invalid - TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_NW, ///< 27 SLOPE_STEEP_W -> inclined for diagonal track - TRACKDIR_BIT_NONE , ///< 28 invalid - TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_NW, ///< 29 SLOPE_STEEP_N -> inclined for diagonal track - TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_SE, ///< 30 SLOPE_STEEP_E -> inclined for diagonal track -}; - /** * Return the rail type of tile, or INVALID_RAILTYPE if this is no rail tile. */ diff --git a/src/signal.cpp b/src/signal.cpp index c9a1d7d017..f6af4d5268 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -17,6 +17,8 @@ #include "company_base.h" #include "pbs.h" +#include "table/signal_data.h" + #include "safeguards.h" diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt index 6b25662a09..e4114d94ce 100644 --- a/src/table/CMakeLists.txt +++ b/src/table/CMakeLists.txt @@ -28,12 +28,14 @@ add_files( road_land.h roadtypes.h roadveh_movement.h + signal_data.h sprites.h station_land.h strgen_tables.h string_colours.h town_land.h townname.h + track_data.h track_land.h train_sprites.h tree_land.h diff --git a/src/table/signal_data.h b/src/table/signal_data.h new file mode 100644 index 0000000000..27281911b8 --- /dev/null +++ b/src/table/signal_data.h @@ -0,0 +1,29 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file signal_data.h Data related to rail signals. */ + +/* XXX: Below 3 tables store duplicate data. Maybe remove some? */ +/* Maps a trackdir to the bit that stores its status in the map arrays, in the + * direction along with the trackdir */ +extern const uint8_t _signal_along_trackdir[TRACKDIR_END] = { + 0x8, 0x8, 0x8, 0x2, 0x4, 0x1, 0, 0, + 0x4, 0x4, 0x4, 0x1, 0x8, 0x2 +}; + +/* Maps a trackdir to the bit that stores its status in the map arrays, in the + * direction against the trackdir */ +extern const uint8_t _signal_against_trackdir[TRACKDIR_END] = { + 0x4, 0x4, 0x4, 0x1, 0x8, 0x2, 0, 0, + 0x8, 0x8, 0x8, 0x2, 0x4, 0x1 +}; + +/* Maps a Track to the bits that store the status of the two signals that can + * be present on the given track */ +extern const uint8_t _signal_on_track[] = { + 0xC, 0xC, 0xC, 0x3, 0xC, 0x3 +}; diff --git a/src/table/track_data.h b/src/table/track_data.h new file mode 100644 index 0000000000..3724184585 --- /dev/null +++ b/src/table/track_data.h @@ -0,0 +1,119 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file track_data.h Data related to rail tracks. */ + +/* Maps a diagonal direction to the all trackdirs that are connected to any + * track entering in this direction (including those making 90 degree turns) + */ +extern const TrackdirBits _exitdir_reaches_trackdirs[] = { + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_LOWER_E | TRACKDIR_BIT_LEFT_N, // DIAGDIR_NE + TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_LEFT_S | TRACKDIR_BIT_UPPER_E, // DIAGDIR_SE + TRACKDIR_BIT_X_SW | TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_RIGHT_S, // DIAGDIR_SW + TRACKDIR_BIT_Y_NW | TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_LOWER_W // DIAGDIR_NW +}; + +extern const Trackdir _next_trackdir[TRACKDIR_END] = { + TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_LOWER_E, TRACKDIR_UPPER_E, TRACKDIR_RIGHT_S, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, + TRACKDIR_X_SW, TRACKDIR_Y_NW, TRACKDIR_LOWER_W, TRACKDIR_UPPER_W, TRACKDIR_RIGHT_N, TRACKDIR_LEFT_N +}; + +/* Maps a trackdir to all trackdirs that make 90 deg turns with it. */ +extern const TrackdirBits _track_crosses_trackdirs[TRACK_END] = { + TRACKDIR_BIT_Y_SE | TRACKDIR_BIT_Y_NW, // TRACK_X + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_X_SW, // TRACK_Y + TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S, // TRACK_UPPER + TRACKDIR_BIT_RIGHT_N | TRACKDIR_BIT_RIGHT_S | TRACKDIR_BIT_LEFT_N | TRACKDIR_BIT_LEFT_S, // TRACK_LOWER + TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E, // TRACK_LEFT + TRACKDIR_BIT_UPPER_W | TRACKDIR_BIT_UPPER_E | TRACKDIR_BIT_LOWER_W | TRACKDIR_BIT_LOWER_E // TRACK_RIGHT +}; + +/* Maps a track to all tracks that make 90 deg turns with it. */ +extern const TrackBits _track_crosses_tracks[] = { + TRACK_BIT_Y, // TRACK_X + TRACK_BIT_X, // TRACK_Y + TRACK_BIT_VERT, // TRACK_UPPER + TRACK_BIT_VERT, // TRACK_LOWER + TRACK_BIT_HORZ, // TRACK_LEFT + TRACK_BIT_HORZ // TRACK_RIGHT +}; + +/* Maps a trackdir to the (4-way) direction the tile is exited when following + * that trackdir */ +extern const DiagDirection _trackdir_to_exitdir[TRACKDIR_END] = { + DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_NE, + DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE, +}; + +extern const Trackdir _track_exitdir_to_trackdir[][DIAGDIR_END] = { + {TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR}, + {INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW}, + {TRACKDIR_UPPER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_W}, + {INVALID_TRACKDIR, TRACKDIR_LOWER_E, TRACKDIR_LOWER_W, INVALID_TRACKDIR}, + {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LEFT_S, TRACKDIR_LEFT_N}, + {TRACKDIR_RIGHT_N, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR} +}; + +extern const Trackdir _track_enterdir_to_trackdir[][DIAGDIR_END] = { + {TRACKDIR_X_NE, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR}, + {INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, TRACKDIR_Y_NW}, + {INVALID_TRACKDIR, TRACKDIR_UPPER_E, TRACKDIR_UPPER_W, INVALID_TRACKDIR}, + {TRACKDIR_LOWER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_W}, + {TRACKDIR_LEFT_N, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR}, + {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_RIGHT_S, TRACKDIR_RIGHT_N} +}; + +extern const Trackdir _track_direction_to_trackdir[][DIR_END] = { + {INVALID_TRACKDIR, TRACKDIR_X_NE, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_X_SW, INVALID_TRACKDIR, INVALID_TRACKDIR}, + {INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_Y_SE, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_Y_NW}, + {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_UPPER_W, INVALID_TRACKDIR}, + {INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_E, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LOWER_W, INVALID_TRACKDIR}, + {TRACKDIR_LEFT_N, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_LEFT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR}, + {TRACKDIR_RIGHT_N, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR, TRACKDIR_RIGHT_S, INVALID_TRACKDIR, INVALID_TRACKDIR, INVALID_TRACKDIR} +}; + +extern const Trackdir _dir_to_diag_trackdir[] = { + TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW, +}; + +extern const TrackBits _corner_to_trackbits[] = { + TRACK_BIT_LEFT, TRACK_BIT_LOWER, TRACK_BIT_RIGHT, TRACK_BIT_UPPER, +}; + +extern const TrackdirBits _uphill_trackdirs[] = { + TRACKDIR_BIT_NONE , ///< 0 SLOPE_FLAT + TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_NW, ///< 1 SLOPE_W -> inclined for diagonal track + TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_SE, ///< 2 SLOPE_S -> inclined for diagonal track + TRACKDIR_BIT_X_SW , ///< 3 SLOPE_SW + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_SE, ///< 4 SLOPE_E -> inclined for diagonal track + TRACKDIR_BIT_NONE , ///< 5 SLOPE_EW + TRACKDIR_BIT_Y_SE , ///< 6 SLOPE_SE + TRACKDIR_BIT_NONE , ///< 7 SLOPE_WSE -> leveled + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_NW, ///< 8 SLOPE_N -> inclined for diagonal track + TRACKDIR_BIT_Y_NW , ///< 9 SLOPE_NW + TRACKDIR_BIT_NONE , ///< 10 SLOPE_NS + TRACKDIR_BIT_NONE , ///< 11 SLOPE_NWS -> leveled + TRACKDIR_BIT_X_NE , ///< 12 SLOPE_NE + TRACKDIR_BIT_NONE , ///< 13 SLOPE_ENW -> leveled + TRACKDIR_BIT_NONE , ///< 14 SLOPE_SEN -> leveled + TRACKDIR_BIT_NONE , ///< 15 invalid + TRACKDIR_BIT_NONE , ///< 16 invalid + TRACKDIR_BIT_NONE , ///< 17 invalid + TRACKDIR_BIT_NONE , ///< 18 invalid + TRACKDIR_BIT_NONE , ///< 19 invalid + TRACKDIR_BIT_NONE , ///< 20 invalid + TRACKDIR_BIT_NONE , ///< 21 invalid + TRACKDIR_BIT_NONE , ///< 22 invalid + TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_SE, ///< 23 SLOPE_STEEP_S -> inclined for diagonal track + TRACKDIR_BIT_NONE , ///< 24 invalid + TRACKDIR_BIT_NONE , ///< 25 invalid + TRACKDIR_BIT_NONE , ///< 26 invalid + TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_NW, ///< 27 SLOPE_STEEP_W -> inclined for diagonal track + TRACKDIR_BIT_NONE , ///< 28 invalid + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_NW, ///< 29 SLOPE_STEEP_N -> inclined for diagonal track + TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_SE, ///< 30 SLOPE_STEEP_E -> inclined for diagonal track +};