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 */

Generated on Wed Feb 17 23:06:53 2010 for OpenTTD by  doxygen 1.6.1