# elrail_data.h

Go to the documentation of this file.

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