(svn r7759) -Merge: makefile rewrite. This merge features:

- A proper ./configure, so everything needs to be configured only once, not for every make.
 - Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies.
 - A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC.
 - Proper support for OSX universal binaries.
 - Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files.
 - Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files.

Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
This commit is contained in:
rubidium
2007-01-02 19:19:48 +00:00
parent 3d32fd3f4b
commit 013df98f79
448 changed files with 8150 additions and 6127 deletions

480
src/table/ai_rail.h Normal file
View File

@@ -0,0 +1,480 @@
/* $Id$ */
typedef struct {
byte mode;
byte attr;
TileIndexDiffC tileoffs;
} AiDefaultBlockData;
typedef struct {
byte p0;
byte p1;
byte p2;
byte p3;
byte dir;
AiDefaultBlockData data[VARARRAY_SIZE];
} AiDefaultRailBlock;
typedef struct {
byte dir;
AiDefaultBlockData data[VARARRAY_SIZE];
} AiDefaultRoadBlock;
#define MKHDR(a,b,c,d,e) a,b,c,d,e,{
#define MKDEPOT(a, b, c) {0, a, {b, c}}
#define MKSTATION(a, b, c) {1, a, {b, c}}
#define MKRAIL(a, b, c) {2, a, {b, c}}
#define MKCLRRAIL(a, b, c) {3, a, {b, c}}
#define MKEND {4, 0, {0, 0}}}
static const AiDefaultRailBlock _raildata_ai_0 = {
MKHDR(1, 2, 1, 0, 1)
MKDEPOT(2, -1, 1),
MKSTATION(0x15, 0, -1),
MKRAIL(0x26, 0, 1),
MKCLRRAIL(1, 0, 2),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_1 = {
MKHDR(1, 2, 1, 0, 3)
MKDEPOT(2, -1, -1),
MKRAIL(0x26, 0, -1),
MKSTATION(0x15, 0, 0),
MKCLRRAIL(3, 0, -2),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_2 = {
MKHDR(1, 2, 1, 0, 0)
MKDEPOT(1, -1, -1),
MKRAIL(0x15, -1, 0),
MKSTATION(0x14, 0, 0),
MKCLRRAIL(0, -2, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_3 = {
MKHDR(1, 2, 1, 0, 2)
MKDEPOT(1, 1, -1),
MKRAIL(0x15, 1, 0),
MKSTATION(0x14, -1, 0),
MKCLRRAIL(2, 2, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_4 = {
MKHDR(1, 2, 2, 0, 255)
MKSTATION(0x15, 0, 0),
MKCLRRAIL(3, 0, -1),
MKCLRRAIL(1, 0, 2),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_5 = {
MKHDR(1, 2, 2, 0, 255)
MKSTATION(0x14, 0, 0),
MKCLRRAIL(0, -1, 0),
MKCLRRAIL(2, 2, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_6 = {
MKHDR(2, 3, 1, 0, 1)
MKSTATION(0x27, 0, -2),
MKRAIL(0xC2, 0, 1),
MKRAIL(0xC2, 1, 1),
MKRAIL(0x1A, 0, 2),
MKRAIL(0x26, 1, 2),
MKDEPOT(3, 1, 3),
MKCLRRAIL(1, 0, 3),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_7 = {
MKHDR(2, 3, 1, 0, 3)
MKDEPOT(1, 0, -3),
MKRAIL(0x1A, 0, -2),
MKRAIL(0x26, 1, -2),
MKRAIL(0xC2, 0, -1),
MKRAIL(0xC2, 1, -1),
MKSTATION(0x27, 0, 0),
MKCLRRAIL(3, 1, -3),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_8 = {
MKHDR(2, 3, 1, 0, 2)
MKSTATION(0x26, -2, 0),
MKRAIL(0xC1, 1, 0),
MKRAIL(0xC1, 1, 1),
MKRAIL(0x29, 2, 0),
MKRAIL(0x15, 2, 1),
MKDEPOT(0, 3, 0),
MKCLRRAIL(2, 3, 1),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_9 = {
MKHDR(2, 3, 1, 0, 0)
MKDEPOT(2, -3, -1),
MKRAIL(0x29, -2, -1),
MKRAIL(0x15, -2, 0),
MKRAIL(0xC1, -1, -1),
MKRAIL(0xC1, -1, 0),
MKSTATION(0x26, 0, -1),
MKCLRRAIL(0, -3, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_10 = {
MKHDR(2, 3, 2, 0, 255)
MKRAIL(0x1A, 0, -3),
MKRAIL(0x20, 1, -3),
MKRAIL(0xC2, 0, -2),
MKRAIL(0xC2, 1, -2),
MKSTATION(0x27, 0, -1),
MKRAIL(0xC2, 0, 2),
MKRAIL(0xC2, 1, 2),
MKRAIL(0x1A, 0, 3),
MKRAIL(0x4, 1, 3),
MKCLRRAIL(3, 0, -4),
MKCLRRAIL(1, 0, 4),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_11 = {
MKHDR(2, 3, 2, 0, 255)
MKRAIL(0x29, -3, 0),
MKRAIL(0x10, -3, 1),
MKRAIL(0xC1, -2, 0),
MKRAIL(0xC1, -2, 1),
MKSTATION(0x26, -1, 0),
MKRAIL(0xC1, 2, 0),
MKRAIL(0xC1, 2, 1),
MKRAIL(0x29, 3, 0),
MKRAIL(0x4, 3, 1),
MKCLRRAIL(0, -4, 0),
MKCLRRAIL(2, 4, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_12 = {
MKHDR(2, 3, 2, 1, 3)
MKRAIL(0x88, -1, -3),
MKRAIL(0x6, 0, -3),
MKRAIL(0x2, -1, -2),
MKRAIL(0x42, 0, -2),
MKRAIL(0x2, -1, -1),
MKRAIL(0x2, 0, -1),
MKRAIL(0x2, -1, 0),
MKRAIL(0x2, 0, 0),
MKRAIL(0x82, -1, 1),
MKRAIL(0x2, 0, 1),
MKRAIL(0xA, -1, 2),
MKRAIL(0x44, 0, 2),
MKCLRRAIL(3, 0, -4),
MKCLRRAIL(1, -1, 3),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_13 = {
MKHDR(2, 3, 2, 1, 0)
MKRAIL(0x21, -3, 0),
MKRAIL(0x50, -3, 1),
MKRAIL(0x81, -2, 0),
MKRAIL(0x1, -2, 1),
MKRAIL(0x1, -1, 0),
MKRAIL(0x1, -1, 1),
MKRAIL(0x1, 0, 0),
MKRAIL(0x1, 0, 1),
MKRAIL(0x1, 1, 0),
MKRAIL(0x41, 1, 1),
MKRAIL(0xA0, 2, 0),
MKRAIL(0x11, 2, 1),
MKCLRRAIL(0, -4, 0),
MKCLRRAIL(2, 3, 1),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_14 = {
MKHDR(2, 3, 2, 1, 1)
MKRAIL(0x88, -1, -3),
MKRAIL(0x6, 0, -3),
MKRAIL(0x2, -1, -2),
MKRAIL(0x42, 0, -2),
MKRAIL(0x2, -1, -1),
MKRAIL(0x2, 0, -1),
MKRAIL(0x2, -1, 0),
MKRAIL(0x2, 0, 0),
MKRAIL(0x82, -1, 1),
MKRAIL(0x2, 0, 1),
MKRAIL(0xA, -1, 2),
MKRAIL(0x44, 0, 2),
MKCLRRAIL(1, -1, 3),
MKCLRRAIL(3, 0, -4),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_15 = {
MKHDR(2, 3, 2, 1, 2)
MKRAIL(0x21, -3, 0),
MKRAIL(0x50, -3, 1),
MKRAIL(0x81, -2, 0),
MKRAIL(0x1, -2, 1),
MKRAIL(0x1, -1, 0),
MKRAIL(0x1, -1, 1),
MKRAIL(0x1, 0, 0),
MKRAIL(0x1, 0, 1),
MKRAIL(0x1, 1, 0),
MKRAIL(0x41, 1, 1),
MKRAIL(0xA0, 2, 0),
MKRAIL(0x11, 2, 1),
MKCLRRAIL(2, 3, 1),
MKCLRRAIL(0, -4, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_16 = {
MKHDR(1, 3, 1, 0, 1)
MKSTATION(0x17, 0, -2),
MKRAIL(0x1A, 0, 1),
MKCLRRAIL(1, 0, 2),
MKDEPOT(0, 1, 1),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_17 = {
MKHDR(1, 3, 1, 0, 3)
MKCLRRAIL(3, 0, -2),
MKRAIL(0x26, 0, -1),
MKDEPOT(2, -1, -1),
MKSTATION(0x17, 0, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_18 = {
MKHDR(1, 3, 1, 0, 0)
MKCLRRAIL(0, -2, 0),
MKRAIL(0x29, -1, 0),
MKDEPOT(3, -1, 1),
MKSTATION(0x16, 0, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_19 = {
MKHDR(1, 3, 1, 0, 2)
MKSTATION(0x16, -2, 0),
MKDEPOT(2, 0, -1),
MKRAIL(0x20, 1, -1),
MKRAIL(0x15, 1, 0),
MKCLRRAIL(2, 2, 0),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_20 = {
MKHDR(2, 3, 1, 0, 1)
MKSTATION(0x26, -2, 0),
MKRAIL(0xC1, 1, 0),
MKRAIL(0xC1, 1, 1),
MKRAIL(0x26, 2, 0),
MKRAIL(0x26, 2, 1),
MKDEPOT(1, 2, -1),
MKCLRRAIL(1, 2, 2),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_21 = {
MKHDR(2, 3, 1, 0, 3)
MKDEPOT(2, -3, -1),
MKRAIL(0x3F, -2, -1),
MKRAIL(0x10, -2, 0),
MKRAIL(0xC1, -1, -1),
MKRAIL(0xC1, -1, 0),
MKSTATION(0x26, 0, -1),
MKCLRRAIL(3, -2, -2),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_22 = {
MKHDR(2, 3, 1, 0, 0)
MKSTATION(0x27, 0, -2),
MKRAIL(0xC2, 0, 1),
MKRAIL(0xC2, 1, 1),
MKRAIL(0x15, 0, 2),
MKRAIL(0x4, 1, 2),
MKRAIL(0x15, -1, 2),
MKDEPOT(1, -1, 1),
MKCLRRAIL(0, -2, 2),
MKEND
};
static const AiDefaultRailBlock _raildata_ai_23 = {
MKHDR(2, 3, 1, 0, 2)
MKDEPOT(1, 0, -3),
MKRAIL(0x1A, 0, -2),
MKRAIL(0x29, 1, -2),
MKRAIL(0xC2, 0, -1),
MKRAIL(0xC2, 1, -1),
MKSTATION(0x27, 0, 0),
MKCLRRAIL(2, 2, -2),
MKEND
};
static const AiDefaultRailBlock * const _default_rail_track_data[] = {
&_raildata_ai_0,
&_raildata_ai_1,
&_raildata_ai_2,
&_raildata_ai_3,
&_raildata_ai_4,
&_raildata_ai_5,
&_raildata_ai_6,
&_raildata_ai_7,
&_raildata_ai_8,
&_raildata_ai_9,
&_raildata_ai_10,
&_raildata_ai_11,
&_raildata_ai_12,
&_raildata_ai_13,
&_raildata_ai_14,
&_raildata_ai_15,
&_raildata_ai_16,
&_raildata_ai_17,
&_raildata_ai_18,
&_raildata_ai_19,
&_raildata_ai_20,
&_raildata_ai_21,
&_raildata_ai_22,
&_raildata_ai_23,
NULL
};
#undef MKHDR
#define MKHDR(a) a,{
static const AiDefaultRoadBlock _roaddata_ai_0 = {
MKHDR(0)
MKDEPOT(2, -1,1),
MKSTATION(0x2, -1,0),
MKRAIL(0xC, 0,0),
MKRAIL(0x9, 0,1),
MKCLRRAIL(0, 0,-1),
MKCLRRAIL(0, 1,0),
MKCLRRAIL(0, 1,1),
MKCLRRAIL(0, 0,2),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_1 = {
MKHDR(0)
MKDEPOT(1, 0,-1),
MKSTATION(0x1, 1,-1),
MKRAIL(0x3, 0,0),
MKRAIL(0x9, 1,0),
MKCLRRAIL(0, -1,0),
MKCLRRAIL(0, 0,1),
MKCLRRAIL(0, 1,1),
MKCLRRAIL(0, 2,0),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_2 = {
MKHDR(0)
MKDEPOT(3, 1,1),
MKSTATION(0x3, 0,1),
MKRAIL(0x6, 0,0),
MKRAIL(0xC, 1,0),
MKCLRRAIL(0, -1,0),
MKCLRRAIL(0, 0,-1),
MKCLRRAIL(0, 1,-1),
MKCLRRAIL(0, 2,0),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_3 = {
MKHDR(0)
MKDEPOT(0, 1,0),
MKSTATION(0x0, 1,1),
MKRAIL(0x6, 0,0),
MKRAIL(0x3, 0,1),
MKCLRRAIL(0, 0,-1),
MKCLRRAIL(0, -1,0),
MKCLRRAIL(0, -1,1),
MKCLRRAIL(0, 0,2),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_4 = {
MKHDR(1)
MKSTATION(0x2, -1,0),
MKRAIL(0x8, 0,0),
MKCLRRAIL(0, 0,-1),
MKCLRRAIL(0, 1,0),
MKCLRRAIL(0, 0,1),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_5 = {
MKHDR(1)
MKSTATION(0x3, 0,1),
MKRAIL(0x4, 0,0),
MKCLRRAIL(0, -1,0),
MKCLRRAIL(0, 0,-1),
MKCLRRAIL(0, 1,0),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_6 = {
MKHDR(1)
MKSTATION(0x0, 1,1),
MKRAIL(0x2, 0,1),
MKCLRRAIL(0, 0,0),
MKCLRRAIL(0, -1,0),
MKCLRRAIL(0, 0,2),
MKEND
};
static const AiDefaultRoadBlock _roaddata_ai_7 = {
MKHDR(1)
MKSTATION(0x1, 1,-1),
MKRAIL(0x1, 1,0),
MKCLRRAIL(0, 0,0),
MKCLRRAIL(0, 1,1),
MKCLRRAIL(0, 2,0),
MKEND
};
static const AiDefaultRoadBlock * const _road_default_block_data[] = {
&_roaddata_ai_0,
&_roaddata_ai_1,
&_roaddata_ai_2,
&_roaddata_ai_3,
&_roaddata_ai_4,
&_roaddata_ai_5,
&_roaddata_ai_6,
&_roaddata_ai_7,
NULL
};
#define MKAIR(a, b, c) {0, a, {b, c}}
static const AiDefaultBlockData _airportdata_ai_0[] = {
MKAIR(1, 0, 0),
{1, 0, {0, 0}},
};
static const AiDefaultBlockData _airportdata_ai_1[] = {
MKAIR(0, 0, 0),
{1, 0, {0, 0}}
};
static const AiDefaultBlockData * const _airport_default_block_data[] = {
_airportdata_ai_0, // city airport
_airportdata_ai_1, // country airport
NULL
};

79
src/table/animcursors.h Normal file
View File

@@ -0,0 +1,79 @@
/* $Id$ */
/** @file animcursors.h
* This file defines all the the animated cursors.
* Animated cursors consist of the number of sprites that are
* displayed in a round-robin manner. Each sprite also has a time
* associated that indicates how many ticks the corresponding sprite
* is to be displayed. Currently all this information is recorded in a single
* array. @todo This should be converted into an array of structs on the long run
* All these arrays end up in an array of pointers called _animcursors.
*/
/** Creates two array entries that define one
* status of the cursor.
* @param Sprite The Sprite to be displayed
* @param display_time The Number of ticks to display the sprite
*/
#define ANIM_CURSOR_LINE(Sprite, display_time) Sprite, display_time,
/** This indicates the termination of the cursor list
*/
#define ANIM_CURSOR_END() 0xFFFF
/** Animated cursor elements for demolishion
*/
static const CursorID _demolish_animcursor[] = {
ANIM_CURSOR_LINE(0x2C0, 8)
ANIM_CURSOR_LINE(0x2C1, 8)
ANIM_CURSOR_LINE(0x2C2, 8)
ANIM_CURSOR_LINE(0x2C3, 8)
ANIM_CURSOR_END()
};
/** Animated cursor elements for lower land
*/
static const CursorID _lower_land_animcursor[] = {
ANIM_CURSOR_LINE(0x2BB, 10)
ANIM_CURSOR_LINE(0x2BC, 10)
ANIM_CURSOR_LINE(0x2BD, 29)
ANIM_CURSOR_END()
};
/** Animated cursor elements for raise land
*/
static const CursorID _raise_land_animcursor[] = {
ANIM_CURSOR_LINE(0x2B8, 10)
ANIM_CURSOR_LINE(0x2B9, 10)
ANIM_CURSOR_LINE(0x2BA, 29)
ANIM_CURSOR_END()
};
/** Animated cursor elements for the goto icon
*/
static const CursorID _order_goto_animcursor[] = {
ANIM_CURSOR_LINE(0x2CC, 10)
ANIM_CURSOR_LINE(0x2CD, 10)
ANIM_CURSOR_LINE(0x2CE, 29)
ANIM_CURSOR_END()
};
/** Animated cursor elements for the build signal icon
*/
static const CursorID _build_signals_animcursor[] = {
ANIM_CURSOR_LINE(0x50C, 20)
ANIM_CURSOR_LINE(0x50D, 20)
ANIM_CURSOR_END()
};
/** This is an array of pointers to all the animated cursor
* definitions we have above. This is the only thing that is
* accessed directly from other files
*/
static const CursorID * const _animcursors[] = {
_demolish_animcursor,
_lower_land_animcursor,
_raise_land_animcursor,
_order_goto_animcursor,
_build_signals_animcursor
};

72
src/table/autorail.h Normal file
View File

@@ -0,0 +1,72 @@
/* $Id$ */
/* Rail selection types (directions):
* / \ / \ / \ / \ / \ / \
* / /\ /\ \ /===\ / \ /| \ / |\
* \/ / \ \/ \ / \===/ \| / \ |/
* \ / \ / \ / \ / \ / \ /
* 0 1 2 3 4 5
*/
// mark invalid tiles red
#define RED(c) c | PALETTE_SEL_TILE_RED
// table maps each of the six rail directions and tileh combinations to a sprite
// invalid entries are required to make sure that this array can be quickly accessed
static const int _AutorailTilehSprite[][6] = {
// type 0 1 2 3 4 5
{ 0, 8, 16, 25, 34, 42 }, // tileh = 0
{ 5, 13, RED(22), RED(31), 35, 42 }, // tileh = 1
{ 5, 10, 16, 26, RED(38), RED(46) }, // tileh = 2
{ 5, 9, RED(23), 26, 35, RED(46) }, // tileh = 3
{ 2, 10, RED(19), RED(28), 34, 43 }, // tileh = 4
{ 1, 9, 17, 26, 35, 43 }, // tileh = 5
{ 1, 10, RED(20), 26, RED(38), 43 }, // tileh = 6
{ 1, 9, 17, 26, 35, 43 }, // tileh = 7
{ 2, 13, 17, 25, RED(40), RED(48) }, // tileh = 8
{ 1, 13, 17, RED(32), 35, RED(48) }, // tileh = 9
{ 1, 9, 17, 26, 35, 43 }, // tileh = 10
{ 1, 9, 17, 26, 35, 43 }, // tileh = 11
{ 2, 9, 17, RED(29), RED(40), 43 }, // tileh = 12
{ 1, 9, 17, 26, 35, 43 }, // tileh = 13
{ 1, 9, 17, 26, 35, 43 }, // tileh = 14
{ 0, 1, 2, 3, 4, 5 }, // invalid (15)
{ 0, 1, 2, 3, 4, 5 }, // invalid (16)
{ 0, 1, 2, 3, 4, 5 }, // invalid (17)
{ 0, 1, 2, 3, 4, 5 }, // invalid (18)
{ 0, 1, 2, 3, 4, 5 }, // invalid (19)
{ 0, 1, 2, 3, 4, 5 }, // invalid (20)
{ 0, 1, 2, 3, 4, 5 }, // invalid (21)
{ 0, 1, 2, 3, 4, 5 }, // invalid (22)
{ 6, 11, 17, 27, RED(39), RED(47) }, // tileh = 23
{ 0, 1, 2, 3, 4, 5 }, // invalid (24)
{ 0, 1, 2, 3, 4, 5 }, // invalid (25)
{ 0, 1, 2, 3, 4, 5 }, // invalid (26)
{ 7, 15, RED(24), RED(33), 36, 44 }, // tileh = 27
{ 0, 1, 2, 3, 4, 5 }, // invalid (28)
{ 3, 14, 18, 26, RED(41), RED(49) }, // tileh = 29
{ 4, 12, RED(21), RED(30), 37, 45 } // tileh = 30
};
#undef RED
// maps each pixel of a tile (16x16) to a selection type
// (0,0) is the top corner, (16,16) the bottom corner
static const byte _AutorailPiece[][16] = {
{ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
{ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
{ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
{ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
{ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
{ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
{ 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 },
{ 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 }
};

521
src/table/bridge_land.h Normal file
View File

@@ -0,0 +1,521 @@
/* $Id$ */
/** @file bridge_land.h This file contains all the sprites for bridges
* It consists of a number of arrays.
* <ul><li>_bridge_sprite_table_n_m. Defines all the sprites of a bridge besides the pylons.
* n defines the number of the bridge type, m the number of the section. the highest m for
* each bridge set defines the heads.<br>
* Sprites for middle secionts are arranged in groups of four, the elements are:
* <ol><li>Element containing the track. This element is logically behind the vehicle.</li>
* <li>Element containing the structure that is logically between the vehicle and the camera</li>
* <li>Element containing the pylons.</li></ol>
* First group is for railway in X direction, second for railway in Y direction, two groups each follow for road, monorail and maglev<p>
* <br>Elements for heads are arranged in groups of eight:
* <ol><li>X direction, north end, flat</li>
* <li>Y direction, north end, flat</li>
* <li>X direction, south end, flat</li>
* <li>Y direction, south end, flat</li>
* <li>X direction, north end, sloped</li>
* <li>Y direction, north end, sloped</li>
* <li>X direction, south end, sloped</li>
* <li>Y direction, south end, sloped</li></ol>
* This is repeated 4 times, for rail, road, monorail, maglev</li>
* </ul>
*/
static const PalSpriteID _bridge_sprite_table_2_0[] = {
0x9C3, 0x9C7, 0x9C9, 0x0, 0x9C4, 0x9C8, 0x9CA, 0x0,
0x9C5, 0x9C7, 0x9C9, 0x0, 0x9C6, 0x9C8, 0x9CA, 0x0,
0x10E4, 0x9C7, 0x9C9, 0x0, 0x10E5, 0x9C8, 0x9CA, 0x0,
0x110C, 0x9C7, 0x9C9, 0x0, 0x110D, 0x9C8, 0x9CA, 0x0,
};
static const PalSpriteID _bridge_sprite_table_2_1[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E | PALETTE_TO_STRUCT_WHITE, 0x990 | PALETTE_TO_STRUCT_WHITE, 0x98D | PALETTE_TO_STRUCT_WHITE, 0x98F | PALETTE_TO_STRUCT_WHITE, 0x992 | PALETTE_TO_STRUCT_WHITE, 0x994 | PALETTE_TO_STRUCT_WHITE, 0x991 | PALETTE_TO_STRUCT_WHITE, 0x993 | PALETTE_TO_STRUCT_WHITE,
0x10E7 | PALETTE_TO_STRUCT_WHITE, 0x10E9 | PALETTE_TO_STRUCT_WHITE, 0x10E6 | PALETTE_TO_STRUCT_WHITE, 0x10E8 | PALETTE_TO_STRUCT_WHITE, 0x10EB | PALETTE_TO_STRUCT_WHITE, 0x10ED | PALETTE_TO_STRUCT_WHITE, 0x10EA | PALETTE_TO_STRUCT_WHITE, 0x10EC | PALETTE_TO_STRUCT_WHITE,
0x110F | PALETTE_TO_STRUCT_WHITE, 0x1111 | PALETTE_TO_STRUCT_WHITE, 0x110E | PALETTE_TO_STRUCT_WHITE, 0x1110 | PALETTE_TO_STRUCT_WHITE, 0x1113 | PALETTE_TO_STRUCT_WHITE, 0x1115 | PALETTE_TO_STRUCT_WHITE, 0x1112 | PALETTE_TO_STRUCT_WHITE, 0x1114 | PALETTE_TO_STRUCT_WHITE,
};
static const PalSpriteID _bridge_sprite_table_4_0[] = {
0x9A9, 0x99F, 0x9B1, 0x0, 0x9A5, 0x997, 0x9AD, 0x0,
0x99D, 0x99F, 0x9B1, 0x0, 0x995, 0x997, 0x9AD, 0x0,
0x10F2, 0x99F, 0x9B1, 0x0, 0x10EE, 0x997, 0x9AD, 0x0,
0x111A, 0x99F, 0x9B1, 0x0, 0x1116, 0x997, 0x9AD, 0x0,
};
static const PalSpriteID _bridge_sprite_table_4_1[] = {
0x9AA, 0x9A0, 0x9B2, 0x0, 0x9A6, 0x998, 0x9AE, 0x0,
0x99E, 0x9A0, 0x9B2, 0x0, 0x996, 0x998, 0x9AE, 0x0,
0x10F3, 0x9A0, 0x9B2, 0x0, 0x10EF, 0x998, 0x9AE, 0x0,
0x111B, 0x9A0, 0x9B2, 0x0, 0x1117, 0x998, 0x9AE, 0x0,
};
static const PalSpriteID _bridge_sprite_table_4_2[] = {
0x9AC, 0x9A4, 0x9B4, 0x0, 0x9A8, 0x99C, 0x9B0, 0x0,
0x9A2, 0x9A4, 0x9B4, 0x0, 0x99A, 0x99C, 0x9B0, 0x0,
0x10F5, 0x9A4, 0x9B4, 0x0, 0x10F1, 0x99C, 0x9B0, 0x0,
0x111D, 0x9A4, 0x9B4, 0x0, 0x1119, 0x99C, 0x9B0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_4_3[] = {
0x9AB, 0x9A3, 0x9B3, 0x0, 0x9A7, 0x99B, 0x9AF, 0x0,
0x9A1, 0x9A3, 0x9B3, 0x0, 0x999, 0x99B, 0x9AF, 0x0,
0x10F4, 0x9A3, 0x9B3, 0x0, 0x10F0, 0x99B, 0x9AF, 0x0,
0x111C, 0x9A3, 0x9B3, 0x0, 0x1118, 0x99B, 0x9AF, 0x0,
};
static const PalSpriteID _bridge_sprite_table_4_4[] = {
0x9B6, 0x9BA, 0x9BC, 0x0, 0x9B5, 0x9B9, 0x9BB, 0x0,
0x9B8, 0x9BA, 0x9BC, 0x0, 0x9B7, 0x9B9, 0x9BB, 0x0,
0x10F7, 0x9BA, 0x9BC, 0x0, 0x10F6, 0x9B9, 0x9BB, 0x0,
0x111F, 0x9BA, 0x9BC, 0x0, 0x111E, 0x9B9, 0x9BB, 0x0,
};
static const PalSpriteID _bridge_sprite_table_4_5[] = {
0x9BD, 0x9C1, 0x0, 0x0, 0x9BE, 0x9C2, 0x0, 0x0,
0x9BF, 0x9C1, 0x0, 0x0, 0x9C0, 0x9C2, 0x0, 0x0,
0x10F8, 0x9C1, 0x0, 0x0, 0x10F9, 0x9C2, 0x0, 0x0,
0x1120, 0x9C1, 0x0, 0x0, 0x1121, 0x9C2, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_4_6[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E, 0x990, 0x98D, 0x98F, 0x992, 0x994, 0x991, 0x993,
0x10E7, 0x10E9, 0x10E6, 0x10E8, 0x10EB, 0x10ED, 0x10EA, 0x10EC,
0x110F, 0x1111, 0x110E, 0x1110, 0x1113, 0x1115, 0x1112, 0x1114,
};
static const PalSpriteID _bridge_sprite_table_5_0[] = {
0x9A9 | PALETTE_TO_STRUCT_YELLOW, 0x99F | PALETTE_TO_STRUCT_YELLOW, 0x9B1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x9A5 | PALETTE_TO_STRUCT_YELLOW, 0x997 | PALETTE_TO_STRUCT_YELLOW, 0x9AD | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x99D | PALETTE_TO_STRUCT_YELLOW, 0x99F | PALETTE_TO_STRUCT_YELLOW, 0x9B1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x995 | PALETTE_TO_STRUCT_YELLOW, 0x997 | PALETTE_TO_STRUCT_YELLOW, 0x9AD | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x10F2 | PALETTE_TO_STRUCT_YELLOW, 0x99F | PALETTE_TO_STRUCT_YELLOW, 0x9B1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x10EE | PALETTE_TO_STRUCT_YELLOW, 0x997 | PALETTE_TO_STRUCT_YELLOW, 0x9AD | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x111A | PALETTE_TO_STRUCT_YELLOW, 0x99F | PALETTE_TO_STRUCT_YELLOW, 0x9B1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x1116 | PALETTE_TO_STRUCT_YELLOW, 0x997 | PALETTE_TO_STRUCT_YELLOW, 0x9AD | PALETTE_TO_STRUCT_YELLOW, 0x0,
SPR_PILLARS_BASE + 2
};
static const PalSpriteID _bridge_sprite_table_5_1[] = {
0x9AA | PALETTE_TO_STRUCT_YELLOW, 0x9A0 | PALETTE_TO_STRUCT_YELLOW, 0x9B2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x9A6 | PALETTE_TO_STRUCT_YELLOW, 0x998 | PALETTE_TO_STRUCT_YELLOW, 0x9AE | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x99E | PALETTE_TO_STRUCT_YELLOW, 0x9A0 | PALETTE_TO_STRUCT_YELLOW, 0x9B2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x996 | PALETTE_TO_STRUCT_YELLOW, 0x998 | PALETTE_TO_STRUCT_YELLOW, 0x9AE | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x10F3 | PALETTE_TO_STRUCT_YELLOW, 0x9A0 | PALETTE_TO_STRUCT_YELLOW, 0x9B2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x10EF | PALETTE_TO_STRUCT_YELLOW, 0x998 | PALETTE_TO_STRUCT_YELLOW, 0x9AE | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x111B | PALETTE_TO_STRUCT_YELLOW, 0x9A0 | PALETTE_TO_STRUCT_YELLOW, 0x9B2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x1117 | PALETTE_TO_STRUCT_YELLOW, 0x998 | PALETTE_TO_STRUCT_YELLOW, 0x9AE | PALETTE_TO_STRUCT_YELLOW, 0x0,
SPR_PILLARS_BASE + 3
};
static const PalSpriteID _bridge_sprite_table_5_2[] = {
0x9AC | PALETTE_TO_STRUCT_YELLOW, 0x9A4 | PALETTE_TO_STRUCT_YELLOW, 0x9B4 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x9A8 | PALETTE_TO_STRUCT_YELLOW, 0x99C | PALETTE_TO_STRUCT_YELLOW, 0x9B0 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x9A2 | PALETTE_TO_STRUCT_YELLOW, 0x9A4 | PALETTE_TO_STRUCT_YELLOW, 0x9B4 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x99A | PALETTE_TO_STRUCT_YELLOW, 0x99C | PALETTE_TO_STRUCT_YELLOW, 0x9B0 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x10F5 | PALETTE_TO_STRUCT_YELLOW, 0x9A4 | PALETTE_TO_STRUCT_YELLOW, 0x9B4 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x10F1 | PALETTE_TO_STRUCT_YELLOW, 0x99C | PALETTE_TO_STRUCT_YELLOW, 0x9B0 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x111D | PALETTE_TO_STRUCT_YELLOW, 0x9A4 | PALETTE_TO_STRUCT_YELLOW, 0x9B4 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x1119 | PALETTE_TO_STRUCT_YELLOW, 0x99C | PALETTE_TO_STRUCT_YELLOW, 0x9B0 | PALETTE_TO_STRUCT_YELLOW, 0x0,
SPR_PILLARS_BASE + 3
};
static const PalSpriteID _bridge_sprite_table_5_3[] = {
0x9AB | PALETTE_TO_STRUCT_YELLOW, 0x9A3 | PALETTE_TO_STRUCT_YELLOW, 0x9B3 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x9A7 | PALETTE_TO_STRUCT_YELLOW, 0x99B | PALETTE_TO_STRUCT_YELLOW, 0x9AF | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x9A1 | PALETTE_TO_STRUCT_YELLOW, 0x9A3 | PALETTE_TO_STRUCT_YELLOW, 0x9B3 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x999 | PALETTE_TO_STRUCT_YELLOW, 0x99B | PALETTE_TO_STRUCT_YELLOW, 0x9AF | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x10F4 | PALETTE_TO_STRUCT_YELLOW, 0x9A3 | PALETTE_TO_STRUCT_YELLOW, 0x9B3 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x10F0 | PALETTE_TO_STRUCT_YELLOW, 0x99B | PALETTE_TO_STRUCT_YELLOW, 0x9AF | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x111C | PALETTE_TO_STRUCT_YELLOW, 0x9A3 | PALETTE_TO_STRUCT_YELLOW, 0x9B3 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x1118 | PALETTE_TO_STRUCT_YELLOW, 0x99B | PALETTE_TO_STRUCT_YELLOW, 0x9AF | PALETTE_TO_STRUCT_YELLOW, 0x0,
SPR_PILLARS_BASE + 2
};
static const PalSpriteID _bridge_sprite_table_5_4[] = {
0x9B6 | PALETTE_TO_STRUCT_YELLOW, 0x9BA | PALETTE_TO_STRUCT_YELLOW, 0x9BC | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x9B5 | PALETTE_TO_STRUCT_YELLOW, 0x9B9 | PALETTE_TO_STRUCT_YELLOW, 0x9BB | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x9B8 | PALETTE_TO_STRUCT_YELLOW, 0x9BA | PALETTE_TO_STRUCT_YELLOW, 0x9BC | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x9B7 | PALETTE_TO_STRUCT_YELLOW, 0x9B9 | PALETTE_TO_STRUCT_YELLOW, 0x9BB | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x10F7 | PALETTE_TO_STRUCT_YELLOW, 0x9BA | PALETTE_TO_STRUCT_YELLOW, 0x9BC | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x10F6 | PALETTE_TO_STRUCT_YELLOW, 0x9B9 | PALETTE_TO_STRUCT_YELLOW, 0x9BB | PALETTE_TO_STRUCT_YELLOW, 0x0,
0x111F | PALETTE_TO_STRUCT_YELLOW, 0x9BA | PALETTE_TO_STRUCT_YELLOW, 0x9BC | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x111E | PALETTE_TO_STRUCT_YELLOW, 0x9B9 | PALETTE_TO_STRUCT_YELLOW, 0x9BB | PALETTE_TO_STRUCT_YELLOW, 0x0,
SPR_PILLARS_BASE + 5, 0x0, 0x0, 0x0, SPR_PILLARS_BASE + 4
};
static const PalSpriteID _bridge_sprite_table_5_5[] = {
0x9BD | PALETTE_TO_STRUCT_YELLOW, 0x9C1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0x9BE | PALETTE_TO_STRUCT_YELLOW, 0x9C2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0x9BF | PALETTE_TO_STRUCT_YELLOW, 0x9C1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0x9C0 | PALETTE_TO_STRUCT_YELLOW, 0x9C2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0x10F8 | PALETTE_TO_STRUCT_YELLOW, 0x9C1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0x10F9 | PALETTE_TO_STRUCT_YELLOW, 0x9C2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0x1120 | PALETTE_TO_STRUCT_YELLOW, 0x9C1 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0x1121 | PALETTE_TO_STRUCT_YELLOW, 0x9C2 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0x0, SPR_PILLARS_BASE + 2
};
static const PalSpriteID _bridge_sprite_table_5_6[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E | PALETTE_TO_STRUCT_YELLOW, 0x990 | PALETTE_TO_STRUCT_YELLOW, 0x98D | PALETTE_TO_STRUCT_YELLOW, 0x98F | PALETTE_TO_STRUCT_YELLOW, 0x992 | PALETTE_TO_STRUCT_YELLOW, 0x994 | PALETTE_TO_STRUCT_YELLOW, 0x991 | PALETTE_TO_STRUCT_YELLOW, 0x993 | PALETTE_TO_STRUCT_YELLOW,
0x10E7 | PALETTE_TO_STRUCT_YELLOW, 0x10E9 | PALETTE_TO_STRUCT_YELLOW, 0x10E6 | PALETTE_TO_STRUCT_YELLOW, 0x10E8 | PALETTE_TO_STRUCT_YELLOW, 0x10EB | PALETTE_TO_STRUCT_YELLOW, 0x10ED | PALETTE_TO_STRUCT_YELLOW, 0x10EA | PALETTE_TO_STRUCT_YELLOW, 0x10EC | PALETTE_TO_STRUCT_YELLOW,
0x110F | PALETTE_TO_STRUCT_YELLOW, 0x1111 | PALETTE_TO_STRUCT_YELLOW, 0x110E | PALETTE_TO_STRUCT_YELLOW, 0x1110 | PALETTE_TO_STRUCT_YELLOW, 0x1113 | PALETTE_TO_STRUCT_YELLOW, 0x1115 | PALETTE_TO_STRUCT_YELLOW, 0x1112 | PALETTE_TO_STRUCT_YELLOW, 0x1114 | PALETTE_TO_STRUCT_YELLOW,
0x0, SPR_PILLARS_BASE + 2,
};
static const PalSpriteID _bridge_sprite_table_3_0[] = {
0x9A9 | PALETTE_TO_STRUCT_CONCRETE, 0x99F | PALETTE_TO_STRUCT_CONCRETE, 0x9B1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x9A5 | PALETTE_TO_STRUCT_CONCRETE, 0x997 | PALETTE_TO_STRUCT_CONCRETE, 0x9AD | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x99D | PALETTE_TO_STRUCT_CONCRETE, 0x99F | PALETTE_TO_STRUCT_CONCRETE, 0x9B1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x995 | PALETTE_TO_STRUCT_CONCRETE, 0x997 | PALETTE_TO_STRUCT_CONCRETE, 0x9AD | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x10F2 | PALETTE_TO_STRUCT_CONCRETE, 0x99F | PALETTE_TO_STRUCT_CONCRETE, 0x9B1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x10EE | PALETTE_TO_STRUCT_CONCRETE, 0x997 | PALETTE_TO_STRUCT_CONCRETE, 0x9AD | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x111A | PALETTE_TO_STRUCT_CONCRETE, 0x99F | PALETTE_TO_STRUCT_CONCRETE, 0x9B1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x1116 | PALETTE_TO_STRUCT_CONCRETE, 0x997 | PALETTE_TO_STRUCT_CONCRETE, 0x9AD | PALETTE_TO_STRUCT_CONCRETE, 0x0,
};
static const PalSpriteID _bridge_sprite_table_3_1[] = {
0x9AA | PALETTE_TO_STRUCT_CONCRETE, 0x9A0 | PALETTE_TO_STRUCT_CONCRETE, 0x9B2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x9A6 | PALETTE_TO_STRUCT_CONCRETE, 0x998 | PALETTE_TO_STRUCT_CONCRETE, 0x9AE | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x99E | PALETTE_TO_STRUCT_CONCRETE, 0x9A0 | PALETTE_TO_STRUCT_CONCRETE, 0x9B2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x996 | PALETTE_TO_STRUCT_CONCRETE, 0x998 | PALETTE_TO_STRUCT_CONCRETE, 0x9AE | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x10F3 | PALETTE_TO_STRUCT_CONCRETE, 0x9A0 | PALETTE_TO_STRUCT_CONCRETE, 0x9B2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x10EF | PALETTE_TO_STRUCT_CONCRETE, 0x998 | PALETTE_TO_STRUCT_CONCRETE, 0x9AE | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x111B | PALETTE_TO_STRUCT_CONCRETE, 0x9A0 | PALETTE_TO_STRUCT_CONCRETE, 0x9B2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x1117 | PALETTE_TO_STRUCT_CONCRETE, 0x998 | PALETTE_TO_STRUCT_CONCRETE, 0x9AE | PALETTE_TO_STRUCT_CONCRETE, 0x0,
};
static const PalSpriteID _bridge_sprite_table_3_2[] = {
0x9AC | PALETTE_TO_STRUCT_CONCRETE, 0x9A4 | PALETTE_TO_STRUCT_CONCRETE, 0x9B4 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x9A8 | PALETTE_TO_STRUCT_CONCRETE, 0x99C | PALETTE_TO_STRUCT_CONCRETE, 0x9B0 | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x9A2 | PALETTE_TO_STRUCT_CONCRETE, 0x9A4 | PALETTE_TO_STRUCT_CONCRETE, 0x9B4 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x99A | PALETTE_TO_STRUCT_CONCRETE, 0x99C | PALETTE_TO_STRUCT_CONCRETE, 0x9B0 | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x10F5 | PALETTE_TO_STRUCT_CONCRETE, 0x9A4 | PALETTE_TO_STRUCT_CONCRETE, 0x9B4 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x10F1 | PALETTE_TO_STRUCT_CONCRETE, 0x99C | PALETTE_TO_STRUCT_CONCRETE, 0x9B0 | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x111D | PALETTE_TO_STRUCT_CONCRETE, 0x9A4 | PALETTE_TO_STRUCT_CONCRETE, 0x9B4 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x1119 | PALETTE_TO_STRUCT_CONCRETE, 0x99C | PALETTE_TO_STRUCT_CONCRETE, 0x9B0 | PALETTE_TO_STRUCT_CONCRETE, 0x0,
};
static const PalSpriteID _bridge_sprite_table_3_3[] = {
0x9AB | PALETTE_TO_STRUCT_CONCRETE, 0x9A3 | PALETTE_TO_STRUCT_CONCRETE, 0x9B3 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x9A7 | PALETTE_TO_STRUCT_CONCRETE, 0x99B | PALETTE_TO_STRUCT_CONCRETE, 0x9AF | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x9A1 | PALETTE_TO_STRUCT_CONCRETE, 0x9A3 | PALETTE_TO_STRUCT_CONCRETE, 0x9B3 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x999 | PALETTE_TO_STRUCT_CONCRETE, 0x99B | PALETTE_TO_STRUCT_CONCRETE, 0x9AF | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x10F4 | PALETTE_TO_STRUCT_CONCRETE, 0x9A3 | PALETTE_TO_STRUCT_CONCRETE, 0x9B3 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x10F0 | PALETTE_TO_STRUCT_CONCRETE, 0x99B | PALETTE_TO_STRUCT_CONCRETE, 0x9AF | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x111C | PALETTE_TO_STRUCT_CONCRETE, 0x9A3 | PALETTE_TO_STRUCT_CONCRETE, 0x9B3 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x1118 | PALETTE_TO_STRUCT_CONCRETE, 0x99B | PALETTE_TO_STRUCT_CONCRETE, 0x9AF | PALETTE_TO_STRUCT_CONCRETE, 0x0,
};
static const PalSpriteID _bridge_sprite_table_3_4[] = {
0x9B6 | PALETTE_TO_STRUCT_CONCRETE, 0x9BA | PALETTE_TO_STRUCT_CONCRETE, 0x9BC | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x9B5 | PALETTE_TO_STRUCT_CONCRETE, 0x9B9 | PALETTE_TO_STRUCT_CONCRETE, 0x9BB | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x9B8 | PALETTE_TO_STRUCT_CONCRETE, 0x9BA | PALETTE_TO_STRUCT_CONCRETE, 0x9BC | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x9B7 | PALETTE_TO_STRUCT_CONCRETE, 0x9B9 | PALETTE_TO_STRUCT_CONCRETE, 0x9BB | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x10F7 | PALETTE_TO_STRUCT_CONCRETE, 0x9BA | PALETTE_TO_STRUCT_CONCRETE, 0x9BC | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x10F6 | PALETTE_TO_STRUCT_CONCRETE, 0x9B9 | PALETTE_TO_STRUCT_CONCRETE, 0x9BB | PALETTE_TO_STRUCT_CONCRETE, 0x0,
0x111F | PALETTE_TO_STRUCT_CONCRETE, 0x9BA | PALETTE_TO_STRUCT_CONCRETE, 0x9BC | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x111E | PALETTE_TO_STRUCT_CONCRETE, 0x9B9 | PALETTE_TO_STRUCT_CONCRETE, 0x9BB | PALETTE_TO_STRUCT_CONCRETE, 0x0,
};
static const PalSpriteID _bridge_sprite_table_3_5[] = {
0x9BD | PALETTE_TO_STRUCT_CONCRETE, 0x9C1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0, 0x9BE | PALETTE_TO_STRUCT_CONCRETE, 0x9C2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0,
0x9BF | PALETTE_TO_STRUCT_CONCRETE, 0x9C1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0, 0x9C0 | PALETTE_TO_STRUCT_CONCRETE, 0x9C2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0,
0x10F8 | PALETTE_TO_STRUCT_CONCRETE, 0x9C1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0, 0x10F9 | PALETTE_TO_STRUCT_CONCRETE, 0x9C2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0,
0x1120 | PALETTE_TO_STRUCT_CONCRETE, 0x9C1 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0, 0x1121 | PALETTE_TO_STRUCT_CONCRETE, 0x9C2 | PALETTE_TO_STRUCT_CONCRETE, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_3_6[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E | PALETTE_TO_STRUCT_CONCRETE, 0x990 | PALETTE_TO_STRUCT_CONCRETE, 0x98D | PALETTE_TO_STRUCT_CONCRETE, 0x98F | PALETTE_TO_STRUCT_CONCRETE, 0x992 | PALETTE_TO_STRUCT_CONCRETE, 0x994 | PALETTE_TO_STRUCT_CONCRETE, 0x991 | PALETTE_TO_STRUCT_CONCRETE, 0x993 | PALETTE_TO_STRUCT_CONCRETE,
0x10E7 | PALETTE_TO_STRUCT_CONCRETE, 0x10E9 | PALETTE_TO_STRUCT_CONCRETE, 0x10E6 | PALETTE_TO_STRUCT_CONCRETE, 0x10E8 | PALETTE_TO_STRUCT_CONCRETE, 0x10EB | PALETTE_TO_STRUCT_CONCRETE, 0x10ED | PALETTE_TO_STRUCT_CONCRETE, 0x10EA | PALETTE_TO_STRUCT_CONCRETE, 0x10EC | PALETTE_TO_STRUCT_CONCRETE,
0x110F | PALETTE_TO_STRUCT_CONCRETE, 0x1111 | PALETTE_TO_STRUCT_CONCRETE, 0x110E | PALETTE_TO_STRUCT_CONCRETE, 0x1110 | PALETTE_TO_STRUCT_CONCRETE, 0x1113 | PALETTE_TO_STRUCT_CONCRETE, 0x1115 | PALETTE_TO_STRUCT_CONCRETE, 0x1112 | PALETTE_TO_STRUCT_CONCRETE, 0x1114 | PALETTE_TO_STRUCT_CONCRETE,
0x0, SPR_PILLARS_BASE + 2,
};
static const PalSpriteID _bridge_sprite_table_1_1[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E | PALETTE_TO_STRUCT_RED, 0x990 | PALETTE_TO_STRUCT_RED, 0x98D | PALETTE_TO_STRUCT_RED, 0x98F | PALETTE_TO_STRUCT_RED, 0x992 | PALETTE_TO_STRUCT_RED, 0x994 | PALETTE_TO_STRUCT_RED, 0x991 | PALETTE_TO_STRUCT_RED, 0x993 | PALETTE_TO_STRUCT_RED,
0x10E7 | PALETTE_TO_STRUCT_RED, 0x10E9 | PALETTE_TO_STRUCT_RED, 0x10E6 | PALETTE_TO_STRUCT_RED, 0x10E8 | PALETTE_TO_STRUCT_RED, 0x10EB | PALETTE_TO_STRUCT_RED, 0x10ED | PALETTE_TO_STRUCT_RED, 0x10EA | PALETTE_TO_STRUCT_RED, 0x10EC | PALETTE_TO_STRUCT_RED,
0x110F | PALETTE_TO_STRUCT_RED, 0x1111 | PALETTE_TO_STRUCT_RED, 0x110E | PALETTE_TO_STRUCT_RED, 0x1110 | PALETTE_TO_STRUCT_RED, 0x1113 | PALETTE_TO_STRUCT_RED, 0x1115 | PALETTE_TO_STRUCT_RED, 0x1112 | PALETTE_TO_STRUCT_RED, 0x1114 | PALETTE_TO_STRUCT_RED,
};
static const PalSpriteID _bridge_sprite_table_6_0[] = {
0x9CD, 0x9D9, 0x0, 0x0, 0x9CE, 0x9DA, 0x0, 0x0,
0x9D3, 0x9D9, 0x0, 0x0, 0x9D4, 0x9DA, 0x0, 0x0,
0x10FC, 0x9D9, 0x0, 0x0, 0x10FD, 0x9DA, 0x0, 0x0,
0x1124, 0x9D9, 0x0, 0x0, 0x1125, 0x9DA, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_6_1[] = {
0x9CB, 0x9D7, 0x9DD, 0x0, 0x9D0, 0x9DC, 0x9E0, 0x0,
0x9D1, 0x9D7, 0x9DD, 0x0, 0x9D6, 0x9DC, 0x9E0, 0x0,
0x10FA, 0x9D7, 0x9DD, 0x0, 0x10FF, 0x9DC, 0x9E0, 0x0,
0x1122, 0x9D7, 0x9DD, 0x0, 0x1127, 0x9DC, 0x9E0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_6_2[] = {
0x9CC, 0x9D8, 0x9DE, 0x0, 0x9CF, 0x9DB, 0x9DF, 0x0,
0x9D2, 0x9D8, 0x9DE, 0x0, 0x9D5, 0x9DB, 0x9DF, 0x0,
0x10FB, 0x9D8, 0x9DE, 0x0, 0x10FE, 0x9DB, 0x9DF, 0x0,
0x1123, 0x9D8, 0x9DE, 0x0, 0x1126, 0x9DB, 0x9DF, 0x0,
};
static const PalSpriteID _bridge_sprite_table_6_3[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E, 0x990, 0x98D, 0x98F, 0x992, 0x994, 0x991, 0x993,
0x10E7, 0x10E9, 0x10E6, 0x10E8, 0x10EB, 0x10ED, 0x10EA, 0x10EC,
0x110F, 0x1111, 0x110E, 0x1110, 0x1113, 0x1115, 0x1112, 0x1114,
};
static const PalSpriteID _bridge_sprite_table_7_0[] = {
0x9CD | PALETTE_TO_STRUCT_BROWN, 0x9D9 | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0, 0x9CE | PALETTE_TO_STRUCT_BROWN, 0x9DA | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0,
0x9D3 | PALETTE_TO_STRUCT_BROWN, 0x9D9 | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0, 0x9D4 | PALETTE_TO_STRUCT_BROWN, 0x9DA | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0,
0x10FC | PALETTE_TO_STRUCT_BROWN, 0x9D9 | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0, 0x10FD | PALETTE_TO_STRUCT_BROWN, 0x9DA | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0,
0x1124 | PALETTE_TO_STRUCT_BROWN, 0x9D9 | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0, 0x1125 | PALETTE_TO_STRUCT_BROWN, 0x9DA | PALETTE_TO_STRUCT_BROWN, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_7_1[] = {
0x9CB | PALETTE_TO_STRUCT_BROWN, 0x9D7 | PALETTE_TO_STRUCT_BROWN, 0x9DD | PALETTE_TO_STRUCT_BROWN, 0x0, 0x9D0 | PALETTE_TO_STRUCT_BROWN, 0x9DC | PALETTE_TO_STRUCT_BROWN, 0x9E0 | PALETTE_TO_STRUCT_BROWN, 0x0,
0x9D1 | PALETTE_TO_STRUCT_BROWN, 0x9D7 | PALETTE_TO_STRUCT_BROWN, 0x9DD | PALETTE_TO_STRUCT_BROWN, 0x0, 0x9D6 | PALETTE_TO_STRUCT_BROWN, 0x9DC | PALETTE_TO_STRUCT_BROWN, 0x9E0 | PALETTE_TO_STRUCT_BROWN, 0x0,
0x10FA | PALETTE_TO_STRUCT_BROWN, 0x9D7 | PALETTE_TO_STRUCT_BROWN, 0x9DD | PALETTE_TO_STRUCT_BROWN, 0x0, 0x10FF | PALETTE_TO_STRUCT_BROWN, 0x9DC | PALETTE_TO_STRUCT_BROWN, 0x9E0 | PALETTE_TO_STRUCT_BROWN, 0x0,
0x1122 | PALETTE_TO_STRUCT_BROWN, 0x9D7 | PALETTE_TO_STRUCT_BROWN, 0x9DD | PALETTE_TO_STRUCT_BROWN, 0x0, 0x1127 | PALETTE_TO_STRUCT_BROWN, 0x9DC | PALETTE_TO_STRUCT_BROWN, 0x9E0 | PALETTE_TO_STRUCT_BROWN, 0x0,
};
static const PalSpriteID _bridge_sprite_table_7_2[] = {
0x9CC | PALETTE_TO_STRUCT_BROWN, 0x9D8 | PALETTE_TO_STRUCT_BROWN, 0x9DE | PALETTE_TO_STRUCT_BROWN, 0x0, 0x9CF | PALETTE_TO_STRUCT_BROWN, 0x9DB | PALETTE_TO_STRUCT_BROWN, 0x9DF | PALETTE_TO_STRUCT_BROWN, 0x0,
0x9D2 | PALETTE_TO_STRUCT_BROWN, 0x9D8 | PALETTE_TO_STRUCT_BROWN, 0x9DE | PALETTE_TO_STRUCT_BROWN, 0x0, 0x9D5 | PALETTE_TO_STRUCT_BROWN, 0x9DB | PALETTE_TO_STRUCT_BROWN, 0x9DF | PALETTE_TO_STRUCT_BROWN, 0x0,
0x10FB | PALETTE_TO_STRUCT_BROWN, 0x9D8 | PALETTE_TO_STRUCT_BROWN, 0x9DE | PALETTE_TO_STRUCT_BROWN, 0x0, 0x10FE | PALETTE_TO_STRUCT_BROWN, 0x9DB | PALETTE_TO_STRUCT_BROWN, 0x9DF | PALETTE_TO_STRUCT_BROWN, 0x0,
0x1123 | PALETTE_TO_STRUCT_BROWN, 0x9D8 | PALETTE_TO_STRUCT_BROWN, 0x9DE | PALETTE_TO_STRUCT_BROWN, 0x0, 0x1126 | PALETTE_TO_STRUCT_BROWN, 0x9DB | PALETTE_TO_STRUCT_BROWN, 0x9DF | PALETTE_TO_STRUCT_BROWN, 0x0,
};
static const PalSpriteID _bridge_sprite_table_7_3[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E | PALETTE_TO_STRUCT_BROWN, 0x990 | PALETTE_TO_STRUCT_BROWN, 0x98D | PALETTE_TO_STRUCT_BROWN, 0x98F | PALETTE_TO_STRUCT_BROWN, 0x992 | PALETTE_TO_STRUCT_BROWN, 0x994 | PALETTE_TO_STRUCT_BROWN, 0x991 | PALETTE_TO_STRUCT_BROWN, 0x993 | PALETTE_TO_STRUCT_BROWN,
0x10E7 | PALETTE_TO_STRUCT_BROWN, 0x10E9 | PALETTE_TO_STRUCT_BROWN, 0x10E6 | PALETTE_TO_STRUCT_BROWN, 0x10E8 | PALETTE_TO_STRUCT_BROWN, 0x10EB | PALETTE_TO_STRUCT_BROWN, 0x10ED | PALETTE_TO_STRUCT_BROWN, 0x10EA | PALETTE_TO_STRUCT_BROWN, 0x10EC | PALETTE_TO_STRUCT_BROWN,
0x110F | PALETTE_TO_STRUCT_BROWN, 0x1111 | PALETTE_TO_STRUCT_BROWN, 0x110E | PALETTE_TO_STRUCT_BROWN, 0x1110 | PALETTE_TO_STRUCT_BROWN, 0x1113 | PALETTE_TO_STRUCT_BROWN, 0x1115 | PALETTE_TO_STRUCT_BROWN, 0x1112 | PALETTE_TO_STRUCT_BROWN, 0x1114 | PALETTE_TO_STRUCT_BROWN,
};
static const PalSpriteID _bridge_sprite_table_8_0[] = {
0x9CD | PALETTE_TO_STRUCT_RED, 0x9D9 | PALETTE_TO_STRUCT_RED, 0x0, 0x0, 0x9CE | PALETTE_TO_STRUCT_RED, 0x9DA | PALETTE_TO_STRUCT_RED, 0x0, 0x0,
0x9D3 | PALETTE_TO_STRUCT_RED, 0x9D9 | PALETTE_TO_STRUCT_RED, 0x0, 0x0, 0x9D4 | PALETTE_TO_STRUCT_RED, 0x9DA | PALETTE_TO_STRUCT_RED, 0x0, 0x0,
0x10FC | PALETTE_TO_STRUCT_RED, 0x9D9 | PALETTE_TO_STRUCT_RED, 0x0, 0x0, 0x10FD | PALETTE_TO_STRUCT_RED, 0x9DA | PALETTE_TO_STRUCT_RED, 0x0, 0x0,
0x1124 | PALETTE_TO_STRUCT_RED, 0x9D9 | PALETTE_TO_STRUCT_RED, 0x0, 0x0, 0x1125 | PALETTE_TO_STRUCT_RED, 0x9DA | PALETTE_TO_STRUCT_RED, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_8_1[] = {
0x9CB | PALETTE_TO_STRUCT_RED, 0x9D7 | PALETTE_TO_STRUCT_RED, 0x9DD | PALETTE_TO_STRUCT_RED, 0x0, 0x9D0 | PALETTE_TO_STRUCT_RED, 0x9DC | PALETTE_TO_STRUCT_RED, 0x9E0 | PALETTE_TO_STRUCT_RED, 0x0,
0x9D1 | PALETTE_TO_STRUCT_RED, 0x9D7 | PALETTE_TO_STRUCT_RED, 0x9DD | PALETTE_TO_STRUCT_RED, 0x0, 0x9D6 | PALETTE_TO_STRUCT_RED, 0x9DC | PALETTE_TO_STRUCT_RED, 0x9E0 | PALETTE_TO_STRUCT_RED, 0x0,
0x10FA | PALETTE_TO_STRUCT_RED, 0x9D7 | PALETTE_TO_STRUCT_RED, 0x9DD | PALETTE_TO_STRUCT_RED, 0x0, 0x10FF | PALETTE_TO_STRUCT_RED, 0x9DC | PALETTE_TO_STRUCT_RED, 0x9E0 | PALETTE_TO_STRUCT_RED, 0x0,
0x1122 | PALETTE_TO_STRUCT_RED, 0x9D7 | PALETTE_TO_STRUCT_RED, 0x9DD | PALETTE_TO_STRUCT_RED, 0x0, 0x1127 | PALETTE_TO_STRUCT_RED, 0x9DC | PALETTE_TO_STRUCT_RED, 0x9E0 | PALETTE_TO_STRUCT_RED, 0x0,
};
static const PalSpriteID _bridge_sprite_table_8_2[] = {
0x9CC | PALETTE_TO_STRUCT_RED, 0x9D8 | PALETTE_TO_STRUCT_RED, 0x9DE | PALETTE_TO_STRUCT_RED, 0x0, 0x9CF | PALETTE_TO_STRUCT_RED, 0x9DB | PALETTE_TO_STRUCT_RED, 0x9DF | PALETTE_TO_STRUCT_RED, 0x0,
0x9D2 | PALETTE_TO_STRUCT_RED, 0x9D8 | PALETTE_TO_STRUCT_RED, 0x9DE | PALETTE_TO_STRUCT_RED, 0x0, 0x9D5 | PALETTE_TO_STRUCT_RED, 0x9DB | PALETTE_TO_STRUCT_RED, 0x9DF | PALETTE_TO_STRUCT_RED, 0x0,
0x10FB | PALETTE_TO_STRUCT_RED, 0x9D8 | PALETTE_TO_STRUCT_RED, 0x9DE | PALETTE_TO_STRUCT_RED, 0x0, 0x10FE | PALETTE_TO_STRUCT_RED, 0x9DB | PALETTE_TO_STRUCT_RED, 0x9DF | PALETTE_TO_STRUCT_RED, 0x0,
0x1123 | PALETTE_TO_STRUCT_RED, 0x9D8 | PALETTE_TO_STRUCT_RED, 0x9DE | PALETTE_TO_STRUCT_RED, 0x0, 0x1126 | PALETTE_TO_STRUCT_RED, 0x9DB | PALETTE_TO_STRUCT_RED, 0x9DF | PALETTE_TO_STRUCT_RED, 0x0,
};
static const PalSpriteID _bridge_sprite_table_8_3[] = {
0x986, 0x988, 0x985, 0x987, 0x98A, 0x98C, 0x989, 0x98B,
0x98E | PALETTE_TO_STRUCT_RED, 0x990 | PALETTE_TO_STRUCT_RED, 0x98D | PALETTE_TO_STRUCT_RED, 0x98F | PALETTE_TO_STRUCT_RED, 0x992 | PALETTE_TO_STRUCT_RED, 0x994 | PALETTE_TO_STRUCT_RED, 0x991 | PALETTE_TO_STRUCT_RED, 0x993 | PALETTE_TO_STRUCT_RED,
0x10E7 | PALETTE_TO_STRUCT_RED, 0x10E9 | PALETTE_TO_STRUCT_RED, 0x10E6 | PALETTE_TO_STRUCT_RED, 0x10E8 | PALETTE_TO_STRUCT_RED, 0x10EB | PALETTE_TO_STRUCT_RED, 0x10ED | PALETTE_TO_STRUCT_RED, 0x10EA | PALETTE_TO_STRUCT_RED, 0x10EC | PALETTE_TO_STRUCT_RED,
0x110F | PALETTE_TO_STRUCT_RED, 0x1111 | PALETTE_TO_STRUCT_RED, 0x110E | PALETTE_TO_STRUCT_RED, 0x1110 | PALETTE_TO_STRUCT_RED, 0x1113 | PALETTE_TO_STRUCT_RED, 0x1115 | PALETTE_TO_STRUCT_RED, 0x1112 | PALETTE_TO_STRUCT_RED, 0x1114 | PALETTE_TO_STRUCT_RED,
};
static const PalSpriteID _bridge_sprite_table_0_0[] = {
0x9F2, 0x9F6, 0x9F8, 0x0, 0x9F1, 0x9F5, 0x9F7, 0x0,
0x9F4, 0x9F6, 0x9F8, 0x0, 0x9F3, 0x9F5, 0x9F7, 0x0,
0x1109, 0x9F6, 0x9F8, 0x0, 0x1108, 0x9F5, 0x9F7, 0x0,
0x1131, 0x9F6, 0x9F8, 0x0, 0x1130, 0x9F5, 0x9F7, 0x0,
};
static const PalSpriteID _bridge_sprite_table_0_1[] = {
0x9EE, 0x9ED, 0x9F0, 0x9EF, 0x9EA, 0x9E9, 0x9EB, 0x9EC,
0x9E6, 0x9E5, 0x9E8, 0x9E7, 0x9E2, 0x9E1, 0x9E3, 0x9E4,
0x1105, 0x1104, 0x1107, 0x1106, 0x1101, 0x1100, 0x1102, 0x1103,
0x112D, 0x112C, 0x112F, 0x112E, 0x1129, 0x1128, 0x112A, 0x112B,
};
static const PalSpriteID _bridge_sprite_table_1_0[] = {
0x9BD | PALETTE_TO_STRUCT_RED, 0x9C1 | PALETTE_TO_STRUCT_RED, 0x9C9, 0x0, 0x9BE | PALETTE_TO_STRUCT_RED, 0x9C2 | PALETTE_TO_STRUCT_RED, 0x9CA, 0x0,
0x9BF | PALETTE_TO_STRUCT_RED, 0x9C1 | PALETTE_TO_STRUCT_RED, 0x9C9, 0x0, 0x9C0 | PALETTE_TO_STRUCT_RED, 0x9C2 | PALETTE_TO_STRUCT_RED, 0x9CA, 0x0,
0x10F8 | PALETTE_TO_STRUCT_RED, 0x9C1 | PALETTE_TO_STRUCT_RED, 0x9C9, 0x0, 0x10F9 | PALETTE_TO_STRUCT_RED, 0x9C2 | PALETTE_TO_STRUCT_RED, 0x9CA, 0x0,
0x1120 | PALETTE_TO_STRUCT_RED, 0x9C1 | PALETTE_TO_STRUCT_RED, 0x9C9, 0x0, 0x1121 | PALETTE_TO_STRUCT_RED, 0x9C2 | PALETTE_TO_STRUCT_RED, 0x9CA, 0x0,
};
static const PalSpriteID _bridge_sprite_table_9_0[] = {
0x9F9, 0x9FD, 0x9C9, 0x0, 0x9FA, 0x9FE, 0x9CA, 0x0,
0x9FB, 0x9FD, 0x9C9, 0x0, 0x9FC, 0x9FE, 0x9CA, 0x0,
0x110A, 0x9FD, 0x9C9, 0x0, 0x110B, 0x9FE, 0x9CA, 0x0,
0x1132, 0x9FD, 0x9C9, 0x0, 0x1133, 0x9FE, 0x9CA, 0x0,
};
static const PalSpriteID _bridge_sprite_table_10_0[] = {
0xA0B, 0xA01, 0x0, 0x0, 0xA0C, 0xA02, 0x0, 0x0,
0xA11, 0xA01, 0x0, 0x0, 0xA12, 0xA02, 0x0, 0x0,
0xA17, 0xA01, 0x0, 0x0, 0xA18, 0xA02, 0x0, 0x0,
0xA1D, 0xA01, 0x0, 0x0, 0xA1E, 0xA02, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_10_1[] = {
0xA09, 0x9FF, 0xA05, 0x0, 0xA0E, 0xA04, 0xA08, 0x0,
0xA0F, 0x9FF, 0xA05, 0x0, 0xA14, 0xA04, 0xA08, 0x0,
0xA15, 0x9FF, 0xA05, 0x0, 0xA1A, 0xA04, 0xA08, 0x0,
0xA1B, 0x9FF, 0xA05, 0x0, 0xA20, 0xA04, 0xA08, 0x0,
};
static const PalSpriteID _bridge_sprite_table_10_2[] = {
0xA0A, 0xA00, 0xA06, 0x0, 0xA0D, 0xA03, 0xA07, 0x0,
0xA10, 0xA00, 0xA06, 0x0, 0xA13, 0xA03, 0xA07, 0x0,
0xA16, 0xA00, 0xA06, 0x0, 0xA19, 0xA03, 0xA07, 0x0,
0xA1C, 0xA00, 0xA06, 0x0, 0xA1F, 0xA03, 0xA07, 0x0,
};
static const PalSpriteID _bridge_sprite_table_11_0[] = {
0xA0B | PALETTE_TO_STRUCT_YELLOW, 0xA01 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0xA0C | PALETTE_TO_STRUCT_YELLOW, 0xA02 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0xA11 | PALETTE_TO_STRUCT_YELLOW, 0xA01 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0xA12 | PALETTE_TO_STRUCT_YELLOW, 0xA02 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0xA17 | PALETTE_TO_STRUCT_YELLOW, 0xA01 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0xA18 | PALETTE_TO_STRUCT_YELLOW, 0xA02 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
0xA1D | PALETTE_TO_STRUCT_YELLOW, 0xA01 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0, 0xA1E | PALETTE_TO_STRUCT_YELLOW, 0xA02 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_11_1[] = {
0xA09 | PALETTE_TO_STRUCT_YELLOW, 0x9FF | PALETTE_TO_STRUCT_YELLOW, 0xA05 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA0E | PALETTE_TO_STRUCT_YELLOW, 0xA04 | PALETTE_TO_STRUCT_YELLOW, 0xA08 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0xA0F | PALETTE_TO_STRUCT_YELLOW, 0x9FF | PALETTE_TO_STRUCT_YELLOW, 0xA05 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA14 | PALETTE_TO_STRUCT_YELLOW, 0xA04 | PALETTE_TO_STRUCT_YELLOW, 0xA08 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0xA15 | PALETTE_TO_STRUCT_YELLOW, 0x9FF | PALETTE_TO_STRUCT_YELLOW, 0xA05 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA1A | PALETTE_TO_STRUCT_YELLOW, 0xA04 | PALETTE_TO_STRUCT_YELLOW, 0xA08 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0xA1B | PALETTE_TO_STRUCT_YELLOW, 0x9FF | PALETTE_TO_STRUCT_YELLOW, 0xA05 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA20 | PALETTE_TO_STRUCT_YELLOW, 0xA04 | PALETTE_TO_STRUCT_YELLOW, 0xA08 | PALETTE_TO_STRUCT_YELLOW, 0x0,
};
static const PalSpriteID _bridge_sprite_table_11_2[] = {
0xA0A | PALETTE_TO_STRUCT_YELLOW, 0xA00 | PALETTE_TO_STRUCT_YELLOW, 0xA06 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA0D | PALETTE_TO_STRUCT_YELLOW, 0xA03 | PALETTE_TO_STRUCT_YELLOW, 0xA07 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0xA10 | PALETTE_TO_STRUCT_YELLOW, 0xA00 | PALETTE_TO_STRUCT_YELLOW, 0xA06 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA13 | PALETTE_TO_STRUCT_YELLOW, 0xA03 | PALETTE_TO_STRUCT_YELLOW, 0xA07 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0xA16 | PALETTE_TO_STRUCT_YELLOW, 0xA00 | PALETTE_TO_STRUCT_YELLOW, 0xA06 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA19 | PALETTE_TO_STRUCT_YELLOW, 0xA03 | PALETTE_TO_STRUCT_YELLOW, 0xA07 | PALETTE_TO_STRUCT_YELLOW, 0x0,
0xA1C | PALETTE_TO_STRUCT_YELLOW, 0xA00 | PALETTE_TO_STRUCT_YELLOW, 0xA06 | PALETTE_TO_STRUCT_YELLOW, 0x0, 0xA1F | PALETTE_TO_STRUCT_YELLOW, 0xA03 | PALETTE_TO_STRUCT_YELLOW, 0xA07 | PALETTE_TO_STRUCT_YELLOW, 0x0,
};
static const PalSpriteID _bridge_sprite_table_12_0[] = {
0xA0B | PALETTE_TO_STRUCT_GREY, 0xA01 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0, 0xA0C | PALETTE_TO_STRUCT_GREY, 0xA02 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0,
0xA11 | PALETTE_TO_STRUCT_GREY, 0xA01 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0, 0xA12 | PALETTE_TO_STRUCT_GREY, 0xA02 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0,
0xA17 | PALETTE_TO_STRUCT_GREY, 0xA01 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0, 0xA18 | PALETTE_TO_STRUCT_GREY, 0xA02 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0,
0xA1D | PALETTE_TO_STRUCT_GREY, 0xA01 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0, 0xA1E | PALETTE_TO_STRUCT_GREY, 0xA02 | PALETTE_TO_STRUCT_GREY, 0x0, 0x0,
};
static const PalSpriteID _bridge_sprite_table_12_1[] = {
0xA09 | PALETTE_TO_STRUCT_GREY, 0x9FF | PALETTE_TO_STRUCT_GREY, 0xA05 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA0E | PALETTE_TO_STRUCT_GREY, 0xA04 | PALETTE_TO_STRUCT_GREY, 0xA08 | PALETTE_TO_STRUCT_GREY, 0x0,
0xA0F | PALETTE_TO_STRUCT_GREY, 0x9FF | PALETTE_TO_STRUCT_GREY, 0xA05 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA14 | PALETTE_TO_STRUCT_GREY, 0xA04 | PALETTE_TO_STRUCT_GREY, 0xA08 | PALETTE_TO_STRUCT_GREY, 0x0,
0xA15 | PALETTE_TO_STRUCT_GREY, 0x9FF | PALETTE_TO_STRUCT_GREY, 0xA05 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA1A | PALETTE_TO_STRUCT_GREY, 0xA04 | PALETTE_TO_STRUCT_GREY, 0xA08 | PALETTE_TO_STRUCT_GREY, 0x0,
0xA1B | PALETTE_TO_STRUCT_GREY, 0x9FF | PALETTE_TO_STRUCT_GREY, 0xA05 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA20 | PALETTE_TO_STRUCT_GREY, 0xA04 | PALETTE_TO_STRUCT_GREY, 0xA08 | PALETTE_TO_STRUCT_GREY, 0x0,
};
static const PalSpriteID _bridge_sprite_table_12_2[] = {
0xA0A | PALETTE_TO_STRUCT_GREY, 0xA00 | PALETTE_TO_STRUCT_GREY, 0xA06 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA0D | PALETTE_TO_STRUCT_GREY, 0xA03 | PALETTE_TO_STRUCT_GREY, 0xA07 | PALETTE_TO_STRUCT_GREY, 0x0,
0xA10 | PALETTE_TO_STRUCT_GREY, 0xA00 | PALETTE_TO_STRUCT_GREY, 0xA06 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA13 | PALETTE_TO_STRUCT_GREY, 0xA03 | PALETTE_TO_STRUCT_GREY, 0xA07 | PALETTE_TO_STRUCT_GREY, 0x0,
0xA16 | PALETTE_TO_STRUCT_GREY, 0xA00 | PALETTE_TO_STRUCT_GREY, 0xA06 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA19 | PALETTE_TO_STRUCT_GREY, 0xA03 | PALETTE_TO_STRUCT_GREY, 0xA07 | PALETTE_TO_STRUCT_GREY, 0x0,
0xA1C | PALETTE_TO_STRUCT_GREY, 0xA00 | PALETTE_TO_STRUCT_GREY, 0xA06 | PALETTE_TO_STRUCT_GREY, 0x0, 0xA1F | PALETTE_TO_STRUCT_GREY, 0xA03 | PALETTE_TO_STRUCT_GREY, 0xA07 | PALETTE_TO_STRUCT_GREY, 0x0,
};
static const uint32 * const _bridge_sprite_table_2[] = {
_bridge_sprite_table_2_0,
_bridge_sprite_table_2_0,
_bridge_sprite_table_2_0,
_bridge_sprite_table_2_0,
_bridge_sprite_table_2_0,
_bridge_sprite_table_2_0,
_bridge_sprite_table_2_1,
};
static const uint32 * const _bridge_sprite_table_4[] = {
_bridge_sprite_table_4_0,
_bridge_sprite_table_4_1,
_bridge_sprite_table_4_2,
_bridge_sprite_table_4_3,
_bridge_sprite_table_4_4,
_bridge_sprite_table_4_5,
_bridge_sprite_table_4_6,
};
static const uint32 * const _bridge_sprite_table_5[] = {
_bridge_sprite_table_5_0,
_bridge_sprite_table_5_1,
_bridge_sprite_table_5_2,
_bridge_sprite_table_5_3,
_bridge_sprite_table_5_4,
_bridge_sprite_table_5_5,
_bridge_sprite_table_5_6,
};
static const uint32 * const _bridge_sprite_table_3[] = {
_bridge_sprite_table_3_0,
_bridge_sprite_table_3_1,
_bridge_sprite_table_3_2,
_bridge_sprite_table_3_3,
_bridge_sprite_table_3_4,
_bridge_sprite_table_3_5,
_bridge_sprite_table_3_6,
};
static const uint32 * const _bridge_sprite_table_6[] = {
_bridge_sprite_table_6_0,
_bridge_sprite_table_6_1,
_bridge_sprite_table_6_2,
_bridge_sprite_table_6_2,
_bridge_sprite_table_6_2,
_bridge_sprite_table_6_2,
_bridge_sprite_table_6_3,
};
static const uint32 * const _bridge_sprite_table_7[] = {
_bridge_sprite_table_7_0,
_bridge_sprite_table_7_1,
_bridge_sprite_table_7_2,
_bridge_sprite_table_7_2,
_bridge_sprite_table_7_2,
_bridge_sprite_table_7_2,
_bridge_sprite_table_7_3,
};
static const uint32 * const _bridge_sprite_table_8[] = {
_bridge_sprite_table_8_0,
_bridge_sprite_table_8_1,
_bridge_sprite_table_8_2,
_bridge_sprite_table_8_2,
_bridge_sprite_table_8_2,
_bridge_sprite_table_8_2,
_bridge_sprite_table_8_3,
};
static const uint32 * const _bridge_sprite_table_0[] = {
_bridge_sprite_table_0_0,
_bridge_sprite_table_0_0,
_bridge_sprite_table_0_0,
_bridge_sprite_table_0_0,
_bridge_sprite_table_0_0,
_bridge_sprite_table_0_0,
_bridge_sprite_table_0_1,
};
static const uint32 * const _bridge_sprite_table_1[] = {
_bridge_sprite_table_1_0,
_bridge_sprite_table_1_0,
_bridge_sprite_table_1_0,
_bridge_sprite_table_1_0,
_bridge_sprite_table_1_0,
_bridge_sprite_table_1_0,
_bridge_sprite_table_1_1,
};
static const uint32 * const _bridge_sprite_table_9[] = {
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
_bridge_sprite_table_4_6,
};
static const uint32 * const _bridge_sprite_table_10[] = {
_bridge_sprite_table_10_0,
_bridge_sprite_table_10_1,
_bridge_sprite_table_10_2,
_bridge_sprite_table_10_2,
_bridge_sprite_table_10_2,
_bridge_sprite_table_10_2,
_bridge_sprite_table_4_6,
};
static const uint32 * const _bridge_sprite_table_11[] = {
_bridge_sprite_table_11_0,
_bridge_sprite_table_11_1,
_bridge_sprite_table_11_2,
_bridge_sprite_table_11_2,
_bridge_sprite_table_11_2,
_bridge_sprite_table_11_2,
_bridge_sprite_table_5_6,
};
static const uint32 * const _bridge_sprite_table_12[] = {
_bridge_sprite_table_12_0,
_bridge_sprite_table_12_1,
_bridge_sprite_table_12_2,
_bridge_sprite_table_12_2,
_bridge_sprite_table_12_2,
_bridge_sprite_table_12_2,
_bridge_sprite_table_3_6,
};
static const uint32 * const * const _bridge_sprite_table[MAX_BRIDGES] = {
_bridge_sprite_table_0,
_bridge_sprite_table_1,
_bridge_sprite_table_2,
_bridge_sprite_table_3,
_bridge_sprite_table_4,
_bridge_sprite_table_5,
_bridge_sprite_table_6,
_bridge_sprite_table_7,
_bridge_sprite_table_8,
_bridge_sprite_table_9,
_bridge_sprite_table_10,
_bridge_sprite_table_11,
_bridge_sprite_table_12
};

1600
src/table/build_industry.h Normal file

File diff suppressed because it is too large Load Diff

62
src/table/clear_land.h Normal file
View File

@@ -0,0 +1,62 @@
/* $Id$ */
static const SpriteID _landscape_clear_sprites[8] = {
0xFA0,
0xFB3,
0xFB4,
0xFB5,
0xFB6,
0xFA0,
0xFB3,
0xFB4,
};
static const byte _fence_mod_by_tileh[32] = {
0, 2, 4, 0, 0, 2, 4, 0,
0, 2, 4, 0, 0, 2, 4, 0,
0, 2, 4, 0, 0, 2, 4, 4,
0, 2, 4, 2, 0, 2, 4, 0,
};
static const byte _fence_mod_by_tileh_2[32] = {
1, 1, 5, 5, 3, 3, 1, 1,
1, 1, 5, 5, 3, 3, 1, 1,
1, 1, 5, 5, 3, 3, 1, 5,
1, 1, 5, 5, 3, 3, 3, 1,
};
static const SpriteID _clear_land_fence_sprites_1[7] = {
0xFFA,
0x1000,
0x1006,
0x100C,
0x1012,
0x1018,
};
static const SpriteID _clear_land_sprites_1[16] = {
0x101E,
0x1031,
0x1044,
0x1057,
0x106A,
0x107D,
0x1090,
0x10A3,
0x10B6,
};
static const SpriteID _clear_land_sprites_2[8] = {
0x118D,
0x11A0,
0x11B3,
0x11C6,
};
static const SpriteID _clear_land_sprites_3[8] = {
0x118D,
0x11A0,
0x11B3,
0x11C6,
};

105
src/table/control_codes.h Normal file
View File

@@ -0,0 +1,105 @@
/* $Id$ */
#ifndef CONTROL_CODES_H
#define CONTROL_CODES_H
/* List of string control codes used for string formatting, displaying, and
* by strgen to generate the language files. */
enum {
SCC_CONTROL_START = 0xE000,
SCC_CONTROL_END = 0xE1FF,
SCC_SPRITE_START = 0xE200,
SCC_SPRITE_END = SCC_SPRITE_START + 0xFF,
/* Display control codes */
SCC_SETX = SCC_CONTROL_START,
SCC_SETXY,
SCC_TINYFONT,
SCC_BIGFONT,
/* Formatting control codes */
SCC_REVISION,
SCC_STATION_FEATURES,
SCC_INDUSTRY_NAME,
SCC_WAYPOINT_NAME,
SCC_STATION_NAME,
SCC_TOWN_NAME,
SCC_CURRENCY_COMPACT,
SCC_CURRENCY_COMPACT_64,
SCC_CURRENCY,
SCC_CURRENCY_64,
SCC_CARGO,
SCC_CARGO_SHORT,
SCC_POWER,
SCC_VOLUME,
SCC_VOLUME_SHORT,
SCC_WEIGHT,
SCC_WEIGHT_SHORT,
SCC_FORCE,
SCC_VELOCITY,
SCC_DATE_TINY,
SCC_DATE_SHORT,
SCC_DATE_LONG,
SCC_STRING1,
SCC_STRING2,
SCC_STRING3,
SCC_STRING4,
SCC_STRING5,
SCC_SKIP,
SCC_STRING,
SCC_COMMA,
SCC_NUM,
SCC_STRING_ID,
SCC_PLURAL_LIST,
SCC_GENDER_LIST,
SCC_GENDER_INDEX,
SCC_ARG_INDEX,
SCC_SETCASE,
SCC_SWITCH_CASE,
/* Colour codes */
SCC_BLUE,
SCC_SILVER,
SCC_GOLD,
SCC_RED,
SCC_PURPLE,
SCC_LTBROWN,
SCC_ORANGE,
SCC_GREEN,
SCC_YELLOW,
SCC_DKGREEN,
SCC_CREAM,
SCC_BROWN,
SCC_WHITE,
SCC_LTBLUE,
SCC_GRAY,
SCC_DKBLUE,
SCC_BLACK,
/* Special printable symbols.
* These are mapped to the original glyphs */
SCC_LESSTHAN = SCC_SPRITE_START + 0x3C,
SCC_GREATERTHAN = SCC_SPRITE_START + 0x3E,
SCC_UPARROW = SCC_SPRITE_START + 0x80,
SCC_SMALLUPARROW = SCC_SPRITE_START + 0x90,
SCC_SMALLDOWNARROW = SCC_SPRITE_START + 0x91,
SCC_TRAIN = SCC_SPRITE_START + 0x94,
SCC_LORRY = SCC_SPRITE_START + 0x95,
SCC_BUS = SCC_SPRITE_START + 0x96,
SCC_PLANE = SCC_SPRITE_START + 0x97,
SCC_SHIP = SCC_SPRITE_START + 0x98,
SCC_DOWNARROW = SCC_SPRITE_START + 0xAA,
SCC_CHECKMARK = SCC_SPRITE_START + 0xAC,
SCC_CROSS = SCC_SPRITE_START + 0xAD,
SCC_RIGHTARROW = SCC_SPRITE_START + 0xAF,
};
#endif /* CONTROL_CODES_H */

445
src/table/elrail_data.h Normal file
View File

@@ -0,0 +1,445 @@
/* $Id$ */
/** @file elrail_data.h Stores all the data for overhead wire and pylon drawing.
* @see elrail.c */
#ifndef ELRAIL_DATA_H
#define ELRAIL_DATA_H
/** Tile Location group.
* This defines whether the X and or Y coordinate of a tile is even */
typedef enum TLG {
XEVEN_YEVEN = 0,
XEVEN_YODD = 1,
XODD_YEVEN = 2,
XODD_YODD = 3,
TLG_END
} TLG;
/** When determining the pylon configuration on the edge, two tiles are taken
* into account: the tile being drawn itself (the home tile, the one in
* ti->tile), and the neighbouring tile */
typedef enum {
TS_HOME = 0,
TS_NEIGHBOUR = 1,
TS_END
} TileSource;
enum {
NUM_TRACKS_AT_PCP = 6
};
/** Which PPPs are possible at all on a given PCP */
static byte AllowedPPPonPCP[DIAGDIR_END] = {
1 << DIR_N | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W | 1 << DIR_NW,
1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
1 << DIR_N | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S | 1 << DIR_W | 1 << DIR_NW,
1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
};
/** Which of the PPPs are inside the tile. For the two PPPs on the tile border
* the following system is used: if you rotate the PCP so that it is in the
* north, the eastern PPP belongs to the tile. */
static byte OwnedPPPonPCP[DIAGDIR_END] = {
1 << DIR_SE | 1 << DIR_S | 1 << DIR_SW | 1 << DIR_W,
1 << DIR_N | 1 << DIR_SW | 1 << DIR_W | 1 << DIR_NW,
1 << DIR_N | 1 << DIR_NE | 1 << DIR_E | 1 << DIR_NW,
1 << DIR_NE | 1 << DIR_E | 1 << DIR_SE | 1 << DIR_S
};
/** Maps a track bit onto two PCP positions */
static const DiagDirection PCPpositions[TRACK_END][2] = {
{DIAGDIR_NE, DIAGDIR_SW}, /* X */
{DIAGDIR_SE, DIAGDIR_NW}, /* Y */
{DIAGDIR_NW, DIAGDIR_NE}, /* UPPER */
{DIAGDIR_SE, DIAGDIR_SW}, /* LOWER */
{DIAGDIR_SW, DIAGDIR_NW}, /* LEFT */
{DIAGDIR_NE, DIAGDIR_SE}, /* RIGHT */
};
#define PCP_NOT_ON_TRACK 0xFF
/** Preferred points of each trackbit. Those are the ones perpendicular to the
* track, plus the point in extension of the track (to mark end-of-track). PCPs
* which are not on either end of the track are fully preferred.
* @see PCPpositions */
static byte PreferredPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = {
{ /* X */
1 << DIR_NE | 1 << DIR_SE | 1 << DIR_NW, /* NE */
PCP_NOT_ON_TRACK, /* SE */
1 << DIR_SE | 1 << DIR_SW | 1 << DIR_NW, /* SW */
PCP_NOT_ON_TRACK /* NE */
}, { /* Y */
PCP_NOT_ON_TRACK,
1 << DIR_NE | 1 << DIR_SE | 1 << DIR_SW,
PCP_NOT_ON_TRACK,
1 << DIR_SW | 1 << DIR_NW | 1 << DIR_NE
}, { /* UPPER */
1 << DIR_E | 1 << DIR_N | 1 << DIR_S,
PCP_NOT_ON_TRACK,
PCP_NOT_ON_TRACK,
1 << DIR_W | 1 << DIR_N | 1 << DIR_S
}, { /* LOWER */
PCP_NOT_ON_TRACK,
1 << DIR_E | 1 << DIR_N | 1 << DIR_S,
1 << DIR_W | 1 << DIR_N | 1 << DIR_S,
PCP_NOT_ON_TRACK
}, { /* LEFT */
PCP_NOT_ON_TRACK,
PCP_NOT_ON_TRACK,
1 << DIR_S | 1 << DIR_E | 1 << DIR_W,
1 << DIR_N | 1 << DIR_E | 1 << DIR_W
}, { /* RIGHT */
1 << DIR_N | 1 << DIR_E | 1 << DIR_W,
1 << DIR_S | 1 << DIR_E | 1 << DIR_W,
PCP_NOT_ON_TRACK,
PCP_NOT_ON_TRACK
}
};
#undef PCP_NOT_ON_TRACK
#define NUM_IGNORE_GROUPS 3
#define IGNORE_NONE 0xFF
/** In case we have a staight line, we place pylon only every two tiles,
* so there are certain tiles which we ignore. A straight line is found if
* we have exactly two PPPs. */
static byte IgnoredPCP[NUM_IGNORE_GROUPS][TLG_END][DIAGDIR_END] = {
{ /* Ignore group 1, X and Y tracks */
{ /* X even, Y even */
IGNORE_NONE,
1 << DIR_NE | 1 << DIR_SW,
1 << DIR_NW | 1 << DIR_SE,
IGNORE_NONE
}, { /* X even, Y odd */
IGNORE_NONE,
IGNORE_NONE,
1 << DIR_NW | 1 << DIR_SE,
1 << DIR_NE | 1 << DIR_SW
}, { /* X odd, Y even */
1 << DIR_NW | 1 << DIR_SE,
1 << DIR_NE | 1 << DIR_SW,
IGNORE_NONE,
IGNORE_NONE
}, { /* X odd, Y odd */
1 << DIR_NW | 1 << DIR_SE,
IGNORE_NONE,
IGNORE_NONE,
1 << DIR_NE | 1 << DIR_SW
}
},
{ /* Ignore group 2, LEFT and RIGHT tracks */
{
1 << DIR_E | 1 << DIR_W,
IGNORE_NONE,
IGNORE_NONE,
1 << DIR_E | 1 << DIR_W
}, {
IGNORE_NONE,
1 << DIR_E | 1 << DIR_W,
1 << DIR_E | 1 << DIR_W,
IGNORE_NONE
}, {
IGNORE_NONE,
1 << DIR_E | 1 << DIR_W,
1 << DIR_E | 1 << DIR_W,
IGNORE_NONE
}, {
1 << DIR_E | 1 << DIR_W,
IGNORE_NONE,
IGNORE_NONE,
1 << DIR_E | 1 << DIR_W
}
},
{ /* Ignore group 3, UPPER and LOWER tracks */
{
1 << DIR_N | 1 << DIR_S,
1 << DIR_N | 1 << DIR_S,
IGNORE_NONE,
IGNORE_NONE
}, {
IGNORE_NONE,
IGNORE_NONE,
1 << DIR_N | 1 << DIR_S,
1 << DIR_N | 1 << DIR_S
}, {
IGNORE_NONE,
IGNORE_NONE,
1 << DIR_N | 1 << DIR_S ,
1 << DIR_N | 1 << DIR_S
}, {
1 << DIR_N | 1 << DIR_S,
1 << DIR_N | 1 << DIR_S,
IGNORE_NONE,
IGNORE_NONE
}
}
};
#undef NO_IGNORE
/** Which pylons can definately NOT be built */
static byte DisallowedPPPofTrackAtPCP[TRACK_END][DIAGDIR_END] = {
{1 << DIR_SW | 1 << DIR_NE, 0, 1 << DIR_SW | 1 << DIR_NE, 0 }, /* X */
{0, 1 << DIR_NW | 1 << DIR_SE, 0, 1 << DIR_NW | 1 << DIR_SE}, /* Y */
{1 << DIR_W | 1 << DIR_E, 0, 0, 1 << DIR_W | 1 << DIR_E }, /* UPPER */
{0, 1 << DIR_W | 1 << DIR_E, 1 << DIR_W | 1 << DIR_E, 0 }, /* LOWER */
{0, 0, 1 << DIR_S | 1 << DIR_N, 1 << DIR_N | 1 << DIR_S }, /* LEFT */
{1 << DIR_S | 1 << DIR_N, 1 << DIR_S | 1 << DIR_N, 0, 0, }, /* RIGHT */
};
/* This array stores which track bits can meet at a tile edge */
static const Track TracksAtPCP[DIAGDIR_END][NUM_TRACKS_AT_PCP] = {
{TRACK_X, TRACK_X, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
{TRACK_Y, TRACK_Y, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
{TRACK_X, TRACK_X, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
{TRACK_Y, TRACK_Y, TRACK_UPPER, TRACK_LOWER, TRACK_LEFT, TRACK_RIGHT},
};
/* takes each of the 6 track bits from the array above and
* assigns it to the home tile or neighbour tile */
static const TileSource TrackSourceTile[DIAGDIR_END][NUM_TRACKS_AT_PCP] = {
{TS_HOME, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME },
{TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_HOME },
{TS_HOME, TS_NEIGHBOUR, TS_NEIGHBOUR, TS_HOME , TS_HOME , TS_NEIGHBOUR},
{TS_HOME, TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR, TS_HOME , TS_NEIGHBOUR},
};
/* Several PPPs maybe exist, here they are sorted in order of preference. */
static const Direction PPPorder[DIAGDIR_END][TLG_END][DIR_END] = { /* X - Y */
{ /* PCP 0 */
{DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_N, DIR_E, DIR_S, DIR_W}, /* evn - evn */
{DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_S, DIR_W, DIR_N, DIR_E}, /* evn - odd */
{DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_S, DIR_W, DIR_N, DIR_E}, /* odd - evn */
{DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_N, DIR_E, DIR_S, DIR_W}, /* odd - odd */
}, {/* PCP 1 */
{DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_S, DIR_E, DIR_N, DIR_W}, /* evn - evn */
{DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_N, DIR_W, DIR_S, DIR_E}, /* evn - odd */
{DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_N, DIR_W, DIR_S, DIR_E}, /* odd - evn */
{DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_S, DIR_E, DIR_N, DIR_W}, /* odd - odd */
}, {/* PCP 2 */
{DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_S, DIR_W, DIR_N, DIR_E}, /* evn - evn */
{DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_N, DIR_E, DIR_S, DIR_W}, /* evn - odd */
{DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_N, DIR_E, DIR_S, DIR_W}, /* odd - evn */
{DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_S, DIR_W, DIR_N, DIR_E}, /* odd - odd */
}, {/* PCP 3 */
{DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_N, DIR_W, DIR_S, DIR_E}, /* evn - evn */
{DIR_NE, DIR_SE, DIR_SW, DIR_NW, DIR_S, DIR_E, DIR_N, DIR_W}, /* evn - odd */
{DIR_SW, DIR_NW, DIR_NE, DIR_SE, DIR_S, DIR_E, DIR_N, DIR_W}, /* odd - evn */
{DIR_SW, DIR_SE, DIR_NE, DIR_NW, DIR_N, DIR_W, DIR_S, DIR_E}, /* odd - odd */
}
};
/* Geometric placement of the PCP relative to the tile origin */
static const int8 x_pcp_offsets[DIAGDIR_END] = {0, 8, 15, 8};
static const int8 y_pcp_offsets[DIAGDIR_END] = {8, 15, 8, 0};
/* Geometric placement of the PPP relative to the PCP*/
static const int8 x_ppp_offsets[DIR_END] = {-3, -4, -3, 0, 3, 4, 3, 0};
static const int8 y_ppp_offsets[DIR_END] = {-3, 0, 3, 4, 3, 0, -3, -4};
/* The type of pylon to draw at each PPP */
static const SpriteID pylons_normal[] = {
SPR_PYLON_EW_N,
SPR_PYLON_Y_NE,
SPR_PYLON_NS_E,
SPR_PYLON_X_SE,
SPR_PYLON_EW_S,
SPR_PYLON_Y_SW,
SPR_PYLON_NS_W,
SPR_PYLON_X_NW
};
static const SpriteID pylons_bridge[] = {
SPR_PYLON_X_NW,
SPR_PYLON_X_SE,
SPR_PYLON_Y_NE,
SPR_PYLON_Y_SW
};
typedef struct {
SpriteID image;
int8 x_offset;
int8 y_offset;
int8 x_size;
int8 y_size;
int8 z_size;
int8 z_offset;
} SortableSpriteStruct;
enum {
/** Distance between wire and rail */
ELRAIL_ELEVATION = 8,
/** Corrects an off-by-one error in some places (tileh 12 and 9) (TODO -- find source of error) */
ELRAIL_ELEV_CORR = ELRAIL_ELEVATION + 1,
/** Wires that a draw one level higher than the north corner. */
ELRAIL_ELEVRAISE = ELRAIL_ELEVATION + TILE_HEIGHT
};
static const SortableSpriteStruct CatenarySpriteData[] = {
/* X direction */
/* Flat tiles: */
/* Wires */
{ SPR_WIRE_X_SW, 0, 8, 16, 1, 1, ELRAIL_ELEVATION }, //! 0: Wire in X direction, pylon on the SW end only
{ SPR_WIRE_X_NE, 0, 8, 16, 1, 1, ELRAIL_ELEVATION }, //! 1: Wire in X direction, pylon on the NE end
{ SPR_WIRE_X_SHORT, 0, 8, 16, 1, 1, ELRAIL_ELEVATION }, //! 2: Wire in X direction, pylon on both ends
/* "up" tiles */
/* Wires */
{ SPR_WIRE_X_SW_UP, 0, 8, 16, 8, 1, ELRAIL_ELEVRAISE }, //! 3: Wire in X pitch up, pylon on the SW end only
{ SPR_WIRE_X_NE_UP, 0, 8, 16, 8, 1, ELRAIL_ELEVRAISE }, //! 4: Wire in X pitch up, pylon on the NE end
{ SPR_WIRE_X_SHORT_UP, 0, 8, 16, 8, 1, ELRAIL_ELEVRAISE }, //! 5: Wire in X pitch up, pylon on both ends
/* "down" tiles */
/* Wires */
{ SPR_WIRE_X_SW_DOWN, 0, 8, 16, 8, 1, ELRAIL_ELEV_CORR }, //! 6: Wire in X pitch down, pylon on the SW end
{ SPR_WIRE_X_NE_DOWN, 0, 8, 16, 8, 1, ELRAIL_ELEV_CORR }, //! 7: Wire in X pitch down, pylon on the NE end
{ SPR_WIRE_X_SHORT_DOWN, 0, 8, 16, 8, 1, ELRAIL_ELEV_CORR }, //! 8: Wire in X pitch down, pylon on both ends
/* Y direction */
/* Flat tiles: */
/* Wires */
{ SPR_WIRE_Y_SE, 8, 0, 1, 16, 1, ELRAIL_ELEVATION }, //! 9: Wire in Y direction, pylon on the SE end only
{ SPR_WIRE_Y_NW, 8, 0, 1, 16, 1, ELRAIL_ELEVATION }, //!10: Wire in Y direction, pylon on the NW end
{ SPR_WIRE_Y_SHORT, 8, 0, 1, 16, 1, ELRAIL_ELEVATION }, //!11: Wire in Y direction, pylon on both ends
/* "up" tiles */
/* Wires */
{ SPR_WIRE_Y_SE_UP, 8, 0, 8, 16, 1, ELRAIL_ELEVRAISE }, //!12: Wire in Y pitch up, pylon on the SE end only
{ SPR_WIRE_Y_NW_UP, 8, 0, 8, 16, 1, ELRAIL_ELEVRAISE }, //!13: Wire in Y pitch up, pylon on the NW end
{ SPR_WIRE_Y_SHORT_UP, 8, 0, 8, 16, 1, ELRAIL_ELEVRAISE }, //!14: Wire in Y pitch up, pylon on both ends
/* "down" tiles */
/* Wires */
{ SPR_WIRE_Y_SE_DOWN, 8, 0, 8, 16, 1, ELRAIL_ELEV_CORR }, //!15: Wire in Y pitch down, pylon on the SE end
{ SPR_WIRE_Y_NW_DOWN, 8, 0, 8, 16, 1, ELRAIL_ELEV_CORR }, //!16: Wire in Y pitch down, pylon on the NW end
{ SPR_WIRE_Y_SHORT_DOWN, 8, 0, 8, 16, 1, ELRAIL_ELEV_CORR }, //!17: Wire in Y pitch down, pylon on both ends
/* NS Direction */
{ SPR_WIRE_NS_SHORT, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!18: LEFT trackbit wire, pylon on both ends
{ SPR_WIRE_NS_SHORT, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!19: RIGHT trackbit wire, pylon on both ends
{ SPR_WIRE_NS_N, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!20: LEFT trackbit wire, pylon on N end
{ SPR_WIRE_NS_N, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!21: RIGHT trackbit wire, pylon on N end
{ SPR_WIRE_NS_S, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!22: LEFT trackbit wire, pylon on S end
{ SPR_WIRE_NS_S, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!23: RIGHT trackbit wire, pylon on S end
/* EW Direction */
{ SPR_WIRE_EW_SHORT, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!24: UPPER trackbit wire, pylon on both ends
{ SPR_WIRE_EW_SHORT, 16, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!25: LOWER trackbit wire, pylon on both ends
{ SPR_WIRE_EW_W, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!28: UPPER trackbit wire, pylon on both ends
{ SPR_WIRE_EW_W, 16, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!29: LOWER trackbit wire, pylon on both ends
{ SPR_WIRE_EW_E, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!32: UPPER trackbit wire, pylon on both ends
{ SPR_WIRE_EW_E, 16, 8, 8, 8, 1, ELRAIL_ELEVATION } //!33: LOWER trackbit wire, pylon on both ends
};
static const SortableSpriteStruct CatenarySpriteData_Depot[] = {
{ SPR_WIRE_DEPOT_NE, 0, 8, 8, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE depot exit
{ SPR_WIRE_DEPOT_SE, 8, 0, 1, 8, 1, ELRAIL_ELEVATION }, //! Wire for SE depot exit
{ SPR_WIRE_DEPOT_SW, 0, 8, 8, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW depot exit
{ SPR_WIRE_DEPOT_NW, 8, 0, 1, 8, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit
};
/** Refers to a certain element of the catenary.
* Identifiers for Wires:
* <ol><li>Direction of the wire</li>
* <li>Slope of the tile for diagonals, placement inside the track for horiz/vertical pieces</li>
* <li>Place where a pylon shoule be</li></ol>
* Identifiers for Pylons:
* <ol><li>Direction of the wire</li>
* <li>Slope of the tile</li>
* <li>Position of the Pylon relative to the track</li>
* <li>Position of the Pylon inside the tile</li></ol>
*/
typedef enum {
WIRE_X_FLAT_SW,
WIRE_X_FLAT_NE,
WIRE_X_FLAT_BOTH,
WIRE_X_UP_SW,
WIRE_X_UP_NE,
WIRE_X_UP_BOTH,
WIRE_X_DOWN_SW,
WIRE_X_DOWN_NE,
WIRE_X_DOWN_BOTH,
WIRE_Y_FLAT_SE,
WIRE_Y_FLAT_NW,
WIRE_Y_FLAT_BOTH,
WIRE_Y_UP_SE,
WIRE_Y_UP_NW,
WIRE_Y_UP_BOTH,
WIRE_Y_DOWN_SE,
WIRE_Y_DOWN_NW,
WIRE_Y_DOWN_BOTH,
WIRE_NS_W_BOTH,
WIRE_NS_E_BOTH,
WIRE_NS_W_N,
WIRE_NS_E_N,
WIRE_NS_W_S,
WIRE_NS_E_S,
WIRE_EW_N_BOTH,
WIRE_EW_S_BOTH,
WIRE_EW_N_W,
WIRE_EW_S_W,
WIRE_EW_N_E,
WIRE_EW_S_E,
INVALID_CATENARY = 0xFF
} CatenarySprite;
/* Selects a Wire (with white and grey ends) depending on whether:
* a) none (should never happen)
* b) the first
* c) the second
* d) both
* PCP exists.*/
static const CatenarySprite Wires[5][TRACK_END][4] = {
{ /* Tileh == 0 */
{INVALID_CATENARY, WIRE_X_FLAT_NE, WIRE_X_FLAT_SW, WIRE_X_FLAT_BOTH},
{INVALID_CATENARY, WIRE_Y_FLAT_SE, WIRE_Y_FLAT_NW, WIRE_Y_FLAT_BOTH},
{INVALID_CATENARY, WIRE_EW_N_W, WIRE_EW_N_E, WIRE_EW_N_BOTH},
{INVALID_CATENARY, WIRE_EW_S_E, WIRE_EW_S_W, WIRE_EW_S_BOTH},
{INVALID_CATENARY, WIRE_NS_W_S, WIRE_NS_W_N, WIRE_NS_W_BOTH},
{INVALID_CATENARY, WIRE_NS_E_N, WIRE_NS_E_S, WIRE_NS_E_BOTH},
}, { /* Tileh == 3 */
{INVALID_CATENARY, WIRE_X_UP_NE, WIRE_X_UP_SW, WIRE_X_UP_BOTH},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
}, { /* Tileh == 6 */
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, WIRE_Y_UP_SE, WIRE_Y_UP_NW, WIRE_Y_UP_BOTH},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
}, { /* Tileh == 9 */
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, WIRE_Y_DOWN_SE, WIRE_Y_DOWN_NW, WIRE_Y_DOWN_BOTH},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
}, { /* Tileh == 12 */
{INVALID_CATENARY, WIRE_X_DOWN_NE, WIRE_X_DOWN_SW, WIRE_X_DOWN_BOTH},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
{INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY, INVALID_CATENARY},
}
};
#endif /* ELRAIL_DATA_H */

689
src/table/engines.h Normal file
View File

@@ -0,0 +1,689 @@
/* $Id$ */
#ifndef ENGINES_H
#define ENGINES_H
/** @file table/engines.h
* This file contains all the data for vehicles
*/
#include "../sound.h"
/** Writes the properties of a train or road vehicle into the EngineInfo struct.
* @see EngineInfo
* @param a Introduction date
* @param e Rail Type of the vehicle
* @param f Bitmask of the climates
* @note the 5 between d and e is the load amount
*/
#define MK(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, b, c, d, 5, e, f, 0, 8, 0, 0 }
/** Writes the properties of a train carriage into the EngineInfo struct.
* @see EngineInfo
* @param a Introduction date
* @param e Rail Type of the vehicle
* @param f Bitmask of the climates
* @note the 0x80 in parameter b sets the "is carriage bit"
* @note the 5 between d and e is the load amount
*/
#define MW(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, b | 0x80, c, d, 5, e, f, 0, 8, 0, 0 }
/** Writes the properties of a ship into the EngineInfo struct.
* @see MK
* @note the 10 between d and e is the load amount
*/
#define MS(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, b, c, d, 10, e, f, 0, 8, 0, 0 }
/** Writes the properties of an aeroplane into the EngineInfo struct.
* @see MK
* @note the 20 between d and e is the load amount
*/
#define MA(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, b, c, d, 20, e, f, 0, 8, 0, 0 }
// Rail types
// R = Conventional railway
// E = Electrified railway
// M = Monorail
// L = MagLev
#define R 0
#define E 1
#define M 2
#define L 3
// Climates
// T = Temperate
// A = Arctic
// S = Sub-Tropic
// Y = Toyland
#define T 1
#define A 2
#define S 4
#define Y 8
const EngineInfo orig_engine_info[] = {
MK( 1827, 20, 15, 30, R, T ), /* 0 Kirby Paul Tank (Steam) */
MK( 12784, 20, 22, 30, R, A|S ), /* 1 MJS 250 (Diesel) */
MK( 9497, 20, 20, 50, R, Y), /* 2 Ploddyphut Choo-Choo */
MK( 11688, 20, 20, 30, R, Y), /* 3 Powernaut Choo-Choo */
MK( 16802, 20, 20, 30, R, Y), /* 4 Mightymover Choo-Choo */
MK( 18993, 20, 20, 30, R, Y), /* 5 Ploddyphut Diesel */
MK( 20820, 20, 20, 30, R, Y), /* 6 Powernaut Diesel */
MK( 8766, 20, 20, 30, R, A|S ), /* 7 Wills 2-8-0 (Steam) */
MK( 5114, 20, 21, 30, R, T ), /* 8 Chaney 'Jubilee' (Steam) */
MK( 5479, 20, 20, 30, R, T ), /* 9 Ginzu 'A4' (Steam) */
MK( 12419, 20, 23, 25, R, T ), /* 10 SH '8P' (Steam) */
MK( 13149, 20, 12, 30, R, T ), /* 11 Manley-Morel DMU (Diesel) */
MK( 23376, 20, 15, 35, R, T ), /* 12 'Dash' (Diesel) */
MK( 14976, 20, 18, 28, R, T ), /* 13 SH/Hendry '25' (Diesel) */
MK( 14245, 20, 20, 30, R, T ), /* 14 UU '37' (Diesel) */
MK( 15341, 20, 22, 33, R, T ), /* 15 Floss '47' (Diesel) */
MK( 14976, 20, 20, 25, R, A|S ), /* 16 CS 4000 (Diesel) */
MK( 16437, 20, 20, 30, R, A|S ), /* 17 CS 2400 (Diesel) */
MK( 18993, 20, 22, 30, R, A|S ), /* 18 Centennial (Diesel) */
MK( 13880, 20, 22, 30, R, A|S ), /* 19 Kelling 3100 (Diesel) */
MK( 20454, 20, 22, 30, R, A|S ), /* 20 Turner Turbo (Diesel) */
MK( 16071, 20, 22, 30, R, A|S ), /* 21 MJS 1000 (Diesel) */
MK( 20820, 20, 20, 25, R, T ), /* 22 SH '125' (Diesel) */
MK( 16437, 20, 23, 30, E, T ), /* 23 SH '30' (Electric) */
MK( 19359, 20, 23, 80, E, T ), /* 24 SH '40' (Electric) */
MK( 23376, 20, 25, 30, E, T ), /* 25 'T.I.M.' (Electric) */
MK( 26298, 20, 25, 50, E, T ), /* 26 'AsiaStar' (Electric) */
MW( 1827, 20, 20, 50, R, T|A|S|Y), /* 27 Passenger Carriage */
MW( 1827, 20, 20, 50, R, T|A|S|Y), /* 28 Mail Van */
MW( 1827, 20, 20, 50, R, T|A ), /* 29 Coal Truck */
MW( 1827, 20, 20, 50, R, T|A|S ), /* 30 Oil Tanker */
MW( 1827, 20, 20, 50, R, T|A ), /* 31 Livestock Van */
MW( 1827, 20, 20, 50, R, T|A|S ), /* 32 Goods Van */
MW( 1827, 20, 20, 50, R, T|A|S ), /* 33 Grain Hopper */
MW( 1827, 20, 20, 50, R, T|A|S ), /* 34 Wood Truck */
MW( 1827, 20, 20, 50, R, T ), /* 35 Iron Ore Hopper */
MW( 1827, 20, 20, 50, R, T ), /* 36 Steel Truck */
MW( 1827, 20, 20, 50, R, T|A|S ), /* 37 Armoured Van */
MW( 1827, 20, 20, 50, R, A|S ), /* 38 Food Van */
MW( 1827, 20, 20, 50, R, A ), /* 39 Paper Truck */
MW( 1827, 20, 20, 50, R, S ), /* 40 Copper Ore Hopper */
MW( 1827, 20, 20, 50, R, S ), /* 41 Water Tanker */
MW( 1827, 20, 20, 50, R, S ), /* 42 Fruit Truck */
MW( 1827, 20, 20, 50, R, S ), /* 43 Rubber Truck */
MW( 1827, 20, 20, 50, R, Y), /* 44 Sugar Truck */
MW( 1827, 20, 20, 50, R, Y), /* 45 Candyfloss Hopper */
MW( 1827, 20, 20, 50, R, Y), /* 46 Toffee Hopper */
MW( 1827, 20, 20, 50, R, Y), /* 47 Bubble Van */
MW( 1827, 20, 20, 50, R, Y), /* 48 Cola Tanker */
MW( 1827, 20, 20, 50, R, Y), /* 49 Sweet Van */
MW( 1827, 20, 20, 50, R, Y), /* 50 Toy Van */
MW( 1827, 20, 20, 50, R, Y), /* 51 Battery Truck */
MW( 1827, 20, 20, 50, R, Y), /* 52 Fizzy Drink Truck */
MW( 1827, 20, 20, 50, R, Y), /* 53 Plastic Truck */
MK( 28490, 20, 20, 50, M, T|A|S ), /* 54 'X2001' (Electric) */
MK( 31047, 20, 20, 50, M, T|A|S ), /* 55 'Millennium Z1' (Electric) */
MK( 28855, 20, 20, 50, M, Y), /* 56 Wizzowow Z99 */
MW( 1827, 20, 20, 50, M, T|A|S|Y), /* 57 Passenger Carriage */
MW( 1827, 20, 20, 50, M, T|A|S|Y), /* 58 Mail Van */
MW( 1827, 20, 20, 50, M, T|A ), /* 59 Coal Truck */
MW( 1827, 20, 20, 50, M, T|A|S ), /* 60 Oil Tanker */
MW( 1827, 20, 20, 50, M, T|A ), /* 61 Livestock Van */
MW( 1827, 20, 20, 50, M, T|A|S ), /* 62 Goods Van */
MW( 1827, 20, 20, 50, M, T|A|S ), /* 63 Grain Hopper */
MW( 1827, 20, 20, 50, M, T|A|S ), /* 64 Wood Truck */
MW( 1827, 20, 20, 50, M, T ), /* 65 Iron Ore Hopper */
MW( 1827, 20, 20, 50, M, T ), /* 66 Steel Truck */
MW( 1827, 20, 20, 50, M, T|A|S ), /* 67 Armoured Van */
MW( 1827, 20, 20, 50, M, A|S ), /* 68 Food Van */
MW( 1827, 20, 20, 50, M, A ), /* 69 Paper Truck */
MW( 1827, 20, 20, 50, M, S ), /* 70 Copper Ore Hopper */
MW( 1827, 20, 20, 50, M, S ), /* 71 Water Tanker */
MW( 1827, 20, 20, 50, M, S ), /* 72 Fruit Truck */
MW( 1827, 20, 20, 50, M, S ), /* 73 Rubber Truck */
MW( 1827, 20, 20, 50, M, Y), /* 74 Sugar Truck */
MW( 1827, 20, 20, 50, M, Y), /* 75 Candyfloss Hopper */
MW( 1827, 20, 20, 50, M, Y), /* 76 Toffee Hopper */
MW( 1827, 20, 20, 50, M, Y), /* 77 Bubble Van */
MW( 1827, 20, 20, 50, M, Y), /* 78 Cola Tanker */
MW( 1827, 20, 20, 50, M, Y), /* 79 Sweet Van */
MW( 1827, 20, 20, 50, M, Y), /* 80 Toy Van */
MW( 1827, 20, 20, 50, M, Y), /* 81 Battery Truck */
MW( 1827, 20, 20, 50, M, Y), /* 82 Fizzy Drink Truck */
MW( 1827, 20, 20, 50, M, Y), /* 83 Plastic Truck */
MK( 36525, 20, 20, 50, L, T|A|S ), /* 84 Lev1 'Leviathan' (Electric) */
MK( 39447, 20, 20, 50, L, T|A|S ), /* 85 Lev2 'Cyclops' (Electric) */
MK( 42004, 20, 20, 50, L, T|A|S ), /* 86 Lev3 'Pegasus' (Electric) */
MK( 42735, 20, 20, 50, L, T|A|S ), /* 87 Lev4 'Chimaera' (Electric) */
MK( 36891, 20, 20, 60, L, Y), /* 88 Wizzowow Rocketeer */
MW( 1827, 20, 20, 50, L, T|A|S|Y), /* 89 Passenger Carriage */
MW( 1827, 20, 20, 50, L, T|A|S|Y), /* 90 Mail Van */
MW( 1827, 20, 20, 50, L, T|A ), /* 91 Coal Truck */
MW( 1827, 20, 20, 50, L, T|A|S ), /* 92 Oil Tanker */
MW( 1827, 20, 20, 50, L, T|A ), /* 93 Livestock Van */
MW( 1827, 20, 20, 50, L, T|A|S ), /* 94 Goods Van */
MW( 1827, 20, 20, 50, L, T|A|S ), /* 95 Grain Hopper */
MW( 1827, 20, 20, 50, L, T|A|S ), /* 96 Wood Truck */
MW( 1827, 20, 20, 50, L, T ), /* 97 Iron Ore Hopper */
MW( 1827, 20, 20, 50, L, T ), /* 98 Steel Truck */
MW( 1827, 20, 20, 50, L, T|A|S ), /* 99 Armoured Van */
MW( 1827, 20, 20, 50, L, A|S ), /* 100 Food Van */
MW( 1827, 20, 20, 50, L, A ), /* 101 Paper Truck */
MW( 1827, 20, 20, 50, L, S ), /* 102 Copper Ore Hopper */
MW( 1827, 20, 20, 50, L, S ), /* 103 Water Tanker */
MW( 1827, 20, 20, 50, L, S ), /* 104 Fruit Truck */
MW( 1827, 20, 20, 50, L, S ), /* 105 Rubber Truck */
MW( 1827, 20, 20, 50, L, Y), /* 106 Sugar Truck */
MW( 1827, 20, 20, 50, L, Y), /* 107 Candyfloss Hopper */
MW( 1827, 20, 20, 50, L, Y), /* 108 Toffee Hopper */
MW( 1827, 20, 20, 50, L, Y), /* 109 Bubble Van */
MW( 1827, 20, 20, 50, L, Y), /* 110 Cola Tanker */
MW( 1827, 20, 20, 50, L, Y), /* 111 Sweet Van */
MW( 1827, 20, 20, 50, L, Y), /* 112 Toy Van */
MW( 1827, 20, 20, 50, L, Y), /* 113 Battery Truck */
MW( 1827, 20, 20, 50, L, Y), /* 114 Fizzy Drink Truck */
MW( 1827, 20, 20, 50, L, Y), /* 115 Plastic Truck */
MK( 3378, 20, 12, 40, 0, T|A|S ), /* 116 MPS Regal Bus */
MK( 16071, 20, 15, 30, 0, T|A|S ), /* 117 Hereford Leopard Bus */
MK( 24107, 20, 15, 40, 0, T|A|S ), /* 118 Foster Bus */
MK( 32142, 20, 15, 80, 0, T|A|S ), /* 119 Foster MkII Superbus */
MK( 9132, 20, 15, 40, 0, Y), /* 120 Ploddyphut MkI Bus */
MK( 18993, 20, 15, 40, 0, Y), /* 121 Ploddyphut MkII Bus */
MK( 32873, 20, 15, 80, 0, Y), /* 122 Ploddyphut MkIII Bus */
MK( 5479, 20, 15, 55, 0, T|A ), /* 123 Balogh Coal Truck */
MK( 20089, 20, 15, 55, 0, T|A ), /* 124 Uhl Coal Truck */
MK( 33969, 20, 15, 85, 0, T|A ), /* 125 DW Coal Truck */
MK( 5479, 20, 15, 55, 0, T|A|S ), /* 126 MPS Mail Truck */
MK( 21550, 20, 15, 55, 0, T|A|S ), /* 127 Reynard Mail Truck */
MK( 35795, 20, 15, 85, 0, T|A|S ), /* 128 Perry Mail Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 129 MightyMover Mail Truck */
MK( 21550, 20, 15, 55, 0, Y), /* 130 Powernaught Mail Truck */
MK( 35795, 20, 15, 85, 0, Y), /* 131 Wizzowow Mail Truck */
MK( 5479, 20, 15, 55, 0, T|A|S ), /* 132 Witcombe Oil Tanker */
MK( 19359, 20, 15, 55, 0, T|A|S ), /* 133 Foster Oil Tanker */
MK( 31047, 20, 15, 85, 0, T|A|S ), /* 134 Perry Oil Tanker */
MK( 5479, 20, 15, 55, 0, T|A ), /* 135 Talbott Livestock Van */
MK( 21915, 20, 15, 55, 0, T|A ), /* 136 Uhl Livestock Van */
MK( 37256, 20, 15, 85, 0, T|A ), /* 137 Foster Livestock Van */
MK( 5479, 20, 15, 55, 0, T|A|S ), /* 138 Balogh Goods Truck */
MK( 19724, 20, 15, 55, 0, T|A|S ), /* 139 Craighead Goods Truck */
MK( 31047, 20, 15, 85, 0, T|A|S ), /* 140 Goss Goods Truck */
MK( 5479, 20, 15, 55, 0, T|A|S ), /* 141 Hereford Grain Truck */
MK( 21185, 20, 15, 55, 0, T|A|S ), /* 142 Thomas Grain Truck */
MK( 32873, 20, 15, 85, 0, T|A|S ), /* 143 Goss Grain Truck */
MK( 5479, 20, 15, 55, 0, T|A|S ), /* 144 Witcombe Wood Truck */
MK( 19724, 20, 15, 55, 0, T|A|S ), /* 145 Foster Wood Truck */
MK( 35430, 20, 15, 85, 0, T|A|S ), /* 146 Moreland Wood Truck */
MK( 5479, 20, 15, 55, 0, T ), /* 147 MPS Iron Ore Truck */
MK( 20820, 20, 15, 55, 0, T ), /* 148 Uhl Iron Ore Truck */
MK( 33238, 20, 15, 85, 0, T ), /* 149 Chippy Iron Ore Truck */
MK( 5479, 20, 15, 55, 0, T ), /* 150 Balogh Steel Truck */
MK( 21185, 20, 15, 55, 0, T ), /* 151 Uhl Steel Truck */
MK( 31777, 20, 15, 85, 0, T ), /* 152 Kelling Steel Truck */
MK( 5479, 20, 15, 55, 0, T|A|S ), /* 153 Balogh Armoured Truck */
MK( 22281, 20, 15, 55, 0, T|A|S ), /* 154 Uhl Armoured Truck */
MK( 33603, 20, 15, 85, 0, T|A|S ), /* 155 Foster Armoured Truck */
MK( 5479, 20, 15, 55, 0, A|S ), /* 156 Foster Food Van */
MK( 18628, 20, 15, 55, 0, A|S ), /* 157 Perry Food Van */
MK( 30681, 20, 15, 85, 0, A|S ), /* 158 Chippy Food Van */
MK( 5479, 20, 15, 55, 0, A ), /* 159 Uhl Paper Truck */
MK( 21185, 20, 15, 55, 0, A ), /* 160 Balogh Paper Truck */
MK( 31777, 20, 15, 85, 0, A ), /* 161 MPS Paper Truck */
MK( 5479, 20, 15, 55, 0, S ), /* 162 MPS Copper Ore Truck */
MK( 20820, 20, 15, 55, 0, S ), /* 163 Uhl Copper Ore Truck */
MK( 33238, 20, 15, 85, 0, S ), /* 164 Goss Copper Ore Truck */
MK( 5479, 20, 15, 55, 0, S ), /* 165 Uhl Water Tanker */
MK( 20970, 20, 15, 55, 0, S ), /* 166 Balogh Water Tanker */
MK( 33388, 20, 15, 85, 0, S ), /* 167 MPS Water Tanker */
MK( 5479, 20, 15, 55, 0, S ), /* 168 Balogh Fruit Truck */
MK( 21335, 20, 15, 55, 0, S ), /* 169 Uhl Fruit Truck */
MK( 33753, 20, 15, 85, 0, S ), /* 170 Kelling Fruit Truck */
MK( 5479, 20, 15, 55, 0, S ), /* 171 Balogh Rubber Truck */
MK( 20604, 20, 15, 55, 0, S ), /* 172 Uhl Rubber Truck */
MK( 33023, 20, 15, 85, 0, S ), /* 173 RMT Rubber Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 174 MightyMover Sugar Truck */
MK( 19724, 20, 15, 55, 0, Y), /* 175 Powernaught Sugar Truck */
MK( 33238, 20, 15, 85, 0, Y), /* 176 Wizzowow Sugar Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 177 MightyMover Cola Truck */
MK( 20089, 20, 15, 55, 0, Y), /* 178 Powernaught Cola Truck */
MK( 33603, 20, 15, 85, 0, Y), /* 179 Wizzowow Cola Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 180 MightyMover Candyfloss Truck */
MK( 20454, 20, 15, 55, 0, Y), /* 181 Powernaught Candyfloss Truck */
MK( 33969, 20, 15, 85, 0, Y), /* 182 Wizzowow Candyfloss Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 183 MightyMover Toffee Truck */
MK( 20820, 20, 15, 55, 0, Y), /* 184 Powernaught Toffee Truck */
MK( 34334, 20, 15, 85, 0, Y), /* 185 Wizzowow Toffee Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 186 MightyMover Toy Van */
MK( 21185, 20, 15, 55, 0, Y), /* 187 Powernaught Toy Van */
MK( 34699, 20, 15, 85, 0, Y), /* 188 Wizzowow Toy Van */
MK( 5479, 20, 15, 55, 0, Y), /* 189 MightyMover Sweet Truck */
MK( 21550, 20, 15, 55, 0, Y), /* 190 Powernaught Sweet Truck */
MK( 35064, 20, 15, 85, 0, Y), /* 191 Wizzowow Sweet Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 192 MightyMover Battery Truck */
MK( 19874, 20, 15, 55, 0, Y), /* 193 Powernaught Battery Truck */
MK( 35430, 20, 15, 85, 0, Y), /* 194 Wizzowow Battery Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 195 MightyMover Fizzy Drink Truck */
MK( 20239, 20, 15, 55, 0, Y), /* 196 Powernaught Fizzy Drink Truck */
MK( 35795, 20, 15, 85, 0, Y), /* 197 Wizzowow Fizzy Drink Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 198 MightyMover Plastic Truck */
MK( 20604, 20, 15, 55, 0, Y), /* 199 Powernaught Plastic Truck */
MK( 32873, 20, 15, 85, 0, Y), /* 200 Wizzowow Plastic Truck */
MK( 5479, 20, 15, 55, 0, Y), /* 201 MightyMover Bubble Truck */
MK( 20970, 20, 15, 55, 0, Y), /* 202 Powernaught Bubble Truck */
MK( 33023, 20, 15, 85, 0, Y), /* 203 Wizzowow Bubble Truck */
MS( 2922, 5, 30, 50, 0, T|A|S ), /* 204 MPS Oil Tanker */
MS( 17167, 5, 30, 90, 0, T|A|S ), /* 205 CS-Inc. Oil Tanker */
MS( 2192, 5, 30, 55, 0, T|A|S ), /* 206 MPS Passenger Ferry */
MS( 18628, 5, 30, 90, 0, T|A|S ), /* 207 FFP Passenger Ferry */
MS( 17257, 10, 25, 90, 0, T|A|S ), /* 208 Bakewell 300 Hovercraft */
MS( 9587, 5, 30, 40, 0, Y), /* 209 Chugger-Chug Passenger Ferry */
MS( 20544, 5, 30, 90, 0, Y), /* 210 Shivershake Passenger Ferry */
MS( 2557, 5, 30, 55, 0, T|A|S ), /* 211 Yate Cargo ship */
MS( 19724, 5, 30, 98, 0, T|A|S ), /* 212 Bakewell Cargo ship */
MS( 9587, 5, 30, 45, 0, Y), /* 213 Mightymover Cargo ship */
MS( 22371, 5, 30, 90, 0, Y), /* 214 Powernaut Cargo ship */
MA( 2922, 20, 20, 20, 0, T|A|S ), /* 215 Sampson U52 */
MA( 9922, 20, 24, 20, 0, T|A|S ), /* 216 Coleman Count */
MA( 12659, 20, 18, 20, 0, T|A|S ), /* 217 FFP Dart */
MA( 17652, 20, 25, 35, 0, T|A|S ), /* 218 Yate Haugan */
MA( 4929, 20, 30, 30, 0, T|A|S ), /* 219 Bakewell Cotswald LB-3 */
MA( 13695, 20, 23, 25, 0, T|A|S ), /* 220 Bakewell Luckett LB-8 */
MA( 16341, 20, 26, 30, 0, T|A|S ), /* 221 Bakewell Luckett LB-9 */
MA( 21395, 20, 25, 30, 0, T|A|S ), /* 222 Bakewell Luckett LB80 */
MA( 18263, 20, 20, 30, 0, T|A|S ), /* 223 Bakewell Luckett LB-10 */
MA( 25233, 20, 25, 30, 0, T|A|S ), /* 224 Bakewell Luckett LB-11 */
MA( 15371, 20, 22, 25, 0, T|A|S ), /* 225 Yate Aerospace YAC 1-11 */
MA( 15461, 20, 25, 25, 0, T|A|S ), /* 226 Darwin 100 */
MA( 16952, 20, 22, 25, 0, T|A|S ), /* 227 Darwin 200 */
MA( 17227, 20, 25, 30, 0, T|A|S ), /* 228 Darwin 300 */
MA( 22371, 20, 25, 35, 0, T|A|S ), /* 229 Darwin 400 */
MA( 22341, 20, 25, 30, 0, T|A|S ), /* 230 Darwin 500 */
MA( 27209, 20, 25, 30, 0, T|A|S ), /* 231 Darwin 600 */
MA( 17988, 20, 20, 30, 0, T|A|S ), /* 232 Guru Galaxy */
MA( 18993, 20, 24, 35, 0, T|A|S ), /* 233 Airtaxi A21 */
MA( 22401, 20, 24, 30, 0, T|A|S ), /* 234 Airtaxi A31 */
MA( 24472, 20, 24, 30, 0, T|A|S ), /* 235 Airtaxi A32 */
MA( 26724, 20, 24, 30, 0, T|A|S ), /* 236 Airtaxi A33 */
MA( 22005, 20, 25, 30, 0, T|A|S ), /* 237 Yate Aerospace YAe46 */
MA( 24107, 20, 20, 35, 0, T|A|S ), /* 238 Dinger 100 */
MA( 29310, 20, 25, 60, 0, T|A|S ), /* 239 AirTaxi A34-1000 */
MA( 35520, 20, 22, 30, 0, T|A|S ), /* 240 Yate Z-Shuttle */
MA( 36981, 20, 22, 30, 0, T|A|S ), /* 241 Kelling K1 */
MA( 38807, 20, 22, 50, 0, T|A|S ), /* 242 Kelling K6 */
MA( 42094, 20, 25, 30, 0, T|A|S ), /* 243 Kelling K7 */
MA( 44651, 20, 23, 30, 0, T|A|S ), /* 244 Darwin 700 */
MA( 40268, 20, 25, 30, 0, T|A|S ), /* 245 FFP Hyperdart 2 */
MA( 33693, 20, 25, 50, 0, T|A|S ), /* 246 Dinger 200 */
MA( 32963, 20, 20, 60, 0, T|A|S ), /* 247 Dinger 1000 */
MA( 9222, 20, 20, 35, 0, Y), /* 248 Ploddyphut 100 */
MA( 12874, 20, 20, 35, 0, Y), /* 249 Ploddyphut 500 */
MA( 16892, 20, 20, 35, 0, Y), /* 250 Flashbang X1 */
MA( 21275, 20, 20, 99, 0, Y), /* 251 Juggerplane M1 */
MA( 23832, 20, 20, 99, 0, Y), /* 252 Flashbang Wizzer */
MA( 13575, 20, 20, 40, 0, T|A|S ), /* 253 Tricario Helicopter */
MA( 28215, 20, 20, 30, 0, T|A|S ), /* 254 Guru X2 Helicopter */
MK( 13575, 20, 20, 99, 0, Y), /* 255 */
};
#undef Y
#undef S
#undef A
#undef T
#undef L
#undef M
#undef R
#undef E
#undef MK
#undef MW
#undef MS
#undef MA
/** Writes the properties of a rail vehicle into the RailVehicleInfo struct.
* @see RailVehicleInfo
* @param a image_index
* @param b flags
* @param c base_cost
* @param d max_speed (kph)
* @param e power (hp)
* @param f weight
* @param g running_cost_base
* @param h running_cost_class / engclass
* @param i capacity
* @param j cargo_type
* @param k ai_rank
* Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
*/
#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, d, e, f, g, h, h, i, j, k, 0, 0, 0, 0, 76, 0 }
#define M RVI_MULTIHEAD
#define W RVI_WAGON
#define S 0
#define D 1
#define E 2
const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
// image_index max_speed (kph) running_cost_base
// | flags | power (hp) | running_cost_class & engclass
// | | base_cost | weight | | capacity
// | | | | | | | | | cargo_type
// | | | | | | | | | |
RVI( 2, 0, 7, 64, 300, 47, 50, S, 0, 0 , 1 ), /* 0 */
RVI( 19, 0, 8, 80, 600, 65, 65, D, 0, 0 , 4 ), /* 1 */
RVI( 2, 0, 10, 72, 400, 85, 90, S, 0, 0 , 7 ), /* 2 */
RVI( 0, 0, 15, 96, 900, 130, 130, S, 0, 0 , 19 ), /* 3 */
RVI( 1, 0, 19, 112, 1000, 140, 145, S, 0, 0 , 20 ), /* 4 */
RVI( 12, 0, 16, 120, 1400, 95, 125, D, 0, 0 , 30 ), /* 5 */
RVI( 14, 0, 20, 152, 2000, 120, 135, D, 0, 0 , 31 ), /* 6 */
RVI( 3, 0, 14, 88, 1100, 145, 130, S, 0, 0 , 19 ), /* 7 */
RVI( 0, 0, 13, 112, 1000, 131, 120, S, 0, 0 , 20 ), /* 8 */
RVI( 1, 0, 19, 128, 1200, 162, 140, S, 0, 0 , 21 ), /* 9 */
RVI( 0, 0, 22, 144, 1600, 170, 130, S, 0, 0 , 22 ), /* 10 */
RVI( 8, M, 11, 112, 600/2,32/2, 85/2, D, 38, CT_PASSENGERS , 10 ), /* 11 */
RVI( 10, M, 14, 120, 700/2,38/2, 70/2, D, 40, CT_PASSENGERS , 11 ), /* 12 */
RVI( 4, 0, 15, 128, 1250, 72, 95, D, 0, 0 , 30 ), /* 13 */
RVI( 5, 0, 17, 144, 1750, 101, 120, D, 0, 0 , 31 ), /* 14 */
RVI( 4, 0, 18, 160, 2580, 112, 140, D, 0, 0 , 32 ), /* 15 */
RVI( 14, 0, 23, 96, 4000, 150, 135, D, 0, 0 , 33 ), /* 16 */
RVI( 12, 0, 16, 112, 2400, 120, 105, D, 0, 0 , 34 ), /* 17 */
RVI( 13, 0, 30, 112, 6600, 207, 155, D, 0, 0 , 35 ), /* 18 */
RVI( 15, 0, 18, 104, 1500, 110, 105, D, 0, 0 , 29 ), /* 19 */
RVI( 16, M, 35, 160, 3500/2,95/2, 205/2, D, 0, 0 , 45 ), /* 20 */
RVI( 18, 0, 21, 104, 2200, 120, 145, D, 0, 0 , 32 ), /* 21 */
RVI( 6, M, 20, 200, 4500/2,70/2, 190/2, D, 4, CT_MAIL , 50 ), /* 22 */
RVI( 20, 0, 26, 160, 3600, 84, 180, E, 0, 0 , 40 ), /* 23 */
RVI( 20, 0, 30, 176, 5000, 82, 205, E, 0, 0 , 41 ), /* 24 */
RVI( 21, M, 40, 240, 7000/2,90/2, 240/2, E, 0, 0 , 51 ), /* 25 */
RVI( 23, M, 43, 264, 8000/2,95/2, 250/2, E, 0, 0 , 52 ), /* 26 */
RVI( 33, W, 247, 0, 0, 25, 0, 0, 40, CT_PASSENGERS , 0 ), /* 27 */
RVI( 35, W, 228, 0, 0, 21, 0, 0, 30, CT_MAIL , 0 ), /* 28 */
RVI( 34, W, 176, 0, 0, 18, 0, 0, 30, CT_COAL , 0 ), /* 29 */
RVI( 36, W, 200, 0, 0, 24, 0, 0, 30, CT_OIL , 0 ), /* 30 */
RVI( 37, W, 192, 0, 0, 20, 0, 0, 25, CT_LIVESTOCK , 0 ), /* 31 */
RVI( 38, W, 190, 0, 0, 21, 0, 0, 25, CT_GOODS , 0 ), /* 32 */
RVI( 39, W, 182, 0, 0, 19, 0, 0, 30, CT_GRAIN , 0 ), /* 33 */
RVI( 40, W, 181, 0, 0, 16, 0, 0, 30, CT_WOOD , 0 ), /* 34 */
RVI( 41, W, 179, 0, 0, 19, 0, 0, 30, CT_IRON_ORE , 0 ), /* 35 */
RVI( 42, W, 196, 0, 0, 18, 0, 0, 20, CT_STEEL , 0 ), /* 36 */
RVI( 43, W, 255, 0, 0, 30, 0, 0, 20, CT_VALUABLES , 0 ), /* 37 */
RVI( 44, W, 191, 0, 0, 22, 0, 0, 25, CT_FOOD , 0 ), /* 38 */
RVI( 45, W, 196, 0, 0, 18, 0, 0, 20, CT_PAPER , 0 ), /* 39 */
RVI( 46, W, 179, 0, 0, 19, 0, 0, 30, CT_COPPER_ORE , 0 ), /* 40 */
RVI( 47, W, 199, 0, 0, 25, 0, 0, 25, CT_WATER , 0 ), /* 41 */
RVI( 48, W, 182, 0, 0, 18, 0, 0, 25, CT_FRUIT , 0 ), /* 42 */
RVI( 49, W, 185, 0, 0, 19, 0, 0, 21, CT_RUBBER , 0 ), /* 43 */
RVI( 50, W, 176, 0, 0, 19, 0, 0, 30, CT_SUGAR , 0 ), /* 44 */
RVI( 51, W, 178, 0, 0, 20, 0, 0, 30, CT_COTTON_CANDY, 0 ), /* 45 */
RVI( 52, W, 192, 0, 0, 20, 0, 0, 30, CT_TOFFEE , 0 ), /* 46 */
RVI( 53, W, 190, 0, 0, 21, 0, 0, 20, CT_BUBBLES , 0 ), /* 47 */
RVI( 54, W, 182, 0, 0, 24, 0, 0, 25, CT_COLA , 0 ), /* 48 */
RVI( 55, W, 181, 0, 0, 21, 0, 0, 25, CT_CANDY , 0 ), /* 49 */
RVI( 56, W, 183, 0, 0, 21, 0, 0, 20, CT_TOYS , 0 ), /* 50 */
RVI( 57, W, 196, 0, 0, 18, 0, 0, 22, CT_BATTERIES , 0 ), /* 51 */
RVI( 58, W, 193, 0, 0, 18, 0, 0, 25, CT_FIZZY_DRINKS, 0 ), /* 52 */
RVI( 59, W, 191, 0, 0, 18, 0, 0, 30, CT_PLASTIC , 0 ), /* 53 */
RVI( 25, 0, 52, 304, 9000, 95, 230, E, 0, 0 , 60 ), /* 54 */
RVI( 26, M, 60, 336, 10000/2,85/2, 240/2, E, 25, CT_PASSENGERS , 62 ), /* 55 */
RVI( 26, 0, 53, 320, 5000, 95, 230, E, 0, 0 , 63 ), /* 56 */
RVI( 60, W, 247, 0, 0, 25, 0, 0, 45, CT_PASSENGERS , 0 ), /* 57 */
RVI( 62, W, 228, 0, 0, 21, 0, 0, 35, CT_MAIL , 0 ), /* 58 */
RVI( 61, W, 176, 0, 0, 18, 0, 0, 35, CT_COAL , 0 ), /* 59 */
RVI( 63, W, 200, 0, 0, 24, 0, 0, 35, CT_OIL , 0 ), /* 60 */
RVI( 64, W, 192, 0, 0, 20, 0, 0, 30, CT_LIVESTOCK , 0 ), /* 61 */
RVI( 65, W, 190, 0, 0, 21, 0, 0, 30, CT_GOODS , 0 ), /* 62 */
RVI( 66, W, 182, 0, 0, 19, 0, 0, 35, CT_GRAIN , 0 ), /* 63 */
RVI( 67, W, 181, 0, 0, 16, 0, 0, 35, CT_WOOD , 0 ), /* 64 */
RVI( 68, W, 179, 0, 0, 19, 0, 0, 35, CT_IRON_ORE , 0 ), /* 65 */
RVI( 69, W, 196, 0, 0, 18, 0, 0, 25, CT_STEEL , 0 ), /* 66 */
RVI( 70, W, 255, 0, 0, 30, 0, 0, 25, CT_VALUABLES , 0 ), /* 67 */
RVI( 71, W, 191, 0, 0, 22, 0, 0, 30, CT_FOOD , 0 ), /* 68 */
RVI( 72, W, 196, 0, 0, 18, 0, 0, 25, CT_PAPER , 0 ), /* 69 */
RVI( 73, W, 179, 0, 0, 19, 0, 0, 35, CT_COPPER_ORE , 0 ), /* 70 */
RVI( 47, W, 199, 0, 0, 25, 0, 0, 30, CT_WATER , 0 ), /* 71 */
RVI( 48, W, 182, 0, 0, 18, 0, 0, 30, CT_FRUIT , 0 ), /* 72 */
RVI( 49, W, 185, 0, 0, 19, 0, 0, 26, CT_RUBBER , 0 ), /* 73 */
RVI( 50, W, 176, 0, 0, 19, 0, 0, 35, CT_SUGAR , 0 ), /* 74 */
RVI( 51, W, 178, 0, 0, 20, 0, 0, 35, CT_COTTON_CANDY, 0 ), /* 75 */
RVI( 52, W, 192, 0, 0, 20, 0, 0, 35, CT_TOFFEE , 0 ), /* 76 */
RVI( 53, W, 190, 0, 0, 21, 0, 0, 25, CT_BUBBLES , 0 ), /* 77 */
RVI( 54, W, 182, 0, 0, 24, 0, 0, 30, CT_COLA , 0 ), /* 78 */
RVI( 55, W, 181, 0, 0, 21, 0, 0, 30, CT_CANDY , 0 ), /* 79 */
RVI( 56, W, 183, 0, 0, 21, 0, 0, 25, CT_TOYS , 0 ), /* 80 */
RVI( 57, W, 196, 0, 0, 18, 0, 0, 27, CT_BATTERIES , 0 ), /* 81 */
RVI( 58, W, 193, 0, 0, 18, 0, 0, 30, CT_FIZZY_DRINKS, 0 ), /* 82 */
RVI( 59, W, 191, 0, 0, 18, 0, 0, 35, CT_PLASTIC , 0 ), /* 83 */
RVI( 28, 0, 70, 400, 10000, 105, 250, E, 0, 0 , 70 ), /* 84 */
RVI( 29, 0, 74, 448, 12000, 120, 253, E, 0, 0 , 71 ), /* 85 */
RVI( 30, 0, 82, 480, 15000, 130, 254, E, 0, 0 , 72 ), /* 86 */
RVI( 31, M, 95, 640, 20000/2,150/2,255/2, E, 0, 0 , 73 ), /* 87 */
RVI( 28, 0, 70, 480, 10000, 120, 250, E, 0, 0 , 74 ), /* 88 */
RVI( 60, W, 247, 0, 0, 25, 0, 0, 47, CT_PASSENGERS , 0 ), /* 89 */
RVI( 62, W, 228, 0, 0, 21, 0, 0, 37, CT_MAIL , 0 ), /* 90 */
RVI( 61, W, 176, 0, 0, 18, 0, 0, 37, CT_COAL , 0 ), /* 91 */
RVI( 63, W, 200, 0, 0, 24, 0, 0, 37, CT_OIL , 0 ), /* 92 */
RVI( 64, W, 192, 0, 0, 20, 0, 0, 32, CT_LIVESTOCK , 0 ), /* 93 */
RVI( 65, W, 190, 0, 0, 21, 0, 0, 32, CT_GOODS , 0 ), /* 94 */
RVI( 66, W, 182, 0, 0, 19, 0, 0, 37, CT_GRAIN , 0 ), /* 95 */
RVI( 67, W, 181, 0, 0, 16, 0, 0, 37, CT_WOOD , 0 ), /* 96 */
RVI( 68, W, 179, 0, 0, 19, 0, 0, 37, CT_IRON_ORE , 0 ), /* 97 */
RVI( 69, W, 196, 0, 0, 18, 0, 0, 27, CT_STEEL , 0 ), /* 98 */
RVI( 70, W, 255, 0, 0, 30, 0, 0, 27, CT_VALUABLES , 0 ), /* 99 */
RVI( 71, W, 191, 0, 0, 22, 0, 0, 32, CT_FOOD , 0 ), /* 100 */
RVI( 72, W, 196, 0, 0, 18, 0, 0, 27, CT_PAPER , 0 ), /* 101 */
RVI( 73, W, 179, 0, 0, 19, 0, 0, 37, CT_COPPER_ORE , 0 ), /* 102 */
RVI( 47, W, 199, 0, 0, 25, 0, 0, 32, CT_WATER , 0 ), /* 103 */
RVI( 48, W, 182, 0, 0, 18, 0, 0, 32, CT_FRUIT , 0 ), /* 104 */
RVI( 49, W, 185, 0, 0, 19, 0, 0, 28, CT_RUBBER , 0 ), /* 105 */
RVI( 50, W, 176, 0, 0, 19, 0, 0, 37, CT_SUGAR , 0 ), /* 106 */
RVI( 51, W, 178, 0, 0, 20, 0, 0, 37, CT_COTTON_CANDY, 0 ), /* 107 */
RVI( 52, W, 192, 0, 0, 20, 0, 0, 37, CT_TOFFEE , 0 ), /* 108 */
RVI( 53, W, 190, 0, 0, 21, 0, 0, 27, CT_BUBBLES , 0 ), /* 109 */
RVI( 54, W, 182, 0, 0, 24, 0, 0, 32, CT_COLA , 0 ), /* 110 */
RVI( 55, W, 181, 0, 0, 21, 0, 0, 32, CT_CANDY , 0 ), /* 111 */
RVI( 56, W, 183, 0, 0, 21, 0, 0, 27, CT_TOYS , 0 ), /* 112 */
RVI( 57, W, 196, 0, 0, 18, 0, 0, 29, CT_BATTERIES , 0 ), /* 113 */
RVI( 58, W, 193, 0, 0, 18, 0, 0, 32, CT_FIZZY_DRINKS, 0 ), /* 114 */
RVI( 59, W, 191, 0, 0, 18, 0, 0, 37, CT_PLASTIC , 0 ), /* 115 */
};
#undef E
#undef D
#undef S
#undef W
#undef M
#undef RVI
/** Writes the properties of a ship into the ShipVehicleInfo struct.
* @see ShipVehicleInfo
* @param a image_index
* @param b base_cost
* @param c max_speed
* @param d cargo_type
* @param e cargo_amount
* @param f running_cost
* @param g sound effect
* @param h refittable
*/
#define SVI(a, b, c, d, e, f, g, h) { a, b, c, d, e, f, g, h }
const ShipVehicleInfo orig_ship_vehicle_info[NUM_SHIP_ENGINES] = {
// image_index cargo_type cargo_amount refittable
// | base_cost | | running_cost |
// | | max_speed | | sfx |
// | | | | | | | |
SVI( 1, 160, 48, CT_OIL, 220, 140, SND_06_SHIP_HORN, 0 ), /* 0 */
SVI( 1, 176, 80, CT_OIL, 350, 125, SND_06_SHIP_HORN, 0 ), /* 1 */
SVI( 2, 96, 64, CT_PASSENGERS, 100, 90, SND_07_FERRY_HORN, 0 ), /* 2 */
SVI( 2, 112, 128, CT_PASSENGERS, 130, 80, SND_07_FERRY_HORN, 0 ), /* 3 */
SVI( 3, 148, 224, CT_PASSENGERS, 100, 190, SND_07_FERRY_HORN, 0 ), /* 4 */
SVI( 2, 96, 64, CT_PASSENGERS, 100, 90, SND_07_FERRY_HORN, 0 ), /* 5 */
SVI( 2, 112, 128, CT_PASSENGERS, 130, 80, SND_07_FERRY_HORN, 0 ), /* 6 */
SVI( 0, 128, 48, CT_GOODS, 160, 150, SND_06_SHIP_HORN, 1 ), /* 7 */
SVI( 0, 144, 80, CT_GOODS, 190, 113, SND_06_SHIP_HORN, 1 ), /* 8 */
SVI( 0, 128, 48, CT_GOODS, 160, 150, SND_06_SHIP_HORN, 1 ), /* 9 */
SVI( 0, 144, 80, CT_GOODS, 190, 113, SND_06_SHIP_HORN, 1 ), /* 10 */
};
#undef SVI
/** Writes the properties of an aircraft into the AircraftVehicleInfo struct.
* @see AircraftVehicleInfo
* @param a image_index
* @param b base_cost
* @param c running_Cost
* @param d subtype (bit 0 - plane, bit 1 - large plane)
* @param e sound effect
* @param f acceleration
* @param g max_speed
* @param h mail_capacity
* @param i passenger_capacity
*/
#define AVI(a, b, c, d, e, f, g, h, i) { a, b, c, d, e, f, g, h, i }
#define H 0
#define P AIR_CTOL
#define J AIR_CTOL | AIR_FAST
const AircraftVehicleInfo orig_aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES] = {
// image_index sfx acceleration
// | base_cost | | max_speed
// | | running_cost | | mail_capacity
// | | | subtype | | | | passenger_capacity
// | | | | | | | | |
AVI( 1, 14, 85, P, SND_08_PLANE_TAKE_OFF, 18, 37, 4, 25 ), /* 0 */
AVI( 0, 15, 100, P, SND_08_PLANE_TAKE_OFF, 20, 37, 8, 65 ), /* 1 */
AVI( 2, 16, 130, J, SND_09_JET, 35, 74, 10, 90 ), /* 2 */
AVI( 8, 75, 250, J, SND_3B_JET_OVERHEAD, 50, 181, 20, 100 ), /* 3 */
AVI( 5, 15, 98, P, SND_08_PLANE_TAKE_OFF, 20, 37, 6, 30 ), /* 4 */
AVI( 6, 18, 240, J, SND_09_JET, 40, 74, 30, 200 ), /* 5 */
AVI( 2, 17, 150, P, SND_09_JET, 35, 74, 15, 100 ), /* 6 */
AVI( 2, 18, 245, J, SND_09_JET, 40, 74, 30, 150 ), /* 7 */
AVI( 3, 19, 192, J, SND_09_JET, 40, 74, 40, 220 ), /* 8 */
AVI( 3, 20, 190, J, SND_09_JET, 40, 74, 25, 230 ), /* 9 */
AVI( 2, 16, 135, J, SND_09_JET, 35, 74, 10, 95 ), /* 10 */
AVI( 2, 18, 240, J, SND_09_JET, 40, 74, 35, 170 ), /* 11 */
AVI( 4, 17, 155, J, SND_09_JET, 40, 74, 15, 110 ), /* 12 */
AVI( 7, 30, 253, J, SND_3D_ANOTHER_JET_OVERHEAD, 40, 74, 50, 300 ), /* 13 */
AVI( 4, 18, 210, J, SND_09_JET, 40, 74, 25, 200 ), /* 14 */
AVI( 4, 19, 220, J, SND_09_JET, 40, 74, 25, 240 ), /* 15 */
AVI( 4, 27, 230, J, SND_09_JET, 40, 74, 40, 260 ), /* 16 */
AVI( 3, 25, 225, J, SND_09_JET, 40, 74, 35, 240 ), /* 17 */
AVI( 4, 20, 235, J, SND_09_JET, 40, 74, 30, 260 ), /* 18 */
AVI( 4, 19, 220, J, SND_09_JET, 40, 74, 25, 210 ), /* 19 */
AVI( 4, 18, 170, J, SND_09_JET, 40, 74, 20, 160 ), /* 20 */
AVI( 4, 26, 210, J, SND_09_JET, 40, 74, 20, 220 ), /* 21 */
AVI( 6, 16, 125, P, SND_09_JET, 50, 74, 10, 80 ), /* 22 */
AVI( 2, 17, 145, P, SND_09_JET, 40, 74, 10, 85 ), /* 23 */
AVI( 11, 16, 130, J, SND_09_JET, 40, 74, 10, 75 ), /* 24 */
AVI( 10, 16, 149, J, SND_09_JET, 40, 74, 10, 85 ), /* 25 */
AVI( 15, 17, 170, J, SND_09_JET, 40, 74, 18, 65 ), /* 26 */
AVI( 12, 18, 210, J, SND_09_JET, 40, 74, 25, 110 ), /* 27 */
AVI( 13, 20, 230, J, SND_09_JET, 40, 74, 60, 180 ), /* 28 */
AVI( 14, 21, 220, J, SND_09_JET, 40, 74, 65, 150 ), /* 29 */
AVI( 16, 19, 160, J, SND_09_JET, 40, 181, 45, 85 ), /* 30 */
AVI( 17, 24, 248, J, SND_3D_ANOTHER_JET_OVERHEAD, 40, 74, 80, 400 ), /* 31 */
AVI( 18, 80, 251, J, SND_3B_JET_OVERHEAD, 50, 181, 45, 130 ), /* 32 */
AVI( 20, 13, 85, P, SND_45_PLANE_CRASHING, 18, 37, 5, 25 ), /* 33 */
AVI( 21, 18, 100, P, SND_46_PLANE_ENGINE_SPUTTERING, 20, 37, 9, 60 ), /* 34 */
AVI( 22, 25, 140, P, SND_09_JET, 40, 74, 12, 90 ), /* 35 */
AVI( 23, 32, 220, J, SND_3D_ANOTHER_JET_OVERHEAD, 40, 74, 40, 200 ), /* 36 */
AVI( 24, 80, 255, J, SND_3B_JET_OVERHEAD, 50, 181, 30, 100 ), /* 37 */
AVI( 9, 15, 81, H, SND_09_JET, 20, 25, 15, 40 ), /* 38 */
AVI( 19, 17, 77, H, SND_09_JET, 20, 40, 20, 55 ), /* 39 */
AVI( 25, 15, 80, H, SND_09_JET, 20, 25, 10, 40 ), /* 40 */
};
#undef J
#undef P
#undef H
#undef AVI
/** Writes the properties of a road vehicle into the RoadVehicleInfo struct.
* @see RoadVehicleInfo
* @param a image_index
* @param b base_cost
* @param c running_cost
* @param d sound effect
* @param e max_speed
* @param f capacity
* @param g cargo_type
*/
#define RVI(a, b, c, d, e, f, g) { a, b, c, d, e, f, g }
const RoadVehicleInfo orig_road_vehicle_info[NUM_ROAD_ENGINES] = {
// image_index sfx max_speed
// | base_cost | | capacity
// | | running_cost | | cargo_type
// | | | | | | |
RVI( 0, 120, 91, SND_19_BUS_START_PULL_AWAY, 112, 31, CT_PASSENGERS ), /* 0 */
RVI( 17, 140, 128, SND_1C_TRUCK_START_2, 176, 35, CT_PASSENGERS ), /* 1 */
RVI( 17, 150, 178, SND_1B_TRUCK_START, 224, 37, CT_PASSENGERS ), /* 2 */
RVI( 34, 160, 240, SND_1B_TRUCK_START, 255, 40, CT_PASSENGERS ), /* 3 */
RVI( 51, 120, 91, SND_3C_COMEDY_CAR, 112, 30, CT_PASSENGERS ), /* 4 */
RVI( 51, 140, 171, SND_3E_COMEDY_CAR_2, 192, 35, CT_PASSENGERS ), /* 5 */
RVI( 51, 160, 240, SND_3C_COMEDY_CAR, 240, 38, CT_PASSENGERS ), /* 6 */
RVI( 1, 108, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, CT_COAL ), /* 7 */
RVI( 18, 128, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, CT_COAL ), /* 8 */
RVI( 35, 138, 240, SND_19_BUS_START_PULL_AWAY, 224, 28, CT_COAL ), /* 9 */
RVI( 2, 115, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, CT_MAIL ), /* 10 */
RVI( 19, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 28, CT_MAIL ), /* 11 */
RVI( 36, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, CT_MAIL ), /* 12 */
RVI( 57, 115, 90, SND_3E_COMEDY_CAR_2, 96, 22, CT_MAIL ), /* 13 */
RVI( 57, 135, 168, SND_3C_COMEDY_CAR, 176, 28, CT_MAIL ), /* 14 */
RVI( 57, 145, 240, SND_3E_COMEDY_CAR_2, 224, 30, CT_MAIL ), /* 15 */
RVI( 3, 110, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, CT_OIL ), /* 16 */
RVI( 20, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, CT_OIL ), /* 17 */
RVI( 37, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, CT_OIL ), /* 18 */
RVI( 4, 105, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, CT_LIVESTOCK ), /* 19 */
RVI( 21, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, CT_LIVESTOCK ), /* 20 */
RVI( 38, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, CT_LIVESTOCK ), /* 21 */
RVI( 5, 107, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, CT_GOODS ), /* 22 */
RVI( 22, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, CT_GOODS ), /* 23 */
RVI( 39, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, CT_GOODS ), /* 24 */
RVI( 6, 114, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, CT_GRAIN ), /* 25 */
RVI( 23, 133, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, CT_GRAIN ), /* 26 */
RVI( 40, 143, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, CT_GRAIN ), /* 27 */
RVI( 7, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, CT_WOOD ), /* 28 */
RVI( 24, 137, 168, SND_19_BUS_START_PULL_AWAY, 176, 22, CT_WOOD ), /* 29 */
RVI( 41, 147, 240, SND_19_BUS_START_PULL_AWAY, 224, 24, CT_WOOD ), /* 30 */
RVI( 8, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, CT_IRON_ORE ), /* 31 */
RVI( 25, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, CT_IRON_ORE ), /* 32 */
RVI( 42, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, CT_IRON_ORE ), /* 33 */
RVI( 9, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, CT_STEEL ), /* 34 */
RVI( 26, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, CT_STEEL ), /* 35 */
RVI( 43, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, CT_STEEL ), /* 36 */
RVI( 10, 145, 90, SND_19_BUS_START_PULL_AWAY, 96, 12, CT_VALUABLES ), /* 37 */
RVI( 27, 170, 168, SND_19_BUS_START_PULL_AWAY, 176, 15, CT_VALUABLES ), /* 38 */
RVI( 44, 180, 240, SND_19_BUS_START_PULL_AWAY, 224, 16, CT_VALUABLES ), /* 39 */
RVI( 11, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, CT_FOOD ), /* 40 */
RVI( 28, 134, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, CT_FOOD ), /* 41 */
RVI( 45, 144, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, CT_FOOD ), /* 42 */
RVI( 12, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, CT_PAPER ), /* 43 */
RVI( 29, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, CT_PAPER ), /* 44 */
RVI( 46, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, CT_PAPER ), /* 45 */
RVI( 13, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, CT_COPPER_ORE ), /* 46 */
RVI( 30, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, CT_COPPER_ORE ), /* 47 */
RVI( 47, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, CT_COPPER_ORE ), /* 48 */
RVI( 14, 111, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, CT_WATER ), /* 49 */
RVI( 31, 141, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, CT_WATER ), /* 50 */
RVI( 48, 151, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, CT_WATER ), /* 51 */
RVI( 15, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 18, CT_FRUIT ), /* 52 */
RVI( 32, 148, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, CT_FRUIT ), /* 53 */
RVI( 49, 158, 240, SND_19_BUS_START_PULL_AWAY, 224, 23, CT_FRUIT ), /* 54 */
RVI( 16, 117, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, CT_RUBBER ), /* 55 */
RVI( 33, 147, 168, SND_19_BUS_START_PULL_AWAY, 176, 19, CT_RUBBER ), /* 56 */
RVI( 50, 157, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, CT_RUBBER ), /* 57 */
RVI( 52, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, CT_SUGAR ), /* 58 */
RVI( 52, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_SUGAR ), /* 59 */
RVI( 52, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, CT_SUGAR ), /* 60 */
RVI( 53, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, CT_COLA ), /* 61 */
RVI( 53, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, CT_COLA ), /* 62 */
RVI( 53, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_COLA ), /* 63 */
RVI( 54, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, CT_COTTON_CANDY ), /* 64 */
RVI( 54, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_COTTON_CANDY ), /* 65 */
RVI( 54, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, CT_COTTON_CANDY ), /* 66 */
RVI( 55, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, CT_TOFFEE ), /* 67 */
RVI( 55, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, CT_TOFFEE ), /* 68 */
RVI( 55, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_TOFFEE ), /* 69 */
RVI( 56, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, CT_TOYS ), /* 70 */
RVI( 56, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_TOYS ), /* 71 */
RVI( 56, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, CT_TOYS ), /* 72 */
RVI( 58, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, CT_CANDY ), /* 73 */
RVI( 58, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, CT_CANDY ), /* 74 */
RVI( 58, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_CANDY ), /* 75 */
RVI( 59, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, CT_BATTERIES ), /* 76 */
RVI( 59, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_BATTERIES ), /* 77 */
RVI( 59, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, CT_BATTERIES ), /* 78 */
RVI( 60, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, CT_FIZZY_DRINKS ), /* 79 */
RVI( 60, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, CT_FIZZY_DRINKS ), /* 80 */
RVI( 60, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_FIZZY_DRINKS ), /* 81 */
RVI( 61, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, CT_PLASTIC ), /* 82 */
RVI( 61, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, CT_PLASTIC ), /* 83 */
RVI( 61, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, CT_PLASTIC ), /* 84 */
RVI( 62, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, CT_BUBBLES ), /* 85 */
RVI( 62, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, CT_BUBBLES ), /* 86 */
RVI( 62, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, CT_BUBBLES ), /* 87 */
};
#undef RVI
#endif /* ENGINES_H */

64
src/table/files.h Normal file
View File

@@ -0,0 +1,64 @@
/* $Id$ */
/*
MD5 sums of graphics files
DOS -
TRG1.GRF 9311676280e5b14077a8ee41c1b42192
TRGC.GRF ed446637e034104c5559b32c18afe78d
TRGH.GRF ee6616fb0e6ef6b24892c58c93d86fc9
TRGI.GRF da6a6c9dcc451eec88d79211437b76a8
TRGT.GRF fcde1d7e8a74197d72a62695884b909e
SAMPLE.CAT 422ea3dd074d2859bb51639a6e0e85da
WINDOWS -
TRG1R.GRF b04ce593d8c5016e07473a743d7d3358
TRGCR.GRF 3668f410c761a050b5e7095a2b14879b
TRGHR.GRF 06bf2b7a31766f048baac2ebe43457b1
TRGIR.GRF 0c2484ff6be49fc63a83be6ab5c38f32
TRGTR.GRF de53650517fe661ceaa3138c6edb0eb8
SAMPLE.CAT 9212e81e72badd4bbe1eaeae66458e10
*/
static FileList files_dos = {
{
{ "TRG1.GRF", {0x93, 0x11, 0x67, 0x62, 0x80, 0xe5, 0xb1, 0x40, 0x77, 0xa8, 0xee, 0x41, 0xc1, 0xb4, 0x21, 0x92} }, // 0 - 4792 inclusive
{ "TRGI.GRF", {0xda, 0x6a, 0x6c, 0x9d, 0xcc, 0x45, 0x1e, 0xec, 0x88, 0xd7, 0x92, 0x11, 0x43, 0x7b, 0x76, 0xa8} }, // 4793 - 4889 inclusive
{ "dosdummy.grf", {0x07, 0x01, 0xe6, 0xc4, 0x07, 0x6a, 0x5b, 0xc3, 0xf4, 0x9f, 0x01, 0xad, 0x21, 0x6c, 0xa0, 0xc2} }, // 4890 - 4895 inclusive
{ NULL, { 0 } }
}, {
{ "TRGC.GRF", {0xed, 0x44, 0x66, 0x37, 0xe0, 0x34, 0x10, 0x4c, 0x55, 0x59, 0xb3, 0x2c, 0x18, 0xaf, 0xe7, 0x8d} },
{ "TRGH.GRF", {0xee, 0x66, 0x16, 0xfb, 0x0e, 0x6e, 0xf6, 0xb2, 0x48, 0x92, 0xc5, 0x8c, 0x93, 0xd8, 0x6f, 0xc9} },
{ "TRGT.GRF", {0xfc, 0xde, 0x1d, 0x7e, 0x8a, 0x74, 0x19, 0x7d, 0x72, 0xa6, 0x26, 0x95, 0x88, 0x4b, 0x90, 0x9e} }
}
};
static FileList files_win = {
{
{ "TRG1R.GRF", {0xb0, 0x4c, 0xe5, 0x93, 0xd8, 0xc5, 0x01, 0x6e, 0x07, 0x47, 0x3a, 0x74, 0x3d, 0x7d, 0x33, 0x58} }, // 0 - 4792 inclusive
{ "TRGIR.GRF", {0x0c, 0x24, 0x84, 0xff, 0x6b, 0xe4, 0x9f, 0xc6, 0x3a, 0x83, 0xbe, 0x6a, 0xb5, 0xc3, 0x8f, 0x32} }, // 4793 - 4895 inclusive
{ NULL, { 0 } },
{ NULL, { 0 } }
}, {
{ "TRGCR.GRF", {0x36, 0x68, 0xf4, 0x10, 0xc7, 0x61, 0xa0, 0x50, 0xb5, 0xe7, 0x09, 0x5a, 0x2b, 0x14, 0x87, 0x9b} },
{ "TRGHR.GRF", {0x06, 0xbf, 0x2b, 0x7a, 0x31, 0x76, 0x6f, 0x04, 0x8b, 0xaa, 0xc2, 0xeb, 0xe4, 0x34, 0x57, 0xb1} },
{ "TRGTR.GRF", {0xde, 0x53, 0x65, 0x05, 0x17, 0xfe, 0x66, 0x1c, 0xea, 0xa3, 0x13, 0x8c, 0x6e, 0xdb, 0x0e, 0xb8} }
}
};
static MD5File sample_cat_win = { "SAMPLE.CAT", {0x92, 0x12, 0xe8, 0x1e, 0x72, 0xba, 0xdd, 0x4b, 0xbe, 0x1e, 0xae, 0xae, 0x66, 0x45, 0x8e, 0x10} };
static MD5File sample_cat_dos = { "SAMPLE.CAT", {0x42, 0x2e, 0xa3, 0xdd, 0x07, 0x4d, 0x28, 0x59, 0xbb, 0x51, 0x63, 0x9a, 0x6e, 0x0e, 0x85, 0xda} };
static MD5File files_openttd[] = {
{ "nsignalsw.grf", { 0x65, 0xb9, 0xd7, 0x30, 0x56, 0x06, 0xcc, 0x9e, 0x27, 0x57, 0xc8, 0xe4, 0x9b, 0xb3, 0x66, 0x81 } },
{ "2ccmap.grf", { 0x20, 0x03, 0x32, 0x1a, 0x43, 0x6c, 0xc1, 0x05, 0x80, 0xbd, 0x43, 0xeb, 0xe1, 0xfd, 0x0c, 0x62 } },
{ "airports.grf", { 0xfd, 0xa4, 0x38, 0xd6, 0x9c, 0x81, 0x74, 0xfe, 0xa0, 0x98, 0xa2, 0x14, 0x4b, 0x15, 0xb8, 0x4b } },
{ "autorail.grf", { 0xed, 0x44, 0x7f, 0xbb, 0x19, 0x44, 0x48, 0x4c, 0x07, 0x8a, 0xb1, 0xc1, 0x5c, 0x12, 0x3a, 0x60 } },
{ "canalsw.grf", { 0x13, 0x9c, 0x98, 0xcf, 0xb8, 0x7c, 0xd7, 0x1f, 0xca, 0x34, 0xa5, 0x6b, 0x65, 0x31, 0xec, 0x0f } },
{ "elrailsw.grf", { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } },
{ "openttd.grf", { 0x59, 0x22, 0x19, 0xe0, 0x6e, 0xe7, 0xb6, 0xa3, 0x55, 0x53, 0xcc, 0x9e, 0xbc, 0xaf, 0xcc, 0x83 } },
{ "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } },
};

159
src/table/genland.h Normal file
View File

@@ -0,0 +1,159 @@
/* $Id$ */
#define M(x, y) {x, y}
static const TileIndexDiffC _make_desert_or_rainforest_data[] = {
M(-5, -6),
M(-4, -6),
M(-3, -6),
M(-2, -6),
M(-1, -6),
M( 0, -5),
M( 1, -5),
M( 2, -5),
M( 3, -5),
M( 4, -5),
M( 5, -5),
M(-5, -5),
M(-4, -5),
M(-3, -5),
M(-2, -5),
M(-1, -5),
M( 0, -4),
M( 1, -4),
M( 2, -4),
M( 3, -4),
M( 4, -4),
M( 5, -4),
M(-5, -4),
M(-4, -4),
M(-3, -4),
M(-2, -4),
M(-1, -4),
M( 0, -3),
M( 1, -3),
M( 2, -3),
M( 3, -3),
M( 4, -3),
M( 5, -3),
M(-5, -3),
M(-4, -3),
M(-3, -3),
M(-2, -3),
M(-1, -3),
M( 0, -2),
M( 1, -2),
M( 2, -2),
M( 3, -2),
M( 4, -2),
M( 5, -2),
M(-5, -2),
M(-4, -2),
M(-3, -2),
M(-2, -2),
M(-1, -2),
M( 0, -1),
M( 1, -1),
M( 2, -1),
M( 3, -1),
M( 4, -1),
M( 5, -1),
M(-5, -1),
M(-4, -1),
M(-3, -1),
M(-2, -1),
M(-1, -1),
M( 0, 0),
M( 1, 0),
M( 2, 0),
M( 3, 0),
M( 4, 0),
M( 5, 0),
M(-5, 0),
M(-4, 0),
M(-3, 0),
M(-2, 0),
M(-1, 0),
M( 0, 1),
M( 1, 1),
M( 2, 1),
M( 3, 1),
M( 4, 1),
M( 5, 1),
M(-5, 1),
M(-4, 1),
M(-3, 1),
M(-2, 1),
M(-1, 1),
M( 0, 2),
M( 1, 2),
M( 2, 2),
M( 3, 2),
M( 4, 2),
M( 5, 2),
M(-5, 2),
M(-4, 2),
M(-3, 2),
M(-2, 2),
M(-1, 2),
M( 0, 3),
M( 1, 3),
M( 2, 3),
M( 3, 3),
M( 4, 3),
M( 5, 3),
M(-5, 3),
M(-4, 3),
M(-3, 3),
M(-2, 3),
M(-1, 3),
M( 0, 4),
M( 1, 4),
M( 2, 4),
M( 3, 4),
M( 4, 4),
M( 5, 4),
M(-5, 4),
M(-4, 4),
M(-3, 4),
M(-2, 4),
M(-1, 4),
M( 0, 5),
M( 1, 5),
M( 2, 5),
M( 3, 5),
M( 4, 5),
M( 5, 5),
M( 6, -3),
M(-6, -4),
M(-3, 5),
M(-3, -7),
M( 6, -2),
M(-6, -3),
M(-2, 5),
M(-2, -7),
M( 6, -1),
M(-6, -2),
M(-1, 5),
M(-1, -7),
M( 6, 0),
M(-6, -1),
M( 0, 6),
M( 0, -6),
M( 6, 1),
M(-6, 0),
M( 1, 6),
M( 1, -6),
M( 6, 2),
M(-6, 1),
M( 2, 6),
M( 2, -6),
M( 6, 3),
M(-6, 2),
M( 3, 6),
M( 3, -6)
};
#undef M

1022
src/table/industry_land.h Normal file

File diff suppressed because it is too large Load Diff

257
src/table/landscape_const.h Normal file
View File

@@ -0,0 +1,257 @@
/* $Id$ */
#include "sprites.h"
typedef struct CargoTypesValues {
StringID names[NUM_CARGO];
StringID units_volume[NUM_CARGO];
byte weights[NUM_CARGO];
SpriteID sprites[NUM_CARGO];
uint16 initial_cargo_payment[NUM_CARGO];
byte transit_days_table_1[NUM_CARGO];
byte transit_days_table_2[NUM_CARGO];
} CargoTypesValues;
static const CargoTypesValues _cargo_types_base_values[4] = {
{
/* normal names */
{
STR_000F_PASSENGERS,
STR_0010_COAL,
STR_0011_MAIL,
STR_0012_OIL,
STR_0013_LIVESTOCK,
STR_0014_GOODS,
STR_0015_GRAIN,
STR_0016_WOOD,
STR_0017_IRON_ORE,
STR_0018_STEEL,
STR_0019_VALUABLES,
STR_000E,
},
{ /* normal units of volume */
STR_PASSENGERS,
STR_TONS,
STR_BAGS,
STR_LITERS,
STR_ITEMS,
STR_CRATES,
STR_TONS,
STR_TONS,
STR_TONS,
STR_TONS,
STR_BAGS,
STR_RES_OTHER
},
/* normal weights */
{
1, 16, 4, 16, 3, 8, 16, 16, 16, 16, 2, 0,
},
/* normal sprites */
{
SPR_CARGO_PASSENGER, SPR_CARGO_COAL, SPR_CARGO_MAIL, SPR_CARGO_OIL, SPR_CARGO_LIVESTOCK,
SPR_CARGO_GOODS, SPR_CARGO_GRAIN, SPR_CARGO_WOOD, SPR_CARGO_IRON_ORE, SPR_CARGO_STEEL,
SPR_CARGO_VALUES_GOLD, SPR_ASCII_SPACE
},
/* normal initial cargo payment */
{
3185, 5916, 4550, 4437, 4322, 6144, 4778, 5005, 5120, 5688, 7509, 5688
},
/* normal transit days table 1 */
{
0, 7, 20, 25, 4, 5, 4, 15, 9, 7, 1, 0,
},
/* normal transit days table 2 */
{
24, 255, 90, 255, 18, 28, 40, 255, 255, 255, 32, 30,
},
},
{
/* hilly names */
{
STR_000F_PASSENGERS,
STR_0010_COAL,
STR_0011_MAIL,
STR_0012_OIL,
STR_0013_LIVESTOCK,
STR_0014_GOODS,
STR_0022_WHEAT,
STR_0016_WOOD,
STR_000E,
STR_001F_PAPER,
STR_0020_GOLD,
STR_001E_FOOD,
},
{ /* hilly units of volume */
STR_PASSENGERS,
STR_TONS,
STR_BAGS,
STR_LITERS,
STR_ITEMS,
STR_CRATES,
STR_TONS,
STR_TONS,
STR_RES_OTHER,
STR_TONS,
STR_BAGS,
STR_TONS
},
/* hilly weights */
{
1, 16, 4, 16, 3, 8, 16, 16, 0, 16, 8, 16
},
/* hilly sprites */
{
SPR_CARGO_PASSENGER, SPR_CARGO_COAL, SPR_CARGO_MAIL, SPR_CARGO_OIL, SPR_CARGO_LIVESTOCK,
SPR_CARGO_GOODS, SPR_CARGO_GRAIN, SPR_CARGO_WOOD, SPR_ASCII_SPACE, SPR_CARGO_PAPER,
SPR_CARGO_VALUES_GOLD, SPR_CARGO_FOOD
},
/* hilly initial cargo payment */
{
3185, 5916, 4550, 4437, 4322, 6144, 4778, 5005, 5120, 5461, 5802, 5688
},
/* hilly transit days table 1 */
{
0, 7, 20, 25, 4, 5, 4, 15, 9, 7, 10, 0,
},
/* hilly transit days table 2 */
{
24, 255, 90, 255, 18, 28, 40, 255, 255, 60, 40, 30
},
},
{
/* desert names */
{
STR_000F_PASSENGERS,
STR_0023_RUBBER,
STR_0011_MAIL,
STR_0012_OIL,
STR_001C_FRUIT,
STR_0014_GOODS,
STR_001B_MAIZE,
STR_0016_WOOD,
STR_001A_COPPER_ORE,
STR_0021_WATER,
STR_001D_DIAMONDS,
STR_001E_FOOD
},
{ /* desert units of volume */
STR_PASSENGERS,
STR_LITERS,
STR_BAGS,
STR_LITERS,
STR_TONS,
STR_CRATES,
STR_TONS,
STR_TONS,
STR_TONS,
STR_LITERS,
STR_BAGS,
STR_TONS
},
/* desert weights */
{
1, 16, 4, 16, 16, 8, 16, 16, 16, 16, 2, 16,
},
/* desert sprites */
{
SPR_CARGO_PASSENGER, SPR_CARGO_RUBBER, SPR_CARGO_MAIL, SPR_CARGO_OIL, SPR_CARGO_FRUIT,
SPR_CARGO_GOODS, SPR_CARGO_GRAIN, SPR_CARGO_WOOD, SPR_CARGO_COPPER_ORE, SPR_CARGO_WATERCOLA,
SPR_CARGO_DIAMONDS, SPR_CARGO_FOOD
},
/* desert initial cargo payment */
{
3185, 4437, 4550, 4892, 4209, 6144, 4322, 7964, 4892, 4664, 5802, 5688
},
/* desert transit days table 1 */
{
0, 2, 20, 25, 0, 5, 4, 15, 12, 20, 10, 0
},
/* desert transit days table 2 */
{
24, 20, 90, 255, 15, 28, 40, 255, 255, 80, 255, 30
},
},
{
/* candy names */
{
STR_000F_PASSENGERS,
STR_0024_SUGAR,
STR_0011_MAIL,
STR_0025_TOYS,
STR_002B_BATTERIES,
STR_0026_CANDY,
STR_002A_TOFFEE,
STR_0027_COLA,
STR_0028_COTTON_CANDY,
STR_0029_BUBBLES,
STR_002C_PLASTIC,
STR_002D_FIZZY_DRINKS,
},
{ /* candy unitrs of volume */
STR_PASSENGERS,
STR_TONS,
STR_BAGS,
STR_NOTHING,
STR_NOTHING,
STR_TONS,
STR_TONS,
STR_LITERS,
STR_TONS,
STR_NOTHING,
STR_LITERS,
STR_NOTHING
},
/* candy weights */
{
1, 16, 4, 2, 4, 5, 16, 16, 16, 1, 16, 2
},
/* candy sprites */
{
SPR_CARGO_PASSENGER, SPR_CARGO_SUGAR, SPR_CARGO_MAIL, SPR_CARGO_TOYS, SPR_CARGO_BATTERIES,
SPR_CARGO_CANDY, SPR_CARGO_TOFFEE, SPR_CARGO_WATERCOLA, SPR_CARGO_COTTONCANDY, SPR_CARGO_BUBBLES,
SPR_CARGO_PLASTIC, SPR_CARGO_FIZZYDRINK
},
/* candy initial cargo payment */
{
3185, 4437, 4550, 5574, 4322, 6144, 4778, 4892, 5005, 5077, 4664, 6250
},
/* candy transit days table 1 */
{
0, 20, 20, 25, 2, 8, 14, 5, 10, 20, 30, 30,
},
/* candy transit days table 2 */
{
24, 255, 90, 255, 30, 40, 60, 75, 25, 80, 255, 50
},
}
};

View File

@@ -0,0 +1,167 @@
/* $Id$ */
static const SpriteID _landscape_spriteindexes_1[] = {
0xF67, 0xF9F,
0xAAD, 0xAB0,
0x83A, 0x845,
0xFA0, 0xFC9,
0x43F, 0x45E,
0x566, 0x56D,
0x945, 0x94C,
0x3ED, 0x40C,
0x515, 0x51C,
0x55A, 0x561,
0x534, 0x546,
0x93D, 0x944,
0x955, 0x95C,
0xFDD, 0xFEC,
0x87D, 0x883,
0xA2B, 0xA39,
0x497, 0x4B0,
0x572, 0x575,
0x94D, 0x954,
0x818, 0x81D,
0x3DE, 0x3EB,
0x1212, 0x1212,
END
};
static const SpriteID _landscape_spriteindexes_2[] = {
0xF67, 0xF9F,
0xAAD, 0xAB0,
0xFA0, 0xFC9,
0x43F, 0x45E,
0x566, 0x56D,
0x945, 0x94C,
0x3ED, 0x40C,
0x515, 0x51C,
0x55A, 0x561,
0x547, 0x559,
0x93D, 0x944,
0x955, 0x95C,
0xFDD, 0xFEC,
0x87D, 0x883,
0xA2B, 0xA39,
0x497, 0x4B0,
0x572, 0x575,
0x94D, 0x954,
0x5AE, 0x5AF,
0x118D, 0x11D8,
0x534, 0x546,
0x40D, 0x426,
0x45F, 0x478,
0x4B1, 0x4CA,
0x95D, 0x97C,
0x3DE, 0x3EB,
0x562, 0x565,
0x56E, 0x571,
0x57A, 0x57D,
0x83A, 0x845,
0xFF5, 0xFF5,
0xFF8, 0xFF8,
0x1212, 0x1212,
END
};
static const SpriteID _landscape_spriteindexes_3[] = {
0xF54, 0xF9F,
0xFDD, 0xFE5,
0xFEC, 0xFEC,
0xFA0, 0xFC9,
0x818, 0x81D,
0x521, 0x546,
0x57E, 0x57F,
0x3ED, 0x40C,
0x43F, 0x45E,
0x491, 0x4B0,
0xA48, 0xA48,
0x4FB, 0x50A,
0x55A, 0x561,
0x566, 0x56D,
0x572, 0x579,
0x427, 0x42C,
0x479, 0x47E,
0x4CB, 0x4D0,
0x4EF, 0x4FA,
0xE9D, 0xECC,
0xF3D, 0xF40,
0xB59, 0xB60,
0xE5D, 0xE6C,
0xA49, 0xA59,
0xA63, 0xA68,
0xA5A, 0xA62,
0xA78, 0xA83,
0xA69, 0xA77,
0xA84, 0xAA3,
0xAA7, 0xAAC,
0xA2B, 0xA47,
0x3DE, 0x3EB,
0x47F, 0x488,
0x4D1, 0x4DA,
0x42D, 0x436,
0x515, 0x51C,
0x580, 0x585,
0xC14, 0xCB3,
0xAAD, 0xAB0,
0xAB5, 0xB00,
0xB69, 0xB70,
0xB61, 0xB68,
0xBC9, 0xBD0,
0xBD9, 0xBE0,
0xBA9, 0xBB0,
0xBC1, 0xBC4,
0x2D0, 0x2D0,
0xAA5, 0xAA6,
0x50F, 0x50F,
0x2EA, 0x2EA,
0x2ED, 0x2EE,
0x512, 0x513,
0x4EB, 0x4EE,
0x4E7, 0x4EA,
0x985, 0xA28,
0x10E4, 0x1133,
0x93D, 0x95C,
0x97D, 0x984,
0x7DA, 0x7DA,
0x2E6, 0x2E6,
0x1, 0x1,
0xE54, 0xE54,
0x51F, 0x520,
0x514, 0x514,
0x511, 0x511,
0x322, 0x322,
END
};
/* Slope graphics indexes temperate climate
Skip first 3 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_0[] = {
SKIP, 3,
SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73,
END
};
/* Slope graphics indexes arctic climate
Skip first 79 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_1[] = {
SKIP, 79,
SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73,
END
};
/* Slope graphics indexes tropical climate
Skip first 155 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_2[] = {
SKIP, 155,
SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73,
END
};
/* Slope graphics indexes toyland climate
Skip first 231 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_3[] = {
SKIP, 231,
SPR_SLOPES_BASE, SPR_SLOPES_BASE + 73,
END
};

3302
src/table/namegen.h Normal file

File diff suppressed because it is too large Load Diff

199
src/table/palettes.h Normal file
View File

@@ -0,0 +1,199 @@
/* $Id$ */
#define M(r, g, b) { r, g, b }
static const Colour _palettes[][256] = {
/* palette 1 (TTD Windows) */
{
M( 0, 0, 0), M(212, 0, 212), M(212, 0, 212), M(212, 0, 212),
M(212, 0, 212), M(212, 0, 212), M(212, 0, 212), M(212, 0, 212),
M(212, 0, 212), M(212, 0, 212), M(168, 168, 168), M(184, 184, 184),
M(200, 200, 200), M(216, 216, 216), M(232, 232, 232), M(252, 252, 252),
M( 52, 60, 72), M( 68, 76, 92), M( 88, 96, 112), M(108, 116, 132),
M(132, 140, 152), M(156, 160, 172), M(176, 184, 196), M(204, 208, 220),
M( 48, 44, 4), M( 64, 60, 12), M( 80, 76, 20), M( 96, 92, 28),
M(120, 120, 64), M(148, 148, 100), M(176, 176, 132), M(204, 204, 168),
M(100, 100, 100), M(116, 116, 116), M(104, 80, 44), M(124, 104, 72),
M(152, 132, 92), M(184, 160, 120), M(212, 188, 148), M(244, 220, 176),
M(132, 132, 132), M( 88, 4, 16), M(112, 16, 32), M(136, 32, 52),
M(160, 56, 76), M(188, 84, 108), M(204, 104, 124), M(220, 132, 144),
M(236, 156, 164), M(252, 188, 192), M(252, 212, 0), M(252, 232, 60),
M(252, 248, 128), M( 76, 40, 0), M( 96, 60, 8), M(116, 88, 28),
M(136, 116, 56), M(156, 136, 80), M(176, 156, 108), M(196, 180, 136),
M( 68, 24, 0), M( 96, 44, 4), M(128, 68, 8), M(156, 96, 16),
M(184, 120, 24), M(212, 156, 32), M(232, 184, 16), M(252, 212, 0),
M(252, 248, 128), M(252, 252, 192), M( 32, 4, 0), M( 64, 20, 8),
M( 84, 28, 16), M(108, 44, 28), M(128, 56, 40), M(148, 72, 56),
M(168, 92, 76), M(184, 108, 88), M(196, 128, 108), M(212, 148, 128),
M( 8, 52, 0), M( 16, 64, 0), M( 32, 80, 4), M( 48, 96, 4),
M( 64, 112, 12), M( 84, 132, 20), M(104, 148, 28), M(128, 168, 44),
M( 64, 64, 64), M( 44, 68, 32), M( 60, 88, 48), M( 80, 104, 60),
M(104, 124, 76), M(128, 148, 92), M(152, 176, 108), M(180, 204, 124),
M( 16, 52, 24), M( 32, 72, 44), M( 56, 96, 72), M( 76, 116, 88),
M( 96, 136, 108), M(120, 164, 136), M(152, 192, 168), M(184, 220, 200),
M( 32, 24, 0), M( 56, 28, 0), M( 80, 80, 80), M( 88, 52, 12),
M(104, 64, 24), M(124, 84, 44), M(140, 108, 64), M(160, 128, 88),
M( 76, 40, 16), M( 96, 52, 24), M(116, 68, 40), M(136, 84, 56),
M(164, 96, 64), M(184, 112, 80), M(204, 128, 96), M(212, 148, 112),
M(224, 168, 128), M(236, 188, 148), M( 80, 28, 4), M(100, 40, 20),
M(120, 56, 40), M(140, 76, 64), M(160, 100, 96), M(184, 136, 136),
M( 36, 40, 68), M( 48, 52, 84), M( 64, 64, 100), M( 80, 80, 116),
M(100, 100, 136), M(132, 132, 164), M(172, 172, 192), M(212, 212, 224),
M( 48, 48, 48), M( 64, 44, 144), M( 88, 64, 172), M(104, 76, 196),
M(120, 88, 224), M(140, 104, 252), M(160, 136, 252), M(188, 168, 252),
M( 0, 24, 108), M( 0, 36, 132), M( 0, 52, 160), M( 0, 72, 184),
M( 0, 96, 212), M( 24, 120, 220), M( 56, 144, 232), M( 88, 168, 240),
M(128, 196, 252), M(188, 224, 252), M( 16, 64, 96), M( 24, 80, 108),
M( 40, 96, 120), M( 52, 112, 132), M( 80, 140, 160), M(116, 172, 192),
M(156, 204, 220), M(204, 240, 252), M(172, 52, 52), M(212, 52, 52),
M(252, 52, 52), M(252, 100, 88), M(252, 144, 124), M(252, 184, 160),
M(252, 216, 200), M(252, 244, 236), M( 72, 20, 112), M( 92, 44, 140),
M(112, 68, 168), M(140, 100, 196), M(168, 136, 224), M(204, 180, 252),
M(204, 180, 252), M(232, 208, 252), M( 60, 0, 0), M( 92, 0, 0),
M(128, 0, 0), M(160, 0, 0), M(196, 0, 0), M(224, 0, 0),
M(252, 0, 0), M(252, 80, 0), M(252, 108, 0), M(252, 136, 0),
M(252, 164, 0), M(252, 192, 0), M(252, 220, 0), M(252, 252, 0),
M(204, 136, 8), M(228, 144, 4), M(252, 156, 0), M(252, 176, 48),
M(252, 196, 100), M(252, 216, 152), M( 8, 24, 88), M( 12, 36, 104),
M( 20, 52, 124), M( 28, 68, 140), M( 40, 92, 164), M( 56, 120, 188),
M( 72, 152, 216), M(100, 172, 224), M( 92, 156, 52), M(108, 176, 64),
M(124, 200, 76), M(144, 224, 92), M(224, 244, 252), M(204, 240, 252),
M(180, 220, 236), M(132, 188, 216), M( 88, 152, 172), M( 16, 16, 16),
M( 32, 32, 32), M( 8, 92, 104), M( 16, 100, 112), M( 24, 108, 120),
M( 32, 116, 128), M( 44, 124, 140), M( 92, 164, 184), M(116, 180, 196),
M(148, 200, 216), M(180, 220, 232), M(216, 244, 252), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 60, 0), M(252, 80, 0), M(252, 104, 0), M(252, 128, 0),
M(252, 148, 0), M(252, 172, 0), M(252, 196, 0), M(252, 0, 0),
M(252, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 228, 0), M(148, 148, 148), M(212, 0, 212), M(212, 0, 212),
M(212, 0, 212), M(212, 0, 212), M(212, 0, 212), M(212, 0, 212),
M(212, 0, 212), M(212, 0, 212), M(212, 0, 212), M(252, 252, 252)
},
/* palette 2 (mixed TTD DOS + TTD Windows palette */
{
M( 0, 0, 0), M( 16, 16, 16), M( 32, 32, 32), M( 48, 48, 48),
M( 65, 64, 65), M( 82, 80, 82), M( 98, 101, 98), M(115, 117, 115),
M(131, 133, 131), M(148, 149, 148), M(168, 168, 168), M(184, 184, 184),
M(200, 200, 200), M(216, 216, 216), M(232, 232, 232), M(252, 252, 252),
M( 52, 60, 72), M( 68, 76, 92), M( 88, 96, 112), M(108, 116, 132),
M(132, 140, 152), M(156, 160, 172), M(176, 184, 196), M(204, 208, 220),
M( 48, 44, 4), M( 64, 60, 12), M( 80, 76, 20), M( 96, 92, 28),
M(120, 120, 64), M(148, 148, 100), M(176, 176, 132), M(204, 204, 168),
M( 72, 44, 4), M( 88, 60, 20), M(104, 80, 44), M(124, 104, 72),
M(152, 132, 92), M(184, 160, 120), M(212, 188, 148), M(244, 220, 176),
M( 64, 0, 4), M( 88, 4, 16), M(112, 16, 32), M(136, 32, 52),
M(160, 56, 76), M(188, 84, 108), M(204, 104, 124), M(220, 132, 144),
M(236, 156, 164), M(252, 188, 192), M(252, 212, 0), M(252, 232, 60),
M(252, 248, 128), M( 76, 40, 0), M( 96, 60, 8), M(116, 88, 28),
M(136, 116, 56), M(156, 136, 80), M(176, 156, 108), M(196, 180, 136),
M( 68, 24, 0), M( 96, 44, 4), M(128, 68, 8), M(156, 96, 16),
M(184, 120, 24), M(212, 156, 32), M(232, 184, 16), M(252, 212, 0),
M(252, 248, 128), M(252, 252, 192), M( 32, 4, 0), M( 64, 20, 8),
M( 84, 28, 16), M(108, 44, 28), M(128, 56, 40), M(148, 72, 56),
M(168, 92, 76), M(184, 108, 88), M(196, 128, 108), M(212, 148, 128),
M( 8, 52, 0), M( 16, 64, 0), M( 32, 80, 4), M( 48, 96, 4),
M( 64, 112, 12), M( 84, 132, 20), M(104, 148, 28), M(128, 168, 44),
M( 28, 52, 24), M( 44, 68, 32), M( 60, 88, 48), M( 80, 104, 60),
M(104, 124, 76), M(128, 148, 92), M(152, 176, 108), M(180, 204, 124),
M( 16, 52, 24), M( 32, 72, 44), M( 56, 96, 72), M( 76, 116, 88),
M( 96, 136, 108), M(120, 164, 136), M(152, 192, 168), M(184, 220, 200),
M( 32, 24, 0), M( 56, 28, 0), M( 72, 40, 0), M( 88, 52, 12),
M(104, 64, 24), M(124, 84, 44), M(140, 108, 64), M(160, 128, 88),
M( 76, 40, 16), M( 96, 52, 24), M(116, 68, 40), M(136, 84, 56),
M(164, 96, 64), M(184, 112, 80), M(204, 128, 96), M(212, 148, 112),
M(224, 168, 128), M(236, 188, 148), M( 80, 28, 4), M(100, 40, 20),
M(120, 56, 40), M(140, 76, 64), M(160, 100, 96), M(184, 136, 136),
M( 36, 40, 68), M( 48, 52, 84), M( 64, 64, 100), M( 80, 80, 116),
M(100, 100, 136), M(132, 132, 164), M(172, 172, 192), M(212, 212, 224),
M( 40, 20, 112), M( 64, 44, 144), M( 88, 64, 172), M(104, 76, 196),
M(120, 88, 224), M(140, 104, 252), M(160, 136, 252), M(188, 168, 252),
M( 0, 24, 108), M( 0, 36, 132), M( 0, 52, 160), M( 0, 72, 184),
M( 0, 96, 212), M( 24, 120, 220), M( 56, 144, 232), M( 88, 168, 240),
M(128, 196, 252), M(188, 224, 252), M( 16, 64, 96), M( 24, 80, 108),
M( 40, 96, 120), M( 52, 112, 132), M( 80, 140, 160), M(116, 172, 192),
M(156, 204, 220), M(204, 240, 252), M(172, 52, 52), M(212, 52, 52),
M(252, 52, 52), M(252, 100, 88), M(252, 144, 124), M(252, 184, 160),
M(252, 216, 200), M(252, 244, 236), M( 72, 20, 112), M( 92, 44, 140),
M(112, 68, 168), M(140, 100, 196), M(168, 136, 224), M(204, 180, 252),
M(204, 180, 252), M(232, 208, 252), M( 60, 0, 0), M( 92, 0, 0),
M(128, 0, 0), M(160, 0, 0), M(196, 0, 0), M(224, 0, 0),
M(252, 0, 0), M(252, 80, 0), M(252, 108, 0), M(252, 136, 0),
M(252, 164, 0), M(252, 192, 0), M(252, 220, 0), M(252, 252, 0),
M(204, 136, 8), M(228, 144, 4), M(252, 156, 0), M(252, 176, 48),
M(252, 196, 100), M(252, 216, 152), M( 8, 24, 88), M( 12, 36, 104),
M( 20, 52, 124), M( 28, 68, 140), M( 40, 92, 164), M( 56, 120, 188),
M( 72, 152, 216), M(100, 172, 224), M( 92, 156, 52), M(108, 176, 64),
M(124, 200, 76), M(144, 224, 92), M(224, 244, 252), M(204, 240, 252),
M(180, 220, 236), M(132, 188, 216), M( 88, 152, 172), M( 16, 16, 16),
M( 32, 32, 32), M( 8, 92, 104), M( 16, 100, 112), M( 24, 108, 120),
M( 32, 116, 128), M( 44, 124, 140), M( 92, 164, 184), M(116, 180, 196),
M(148, 200, 216), M(180, 220, 232), M(216, 244, 252), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 60, 0), M(252, 80, 0), M(252, 104, 0), M(252, 128, 0),
M(252, 148, 0), M(252, 172, 0), M(252, 196, 0), M(252, 0, 0),
M(252, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M(252, 228, 0), M(148, 148, 148), M( 16, 101, 115), M( 24, 109, 123),
M( 32, 117, 131), M( 41, 125, 139), M( 90, 165, 189), M(115, 182, 197),
M(148, 202, 222), M(180, 222, 238), M(222, 246, 255), M(252, 252, 252)
}
};
#define GET_PALETTE(x) _palettes[x]
typedef struct {
Colour a[15]; // dark blue water
Colour ac[15]; // dark blue water Toyland
Colour lighthouse[12]; // lighthouse & stadium
Colour oil_ref[21]; // oil refinery
Colour e[15]; // ???
Colour b[45]; // glittery water
Colour bc[45]; // glittery water Toyland
} ExtraPaletteValues;
static const ExtraPaletteValues _extra_palette_values = {
{ M( 32, 68, 112), M( 36, 72, 116), M( 40, 76, 120), M( 44, 80, 124),
M( 48, 84, 128) },
{ M( 28, 108, 124), M( 32, 112, 128), M( 36, 116, 132), M( 40, 120, 136),
M( 44, 124, 140) },
{ M(240, 208, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0) },
{ M(252, 60, 0), M(252, 84, 0), M(252, 108, 0), M(252, 124, 0),
M(252, 148, 0), M(252, 172, 0), M(252, 196, 0) },
{ M( 76, 24, 8), M(108, 44, 24), M(144, 72, 52), M(176, 108, 84),
M(212, 148, 128) },
{ M(216, 244, 252), M(172, 208, 224), M(132, 172, 196), M(100, 132, 168),
M( 72, 100, 144), M( 72, 100, 144), M( 72, 100, 144), M( 72, 100, 144),
M( 72, 100, 144), M( 72, 100, 144), M( 72, 100, 144), M( 72, 100, 144),
M(100, 132, 168), M(132, 172, 196), M(172, 208, 224) },
{ M(216, 244, 252), M(180, 220, 232), M(148, 200, 216), M(116, 180, 196),
M( 92, 164, 184), M( 92, 164, 184), M( 92, 164, 184), M( 92, 164, 184),
M( 92, 164, 184), M( 92, 164, 184), M( 92, 164, 184), M( 92, 164, 184),
M(116, 180, 196), M(148, 200, 216), M(180, 220, 232) }
};
#undef M
// Color table for colors in lang files (e.g. {BLACK})
typedef struct StringColor {
byte text;
byte shadow;
} StringColor;
static const StringColor _string_colormap[] = {
{ 150, 215 }, // BLUE
{ 12, 215 }, // SILVER
{ 189, 215 }, // GOLD
{ 184, 215 }, // RED
{ 174, 215 }, // PURPLE
{ 30, 215 }, // LTBROWN
{ 195, 215 }, // ORANGE
{ 209, 215 }, // GREEN
{ 68, 215 }, // YELLOW
{ 95, 215 }, // DKGREEN
{ 79, 215 }, // CREAM
{ 116, 215 }, // BROWN
{ 15, 215 }, // WHITE
{ 152, 215 }, // LTBLUE
{ 32, 215 }, // GRAY
{ 133, 215 }, // DKBLUE
{ 215, 0 }, // BLACK
};

281
src/table/road_land.h Normal file
View File

@@ -0,0 +1,281 @@
/* $Id$ */
#define TILE_SEQ_LINE(img, dx, dy, sx, sy) { dx, dy, 0, sx, sy, 20, img },
#define TILE_SEQ_END() { 0, 0, 0, 0, 0, 0, 0 }
static const DrawTileSeqStruct _road_depot_NE[] = {
TILE_SEQ_LINE(0x584 | PALETTE_MODIFIER_COLOR, 0, 15, 16, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _road_depot_SE[] = {
TILE_SEQ_LINE(0x580, 0, 0, 1, 16)
TILE_SEQ_LINE(0x581 | PALETTE_MODIFIER_COLOR, 15, 0, 1, 16)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _road_depot_SW[] = {
TILE_SEQ_LINE(0x582, 0, 0, 16, 1)
TILE_SEQ_LINE(0x583 | PALETTE_MODIFIER_COLOR, 0, 15, 16, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _road_depot_NW[] = {
TILE_SEQ_LINE(0x585 | PALETTE_MODIFIER_COLOR, 15, 0, 1, 16)
TILE_SEQ_END()
};
static const DrawTileSprites _road_depot[] = {
{ 0xA4A, _road_depot_NE },
{ 0xA4A, _road_depot_SE },
{ 0xA4A, _road_depot_SW },
{ 0xA4A, _road_depot_NW }
};
#undef TILE_SEQ_BEGIN
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END
static const SpriteID _road_tile_sprites_1[16] = {
0, 0x546, 0x545, 0x53B, 0x544, 0x534, 0x53E, 0x539,
0x543, 0x53C, 0x535, 0x538, 0x53D, 0x537, 0x53A, 0x536
};
#define MAKELINE(a, b, c) { a, b, c },
#define ENDLINE { 0, 0, 0 }
static const DrawRoadTileStruct _road_display_datas2_0[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_1[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_2[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_3[] = {
MAKELINE(0x57f, 1, 8)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_4[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_5[] = {
MAKELINE(0x57f, 1, 8)
MAKELINE(0x57e, 14, 8)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_6[] = {
MAKELINE(0x57e, 8, 1)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_7[] = {
MAKELINE(0x57f, 1, 8)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_8[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_9[] = {
MAKELINE(0x57f, 8, 14)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_10[] = {
MAKELINE(0x57f, 8, 14)
MAKELINE(0x57e, 8, 1)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_11[] = {
MAKELINE(0x57f, 8, 14)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_12[] = {
MAKELINE(0x57e, 8, 1)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_13[] = {
MAKELINE(0x57e, 14, 8)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_14[] = {
MAKELINE(0x57e, 8, 1)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_15[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_16[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_17[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_18[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_19[] = {
MAKELINE(0x1212, 0, 2)
MAKELINE(0x1212, 3, 9)
MAKELINE(0x1212, 10, 12)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_20[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_21[] = {
MAKELINE(0x1212, 0, 2)
MAKELINE(0x1212, 0, 10)
MAKELINE(0x1212, 12, 2)
MAKELINE(0x1212, 12, 10)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_22[] = {
MAKELINE(0x1212, 10, 0)
MAKELINE(0x1212, 3, 3)
MAKELINE(0x1212, 0, 10)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_23[] = {
MAKELINE(0x1212, 0, 2)
MAKELINE(0x1212, 0, 10)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_24[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_25[] = {
MAKELINE(0x1212, 12, 2)
MAKELINE(0x1212, 9, 9)
MAKELINE(0x1212, 2, 12)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_26[] = {
MAKELINE(0x1212, 2, 0)
MAKELINE(0x1212, 10, 0)
MAKELINE(0x1212, 2, 12)
MAKELINE(0x1212, 10, 12)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_27[] = {
MAKELINE(0x1212, 2, 12)
MAKELINE(0x1212, 10, 12)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_28[] = {
MAKELINE(0x1212, 2, 0)
MAKELINE(0x1212, 9, 3)
MAKELINE(0x1212, 12, 10)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_29[] = {
MAKELINE(0x1212, 12, 2)
MAKELINE(0x1212, 12, 10)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_30[] = {
MAKELINE(0x1212, 2, 0)
MAKELINE(0x1212, 10, 0)
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_31[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_32[] = {
ENDLINE
};
#undef MAKELINE
#undef ENDLINE
static const DrawRoadTileStruct* const _road_display_table_1[] = {
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
_road_display_datas2_32,_road_display_datas2_32,
};
static const DrawRoadTileStruct* const _road_display_table_2[] = {
_road_display_datas2_0,
_road_display_datas2_1,
_road_display_datas2_2,
_road_display_datas2_3,
_road_display_datas2_4,
_road_display_datas2_5,
_road_display_datas2_6,
_road_display_datas2_7,
_road_display_datas2_8,
_road_display_datas2_9,
_road_display_datas2_10,
_road_display_datas2_11,
_road_display_datas2_12,
_road_display_datas2_13,
_road_display_datas2_14,
_road_display_datas2_15,
};
static const DrawRoadTileStruct* const _road_display_table_3[] = {
_road_display_datas2_16,
_road_display_datas2_17,
_road_display_datas2_18,
_road_display_datas2_19,
_road_display_datas2_20,
_road_display_datas2_21,
_road_display_datas2_22,
_road_display_datas2_23,
_road_display_datas2_24,
_road_display_datas2_25,
_road_display_datas2_26,
_road_display_datas2_27,
_road_display_datas2_28,
_road_display_datas2_29,
_road_display_datas2_30,
_road_display_datas2_31,
};
static const DrawRoadTileStruct* const * const _road_display_table[] = {
_road_display_table_1,
_road_display_table_1,
_road_display_table_1,
_road_display_table_2,
_road_display_table_1,
_road_display_table_3,
};

1077
src/table/roadveh.h Normal file

File diff suppressed because it is too large Load Diff

1397
src/table/sprites.h Normal file

File diff suppressed because it is too large Load Diff

1203
src/table/station_land.h Normal file

File diff suppressed because it is too large Load Diff

2226
src/table/town_land.h Normal file

File diff suppressed because it is too large Load Diff

52
src/table/track_land.h Normal file
View File

@@ -0,0 +1,52 @@
/* $Id$ */
#define TILE_SEQ_LINE(img, dx, dy, sx, sy) { dx, dy, 0, sx, sy, 23, img },
#define TILE_SEQ_END() { 0x80, 0, 0, 0, 0, 0, 0 }
static const DrawTileSeqStruct _depot_gfx_NE[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_NE | PALETTE_MODIFIER_COLOR, 2, 13, 13, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _depot_gfx_SE[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SE_1 | PALETTE_MODIFIER_COLOR, 2, 2, 1, 13)
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SE_2 | PALETTE_MODIFIER_COLOR, 13, 2, 1, 13)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _depot_gfx_SW[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SW_1 | PALETTE_MODIFIER_COLOR, 2, 2, 13, 1)
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SW_2 | PALETTE_MODIFIER_COLOR, 2, 13, 13, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _depot_gfx_NW[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_NW | PALETTE_MODIFIER_COLOR, 13, 2, 1, 13)
TILE_SEQ_END()
};
static const DrawTileSprites _depot_gfx_table[] = {
{ SPR_FLAT_GRASS_TILE, _depot_gfx_NE },
{ SPR_RAIL_TRACK_Y, _depot_gfx_SE },
{ SPR_RAIL_TRACK_X, _depot_gfx_SW },
{ SPR_FLAT_GRASS_TILE, _depot_gfx_NW }
};
static const DrawTileSeqStruct _waypoint_gfx_X[] = {
TILE_SEQ_LINE(PALETTE_MODIFIER_COLOR | SPR_WAYPOINT_X_1, 0, 0, 16, 5)
TILE_SEQ_LINE(PALETTE_MODIFIER_COLOR | SPR_WAYPOINT_X_2, 0, 11, 16, 5)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _waypoint_gfx_Y[] = {
TILE_SEQ_LINE(PALETTE_MODIFIER_COLOR | SPR_WAYPOINT_Y_1, 0, 0, 5, 16)
TILE_SEQ_LINE(PALETTE_MODIFIER_COLOR | SPR_WAYPOINT_Y_2, 11, 0, 5, 16)
TILE_SEQ_END()
};
static const DrawTileSprites _waypoint_gfx_table[] = {
{ SPR_RAIL_TRACK_X, _waypoint_gfx_X },
{ SPR_RAIL_TRACK_Y, _waypoint_gfx_Y }
};

57
src/table/train_cmd.h Normal file
View File

@@ -0,0 +1,57 @@
/* $Id$ */
static const SpriteID _engine_sprite_base[] = {
0x0B59, 0x0B61, 0x0B69, 0x0BE1, 0x0B71, 0x0B75, 0x0B7D, 0x0B7D,
0x0B85, 0x0B85, 0x0B8D, 0x0B8D, 0x0BC9, 0x0BD1, 0x0BD9, 0x0BE9,
0x0BED, 0x0BED, 0x0BF5, 0x0BF9, 0x0B79, 0x0B9D, 0x0B9D, 0x0B95,
0x0B95, 0x0BA5, 0x0BA9, 0x0BA9, 0x0BC1, 0x0BC5, 0x0BB1, 0x0BB9,
0x0BB9, 0x0AAD, 0x0AB1, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC1, 0x0AC9,
0x0ACD, 0x0AD5, 0x0AD1, 0x0AD9, 0x0AC5, 0x0AD1, 0x0AD5, 0x0AF9,
0x0AFD, 0x0B05, 0x0AB9, 0x0AC1, 0x0AC9, 0x0AD1, 0x0AD9, 0x0AE1,
0x0AE5, 0x0AE9, 0x0AF1, 0x0AF9, 0x0B0D, 0x0B11, 0x0B15, 0x0B19,
0x0B1D, 0x0B21, 0x0B29, 0x0B2D, 0x0B35, 0x0B31, 0x0B39, 0x0B25,
0x0B31, 0x0B35,
};
/* For how many directions do we have sprites? (8 or 4; if 4, the other 4
* directions are symmetric. */
static const byte _engine_sprite_and[] = {
7, 7, 7, 7, 3, 3, 7, 7,
7, 7, 7, 7, 7, 7, 7, 3,
7, 7, 3, 7, 3, 7, 7, 7,
7, 3, 7, 7, 3, 3, 7, 7,
7, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3,
};
/* Non-zero for multihead trains. */
static const byte _engine_sprite_add[] = {
0, 0, 0, 0, 0, 0, 0, 4,
0, 4, 0, 4, 0, 0, 0, 0,
0, 4, 0, 0, 0, 0, 4, 0,
4, 0, 0, 4, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
};
static const byte _wagon_full_adder[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 44, 0, 0, 0, 0, 24,
24, 24, 24, 0, 0, 32, 32, 0,
4, 4, 4, 4, 4, 4, 4, 0,
0, 4, 4, 4, 0, 44, 0, 0,
0, 0, 24, 24, 24, 24, 0, 0,
32, 32
};

228
src/table/tree_land.h Normal file
View File

@@ -0,0 +1,228 @@
/* $Id$ */
#ifndef TREE_LAND_H
#define TREE_LAND_H
static const SpriteID _tree_sprites_1[] = {
SPR_FLAT_1_QUART_SNOWY_TILE,
SPR_FLAT_2_QUART_SNOWY_TILE,
SPR_FLAT_3_QUART_SNOWY_TILE,
SPR_FLAT_SNOWY_TILE
};
static const byte _tree_base_by_landscape[4] = {0, 12, 20, 32};
static const byte _tree_count_by_landscape[4] = {12, 8, 12, 9};
typedef struct TreePos {
uint8 x;
uint8 y;
} TreePos;
static const TreePos _tree_layout_xy[][4] = {
{ { 9, 3 }, { 1, 8 }, { 0, 0 }, { 8, 9 } },
{ { 4, 4 }, { 9, 1 }, { 6, 9 }, { 0, 9 } },
{ { 9, 1 }, { 0, 9 }, { 6, 6 }, { 3, 0 } },
{ { 3, 9 }, { 8, 2 }, { 9, 9 }, { 1, 5 } }
};
static const PalSpriteID _tree_layout_sprite[164+(79-48+1)][4] = {
{ 0x652, 0x659, 0x660, 0x667}, /* 0 */
{ 0x652, 0x667, 0x66e, 0x675}, /* 1 */
{ 0x652, 0x66e, 0x659, 0x675}, /* 2 */
{ 0x652, 0x652, 0x660, 0x66e}, /* 3 */
{ 0x660, 0x667, 0x659, 0x652}, /* 4 */
{ 0x660, 0x675, 0x660, 0x660}, /* 5 */
{ 0x660, 0x652, 0x652, 0x66e}, /* 6 */
{ 0x660, 0x675, 0x667, 0x659}, /* 7 */
{ 0x675, 0x660, 0x675, 0x675}, /* 8 */
{ 0x675, 0x659, 0x652, 0x652}, /* 9 */
{ 0x675, 0x66e, 0x652, 0x652}, /* 10 */
{ 0x675, 0x667, 0x659, 0x667}, /* 11 */
{ 0x628, 0x652, 0x660, 0x62f}, /* 12 */
{ 0x628, 0x636, 0x675, 0x644}, /* 13 */
{ 0x628, 0x652, 0x63d, 0x66e}, /* 14 */
{ 0x628, 0x667, 0x644, 0x652}, /* 15 */
{ 0x644, 0x659, 0x660, 0x628}, /* 16 */
{ 0x644, 0x64b, 0x659, 0x636}, /* 17 */
{ 0x644, 0x675, 0x652, 0x63d}, /* 18 */
{ 0x644, 0x63d, 0x66e, 0x652}, /* 19 */
{ 0x636, 0x636, 0x628, 0x636}, /* 20 */
{ 0x636, 0x63d, 0x636, 0x636}, /* 21 */
{ 0x636, 0x64b, 0x636, 0x636}, /* 22 */
{ 0x636, 0x636, 0x636, 0x636}, /* 23 */
{ 0x64b, 0x628, 0x62f, 0x636}, /* 24 */
{ 0x64b, 0x63d, 0x644, 0x636}, /* 25 */
{ 0x64b, 0x636, 0x63d, 0x628}, /* 26 */
{ 0x64b, 0x64b, 0x636, 0x63d}, /* 27 */
{ 0x62f, 0x644, 0x644, 0x636}, /* 28 */
{ 0x62f, 0x62f, 0x636, 0x628}, /* 29 */
{ 0x62f, 0x64b, 0x636, 0x636}, /* 30 */
{ 0x62f, 0x636, 0x62f, 0x636}, /* 31 */
{ 0x67c, 0x675, 0x683, 0x67c}, /* 32 */
{ 0x67c, 0x69f, 0x67c, 0x659}, /* 33 */
{ 0x67c, 0x67c, 0x67c, 0x6a6}, /* 34 */
{ 0x67c, 0x691, 0x66e, 0x68a}, /* 35 */
{ 0x68a, 0x68a, 0x698, 0x68a}, /* 36 */
{ 0x68a, 0x698, 0x683, 0x68a}, /* 37 */
{ 0x68a, 0x67c, 0x691, 0x68a}, /* 38 */
{ 0x68a, 0x683, 0x6a6, 0x69f}, /* 39 */
{ 0x698, 0x68a, 0x698, 0x652}, /* 40 */
{ 0x698, 0x698, 0x660, 0x667}, /* 41 */
{ 0x698, 0x67c, 0x6a6, 0x698}, /* 42 */
{ 0x698, 0x698, 0x698, 0x691}, /* 43 */
{ 0x6a6, 0x6a6, 0x67c, 0x660}, /* 44 */
{ 0x6a6, 0x69f, 0x6a6, 0x652}, /* 45 */
{ 0x6a6, 0x67c, 0x6a6, 0x691}, /* 46 */
{ 0x6a6, 0x691, 0x69f, 0x6a6}, /* 47 */
{ 0x6ad, 0x6ad, 0x6ad, 0x6ad}, /* 48 */
{ 0x6ad, 0x6ad, 0x6c2, 0x6d0}, /* 49 */
{ 0x6ad, 0x6d7, 0x6ad, 0x6ad}, /* 50 */
{ 0x6ad, 0x6d0, 0x6c9, 0x6ad}, /* 51 */
{ 0x6d0, 0x6d0, 0x6d0, 0x6ad}, /* 52 */
{ 0x6d0, 0x6ad, 0x6d7, 0x6c9}, /* 53 */
{ 0x6d0, 0x6d7, 0x6d0, 0x6c2}, /* 54 */
{ 0x6d0, 0x6d0, 0x6d0, 0x6ad}, /* 55 */
{ 0x6d7, 0x6d7, 0x6d7, 0x6d7}, /* 56 */
{ 0x6d7, 0x6d7, 0x6ad, 0x6ad}, /* 57 */
{ 0x6d7, 0x6d0, 0x6d7, 0x6ad}, /* 58 */
{ 0x6d7, 0x6d7, 0x6d0, 0x6ad}, /* 59 */
{ 0x6c2, 0x6d0, 0x6c9, 0x6c2}, /* 60 */
{ 0x6c2, 0x6c9, 0x6c2, 0x6ad}, /* 61 */
{ 0x6c2, 0x6c2, 0x6c2, 0x6ad}, /* 62 */
{ 0x6c2, 0x6c2, 0x6c2, 0x6c9}, /* 63 */
{ 0x6c9, 0x6d0, 0x6b4, 0x6c2}, /* 64 */
{ 0x6c9, 0x6bb, 0x6de, 0x6d7}, /* 65 */
{ 0x6c9, 0x6c2, 0x6bb, 0x6b4}, /* 66 */
{ 0x6c9, 0x6bb, 0x6c2, 0x6de}, /* 67 */
{ 0x6b4, 0x6b4, 0x6de, 0x6c9}, /* 68 */
{ 0x6b4, 0x6bb, 0x6bb, 0x6ad}, /* 69 */
{ 0x6b4, 0x6de, 0x6bb, 0x6b4}, /* 70 */
{ 0x6b4, 0x6ad, 0x6c2, 0x6de}, /* 71 */
{ 0x6bb, 0x6d0, 0x6de, 0x6c2}, /* 72 */
{ 0x6bb, 0x6b4, 0x6bb, 0x6d7}, /* 73 */
{ 0x6bb, 0x6de, 0x6bb, 0x6b4}, /* 74 */
{ 0x6bb, 0x6c9, 0x6c2, 0x6de}, /* 75 */
{ 0x6de, 0x6d7, 0x6de, 0x6c2}, /* 76 */
{ 0x6de, 0x6bb, 0x6de, 0x6d0}, /* 77 */
{ 0x6de, 0x6de, 0x6bb, 0x6b4}, /* 78 */
{ 0x6de, 0x6c9, 0x6c2, 0x6de}, /* 79 */
{ 0x72b, 0x732, 0x72b, 0x739}, /* 80 */
{ 0x72b, 0x747, 0x755, 0x72b}, /* 81 */
{ 0x72b, 0x72b, 0x76a, 0x786}, /* 82 */
{ 0x72b, 0x74e, 0x72b, 0x72b}, /* 83 */
{ 0x732, 0x732, 0x72b, 0x739}, /* 84 */
{ 0x732, 0x747, 0x732, 0x732}, /* 85 */
{ 0x732, 0x732, 0x755, 0x794}, /* 86 */
{ 0x732, 0x74e, 0x732, 0x78d}, /* 87 */
{ 0x747, 0x732, 0x747, 0x740}, /* 88 */
{ 0x747, 0x747, 0x732, 0x76a}, /* 89 */
{ 0x747, 0x72b, 0x755, 0x747}, /* 90 */
{ 0x747, 0x786, 0x732, 0x747}, /* 91 */
{ 0x74e, 0x74e, 0x72b, 0x794}, /* 92 */
{ 0x74e, 0x755, 0x732, 0x74e}, /* 93 */
{ 0x74e, 0x72b, 0x786, 0x747}, /* 94 */
{ 0x74e, 0x74e, 0x732, 0x794}, /* 95 */
{ 0x76a, 0x76a, 0x74e, 0x74e}, /* 96 */
{ 0x76a, 0x794, 0x732, 0x76a}, /* 97 */
{ 0x76a, 0x732, 0x786, 0x76a}, /* 98 */
{ 0x76a, 0x786, 0x732, 0x78d}, /* 99 */
{ 0x78d, 0x78d, 0x74e, 0x794}, /* 100 */
{ 0x78d, 0x732, 0x739, 0x747}, /* 101 */
{ 0x78d, 0x732, 0x786, 0x76a}, /* 102 */
{ 0x78d, 0x786, 0x78d, 0x794}, /* 103 */
{ 0x786, 0x786, 0x740, 0x732}, /* 104 */
{ 0x786, 0x786, 0x72b, 0x732}, /* 105 */
{ 0x786, 0x732, 0x786, 0x786}, /* 106 */
{ 0x786, 0x786, 0x78d, 0x794}, /* 107 */
{ 0x778, 0x778, 0x77f, 0x778}, /* 108 */
{ 0x778, 0x77f, 0x778, 0x77f}, /* 109 */
{ 0x778, 0x77f, 0x77f, 0x778}, /* 110 */
{ 0x778, 0x778, 0x778, 0x77f}, /* 111 */
{ 0x75c, 0x71d, 0x75c, 0x724}, /* 112 */
{ 0x75c, 0x72b, 0x75c, 0x763}, /* 113 */
{ 0x75c, 0x75c, 0x771, 0x71d}, /* 114 */
{ 0x75c, 0x771, 0x75c, 0x75c}, /* 115 */
{ 0x771, 0x771, 0x75c, 0x71d}, /* 116 */
{ 0x771, 0x747, 0x75c, 0x771}, /* 117 */
{ 0x771, 0x75c, 0x771, 0x724}, /* 118 */
{ 0x771, 0x771, 0x75c, 0x763}, /* 119 */
{ 0x71d, 0x71d, 0x771, 0x724}, /* 120 */
{ 0x71d, 0x74e, 0x763, 0x71d}, /* 121 */
{ 0x71d, 0x724, 0x794, 0x71d}, /* 122 */
{ 0x71d, 0x71d, 0x75c, 0x78d}, /* 123 */
{ 0x794, 0x724, 0x75c, 0x794}, /* 124 */
{ 0x794, 0x794, 0x75c, 0x71d}, /* 125 */
{ 0x794, 0x724, 0x794, 0x71d}, /* 126 */
{ 0x794, 0x794, 0x771, 0x78d}, /* 127 */
{ 0x79b | PALETTE_TO_RED, 0x79b | PALETTE_TO_PALE_GREEN, 0x79b | PALETTE_TO_MAUVE, 0x79b | PALETTE_TO_PURPLE}, /* 128 */
{ 0x79b, 0x79b | PALETTE_TO_GREY, 0x79b | PALETTE_TO_GREEN, 0x79b | PALETTE_TO_WHITE}, /* 129 */
{ 0x79b | PALETTE_TO_GREEN, 0x79b | PALETTE_TO_ORANGE, 0x79b | PALETTE_TO_PINK, 0x79b}, /* 130 */
{ 0x79b | PALETTE_TO_YELLOW, 0x79b | PALETTE_TO_RED, 0x79b | PALETTE_TO_CREAM, 0x79b | PALETTE_TO_RED}, /* 131 */
{ 0x7a2, 0x7a2 | PALETTE_TO_RED, 0x7a2 | PALETTE_TO_PINK, 0x7a2 | PALETTE_TO_PURPLE}, /* 132 */
{ 0x7a2 | PALETTE_TO_MAUVE, 0x7a2 | PALETTE_TO_GREEN, 0x7a2 | PALETTE_TO_PINK, 0x7a2 | PALETTE_TO_GREY}, /* 133 */
{ 0x7a2 | PALETTE_TO_RED, 0x7a2 | PALETTE_TO_PALE_GREEN, 0x7a2 | PALETTE_TO_YELLOW, 0x7a2 | PALETTE_TO_WHITE}, /* 134 */
{ 0x7a2 | PALETTE_TO_ORANGE, 0x7a2 | PALETTE_TO_MAUVE, 0x7a2 | PALETTE_TO_CREAM, 0x7a2 | PALETTE_TO_BROWN}, /* 135 */
{ 0x7a9 | PALETTE_TO_RED, 0x7a9, 0x7a9 | PALETTE_TO_ORANGE, 0x7a9 | PALETTE_TO_GREY}, /* 136 */
{ 0x7a9 | PALETTE_TO_ORANGE, 0x7a9 | PALETTE_TO_GREEN, 0x7a9 | PALETTE_TO_PALE_GREEN, 0x7a9 | PALETTE_TO_MAUVE}, /* 137 */
{ 0x7a9 | PALETTE_TO_PINK, 0x7a9 | PALETTE_TO_RED, 0x7a9 | PALETTE_TO_GREEN, 0x7a9 | PALETTE_TO_BROWN}, /* 138 */
{ 0x7a9 | PALETTE_TO_GREEN, 0x7a9, 0x7a9 | PALETTE_TO_RED, 0x7a9 | PALETTE_TO_CREAM}, /* 139 */
{ 0x7b0, 0x7b0, 0x7b0, 0x7b0}, /* 140 */
{ 0x7b0, 0x7b0, 0x7b0, 0x7b0}, /* 141 */
{ 0x7b0, 0x7b0, 0x7b0, 0x7b0}, /* 142 */
{ 0x7b0, 0x7b0, 0x7b0, 0x7b0}, /* 143 */
{ 0x7b7 | PALETTE_TO_PINK, 0x7b7 | PALETTE_TO_RED, 0x7b7 | PALETTE_TO_ORANGE, 0x7b7 | PALETTE_TO_MAUVE}, /* 144 */
{ 0x7b7 | PALETTE_TO_RED, 0x7b7, 0x7b7 | PALETTE_TO_GREY, 0x7b7 | PALETTE_TO_CREAM}, /* 145 */
{ 0x7b7 | PALETTE_TO_GREEN, 0x7b7 | PALETTE_TO_BROWN, 0x7b7 | PALETTE_TO_PINK, 0x7b7 | PALETTE_TO_RED}, /* 146 */
{ 0x7b7, 0x7b7 | PALETTE_TO_PALE_GREEN, 0x7b7 | PALETTE_TO_ORANGE, 0x7b7 | PALETTE_TO_RED}, /* 147 */
{ 0x7be | PALETTE_TO_RED, 0x7be | PALETTE_TO_PINK, 0x7be | PALETTE_TO_GREEN, 0x7be}, /* 148 */
{ 0x7be | PALETTE_TO_GREEN, 0x7be | PALETTE_TO_BROWN, 0x7be | PALETTE_TO_PURPLE, 0x7be | PALETTE_TO_GREY}, /* 149 */
{ 0x7be | PALETTE_TO_MAUVE, 0x7be | PALETTE_TO_CREAM, 0x7be | PALETTE_TO_ORANGE, 0x7be | PALETTE_TO_RED}, /* 150 */
{ 0x7be, 0x7be | PALETTE_TO_RED, 0x7be | PALETTE_TO_PALE_GREEN, 0x7be | PALETTE_TO_PINK}, /* 151 */
{ 0x7c5 | PALETTE_TO_YELLOW, 0x7c5 | PALETTE_TO_RED, 0x7c5 | PALETTE_TO_WHITE, 0x7c5 | PALETTE_TO_CREAM}, /* 152 */
{ 0x7c5 | PALETTE_TO_RED, 0x7c5 | PALETTE_TO_PALE_GREEN, 0x7c5 | PALETTE_TO_BROWN, 0x7c5 | PALETTE_TO_YELLOW}, /* 153 */
{ 0x7c5, 0x7c5 | PALETTE_TO_PURPLE, 0x7c5 | PALETTE_TO_GREEN, 0x7c5 | PALETTE_TO_YELLOW}, /* 154 */
{ 0x7c5 | PALETTE_TO_PINK, 0x7c5 | PALETTE_TO_CREAM, 0x7c5, 0x7c5 | PALETTE_TO_GREY}, /* 155 */
{ 0x7cc | PALETTE_TO_YELLOW, 0x7cc | PALETTE_TO_GREY, 0x7cc | PALETTE_TO_PURPLE, 0x7cc | PALETTE_TO_BROWN}, /* 156 */
{ 0x7cc | PALETTE_TO_GREEN, 0x7cc, 0x7cc | PALETTE_TO_CREAM, 0x7cc | PALETTE_TO_WHITE}, /* 157 */
{ 0x7cc | PALETTE_TO_RED, 0x7cc | PALETTE_TO_PALE_GREEN, 0x7cc | PALETTE_TO_MAUVE, 0x7cc | PALETTE_TO_RED}, /* 158 */
{ 0x7cc | PALETTE_TO_PINK, 0x7cc | PALETTE_TO_ORANGE, 0x7cc | PALETTE_TO_GREEN, 0x7cc | PALETTE_TO_YELLOW}, /* 159 */
{ 0x7d3 | PALETTE_TO_RED, 0x7d3 | PALETTE_TO_PINK, 0x7d3 | PALETTE_TO_BROWN, 0x7d3 | PALETTE_TO_WHITE}, /* 160 */
{ 0x7d3 | PALETTE_TO_GREEN, 0x7d3 | PALETTE_TO_ORANGE, 0x7d3 | PALETTE_TO_GREY, 0x7d3 | PALETTE_TO_MAUVE}, /* 161 */
{ 0x7d3 | PALETTE_TO_YELLOW, 0x7d3 | PALETTE_TO_PALE_GREEN, 0x7d3, 0x7d3 | PALETTE_TO_CREAM}, /* 162 */
{ 0x7d3 | PALETTE_TO_GREY, 0x7d3 | PALETTE_TO_RED, 0x7d3 | PALETTE_TO_WHITE, 0x7d3}, /* 163 */
/* the extra things follow */
{ 0x6e5, 0x6e5, 0x6e5, 0x6e5}, /* 0 */
{ 0x6e5, 0x6e5, 0x6fa, 0x708}, /* 1 */
{ 0x6e5, 0x70f, 0x6e5, 0x6e5}, /* 2 */
{ 0x6e5, 0x708, 0x701, 0x6e5}, /* 3 */
{ 0x708, 0x708, 0x708, 0x6e5}, /* 4 */
{ 0x708, 0x6e5, 0x70f, 0x701}, /* 5 */
{ 0x708, 0x70f, 0x708, 0x6fa}, /* 6 */
{ 0x708, 0x708, 0x708, 0x6e5}, /* 7 */
{ 0x70f, 0x70f, 0x70f, 0x70f}, /* 8 */
{ 0x70f, 0x70f, 0x6e5, 0x6e5}, /* 9 */
{ 0x70f, 0x708, 0x70f, 0x6e5}, /* 10 */
{ 0x70f, 0x70f, 0x708, 0x6e5}, /* 11 */
{ 0x6fa, 0x708, 0x701, 0x6fa}, /* 12 */
{ 0x6fa, 0x701, 0x6fa, 0x6e5}, /* 13 */
{ 0x6fa, 0x6fa, 0x6fa, 0x6e5}, /* 14 */
{ 0x6fa, 0x6fa, 0x6fa, 0x701}, /* 15 */
{ 0x701, 0x708, 0x6ec, 0x6fa}, /* 16 */
{ 0x701, 0x6f3, 0x716, 0x70f}, /* 17 */
{ 0x701, 0x6fa, 0x6f3, 0x6ec}, /* 18 */
{ 0x701, 0x6f3, 0x6fa, 0x716}, /* 19 */
{ 0x6ec, 0x6ec, 0x716, 0x701}, /* 20 */
{ 0x6ec, 0x6f3, 0x6f3, 0x6e5}, /* 21 */
{ 0x6ec, 0x716, 0x6f3, 0x6ec}, /* 22 */
{ 0x6ec, 0x6e5, 0x6fa, 0x716}, /* 23 */
{ 0x6f3, 0x708, 0x716, 0x6fa}, /* 24 */
{ 0x6f3, 0x6ec, 0x6f3, 0x70f}, /* 25 */
{ 0x6f3, 0x716, 0x6f3, 0x6ec}, /* 26 */
{ 0x6f3, 0x701, 0x6fa, 0x716}, /* 27 */
{ 0x716, 0x70f, 0x716, 0x6fa}, /* 28 */
{ 0x716, 0x6f3, 0x716, 0x708}, /* 29 */
{ 0x716, 0x716, 0x6f3, 0x6ec}, /* 30 */
{ 0x716, 0x701, 0x6fa, 0x716}, /* 31 */
};
#endif /* TREE_LAND_H */

21
src/table/unicode.h Normal file
View File

@@ -0,0 +1,21 @@
/* $Id$ */
typedef struct DefaultUnicodeMapping {
WChar code; ///< Unicode value
byte key; ///< Character index of sprite
} DefaultUnicodeMapping;
/* Default unicode mapping table for sprite based glyphs.
* This table allows us use unicode characters even though the glyphs don't
* exist, or are in the wrong place, in the standard sprite fonts.
* This is not used for FreeType rendering */
static DefaultUnicodeMapping _default_unicode_map[] = {
{ 0x010D, 0x63 }, /* Small letter c with caron */
{ 0x0160, 0xA6 }, /* Capital letter s with caron */
{ 0x0161, 0xA8 }, /* Small letter s with caron */
{ 0x017E, 0xB8 }, /* Small letter z with caron */
{ 0x20AC, 0xA4 }, /* Euro symbol */
};

131
src/table/unmovable_land.h Normal file
View File

@@ -0,0 +1,131 @@
/* $Id$ */
typedef struct DrawTileUnmovableStruct {
uint16 image;
byte subcoord_x;
byte subcoord_y;
byte width;
byte height;
byte z_size;
byte unused;
} DrawTileUnmovableStruct;
#define TILE_SEQ_END() { 0x80, 0, 0, 0, 0, 0, 0 }
static const DrawTileUnmovableStruct _draw_tile_unmovable_data[] = {
{0xA29, 7, 7, 2, 2, 70, 0},
{0xA2A, 4, 4, 7, 7, 61, 0},
};
static const DrawTileSeqStruct _unmovable_display_datas_0[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_1[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_2[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_3[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_4[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_5[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_6[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_7[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_8[] = {
{ 0, 0, 0, 16, 16, 20, 0xA34 | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_9[] = {
{ 0, 0, 0, 16, 16, 20, 0xA36 | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_10[] = {
{ 0, 0, 0, 16, 16, 20, 0xA38 | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_11[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_12[] = {
{ 0, 0, 0, 16, 16, 50, 0xA3B | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_13[] = {
{ 0, 0, 0, 16, 16, 50, 0xA3D | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_14[] = {
{ 0, 0, 0, 16, 16, 50, 0xA3F | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_15[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_16[] = {
{ 0, 0, 0, 16, 16, 60, 0xA42 | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_17[] = {
{ 0, 0, 0, 16, 16, 60, 0xA44 | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_18[] = {
{ 0, 0, 0, 16, 16, 60, 0xA46 | PALETTE_MODIFIER_COLOR },
TILE_SEQ_END()
};
static const DrawTileSeqStruct _unmovable_display_datas_19[] = {
TILE_SEQ_END()
};
static const DrawTileSprites _unmovable_display_datas[] = {
{ 0xA2B | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_0 },
{ 0xA2C | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_1 },
{ 0xA2D | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_2 },
{ 0xA2E | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_3 },
{ 0xA2F | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_4 },
{ 0xA30 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_5 },
{ 0xA31 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_6 },
{ 0xA32 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_7 },
{ 0xA33 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_8 },
{ 0xA35 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_9 },
{ 0xA37 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_10 },
{ 0xA39 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_11 },
{ 0xA3A | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_12 },
{ 0xA3C | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_13 },
{ 0xA3E | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_14 },
{ 0xA40 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_15 },
{ 0xA41 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_16 },
{ 0xA43 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_17 },
{ 0xA45 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_18 },
{ 0xA47 | PALETTE_MODIFIER_COLOR, _unmovable_display_datas_19 },
};

151
src/table/water_land.h Normal file
View File

@@ -0,0 +1,151 @@
/* $Id$ */
typedef struct WaterDrawTileStruct {
byte delta_x;
byte delta_y;
byte delta_z;
byte width;
byte height;
byte unk;
SpriteID image;
} WaterDrawTileStruct;
#define BEGIN(image) { 0, 0, 0, 0, 0, 0, image }
#define END(y) { 0x80, y, 0, 0, 0, 0, 0 }
static const WaterDrawTileStruct _shipdepot_display_seq_1[] = {
BEGIN(0xFDD),
{ 0, 15, 0, 16, 1, 0x14, 0xFE8 | PALETTE_MODIFIER_COLOR },
END(0)
};
static const WaterDrawTileStruct _shipdepot_display_seq_2[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 16, 1, 0x14, 0xFEA },
{ 0, 15, 0, 16, 1, 0x14, 0xFE6 | PALETTE_MODIFIER_COLOR },
END(0)
};
static const WaterDrawTileStruct _shipdepot_display_seq_3[] = {
BEGIN(0xFDD),
{ 15, 0, 0, 1, 0x10, 0x14, 0xFE9 | PALETTE_MODIFIER_COLOR },
END(0)
};
static const WaterDrawTileStruct _shipdepot_display_seq_4[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 1, 16, 0x14, 0xFEB },
{ 15, 0, 0, 1, 16, 0x14, 0xFE7 | PALETTE_MODIFIER_COLOR },
END(0)
};
static const WaterDrawTileStruct* const _shipdepot_display_seq[] = {
_shipdepot_display_seq_1,
_shipdepot_display_seq_2,
_shipdepot_display_seq_3,
_shipdepot_display_seq_4,
};
static const WaterDrawTileStruct _shiplift_display_seq_0[] = {
BEGIN(SPR_CANALS_BASE + 6),
{ 0, 0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 0 + 1 },
{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 4 + 1 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_1[] = {
BEGIN(SPR_CANALS_BASE + 5),
{ 0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 0 },
{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 4 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_2[] = {
BEGIN(SPR_CANALS_BASE + 7),
{ 0, 0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 0 + 2 },
{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 4 + 2 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_3[] = {
BEGIN(SPR_CANALS_BASE + 8),
{ 0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 0 + 3 },
{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 4 + 3 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_0b[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 8 + 1 },
{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 12 + 1 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_1b[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 8 },
{ 0xF, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 12 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_2b[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 8 + 2 },
{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 12 + 2 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_3b[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 8 + 3 },
{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 12 + 3 },
END(0)
};
static const WaterDrawTileStruct _shiplift_display_seq_0t[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 16 + 1 },
{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 20 + 1 },
END(8)
};
static const WaterDrawTileStruct _shiplift_display_seq_1t[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 16 },
{ 0xF, 0, 0, 0x1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 20 },
END(8)
};
static const WaterDrawTileStruct _shiplift_display_seq_2t[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 16 + 2 },
{ 0, 0xF, 0, 0x10, 1, 0x14, SPR_CANALS_BASE + 9 + 20 + 2 },
END(8)
};
static const WaterDrawTileStruct _shiplift_display_seq_3t[] = {
BEGIN(0xFDD),
{ 0, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 16 + 3 },
{ 0xF, 0, 0, 1, 0x10, 0x14, SPR_CANALS_BASE + 9 + 20 + 3 },
END(8)
};
static const WaterDrawTileStruct* const _shiplift_display_seq[] = {
_shiplift_display_seq_0,
_shiplift_display_seq_1,
_shiplift_display_seq_2,
_shiplift_display_seq_3,
_shiplift_display_seq_0b,
_shiplift_display_seq_1b,
_shiplift_display_seq_2b,
_shiplift_display_seq_3b,
_shiplift_display_seq_0t,
_shiplift_display_seq_1t,
_shiplift_display_seq_2t,
_shiplift_display_seq_3t,
};
#undef BEGIN
#undef END