# elrail_data.h

Go to the documentation of this file.

    00001 /* $Id: elrail_data.h 17596 2009-09-20 23:11:01Z smatz $ */
    00002
    00003 /*
    00004  * This file is part of OpenTTD.
    00005  * 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.
    00006  * 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.
    00007  * 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 <http://www.gnu.org/licenses/>.
    00008  */
    00009
    00013 #ifndef ELRAIL_DATA_H
    00014 #define ELRAIL_DATA_H
    00015
    00018 enum TLG {
    00019   XEVEN_YEVEN = 0,
    00020   XEVEN_YODD  = 1,
    00021   XODD_YEVEN  = 2,
    00022   XODD_YODD   = 3,
    00023   TLG_END
    00024 };
    00025
    00029 enum TileSource {
    00030   TS_HOME      = 0,
    00031   TS_NEIGHBOUR = 1,
    00032
    00033   TS_END
    00034 };
    00035
    00036 enum {
    00037   NUM_TRACKS_AT_PCP = 6
    00038 };
    00039
    00041 static const byte AllowedPPPonPCP[DIAGDIR_END] = {
    00042   1 << DIR_N | 1 << DIR_E  | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W  | 1 << DIR_NW,
    00043   1 << DIR_N | 1 << DIR_NE | 1 << DIR_E  | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
    00044   1 << DIR_N | 1 << DIR_E  | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W  | 1 << DIR_NW,
    00045   1 << DIR_N | 1 << DIR_NE | 1 << DIR_E  | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
    00046 };
    00047
    00051 static const byte OwnedPPPonPCP[DIAGDIR_END] = {
    00052   1 << DIR_SE | 1 << DIR_S  | 1 << DIR_SW | 1 << DIR_W,
    00053   1 << DIR_N  | 1 << DIR_SW | 1 << DIR_W  | 1 << DIR_NW,
    00054   1 << DIR_N  | 1 << DIR_NE | 1 << DIR_E  | 1 << DIR_NW,
    00055   1 << DIR_NE | 1 << DIR_E  | 1 << DIR_SE | 1 << DIR_S
    00056 };
    00057
    00059 static const DiagDirection PCPpositions[TRACK_END][2] = {
    00060   {DIAGDIR_NE, DIAGDIR_SW}, // X
    00061   {DIAGDIR_SE, DIAGDIR_NW}, // Y
    00062   {DIAGDIR_NW, DIAGDIR_NE}, // UPPER
    00063   {DIAGDIR_SE, DIAGDIR_SW}, // LOWER
    00064   {DIAGDIR_SW, DIAGDIR_NW}, // LEFT
    00065   {DIAGDIR_NE, DIAGDIR_SE}, // RIGHT
    00066 };
    00067
    00068 #define PCP_NOT_ON_TRACK 0xFF
    00069
    00073 static const byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = {
    00074   {    // X
    00075     1 << DIR_NE | 1 << DIR_SE | 1 << DIR_NW, // NE
    00076     PCP_NOT_ON_TRACK,                        // SE
    00077     1 << DIR_SE | 1 << DIR_SW | 1 << DIR_NW, // SW
    00078     PCP_NOT_ON_TRACK                         // NE
    00079   }, { // Y
    00080     PCP_NOT_ON_TRACK,
    00081     1 << DIR_NE | 1 << DIR_SE | 1 << DIR_SW,
    00082     PCP_NOT_ON_TRACK,
    00083     1 << DIR_SW | 1 << DIR_NW | 1 << DIR_NE
    00084   }, { // UPPER
    00085     1 << DIR_E | 1 << DIR_N | 1 << DIR_S,
    00086     PCP_NOT_ON_TRACK,
    00087     PCP_NOT_ON_TRACK,
    00088     1 << DIR_W | 1 << DIR_N | 1 << DIR_S
    00089   }, { // LOWER
    00090     PCP_NOT_ON_TRACK,
    00091     1 << DIR_E | 1 << DIR_N | 1 << DIR_S,
    00092     1 << DIR_W | 1 << DIR_N | 1 << DIR_S,
    00093     PCP_NOT_ON_TRACK
    00094   }, { // LEFT
    00095     PCP_NOT_ON_TRACK,
    00096     PCP_NOT_ON_TRACK,
    00097     1 << DIR_S | 1 << DIR_E | 1 << DIR_W,
    00098     1 << DIR_N | 1 << DIR_E | 1 << DIR_W
    00099   }, { // RIGHT
    00100     1 << DIR_N | 1 << DIR_E | 1 << DIR_W,
    00101     1 << DIR_S | 1 << DIR_E | 1 << DIR_W,
    00102     PCP_NOT_ON_TRACK,
    00103     PCP_NOT_ON_TRACK
    00104   }
    00105 };
    00106 #undef PCP_NOT_ON_TRACK
    00107
    00108
    00109 #define NUM_IGNORE_GROUPS 3
    00110 #define IGNORE_NONE 0xFF
    00111
    00114 static const byte IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END] = {
    00115   {   // Ignore group 1, X and Y tracks
    00116     {     // X even, Y even
    00117       IGNORE_NONE,
    00118       1 << DIR_NE | 1 << DIR_SW,
    00119       1 << DIR_NW | 1 << DIR_SE,
    00120       IGNORE_NONE
    00121     }, { // X even, Y odd
    00122       IGNORE_NONE,
    00123       IGNORE_NONE,
    00124       1 << DIR_NW | 1 << DIR_SE,
    00125       1 << DIR_NE | 1 << DIR_SW
    00126     }, { // X odd,  Y even
    00127       1 << DIR_NW | 1 << DIR_SE,
    00128       1 << DIR_NE | 1 << DIR_SW,
    00129       IGNORE_NONE,
    00130       IGNORE_NONE
    00131     }, { // X odd,  Y odd
    00132       1 << DIR_NW | 1 << DIR_SE,
    00133       IGNORE_NONE,
    00134       IGNORE_NONE,
    00135       1 << DIR_NE | 1 << DIR_SW
    00136     }
    00137   },
    00138   {   // Ignore group 2, LEFT and RIGHT tracks
    00139     {
    00140       1 << DIR_E | 1 << DIR_W,
    00141       IGNORE_NONE,
    00142       IGNORE_NONE,
    00143       1 << DIR_E | 1 << DIR_W
    00144     }, {
    00145       IGNORE_NONE,
    00146       1 << DIR_E | 1 << DIR_W,
    00147       1 << DIR_E | 1 << DIR_W,
    00148       IGNORE_NONE
    00149     }, {
    00150       IGNORE_NONE,
    00151       1 << DIR_E | 1 << DIR_W,
    00152       1 << DIR_E | 1 << DIR_W,
    00153       IGNORE_NONE
    00154     }, {
    00155       1 << DIR_E | 1 << DIR_W,
    00156       IGNORE_NONE,
    00157       IGNORE_NONE,
    00158       1 << DIR_E | 1 << DIR_W
    00159     }
    00160   },
    00161   {   // Ignore group 3, UPPER and LOWER tracks
    00162     {
    00163       1 << DIR_N | 1 << DIR_S,
    00164       1 << DIR_N | 1 << DIR_S,
    00165       IGNORE_NONE,
    00166       IGNORE_NONE
    00167     }, {
    00168       IGNORE_NONE,
    00169       IGNORE_NONE,
    00170       1 << DIR_N | 1 << DIR_S,
    00171       1 << DIR_N | 1 << DIR_S
    00172     }, {
    00173       IGNORE_NONE,
    00174       IGNORE_NONE,
    00175       1 << DIR_N | 1 << DIR_S ,
    00176       1 << DIR_N | 1 << DIR_S
    00177     }, {
    00178       1 << DIR_N | 1 << DIR_S,
    00179       1 << DIR_N | 1 << DIR_S,
    00180       IGNORE_NONE,
    00181       IGNORE_NONE
    00182     }
    00183   }
    00184 };
    00185
    00186 #undef NO_IGNORE
    00187
    00189 static const byte DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = {
    00190   {1 << DIR_SW | 1 << DIR_NE, 0,           1 << DIR_SW | 1 << DIR_NE, 0          }, // X
    00191   {0,           1 << DIR_NW | 1 << DIR_SE, 0,           1 << DIR_NW | 1 << DIR_SE}, // Y
    00192   {1 << DIR_W | 1 << DIR_E,  0,           0,           1 << DIR_W | 1 << DIR_E }, // UPPER
    00193   {0,           1 << DIR_W | 1 << DIR_E,  1 << DIR_W | 1 << DIR_E,  0          }, // LOWER
    00194   {0,           0,           1 << DIR_S | 1 << DIR_N,  1 << DIR_N | 1 << DIR_S }, // LEFT
    00195   {1 << DIR_S | 1 << DIR_N,  1 << DIR_S | 1 << DIR_N,  0,           0,         }, // RIGHT
    00196 };
    00197
    00198 /* This array stores which track bits can meet at a tile edge */
    00199 static const Track TracksAtPCP[DIAGDIR_END][NUM_TRACKS_AT_PCP] = {
    00200   {TRACK_X, TRACK_X, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
    00201   {TRACK_Y, TRACK_Y, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
    00202   {TRACK_X, TRACK_X, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
    00203   {TRACK_Y, TRACK_Y, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
    00204 };
    00205
    00206 /* takes each of the 6 track bits from the array above and
    00207  * assigns it to the home tile or neighbour tile */
    00208 static const TileSource TrackSourceTile[DIAGDIR_END][NUM_TRACKS_AT_PCP] = {
    00209   {TS_HOME, TS_NEIGHBOUR, TS_HOME     , TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME     },
    00210   {TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME     , TS_NEIGHBOUR, TS_HOME     },
    00211   {TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME     , TS_HOME     , TS_NEIGHBOUR},
    00212   {TS_HOME, TS_NEIGHBOUR, TS_HOME     , TS_NEIGHBOUR, TS_HOME     , TS_NEIGHBOUR},
    00213 };
    00214
    00215 /* Several PPPs maybe exist, here they are sorted in order of preference. */
    00216 static const Direction PPPorder[DIAGDIR_END][TLG_END][DIR_END] = {    //  X  -  Y
    00217   {   // PCP 0
    00218     {DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_N, DIR_E, DIR_S, DIR_W}, // evn - evn
    00219     {DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_S, DIR_W, DIR_N, DIR_E}, // evn - odd
    00220     {DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_S, DIR_W, DIR_N, DIR_E}, // odd - evn
    00221     {DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_N, DIR_E, DIR_S, DIR_W}, // odd - odd
    00222   }, {// PCP 1
    00223     {DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_S, DIR_E, DIR_N, DIR_W}, // evn - evn
    00224     {DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_N, DIR_W, DIR_S, DIR_E}, // evn - odd
    00225     {DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_N, DIR_W, DIR_S, DIR_E}, // odd - evn
    00226     {DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_S, DIR_E, DIR_N, DIR_W}, // odd - odd
    00227   }, {// PCP 2
    00228     {DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_S, DIR_W, DIR_N, DIR_E}, // evn - evn
    00229     {DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_N, DIR_E, DIR_S, DIR_W}, // evn - odd
    00230     {DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_N, DIR_E, DIR_S, DIR_W}, // odd - evn
    00231     {DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_S, DIR_W, DIR_N, DIR_E}, // odd - odd
    00232   }, {// PCP 3
    00233     {DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_N, DIR_W, DIR_S, DIR_E}, // evn - evn
    00234     {DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_S, DIR_E, DIR_N, DIR_W}, // evn - odd
    00235     {DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_S, DIR_E, DIR_N, DIR_W}, // odd - evn
    00236     {DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_N, DIR_W, DIR_S, DIR_E}, // odd - odd
    00237   }
    00238 };
    00239 /* Geometric placement of the PCP relative to the tile origin */
    00240 static const int8 x_pcp_offsets[DIAGDIR_END] = {0,  8, 16, 8};
    00241 static const int8 y_pcp_offsets[DIAGDIR_END] = {8, 16,  8, 0};
    00242 /* Geometric placement of the PPP relative to the PCP*/
    00243 static const int8 x_ppp_offsets[DIR_END] = {-2, -4, -2,  0,  2,  4,  2,  0};
    00244 static const int8 y_ppp_offsets[DIR_END] = {-2,  0,  2,  4,  2,  0, -2, -4};
    00245
    00249 enum PylonSpriteOffset {
    00250   PSO_Y_NE,
    00251   PSO_Y_SW,
    00252   PSO_X_NW,
    00253   PSO_X_SE,
    00254   PSO_EW_N,
    00255   PSO_EW_S,
    00256   PSO_NS_W,
    00257   PSO_NS_E,
    00258 };
    00259
    00260 /* The type of pylon to draw at each PPP */
    00261 static const uint8 pylon_sprites[] = {
    00262   PSO_EW_N,
    00263   PSO_Y_NE,
    00264   PSO_NS_E,
    00265   PSO_X_SE,
    00266   PSO_EW_S,
    00267   PSO_Y_SW,
    00268   PSO_NS_W,
    00269   PSO_X_NW,
    00270 };
    00271
    00275 enum WireSpriteOffset {
    00276   WSO_X_SHORT,
    00277   WSO_Y_SHORT,
    00278   WSO_EW_SHORT,
    00279   WSO_NS_SHORT,
    00280   WSO_X_SHORT_DOWN,
    00281   WSO_Y_SHORT_UP,
    00282   WSO_X_SHORT_UP,
    00283   WSO_Y_SHORT_DOWN,
    00284
    00285   WSO_X_SW,
    00286   WSO_Y_SE,
    00287   WSO_EW_E,
    00288   WSO_NS_S,
    00289   WSO_X_SW_DOWN,
    00290   WSO_Y_SE_UP,
    00291   WSO_X_SW_UP,
    00292   WSO_Y_SE_DOWN,
    00293
    00294   WSO_X_NE,
    00295   WSO_Y_NW,
    00296   WSO_EW_W,
    00297   WSO_NS_N,
    00298   WSO_X_NE_DOWN,
    00299   WSO_Y_NW_UP,
    00300   WSO_X_NE_UP,
    00301   WSO_Y_NW_DOWN,
    00302
    00303   WSO_ENTRANCE_NE,
    00304   WSO_ENTRANCE_SE,
    00305   WSO_ENTRANCE_SW,
    00306   WSO_ENTRANCE_NW,
    00307 };
    00308
    00309 struct SortableSpriteStruct {
    00310   uint8 image_offset;
    00311   int8 x_offset;
    00312   int8 y_offset;
    00313   int8 x_size;
    00314   int8 y_size;
    00315   int8 z_size;
    00316   int8 z_offset;
    00317 };
    00318
    00319 enum {
    00321   ELRAIL_ELEVATION = 10,
    00323   ELRAIL_ELEVRAISE = ELRAIL_ELEVATION + TILE_HEIGHT
    00324 };
    00325
    00326 static const SortableSpriteStruct CatenarySpriteData[] = {
    00327 /* X direction
    00328    * Flat tiles:
    00329      * Wires */
    00330   { WSO_X_SW,          0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00331   { WSO_X_NE,          0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00332   { WSO_X_SHORT,       0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00333
    00334   /* "up" tiles
    00335      * Wires */
    00336   { WSO_X_SW_UP,       0,  7, 15,  8,  1, ELRAIL_ELEVRAISE },
    00337   { WSO_X_NE_UP,       0,  7, 15,  8,  1, ELRAIL_ELEVRAISE },
    00338   { WSO_X_SHORT_UP,    0,  7, 15,  8,  1, ELRAIL_ELEVRAISE },
    00339
    00340   /* "down" tiles
    00341      * Wires */
    00342   { WSO_X_SW_DOWN,     0,  7, 15,  8,  1, ELRAIL_ELEVATION },
    00343   { WSO_X_NE_DOWN,     0,  7, 15,  8,  1, ELRAIL_ELEVATION },
    00344   { WSO_X_SHORT_DOWN,  0,  7, 15,  8,  1, ELRAIL_ELEVATION },
    00345
    00346
    00347 /* Y direction
    00348    * Flat tiles:
    00349      * Wires */
    00350   { WSO_Y_SE,          7,  0,  1, 15,  1, ELRAIL_ELEVATION },
    00351   { WSO_Y_NW,          7,  0,  1, 15,  1, ELRAIL_ELEVATION },
    00352   { WSO_Y_SHORT,       7,  0,  1, 15,  1, ELRAIL_ELEVATION },
    00353
    00354   /* "up" tiles
    00355      * Wires */
    00356   { WSO_Y_SE_UP,       7,  0,  8, 15,  1, ELRAIL_ELEVRAISE },
    00357   { WSO_Y_NW_UP,       7,  0,  8, 15,  1, ELRAIL_ELEVRAISE },
    00358   { WSO_Y_SHORT_UP,    7,  0,  8, 15,  1, ELRAIL_ELEVRAISE },
    00359
    00360   /* "down" tiles
    00361      * Wires */
    00362   { WSO_Y_SE_DOWN,     7,  0,  8, 15,  1, ELRAIL_ELEVATION },
    00363   { WSO_Y_NW_DOWN,     7,  0,  8, 15,  1, ELRAIL_ELEVATION },
    00364   { WSO_Y_SHORT_DOWN,  7,  0,  8, 15,  1, ELRAIL_ELEVATION },
    00365
    00366 /* NS Direction */
    00367   { WSO_NS_SHORT,      8,  0,  8,  8,  1, ELRAIL_ELEVATION },
    00368   { WSO_NS_SHORT,      0,  8,  8,  8,  1, ELRAIL_ELEVATION },
    00369
    00370   { WSO_NS_N,          8,  0,  8,  8,  1, ELRAIL_ELEVATION },
    00371   { WSO_NS_N,          0,  8,  8,  8,  1, ELRAIL_ELEVATION },
    00372
    00373   { WSO_NS_S,          8,  0,  8,  8,  1, ELRAIL_ELEVATION },
    00374   { WSO_NS_S,          0,  8,  8,  8,  1, ELRAIL_ELEVATION },
    00375
    00376 /* EW Direction */
    00377   { WSO_EW_SHORT,      7,  0,  1,  1,  1, ELRAIL_ELEVATION },
    00378   { WSO_EW_SHORT,     15,  8,  3,  3,  1, ELRAIL_ELEVATION },
    00379
    00380   { WSO_EW_W,          7,  0,  1,  1,  1, ELRAIL_ELEVATION },
    00381   { WSO_EW_W,         15,  8,  3,  3,  1, ELRAIL_ELEVATION },
    00382
    00383   { WSO_EW_E,          7,  0,  1,  1,  1, ELRAIL_ELEVATION },
    00384   { WSO_EW_E,         15,  8,  3,  3,  1, ELRAIL_ELEVATION }
    00385 };
    00386
    00387 static const SortableSpriteStruct CatenarySpriteData_Depot[] = {
    00388   { WSO_ENTRANCE_NE,   0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00389   { WSO_ENTRANCE_SE,   7,  0,  1, 15,  1, ELRAIL_ELEVATION },
    00390   { WSO_ENTRANCE_SW,   0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00391   { WSO_ENTRANCE_NW,   7,  0,  1, 15,  1, ELRAIL_ELEVATION }
    00392 };
    00393
    00394 static const SortableSpriteStruct CatenarySpriteData_Tunnel[] = {
    00395   { WSO_ENTRANCE_NE,   0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00396   { WSO_ENTRANCE_SE,   7,  0,  1, 15,  1, ELRAIL_ELEVATION },
    00397   { WSO_ENTRANCE_SW,   0,  7, 15,  1,  1, ELRAIL_ELEVATION },
    00398   { WSO_ENTRANCE_NW,   7,  0,  1, 15,  1, ELRAIL_ELEVATION }
    00399 };
    00400
    00401
    00413 enum CatenarySprite {
    00414   WIRE_X_FLAT_SW,
    00415   WIRE_X_FLAT_NE,
    00416   WIRE_X_FLAT_BOTH,
    00417
    00418   WIRE_X_UP_SW,
    00419   WIRE_X_UP_NE,
    00420   WIRE_X_UP_BOTH,
    00421
    00422   WIRE_X_DOWN_SW,
    00423   WIRE_X_DOWN_NE,
    00424   WIRE_X_DOWN_BOTH,
    00425
    00426   WIRE_Y_FLAT_SE,
    00427   WIRE_Y_FLAT_NW,
    00428   WIRE_Y_FLAT_BOTH,
    00429
    00430   WIRE_Y_UP_SE,
    00431   WIRE_Y_UP_NW,
    00432   WIRE_Y_UP_BOTH,
    00433
    00434   WIRE_Y_DOWN_SE,
    00435   WIRE_Y_DOWN_NW,
    00436   WIRE_Y_DOWN_BOTH,
    00437
    00438   WIRE_NS_W_BOTH,
    00439   WIRE_NS_E_BOTH,
    00440
    00441   WIRE_NS_W_N,
    00442   WIRE_NS_E_N,
    00443
    00444   WIRE_NS_W_S,
    00445   WIRE_NS_E_S,
    00446
    00447   WIRE_EW_N_BOTH,
    00448   WIRE_EW_S_BOTH,
    00449
    00450   WIRE_EW_N_W,
    00451   WIRE_EW_S_W,
    00452
    00453   WIRE_EW_N_E,
    00454   WIRE_EW_S_E,
    00455
    00456   INVALID_CATENARY = 0xFF
    00457 };
    00458
    00459 /* Selects a Wire (with white and grey ends) depending on whether:
    00460  * a) none (should never happen)
    00461  * b) the first
    00462  * c) the second
    00463  * d) both
    00464  * PCP exists.*/
    00465 static const CatenarySprite Wires[5][TRACK_END][4] = {
    00466   { // Tileh == 0
    00467     {INVALID_CATENARY, WIRE_X_FLAT_NE,   WIRE_X_FLAT_SW,   WIRE_X_FLAT_BOTH},
    00468     {INVALID_CATENARY, WIRE_Y_FLAT_SE,   WIRE_Y_FLAT_NW,   WIRE_Y_FLAT_BOTH},
    00469     {INVALID_CATENARY, WIRE_EW_N_W,      WIRE_EW_N_E,      WIRE_EW_N_BOTH},
    00470     {INVALID_CATENARY, WIRE_EW_S_E,      WIRE_EW_S_W,      WIRE_EW_S_BOTH},
    00471     {INVALID_CATENARY, WIRE_NS_W_S,      WIRE_NS_W_N,      WIRE_NS_W_BOTH},
    00472     {INVALID_CATENARY, WIRE_NS_E_N,      WIRE_NS_E_S,      WIRE_NS_E_BOTH},
    00473   }, { // Tileh == 3
    00474     {INVALID_CATENARY, WIRE_X_UP_NE,     WIRE_X_UP_SW,     WIRE_X_UP_BOTH},
    00475     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00476     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00477     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00478     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00479     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00480   }, { // Tileh == 6
    00481     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00482     {INVALID_CATENARY, WIRE_Y_UP_SE,     WIRE_Y_UP_NW,     WIRE_Y_UP_BOTH},
    00483     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00484     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00485     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00486     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00487   }, { // Tileh == 9
    00488     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00489     {INVALID_CATENARY, WIRE_Y_DOWN_SE,   WIRE_Y_DOWN_NW,   WIRE_Y_DOWN_BOTH},
    00490     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00491     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00492     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00493     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00494   }, { // Tileh == 12
    00495     {INVALID_CATENARY, WIRE_X_DOWN_NE,   WIRE_X_DOWN_SW,   WIRE_X_DOWN_BOTH},
    00496     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00497     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00498     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00499     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00500     {INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
    00501   }
    00502 };
    00503
    00504 #endif /* ELRAIL_DATA_H */