From 66bbf336c6af7353ef0aeed58002c46543b30635 Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 2 Jan 2007 19:19:48 +0000 Subject: (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. --- src/table/ai_rail.h | 480 ++++++ src/table/animcursors.h | 79 + src/table/autorail.h | 72 + src/table/bridge_land.h | 521 +++++++ src/table/build_industry.h | 1600 ++++++++++++++++++++ src/table/clear_land.h | 62 + src/table/control_codes.h | 105 ++ src/table/elrail_data.h | 445 ++++++ src/table/engines.h | 689 +++++++++ src/table/files.h | 64 + src/table/genland.h | 159 ++ src/table/industry_land.h | 1022 +++++++++++++ src/table/landscape_const.h | 257 ++++ src/table/landscape_sprite.h | 167 +++ src/table/namegen.h | 3302 ++++++++++++++++++++++++++++++++++++++++++ src/table/palettes.h | 199 +++ src/table/road_land.h | 281 ++++ src/table/roadveh.h | 1077 ++++++++++++++ src/table/sprites.h | 1397 ++++++++++++++++++ src/table/station_land.h | 1203 +++++++++++++++ src/table/town_land.h | 2226 ++++++++++++++++++++++++++++ src/table/track_land.h | 52 + src/table/train_cmd.h | 57 + src/table/tree_land.h | 228 +++ src/table/unicode.h | 21 + src/table/unmovable_land.h | 131 ++ src/table/water_land.h | 151 ++ 27 files changed, 16047 insertions(+) create mode 100644 src/table/ai_rail.h create mode 100644 src/table/animcursors.h create mode 100644 src/table/autorail.h create mode 100644 src/table/bridge_land.h create mode 100644 src/table/build_industry.h create mode 100644 src/table/clear_land.h create mode 100644 src/table/control_codes.h create mode 100644 src/table/elrail_data.h create mode 100644 src/table/engines.h create mode 100644 src/table/files.h create mode 100644 src/table/genland.h create mode 100644 src/table/industry_land.h create mode 100644 src/table/landscape_const.h create mode 100644 src/table/landscape_sprite.h create mode 100644 src/table/namegen.h create mode 100644 src/table/palettes.h create mode 100644 src/table/road_land.h create mode 100644 src/table/roadveh.h create mode 100644 src/table/sprites.h create mode 100644 src/table/station_land.h create mode 100644 src/table/town_land.h create mode 100644 src/table/track_land.h create mode 100644 src/table/train_cmd.h create mode 100644 src/table/tree_land.h create mode 100644 src/table/unicode.h create mode 100644 src/table/unmovable_land.h create mode 100644 src/table/water_land.h (limited to 'src/table') diff --git a/src/table/ai_rail.h b/src/table/ai_rail.h new file mode 100644 index 000000000..8e6a49c50 --- /dev/null +++ b/src/table/ai_rail.h @@ -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 +}; diff --git a/src/table/animcursors.h b/src/table/animcursors.h new file mode 100644 index 000000000..856527f93 --- /dev/null +++ b/src/table/animcursors.h @@ -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 +}; diff --git a/src/table/autorail.h b/src/table/autorail.h new file mode 100644 index 000000000..d94747ec1 --- /dev/null +++ b/src/table/autorail.h @@ -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 } +}; diff --git a/src/table/bridge_land.h b/src/table/bridge_land.h new file mode 100644 index 000000000..8589c6e20 --- /dev/null +++ b/src/table/bridge_land.h @@ -0,0 +1,521 @@ +/* $Id$ */ + +/** @file bridge_land.h This file contains all the sprites for bridges + * It consists of a number of arrays. + * + */ + +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 +}; diff --git a/src/table/build_industry.h b/src/table/build_industry.h new file mode 100644 index 000000000..c05cbe32d --- /dev/null +++ b/src/table/build_industry.h @@ -0,0 +1,1600 @@ +/* $Id$ */ + + + +#define MK(x,y, m) {{x, y}, m} + +#define MKEND {{-0x80, 0}, 0} + +static const IndustryTileTable _tile_table_coal_mine_0[] = { + MK(1,1, 0), + MK(1,2, 2), + MK(0,0, 5), + MK(1,0, 6), + MK(2,0, 3), + MK(2,2, 3), + MKEND +}; + +static const IndustryTileTable _tile_table_coal_mine_1[] = { + MK(1,1, 0), + MK(1,2, 2), + MK(2,0, 0), + MK(2,1, 2), + MK(1,0, 3), + MK(0,0, 3), + MK(0,1, 4), + MK(0,2, 4), + MK(2,2, 4), + MKEND +}; + +static const IndustryTileTable _tile_table_coal_mine_2[] = { + MK(0,0, 0), + MK(0,1, 2), + MK(0,2, 5), + MK(1,0, 3), + MK(1,1, 3), + MK(1,2, 6), + MKEND +}; + +static const IndustryTileTable _tile_table_coal_mine_3[] = { + MK(0,1, 0), + MK(0,2, 2), + MK(0,3, 4), + MK(1,0, 5), + MK(1,1, 0), + MK(1,2, 2), + MK(1,3, 3), + MK(2,0, 6), + MK(2,1, 4), + MK(2,2, 3), + MKEND +}; + +static const IndustryTileTable * const _tile_table_coal_mine[] = { + _tile_table_coal_mine_0, + _tile_table_coal_mine_1, + _tile_table_coal_mine_2, + _tile_table_coal_mine_3, +}; + +static const IndustryTileTable _tile_table_power_station_0[] = { + MK(0,0, 7), + MK(0,1, 9), + MK(1,0, 7), + MK(1,1, 8), + MK(2,0, 7), + MK(2,1, 8), + MK(3,0, 10), + MK(3,1, 10), + MKEND +}; + +static const IndustryTileTable _tile_table_power_station_1[] = { + MK(0,1, 7), + MK(0,2, 7), + MK(1,0, 8), + MK(1,1, 8), + MK(1,2, 7), + MK(2,0, 9), + MK(2,1, 10), + MK(2,2, 9), + MKEND +}; + +static const IndustryTileTable _tile_table_power_station_2[] = { + MK(0,0, 7), + MK(0,1, 7), + MK(1,0, 9), + MK(1,1, 8), + MK(2,0, 10), + MK(2,1, 9), + MKEND +}; + +static const IndustryTileTable * const _tile_table_power_station[] = { + _tile_table_power_station_0, + _tile_table_power_station_1, + _tile_table_power_station_2, +}; + +static const IndustryTileTable _tile_table_sawmill_0[] = { + MK(1,0, 14), + MK(1,1, 12), + MK(1,2, 11), + MK(2,0, 14), + MK(2,1, 13), + MK(0,0, 15), + MK(0,1, 15), + MK(0,2, 12), + MKEND +}; + +static const IndustryTileTable _tile_table_sawmill_1[] = { + MK(0,0, 15), + MK(0,1, 11), + MK(0,2, 14), + MK(1,0, 15), + MK(1,1, 13), + MK(1,2, 12), + MK(2,0, 11), + MK(2,1, 13), + MKEND +}; + +static const IndustryTileTable * const _tile_table_sawmill[] = { + _tile_table_sawmill_0, + _tile_table_sawmill_1, +}; + +static const IndustryTileTable _tile_table_forest_0[] = { + MK(0,0, 16), + MK(0,1, 16), + MK(0,2, 16), + MK(0,3, 16), + MK(1,0, 16), + MK(1,1, 16), + MK(1,2, 16), + MK(1,3, 16), + MK(2,0, 16), + MK(2,1, 16), + MK(2,2, 16), + MK(2,3, 16), + MK(3,0, 16), + MK(3,1, 16), + MK(3,2, 16), + MK(3,3, 16), + MK(1,4, 16), + MK(2,4, 16), + MKEND +}; + +static const IndustryTileTable _tile_table_forest_1[] = { + MK(0,0, 16), + MK(1,0, 16), + MK(2,0, 16), + MK(3,0, 16), + MK(4,0, 16), + MK(0,1, 16), + MK(1,1, 16), + MK(2,1, 16), + MK(3,1, 16), + MK(4,1, 16), + MK(0,2, 16), + MK(1,2, 16), + MK(2,2, 16), + MK(3,2, 16), + MK(4,2, 16), + MK(0,3, 16), + MK(1,3, 16), + MK(2,3, 16), + MK(3,3, 16), + MK(4,3, 16), + MK(1,4, 16), + MK(2,4, 16), + MK(3,4, 16), + MKEND +}; + +static const IndustryTileTable * const _tile_table_forest[] = { + _tile_table_forest_0, + _tile_table_forest_1, +}; + +static const IndustryTileTable _tile_table_oil_refinery_0[] = { + MK(0,0, 20), + MK(0,1, 21), + MK(0,2, 22), + MK(0,3, 21), + MK(1,0, 20), + MK(1,1, 19), + MK(1,2, 22), + MK(1,3, 20), + MK(2,1, 18), + MK(2,2, 18), + MK(2,3, 18), + MK(3,2, 18), + MK(3,3, 18), + MK(2,0, 23), + MK(3,1, 23), + MKEND +}; + +static const IndustryTileTable _tile_table_oil_refinery_1[] = { + MK(0,0, 18), + MK(0,1, 18), + MK(0,2, 21), + MK(0,3, 22), + MK(0,4, 20), + MK(1,0, 18), + MK(1,1, 18), + MK(1,2, 19), + MK(1,3, 20), + MK(2,0, 18), + MK(2,1, 18), + MK(2,2, 19), + MK(2,3, 22), + MK(1,4, 23), + MK(2,4, 23), + MKEND +}; + +static const IndustryTileTable * const _tile_table_oil_refinery[] = { + _tile_table_oil_refinery_0, + _tile_table_oil_refinery_1, +}; + +static const IndustryTileTable _tile_table_oil_rig_0[] = { + MK(0,0, 24), + MK(0,1, 24), + MK(0,2, 25), + MK(1,0, 26), + MK(1,1, 27), + MK(1,2, 28), + MK(-4,-5, 255), + MK(-4,-4, 255), + MK(-4,-3, 255), + MK(-4,-2, 255), + MK(-4,-1, 255), + MK(-4,0, 255), + MK(-4,1, 255), + MK(-4,2, 255), + MK(-4,3, 255), + MK(-4,4, 255), + MK(-4,5, 255), + MK(-3,5, 255), + MK(-2,5, 255), + MK(-1,5, 255), + MK(0,6, 255), + MK(1,6, 255), + MK(2,6, 255), + MK(3,6, 255), + MK(4,6, 255), + MK(5,6, 255), + MK(5,5, 255), + MK(5,4, 255), + MK(5,3, 255), + MK(5,2, 255), + MK(5,1, 255), + MK(5,0, 255), + MK(5,-1, 255), + MK(5,-2, 255), + MK(5,-3, 255), + MK(5,-4, 255), + MK(4,-4, 255), + MK(3,-4, 255), + MK(2,-4, 255), + MK(1,-4, 255), + MK(0,-4, 255), + MK(-1,-5, 255), + MK(-2,-5, 255), + MK(-3,-5, 255), + MK(2,0, 255), + MKEND +}; + +static const IndustryTileTable * const _tile_table_oil_rig[] = { + _tile_table_oil_rig_0, +}; + +static const IndustryTileTable _tile_table_factory_0[] = { + MK(0,0, 39), + MK(0,1, 40), + MK(1,0, 41), + MK(1,1, 42), + MK(0,2, 39), + MK(0,3, 40), + MK(1,2, 41), + MK(1,3, 42), + MK(2,1, 39), + MK(2,2, 40), + MK(3,1, 41), + MK(3,2, 42), + MKEND +}; + +static const IndustryTileTable _tile_table_factory_1[] = { + MK(0,0, 39), + MK(0,1, 40), + MK(1,0, 41), + MK(1,1, 42), + MK(2,0, 39), + MK(2,1, 40), + MK(3,0, 41), + MK(3,1, 42), + MK(1,2, 39), + MK(1,3, 40), + MK(2,2, 41), + MK(2,3, 42), + MKEND +}; + +static const IndustryTileTable * const _tile_table_factory[] = { + _tile_table_factory_0, + _tile_table_factory_1, +}; + +static const IndustryTileTable _tile_table_printing_works_0[] = { + MK(0,0, 43), + MK(0,1, 44), + MK(1,0, 45), + MK(1,1, 46), + MK(0,2, 43), + MK(0,3, 44), + MK(1,2, 45), + MK(1,3, 46), + MK(2,1, 43), + MK(2,2, 44), + MK(3,1, 45), + MK(3,2, 46), + MKEND +}; + +static const IndustryTileTable _tile_table_printing_works_1[] = { + MK(0,0, 43), + MK(0,1, 44), + MK(1,0, 45), + MK(1,1, 46), + MK(2,0, 43), + MK(2,1, 44), + MK(3,0, 45), + MK(3,1, 46), + MK(1,2, 43), + MK(1,3, 44), + MK(2,2, 45), + MK(2,3, 46), + MKEND +}; + +static const IndustryTileTable * const _tile_table_printing_works[] = { + _tile_table_printing_works_0, + _tile_table_printing_works_1, +}; + +static const IndustryTileTable _tile_table_steel_mill_0[] = { + MK(2,1, 52), + MK(2,2, 53), + MK(3,1, 54), + MK(3,2, 55), + MK(0,0, 56), + MK(1,0, 57), + MK(0,1, 56), + MK(1,1, 57), + MK(0,2, 56), + MK(1,2, 57), + MK(2,0, 56), + MK(3,0, 57), + MKEND +}; + +static const IndustryTileTable _tile_table_steel_mill_1[] = { + MK(0,0, 52), + MK(0,1, 53), + MK(1,0, 54), + MK(1,1, 55), + MK(2,0, 52), + MK(2,1, 53), + MK(3,0, 54), + MK(3,1, 55), + MK(0,2, 56), + MK(1,2, 57), + MK(2,2, 56), + MK(3,2, 57), + MK(1,3, 56), + MK(2,3, 57), + MKEND +}; + +static const IndustryTileTable * const _tile_table_steel_mill[] = { + _tile_table_steel_mill_0, + _tile_table_steel_mill_1, +}; + +static const IndustryTileTable _tile_table_farm_0[] = { + MK(1,0, 33), + MK(1,1, 34), + MK(1,2, 36), + MK(0,0, 37), + MK(0,1, 37), + MK(0,2, 36), + MK(2,0, 35), + MK(2,1, 38), + MK(2,2, 38), + MKEND +}; + +static const IndustryTileTable _tile_table_farm_1[] = { + MK(1,1, 33), + MK(1,2, 34), + MK(0,0, 35), + MK(0,1, 36), + MK(0,2, 36), + MK(0,3, 35), + MK(1,0, 37), + MK(1,3, 38), + MK(2,0, 37), + MK(2,1, 37), + MK(2,2, 38), + MK(2,3, 38), + MKEND +}; + +static const IndustryTileTable _tile_table_farm_2[] = { + MK(2,0, 33), + MK(2,1, 34), + MK(0,0, 36), + MK(0,1, 36), + MK(0,2, 37), + MK(0,3, 37), + MK(1,0, 35), + MK(1,1, 38), + MK(1,2, 38), + MK(1,3, 37), + MK(2,2, 37), + MK(2,3, 35), + MKEND +}; + +static const IndustryTileTable * const _tile_table_farm[] = { + _tile_table_farm_0, + _tile_table_farm_1, + _tile_table_farm_2, +}; + +static const IndustryTileTable _tile_table_copper_mine_0[] = { + MK(0,0, 47), + MK(0,1, 49), + MK(0,2, 51), + MK(1,0, 47), + MK(1,1, 49), + MK(1,2, 50), + MK(2,0, 51), + MK(2,1, 51), + MKEND +}; + +static const IndustryTileTable _tile_table_copper_mine_1[] = { + MK(0,0, 50), + MK(0,1, 47), + MK(0,2, 49), + MK(1,0, 47), + MK(1,1, 49), + MK(1,2, 51), + MK(2,0, 51), + MK(2,1, 47), + MK(2,2, 49), + MKEND +}; + +static const IndustryTileTable * const _tile_table_copper_mine[] = { + _tile_table_copper_mine_0, + _tile_table_copper_mine_1, +}; + +static const IndustryTileTable _tile_table_oil_well_0[] = { + MK(0,0, 29), + MK(1,0, 29), + MK(2,0, 29), + MK(0,1, 29), + MK(0,2, 29), + MKEND +}; + +static const IndustryTileTable _tile_table_oil_well_1[] = { + MK(0,0, 29), + MK(1,0, 29), + MK(1,1, 29), + MK(2,2, 29), + MK(2,3, 29), + MKEND +}; + +static const IndustryTileTable * const _tile_table_oil_well[] = { + _tile_table_oil_well_0, + _tile_table_oil_well_1, +}; + +static const IndustryTileTable _tile_table_bank_0[] = { + MK(0,0, 58), + MK(1,0, 59), + MKEND +}; + +static const IndustryTileTable * const _tile_table_bank[] = { + _tile_table_bank_0, +}; + +static const IndustryTileTable _tile_table_food_process_0[] = { + MK(0,0, 60), + MK(1,0, 60), + MK(2,0, 60), + MK(0,1, 60), + MK(1,1, 60), + MK(2,1, 60), + MK(0,2, 61), + MK(1,2, 61), + MK(2,2, 63), + MK(0,3, 62), + MK(1,3, 62), + MK(2,3, 63), + MKEND +}; + +static const IndustryTileTable _tile_table_food_process_1[] = { + MK(0,0, 61), + MK(1,0, 60), + MK(2,0, 61), + MK(3,0, 61), + MK(0,1, 62), + MK(1,1, 63), + MK(2,1, 63), + MK(3,1, 63), + MK(0,2, 60), + MK(1,2, 60), + MK(2,2, 60), + MK(3,2, 60), + MK(0,3, 62), + MK(1,3, 62), + MKEND +}; + +static const IndustryTileTable * const _tile_table_food_process[] = { + _tile_table_food_process_0, + _tile_table_food_process_1, +}; + +static const IndustryTileTable _tile_table_paper_mill_0[] = { + MK(0,0, 64), + MK(1,0, 65), + MK(2,0, 66), + MK(3,0, 67), + MK(0,1, 68), + MK(1,1, 69), + MK(2,1, 67), + MK(3,1, 67), + MK(0,2, 66), + MK(1,2, 71), + MK(2,2, 71), + MK(3,2, 70), + MKEND +}; + +static const IndustryTileTable * const _tile_table_paper_mill[] = { + _tile_table_paper_mill_0, +}; + +static const IndustryTileTable _tile_table_gold_mine_0[] = { + MK(0,0, 72), + MK(0,1, 73), + MK(0,2, 74), + MK(0,3, 75), + MK(1,0, 76), + MK(1,1, 77), + MK(1,2, 78), + MK(1,3, 79), + MK(2,0, 80), + MK(2,1, 81), + MK(2,2, 82), + MK(2,3, 83), + MK(3,0, 84), + MK(3,1, 85), + MK(3,2, 86), + MK(3,3, 87), + MKEND +}; + +static const IndustryTileTable * const _tile_table_gold_mine[] = { + _tile_table_gold_mine_0, +}; + +static const IndustryTileTable _tile_table_bank2_0[] = { + MK(0,0, 89), + MK(1,0, 90), + MKEND +}; + +static const IndustryTileTable * const _tile_table_bank2[] = { + _tile_table_bank2_0, +}; + +static const IndustryTileTable _tile_table_diamond_mine_0[] = { + MK(0,0, 91), + MK(0,1, 92), + MK(0,2, 93), + MK(1,0, 94), + MK(1,1, 95), + MK(1,2, 96), + MK(2,0, 97), + MK(2,1, 98), + MK(2,2, 99), + MKEND +}; + +static const IndustryTileTable * const _tile_table_diamond_mine[] = { + _tile_table_diamond_mine_0, +}; + +static const IndustryTileTable _tile_table_iron_mine_0[] = { + MK(0,0, 100), + MK(0,1, 101), + MK(0,2, 102), + MK(0,3, 103), + MK(1,0, 104), + MK(1,1, 105), + MK(1,2, 106), + MK(1,3, 107), + MK(2,0, 108), + MK(2,1, 109), + MK(2,2, 110), + MK(2,3, 111), + MK(3,0, 112), + MK(3,1, 113), + MK(3,2, 114), + MK(3,3, 115), + MKEND +}; + +static const IndustryTileTable * const _tile_table_iron_mine[] = { + _tile_table_iron_mine_0, +}; + +static const IndustryTileTable _tile_table_fruit_plantation_0[] = { + MK(0,0, 116), + MK(0,1, 116), + MK(0,2, 116), + MK(0,3, 116), + MK(1,0, 116), + MK(1,1, 116), + MK(1,2, 116), + MK(1,3, 116), + MK(2,0, 116), + MK(2,1, 116), + MK(2,2, 116), + MK(2,3, 116), + MK(3,0, 116), + MK(3,1, 116), + MK(3,2, 116), + MK(3,3, 116), + MK(4,0, 116), + MK(4,1, 116), + MK(4,2, 116), + MK(4,3, 116), + MKEND +}; + +static const IndustryTileTable * const _tile_table_fruit_plantation[] = { + _tile_table_fruit_plantation_0, +}; + +static const IndustryTileTable _tile_table_rubber_plantation_0[] = { + MK(0,0, 117), + MK(0,1, 117), + MK(0,2, 117), + MK(0,3, 117), + MK(1,0, 117), + MK(1,1, 117), + MK(1,2, 117), + MK(1,3, 117), + MK(2,0, 117), + MK(2,1, 117), + MK(2,2, 117), + MK(2,3, 117), + MK(3,0, 117), + MK(3,1, 117), + MK(3,2, 117), + MK(3,3, 117), + MK(4,0, 117), + MK(4,1, 117), + MK(4,2, 117), + MK(4,3, 117), + MKEND +}; + +static const IndustryTileTable * const _tile_table_rubber_plantation[] = { + _tile_table_rubber_plantation_0, +}; + +static const IndustryTileTable _tile_table_water_supply_0[] = { + MK(0,0, 118), + MK(0,1, 119), + MK(1,0, 118), + MK(1,1, 119), + MKEND +}; + +static const IndustryTileTable * const _tile_table_water_supply[] = { + _tile_table_water_supply_0, +}; + +static const IndustryTileTable _tile_table_water_tower_0[] = { + MK(0,0, 120), + MKEND +}; + +static const IndustryTileTable * const _tile_table_water_tower[] = { + _tile_table_water_tower_0, +}; + +static const IndustryTileTable _tile_table_factory2_0[] = { + MK(0,0, 121), + MK(0,1, 122), + MK(1,0, 123), + MK(1,1, 124), + MK(0,2, 121), + MK(0,3, 122), + MK(1,2, 123), + MK(1,3, 124), + MKEND +}; + +static const IndustryTileTable _tile_table_factory2_1[] = { + MK(0,0, 121), + MK(0,1, 122), + MK(1,0, 123), + MK(1,1, 124), + MK(2,0, 121), + MK(2,1, 122), + MK(3,0, 123), + MK(3,1, 124), + MKEND +}; + +static const IndustryTileTable * const _tile_table_factory2[] = { + _tile_table_factory2_0, + _tile_table_factory2_1, +}; + +static const IndustryTileTable _tile_table_farm2_0[] = { + MK(1,0, 33), + MK(1,1, 34), + MK(1,2, 36), + MK(0,0, 37), + MK(0,1, 37), + MK(0,2, 36), + MK(2,0, 35), + MK(2,1, 38), + MK(2,2, 38), + MKEND +}; + +static const IndustryTileTable _tile_table_farm2_1[] = { + MK(1,1, 33), + MK(1,2, 34), + MK(0,0, 35), + MK(0,1, 36), + MK(0,2, 36), + MK(0,3, 35), + MK(1,0, 37), + MK(1,3, 38), + MK(2,0, 37), + MK(2,1, 37), + MK(2,2, 38), + MK(2,3, 38), + MKEND +}; + +static const IndustryTileTable _tile_table_farm2_2[] = { + MK(2,0, 33), + MK(2,1, 34), + MK(0,0, 36), + MK(0,1, 36), + MK(0,2, 37), + MK(0,3, 37), + MK(1,0, 35), + MK(1,1, 38), + MK(1,2, 38), + MK(1,3, 37), + MK(2,2, 37), + MK(2,3, 35), + MKEND +}; + +static const IndustryTileTable * const _tile_table_farm2[] = { + _tile_table_farm2_0, + _tile_table_farm2_1, + _tile_table_farm2_2, +}; + +static const IndustryTileTable _tile_table_lumber_mill_0[] = { + MK(0,0, 125), + MK(0,1, 126), + MK(1,0, 127), + MK(1,1, 128), + MKEND +}; + +static const IndustryTileTable * const _tile_table_lumber_mill[] = { + _tile_table_lumber_mill_0, +}; + +static const IndustryTileTable _tile_table_cotton_candy_0[] = { + MK(0,0, 129), + MK(0,1, 129), + MK(0,2, 129), + MK(0,3, 129), + MK(1,0, 129), + MK(1,1, 129), + MK(1,2, 129), + MK(1,3, 129), + MK(2,0, 129), + MK(2,1, 129), + MK(2,2, 129), + MK(2,3, 129), + MK(3,0, 129), + MK(3,1, 129), + MK(3,2, 129), + MK(3,3, 129), + MK(1,4, 129), + MK(2,4, 129), + MKEND +}; + +static const IndustryTileTable _tile_table_cotton_candy_1[] = { + MK(0,0, 129), + MK(1,0, 129), + MK(2,0, 129), + MK(3,0, 129), + MK(4,0, 129), + MK(0,1, 129), + MK(1,1, 129), + MK(2,1, 129), + MK(3,1, 129), + MK(4,1, 129), + MK(0,2, 129), + MK(1,2, 129), + MK(2,2, 129), + MK(3,2, 129), + MK(4,2, 129), + MK(0,3, 129), + MK(1,3, 129), + MK(2,3, 129), + MK(3,3, 129), + MK(4,3, 129), + MK(1,4, 129), + MK(2,4, 129), + MK(3,4, 129), + MKEND +}; + +static const IndustryTileTable * const _tile_table_cotton_candy[] = { + _tile_table_cotton_candy_0, + _tile_table_cotton_candy_1, +}; + +static const IndustryTileTable _tile_table_candy_factory_0[] = { + MK(0,0, 131), + MK(0,1, 132), + MK(1,0, 133), + MK(1,1, 134), + MK(0,2, 131), + MK(0,3, 132), + MK(1,2, 133), + MK(1,3, 134), + MK(2,1, 131), + MK(2,2, 132), + MK(3,1, 133), + MK(3,2, 134), + MKEND +}; + +static const IndustryTileTable _tile_table_candy_factory_1[] = { + MK(0,0, 131), + MK(0,1, 132), + MK(1,0, 133), + MK(1,1, 134), + MK(2,0, 131), + MK(2,1, 132), + MK(3,0, 133), + MK(3,1, 134), + MK(1,2, 131), + MK(1,3, 132), + MK(2,2, 133), + MK(2,3, 134), + MKEND +}; + +static const IndustryTileTable * const _tile_table_candy_factory[] = { + _tile_table_candy_factory_0, + _tile_table_candy_factory_1, +}; + +static const IndustryTileTable _tile_table_battery_farm_0[] = { + MK(0,0, 135), + MK(0,1, 135), + MK(0,2, 135), + MK(0,3, 135), + MK(1,0, 135), + MK(1,1, 135), + MK(1,2, 135), + MK(1,3, 135), + MK(2,0, 135), + MK(2,1, 135), + MK(2,2, 135), + MK(2,3, 135), + MK(3,0, 135), + MK(3,1, 135), + MK(3,2, 135), + MK(3,3, 135), + MK(4,0, 135), + MK(4,1, 135), + MK(4,2, 135), + MK(4,3, 135), + MKEND +}; + +static const IndustryTileTable * const _tile_table_battery_farm[] = { + _tile_table_battery_farm_0, +}; + +static const IndustryTileTable _tile_table_cola_wells_0[] = { + MK(0,0, 137), + MK(0,1, 137), + MK(0,2, 137), + MK(1,0, 137), + MK(1,1, 137), + MK(1,2, 137), + MK(2,1, 137), + MK(2,2, 137), + MKEND +}; + +static const IndustryTileTable _tile_table_cola_wells_1[] = { + MK(0,1, 137), + MK(0,2, 137), + MK(0,3, 137), + MK(1,0, 137), + MK(1,1, 137), + MK(1,2, 137), + MK(2,1, 137), + MKEND +}; + +static const IndustryTileTable * const _tile_table_cola_wells[] = { + _tile_table_cola_wells_0, + _tile_table_cola_wells_1, +}; + +static const IndustryTileTable _tile_table_toy_shop_0[] = { + MK(0,0, 138), + MK(0,1, 139), + MK(1,0, 140), + MK(1,1, 141), + MKEND +}; + +static const IndustryTileTable * const _tile_table_toy_shop[] = { + _tile_table_toy_shop_0, +}; + +static const IndustryTileTable _tile_table_toy_factory_0[] = { + MK(0,0, 147), + MK(0,1, 142), + MK(1,0, 147), + MK(1,1, 143), + MK(2,0, 147), + MK(2,1, 144), + MK(3,0, 146), + MK(3,1, 145), + MKEND +}; + +static const IndustryTileTable * const _tile_table_toy_factory[] = { + _tile_table_toy_factory_0, +}; + +static const IndustryTileTable _tile_table_plastic_fountain_0[] = { + MK(0,0, 148), + MK(0,1, 151), + MK(0,2, 154), + MKEND +}; + +static const IndustryTileTable _tile_table_plastic_fountain_1[] = { + MK(0,0, 148), + MK(1,0, 151), + MK(2,0, 154), + MKEND +}; + +static const IndustryTileTable * const _tile_table_plastic_fountain[] = { + _tile_table_plastic_fountain_0, + _tile_table_plastic_fountain_1, +}; + +static const IndustryTileTable _tile_table_fizzy_drink_0[] = { + MK(0,0, 156), + MK(0,1, 157), + MK(1,0, 158), + MK(1,1, 159), + MKEND +}; + +static const IndustryTileTable * const _tile_table_fizzy_drink[] = { + _tile_table_fizzy_drink_0, +}; + +static const IndustryTileTable _tile_table_bubble_generator_0[] = { + MK(0,0, 163), + MK(0,1, 160), + MK(1,0, 163), + MK(1,1, 161), + MK(2,0, 163), + MK(2,1, 162), + MK(0,2, 163), + MK(0,3, 160), + MK(1,2, 163), + MK(1,3, 161), + MK(2,2, 163), + MK(2,3, 162), + MKEND +}; + +static const IndustryTileTable * const _tile_table_bubble_generator[] = { + _tile_table_bubble_generator_0, +}; + +static const IndustryTileTable _tile_table_toffee_quarry_0[] = { + MK(0,0, 164), + MK(1,0, 165), + MK(2,0, 166), + MKEND +}; + +static const IndustryTileTable * const _tile_table_toffee_quarry[] = { + _tile_table_toffee_quarry_0, +}; + +static const IndustryTileTable _tile_table_sugar_mine_0[] = { + MK(0,0, 167), + MK(0,1, 168), + MK(1,0, 169), + MK(1,1, 170), + MK(2,0, 171), + MK(2,1, 172), + MK(3,0, 173), + MK(3,1, 174), + MKEND +}; + +static const IndustryTileTable * const _tile_table_sugar_mine[] = { + _tile_table_sugar_mine_0, +}; + +#undef MK +#undef MKEND + +/* Procedures that can be run to check whether an industry may + * build at location the given to the procedure */ +typedef enum CheckProcs { + CHECK_NOTHING = 0, + CHECK_FOREST = 1, + CHECK_REFINERY = 2, + CHECK_FARM = 3, + CHECK_PLANTATION = 4, + CHECK_WATER = 5, + CHECK_LUMBERMILL = 6, + CHECK_BUBBLEGEN = 7, + CHECK_OIL_RIG = 8, + CHECK_END, +} CheckProc; + +#define MK(tbl, d, c1, c2, c3, proc, p1, r1, p2, r2, m, a1, a2, a3, pr, clim, in, s1, s2, s3) \ + {tbl, lengthof(tbl), d, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m, \ + {a1, a2, a3}, pr, clim, in, s1, s2, s3} + +static const IndustrySpec _industry_specs[] = { + /* Format: + tile table cost multiplier + cannot be close to these industries (3 times) check proc + (produced cargo + rate) (twice) minimum cargo moved to station + 3 accepted cargo + industry life climate availability + industry name + messages : Closure production up production down */ + MK(_tile_table_coal_mine, 210, + IT_POWER_STATION, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_COAL, 15, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_NORMAL | 1 << LT_HILLY, + STR_4802_COAL_MINE, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4836_NEW_COAL_SEAM_FOUND_AT, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_power_station, 30, + IT_COAL_MINE, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_INVALID, 0, CT_INVALID, 0, 5, + CT_COAL, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_NORMAL | 1 << LT_HILLY, + STR_4803_POWER_STATION, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_sawmill, 28, + IT_FOREST, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_GOODS, 0, CT_INVALID, 0, 5, + CT_WOOD, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_NORMAL, + STR_4804_SAWMILL, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_forest, 200, + IT_SAWMILL, IT_PAPER_MILL, IT_INVALID, CHECK_FOREST, + CT_WOOD, 13, CT_INVALID, 0, 30, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_NORMAL | 1 << LT_HILLY, + STR_4805_FOREST, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_483A_INSECT_INFESTATION_CAUSES), + + MK(_tile_table_oil_refinery, 31, + IT_OIL_RIG, IT_INVALID, IT_INVALID, CHECK_REFINERY, + CT_GOODS, 0, CT_INVALID, 0, 5, + CT_OIL, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_NORMAL | 1 << LT_HILLY | 1 << LT_DESERT, + STR_4806_OIL_REFINERY, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_oil_rig, 240, + IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_OIL_RIG, + CT_OIL, 15, CT_PASSENGERS, 2, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_NORMAL, + STR_4807_OIL_RIG, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4837_NEW_OIL_RESERVES_FOUND, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_factory, 26, + IT_FARM, IT_STEEL_MILL, IT_INVALID, CHECK_NOTHING, + CT_GOODS, 0, CT_INVALID, 0, 5, + CT_LIVESTOCK, CT_GRAIN, CT_STEEL, + INDUSTRYLIFE_CLOSABLE, 1 << LT_NORMAL, + STR_4808_FACTORY, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_printing_works, 26, + IT_PAPER_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_GOODS, 0, CT_INVALID, 0, 5, + CT_PAPER, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_HILLY, + STR_4809_PRINTING_WORKS, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_steel_mill, 27, + IT_IRON_MINE, IT_FACTORY, IT_INVALID, CHECK_NOTHING, + CT_STEEL, 0, CT_INVALID, 0, 5, + CT_IRON_ORE, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_NORMAL, + STR_480A_STEEL_MILL, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_farm, 250, + IT_FACTORY, IT_FOOD_PROCESS, IT_INVALID, CHECK_FARM, + CT_GRAIN, 10, CT_LIVESTOCK, 10, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_NORMAL | 1 << LT_HILLY, + STR_480B_FARM, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES), + + MK(_tile_table_copper_mine, 205, + IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_COPPER_ORE, 10, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_480C_COPPER_ORE_MINE, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_oil_well, 220, + IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_OIL, 12, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_NORMAL | 1 << LT_HILLY | 1 << LT_DESERT, + STR_480D_OIL_WELLS, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4837_NEW_OIL_RESERVES_FOUND, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_bank, 193, + IT_BANK_TEMP, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_VALUABLES, 6, CT_INVALID, 0, 5, + CT_VALUABLES, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_NORMAL, + STR_480E_BANK, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_food_process, 26, + IT_FRUIT_PLANTATION, IT_FARM, IT_FARM_2, CHECK_NOTHING, + CT_FOOD, 0, CT_INVALID, 0, 5, + CT_FRUIT, CT_MAIZE, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_HILLY | 1 << LT_DESERT, + STR_480F_FOOD_PROCESSING_PLANT, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_paper_mill, 28, + IT_FOREST, IT_PRINTING_WORKS, IT_INVALID, CHECK_NOTHING, + CT_PAPER, 0, CT_INVALID, 0, 5, + CT_WOOD, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_HILLY, + STR_4810_PAPER_MILL, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_gold_mine, 208, + IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_GOLD, 7, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_4811_GOLD_MINE, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_bank2, 19, + IT_GOLD_MINE, IT_DIAMOND_MINE, IT_INVALID, CHECK_NOTHING, + CT_INVALID, 0, CT_INVALID, 0, 5, + CT_GOLD, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_HILLY | 1 << LT_DESERT, + STR_4812_BANK, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_diamond_mine, 213, + IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_DIAMONDS, 7, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_4813_DIAMOND_MINE, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_iron_mine, 220, + IT_STEEL_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_IRON_ORE, 10, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_NORMAL, + STR_4814_IRON_ORE_MINE, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_fruit_plantation, 225, + IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, + CT_FRUIT, 10, CT_INVALID, 0, 15, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_4815_FRUIT_PLANTATION, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES), + + MK(_tile_table_rubber_plantation, 218, + IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_PLANTATION, + CT_RUBBER, 10, CT_INVALID, 0, 15, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_4816_RUBBER_PLANTATION, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES), + + MK(_tile_table_water_supply, 199, + IT_WATER_TOWER, IT_INVALID, IT_INVALID, CHECK_WATER, + CT_WATER, 12, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_4817_WATER_SUPPLY, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_water_tower, 14, + IT_WATER_SUPPLY, IT_INVALID, IT_INVALID, CHECK_WATER, + CT_INVALID, 0, CT_INVALID, 0, 5, + CT_WATER, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_DESERT, + STR_4818_WATER_TOWER, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_factory2, 26, + IT_RUBBER_PLANTATION, IT_COPPER_MINE, IT_LUMBER_MILL, CHECK_PLANTATION, + CT_GOODS, 0, CT_INVALID, 0, 5, + CT_RUBBER, CT_COPPER_ORE, CT_WOOD, + INDUSTRYLIFE_CLOSABLE, 1 << LT_DESERT, + STR_4819_FACTORY, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_farm2, 250, + IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, + CT_MAIZE, 11, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_DESERT, + STR_481A_FARM, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES), + + MK(_tile_table_lumber_mill, 17, + IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_LUMBERMILL, + CT_WOOD, 0, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_DESERT, + STR_481B_LUMBER_MILL, + STR_4834_LACK_OF_NEARBY_TREES_CAUSES, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_cotton_candy, 195, + IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_COTTON_CANDY, 13, CT_INVALID, 0, 30, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_481C_COTTON_CANDY_FOREST, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4838_IMPROVED_FARMING_METHODS, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_candy_factory, 26, + IT_COTTON_CANDY, IT_TOFFEE_QUARRY, IT_SUGAR_MINE, CHECK_NOTHING, + CT_CANDY, 0, CT_INVALID, 0, 5, + CT_SUGAR, CT_TOFFEE, CT_COTTON_CANDY, + INDUSTRYLIFE_CLOSABLE, 1 << LT_CANDY, + STR_481D_CANDY_FACTORY, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_battery_farm, 187, + IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_BATTERIES, 11, CT_INVALID, 0, 30, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_481E_BATTERY_FARM, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4838_IMPROVED_FARMING_METHODS, STR_483A_INSECT_INFESTATION_CAUSES), + + MK(_tile_table_cola_wells, 193, + IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_COLA, 12, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_481F_COLA_WELLS, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_toy_shop, 17, + IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_INVALID, 0, CT_INVALID, 0, 5, + CT_TOYS, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_CANDY, + STR_4820_TOY_SHOP, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_toy_factory, 20, + IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM, IT_TOY_SHOP, CHECK_NOTHING, + CT_TOYS, 0, CT_INVALID, 0, 5, + CT_PLASTIC, CT_BATTERIES, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_CANDY, + STR_4821_TOY_FACTORY, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_plastic_fountain, 192, + IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_PLASTIC, 14, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_4822_PLASTIC_FOUNTAINS, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_fizzy_drink, 22, + IT_COLA_WELLS, IT_BUBBLE_GENERATOR, IT_INVALID, CHECK_NOTHING, + CT_FIZZY_DRINKS, 0, CT_INVALID, 0, 5, + CT_COLA, CT_BUBBLES, CT_INVALID, + INDUSTRYLIFE_CLOSABLE, 1 << LT_CANDY, + STR_4823_FIZZY_DRINK_FACTORY, + STR_4833_SUPPLY_PROBLEMS_CAUSE_TO, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_bubble_generator, 203, + IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_BUBBLEGEN, + CT_BUBBLES, 13, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_4824_BUBBLE_GENERATOR, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_toffee_quarry, 213, + IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_TOFFEE, 10, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_4825_TOFFEE_QUARRY, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), + + MK(_tile_table_sugar_mine, 210, + IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, + CT_SUGAR, 11, CT_INVALID, 0, 5, + CT_INVALID, CT_INVALID, CT_INVALID, + INDUSTRYLIFE_PRODUCTION, 1 << LT_CANDY, + STR_4826_SUGAR_MINE, + STR_4832_ANNOUNCES_IMMINENT_CLOSURE, STR_4835_INCREASES_PRODUCTION, STR_4839_PRODUCTION_DOWN_BY_50), +}; +#undef MK + + +static const byte _industry_create_table_0[] = { + 4, 4, + 5, 3, + 5, 2, + 8, 0, + 5, 1, + 4, 11, + 5, 18, + 9, 9, + 5, 8, + 5, 6, + 0 +}; + +static const byte _industry_create_table_1[] = { + 4, 4, + 5, 3, + 5, 14, + 8, 0, + 5, 1, + 5, 11, + 5, 13, + 9, 9, + 4, 15, + 5, 7, + 6, 16, + 0 +}; + +static const byte _industry_create_table_2[] = { + 4, 4, + 5, 11, + 5, 16, + 4, 13, + 4, 17, + 4, 10, + 4, 19, + 4, 20, + 4, 21, + 8, 22, + 4, 13, + 4, 23, + 2, 24, + 0 +}; + +static const byte _industry_create_table_3[] = { + 5, 26, + 5, 27, + 4, 28, + 5, 29, + 4, 30, + 5, 31, + 5, 32, + 4, 33, + 5, 34, + 5, 35, + 4, 36, + 0 +}; + +static const byte * const _industry_create_table[4] = { + _industry_create_table_0, + _industry_create_table_1, + _industry_create_table_2, + _industry_create_table_3, +}; + + +#define PAS CT_PASSENGERS + +#define COL CT_COAL +#define RUB CT_RUBBER +#define SUG CT_SUGAR + +#define MAL CT_MAIL + +#define OIL CT_OIL +#define TOY CT_TOYS + +#define LIV CT_LIVESTOCK // Fruit too +#define BAT CT_BATTERIES + +#define GRA CT_GRAIN +#define WHT CT_WHEAT // Maize too +#define TOF CT_TOFFEE + +#define WOD CT_WOOD +#define CLA CT_COLA + +#define IRN CT_IRON_ORE +#define COP CT_COPPER_ORE +#define CCY CT_COTTON_CANDY + +#define STL CT_STEEL +#define PAP CT_PAPER +#define WAT CT_WATER +#define BBL CT_BUBBLES + +#define VAL CT_VALUABLES +#define GLD CT_GOLD // Diamonds too +#define PLC CT_PLASTIC + +#define INV CT_INVALID + +static const CargoID _industry_section_accepts_1[] = { + INV, INV, INV, PAS, INV, INV, INV, INV, + PAS, INV, INV, PAS, PAS, PAS, INV, INV, + INV, INV, INV, INV, INV, INV, INV, PAS, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, PAS, PAS, INV, INV, INV, INV, GRA, + GRA, GRA, GRA, INV, INV, INV, INV, INV, + INV, INV, PAS, PAS, PAS, PAS, PAS, PAS, + PAS, PAS, PAS, PAS, WHT, WHT, WHT, WHT, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, COP, COP, COP, COP, INV, INV, INV, + INV, INV, INV, CCY, CCY, CCY, CCY, INV, + INV, INV, INV, INV, INV, INV, BAT, BAT, + BAT, BAT, BAT, BAT, INV, INV, INV, INV, + INV, INV, INV, INV, BBL, BBL, BBL, BBL, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV +}; + + +static const CargoID _industry_section_accepts_2[] = { + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, STL, + STL, STL, STL, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, WOD, WOD, WOD, WOD, INV, INV, INV, + INV, INV, INV, TOF, TOF, TOF, TOF, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV +}; + +static const CargoID _industry_section_accepts_3[] = { + INV, INV, INV, INV, INV, INV, INV, INV, + COL, INV, INV, INV, INV, WOD, INV, INV, + INV, INV, INV, INV, OIL, INV, INV, INV, + PAS, MAL, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, LIV, + LIV, LIV, LIV, PAP, PAP, PAP, PAP, INV, + INV, INV, INV, INV, IRN, IRN, IRN, IRN, + IRN, IRN, VAL, VAL, LIV, LIV, LIV, LIV, + WOD, WOD, WOD, WOD, WOD, WOD, WOD, WOD, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, GLD, GLD, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV, INV, + WAT, RUB, RUB, RUB, RUB, INV, INV, INV, + INV, INV, INV, SUG, SUG, SUG, SUG, INV, + INV, INV, TOY, TOY, TOY, TOY, PLC, PLC, + PLC, PLC, PLC, PLC, INV, INV, INV, INV, + INV, INV, INV, INV, CLA, CLA, CLA, CLA, + INV, INV, INV, INV, INV, INV, INV, INV, + INV, INV, INV, INV, INV, INV, INV +}; + +#undef PAS +#undef COL +#undef RUB +#undef SUG +#undef MAL +#undef OIL +#undef TOY +#undef LIV +#undef BAT +#undef GRA +#undef WHT +#undef TOF +#undef WOD +#undef CLA +#undef IRN +#undef COP +#undef CCY +#undef STL +#undef PAP +#undef WAT +#undef BBL +#undef VAL +#undef GLD +#undef PLC +#undef INV diff --git a/src/table/clear_land.h b/src/table/clear_land.h new file mode 100644 index 000000000..581c86855 --- /dev/null +++ b/src/table/clear_land.h @@ -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, +}; diff --git a/src/table/control_codes.h b/src/table/control_codes.h new file mode 100644 index 000000000..a1ff42a89 --- /dev/null +++ b/src/table/control_codes.h @@ -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 */ diff --git a/src/table/elrail_data.h b/src/table/elrail_data.h new file mode 100644 index 000000000..1ed5751b4 --- /dev/null +++ b/src/table/elrail_data.h @@ -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: + *
  1. Direction of the wire
  2. + *
  3. Slope of the tile for diagonals, placement inside the track for horiz/vertical pieces
  4. + *
  5. Place where a pylon shoule be
+ * Identifiers for Pylons: + *
  1. Direction of the wire
  2. + *
  3. Slope of the tile
  4. + *
  5. Position of the Pylon relative to the track
  6. + *
  7. Position of the Pylon inside the tile
+ */ +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 */ diff --git a/src/table/engines.h b/src/table/engines.h new file mode 100644 index 000000000..08c4cea00 --- /dev/null +++ b/src/table/engines.h @@ -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 */ diff --git a/src/table/files.h b/src/table/files.h new file mode 100644 index 000000000..4dfdfebb6 --- /dev/null +++ b/src/table/files.h @@ -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 } }, +}; diff --git a/src/table/genland.h b/src/table/genland.h new file mode 100644 index 000000000..4007f8db3 --- /dev/null +++ b/src/table/genland.h @@ -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 diff --git a/src/table/industry_land.h b/src/table/industry_land.h new file mode 100644 index 000000000..60beb74fb --- /dev/null +++ b/src/table/industry_land.h @@ -0,0 +1,1022 @@ +/* $Id$ */ + +typedef struct DrawIndustrySpec1Struct { + byte x; + byte image_1; + byte image_2; + byte image_3; +} DrawIndustrySpec1Struct; + +typedef struct DrawIndustrySpec4Struct { + byte image_1; + byte image_2; + byte image_3; +} DrawIndustrySpec4Struct; + +#define M(s1, s2, sx, sy, w, h, dz, p) { s1, s2, sx, sy, w - 1, h - 1, dz, p } + +static const DrawBuildingsTileStruct _industry_draw_tile_data[NUM_INDUSTRY_GFXES * 4] = { + M( 0xf54, 0x7db, 7, 0, 9, 9, 10, 0), + M( 0xf54, 0x7dc, 7, 0, 9, 9, 30, 0), + M( 0xf54, 0x7dd, 7, 0, 9, 9, 30, 0), + M( 0x7e6, 0x7dd, 7, 0, 9, 9, 30, 0), + M( 0x7e6, 0x7dd, 7, 0, 9, 9, 30, 0), + M( 0x7e6, 0x7de, 7, 0, 9, 9, 30, 0), + M( 0x7e6, 0x7df, 7, 0, 9, 9, 30, 0), + M( 0x7e6, 0x7df, 7, 0, 9, 9, 30, 0), + M( 0xf54, 0x7e0, 1, 2, 15, 9, 30, 0), + M( 0xf54, 0x7e1, 1, 2, 15, 9, 30, 0), + M( 0xf54, 0x7e2, 1, 2, 15, 9, 30, 0), + M( 0x7e6, 0x7e2, 1, 2, 15, 9, 30, 0), + M( 0xf54, 0x7e3, 4, 4, 9, 9, 30, 0), + M( 0xf54, 0x7e4, 4, 4, 9, 9, 30, 0), + M( 0xf54, 0x7e5, 4, 4, 9, 9, 30, 0), + M( 0x7e6, 0x7e5, 4, 4, 9, 9, 30, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e9, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e7, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e8, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x7fd, 1, 1, 14, 14, 5, 0), + M( 0xf54, 0x7fe, 1, 1, 14, 14, 44, 0), + M( 0xf54, 0x7ff, 1, 1, 14, 14, 44, 0), + M( 0xf54, 0x7ff, 1, 1, 14, 14, 44, 0), + M( 0xf54, 0x800, 0, 2, 16, 12, 6, 0), + M( 0xf54, 0x801, 0, 2, 16, 12, 47, 0), + M( 0xf54, 0x802, 0, 2, 16, 12, 50, 0), + M( 0xf54, 0x802, 0, 2, 16, 12, 50, 0), + M( 0xf54, 0x803, 1, 0, 14, 15, 5, 0), + M( 0xf54, 0x804, 1, 0, 14, 15, 19, 0), + M( 0xf54, 0x805, 1, 0, 14, 15, 21, 0), + M( 0xf54, 0x805, 1, 0, 14, 15, 21, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x806, 1, 2, 14, 11, 32, 5), + M( 0xf54, 0x80d, 1, 0, 13, 16, 8, 0), + M( 0xf54, 0x80e, 1, 0, 13, 16, 20, 0), + M( 0xf54, 0x80f, 1, 0, 13, 16, 20, 0), + M( 0xf54, 0x80f, 1, 0, 13, 16, 20, 0), + M( 0xf54, 0x810, 0, 1, 16, 14, 8, 0), + M( 0xf54, 0x811, 0, 1, 16, 14, 21, 0), + M( 0xf54, 0x812, 0, 1, 16, 14, 21, 0), + M( 0xf54, 0x812, 0, 1, 16, 14, 21, 0), + M( 0xf54, 0x813, 1, 1, 14, 14, 12, 0), + M( 0xf54, 0x814, 1, 1, 14, 14, 15, 0), + M( 0xf54, 0x815, 1, 1, 14, 14, 22, 0), + M( 0xf54, 0x815, 1, 1, 14, 14, 22, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x816, 0, 0, 16, 15, 20, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x817, 0, 1, 16, 13, 19, 0), + M( 0x81d, 0x818, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x819, 0, 0, 16, 16, 15, 0), + M( 0x81d, 0x81a, 0, 0, 16, 16, 31, 0), + M( 0x81d, 0x81b, 0, 0, 16, 16, 39, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0xf54, 0x81e | PALETTE_MODIFIER_COLOR, 1, 1, 14, 14, 4, 0), + M( 0xf54, 0x81f | PALETTE_MODIFIER_COLOR, 1, 1, 14, 14, 24, 0), + M( 0xf54, 0x820 | PALETTE_MODIFIER_COLOR, 1, 1, 14, 14, 27, 0), + M( 0x58c, 0x820 | PALETTE_MODIFIER_COLOR, 1, 1, 14, 14, 27, 0), + M( 0xf54, 0x821 | PALETTE_MODIFIER_COLOR, 3, 3, 10, 9, 3, 0), + M( 0xf54, 0x822 | PALETTE_MODIFIER_COLOR, 3, 3, 10, 9, 63, 0), + M( 0xf54, 0x823 | PALETTE_MODIFIER_COLOR, 3, 3, 10, 9, 62, 0), + M( 0x58c, 0x823 | PALETTE_MODIFIER_COLOR, 3, 3, 10, 9, 62, 0), + M( 0xf54, 0x824 | PALETTE_MODIFIER_COLOR, 4, 4, 7, 7, 3, 0), + M( 0xf54, 0x825 | PALETTE_MODIFIER_COLOR, 4, 4, 7, 7, 72, 0), + M( 0xf54, 0x825 | PALETTE_MODIFIER_COLOR, 4, 4, 7, 7, 72, 0), + M( 0x58c, 0x826 | PALETTE_MODIFIER_COLOR, 4, 4, 7, 7, 80, 0), + M( 0xf54, 0x827 | PALETTE_MODIFIER_COLOR, 2, 0, 12, 16, 51, 0), + M( 0xf54, 0x828 | PALETTE_MODIFIER_COLOR, 2, 0, 12, 16, 51, 0), + M( 0xf54, 0x829 | PALETTE_MODIFIER_COLOR, 2, 0, 12, 16, 51, 0), + M( 0x58c, 0x829 | PALETTE_MODIFIER_COLOR, 2, 0, 12, 16, 51, 0), + M( 0xf54, 0x82a | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 26, 0), + M( 0xf54, 0x82b | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 44, 0), + M( 0xf54, 0x82c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 46, 0), + M( 0x58c, 0x82c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 46, 0), + M( 0xf54, 0x82d, 3, 1, 10, 13, 2, 0), + M( 0xf54, 0x82e, 3, 1, 10, 13, 11, 0), + M( 0xf54, 0x82f, 3, 1, 10, 13, 11, 0), + M( 0x58c, 0x82f, 3, 1, 10, 13, 11, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xfdd, 0x833, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x837, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x834, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x834, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x830, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x838, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x835, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x835, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x831, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x839, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x836, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x836, 0, 0, 16, 16, 20, 0), + M( 0xfdd, 0x832, 0, 0, 16, 16, 20, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x87d, 0x87e, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x87e, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x87e, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x87e, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x87f, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x880, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x881, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x882, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x883, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x883, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x882, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x881, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x880, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x87f, 0, 0, 16, 16, 20, 0), + M( 0x87d, 0x87e, 0, 0, 16, 16, 20, 0), + M( 0x83a, 0x83c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83a, 0x83c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83a, 0x83c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83a, 0x83c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83b, 0x83d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83b, 0x83d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83b, 0x83d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83b, 0x83d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x83e, 0x83f | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83e, 0x83f | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x83e, 0x83f | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 18, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x840, 0x841, 0, 0, 16, 16, 18, 0), + M( 0x840, 0x841, 0, 0, 16, 16, 18, 0), + M( 0x840, 0x841, 0, 0, 16, 16, 18, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x842, 0x843, 0, 0, 16, 16, 30, 0), + M( 0x842, 0x843, 0, 0, 16, 16, 30, 0), + M( 0x842, 0x843, 0, 0, 16, 16, 30, 0), + M( 0x7e6, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x844, 0x845, 0, 0, 16, 16, 16, 0), + M( 0x844, 0x845, 0, 0, 16, 16, 16, 0), + M( 0x844, 0x845, 0, 0, 16, 16, 16, 0), + M( 0x7e6, 0x869, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86d, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86d, 0, 0, 16, 16, 50, 0), + M( 0x862 | PALETTE_MODIFIER_COLOR, 0x866 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86a, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86e, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86e, 0, 0, 16, 16, 50, 0), + M( 0x863 | PALETTE_MODIFIER_COLOR, 0x867 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86b, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86f, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86f, 0, 0, 16, 16, 50, 0), + M( 0x864 | PALETTE_MODIFIER_COLOR, 0x868 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86c, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x870, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x870, 0, 0, 16, 16, 50, 0), + M( 0x865 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 1, 1, 0, 0), + M( 0xf54, 0x871 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x875 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x875 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x879 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x872 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x876 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x876 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x87a | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x873 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x877 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x877 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x87b | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x874 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x878 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x878 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x87c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf54, 0x7ea, 3, 2, 8, 8, 18, 0), + M( 0xf54, 0x7eb, 3, 2, 8, 8, 37, 0), + M( 0xf54, 0x7ec, 3, 2, 8, 8, 49, 0), + M( 0x7e6, 0x7ec, 3, 2, 8, 8, 49, 0), + M( 0x7e6, 0x7ec, 3, 2, 8, 8, 49, 0), + M( 0x7e6, 0x7ed, 3, 2, 8, 8, 49, 0), + M( 0x7e6, 0x7ee, 3, 2, 8, 8, 49, 0), + M( 0x7e6, 0x7ee, 3, 2, 8, 8, 49, 0), + M( 0xf54, 0x7ef, 3, 2, 10, 7, 20, 0), + M( 0xf54, 0x7f0, 3, 2, 10, 7, 40, 0), + M( 0xf54, 0x7f1, 3, 2, 10, 7, 40, 0), + M( 0x7e6, 0x7f1, 3, 2, 10, 7, 40, 0), + M( 0xf54, 0x7f2, 4, 4, 7, 8, 22, 0), + M( 0xf54, 0x7f3, 4, 4, 7, 8, 22, 0), + M( 0xf54, 0x7f4, 4, 4, 7, 8, 22, 0), + M( 0x7e6, 0x7f4, 4, 4, 7, 8, 22, 0), + M( 0xf54, 0x7f5, 2, 1, 11, 13, 12, 0), + M( 0xf54, 0x7f6, 2, 1, 11, 13, 12, 0), + M( 0xf54, 0x7f7, 2, 1, 11, 13, 12, 0), + M( 0x7e6, 0x7f7, 2, 1, 11, 13, 12, 0), + M( 0x7e6, 0x85c, 0, 0, 1, 1, 1, 0), + M( 0x851, 0x852, 0, 0, 16, 16, 20, 0), + M( 0x851, 0x852, 0, 0, 16, 16, 20, 0), + M( 0x846 | PALETTE_MODIFIER_COLOR, 0x847 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 20, 0), + M( 0x7e6, 0x85d, 0, 0, 1, 1, 1, 0), + M( 0x853, 0x854, 0, 0, 16, 16, 20, 0), + M( 0x853, 0x854, 0, 0, 16, 16, 20, 0), + M( 0x848 | PALETTE_MODIFIER_COLOR, 0x849 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 20, 0), + M( 0x7e6, 0x85e, 0, 0, 1, 1, 1, 0), + M( 0x855, 0x856, 0, 0, 16, 16, 20, 0), + M( 0x855, 0x856, 0, 0, 16, 16, 20, 0), + M( 0x84a | PALETTE_MODIFIER_COLOR, 0x84b | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 20, 0), + M( 0x7e6, 0x85f, 0, 0, 1, 1, 1, 0), + M( 0x857, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x857, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x84c | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e6, 0x860, 0, 0, 1, 1, 1, 0), + M( 0x858, 0x859, 0, 0, 16, 16, 20, 0), + M( 0x858, 0x859, 0, 0, 16, 16, 20, 0), + M( 0x84d | PALETTE_MODIFIER_COLOR, 0x84e | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 20, 0), + M( 0x7e6, 0x861, 0, 0, 1, 1, 1, 0), + M( 0x85a, 0x85b, 0, 0, 16, 16, 20, 0), + M( 0x85a, 0x85b, 0, 0, 16, 16, 20, 0), + M( 0x84f | PALETTE_MODIFIER_COLOR, 0x850 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 20, 0), + M( 0x7e6, 0x884, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x884, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x884, 0, 0, 16, 16, 25, 0), + M( 0x886, 0x884, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x885, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x885, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x885, 0, 0, 16, 16, 25, 0), + M( 0x887, 0x885, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88e | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88f | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x890 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x890 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x891 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x892 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x893 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x893 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x894 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x895 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x896 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x896 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x897 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x898, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x899, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x899, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89a, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a6, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89b, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89c, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89c, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89d, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89e, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89f, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x89f, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a1, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a2, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a3, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a4, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a2, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a3, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8a5, 0, 0, 16, 16, 25, 0), + M( 0x8a7, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8b7, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8b7, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8c7, 0, 0, 16, 16, 25, 0), + M( 0x8a8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8a9, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8b9, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8b9, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8c9, 0, 0, 16, 16, 25, 0), + M( 0x8aa, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ba, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ba, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ca, 0, 0, 16, 16, 25, 0), + M( 0x8ab, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bb, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bb, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8cb, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ac, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bc, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bc, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8cc, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ad, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bd, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bd, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8cd, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ae, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8be, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8be, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ce, 0x8d7, 0, 0, 16, 16, 35, 0), + M( 0x8af, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bf, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8bf, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8cf, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b0, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c0, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c0, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d0, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b1, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c1, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c1, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d1, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b2, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c2, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c2, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d2, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b3, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c3, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c3, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d3, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b4, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c4, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c4, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d4, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b5, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c5, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c5, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d5, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8b6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8c6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8d6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ce, 0x8d7, 0, 0, 16, 16, 35, 0), + M( 0x8ce, 0x8d8, 0, 0, 16, 16, 35, 0), + M( 0x8ce, 0x8d9, 0, 0, 16, 16, 35, 0), + M( 0x8ce, 0x8d9, 0, 0, 16, 16, 35, 0), + M( 0x7e6, 0x88a, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88a, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88a, 0, 0, 16, 16, 25, 0), + M( 0x888, 0x88a, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88b, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88b, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x88b, 0, 0, 16, 16, 25, 0), + M( 0x889, 0x88b, 0, 0, 16, 16, 25, 0), + M( 0x8da, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e3, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e3, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ec, 0, 0, 16, 16, 25, 0), + M( 0x8db, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e4, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e4, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ed, 0, 0, 16, 16, 25, 0), + M( 0x8dc, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e5, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e5, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ee, 0, 0, 16, 16, 25, 0), + M( 0x8dd, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e6, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e6, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8ef, 0, 0, 16, 16, 25, 0), + M( 0x8de, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8e7, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8e7, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f0, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8df, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8e8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8e8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f1, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8e0, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e9, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8e9, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x8f2, 0, 0, 16, 16, 25, 0), + M( 0x8e1, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ea, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ea, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f3, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8e2, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8eb, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8eb, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f4, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f5, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x905, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x905, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x915, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f6, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x906, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x906, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x916, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f7, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x907, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x907, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x917, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f8, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x908, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x908, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x918, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8f9, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x909, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x909, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x919, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8fa, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90a, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90a, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x91a, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8fb, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90b, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90b, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x91b, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8fc, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90c, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90c, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x91c, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8fd, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90d, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90d, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x91d, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8fe, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90e, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90e, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x91e, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x8ff, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90f, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x90f, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x91f, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x900, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x910, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x910, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x920, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x901, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x911, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x911, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x921, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x902, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x912, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x912, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x922, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x903, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x913, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x913, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x923, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x904, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x914, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x914, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x924, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x925, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x925, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x925, 0x926, 0, 0, 16, 16, 30, 0), + M( 0x925, 0x926, 0, 0, 16, 16, 30, 0), + M( 0x925, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x925, 0x0, 0, 0, 16, 16, 25, 0), + M( 0x925, 0x927, 0, 0, 16, 16, 30, 0), + M( 0x925, 0x927, 0, 0, 16, 16, 30, 0), + M( 0x11c6, 0x92b | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92e | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92f | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92f | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x930 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x928 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x929 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x929 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x11c6, 0x92a | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 25, 0), + M( 0x7e6, 0x869, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86d, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86d, 0, 0, 16, 16, 50, 0), + M( 0x862 | PALETTE_MODIFIER_COLOR, 0x866 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86a, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86e, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86e, 0, 0, 16, 16, 50, 0), + M( 0x863 | PALETTE_MODIFIER_COLOR, 0x867 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86b, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86f, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86f, 0, 0, 16, 16, 50, 0), + M( 0x864 | PALETTE_MODIFIER_COLOR, 0x868 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x86c, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x870, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x870, 0, 0, 16, 16, 50, 0), + M( 0x865 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 1, 1, 0, 0), + M( 0x7e6, 0x931, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x935, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x935, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x939, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x932, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x936, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x936, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x93a, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x933, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x937, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x937, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x93b, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x934, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x938, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x938, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x93c, 0, 0, 16, 16, 50, 0), + M( 0x81d, 0x818, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x819, 0, 0, 16, 16, 15, 0), + M( 0x81d, 0x81a, 0, 0, 16, 16, 31, 0), + M( 0x81d, 0x81b, 0, 0, 16, 16, 39, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x81d, 0x81c, 0, 0, 16, 16, 7, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1245 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1248 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1248 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x124b | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1247 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x124a | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x124a | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x124d | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1246 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1249 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1249 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x124c | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x81d, 0x124e, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x124f, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1250, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1251, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1252, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1252, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1252, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1252, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1253, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1254, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1254, 0, 0, 16, 16, 10, 0), + M( 0x81d, 0x1255, 0, 0, 16, 16, 10, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125b, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125e, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125e, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1261, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125c, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125f, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125f, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1262, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x125d, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1260, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1260, 0, 0, 16, 16, 50, 0), + M( 0x7e6, 0x1263, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1264, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1264, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1268, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1265, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1265, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1269, 0, 0, 16, 16, 50, 4), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1266, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1266, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x126a, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1267, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1267, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x126b, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x126c, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1271, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1271, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1271, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1271, 0x1279, 0, 0, 16, 16, 50, 0), + M( 0x1272, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1272, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1272, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1272, 0x127a, 0, 0, 16, 16, 50, 0), + M( 0x1273, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1273, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1273, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1273, 0x127b, 0, 0, 16, 16, 50, 0), + M( 0x1274, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1274, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1274, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1274, 0x127c, 0, 0, 16, 16, 50, 0), + M( 0x1275, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1275, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1275, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1275, 0x127d, 0, 0, 16, 16, 50, 0), + M( 0x1276, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1276, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1276, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1276, 0x127e, 0, 0, 16, 16, 50, 0), + M( 0x1277, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1277, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1277, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1277, 0x127f, 0, 0, 16, 16, 50, 0), + M( 0x1278, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1278, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1278, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1278, 0x1280, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1284 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1283 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1283 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1286 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1281 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1282 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1282 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1285 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1287 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1287 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1287 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1288 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1288 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x1288 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1243, 0x1289 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 3), + M( 0x1243, 0x1289 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 3), + M( 0x1243, 0x1289 | PALETTE_TO_RED, 0, 0, 16, 16, 50, 3), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x1244, 0x0, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129b, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129b, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129b, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129b, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129c, 0, 0, 16, 16, 50, 2), + M( 0xf8d, 0x129c, 0, 0, 16, 16, 50, 2), + M( 0xf8d, 0x129c, 0, 0, 16, 16, 50, 2), + M( 0xf8d, 0x129c, 0, 0, 16, 16, 50, 2), + M( 0xf8d, 0x129d, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129d, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129d, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x129d, 0, 0, 16, 16, 50, 0), + M( 0x12a0 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a0 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a0 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a0 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a1 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a1 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a1 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a1 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a2 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a2 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a2 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a2 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a3 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a3 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a3 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0x12a3 | PALETTE_MODIFIER_COLOR, 0x0, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x0, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x0, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x0, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x0, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a4 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a4 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a4 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a4 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a6 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a6 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a6 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a6 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 0), + M( 0xf8d, 0x12a5 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 1), + M( 0xf8d, 0x12a5 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 1), + M( 0xf8d, 0x12a5 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 1), + M( 0xf8d, 0x12a5 | PALETTE_MODIFIER_COLOR, 0, 0, 16, 16, 50, 1), +}; + +static const DrawIndustrySpec1Struct _draw_industry_spec1[96] = { + { 8, 4, 0, 0}, + { 6, 0, 1, 0}, + { 4, 0, 2, 0}, + { 6, 0, 3, 0}, + { 8, 0, 4, 0}, + { 10, 0, 5, 0}, + { 12, 0, 6, 0}, + { 10, 0, 1, 0}, + { 8, 0, 2, 0}, + { 6, 0, 3, 0}, + { 4, 0, 4, 0}, + { 6, 0, 5, 1}, + { 8, 0, 6, 1}, + { 10, 0, 1, 1}, + { 12, 0, 2, 1}, + { 10, 0, 3, 1}, + { 8, 1, 4, 1}, + { 6, 1, 5, 1}, + { 4, 1, 6, 1}, + { 6, 1, 1, 1}, + { 8, 1, 2, 1}, + { 10, 1, 3, 1}, + { 12, 1, 4, 1}, + { 10, 1, 5, 2}, + { 8, 1, 6, 2}, + { 6, 1, 1, 2}, + { 4, 1, 2, 2}, + { 6, 1, 3, 2}, + { 8, 1, 4, 2}, + { 10, 1, 5, 2}, + { 12, 1, 6, 2}, + { 10, 1, 1, 2}, + { 8, 2, 2, 2}, + { 6, 2, 3, 2}, + { 4, 2, 4, 3}, + { 6, 2, 5, 3}, + { 8, 2, 6, 3}, + { 10, 2, 1, 3}, + { 12, 2, 2, 3}, + { 10, 2, 3, 3}, + { 8, 2, 4, 3}, + { 6, 2, 5, 3}, + { 4, 2, 6, 3}, + { 6, 2, 1, 3}, + { 8, 2, 2, 3}, + { 10, 2, 3, 4}, + { 12, 2, 4, 4}, + { 10, 2, 5, 4}, + { 8, 3, 6, 4}, + { 6, 3, 1, 4}, + { 4, 3, 2, 4}, + { 6, 3, 3, 4}, + { 8, 3, 4, 4}, + { 10, 3, 5, 4}, + { 12, 3, 6, 4}, + { 10, 3, 1, 4}, + { 8, 3, 2, 4}, + { 6, 3, 3, 4}, + { 4, 3, 4, 4}, + { 6, 3, 5, 4}, + { 8, 3, 6, 4}, + { 10, 3, 1, 4}, + { 12, 3, 2, 4}, + { 10, 3, 3, 4}, + { 8, 4, 4, 4}, + { 6, 4, 5, 4}, + { 4, 4, 6, 4}, + { 6, 4, 0, 4}, + { 8, 4, 0, 4}, + { 10, 4, 0, 4}, + { 12, 4, 0, 4}, + { 10, 4, 0, 4}, + { 8, 4, 0, 4}, + { 6, 4, 0, 4}, + { 4, 4, 0, 4}, + { 6, 4, 0, 4}, + { 8, 4, 0, 4}, + { 10, 4, 0, 4}, + { 12, 4, 0, 4}, + { 10, 4, 0, 4}, + { 8, 4, 0, 4}, + { 6, 4, 0, 4}, + { 4, 4, 0, 4}, + { 6, 4, 0, 4}, + { 8, 4, 0, 4}, + { 10, 4, 0, 4}, + { 12, 4, 0, 4}, + { 10, 4, 0, 4}, + { 8, 4, 0, 4}, + { 6, 4, 0, 4}, + { 4, 4, 0, 4}, + { 6, 4, 0, 4}, + { 8, 4, 0, 4}, + { 10, 4, 0, 4}, + { 12, 4, 0, 4}, + { 10, 4, 0, 4}, +}; + +static const byte _drawtile_proc1_x[5] = { + 22, 17, 14, 10, 8 +}; + +static const byte _drawtile_proc1_y[5] = { + 73, 70, 69, 66, 41 +}; + +static const DrawIndustrySpec4Struct _industry_anim_offs_3[] = { + {255, 255, 0}, + { 0, 255, 0}, + { 1, 255, 0}, + { 2, 255, 0}, + { 3, 255, 0}, + { 4, 255, 0}, + { 5, 255, 0}, + { 6, 255, 0}, + { 7, 255, 0}, + { 8, 255, 0}, + { 9, 255, 0}, + { 10, 255, 0}, + { 11, 255, 0}, + { 12, 255, 0}, + { 13, 255, 0}, + { 14, 255, 0}, + { 15, 255, 0}, + { 16, 255, 0}, + { 17, 255, 0}, + { 18, 255, 0}, + { 18, 255, 1}, + { 18, 255, 2}, + { 18, 255, 4}, + { 18, 255, 6}, + { 18, 255, 8}, + { 18, 255, 11}, + { 18, 255, 14}, + { 18, 255, 17}, + { 18, 255, 20}, + { 18, 255, 24}, + {255, 0, 29}, + {255, 0, 24}, + {255, 0, 20}, + {255, 0, 17}, + {255, 0, 14}, + {255, 0, 11}, + {255, 0, 8}, + {255, 0, 6}, + {255, 0, 4}, + {255, 0, 2}, + {255, 0, 1}, + {255, 1, 0}, + {255, 2, 0}, + {255, 3, 0}, + {255, 4, 0}, + {255, 5, 0}, + {255, 6, 0}, + {255, 7, 0}, + {255, 8, 0}, + {255, 255, 0}, +}; + +static const byte _industry_anim_offs[] = { + 255, 0, 0, 0, 2, 4, 6, 8, 10, 9, + 7, 5, 3, 1, 255, 0, 0, 0, 2, 4, + 6, 8, 10, 9, 7, 5, 3, 1, 255, 0, + 0, 0, 2, 4, 6, 8, 10, 9, 7, 5, + 3, 1, 255, 0, 0, 0, 2, 4, 6, 8, + 10, 9, 7, 5, 3, 1, 255, 0, 0, 0, + 2, 4, 6, 8, 10, 9, 7, 5, 3, 1 +}; + +static const byte _industry_anim_offs_2[] = { + 68, 69, 71, 74, 77, 80, 83, 85, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 85, 84, 83, 82, 81, 80, 79, 78, + 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, +}; + +static const byte _coal_plant_sparks_x[] = {11, 11, 14, 13, 18, 15}; +static const byte _coal_plant_sparks_y[] = {23, 11, 6, 3, 1, 0}; + +#define N 255 +/** + * Next frame in an animation + * The indices into this table are the ones as described by + * the enum with GFX_*s in industry_map.h. + */ +static const byte _industry_section_animation_next[NUM_INDUSTRY_GFXES] = { +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, 16, N, N, N, N, N, N, // <- growing forest +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, 129, N, N, N, N, N, // <- growing candyfloss +135, N, N, N, N, N, N, N, // <- 'growing' batteries +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, +}; + +/** + * Animation to start when goods is produced + * The indices into this table are the ones as described by + * the enum with GFX_*s in industry_map.h. + */ +static const byte _industry_produce_section[NUM_INDUSTRY_GFXES] = { +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +17, N, N, N, N, N, N, N, // <- chopping forest +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, 130, N, N, N, N, N, 136, // <- chopping candyfloss and reaping batteries +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, N, +N, N, N, N, N, N, N, +}; + +#undef N + +/** + * The indices into this table are the ones as described by + * the enum with GFX_*s in industry_map.h. + */ +static const byte _industry_section_bits[NUM_INDUSTRY_GFXES] = { + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 4, 2, 16, 16, 16, 16, // <- temperate bank + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 4, 2, 16, 16, 16, 16, 16, // <- sub-arctic/sub-tropical bank + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, +}; + +/** + * When true, the tile has to be drawn using the animation + * state instead of the construction state. + * The indices into this table are the ones as described by + * the enum with GFX_*s in industry_map.h. + */ +static const bool _industry_section_draw_animation_state[NUM_INDUSTRY_GFXES] = { + false, true, false, false, false, false, false, false, // <- animated wheel tower of coal mine + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, true, true, // <- animated oil well + true, false, false, false, false, false, false, false, // <- animated oil well + false, false, false, false, false, false, false, false, + true, false, false, false, false, false, false, false, // <- animated wheel tower of copper mine + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + true, false, false, false, false, false, false, false, // <- animated wheel tower of gold mine + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, +}; diff --git a/src/table/landscape_const.h b/src/table/landscape_const.h new file mode 100644 index 000000000..518a48047 --- /dev/null +++ b/src/table/landscape_const.h @@ -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 + }, + } +}; diff --git a/src/table/landscape_sprite.h b/src/table/landscape_sprite.h new file mode 100644 index 000000000..88f5f48b1 --- /dev/null +++ b/src/table/landscape_sprite.h @@ -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 +}; diff --git a/src/table/namegen.h b/src/table/namegen.h new file mode 100644 index 000000000..a5d9974d6 --- /dev/null +++ b/src/table/namegen.h @@ -0,0 +1,3302 @@ +/* $Id$ */ + +#include "../stdafx.h" +#include "../openttd.h" + +static const char *name_original_english_1[] = { + "Great ", + "Little ", + "New ", + "Fort ", +}; + +static const char *name_original_english_2[] = { + "Wr", + "B", + "C", + "Ch", + "Br", + "D", + "Dr", + "F", + "Fr", + "Fl", + "G", + "Gr", + "H", + "L", + "M", + "N", + "P", + "Pr", + "Pl", + "R", + "S", + "S", + "Sl", + "T", + "Tr", + "W" +}; + +static const char *name_original_english_3[] = { + "ar", + "a", + "e", + "in", + "on", + "u", + "un", + "en" +}; + +static const char *name_original_english_4[] = { + "n", + "ning", + "ding", + "d", + "", + "t" + "fing" +}; + +static const char *name_original_english_5[] = { + "ville", + "ham", + "field", + "ton", + "town", + "bridge", + "bury", + "wood", + "ford", + "hall", + "ston", + "way", + "stone", + "borough", + "ley", + "head", + "bourne", + "pool", + "worth", + "hill", + "well", + "hattan", + "burg", +}; + +static const char *name_original_english_6[] = { + "-on-sea", + " Bay", + " Market", + " Cross", + " Bridge", + " Falls", + " City", + " Ridge", + " Springs" +}; + +static const char *name_additional_english_prefix[] = { + "Great ", + "Little ", + "New ", + "Fort ", + "St. ", + "Old " +}; + +static const char *name_additional_english_1a[] = { + "Pen", + "Lough", + "Stam", + "Aber", + "Acc", + "Ex", + "Ax", + "Bre", + "Cum", + "Dun", + "Fin", + "Inver", + "Kin", + "Mon", + "Nan", + "Nant", + "Pit", + "Pol", + "Pont", + "Strath", + "Tre", + "Tilly", + "Beck", + "Canter", + "Bath", + "Liver", + "Mal", + "Ox", + "Bletch", + "Maccles", + "Grim", + "Wind", + "Sher", + "Gates", + "Orp", + "Brom", + "Lewis", + "Whit", + "White", + "Worm", + "Tyne", + "Avon", + "Stan" +}; + +static const char *name_additional_english_1b1[] = { + "Wr", + "B", + "C", + "Ch", + "Br", + "D", + "Dr", + "F", + "Fr", + "Fl", + "G", + "Gr", + "H", + "L", + "M", + "N", + "P", + "Pr", + "Pl", + "R", + "S", + "S", + "Sl", + "T", + "Tr", + "W" +}; + +static const char *name_additional_english_1b2[] = { + "ar", + "a", + "e", + "in", + "on", + "u", + "o", + "ee", + "es", + "ea", + "un", + "en" +}; + +static const char *name_additional_english_1b3a[] = { + "n", + "d", + "", + "t", + "", + "" +}; + +static const char *name_additional_english_1b3b[] = { + "ning", + "ding", + "fing" +}; + +static const char *name_additional_english_2[] = { + "ville", + "ham", + "field", + "ton", + "town", + "borough", + "bridge", + "bury", + "wood", + "ditch", + "ford", + "hall", + "dean", + "leigh", + "dore", + "ston", + "stow", + "church", + "wich", + "low", + "way", + "stone", + "minster", + "ley", + "head", + "bourne", + "pool", + "worth", + "hill", + "well", + "hattan", + "burg", + "berg", + "burgh", + "port", + "stoke", + "haven", + "stable", + "stock", + "side", + "brook", + "don", + "den", + "down", + "nor", + "grove", + "combe", + "by", + "say", + "ney", + "chester", + "dale", + "ness", + "shaw", + "thwaite" +}; + +static const char *name_additional_english_3[] = { + "-on-sea", + " Bay", + " Market", + " Beeches", + " Common", + " Park", + " Heath", + " Marsh", + " Green", + " Castle", + " End", + " Rivers", + " Cross", + " Bridge", + " Falls", + " City", + " Ridge", + " Springs" +}; + +static const char *name_austrian_a1[] = { + "Bad ", + "Deutsch ", + "Gross ", + "Klein ", + "Markt ", + "Maria " +}; + +static const char *name_austrian_a2[] = { + "Aus", + "Alten", + "Braun", + "Vösl", + "Mittern", + "Nuss", + "Neu", + "Walters", + "Breiten", + "Eisen", + "Feld", + "Mittern", + "Gall", + "Obern", + "Grat", + "Heiligen", + "Hof", + "Holla", + "Stein", + "Eber", + "Eggen", + "Enzers", + "Frauen", + "Herren", + "Hof", + "Hütt", + "Kaisers", + "Königs", + "Knittel", + "Lang", + "Ober", + "Ollers", + "Pfaffen", + "Potten", + "Salz", + "Schwarz", + "Stocker", + "Unter", + "Utten", + "Vösen", + "Vill", + "Weissen" +}; + +static const char *name_austrian_a3[] = { + "see", + "bach", + "dorf", + "ach", + "stein", + "hofen", + "au", + "ach", + "kirch", + "kirchen", + "kreuz", + "brunn", + "siedl", + "markt", + "wang", + "haag" +}; + +static const char *name_austrian_a4[] = { + "Bruck", + "Brunn", + "Gams", + "Grein", + "Ried", + "Faak", + "Zell", + "Spital", + "Kirchberg", + "Saal", + "Taferl", + "Wald" +}; + +static const char *name_austrian_a5[] = { + "St. ", + "Sankt " +}; + +static const char *name_austrian_a6[] = { + "Aegyd", + "Andrä", + "Georgen", + "Jakob", + "Johann", + "Leonhard", + "Marein", + "Lorenzen", + "Margarethen", + "Martin", + "Michael", + "Nikolai", + "Oswald", + "Peter", + "Pölten", + "Stefan", + "Stephan", + "Thomas", + "Veit", + "Wolfgang" +}; + +static const char *name_austrian_f1[] = { + " an der ", + " ob der " +}; + +static const char *name_austrian_f2[] = { + "Donau", + "Steyr", + "Lafnitz", + "Leitha", + "Thaya", + "Gail", + "Drau", + "Salzach", + "Ybbs", + "Traisen", + "Enns", + "Mur", + "Ill" +}; + +static const char *name_austrian_b1[] = { + " am " +}; + +static const char *name_austrian_b2[] = { + "Brenner", + "Dachstein", + "Gebirge", + "Grossglockner", + "Hausruck", + "Semmering", + "Wagram", + "Wechsel", + "Wilden Kaiser", + "Ziller" +}; + +static const char *name_german_real[] = { + "Berlin", + "Bonn", + "Bremen", + "Cottbus", + "Chemnitz", + "Dortmund", + "Dresden", + "Erfurt", + "Erlangen", + "Essen", + "Fulda", + "Gera", + "Kassel", + "Kiel", + "Köln", + "Lübeck", + "Magdeburg", + "München", + "Potsdam", + "Stuttgart", + "Wiesbaden" +}; + +static const char *name_german_pre[] = { + "Bad ", + "Klein ", + "Neu " +}; + +static const char *name_german_1[] = { + "Alb", + "Als", + "Ander", + "Arns", + "Bruns", + "Bam", + "Biele", + "Cloppen", + "Co", + "Duis", + "Düssel", + "Dannen", + "Elb", + "Els", + "Elster", + "Eichen", + "Ems", + "Fahr", + "Falken", + "Flens", + "Frank", + "Frei", + "Freuden", + "Fried", + "Fürsten", + "Hahn", + "Ham", + "Harz", + "Heidel", + "Hers", + "Herz", + "Holz", + "Hildes", + "Inns", + "Ilsen", + "Ingols", + "Kel", + "Kies", + "Korn", + "Kor", + "Kreuz", + "Kulm", + "Langen", + "Lim", + "Lohr", + "Lüne", + "Mel", + "Michels", + "Mühl", + "Naum", + "Nest", + "Nord", + "Nort", + "Nien", + "Nidda", + "Nieder", + "Nürn", + "Ober", + "Offen", + "Osna", + "Olden", + "Ols", + "Oranien", + "Pader", + "Quedlin", + "Quer", + "Ravens", + "Regens", + "Rott", + "Ros", + "Rüssels", + "Saal", + "Saar", + "Salz", + "Schöne", + "Schwein", + "Sonder", + "Sonnen", + "Stein", + "Strals", + "Straus", + "Süd", + "Ton", + "Unter", + "Ur", + "Vor", + "Wald", + "War", + "Wert", + "Wester", + "Witten", + "Wolfs", + "Würz" +}; + +static const char *name_german_2[] = { + "bach", + "berg", + "brück", + "brücken", + "burg", + "dorf", + "feld", + "furt", + "hausen", + "haven", + "heim", + "horst", + "mund", + "münster", + "stadt", + "wald" +}; + +static const char *name_german_3_an_der[] = { + " an der " +}; + +static const char *name_german_3_am[] = { + " am " +}; + +static const char *name_german_4_an_der[] = { + "Oder", + "Spree", + "Donau", + "Saale", + "Elbe" +}; + +static const char *name_german_4_am[] = { + "Main" +}; + +static const char *name_spanish_real[] = { + "Caracas", + "Maracay", + "Maracaibo", + "Velencia", + "El Dorado", + "Morrocoy", + "Cata", + "Cataito", + "Ciudad Bolivar", + "Barquisimeto", + "Merida", + "Puerto Ordaz", + "Santa Elena", + "San Juan", + "San Luis", + "San Rafael", + "Santiago", + "Barcelona", + "Barinas", + "San Cristobal", + "San Fransisco", + "San Martin", + "Guayana", + "San Carlos", + "El Limon", + "Coro", + "Corocoro", + "Puerto Ayacucho", + "Elorza", + "Arismendi", + "Trujillo", + "Carupano", + "Anaco", + "Lima", + "Cuzco", + "Iquitos", + "Callao", + "Huacho", + "Camana", + "Puerto Chala", + "Santa Cruz", + "Quito", + "Cuenca", + "Huacho", + "Tulcan", + "Esmereldas", + "Ibarra", + "San Lorenzo", + "Macas", + "Morana", + "Machala", + "Zamora", + "Latacunga", + "Tena", + "Cochabamba", + "Ascencion", + "Magdalena", + "Santa Ana", + "Manoa", + "Sucre", + "Oruro", + "Uyuni", + "Potosi", + "Tupiza", + "La Quiaca", + "Yacuiba", + "San Borja", + "Fuerte Olimpio", + "Fortin Esteros", + "Campo Grande", + "Bogota", + "El Banco", + "Zaragosa", + "Neiva", + "Mariano", + "Cali", + "La Palma", + "Andoas", + "Barranca", + "Montevideo", + "Valdivia", + "Arica", + "Temuco", + "Tocopilla", + "Mendoza", + "Santa Rosa" +}; + +static const char *name_french_real[] = { + "Agincourt", + "Lille", + "Dinan", + "Aubusson", + "Rodez", + "Bergerac", + "Bordeaux", + "Bayonne", + "Montpellier", + "Montelimar", + "Valence", + "Digne", + "Nice", + "Cannes", + "St. Tropez", + "Marseilles", + "Narbonne", + "Sète", + "Aurillac", + "Gueret", + "Le Creusot", + "Nevers", + "Auxerre", + "Versailles", + "Meaux", + "Châlons", + "Compiègne", + "Metz", + "Chaumont", + "Langres", + "Bourg", + "Lyons", + "Vienne", + "Grenoble", + "Toulon", + "Rennes", + "Le Mans", + "Angers", + "Nantes", + "Châteauroux", + "Orléans", + "Lisieux", + "Cherbourg", + "Morlaix", + "Cognac", + "Agen", + "Tulle", + "Blois", + "Troyes", + "Charolles", + "Grenoble", + "Chambéry", + "Tours", + "St. Brieuc", + "St. Malo", + "La Rochelle", + "St. Flour", + "Le Puy", + "Vichy", + "St. Valery", + "Beaujolais", + "Narbonne", + "Albi", + "St. Valery", + "Biarritz", + "Béziers", + "Nîmes", + "Chamonix", + "Angoulème", + "Alençon" +}; + +static const char *name_silly_1[] = { + "Binky", + "Blubber", + "Bumble", + "Crinkle", + "Crusty", + "Dangle", + "Dribble", + "Flippety", + "Google", + "Muffin", + "Nosey", + "Pinker", + "Quack", + "Rumble", + "Sleepy", + "Sliggles", + "Snooze", + "Teddy", + "Tinkle", + "Twister", + "Pinker", + "Hippo", + "Itchy", + "Jelly", + "Jingle", + "Jolly", + "Kipper", + "Lazy", + "Frogs", + "Mouse", + "Quack", + "Cheeky", + "Lumpy", + "Grumpy", + "Mangle", + "Fiddle", + "Slugs", + "Noodles", + "Poodles", + "Shiver", + "Rumble", + "Pixie", + "Puddle", + "Riddle", + "Rattle", + "Rickety", + "Waffle", + "Sagging", + "Sausage", + "Egg", + "Sleepy", + "Scatter", + "Scramble", + "Silly", + "Simple", + "Trickle", + "Slippery", + "Slimey", + "Slumber", + "Soggy", + "Sliggles", + "Splutter", + "Sulky", + "Swindle", + "Swivel", + "Tasty", + "Tangle", + "Toggle", + "Trotting", + "Tumble", + "Snooze", + "Water", + "Windy", + "Amble", + "Bubble", + "Cheery", + "Cheese", + "Cockle", + "Cracker", + "Crumple", + "Teddy", + "Evil", + "Fairy", + "Falling", + "Fishy", + "Fizzle", + "Frosty", + "Griddle" +}; + +static const char *name_silly_2[] = { + "ton", + "bury", + "bottom", + "ville", + "well", + "weed", + "worth", + "wig", + "wick", + "wood", + "pool", + "head", + "burg", + "gate", + "bridge" +}; + +static const char *name_swedish_1[] = { + "Gamla ", + "Lilla ", + "Nya ", + "Stora " +}; + +static const char *name_swedish_2[] = { + "Boll", + "Bor", + "Ed", + "En", + "Erik", + "Es", + "Fin", + "Fisk", + "Grön", + "Hag", + "Halm", + "Karl", + "Kram", + "Kung", + "Land", + "Lid", + "Lin", + "Mal", + "Malm", + "Marie", + "Ner", + "Norr", + "Oskar", + "Sand", + "Skog", + "Stock", + "Stor", + "Ström", + "Sund", + "Söder", + "Tall", + "Tratt", + "Troll", + "Upp", + "Var", + "Väster", + "Ängel", + "Öster" +}; + +static const char *name_swedish_2a[] = { + "B", + "Br", + "D", + "Dr", + "Dv", + "F", + "Fj", + "Fl", + "Fr", + "G", + "Gl", + "Gn", + "Gr", + "H", + "J", + "K", + "Kl", + "Kn", + "Kr", + "Kv", + "L", + "M", + "N", + "P", + "Pl", + "Pr", + "R", + "S", + "Sk", + "Skr", + "Sl", + "Sn", + "Sp", + "Spr", + "St", + "Str", + "Sv", + "T", + "Tr", + "Tv", + "V", + "Vr" +}; + +static const char *name_swedish_2b[] = { + "a", + "e", + "i", + "o", + "u", + "y", + "å", + "ä", + "ö" +}; + +static const char *name_swedish_2c[] = { + "ck", + "d", + "dd", + "g", + "gg", + "l", + "ld", + "m", + "n", + "nd", + "ng", + "nn", + "p", + "pp", + "r", + "rd", + "rk", + "rp", + "rr", + "rt", + "s", + "sk", + "st", + "t", + "tt", + "v" +}; + +static const char *name_swedish_3[] = { + "arp", + "berg", + "boda", + "borg", + "bro", + "bukten", + "by", + "byn", + "fors", + "hammar", + "hamn", + "holm", + "hus", + "hättan", + "kulle", + "köping", + "lund", + "löv", + "sala", + "skrona", + "slätt", + "spång", + "stad", + "sund", + "svall", + "svik", + "såker", + "udde", + "valla", + "viken", + "älv", + "ås" +}; + +static const char *name_dutch_1[] = { + "Nieuw ", + "Oud ", + "Groot ", + "Zuid ", + "Noord ", + "Oost ", + "West ", + "Klein " +}; + +static const char *name_dutch_2[] = { + "Hoog", + "Laag", + "Zuider", + "Zuid", + "Ooster", + "Oost", + "Wester", + "West", + "Hoofd", + "Midden", + "Eind", + "Amster", + "Amstel", + "Dord", + "Rotter", + "Haar", + "Til", + "Enk", + "Dok", + "Veen", + "Leidsch", + "Lely", + "En", + "Kaats", + "U", + "Maas", + "Mar", + "Bla", + "Al", + "Alk", + "Eer", + "Drie", + "Ter", + "Groes", + "Goes", + "Soest", + "Coe", + "Uit", + "Zwaag", + "Hellen", + "Slie", + "IJ", + "Grubben", + "Groen", + "Lek", + "Ridder", + "Schie", + "Olde", + "Roose", + "Haar", + "Til", + "Loos", + "Hil" +}; + +static const char *name_dutch_3[] = { + "Drog", + "Nat", + "Valk", + "Bob", + "Dedem", + "Kollum", + "Best", + "Hoend", + "Leeuw", + "Graaf", + "Uithuis", + "Purm", + "Hard", + "Hell", + "Werk", + "Spijk", + "Vink", + "Wams", + "Heerhug", + "Koning" +}; + +static const char *name_dutch_4[] = { + "e", + "er", + "el", + "en", + "o", + "s" +}; + +static const char *name_dutch_5[] = { + "stad", + "vorst", + "dorp", + "dam", + "beek", + "doorn", + "zijl", + "zijlen", + "lo", + "muiden", + "meden", + "vliet", + "nisse", + "daal", + "vorden", + "vaart", + "mond", + "zaal", + "water", + "duinen", + "heuvel", + "geest", + "kerk", + "meer", + "maar", + "hoorn", + "rade", + "wijk", + "berg", + "heim", + "sum", + "richt", + "burg", + "recht", + "drecht", + "trecht", + "tricht", + "dricht", + "lum", + "rum", + "halen", + "oever", + "wolde", + "veen", + "hoven", + "gast", + "kum", + "hage", + "dijk", + "zwaag", + "pomp", + "huizen", + "bergen", + "schede", + "mere", + "end" +}; + +static const char *name_finnish_real[] = { + "Aijala", + "Kisko", + "Espoo", + "Helsinki", + "Tapiola", + "Järvelä", + "Lahti", + "Kotka", + "Hamina", + "Loviisa", + "Kouvola", + "Tampere", + "Oulu", + "Salo", + "Malmi", + "Pelto", + "Koski", + "Iisalmi", + "Raisio", + "Taavetti", + "Joensuu", + "Imatra", + "Tapanila", + "Pasila", + "Turku", + "Kupittaa", + "Vaasa", + "Pori", + "Rauma", + "Kolari", + "Lieksa" +}; + +static const char *name_finnish_1[] = { + "Hiekka", + "Haapa", + "Mylly", + "Sauna", + "Uusi", + "Vanha", + "Kesä", + "Kuusi", + "Pelto", + "Tuomi", + "Terva", + "Olki", + "Heinä", + "Seinä", + "Rova", + "Koivu", + "Kokko", + "Mänty", + "Pihlaja", + "Petäjä", + "Kielo", + "Kauha", + "Viita", + "Kivi", + "Riihi", + "Ääne", + "Niini" +}; + +static const char *name_finnish_2[] = { + "Lappeen", + "Lohjan", + "Savon", + "Lapin", + "Pitäjän", + "Martin", + "Kuusan", + "Kemi", + "Keri", + "Hämeen", + "Kangas" +}; + +static const char *name_finnish_3[] = { + "harju", + "linna", + "järvi", + "kallio", + "mäki", + "nummi", + "joki", + "kylä", + "lampi", + "lahti", + "metsä", + "suo", + "laakso", + "niitty", + "luoto", + "hovi", + "ranta", + "koski", + "salo" +}; + +static const char *name_polish_1_m[] = { + "Wielki ", + "Mały ", + "Zły ", + "Dobry ", + "Nowy ", + "Stary ", + "Złoty ", + "Zielony ", + "Biały ", + "Modry ", + "Dębowy " +}; + +static const char *name_polish_1_f[] = { + "Wielka ", + "Mała ", + "Zła ", + "Dobra ", + "Nowa ", + "Stara ", + "Złota ", + "Zielona ", + "Biała ", + "Modra ", + "Dębowa " +}; + +static const char *name_polish_1_n[] = { + "Wielkie ", + "Małe ", + "Złe ", + "Dobre ", + "Nowe ", + "Stare ", + "Złote ", + "Zielone ", + "Białe ", + "Modre ", + "Dębowe " +}; + +static const char *name_polish_2_o[] = { + "Frombork", + "Gniezno", + "Olsztyn", + "Toruń", + "Bydgoszcz", + "Terespol", + "Kraków", + "Poznań", + "Wrocław", + "Katowice", + "Cieszyn", + "Bytom", + "Frombork", + "Hel", + "Konin", + "Lublin", + "Malbork", + "Sopot", + "Sosnowiec", + "Gdańsk", + "Gdynia", + "Sieradz", + "Sandomierz", + "Szczyrk", + "Szczytno", + "Szczecin", + "Zakopane", + "Szklarska Poręba", + "Bochnia", + "Golub-Dobrzyn", + "Chojnice", + "Ostrowiec", + "Otwock", + "Wolsztyn" +}; + +static const char *name_polish_2_m[] = { + "Jarocin", + "Gogolin", + "Tomaszów", + "Piotrków", + "Lidzbark", + "Rypin", + "Radzymin", + "Wołomin", + "Pruszków", + "Olsztynek", + "Rypin", + "Cisek", + "Krotoszyn", + "Stoczek", + "Lubin", + "Lubicz", + "Milicz", + "Targ", + "Ostrów", + "Ozimek", + "Puck", + "Rzepin", + "Siewierz", + "Stargard", + "Starogard", + "Turek", + "Tymbark", + "Wolsztyn", + "Strzepcz", + "Strzebielin", + "Sochaczew", + "Grębocin", + "Gniew", + "Lubliniec", + "Lubasz", + "Lutomiersk", + "Niemodlin", + "Przeworsk", + "Ursus", + "Tyczyn", + "Sztum", + "Szczebrzeszyn", + "Wolin", + "Wrzeszcz", + "Zgierz", + "Zieleniec", + "Drobin", + "Garwolin" +}; + +static const char *name_polish_2_f[] = { + "Szprotawa", + "Pogorzelica", + "Motława", + "Lubawa", + "Nidzica", + "Kruszwica", + "Bierawa", + "Brodnica", + "Chojna", + "Krzepica", + "Ruda", + "Rumia", + "Tuchola", + "Trzebinia", + "Ustka", + "Warszawa", + "Bobowa", + "Dukla", + "Krynica", + "Murowana", + "Niemcza", + "Zaspa", + "Zawoja", + "Wola", + "Limanowa", + "Rabka", + "Skawina", + "Pilawa" +}; + +static const char *name_polish_2_n[] = { + "Lipsko", + "Pilzno", + "Przodkowo", + "Strzelno", + "Susz", + "Jaworzno", + "Choszczno", + "Mogilno", + "Luzino", + "Miasto", + "Dziadowo", + "Kowalewo", + "Legionowo", + "Miastko", + "Zabrze", + "Zawiercie", + "Kochanowo", + "Miechucino", + "Mirachowo", + "Robakowo", + "Kosakowo", + "Borne", + "Braniewo", + "Sulinowo", + "Chmielno", + "Jastrzębie", + "Gryfino", + "Koronowo", + "Lubichowo", + "Opoczno" +}; + +static const char *name_polish_3_m[] = { + " Wybudowanie", + " Świętokrzyski", + " Górski", + " Morski", + " Zdrój", + " Wody", + " Bajoro", + " Krajeński", + " Śląski", + " Mazowiecki", + " Pomorski", + " Wielki", + " Maly", + " Warmiński", + " Mazurski", + " Mniejszy", + " Większy", + " Górny", + " Dolny", + " Wielki", + " Stary", + " Nowy", + " Wielkopolski", + " Wzgórze", + " Mosty", + " Kujawski", + " Małopolski", + " Podlaski", + " Lesny" +}; + +static const char *name_polish_3_f[] = { + " Wybudowanie", + " Świętokrzyska", + " Górska", + " Morska", + " Zdrój", + " Woda", + " Bajoro", + " Krajeńska", + " Śląska", + " Mazowiecka", + " Pomorska", + " Wielka", + " Mała", + " Warmińska", + " Mazurska", + " Mniejsza", + " Większa", + " Górna", + " Dolna", + " Wielka", + " Stara", + " Nowa", + " Wielkopolska", + " Wzgórza", + " Mosty", + " Kujawska", + " Malopolska", + " Podlaska", + " Leśna" +}; + +static const char *name_polish_3_n[] = { + " Wybudowanie", + " Świetokrzyskie", + " Górskie", + " Morskie", + " Zdrój", + " Wody", + " Bajoro", + " Krajeńskie", + " Śląskie", + " Mazowieckie", + " Pomorskie", + " Wielkie", + " Małe", + " Warmińskie ", + " Mazurskie ", + " Mniejsze", + " Większe", + " Górne", + " Dolne", + " Wielkie", + " Stare", + " Nowe", + " Wielkopolskie", + " Wzgórze", + " Mosty", + " Kujawskie", + " Małopolskie", + " Podlaskie", + " Leśne" +}; + +static const char *name_czech_real[] = { + "Aš", + "Benešov", + "Beroun", + "Bezdružice", + "Blansko", + "Břeclav", + "Brno", + "Bruntál", + "Česká Lípa", + "České Budějovice", + "Český Krumlov", + "Děčín", + "Domažlice", + "Dubí", + "Frýdek-Místek", + "Havlíčkův Brod", + "Hodonín", + "Hradec Králové", + "Humpolec", + "Cheb", + "Chomutov", + "Chrudim", + "Jablonec nad Nisou", + "Jeseník", + "Jičín", + "Jihlava", + "Jindřichův Hradec", + "Karlovy Vary", + "Karviná", + "Kladno", + "Klatovy", + "Kolín", + "Kosmonosy", + "Kroměříž", + "Kutná Hora", + "Liberec", + "Litoměřice", + "Louny", + "Manětín", + "Mělník", + "Mladá Boleslav", + "Most", + "Náchod", + "Nový Jičín", + "Nymburk", + "Olomouc", + "Opava", + "Oráčov", + "Ostrava", + "Pardubice", + "Pelhřimov", + "Polžice", + "Písek", + "Plzeň", + "Praha", + "Prachatice", + "Přerov", + "Příbram", + "Prostějov", + "Rakovník", + "Rokycany", + "Rudná", + "Rychnov nad Kněžnou", + "Semily", + "Sokolov", + "Strakonice", + "Středokluky", + "Šumperk", + "Svitavy", + "Tábor", + "Tachov", + "Teplice", + "Třebíč", + "Trutnov", + "Uherské Hradiště", + "Ústí nad Labem", + "Ústí nad Orlicí", + "Vsetín", + "Vyškov", + "Žďár nad Sázavou", + "Zlín", + "Znojmo" +}; + + +/* The advanced hyperintelligent Czech town names generator! */ +/* The tables and MakeCzechTownName() is (c) Petr Baudis 2005 (GPL'd) + * Feel free to ask me about anything unclear or if you need help + * with cloning this for your own language. */ + +// Sing., pl. +typedef enum CzechGender { + CZG_SMASC, + CZG_SFEM, + CZG_SNEUT, + CZG_PMASC, + CZG_PFEM, + CZG_PNEUT, + // Special for substantive stems - the ending chooses the gender. + CZG_FREE, + // Like CZG_FREE, but disallow CZG_SNEUT. + CZG_NFREE +} CzechGender; +typedef enum CzechPattern { + CZP_JARNI, + CZP_MLADY, + CZP_PRIVL +} CzechPattern; +/* [CzechGender][CzechPattern] - replaces the last character of the adjective + * by this. */ +// XXX: [CZG_SMASC][CZP_PRIVL] needs special handling: -ovX -> -uv. +static const char *name_czech_patmod[][3] = { + /* CZG_SMASC */ { "í", "ý", "X" }, + /* CZG_SFEM */ { "í", "á", "a" }, + /* CZG_SNEUT */ { "í", "é", "o" }, + /* CZG_PMASC */ { "í", "é", "y" }, + /* CZG_PFEM */ { "í", "é", "y" }, + /* CZG_PNEUT */ { "í", "á", "a" } +}; + +// This way the substantives can choose only some adjectives/endings: +// At least one of these flags must be satisfied: +typedef enum CzechAllow { + CZA_SHORT = 1, + CZA_MIDDLE = 2, + CZA_LONG = 4, + CZA_ALL = ~0 +} CzechAllow; +// All these flags must be satisfied (in the stem->others direction): +typedef enum CzechChoose { + CZC_NONE = 0, // No requirements. + CZC_COLOR = 1, + CZC_POSTFIX = 2, // Matched if postfix was inserted. + CZC_NOPOSTFIX = 4, // Matched if no postfix was inserted. + CZC_ANY = ~0 +} CzechChoose; + +typedef struct CzechNameSubst { + CzechGender gender; + CzechAllow allow; + CzechChoose choose; + const char *name; +} CzechNameSubst; + +typedef struct CzechNameAdj { + CzechPattern pattern; + CzechChoose choose; + const char *name; +} CzechNameAdj; + +// Some of items which should be common are doubled. +static const CzechNameAdj name_czech_adj[] = { + { CZP_JARNI, CZC_ANY, "Horní" }, + { CZP_JARNI, CZC_ANY, "Horní" }, + { CZP_JARNI, CZC_ANY, "Dolní" }, + { CZP_JARNI, CZC_ANY, "Dolní" }, + { CZP_JARNI, CZC_ANY, "Přední" }, + { CZP_JARNI, CZC_ANY, "Zadní" }, + { CZP_JARNI, CZC_ANY, "Kostelní" }, + { CZP_JARNI, CZC_ANY, "Havraní" }, + { CZP_JARNI, CZC_ANY, "Říční" }, + { CZP_JARNI, CZC_ANY, "Jezerní" }, + { CZP_MLADY, CZC_ANY, "Velký" }, + { CZP_MLADY, CZC_ANY, "Velký" }, + { CZP_MLADY, CZC_ANY, "Malý" }, + { CZP_MLADY, CZC_ANY, "Malý" }, + { CZP_MLADY, CZC_ANY, "Vysoký" }, + { CZP_MLADY, CZC_ANY, "Český" }, + { CZP_MLADY, CZC_ANY, "Moravský" }, + { CZP_MLADY, CZC_ANY, "Slovácký" }, + { CZP_MLADY, CZC_ANY, "Slezský" }, + { CZP_MLADY, CZC_ANY, "Uherský" }, + { CZP_MLADY, CZC_ANY, "Starý" }, + { CZP_MLADY, CZC_ANY, "Starý" }, + { CZP_MLADY, CZC_ANY, "Nový" }, + { CZP_MLADY, CZC_ANY, "Nový" }, + { CZP_MLADY, CZC_ANY, "Mladý" }, + { CZP_MLADY, CZC_ANY, "Královský" }, + { CZP_MLADY, CZC_ANY, "Kamenný" }, + { CZP_MLADY, CZC_ANY, "Cihlový" }, + { CZP_MLADY, CZC_ANY, "Divný" }, + { CZP_MLADY, CZC_COLOR, "Červená" }, + { CZP_MLADY, CZC_COLOR, "Červená" }, + { CZP_MLADY, CZC_COLOR, "Červená" }, + { CZP_MLADY, CZC_COLOR, "Zelená" }, + { CZP_MLADY, CZC_COLOR, "Žlutá" }, + { CZP_MLADY, CZC_COLOR, "Sivá" }, + { CZP_MLADY, CZC_COLOR, "Šedá" }, + { CZP_MLADY, CZC_COLOR, "Bílá" }, + { CZP_MLADY, CZC_COLOR, "Bílá" }, + { CZP_MLADY, CZC_COLOR, "Modrá" }, + { CZP_MLADY, CZC_COLOR, "Růžová" }, + { CZP_MLADY, CZC_COLOR, "Černá" }, + { CZP_PRIVL, CZC_ANY, "Králova" }, + { CZP_PRIVL, CZC_ANY, "Janova" }, + { CZP_PRIVL, CZC_ANY, "Karlova" }, + { CZP_PRIVL, CZC_ANY, "Kryštofova" }, + { CZP_PRIVL, CZC_ANY, "Jiříkova" }, + { CZP_PRIVL, CZC_ANY, "Petrova" }, + { CZP_PRIVL, CZC_ANY, "Sudovo" }, +}; + +// Considered a stem for choose/allow matching purposes. +static const CzechNameSubst name_czech_subst_full[] = { + { CZG_SMASC, CZA_ALL, CZC_COLOR, "Sedlec" }, + { CZG_SMASC, CZA_ALL, CZC_COLOR, "Brod" }, + { CZG_SMASC, CZA_ALL, CZC_COLOR, "Brod" }, + { CZG_SMASC, CZA_ALL, CZC_NONE, "Úval" }, + { CZG_SMASC, CZA_ALL, CZC_COLOR, "Žďár" }, + { CZG_SMASC, CZA_ALL, CZC_COLOR, "Smrk" }, + { CZG_SFEM, CZA_ALL, CZC_COLOR, "Hora" }, + { CZG_SFEM, CZA_ALL, CZC_COLOR, "Lhota" }, + { CZG_SFEM, CZA_ALL, CZC_COLOR, "Lhota" }, + { CZG_SFEM, CZA_ALL, CZC_COLOR, "Hlava" }, + { CZG_SFEM, CZA_ALL, CZC_COLOR, "Lípa" }, + { CZG_SNEUT, CZA_ALL, CZC_COLOR, "Pole" }, + { CZG_SNEUT, CZA_ALL, CZC_COLOR, "Údolí" }, + { CZG_PMASC, CZA_ALL, CZC_NONE, "Úvaly" }, + { CZG_PFEM, CZA_ALL, CZC_COLOR, "Luka" }, + { CZG_PNEUT, CZA_ALL, CZC_COLOR, "Pole" }, +}; + +// TODO: More stems needed. --pasky +static const CzechNameSubst name_czech_subst_stem[] = { + { CZG_SMASC, CZA_MIDDLE, CZC_COLOR, "Kostel" }, + { CZG_SMASC, CZA_MIDDLE, CZC_COLOR, "Klášter" }, + { CZG_SMASC, CZA_SHORT, CZC_COLOR, "Lhot" }, + { CZG_SFEM, CZA_SHORT, CZC_COLOR, "Lhot" }, + { CZG_SFEM, CZA_SHORT, CZC_COLOR, "Hur" }, + { CZG_FREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Sedl" }, + { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_COLOR, "Hrad" }, + { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Pras" }, + { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Baž" }, + { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Tes" }, + { CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Už" }, + { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_POSTFIX, "Bř" }, + { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Vod" }, + { CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Jan" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Prach" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Kunr" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Strak" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Vít" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Vyš" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Žat" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Žer" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Střed" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Harv" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Pruh" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Tach" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Písn" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Jin" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Jes" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Jar" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Sok" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Hod" }, + { CZG_NFREE, CZA_LONG, CZC_NONE, "Net" }, + { CZG_FREE, CZA_LONG, CZC_NONE, "Praž" }, + { CZG_FREE, CZA_LONG, CZC_NONE, "Nerat" }, + { CZG_FREE, CZA_LONG, CZC_NONE, "Kral" }, + { CZG_FREE, CZA_LONG, CZC_NONE, "Hut" }, + { CZG_FREE, CZA_LONG, CZC_NOPOSTFIX, "Pan" }, + { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NOPOSTFIX, "Odstřed" }, + { CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_COLOR, "Mrat" }, + { CZG_FREE, CZA_LONG, CZC_COLOR, "Hlav" }, + { CZG_FREE, CZA_SHORT | CZA_MIDDLE, CZC_NONE, "Měř" }, + { CZG_FREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Lip" }, +}; + +// Optional postfix inserted between stem and ending. +static const char *name_czech_subst_postfix[] = { + "av", "an", "at", + "ov", "on", "ot", + "ev", "en", "et", +}; + +// This array must have the both neutral genders at the end! +static const CzechNameSubst name_czech_subst_ending[] = { + { CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "ec" }, + { CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "ín" }, + { CZG_SMASC, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ov" }, + { CZG_SMASC, CZA_SHORT | CZA_LONG, CZC_ANY, "kov" }, + { CZG_SMASC, CZA_LONG, CZC_POSTFIX, "ín" }, + { CZG_SMASC, CZA_LONG, CZC_POSTFIX, "ník" }, + { CZG_SMASC, CZA_LONG, CZC_ANY, "burk" }, + { CZG_SFEM, CZA_SHORT, CZC_ANY, "ka" }, + { CZG_SFEM, CZA_MIDDLE, CZC_ANY, "inka" }, + { CZG_SFEM, CZA_MIDDLE, CZC_ANY, "ná" }, + { CZG_SFEM, CZA_LONG, CZC_ANY, "ava" }, + { CZG_PMASC, CZA_LONG, CZC_POSTFIX, "íky" }, + { CZG_PMASC, CZA_LONG, CZC_ANY, "upy" }, + { CZG_PMASC, CZA_LONG, CZC_ANY, "olupy" }, + { CZG_PFEM, CZA_LONG, CZC_ANY, "avy" }, + { CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ice" }, + { CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ičky" }, + { CZG_PNEUT, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "na" }, + { CZG_SNEUT, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "no" }, + { CZG_SNEUT, CZA_LONG, CZC_ANY, "iště" }, +}; + +static const char *name_czech_suffix[] = { + "nad Cidlinou", + "nad Dyjí", + "nad Jihlavou", + "nad Labem", + "nad Lesy", + "nad Moravou", + "nad Nisou", + "nad Odrou", + "nad Ostravicí", + "nad Sázavou", + "nad Vltavou", + "pod Pradědem", + "pod Radhoštěm", + "pod Řípem", + "pod Sněžkou", + "pod Špičákem", + "pod Sedlem", + "v Čechách", + "na Moravě", +}; + + + +static const char *name_romanian_real[]= { + "Adjud", + "Alba Iulia", + "Alexandria", + "Babadag", + "Bacãu", + "Baia Mare", + "Bãile Herculane", + "Bãilesti", + "Bârlad", + "Bicaz", + "Bistrita", + "Blaj", + "Borsec", + "Botosani", + "Brãila", + "Brasov", + "Bucuresti", + "Buftea", + "Buzãu", + "Cãlãrasi", + "Caransebes", + "Cernavodã", + "Cluj-Napoca", + "Constanta", + "Covasna", + "Craiova", + "Dej", + "Deva", + "Dorohoi", + "Dr.-Tr. Severin", + "Drãgãsani", + "Fãgãras", + "Fãlticeni", + "Fetesti", + "Focsani", + "Galati", + "Gheorgheni", + "Giurgiu", + "Hârsova", + "Hunedoara", + "Husi", + "Iasi", + "Isaccea", + "Lugoj", + "Mãcin", + "Mangalia", + "Medgidia", + "Medias", + "Miercurea Ciuc", + "Mizil", + "Motru", + "Nãsãud", + "Nãvodari", + "Odobesti", + "Oltenita", + "Onesti", + "Oradea", + "Orsova", + "Petrosani", + "Piatra Neamt", + "Pitesti", + "Ploiesti", + "Predeal", + "Râmnicu Vâlcea", + "Reghin", + "Resita", + "Roman", + "Rosiorii de Vede", + "Satu Mare", + "Sebes", + "Sfântu Gheorghe", + "Sibiu", + "Sighisoara", + "Sinaia", + "Slatina", + "Slobozia", + "Sovata", + "Suceava", + "Sulina", + "Tãndãrei", + "Târgoviste", + "Târgu Jiu", + "Târgu Mures", + "Tecuci", + "Timisoara", + "Tulcea", + "Turda", + "Turnu Mãgurele", + "Urziceni", + "Vaslui", + "Vatra Dornei", + "Victoria", + "Videle", + "Zalãu" +}; + +static const char *name_slovak_real[] = { + "Bratislava", + "Banovce nad Bebravou", + "Banska Bystrica", + "Banska Stiavnica", + "Bardejov", + "Brezno", + "Brezova pod Bradlom", + "Bytca", + "Cadca", + "Cierna nad Tisou", + "Detva", + "Detva", + "Dolny Kubin", + "Dolny Kubin", + "Dunajska Streda", + "Gabcikovo", + "Galanta", + "Gbely", + "Gelnica", + "Handlova", + "Hlohovec", + "Holic", + "Humenne", + "Hurbanovo", + "Kezmarok", + "Komarno", + "Kosice", + "Kremnica", + "Krompachy", + "Kuty", + "Leopoldov", + "Levoca", + "Liptovsky Mikulas", + "Lucenec", + "Malacky", + "Martin", + "Medzilaborce", + "Michalovce", + "Modra", + "Myjava", + "Namestovo", + "Nitra", + "Nova Bana", + "Nove Mesto nad Vahom", + "Nove Zamky", + "Partizanske", + "Pezinok", + "Piestany", + "Poltar", + "Poprad", + "Povazska Bystrica", + "Prievidza", + "Puchov", + "Revuca", + "Rimavska Sobota", + "Roznava", + "Ruzomberok", + "Sabinov", + "Sala", + "Senec", + "Senica", + "Sered", + "Skalica", + "Sladkovicovo", + "Smolenice", + "Snina", + "Stara Lubovna", + "Stara Tura", + "Strazske", + "Stropkov", + "Stupava", + "Sturovo", + "Sulekovo", + "Topolcany", + "Trebisov", + "Trencin", + "Trnava", + "Turcianske Teplice", + "Tvrdosin", + "Vrable", + "Vranov nad Toplov", + "Zahorska Bystrica", + "Zdiar", + "Ziar nad Hronom", + "Zilina", + "Zlate Moravce", + "Zvolen" +}; + +static const char *name_norwegian_1[] = { + "Arna", + "Aust", + "Bjørk", + "Bjørn", + "Brand", + "Bøver", + "Drag", + "Drø", + "Eids", + "Egge", + "Fager", + "Finns", + "Flat", + "Foll", + "Foss", + "Fugle", + "Furu", + "Gaus", + "Galte", + "Geir", + "Gløs", + "Gran", + "Grind", + "Grims", + "Grøn", + "Grøt", + "Gulle", + "Haka", + "Hammer", + "Haug", + "Hol", + "Hon", + "Hop", + "Hov", + "Jess", + "Kabel", + "Kjerns", + "Kjerring", + "Knatte", + "Krok", + "Køy", + "Lang", + "Lauv", + "Leir", + "Lund", + "Logn", + "Lo", + "Lyng", + "Løn", + "Mesna", + "Mel", + "Mo", + "Nar", + "Nitte", + "Nord", + "Odd", + "Ola", + "Otte", + "Ran", + "Rev", + "Rog", + "Roms", + "Rosen", + "Sand", + "Sau", + "Sel", + "Sol", + "Sjur", + "Skår", + "Slått", + "Stjør", + "Stor", + "Svart", + "Svens", + "Svin", + "Sylte", + "Syn", + "Tran", + "Vass", + "Ved", + "Vest", + "Vesle", + "Vik", + "Våg" +}; + +static const char *name_norwegian_2[] = { + "aker", + "anger", + "bakken", + "bekk", + "berg", + "botn", + "breen", + "bu", + "bugen", + "by", + "bygd", + "bø", + "dal", + "egga", + "eid", + "elv", + "enga", + "foss", + "fjell", + "fjord", + "foten", + "gard", + "grend", + "hammer", + "haug", + "havn", + "heim", + "hella", + "hovda", + "høa", + "høgda", + "kampen", + "kjølen", + "kollen", + "kroken", + "land", + "lia", + "mark", + "moen", + "myr", + "nes", + "nuten", + "osen", + "rike", + "rud", + "sand", + "set", + "sjøen", + "skogen", + "slette", + "snipa", + "stad", + "stua", + "stulen", + "sund", + "svingen", + "sætra", + "tinden", + "tun", + "vang", + "vatn", + "veid", + "vik", + "voll", + "våg", + "um", + "åsen" +}; + +static const char *name_norwegian_real[] = { + "Alta", + "Arendal", + "Askim", + "Bergen", + "Bodø", + "Brevik", + "Bryne", + "Brønnøysund", + "Drammen", + "Drøbak", + "Egersund", + "Elverum", + "Farsund", + "Fauske", + "Finnsnes", + "Flekkefjord", + "Flora", + "Fosnavåg", + "Fredrikstad", + "Førde", + "Gjøvik", + "Grimstad", + "Halden", + "Hamar", + "Hammerfest", + "Harstad", + "Haugesund", + "Holmestrand", + "Horten", + "Jørpeland", + "Kirkenes", + "Kolvereid", + "Kongsberg", + "Kongsvinger", + "Kopervik", + "Kragerø", + "Kristiansand", + "Kristiansund", + "Langesund", + "Larvik", + "Leirvik", + "Leknes", + "Levanger", + "Lillehammer", + "Lillesand", + "Lillestrøm", + "Lyngdal", + "Lørenskog", + "Mandal", + "Mo i Rana", + "Molde", + "Mosjøen", + "Moss", + "Mysen", + "Måløy", + "Namsos", + "Narvik", + "Notodden", + "Odda", + "Oslo", + "Otta", + "Porsgrunn", + "Ringerike", + "Risør", + "Rjukan", + "Sandefjord", + "Sandnes", + "Sandnessjøen", + "Sandvika", + "Sarpsborg", + "Sauda", + "Ski", + "Skien", + "Skudeneshavn", + "Sortland", + "Stathelle", + "Stavanger", + "Steinkjer", + "Stjørdal", + "Stokmarknes", + "Stord", + "Svelvik", + "Svolvær", + "Tromsø", + "Trondheim", + "Tvedestrand", + "Tønsberg", + "Ulsteinvik", + "Vadsø", + "Vardø", + "Verdalsøra", + "Åkrehamn", + "Ålesund", + "Åndalsnes" +}; + +static const char *name_hungarian_1[] = { + "Nagy-", + "Kis-", + "Felső-", + "Alsó-", + "Új-" +}; + +static const char *name_hungarian_2[] = { + "Bodrog", + "Dráva", + "Duna", + "Hejő", + "Hernád", + "Rába", + "Sajó", + "Szamos", + "Tisza", + "Zala", + "Balaton", + "Fertő", + "Bakony", + "Cserhát", + "Bihar", + "Hajdú", + "Jász", + "Kun", + "Magyar", + "Nógrád", + "Nyír", + "Somogy", + "Székely", + "Buda", + "Győr", + "Pest", + "Fehér", + "Cserép", + "Erdő", + "Hegy", + "Homok", + "Mező", + "Puszta", + "Sár", + "Császár", + "Herceg", + "Király", + "Nemes", + "Püspök", + "Szent", + "Almás", + "Szilvás", + "Agg", + "Aranyos", + "Békés", + "Egyházas", + "Gagy", + "Heves", + "Kapos", + "Tápió", + "Torna", + "Vas", + "Vámos", + "Vásáros" +}; + +static const char *name_hungarian_3[] = { + "apáti", + "bába", + "bikk", + "dob", + "fa", + "föld", + "hegyes", + "kak", + "kereszt", + "kürt", + "ladány", + "mérges", + "szalonta", + "telek", + "vas", + "völgy" +}; + +static const char *name_hungarian_4[] = { + "alja", + "egyháza", + "háza", + "úr", + "vár" +}; + +static const char *name_hungarian_real[] = { + "Ajka", + "Aszód", + "Badacsony", + "Baja", + "Budapest", + "Debrecen", + "Eger", + "Fonyód", + "Gödöllő", + "Győr", + "Gyula", + "Karcag", + "Kecskemét", + "Keszthely", + "Kisköre", + "Kocsord", + "Komárom", + "Kőszeg", + "Makó", + "Mohács", + "Miskolc", + "Ózd", + "Paks", + "Pápa", + "Pécs", + "Polgár", + "Sarkad", + "Siófok", + "Szeged", + "Szentes", + "Szolnok", + "Tihany", + "Tokaj", + "Vác", + "Záhony", + "Zirc" +}; + +static const char *name_swiss_real[] = { + "Aarau", + "Aesch", + "Altdorf", + "Arosa", + "Appenzell", + "Arbon", + "Altstätten", + "Baar", + "Baden", + "Bellinzona", + "Brig-Glis", + "Bienne", + "Bulle", + "Binningen", + "Burgdorf", + "Bern", + "Basel", + "Bülach", + "Carouge", + "Cham", + "Chiasso", + "Chur", + "Davos", + "Delémont", + "Dietikon", + "Dübendorf", + "Emmen", + "Freienbach-Pfäffikon", + "Fribourg", + "Frauenfeld", + "Genève", + "Glarus", + "Gossau", + "Grenchen", + "Herisau", + "Horgen", + "Horw", + "Illnau-Effretikon", + "Ittigen", + "Jona", + "Kriens", + "Kloten", + "Köniz", + "Kreuzlingen", + "Küsnacht", + "Agen", + "Lancy", + "La Chaux-de-Fonds", + "Lenzburg", + "Lugano", + "Langenthal", + "Littau", + "Le Locle", + "La Neuveville", + "Locarno", + "Liestal", + "La Tour-de-Peilz", + "Lausanne", + "Lyss", + "Luzern", + "Martigny", + "Münchenstein", + "Meyrin", + "Montreux", + "Monthey", + "Morges", + "Murten", + "Moutier", + "Muttenz", + "Neuchâtel", + "Neuhausen am Rheinfall", + "Nyon", + "Olten", + "Onex", + "Opfikon", + "Ostermundigen", + "Payerne", + "Peseux", + "Prilly", + "Pully", + "Rapperswil", + "Richterswil", + "Regensdorf", + "Rheinfelden", + "Riehen", + "Renens", + "Romanshorn", + "Rorschach", + "Stans", + "Schaffhausen", + "Steffisburg", + "St. Gallen", + "Schlieren", + "Sierre", + "Solothurn", + "St. Moritz", + "Sion", + "Spiez", + "Stäfa", + "Sursee", + "Schwyz", + "Thalwil", + "Thônex", + "Thun", + "Uster", + "Uzwil", + "Vernier", + "Volketswil", + "Versoix", + "Vevey", + "Wädenswil", + "Wettingen", + "Wil", + "Wallisellen", + "Winterthur", + "Wohlen", + "Worb", + "Wetzikon", + "Yverdon-les-Bains", + "Zollikon", + "Zofingen", + "Zürich", + "Zug", +}; + +static const char *name_danish_1[] = { + "Gamle ", + "Lille ", + "Nye ", + "Store ", + "Kirke ", + "Nørre ", + "Vester ", + "Sønder ", + "Øster ", + "Hvide ", + "Høje ", + "Kongens ", +}; + +static const char *name_danish_2[] = { + "Ager", + "Alle", + "Aske", + "Balle", + "Bede", + "Birke", + "Bjerring", + "Bjæver", + "Blommens", + "Blok", + "Bolder", + "Bred", + "Charlotten", + "Christians", + "Danne", + "Diana", + "Es", + "Fredens", + "Frederiks", + "Fugle", + "Fåre", + "Gille", + "Gis", + "Givs", + "Glams", + "Glo", + "Guld", + "Had", + "Haralds", + "Hassel", + "Hede", + "Helle", + "Hessel", + "Hjorts", + "Hol", + "Horn", + "Humle", + "Høj", + "Hør", + "Is", + "Jyde", + "Jægers", + "Karls", + "Klov", + "Kokke", + "Kvist", + "Lang", + "Lange", + "Mari", + "Nord", + "Ny", + "Oks", + "Ring", + "Røde", + "Rung", + "Rør", + "Rud", + "Saks", + "Salt", + "Skam", + "Silke", + "Skod", + "Skæl", + "Skær", + "Sol", + "Svend", + "Svine", + "Strand", + "Stubbe", + "Ting", + "Tjære", + "Tore", + "Uger", + "Ulf", + "Val", + "Vand", + "Vej", + "Vor", + "Vær", + "Ør", + "Ål" +}; + +static const char *name_danish_3[] = { + "basse", + "borg", + "berg", + "bro", + "by", + "havn", + "strup", + "holm", + "hus", + "købing", + "lund", + "lunde", + "sund", + "ovre", + "høj", + "dal", + "sted", + "sten", + "løse", + "rød", + "magle", + "sø", + "bjerg", + "bæk", + "drup", + "lev", + "bo", + "lyst", + "feld", + "skov" +}; + +static const char *name_turkish_prefix[] = { + "Akça", + "Altın", + "Bahçe", + "Boz", + "Büyük", + "Çay", + "Doğu", + "Eski", + "Güzel", + "Kızıl", + "Küçük", + "Orta", + "Sarı", + "Sultan", + "Ulu", + "Yeni" +}; + +static const char *name_turkish_middle[] = { + "agaç", + "ayva", + "çam", + "elma", + "kurt", + "pazar", + "yalı" +}; + +static const char *name_turkish_suffix[] = { + "dere", + "hisar", + "kale", + "kaya", + "kent", + "köy", + "ova", + "özü", + "ören", + "pazar", + "saray", + "tepe", + "yer", + "yurt" +}; + +static const char *name_turkish_real[] = { + "Adana", + "Adıyaman", + "Afyon", + "Ağrı", + "Amasya", + "Antalya", + "Artvin", + "Balıkesir", + "Bilecik", + "Bitlis", + "Bolu", + "Burdur", + "Bursa", + "Çanakkale", + "Çankırı", + "Denizli", + "Diyarbakır", + "Edirne", + "Elazığ", + "Erzurum", + "Eskisehir", + "Giresun", + "Gümüşhane", + "Hatay", + "Isparta", + "İçel", + "İstanbul", + "İzmir", + "Kars", + "Kastamonu", + "Kayseri", + "Kirklareli", + "Kocaeli", + "Konya", + "Kütahya", + "Malatya", + "Manisa", + "Kahramanmaraş", + "Mardin", + "Muğla", + "Muş", + "Nevşehir", + "Niğde", + "Rize", + "Sakarya", + "Samsun", + "Siirt", + "Sinop", + "Sivas", + "Trabzon", + "Şanlıurfa", + "Van", + "Yozgat", + "Zonguldak", + "Aksaray", + "Bayburt", + "Karaman", + "Şırnak", + "Bartın", + "Ardahan", + "Iğdır", + "Yalova", + "Karabük", + "Osmaniye", + "Düzce" +}; + +static const char *name_italian_real[] = { + "Roma", + "Milano", + "Napoli", + "Torino", + "Venezia", + "Firenze", + "Palermo", + "Genova", + "Parma", + "Bologna", + "Bari", + "Cagliari", + "Sassari", + "Pisa", + "Aosta", + "Brescia", + "Verona", + "Bolzano", + "Padova", + "Udine", + "Trieste", + "Livorno", + "Ancona", + "Perugia", + "Pescara", + "L'Aquila", + "Campobasso", + "Potenza", + "Cosenza", + "Reggio Calabria", + "Catania", + "Caltanisetta", + "Agrigento", + "La Spezia", + "Modena", + "Vicenza", + "Mantova", + "Cremona", + "Piacenza", + "Reggio Emilia", + "Foggia", + "Benevento", + "Salerno", + "Catanzaro", + "Lecce", + "Como", + "Lecco", + "Sondrio", + "Trento", + "Desenzano", + "Cuneo", + "Asti", + "Lodi", + "Novara", + "Biella", + "Vercelli", + "Rieti", + "Nuoro", + "Oristano", + "Matera", + "Taranto", + "Varese", + "Bergamo", + "Pavia", + "Caserta", + "Frosinone", + "Latina", + "Enna", + "Ragusa", + "Siracusa", + "Pordenone", + "Imperia", + "Verbania", + "Alessandria", + "Messina", + "Siena", + "Arezzo", + "Grosseto", +}; + +static const char *name_italian_pref[] = { + "Alpe ", + "Borgo ", + "Cascina ", + "Castel ", + "Fonte ", + "Forte ", + "Malga ", + "Pieve ", + "Poggio ", + "Rocca ", + "Villa ", + "Villar ", +}; + +static const char *name_italian_1m[] = { + "Bel", + "Borgo", + "Bosco", + "Campo", + "Capo", + "Casal", + "Castel", + "Colle", + "Fiume", + "Fonte", + "Lago", + "Mezzo", + "Monte", + "Mon", + "Orto", + "Passo", + "Prato", + "Poggio", + "Ponte", + "Pozzo", + "Sasso", + "Tra", + "Tre", + "Ver", + "Vico", +}; + +static const char *name_italian_1f[] = { + "Acqua", + "Bra", + "Cala", + "Casa", + "Chiesa", + "Citta", + "Civita", + "Corte", + "Costa", + "Croce", + "Fontana", + "Grotta", + "Guardia", + "Mezza", + "Palma", + "Pietra", + "Ripa", + "Rocca", + "Serra", + "Torre", + "Val", + "Valle", + "Villa", +}; + +static const char *name_italian_2[] = { + "bell", + "bianc", + "cald", + "chiar", + "cort", + "ferrat", + "fier", + "fredd", + "gioios", + "grec", + "guzz", + "lung", + "long", + "migli", + "negr", + "ner", + "nov", + "nuov", + "ross", + "rotond", + "scur", + "secc", + "sett", + "vecchi", + "ventos", + "vers", + "viv", +}; + +static const char *name_italian_2i[] = { + "", + "breve", + "brevi", + "chiari", + "ferro", + "fieschi", + "fiore", + "fonte", + "forte", + "gate", + "leone", + "maggiore", + "minore", + "mole", + "monte", + "poli", + "scuri", + "terra", + "te", + "torrione", + "vento", + "verde", + "versiere", +}; + + +static const char *name_italian_3[] = { + " Marittimo", + " Marittima", + " del Capo", + " del Monte", + " di Sopra", + " di Sotto", + " sui Monti", + " dei Marmi", + " dei Sassi", + " delle Fonti", + " sui Prati", + " a Mare", + " Superiore", + " Inferiore", + " Terme", + " Alta", + " Bassa", + " Brianza", + " Vesuviano", + " Scrivia", + " Ticino", +}; + +static const char *name_italian_river1[] = { + " del", + " sul", + " al", + " nel", +}; + +static const char *name_italian_river2[] = { + "l'Adda", + "l'Adige", + "le Alpi", + "l'Arno", + " Bormida", + " Brenta", + "la Dora Baltea", + " Lambro", + " Mincio", + " Naviglio", + "l'Oglio", + "l'Olona", + "l'Ombrone", + " Panaro", + " Piave", + " Po", + " Reno", + " Scrivia", + " Secchia", + " Serio", + " Tagliamento", + " Tanaro", + " Taro", + " Ticino", + " Tevere", +}; + +static const char *name_catalan_real[] = { + "Barcelona", + "Hospitalet", + "Cerdanyola", + "Martorell", + "Badalona", + "Tarragona", + "Lleida", + "Girona", + "Sabadell", + "Terrassa", + "Reus", + "Valls", + "Vic", + "Vielha", + "Amposta", + "Tortosa", + "Berga", + "Olot", + "Mollerussa", + "Banyoles", + "Figueres", + "Balaguer", + "Vilafranca del Penedès", + "La seu d'Urgell", + "Pont de Suert", + "Igualada", + "Manresa", + "Solsona", + "Les borges blanques", + "Tremp", + "Sort", + "Colera", + "Portbou", + "El Vendrell", + "Falset", + "Ripoll", + "Cervera", + "Gandesa", + "Mataró", + "Montblanc", + "Vilanova i la Geltrú", + "Tàrrega", + "Camprodon", + "Campdevànol", + "Cambrils", + "Begur", + "Set Cases", + "Palafrugell", + "Begues", + "El Bruc", + "Cadaqués", + "Collbató", + "Cervelló", + "Esparraguera", + "Abrera", + "Alp", + "Das", + "Cercs", + "Manlleu", + "Masnou", + "Molins de rei", + "Monistrol", + "Rocallaura", + "Rubí", + "Ripollet", + "Sitges", + "Roses", +}; + +static const char *name_catalan_pref[] = { + "Pont de ", + "Parets de ", + "Canet de ", + "Castellar de ", + "Corbera de ", + "Arenys de ", + "Calella de ", + "La seu de ", + "La bisbal de ", + "Torroella de ", + "Port de ", + "Vilafranca de ", + "Vilanova de ", + "Caldes de ", + "La Conca de ", + "Olesa de ", + "La Roca de ", + "Sant Esteve de ", + "Sant Andreu de ", + "Sant Jordi de ", + "Sant Joan de ", + "Sant Feliu de ", + "Sant Quirze de ", + "Sant Sadurní de ", + "Santa Coloma de ", + "Santa Margarida de ", + "Santa Maria de ", + "Sant Martí de ", + "Sant Pere de ", + "Sant Julià de ", + "Sant Vicenç de ", + +}; + +static const char *name_catalan_1m[] = { + "Torrent", + "Cami", + "Mont", + "Bell", + "Puig", + "Riu", +}; + +static const char *name_catalan_1f[] = { + "Aigua", + "Selva ", + "Vall", + "Serra", + "Torre", + "Riba", + "Vall", + "Terra", +}; + +static const char *name_catalan_2m[] = { + "alt", + "baix", + "fosc", + "pelat", + "ventós", + "negre", + "roig", + "gris", +}; + +static const char *name_catalan_2f[] = { + "baixa", + "alta", + "fosca", + "clara", + "negra", + "roja", + "grisa", + "freda", +}; + +static const char *name_catalan_3[] = { + " despí", + " desvern", + " del camí", + " de Mar", + " de Dalt", + " de Baix", + " del Vallès", + " de Berguedà", + " de Conflent", + " de la plana", +}; + +static const char *name_catalan_river1[] = { + " d'Anoia", + " de Ter", + " de Llobregat", + " d'Ebre", + " de Segre", + " de Francolí", +}; diff --git a/src/table/palettes.h b/src/table/palettes.h new file mode 100644 index 000000000..fc931c7c2 --- /dev/null +++ b/src/table/palettes.h @@ -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 +}; diff --git a/src/table/road_land.h b/src/table/road_land.h new file mode 100644 index 000000000..52e013bd9 --- /dev/null +++ b/src/table/road_land.h @@ -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, +}; diff --git a/src/table/roadveh.h b/src/table/roadveh.h new file mode 100644 index 000000000..fa8f18e1f --- /dev/null +++ b/src/table/roadveh.h @@ -0,0 +1,1077 @@ +/* $Id$ */ + +static const RoadDriveEntry _roadveh_drive_data_0[] = { + {15, 5}, + {14, 5}, + {13, 5}, + {12, 5}, + {11, 5}, + {10, 5}, + { 9, 5}, + { 8, 5}, + { 7, 5}, + { 6, 5}, + { 5, 5}, + { 4, 5}, + { 3, 5}, + { 2, 5}, + { 1, 5}, + { 0, 5}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_1[] = { + {5, 0}, + {5, 1}, + {5, 2}, + {5, 3}, + {5, 4}, + {5, 5}, + {5, 6}, + {5, 7}, + {5, 8}, + {5, 9}, + {5, 10}, + {5, 11}, + {5, 12}, + {5, 13}, + {5, 14}, + {5, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_2[] = { + {5, 0}, + {5, 1}, + {5, 2}, + {4, 3}, + {3, 4}, + {2, 5}, + {1, 5}, + {0, 5}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_3[] = { + {15, 5}, + {14, 5}, + {13, 5}, + {12, 5}, + {11, 5}, + {10, 5}, + { 9, 6}, + { 8, 7}, + { 7, 8}, + { 6, 9}, + { 5, 10}, + { 5, 11}, + { 5, 12}, + { 5, 13}, + { 5, 14}, + { 5, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_4[] = { + { 5, 0}, + { 5, 1}, + { 5, 2}, + { 5, 3}, + { 5, 4}, + { 5, 5}, + { 6, 6}, + { 7, 7}, + { 8, 8}, + { 9, 9}, + {10, 9}, + {11, 9}, + {12, 9}, + {13, 9}, + {14, 9}, + {15, 9}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_5[] = { + {0, 9}, + {1, 9}, + {2, 9}, + {3, 10}, + {4, 11}, + {5, 12}, + {5, 13}, + {5, 14}, + {5, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_6[] = { + {0, 6}, + {0, 7}, + {0, 8}, + {0, 9}, + {0x42, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_7[] = { + {6, 15}, + {7, 15}, + {8, 15}, + {9, 15}, + {0x43, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_8[] = { + { 0, 9}, + { 1, 9}, + { 2, 9}, + { 3, 9}, + { 4, 9}, + { 5, 9}, + { 6, 9}, + { 7, 9}, + { 8, 9}, + { 9, 9}, + {10, 9}, + {11, 9}, + {12, 9}, + {13, 9}, + {14, 9}, + {15, 9}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_9[] = { + {9, 15}, + {9, 14}, + {9, 13}, + {9, 12}, + {9, 11}, + {9, 10}, + {9, 9}, + {9, 8}, + {9, 7}, + {9, 6}, + {9, 5}, + {9, 4}, + {9, 3}, + {9, 2}, + {9, 1}, + {9, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_10[] = { + {0, 9}, + {1, 9}, + {2, 9}, + {3, 9}, + {4, 9}, + {5, 9}, + {6, 8}, + {7, 7}, + {8, 6}, + {9, 5}, + {9, 4}, + {9, 3}, + {9, 2}, + {9, 1}, + {9, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_11[] = { + { 9, 15}, + { 9, 14}, + { 9, 13}, + {10, 12}, + {11, 11}, + {12, 10}, + {13, 9}, + {14, 9}, + {15, 9}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_12[] = { + {15, 5}, + {14, 5}, + {13, 5}, + {12, 4}, + {11, 3}, + {10, 2}, + { 9, 1}, + { 9, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_13[] = { + {9, 15}, + {9, 14}, + {9, 13}, + {9, 12}, + {9, 11}, + {9, 10}, + {8, 9}, + {7, 8}, + {6, 7}, + {5, 6}, + {4, 5}, + {3, 5}, + {2, 5}, + {1, 5}, + {0, 5}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_14[] = { + {15, 8}, + {15, 7}, + {15, 6}, + {15, 5}, + {0x40, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_15[] = { + {8, 0}, + {7, 0}, + {6, 0}, + {5, 0}, + {0x41, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_16[] = { + {15, 9}, + {14, 9}, + {13, 9}, + {12, 9}, + {11, 9}, + {10, 9}, + { 9, 9}, + { 8, 9}, + { 7, 9}, + { 6, 9}, + { 5, 9}, + { 4, 9}, + { 3, 9}, + { 2, 9}, + { 1, 9}, + { 0, 9}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_17[] = { + {9, 0}, + {9, 1}, + {9, 2}, + {9, 3}, + {9, 4}, + {9, 5}, + {9, 6}, + {9, 7}, + {9, 8}, + {9, 9}, + {9, 10}, + {9, 11}, + {9, 12}, + {9, 13}, + {9, 14}, + {9, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_18[] = { + {9, 0}, + {9, 1}, + {9, 2}, + {9, 3}, + {9, 4}, + {9, 5}, + {8, 6}, + {7, 7}, + {6, 8}, + {5, 9}, + {4, 9}, + {3, 9}, + {2, 9}, + {1, 9}, + {0, 9}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_19[] = { + {15, 9}, + {14, 9}, + {13, 9}, + {12, 10}, + {11, 11}, + {10, 12}, + { 9, 13}, + { 9, 14}, + { 9, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_20[] = { + { 9, 0}, + { 9, 1}, + {10, 2}, + {11, 3}, + {12, 4}, + {13, 5}, + {14, 5}, + {15, 5}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_21[] = { + {0, 5}, + {1, 5}, + {2, 5}, + {3, 5}, + {4, 5}, + {5, 6}, + {6, 7}, + {7, 8}, + {8, 9}, + {9, 10}, + {9, 11}, + {9, 12}, + {9, 13}, + {9, 14}, + {9, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_22[] = { + {0, 8}, + {0, 7}, + {0, 6}, + {0, 5}, + {0x42, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_23[] = { + {8, 15}, + {7, 15}, + {6, 15}, + {5, 15}, + {0x43, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_24[] = { + { 0, 5}, + { 1, 5}, + { 2, 5}, + { 3, 5}, + { 4, 5}, + { 5, 5}, + { 6, 5}, + { 7, 5}, + { 8, 5}, + { 9, 5}, + {10, 5}, + {11, 5}, + {12, 5}, + {13, 5}, + {14, 5}, + {15, 5}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_25[] = { + {5, 15}, + {5, 14}, + {5, 13}, + {5, 12}, + {5, 11}, + {5, 10}, + {5, 9}, + {5, 8}, + {5, 7}, + {5, 6}, + {5, 5}, + {5, 4}, + {5, 3}, + {5, 2}, + {5, 1}, + {5, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_26[] = { + {0, 5}, + {1, 5}, + {2, 5}, + {3, 4}, + {4, 3}, + {5, 2}, + {5, 1}, + {5, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_27[] = { + { 5, 15}, + { 5, 14}, + { 5, 13}, + { 5, 12}, + { 5, 11}, + { 5, 10}, + { 6, 9}, + { 7, 8}, + { 8, 7}, + { 9, 6}, + {10, 5}, + {11, 5}, + {12, 5}, + {13, 5}, + {14, 5}, + {15, 5}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_28[] = { + {15, 9}, + {14, 9}, + {13, 9}, + {12, 9}, + {11, 9}, + {10, 9}, + { 9, 9}, + { 8, 8}, + { 7, 7}, + { 6, 6}, + { 5, 5}, + { 5, 4}, + { 5, 3}, + { 5, 2}, + { 5, 1}, + { 5, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_29[] = { + {5, 15}, + {5, 14}, + {5, 13}, + {5, 12}, + {4, 11}, + {3, 10}, + {2, 9}, + {1, 9}, + {0, 9}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_30[] = { + {15, 6}, + {15, 7}, + {15, 8}, + {15, 9}, + {0x40, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_31[] = { + {6, 0}, + {7, 0}, + {8, 0}, + {9, 0}, + {0x41, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_32[] = { + {15, 5}, + {14, 5}, + {13, 6}, + {13, 7}, + {13, 8}, + {13, 9}, + {13, 10}, + {13, 11}, + {12, 12}, + {11, 12}, + {10, 12}, + { 9, 12}, + { 8, 12}, + { 7, 12}, + { 6, 12}, + { 5, 11}, + { 5, 10}, + { 5, 9}, + { 5, 8}, + { 5, 7}, + { 5, 6}, + { 5, 7}, + { 5, 8}, + { 5, 9}, + { 5, 10}, + { 5, 11}, + { 6, 12}, + { 7, 12}, + { 8, 12}, + { 9, 12}, + {10, 12}, + {11, 12}, + {12, 12}, + {13, 11}, + {13, 10}, + {14, 9}, + {15, 9}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_33[] = { + { 5, 0}, + { 5, 1}, + { 6, 2}, + { 7, 2}, + { 8, 2}, + { 9, 2}, + {10, 2}, + {11, 2}, + {12, 3}, + {12, 4}, + {12, 5}, + {12, 6}, + {12, 7}, + {12, 8}, + {12, 9}, + {11, 10}, + {10, 10}, + { 9, 10}, + { 8, 10}, + { 7, 10}, + { 6, 10}, + { 7, 10}, + { 8, 10}, + { 9, 10}, + {10, 10}, + {11, 10}, + {12, 9}, + {12, 8}, + {12, 7}, + {12, 6}, + {12, 5}, + {12, 4}, + {12, 3}, + {11, 2}, + {10, 2}, + { 9, 1}, + { 9, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_34[] = { + {15, 5}, + {14, 5}, + {13, 6}, + {13, 7}, + {13, 8}, + {13, 9}, + {13, 10}, + {13, 11}, + {12, 12}, + {11, 12}, + {10, 12}, + { 9, 11}, + { 9, 10}, + { 9, 9}, + { 9, 8}, + { 9, 7}, + { 9, 6}, + { 9, 7}, + { 9, 8}, + { 9, 9}, + { 9, 10}, + { 9, 11}, + {10, 12}, + {11, 12}, + {12, 12}, + {13, 11}, + {13, 10}, + {14, 9}, + {15, 9}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_35[] = { + { 5, 0}, + { 5, 1}, + { 6, 2}, + { 7, 2}, + { 8, 2}, + { 9, 2}, + {10, 2}, + {11, 2}, + {12, 3}, + {12, 4}, + {12, 5}, + {11, 6}, + {10, 6}, + { 9, 6}, + { 8, 6}, + { 7, 6}, + { 6, 6}, + { 7, 6}, + { 8, 6}, + { 9, 6}, + {10, 6}, + {11, 6}, + {12, 5}, + {12, 4}, + {12, 3}, + {11, 2}, + {10, 2}, + { 9, 1}, + { 9, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_40[] = { + { 0, 9}, + { 1, 9}, + { 2, 8}, + { 2, 7}, + { 2, 6}, + { 2, 5}, + { 2, 4}, + { 3, 3}, + { 4, 3}, + { 5, 3}, + { 6, 3}, + { 7, 3}, + { 8, 3}, + { 9, 3}, + {10, 4}, + {10, 5}, + {10, 6}, + {10, 7}, + {10, 8}, + {10, 9}, + {10, 8}, + {10, 7}, + {10, 6}, + {10, 5}, + {10, 4}, + { 9, 3}, + { 8, 3}, + { 7, 3}, + { 6, 3}, + { 5, 3}, + { 4, 3}, + { 3, 3}, + { 2, 4}, + { 1, 5}, + { 0, 5}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_41[] = { + {9, 15}, + {9, 14}, + {8, 13}, + {7, 13}, + {6, 13}, + {5, 13}, + {4, 13}, + {3, 12}, + {3, 11}, + {3, 10}, + {3, 9}, + {3, 8}, + {3, 7}, + {3, 6}, + {4, 5}, + {5, 5}, + {6, 5}, + {7, 5}, + {8, 5}, + {9, 5}, + {8, 5}, + {7, 5}, + {6, 5}, + {5, 5}, + {4, 5}, + {3, 6}, + {3, 7}, + {3, 8}, + {3, 9}, + {3, 10}, + {3, 11}, + {3, 12}, + {4, 13}, + {5, 14}, + {5, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_42[] = { + {0, 9}, + {1, 9}, + {2, 8}, + {2, 7}, + {2, 6}, + {2, 5}, + {2, 4}, + {3, 3}, + {4, 3}, + {5, 3}, + {6, 4}, + {6, 5}, + {6, 6}, + {6, 7}, + {6, 8}, + {6, 9}, + {6, 8}, + {6, 7}, + {6, 6}, + {6, 5}, + {6, 4}, + {5, 3}, + {4, 3}, + {3, 3}, + {2, 4}, + {1, 5}, + {0, 5}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_43[] = { + {9, 15}, + {9, 14}, + {8, 13}, + {7, 13}, + {6, 13}, + {5, 13}, + {4, 13}, + {3, 12}, + {3, 11}, + {3, 10}, + {4, 9}, + {5, 9}, + {6, 9}, + {7, 9}, + {8, 9}, + {9, 9}, + {8, 9}, + {7, 9}, + {6, 9}, + {5, 9}, + {4, 9}, + {3, 10}, + {3, 11}, + {3, 12}, + {4, 13}, + {5, 14}, + {5, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_48[] = { + {15, 9}, + {14, 9}, + {13, 10}, + {13, 11}, + {12, 12}, + {11, 12}, + {10, 12}, + { 9, 12}, + { 8, 12}, + { 7, 12}, + { 6, 12}, + { 5, 11}, + { 5, 10}, + { 5, 9}, + { 5, 8}, + { 5, 7}, + { 5, 6}, + { 5, 7}, + { 5, 8}, + { 5, 9}, + { 5, 10}, + { 5, 11}, + { 6, 12}, + { 7, 12}, + { 8, 12}, + { 9, 12}, + {10, 12}, + {11, 12}, + {12, 12}, + {13, 11}, + {13, 10}, + {13, 9}, + {13, 8}, + {13, 7}, + {13, 6}, + {14, 5}, + {15, 5}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_49[] = { + { 9, 0}, + { 9, 1}, + {10, 2}, + {11, 2}, + {12, 3}, + {12, 4}, + {12, 5}, + {12, 6}, + {12, 7}, + {12, 8}, + {12, 9}, + {11, 10}, + {10, 10}, + { 9, 10}, + { 8, 10}, + { 7, 10}, + { 6, 10}, + { 7, 10}, + { 8, 10}, + { 9, 10}, + {10, 10}, + {11, 10}, + {12, 9}, + {12, 8}, + {12, 7}, + {12, 6}, + {12, 5}, + {12, 4}, + {12, 3}, + {11, 2}, + {10, 2}, + { 9, 2}, + { 8, 2}, + { 7, 2}, + { 6, 2}, + { 5, 1}, + { 5, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_50[] = { + {15, 9}, + {14, 9}, + {13, 10}, + {13, 11}, + {12, 12}, + {11, 12}, + {10, 12}, + { 9, 11}, + { 9, 10}, + { 9, 9}, + { 9, 8}, + { 9, 7}, + { 9, 6}, + { 9, 7}, + { 9, 8}, + { 9, 9}, + { 9, 10}, + { 9, 11}, + {10, 12}, + {11, 12}, + {12, 12}, + {13, 11}, + {13, 10}, + {13, 9}, + {13, 8}, + {13, 7}, + {13, 6}, + {14, 5}, + {15, 5}, + {0x82, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_51[] = { + { 9, 0}, + { 9, 1}, + {10, 2}, + {11, 2}, + {12, 3}, + {12, 4}, + {12, 5}, + {11, 6}, + {10, 6}, + { 9, 6}, + { 8, 6}, + { 7, 6}, + { 6, 6}, + { 7, 6}, + { 8, 6}, + { 9, 6}, + {10, 6}, + {11, 6}, + {12, 5}, + {12, 4}, + {12, 3}, + {11, 2}, + {10, 2}, + { 9, 2}, + { 8, 2}, + { 7, 2}, + { 6, 2}, + { 5, 1}, + { 5, 0}, + {0x83, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_56[] = { + { 0, 5}, + { 1, 5}, + { 2, 4}, + { 3, 3}, + { 4, 3}, + { 5, 3}, + { 6, 3}, + { 7, 3}, + { 8, 3}, + { 9, 3}, + {10, 4}, + {10, 5}, + {10, 6}, + {10, 7}, + {10, 8}, + {10, 9}, + {10, 8}, + {10, 7}, + {10, 6}, + {10, 5}, + {10, 4}, + { 9, 3}, + { 8, 3}, + { 7, 3}, + { 6, 3}, + { 5, 3}, + { 4, 3}, + { 3, 3}, + { 2, 4}, + { 2, 5}, + { 2, 6}, + { 2, 7}, + { 2, 8}, + { 1, 9}, + { 0, 9}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_57[] = { + {5, 15}, + {5, 14}, + {4, 13}, + {3, 12}, + {3, 11}, + {3, 10}, + {3, 9}, + {3, 8}, + {3, 7}, + {3, 6}, + {4, 5}, + {5, 5}, + {6, 5}, + {7, 5}, + {8, 5}, + {9, 5}, + {8, 5}, + {7, 5}, + {6, 5}, + {5, 5}, + {4, 5}, + {3, 6}, + {3, 7}, + {3, 8}, + {3, 9}, + {3, 10}, + {3, 11}, + {3, 12}, + {4, 13}, + {5, 13}, + {6, 13}, + {7, 13}, + {8, 13}, + {9, 14}, + {9, 15}, + {0x81, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_58[] = { + {0, 5}, + {1, 5}, + {2, 4}, + {3, 3}, + {4, 3}, + {5, 3}, + {6, 4}, + {6, 5}, + {6, 6}, + {6, 7}, + {6, 8}, + {6, 9}, + {6, 8}, + {6, 7}, + {6, 6}, + {6, 5}, + {6, 4}, + {5, 3}, + {4, 3}, + {3, 3}, + {2, 4}, + {2, 5}, + {2, 6}, + {2, 7}, + {2, 8}, + {1, 9}, + {0, 9}, + {0x80, 0} +}; +static const RoadDriveEntry _roadveh_drive_data_59[] = { + {5, 15}, + {5, 14}, + {4, 13}, + {3, 12}, + {3, 11}, + {3, 10}, + {4, 9}, + {5, 9}, + {6, 9}, + {7, 9}, + {8, 9}, + {9, 9}, + {8, 9}, + {7, 9}, + {6, 9}, + {5, 9}, + {4, 9}, + {3, 10}, + {3, 11}, + {3, 12}, + {4, 13}, + {5, 13}, + {6, 13}, + {7, 13}, + {8, 13}, + {9, 14}, + {9, 15}, + {0x81, 0} +}; + +static const RoadDriveEntry * const _road_drive_data[] = { + _roadveh_drive_data_0, + _roadveh_drive_data_1, + _roadveh_drive_data_2, + _roadveh_drive_data_3, + _roadveh_drive_data_4, + _roadveh_drive_data_5, + _roadveh_drive_data_6, + _roadveh_drive_data_7, + _roadveh_drive_data_8, + _roadveh_drive_data_9, + _roadveh_drive_data_10, + _roadveh_drive_data_11, + _roadveh_drive_data_12, + _roadveh_drive_data_13, + _roadveh_drive_data_14, + _roadveh_drive_data_15, + _roadveh_drive_data_16, + _roadveh_drive_data_17, + _roadveh_drive_data_18, + _roadveh_drive_data_19, + _roadveh_drive_data_20, + _roadveh_drive_data_21, + _roadveh_drive_data_22, + _roadveh_drive_data_23, + _roadveh_drive_data_24, + _roadveh_drive_data_25, + _roadveh_drive_data_26, + _roadveh_drive_data_27, + _roadveh_drive_data_28, + _roadveh_drive_data_29, + _roadveh_drive_data_30, + _roadveh_drive_data_31, + _roadveh_drive_data_32, + _roadveh_drive_data_33, + _roadveh_drive_data_34, + _roadveh_drive_data_35, + NULL, + NULL, + NULL, + NULL, + _roadveh_drive_data_40, + _roadveh_drive_data_41, + _roadveh_drive_data_42, + _roadveh_drive_data_43, + NULL, + NULL, + NULL, + NULL, + _roadveh_drive_data_48, + _roadveh_drive_data_49, + _roadveh_drive_data_50, + _roadveh_drive_data_51, + NULL, + NULL, + NULL, + NULL, + _roadveh_drive_data_56, + _roadveh_drive_data_57, + _roadveh_drive_data_58, + _roadveh_drive_data_59, + NULL, + NULL, + NULL, + NULL, +}; diff --git a/src/table/sprites.h b/src/table/sprites.h new file mode 100644 index 000000000..071c5ddfb --- /dev/null +++ b/src/table/sprites.h @@ -0,0 +1,1397 @@ +/* $Id$ */ + +#ifndef SPRITES_H +#define SPRITES_H + +/** @file sprites.h + * This file contails all sprite-related enums and defines. These consist mainly of + * the sprite numbers and a bunch of masks and macros to handle sprites and to get + * rid of all the magic numbers in the code. + * + * @NOTE: + * ALL SPRITE NUMBERS BELOW 5126 are in the main files + * SPR_CANALS_BASE is in canalsw.grf + * SPR_SLOPES_BASE is in trkfoundw.grf + * SPR_OPENTTD_BASE is in openttd.grf + * + * All elements which consist of two elements should + * have the same name and then suffixes + * _GROUND and _BUILD for building-type sprites + * _REAR and _FRONT for transport-type sprites (tiles where vehicles are on) + * These sprites are split because of the Z order of the elements + * (like some parts of a bridge are behind the vehicle, while others are before) + * + * + * All sprites which are described here are referenced only one to a handful of times + * throughout the code. When introducing new sprite enums, use meaningful names. + * Don't be lazy and typing, and only use abbrevations when their meaning is clear or + * the length of the enum would get out of hand. In that case EXPLAIN THE ABBREVATION + * IN THIS FILE, and perhaps add some comments in the code where it is used. + * Now, don't whine about this being too much typing work if the enums are like + * 30 characters in length. If your editor doen't help you simplifying your work, + * get a proper editor. If your Operating Systems don't have any decent editors, + * get a proper Operating System. + * + * @todo Split the "Sprites" enum into smaller chunks and document them + */ + + +enum Sprites { + SPR_SELECT_TILE = 752, + SPR_DOT = 774, // corner marker for lower/raise land + SPR_DOT_SMALL = 4078, + SPR_WHITE_POINT = 4079, + + /* ASCII */ + SPR_ASCII_SPACE = 2, + SPR_ASCII_SPACE_SMALL = 226, + SPR_ASCII_SPACE_BIG = 450, + + /* Extra graphic spritenumbers */ + OPENTTD_SPRITES_COUNT = 116, // number of gfx-sprites in openttd.grf + SPR_SIGNALS_BASE = 4896, + SPR_CANALS_BASE = SPR_SIGNALS_BASE + 486, + SPR_SLOPES_BASE = SPR_CANALS_BASE + 70, + SPR_AUTORAIL_BASE = SPR_SLOPES_BASE + 78, + SPR_ELRAIL_BASE = SPR_AUTORAIL_BASE + 55, + SPR_2CCMAP_BASE = SPR_ELRAIL_BASE + 53, + SPR_OPENTTD_BASE = SPR_2CCMAP_BASE + 256, + + SPR_BLOT = SPR_OPENTTD_BASE + 29, // colored circle (mainly used as vehicle profit marker and for sever compatibility) + + SPR_PIN_UP = SPR_OPENTTD_BASE + 55, // pin icon + SPR_PIN_DOWN = SPR_OPENTTD_BASE + 56, + SPR_BOX_EMPTY = SPR_OPENTTD_BASE + 59, + SPR_BOX_CHECKED = SPR_OPENTTD_BASE + 60, + SPR_WINDOW_RESIZE = SPR_OPENTTD_BASE + 87, // resize icon + SPR_HOUSE_ICON = SPR_OPENTTD_BASE + 94, + // arrow icons pointing in all 4 directions + SPR_ARROW_DOWN = SPR_OPENTTD_BASE + 88, + SPR_ARROW_UP = SPR_OPENTTD_BASE + 89, + SPR_ARROW_LEFT = SPR_OPENTTD_BASE + 90, + SPR_ARROW_RIGHT = SPR_OPENTTD_BASE + 91, + + SPR_LARGE_SMALL_WINDOW = 682, + + /* Clone vehicles stuff */ + SPR_CLONE_TRAIN = SPR_OPENTTD_BASE + 92, + SPR_CLONE_ROADVEH = SPR_OPENTTD_BASE + 109, + SPR_CLONE_SHIP = SPR_OPENTTD_BASE + 111, + SPR_CLONE_AIRCRAFT = SPR_OPENTTD_BASE + 113, + + SPR_SELL_TRAIN = SPR_OPENTTD_BASE + 96, + SPR_SELL_ROADVEH = SPR_OPENTTD_BASE + 97, + SPR_SELL_SHIP = SPR_OPENTTD_BASE + 98, + SPR_SELL_AIRCRAFT = SPR_OPENTTD_BASE + 99, + SPR_SELL_ALL_TRAIN = SPR_OPENTTD_BASE + 100, + SPR_SELL_ALL_ROADVEH = SPR_OPENTTD_BASE + 101, + SPR_SELL_ALL_SHIP = SPR_OPENTTD_BASE + 102, + SPR_SELL_ALL_AIRCRAFT = SPR_OPENTTD_BASE + 103, + SPR_REPLACE_TRAIN = SPR_OPENTTD_BASE + 104, + SPR_REPLACE_ROADVEH = SPR_OPENTTD_BASE + 105, + SPR_REPLACE_SHIP = SPR_OPENTTD_BASE + 106, + SPR_REPLACE_AIRCRAFT = SPR_OPENTTD_BASE + 107, + SPR_SELL_CHAIN_TRAIN = SPR_OPENTTD_BASE + 108, + + SPR_SHARED_ORDERS_ICON = SPR_OPENTTD_BASE + 115, + + /* Network GUI sprites */ + SPR_SQUARE = SPR_OPENTTD_BASE + 20, // colored square (used for newgrf compatibility) + SPR_LOCK = SPR_OPENTTD_BASE + 19, // lock icon (for password protected servers) + SPR_FLAGS_BASE = SPR_OPENTTD_BASE + 83, // start of the flags block (in same order as enum NetworkLanguage) + + SPR_AIRPORTX_BASE = SPR_OPENTTD_BASE + OPENTTD_SPRITES_COUNT, // The sprites used for other airport angles + SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE, + SPR_NSRUNWAY1 = SPR_AIRPORTX_BASE + 1, + SPR_NSRUNWAY2 = SPR_AIRPORTX_BASE + 2, + SPR_NSRUNWAY3 = SPR_AIRPORTX_BASE + 3, + SPR_NSRUNWAY4 = SPR_AIRPORTX_BASE + 4, + SPR_NSRUNWAY_END = SPR_AIRPORTX_BASE + 5, + SPR_NEWHANGAR_S = SPR_AIRPORTX_BASE + 6, + SPR_NEWHANGAR_S_WALL = SPR_AIRPORTX_BASE + 7, + SPR_NEWHANGAR_W = SPR_AIRPORTX_BASE + 8, + SPR_NEWHANGAR_W_WALL = SPR_AIRPORTX_BASE + 9, + SPR_NEWHANGAR_N = SPR_AIRPORTX_BASE + 10, + SPR_NEWHANGAR_E = SPR_AIRPORTX_BASE + 11, + SPR_NEWHELIPAD = SPR_AIRPORTX_BASE + 12, + SPR_GRASS_RIGHT = SPR_AIRPORTX_BASE + 13, + SPR_GRASS_LEFT = SPR_AIRPORTX_BASE + 14, + + /* Manager face sprites */ + SPR_GRADIENT = 874, // background gradient behind manager face + + /* is itself no foundation sprite, because tileh 0 has no foundation */ + SPR_FOUNDATION_BASE = 989, + + /* Shadow cell */ + SPR_SHADOW_CELL = 1004, + + /* Sliced view shadow cells */ + /* Maybe we have different ones in the future */ + SPR_MAX_SLICE = SPR_OPENTTD_BASE + 64, + SPR_MIN_SLICE = SPR_OPENTTD_BASE + 64, + + /* Unmovables spritenumbers */ + SPR_UNMOVABLE_TRANSMITTER = 2601, + SPR_UNMOVABLE_LIGHTHOUSE = 2602, + SPR_TINYHQ_NORTH = 2603, + SPR_TINYHQ_EAST = 2604, + SPR_TINYHQ_WEST = 2605, + SPR_TINYHQ_SOUTH = 2606, + SPR_SMALLHQ_NORTH = 2607, + SPR_SMALLHQ_EAST = 2608, + SPR_SMALLHQ_WEST = 2609, + SPR_SMALLHQ_SOUTH = 2610, + SPR_MEDIUMHQ_NORTH = 2611, + SPR_MEDIUMHQ_NORTH_WALL = 2612, + SPR_MEDIUMHQ_EAST = 2613, + SPR_MEDIUMHQ_EAST_WALL = 2614, + SPR_MEDIUMHQ_WEST = 2615, + SPR_MEDIUMHQ_WEST_WALL = 2616, //very tiny piece of wall + SPR_MEDIUMHQ_SOUTH = 2617, + SPR_LARGEHQ_NORTH_GROUND = 2618, + SPR_LARGEHQ_NORTH_BUILD = 2619, + SPR_LARGEHQ_EAST_GROUND = 2620, + SPR_LARGEHQ_EAST_BUILD = 2621, + SPR_LARGEHQ_WEST_GROUND = 2622, + SPR_LARGEHQ_WEST_BUILD = 2623, + SPR_LARGEHQ_SOUTH = 2624, + SPR_HUGEHQ_NORTH_GROUND = 2625, + SPR_HUGEHQ_NORTH_BUILD = 2626, + SPR_HUGEHQ_EAST_GROUND = 2627, + SPR_HUGEHQ_EAST_BUILD = 2628, + SPR_HUGEHQ_WEST_GROUND = 2629, + SPR_HUGEHQ_WEST_BUILD = 2630, + SPR_HUGEHQ_SOUTH = 2631, + SPR_CONCRETE_GROUND = 1420, + SPR_STATUE_COMPANY = 2632, + SPR_BOUGHT_LAND = 4790, + + /* sprites for rail and rail stations*/ + SPR_RAIL_SNOW_OFFSET = 26, + SPR_MONO_SNOW_OFFSET = 26, + SPR_MGLV_SNOW_OFFSET = 26, + + SPR_RAIL_SINGLE_Y = 1005, + SPR_RAIL_SINGLE_X = 1006, + SPR_RAIL_SINGLE_NORTH = 1007, + SPR_RAIL_SINGLE_SOUTH = 1008, + SPR_RAIL_SINGLE_EAST = 1009, + SPR_RAIL_SINGLE_WEST = 1010, + SPR_RAIL_TRACK_Y = 1011, + SPR_RAIL_TRACK_X = 1012, + SPR_RAIL_TRACK_BASE = 1018, + SPR_RAIL_TRACK_N_S = 1035, + SPR_RAIL_TRACK_Y_SNOW = 1037, + SPR_RAIL_TRACK_X_SNOW = 1038, + SPR_RAIL_DEPOT_SE_1 = 1063, + SPR_RAIL_DEPOT_SE_2 = 1064, + SPR_RAIL_DEPOT_SW_1 = 1065, + SPR_RAIL_DEPOT_SW_2 = 1066, + SPR_RAIL_DEPOT_NE = 1067, + SPR_RAIL_DEPOT_NW = 1068, + SPR_RAIL_PLATFORM_Y_FRONT = 1069, + SPR_RAIL_PLATFORM_X_REAR = 1070, + SPR_RAIL_PLATFORM_Y_REAR = 1071, + SPR_RAIL_PLATFORM_X_FRONT = 1072, + SPR_RAIL_PLATFORM_BUILDING_X = 1073, + SPR_RAIL_PLATFORM_BUILDING_Y = 1074, + SPR_RAIL_PLATFORM_PILLARS_Y_FRONT = 1075, + SPR_RAIL_PLATFORM_PILLARS_X_REAR = 1076, + SPR_RAIL_PLATFORM_PILLARS_Y_REAR = 1077, + SPR_RAIL_PLATFORM_PILLARS_X_FRONT = 1078, + SPR_RAIL_ROOF_STRUCTURE_X_TILE_A = 1079, //First half of the roof structure + SPR_RAIL_ROOF_STRUCTURE_Y_TILE_A = 1080, + SPR_RAIL_ROOF_STRUCTURE_X_TILE_B = 1081, //Second half of the roof structure + SPR_RAIL_ROOF_STRUCTURE_Y_TILE_B = 1082, + SPR_RAIL_ROOF_GLASS_X_TILE_A = 1083, //First half of the roof glass + SPR_RAIL_ROOF_GLASS_Y_TILE_A = 1084, + SPR_RAIL_ROOF_GLASS_X_TILE_B = 1085, //second half of the roof glass + SPR_RAIL_ROOF_GLASS_Y_TILE_B = 1086, + SPR_MONO_SINGLE_Y = 1087, + SPR_MONO_SINGLE_X = 1088, + SPR_MONO_SINGLE_NORTH = 1089, + SPR_MONO_SINGLE_SOUTH = 1090, + SPR_MONO_SINGLE_EAST = 1091, + SPR_MONO_SINGLE_WEST = 1092, + SPR_MONO_TRACK_Y = 1093, + SPR_MONO_TRACK_BASE = 1100, + SPR_MONO_TRACK_N_S = 1117, + SPR_MGLV_SINGLE_Y = 1169, + SPR_MGLV_SINGLE_X = 1170, + SPR_MGLV_SINGLE_NORTH = 1171, + SPR_MGLV_SINGLE_SOUTH = 1172, + SPR_MGLV_SINGLE_EAST = 1173, + SPR_MGLV_SINGLE_WEST = 1174, + SPR_MGLV_TRACK_Y = 1175, + SPR_MGLV_TRACK_BASE = 1182, + SPR_MGLV_TRACK_N_S = 1199, + SPR_WAYPOINT_X_1 = SPR_OPENTTD_BASE + 15, + SPR_WAYPOINT_X_2 = SPR_OPENTTD_BASE + 16, + SPR_WAYPOINT_Y_1 = SPR_OPENTTD_BASE + 17, + SPR_WAYPOINT_Y_2 = SPR_OPENTTD_BASE + 18, + OFFSET_TILEH_IMPOSSIBLE = 0, + OFFSET_TILEH_1 = 14, + OFFSET_TILEH_2 = 15, + OFFSET_TILEH_3 = 22, + OFFSET_TILEH_4 = 13, + OFFSET_TILEH_6 = 21, + OFFSET_TILEH_7 = 17, + OFFSET_TILEH_8 = 12, + OFFSET_TILEH_9 = 23, + OFFSET_TILEH_11 = 18, + OFFSET_TILEH_12 = 20, + OFFSET_TILEH_13 = 19, + OFFSET_TILEH_14 = 16, + + /* Elrail stuff */ + /* Wires. First identifier is the direction of the track, second is the required placement of the pylon. + * "short" denotes a wire that requires a pylon on each end. Third identifier is the direction of the slope + * (in positive coordinate direction) */ + SPR_WIRE_X_SHORT = SPR_ELRAIL_BASE + 3, + SPR_WIRE_Y_SHORT = SPR_ELRAIL_BASE + 4, + SPR_WIRE_EW_SHORT = SPR_ELRAIL_BASE + 5, + SPR_WIRE_NS_SHORT = SPR_ELRAIL_BASE + 6, + SPR_WIRE_X_SHORT_DOWN = SPR_ELRAIL_BASE + 7, + SPR_WIRE_Y_SHORT_UP = SPR_ELRAIL_BASE + 8, + SPR_WIRE_X_SHORT_UP = SPR_ELRAIL_BASE + 9, + SPR_WIRE_Y_SHORT_DOWN = SPR_ELRAIL_BASE + 10, + + SPR_WIRE_X_SW = SPR_ELRAIL_BASE + 11, + SPR_WIRE_Y_SE = SPR_ELRAIL_BASE + 12, + SPR_WIRE_EW_E = SPR_ELRAIL_BASE + 13, + SPR_WIRE_NS_S = SPR_ELRAIL_BASE + 14, + SPR_WIRE_X_SW_DOWN = SPR_ELRAIL_BASE + 15, + SPR_WIRE_Y_SE_UP = SPR_ELRAIL_BASE + 16, + SPR_WIRE_X_SW_UP = SPR_ELRAIL_BASE + 17, + SPR_WIRE_Y_SE_DOWN = SPR_ELRAIL_BASE + 18, + + SPR_WIRE_X_NE = SPR_ELRAIL_BASE + 19, + SPR_WIRE_Y_NW = SPR_ELRAIL_BASE + 20, + SPR_WIRE_EW_W = SPR_ELRAIL_BASE + 21, + SPR_WIRE_NS_N = SPR_ELRAIL_BASE + 22, + SPR_WIRE_X_NE_DOWN = SPR_ELRAIL_BASE + 23, + SPR_WIRE_Y_NW_UP = SPR_ELRAIL_BASE + 24, + SPR_WIRE_X_NE_UP = SPR_ELRAIL_BASE + 25, + SPR_WIRE_Y_NW_DOWN = SPR_ELRAIL_BASE + 26, + + /* Tunnel entries */ + SPR_WIRE_DEPOT_SW = SPR_ELRAIL_BASE + 27, + SPR_WIRE_DEPOT_NW = SPR_ELRAIL_BASE + 28, + SPR_WIRE_DEPOT_NE = SPR_ELRAIL_BASE + 29, + SPR_WIRE_DEPOT_SE = SPR_ELRAIL_BASE + 30, + + + /* Pylons, first identifier is the direction of the track, second the placement relative to the track */ + SPR_PYLON_Y_NE = SPR_ELRAIL_BASE + 31, + SPR_PYLON_Y_SW = SPR_ELRAIL_BASE + 32, + SPR_PYLON_X_NW = SPR_ELRAIL_BASE + 33, + SPR_PYLON_X_SE = SPR_ELRAIL_BASE + 34, + SPR_PYLON_EW_N = SPR_ELRAIL_BASE + 35, + SPR_PYLON_EW_S = SPR_ELRAIL_BASE + 36, + SPR_PYLON_NS_W = SPR_ELRAIL_BASE + 37, + SPR_PYLON_NS_E = SPR_ELRAIL_BASE + 38, + + /* sprites for airports and airfields*/ + /* Small airports are AIRFIELD, everything else is AIRPORT */ + SPR_HELIPORT = 2633, + SPR_AIRPORT_APRON = 2634, + SPR_AIRPORT_AIRCRAFT_STAND = 2635, + SPR_AIRPORT_TAXIWAY_NS_WEST = 2636, + SPR_AIRPORT_TAXIWAY_EW_SOUTH = 2637, + SPR_AIRPORT_TAXIWAY_XING_SOUTH = 2638, + SPR_AIRPORT_TAXIWAY_XING_WEST = 2639, + SPR_AIRPORT_TAXIWAY_NS_CTR = 2640, + SPR_AIRPORT_TAXIWAY_XING_EAST = 2641, + SPR_AIRPORT_TAXIWAY_NS_EAST = 2642, + SPR_AIRPORT_TAXIWAY_EW_NORTH = 2643, + SPR_AIRPORT_TAXIWAY_EW_CTR = 2644, + SPR_AIRPORT_RUNWAY_EXIT_A = 2645, + SPR_AIRPORT_RUNWAY_EXIT_B = 2646, + SPR_AIRPORT_RUNWAY_EXIT_C = 2647, + SPR_AIRPORT_RUNWAY_EXIT_D = 2648, + SPR_AIRPORT_RUNWAY_END = 2649, //We should have different ends + SPR_AIRPORT_TERMINAL_A = 2650, + SPR_AIRPORT_TOWER = 2651, + SPR_AIRPORT_CONCOURSE = 2652, + SPR_AIRPORT_TERMINAL_B = 2653, + SPR_AIRPORT_TERMINAL_C = 2654, + SPR_AIRPORT_HANGAR_FRONT = 2655, + SPR_AIRPORT_HANGAR_REAR = 2656, + SPR_AIRFIELD_HANGAR_FRONT = 2657, + SPR_AIRFIELD_HANGAR_REAR = 2658, + SPR_AIRPORT_JETWAY_1 = 2659, + SPR_AIRPORT_JETWAY_2 = 2660, + SPR_AIRPORT_JETWAY_3 = 2661, + SPR_AIRPORT_PASSENGER_TUNNEL = 2662, + SPR_AIRPORT_FENCE_Y = 2663, + SPR_AIRPORT_FENCE_X = 2664, + SPR_AIRFIELD_TERM_A = 2665, + SPR_AIRFIELD_TERM_B = 2666, + SPR_AIRFIELD_TERM_C_GROUND = 2667, + SPR_AIRFIELD_TERM_C_BUILD = 2668, + SPR_AIRFIELD_APRON_A = 2669, + SPR_AIRFIELD_APRON_B = 2670, + SPR_AIRFIELD_APRON_C = 2671, + SPR_AIRFIELD_APRON_D = 2672, + SPR_AIRFIELD_RUNWAY_NEAR_END = 2673, + SPR_AIRFIELD_RUNWAY_MIDDLE = 2674, + SPR_AIRFIELD_RUNWAY_FAR_END = 2675, + SPR_AIRFIELD_WIND_1 = 2676, + SPR_AIRFIELD_WIND_2 = 2677, + SPR_AIRFIELD_WIND_3 = 2678, + SPR_AIRFIELD_WIND_4 = 2679, + SPR_AIRPORT_RADAR_1 = 2680, + SPR_AIRPORT_RADAR_2 = 2681, + SPR_AIRPORT_RADAR_3 = 2682, + SPR_AIRPORT_RADAR_4 = 2683, + SPR_AIRPORT_RADAR_5 = 2684, + SPR_AIRPORT_RADAR_6 = 2685, + SPR_AIRPORT_RADAR_7 = 2686, + SPR_AIRPORT_RADAR_8 = 2687, + SPR_AIRPORT_RADAR_9 = 2688, + SPR_AIRPORT_RADAR_A = 2689, + SPR_AIRPORT_RADAR_B = 2690, + SPR_AIRPORT_RADAR_C = 2691, + SPR_AIRPORT_HELIPAD = SPR_OPENTTD_BASE + 28, + SPR_AIRPORT_HELIDEPOT_OFFICE = 2095, + + /* Road Stops */ + /* Road stops have a ground tile and 3 buildings, one on each side + * (except the side where the entry is). These are marked _A _B and _C */ + SPR_BUS_STOP_NE_GROUND = 2692, + SPR_BUS_STOP_SE_GROUND = 2693, + SPR_BUS_STOP_SW_GROUND = 2694, + SPR_BUS_STOP_NW_GROUND = 2695, + SPR_BUS_STOP_NE_BUILD_A = 2696, + SPR_BUS_STOP_SE_BUILD_A = 2697, + SPR_BUS_STOP_SW_BUILD_A = 2698, + SPR_BUS_STOP_NW_BUILD_A = 2699, + SPR_BUS_STOP_NE_BUILD_B = 2700, + SPR_BUS_STOP_SE_BUILD_B = 2701, + SPR_BUS_STOP_SW_BUILD_B = 2702, + SPR_BUS_STOP_NW_BUILD_B = 2703, + SPR_BUS_STOP_NE_BUILD_C = 2704, + SPR_BUS_STOP_SE_BUILD_C = 2705, + SPR_BUS_STOP_SW_BUILD_C = 2706, + SPR_BUS_STOP_NW_BUILD_C = 2707, + SPR_TRUCK_STOP_NE_GROUND = 2708, + SPR_TRUCK_STOP_SE_GROUND = 2709, + SPR_TRUCK_STOP_SW_GROUND = 2710, + SPR_TRUCK_STOP_NW_GROUND = 2711, + SPR_TRUCK_STOP_NE_BUILD_A = 2712, + SPR_TRUCK_STOP_SE_BUILD_A = 2713, + SPR_TRUCK_STOP_SW_BUILD_A = 2714, + SPR_TRUCK_STOP_NW_BUILD_A = 2715, + SPR_TRUCK_STOP_NE_BUILD_B = 2716, + SPR_TRUCK_STOP_SE_BUILD_B = 2717, + SPR_TRUCK_STOP_SW_BUILD_B = 2718, + SPR_TRUCK_STOP_NW_BUILD_B = 2719, + SPR_TRUCK_STOP_NE_BUILD_C = 2720, + SPR_TRUCK_STOP_SE_BUILD_C = 2721, + SPR_TRUCK_STOP_SW_BUILD_C = 2722, + SPR_TRUCK_STOP_NW_BUILD_C = 2723, + + /* Sprites for docks */ + /* Docks consist of two tiles, the sloped one and the flat one */ + SPR_DOCK_SLOPE_NE = 2727, + SPR_DOCK_SLOPE_SE = 2728, + SPR_DOCK_SLOPE_SW = 2729, + SPR_DOCK_SLOPE_NW = 2730, + SPR_DOCK_FLAT_X = 2731, //for NE and SW + SPR_DOCK_FLAT_Y = 2732, //for NW and SE + SPR_BUOY = 4076, //XXX this sucks, because it displays wrong stuff on canals + + /* Sprites for road */ + SPR_ROAD_Y = 1332, + SPR_ROAD_X = 1333, + SPR_ROAD_Y_SNOW = 1351, + SPR_ROAD_X_SNOW = 1352, + + SPR_EXCAVATION_X = 1414, + SPR_EXCAVATION_Y = 1415, + + /* Landscape sprites */ + SPR_FLAT_BARE_LAND = 3924, + SPR_FLAT_1_THIRD_GRASS_TILE = 3943, + SPR_FLAT_2_THIRD_GRASS_TILE = 3962, + SPR_FLAT_GRASS_TILE = 3981, + SPR_FLAT_ROUGH_LAND = 4000, + SPR_FLAT_ROUGH_LAND_1 = 4019, + SPR_FLAT_ROUGH_LAND_2 = 4020, + SPR_FLAT_ROUGH_LAND_3 = 4021, + SPR_FLAT_ROUGH_LAND_4 = 4022, + SPR_FLAT_ROCKY_LAND_1 = 4023, + SPR_FLAT_ROCKY_LAND_2 = 4042, + SPR_FLAT_WATER_TILE = 4061, + SPR_FLAT_1_QUART_SNOWY_TILE = 4493, + SPR_FLAT_2_QUART_SNOWY_TILE = 4512, + SPR_FLAT_3_QUART_SNOWY_TILE = 4531, + SPR_FLAT_SNOWY_TILE = 4550, + + /* Hedge, Farmland-fence sprites */ + SPR_HEDGE_BUSHES = 4090, + SPR_HEDGE_BUSHES_WITH_GATE = 4096, + SPR_HEDGE_FENCE = 4102, + SPR_HEDGE_BLOOMBUSH_YELLOW = 4108, + SPR_HEDGE_BLOOMBUSH_RED = 4114, + SPR_HEDGE_STONE = 4120, + + /* Farmland sprites, only flat tiles listed, various stages */ + SPR_FARMLAND_BARE = 4126, + SPR_FARMLAND_STATE_1 = 4145, + SPR_FARMLAND_STATE_2 = 4164, + SPR_FARMLAND_STATE_3 = 4183, + SPR_FARMLAND_STATE_4 = 4202, + SPR_FARMLAND_STATE_5 = 4221, + SPR_FARMLAND_STATE_6 = 4240, + SPR_FARMLAND_STATE_7 = 4259, + SPR_FARMLAND_HAYPACKS = 4278, + + /* Shores */ + SPR_NO_SHORE = 0, //used for tileh which have no shore + SPR_SHORE_TILEH_4 = 4062, + SPR_SHORE_TILEH_1 = 4063, + SPR_SHORE_TILEH_2 = 4064, + SPR_SHORE_TILEH_8 = 4065, + SPR_SHORE_TILEH_6 = 4066, + SPR_SHORE_TILEH_12 = 4067, + SPR_SHORE_TILEH_3 = 4068, + SPR_SHORE_TILEH_9 = 4069, + + /* Water-related sprites */ + SPR_SHIP_DEPOT_SE_FRONT = 4070, + SPR_SHIP_DEPOT_SW_FRONT = 4071, + SPR_SHIP_DEPOT_NW = 4072, + SPR_SHIP_DEPOT_NE = 4073, + SPR_SHIP_DEPOT_SE_REAR = 4074, + SPR_SHIP_DEPOT_SW_REAR = 4075, + //here come sloped water sprites + SPR_WATER_SLOPE_Y_UP = SPR_CANALS_BASE + 5, //Water flowing negative Y direction + SPR_WATER_SLOPE_X_DOWN = SPR_CANALS_BASE + 6, //positive X + SPR_WATER_SLOPE_X_UP = SPR_CANALS_BASE + 7, //negative X + SPR_WATER_SLOPE_Y_DOWN = SPR_CANALS_BASE + 8, //positive Y + //sprites for the shiplifts + //there are 4 kinds of shiplifts, each of them is 3 tiles long. + //the four kinds are running in the X and Y direction and + //are "lowering" either in the "+" or the "-" direction. + //the three tiles are the center tile (where the slope is) + //and a bottom and a top tile + SPR_SHIPLIFT_Y_UP_CENTER_REAR = SPR_CANALS_BASE + 9, + SPR_SHIPLIFT_X_DOWN_CENTER_REAR = SPR_CANALS_BASE + 10, + SPR_SHIPLIFT_X_UP_CENTER_REAR = SPR_CANALS_BASE + 11, + SPR_SHIPLIFT_Y_DOWN_CENTER_REAR = SPR_CANALS_BASE + 12, + SPR_SHIPLIFT_Y_UP_CENTER_FRONT = SPR_CANALS_BASE + 13, + SPR_SHIPLIFT_X_DOWN_CENTER_FRONT = SPR_CANALS_BASE + 14, + SPR_SHIPLIFT_X_UP_CENTER_FRONT = SPR_CANALS_BASE + 15, + SPR_SHIPLIFT_Y_DOWN_CENTER_FRONT = SPR_CANALS_BASE + 16, + SPR_SHIPLIFT_Y_UP_BOTTOM_REAR = SPR_CANALS_BASE + 17, + SPR_SHIPLIFT_X_DOWN_BOTTOM_REAR = SPR_CANALS_BASE + 18, + SPR_SHIPLIFT_X_UP_BOTTOM_REAR = SPR_CANALS_BASE + 19, + SPR_SHIPLIFT_Y_DOWN_BOTTOM_REAR = SPR_CANALS_BASE + 20, + SPR_SHIPLIFT_Y_UP_BOTTOM_FRONT = SPR_CANALS_BASE + 21, + SPR_SHIPLIFT_X_DOWN_BOTTOM_FRONT = SPR_CANALS_BASE + 22, + SPR_SHIPLIFT_X_UP_BOTTOM_FRONT = SPR_CANALS_BASE + 23, + SPR_SHIPLIFT_Y_DOWN_BOTTOM_FRONT = SPR_CANALS_BASE + 24, + SPR_SHIPLIFT_Y_UP_TOP_REAR = SPR_CANALS_BASE + 25, + SPR_SHIPLIFT_X_DOWN_TOP_REAR = SPR_CANALS_BASE + 26, + SPR_SHIPLIFT_X_UP_TOP_REAR = SPR_CANALS_BASE + 27, + SPR_SHIPLIFT_Y_DOWN_TOP_REAR = SPR_CANALS_BASE + 28, + SPR_SHIPLIFT_Y_UP_TOP_FRONT = SPR_CANALS_BASE + 29, + SPR_SHIPLIFT_X_DOWN_TOP_FRONT = SPR_CANALS_BASE + 30, + SPR_SHIPLIFT_X_UP_TOP_FRONT = SPR_CANALS_BASE + 31, + SPR_SHIPLIFT_Y_DOWN_TOP_FRONT = SPR_CANALS_BASE + 32, + + /* Sprites for tunnels and bridges */ + SPR_TUNNEL_ENTRY_REAR_RAIL = 2365, + SPR_TUNNEL_ENTRY_REAR_MONO = 2373, + SPR_TUNNEL_ENTRY_REAR_MAGLEV = 2381, + SPR_TUNNEL_ENTRY_REAR_ROAD = 2389, + + /* Level crossings */ + SPR_CROSSING_OFF_X_RAIL = 1370, + SPR_CROSSING_OFF_X_MONO = 1382, + SPR_CROSSING_OFF_X_MAGLEV = 1394, + + /* bridge type sprites */ + SPR_PILLARS_BASE = SPR_OPENTTD_BASE + 30, + + /* Wooden bridge (type 0) */ + SPR_BTWDN_RAIL_Y_REAR = 2545, + SPR_BTWDN_RAIL_X_REAR = 2546, + SPR_BTWDN_ROAD_Y_REAR = 2547, + SPR_BTWDN_ROAD_X_REAR = 2548, + SPR_BTWDN_Y_FRONT = 2549, + SPR_BTWDN_X_FRONT = 2550, + SPR_BTWDN_Y_PILLAR = 2551, + SPR_BTWDN_X_PILLAR = 2552, + SPR_BTWDN_MONO_Y_REAR = 4360, + SPR_BTWDN_MONO_X_REAR = 4361, + SPR_BTWDN_MGLV_Y_REAR = 4400, + SPR_BTWDN_MGLV_X_REAR = 4401, + /* ramps */ + SPR_BTWDN_ROAD_RAMP_Y_DOWN = 2529, + SPR_BTWDN_ROAD_RAMP_X_DOWN = 2530, + SPR_BTWDN_ROAD_RAMP_X_UP = 2531, //for some weird reason the order is swapped + SPR_BTWDN_ROAD_RAMP_Y_UP = 2532, //between X and Y. + SPR_BTWDN_ROAD_Y_SLOPE_UP = 2533, + SPR_BTWDN_ROAD_X_SLOPE_UP = 2534, + SPR_BTWDN_ROAD_Y_SLOPE_DOWN = 2535, + SPR_BTWDN_ROAD_X_SLOPE_DOWN = 2536, + SPR_BTWDN_RAIL_RAMP_Y_DOWN = 2537, + SPR_BTWDN_RAIL_RAMP_X_DOWN = 2538, + SPR_BTWDN_RAIL_RAMP_X_UP = 2539, //for some weird reason the order is swapped + SPR_BTWDN_RAIL_RAMP_Y_UP = 2540, //between X and Y. + SPR_BTWDN_RAIL_Y_SLOPE_UP = 2541, + SPR_BTWDN_RAIL_X_SLOPE_UP = 2542, + SPR_BTWDN_RAIL_Y_SLOPE_DOWN = 2543, + SPR_BTWDN_RAIL_X_SLOPE_DOWN = 2544, + SPR_BTWDN_MONO_RAMP_Y_DOWN = 4352, + SPR_BTWDN_MONO_RAMP_X_DOWN = 4353, + SPR_BTWDN_MONO_RAMP_X_UP = 4354, //for some weird reason the order is swapped + SPR_BTWDN_MONO_RAMP_Y_UP = 4355, //between X and Y. + SPR_BTWDN_MONO_Y_SLOPE_UP = 4356, + SPR_BTWDN_MONO_X_SLOPE_UP = 4357, + SPR_BTWDN_MONO_Y_SLOPE_DOWN = 4358, + SPR_BTWDN_MONO_X_SLOPE_DOWN = 4359, + SPR_BTWDN_MGLV_RAMP_Y_DOWN = 4392, + SPR_BTWDN_MGLV_RAMP_X_DOWN = 4393, + SPR_BTWDN_MGLV_RAMP_X_UP = 4394, //for some weird reason the order is swapped + SPR_BTWDN_MGLV_RAMP_Y_UP = 4395, //between X and Y. + SPR_BTWDN_MGLV_Y_SLOPE_UP = 4396, + SPR_BTWDN_MGLV_X_SLOPE_UP = 4397, + SPR_BTWDN_MGLV_Y_SLOPE_DOWN = 4398, + SPR_BTWDN_MGLV_X_SLOPE_DOWN = 4399, + + /* Steel Girder with arches */ + /* BTSGA == Bridge Type Steel Girder Arched */ + /* This is bridge type number 2 */ + SPR_BTSGA_RAIL_X_REAR = 2499, + SPR_BTSGA_RAIL_Y_REAR = 2500, + SPR_BTSGA_ROAD_X_REAR = 2501, + SPR_BTSGA_ROAD_Y_REAR = 2502, + SPR_BTSGA_X_FRONT = 2503, + SPR_BTSGA_Y_FRONT = 2504, + SPR_BTSGA_X_PILLAR = 2505, + SPR_BTSGA_Y_PILLAR = 2606, + SPR_BTSGA_MONO_X_REAR = 4324, + SPR_BTSGA_MONO_Y_REAR = 4325, + SPR_BTSGA_MGLV_X_REAR = 4364, + SPR_BTSGA_MGLV_Y_REAR = 4365, + + /* BTSUS == Suspension bridge */ + /* TILE_* denotes the different tiles a suspension bridge + * can have + * TILE_A and TILE_B are the "beginnings" and "ends" of the + * suspension system. they have small rectangluar endcaps + * TILE_C and TILE_D look almost identical to TILE_A and + * TILE_B, but they do not have the "endcaps". They form the + * middle part + * TILE_E is a condensed configuration of two pillars. while they + * are usually 2 pillars apart, they only have 1 pillar separation + * here + * TILE_F is an extended configuration of pillars. they are + * plugged in when pillars should be 3 tiles apart + */ + SPR_BTSUS_ROAD_Y_REAR_TILE_A = 2453, + SPR_BTSUS_ROAD_Y_REAR_TILE_B = 2454, + SPR_BTSUS_Y_FRONT_TILE_A = 2455, + SPR_BTSUS_Y_FRONT_TILE_B = 2456, + SPR_BTSUS_ROAD_Y_REAR_TILE_D = 2457, + SPR_BTSUS_ROAD_Y_REAR_TILE_C = 2458, + SPR_BTSUS_Y_FRONT_TILE_D = 2459, + SPR_BTSUS_Y_FRONT_TILE_C = 2460, + SPR_BTSUS_ROAD_X_REAR_TILE_A = 2461, + SPR_BTSUS_ROAD_X_REAR_TILE_B = 2462, + SPR_BTSUS_X_FRONT_TILE_A = 2463, + SPR_BTSUS_X_FRONT_TILE_B = 2464, + SPR_BTSUS_ROAD_X_TILE_D = 2465, + SPR_BTSUS_ROAD_X_TILE_C = 2466, + SPR_BTSUS_X_FRONT_TILE_D = 2467, + SPR_BTSUS_X_FRONT_TILE_C = 2468, + SPR_BTSUS_RAIL_Y_REAR_TILE_A = 2469, + SPR_BTSUS_RAIL_Y_REAR_TILE_B = 2470, + SPR_BTSUS_RAIL_Y_REAR_TILE_D = 2471, + SPR_BTSUS_RAIL_Y_REAR_TILE_C = 2472, + SPR_BTSUS_RAIL_X_REAR_TILE_A = 2473, + SPR_BTSUS_RAIL_X_REAR_TILE_B = 2474, + SPR_BTSUS_RAIL_X_REAR_TILE_D = 2475, + SPR_BTSUS_RAIL_X_REAR_TILE_C = 2476, + SPR_BTSUS_Y_PILLAR_TILE_A = 2477, + SPR_BTSUS_Y_PILLAR_TILE_B = 2478, + SPR_BTSUS_Y_PILLAR_TILE_D = 2479, + SPR_BTSUS_Y_PILLAR_TILE_C = 2480, + SPR_BTSUS_X_PILLAR_TILE_A = 2481, + SPR_BTSUS_X_PILLAR_TILE_B = 2482, + SPR_BTSUS_X_PILLAR_TILE_D = 2483, + SPR_BTSUS_X_PILLAR_TILE_C = 2484, + SPR_BTSUS_RAIL_Y_REAR_TILE_E = 2485, + SPR_BTSUS_RAIL_X_REAR_TILE_E = 2486, + SPR_BTSUS_ROAD_Y_REAR_TILE_E = 2487, + SPR_BTSUS_ROAD_X_REAR_TILE_E = 2488, + SPR_BTSUS_Y_FRONT_TILE_E = 2489, + SPR_BTSUS_X_FRONT_TILE_E = 2490, + SPR_BTSUS_Y_PILLAR_TILE_E = 2491, + SPR_BTSUS_X_PILLAR_TILE_E = 2492, + SPR_BTSUS_RAIL_X_REAR_TILE_F = 2493, + SPR_BTSUS_RAIL_Y_REAR_TILE_F = 2494, + SPR_BTSUS_ROAD_X_REAR_TILE_F = 2495, + SPR_BTSUS_ROAD_Y_REAR_TILE_F = 2496, + SPR_BTSUS_X_FRONT = 2497, + SPR_BTSUS_Y_FRONT = 2498, + SPR_BTSUS_MONO_Y_REAR_TILE_A = 4334, + SPR_BTSUS_MONO_Y_REAR_TILE_B = 4335, + SPR_BTSUS_MONO_Y_REAR_TILE_D = 4336, + SPR_BTSUS_MONO_Y_REAR_TILE_C = 4337, + SPR_BTSUS_MONO_X_REAR_TILE_A = 4338, + SPR_BTSUS_MONO_X_REAR_TILE_B = 4339, + SPR_BTSUS_MONO_X_REAR_TILE_D = 4340, + SPR_BTSUS_MONO_X_REAR_TILE_C = 4341, + SPR_BTSUS_MONO_Y_REAR_TILE_E = 4342, + SPR_BTSUS_MONO_X_REAR_TILE_E = 4343, + SPR_BTSUS_MONO_X_REAR_TILE_F = 4344, + SPR_BTSUS_MONO_Y_REAR_TILE_F = 4345, + SPR_BTSUS_MGLV_Y_REAR_TILE_A = 4374, + SPR_BTSUS_MGLV_Y_REAR_TILE_B = 4375, + SPR_BTSUS_MGLV_Y_REAR_TILE_D = 4376, + SPR_BTSUS_MGLV_Y_REAR_TILE_C = 4377, + SPR_BTSUS_MGLV_X_REAR_TILE_A = 4378, + SPR_BTSUS_MGLV_X_REAR_TILE_B = 4379, + SPR_BTSUS_MGLV_X_REAR_TILE_D = 4380, + SPR_BTSUS_MGLV_X_REAR_TILE_C = 4381, + SPR_BTSUS_MGLV_Y_REAR_TILE_E = 4382, + SPR_BTSUS_MGLV_X_REAR_TILE_E = 4383, + SPR_BTSUS_MGLV_X_REAR_TILE_F = 4384, + SPR_BTSUS_MGLV_Y_REAR_TILE_F = 4385, + + /* cantilever bridges */ + /* They have three different kinds of tiles: + * END(ing), MID(dle), BEG(ginning) */ + SPR_BTCAN_RAIL_X_BEG = 2507, + SPR_BTCAN_RAIL_X_MID = 2508, + SPR_BTCAN_RAIL_X_END = 2509, + SPR_BTCAN_RAIL_Y_END = 2510, + SPR_BTCAN_RAIL_Y_MID = 2511, + SPR_BTCAN_RAIL_Y_BEG = 2512, + SPR_BTCAN_ROAD_X_BEG = 2513, + SPR_BTCAN_ROAD_X_MID = 2514, + SPR_BTCAN_ROAD_X_END = 2515, + SPR_BTCAN_ROAD_Y_END = 2516, + SPR_BTCAN_ROAD_Y_MID = 2517, + SPR_BTCAN_ROAD_Y_BEG = 2518, + SPR_BTCAN_X_FRONT_BEG = 2519, + SPR_BTCAN_X_FRONT_MID = 2520, + SPR_BTCAN_X_FRONT_END = 2521, + SPR_BTCAN_Y_FRONT_END = 2522, + SPR_BTCAN_Y_FRONT_MID = 2523, + SPR_BTCAN_Y_FRONT_BEG = 2524, + SPR_BTCAN_X_PILLAR_BEG = 2525, + SPR_BTCAN_X_PILLAR_MID = 2526, + SPR_BTCAN_Y_PILLAR_MID = 2527, + SPR_BTCAN_Y_PILLAR_BEG = 2528, + SPR_BTCAN_MONO_X_BEG = 4346, + SPR_BTCAN_MONO_X_MID = 4347, + SPR_BTCAN_MONO_X_END = 4348, + SPR_BTCAN_MONO_Y_END = 4349, + SPR_BTCAN_MONO_Y_MID = 4350, + SPR_BTCAN_MONO_Y_BEG = 4351, + SPR_BTCAN_MGLV_X_BEG = 4386, + SPR_BTCAN_MGLV_X_MID = 4387, + SPR_BTCAN_MGLV_X_END = 4388, + SPR_BTCAN_MGLV_Y_END = 4389, + SPR_BTCAN_MGLV_Y_MID = 4390, + SPR_BTCAN_MGLV_Y_BEG = 4391, + + /* little concrete bridge */ + SPR_BTCON_RAIL_X = 2493, + SPR_BTCON_RAIL_Y = 2494, + SPR_BTCON_ROAD_X = 2495, + SPR_BTCON_ROAD_Y = 2496, + SPR_BTCON_X_FRONT = 2497, + SPR_BTCON_Y_FRONT = 2498, + SPR_BTCON_X_PILLAR = 2505, + SPR_BTCON_Y_PILLAR = 2506, + SPR_BTCON_MONO_X = 4344, + SPR_BTCON_MONO_Y = 4345, + SPR_BTCON_MGLV_X = 4384, + SPR_BTCON_MGLV_Y = 4385, + + /* little steel girder bridge */ + SPR_BTGIR_RAIL_X = 2553, + SPR_BTGIR_RAIL_Y = 2554, + SPR_BTGIR_ROAD_X = 2555, + SPR_BTGIR_ROAD_Y = 2556, + SPR_BTGIR_X_FRONT = 2557, + SPR_BTGIR_Y_FRONT = 2558, + SPR_BTGIR_X_PILLAR = 2505, + SPR_BTGIR_Y_PILLAR = 2506, + SPR_BTGIR_MONO_X = 4362, + SPR_BTGIR_MONO_Y = 4363, + SPR_BTGIR_MGLV_X = 4402, + SPR_BTGIR_MGLV_Y = 4403, + + /* tubular bridges */ + /* tubular bridges have 3 kinds of tiles: + * a start tile (with only half a tube on the far side, marked _BEG + * a middle tile (full tunnel), marked _MID + * and an end tile (half a tube on the near side, maked _END + */ + SPR_BTTUB_X_FRONT_BEG = 2559, + SPR_BTTUB_X_FRONT_MID = 2660, + SPR_BTTUB_X_FRONT_END = 2561, + SPR_BTTUB_Y_FRONT_END = 2562, + SPR_BTTUB_Y_FRONT_MID = 2563, + SPR_BTTUB_Y_FRONT_BEG = 2564, + SPR_BTTUB_X_RAIL_REAR_BEG = 2569, + SPR_BTTUB_X_RAIL_REAR_MID = 2570, + SPR_BTTUB_X_RAIL_REAR_END = 2571, + SPR_BTTUB_Y_RAIL_REAR_BEG = 2572, + SPR_BTTUB_Y_RAIL_REAR_MID = 2573, + SPR_BTTUB_Y_RAIL_REAR_END = 2574, + SPR_BTTUB_X_ROAD_REAR_BEG = 2575, + SPR_BTTUB_X_ROAD_REAR_MID = 2576, + SPR_BTTUB_X_ROAD_REAR_END = 2577, + SPR_BTTUB_Y_ROAD_REAR_BEG = 2578, + SPR_BTTUB_Y_ROAD_REAR_MID = 2579, + SPR_BTTUB_Y_ROAD_REAR_END = 2580, + SPR_BTTUB_X_MONO_REAR_BEG = 2581, + SPR_BTTUB_X_MONO_REAR_MID = 2582, + SPR_BTTUB_X_MONO_REAR_END = 2583, + SPR_BTTUB_Y_MONO_REAR_BEG = 2584, + SPR_BTTUB_Y_MONO_REAR_MID = 2585, + SPR_BTTUB_Y_MONO_REAR_END = 2586, + SPR_BTTUB_X_MGLV_REAR_BEG = 2587, + SPR_BTTUB_X_MGLV_REAR_MID = 2588, + SPR_BTTUB_X_MGLV_REAR_END = 2589, + SPR_BTTUB_Y_MGLV_REAR_BEG = 2590, + SPR_BTTUB_Y_MGLV_REAR_MID = 2591, + SPR_BTTUB_Y_MGLV_REAR_END = 2592, + + + /* ramps (for all bridges except wood and tubular?)*/ + SPR_BTGEN_RAIL_X_SLOPE_DOWN = 2437, + SPR_BTGEN_RAIL_X_SLOPE_UP = 2438, + SPR_BTGEN_RAIL_Y_SLOPE_DOWN = 2439, + SPR_BTGEN_RAIL_Y_SLOPE_UP = 2440, + SPR_BTGEN_RAIL_RAMP_X_UP = 2441, + SPR_BTGEN_RAIL_RAMP_X_DOWN = 2442, + SPR_BTGEN_RAIL_RAMP_Y_UP = 2443, + SPR_BTGEN_RAIL_RAMP_Y_DOWN = 2444, + SPR_BTGEN_ROAD_X_SLOPE_DOWN = 2445, + SPR_BTGEN_ROAD_X_SLOPE_UP = 2446, + SPR_BTGEN_ROAD_Y_SLOPE_DOWN = 2447, + SPR_BTGEN_ROAD_Y_SLOPE_UP = 2448, + SPR_BTGEN_ROAD_RAMP_X_UP = 2449, + SPR_BTGEN_ROAD_RAMP_X_DOWN = 2450, + SPR_BTGEN_ROAD_RAMP_Y_UP = 2451, + SPR_BTGEN_ROAD_RAMP_Y_DOWN = 2452, + SPR_BTGEN_MONO_X_SLOPE_DOWN = 4326, + SPR_BTGEN_MONO_X_SLOPE_UP = 4327, + SPR_BTGEN_MONO_Y_SLOPE_DOWN = 4328, + SPR_BTGEN_MONO_Y_SLOPE_UP = 4329, + SPR_BTGEN_MONO_RAMP_X_UP = 4330, + SPR_BTGEN_MONO_RAMP_X_DOWN = 4331, + SPR_BTGEN_MONO_RAMP_Y_UP = 4332, + SPR_BTGEN_MONO_RAMP_Y_DOWN = 4333, + SPR_BTGEN_MGLV_X_SLOPE_DOWN = 4366, + SPR_BTGEN_MGLV_X_SLOPE_UP = 4367, + SPR_BTGEN_MGLV_Y_SLOPE_DOWN = 4368, + SPR_BTGEN_MGLV_Y_SLOPE_UP = 4369, + SPR_BTGEN_MGLV_RAMP_X_UP = 4370, + SPR_BTGEN_MGLV_RAMP_X_DOWN = 4371, + SPR_BTGEN_MGLV_RAMP_Y_UP = 4372, + SPR_BTGEN_MGLV_RAMP_Y_DOWN = 4373, + + /* Vehicle view sprites */ + SPR_CENTRE_VIEW_VEHICLE = 683, + SPR_SEND_TRAIN_TODEPOT = 685, + SPR_SEND_ROADVEH_TODEPOT = 686, + SPR_SEND_AIRCRAFT_TODEPOT = 687, + SPR_SEND_SHIP_TODEPOT = 688, + + SPR_IGNORE_SIGNALS = 689, + SPR_SHOW_ORDERS = 690, + SPR_SHOW_VEHICLE_DETAILS = 691, + SPR_REFIT_VEHICLE = 692, + SPR_FORCE_VEHICLE_TURN = 715, + + /* Vehicle sprite-flags (red/green) */ + SPR_FLAG_VEH_STOPPED = 3090, + SPR_FLAG_VEH_RUNNING = 3091, + + SPR_VEH_BUS_SW_VIEW = 3097, + SPR_VEH_BUS_SIDE_VIEW = 3098, + + /* Rotor sprite numbers */ + SPR_ROTOR_STOPPED = 3901, + SPR_ROTOR_MOVING_1 = 3902, + SPR_ROTOR_MOVING_3 = 3904, + + /* Town/house sprites */ + SPR_LIFT = 1443, + + //used in town_land.h + //CNST1..3 = Those are the different stages of construction + //The last 2 hexas correspond to the type of building it represent, if any + SPR_CNST1_TALLOFFICE_00 = 1421, + SPR_CNST2_TALLOFFICE_00 = 1422, + SPR_CNST3_TALLOFFICE_00 = 1423, + SPR_GROUND_TALLOFFICE_00 = 1424, + SPR_BUILD_TALLOFFICE_00 = 1425, //temperate + SPR_CNST1_OFFICE_01 = 1426, + SPR_CNST2_OFFICE_01 = 1427, + SPR_BUILD_OFFICE_01 = 1428, //temperate + SPR_GROUND_OFFICE_01 = 1429, + SPR_CNST1_SMLBLCKFLATS_02 = 1430, //Small Block of Flats + SPR_CNST2_SMLBLCKFLATS_02 = 1431, + SPR_BUILD_SMLBLCKFLATS_02 = 1432, //temperate + SPR_GROUND_SMLBLCKFLATS_02 = 1433, + SPR_CNST1_TEMPCHURCH = 1434, + SPR_CNST2_TEMPCHURCH = 1435, + SPR_BUILD_TEMPCHURCH = 1436, + SPR_GROUND_TEMPCHURCH = 1437, + SPR_CNST1_LARGEOFFICE_04 = 1440, + SPR_CNST2_LARGEOFFICE_04 = 1441, + SPR_BUILD_LARGEOFFICE_04 = 1442, // temperate, sub-arctic, subtropical + SPR_BUILD_LARGEOFFICE_04_SNOW = 4569, // same, with snow + // These are in fact two houses for the same houseID. so V1 and V2 + SPR_CNST1_TOWNHOUSE_06_V1 = 1444, + SPR_CNST2_TOWNHOUSE_06_V1 = 1445, + SPR_BUILD_TOWNHOUSE_06_V1 = 1446, // 1st variation + SPR_GRND_TOWNHOUSE_06_V1 = 1447, + SPR_CNST1_TOWNHOUSE_06_V2 = 1501, // used as ground, but is stage1 + SPR_CNST1_TOWNHOUSE_06_V2_P = 1502, // pipes extensions for previous + SPR_CNST2_TOWNHOUSE_06_V2_G = 1503, // Ground of cnst stage 2 + SPR_CNST2_TOWNHOUSE_06_V2 = 1504, // real cnst stage 2 + SPR_GRND_TOWNHOUSE_06_V2 = 1505, + SPR_BUILD_TOWNHOUSE_06_V2 = 1506, // 2nd variation + SPR_CNST1_HOTEL_07_NW = 1448, + SPR_CNST2_HOTEL_07_NW = 1449, + SPR_BUILD_HOTEL_07_NW = 1450, + SPR_CNST1_HOTEL_07_SE = 1451, + SPR_CNST2_HOTEL_07_SE = 1452, + SPR_BUILD_HOTEL_07_SE = 1453, + SPR_STATUE_HORSERIDER_09 = 1454, + SPR_FOUNTAIN_0A = 1455, + SPR_PARKSTATUE_0B = 1456, + SPR_PARKALLEY_0C = 1457, + SPR_CNST1_OFFICE_0D = 1458, + SPR_CNST2_OFFICE_0D = 1459, + SPR_BUILD_OFFICE_0D = 1460, + SPR_CNST1_SHOPOFFICE_0E = 1461, + SPR_CNST2_SHOPOFFICE_0E = 1462, + SPR_BUILD_SHOPOFFICE_0E = 1463, + SPR_CNST1_SHOPOFFICE_0F = 1464, + SPR_CNST2_SHOPOFFICE_0F = 1465, + SPR_BUILD_SHOPOFFICE_0F = 1466, + + /* Easter egg/disaster sprites */ + SPR_BLIMP = 3905, // Zeppelin + SPR_BLIMP_CRASHING = 3906, + SPR_BLIMP_CRASHED = 3907, + SPR_UFO_SMALL_SCOUT = 3908, // XCOM - UFO Defense + SPR_UFO_SMALL_SCOUT_DARKER = 3909, + SPR_SUB_SMALL_NE = 3910, // Silent Service + SPR_SUB_SMALL_SE = 3911, + SPR_SUB_SMALL_SW = 3912, + SPR_SUB_SMALL_NW = 3913, + SPR_SUB_LARGE_NE = 3914, + SPR_SUB_LARGE_SE = 3915, + SPR_SUB_LARGE_SW = 3916, + SPR_SUB_LARGE_NW = 3917, + SPR_F_15 = 3918, // F-15 Strike Eagle + SPR_F_15_FIRING = 3919, + SPR_UFO_HARVESTER = 3920, // XCOM - UFO Defense + SPR_XCOM_SKYRANGER = 3921, + SPR_AH_64A = 3922, // Gunship + SPR_AH_64A_FIRING = 3923, + + /* main_gui.c */ + SPR_IMG_TERRAFORM_UP = 694, + SPR_IMG_TERRAFORM_DOWN = 695, + SPR_IMG_DYNAMITE = 703, + SPR_IMG_ROCKS = 4084, + SPR_IMG_LIGHTHOUSE_DESERT = 4085, // XXX - is Desert image on the desert-climate + SPR_IMG_TRANSMITTER = 4086, + SPR_IMG_LEVEL_LAND = SPR_OPENTTD_BASE + 61, + SPR_IMG_BUILD_CANAL = SPR_OPENTTD_BASE + 58, + SPR_IMG_BUILD_LOCK = SPR_CANALS_BASE + 69, + SPR_IMG_PLACE_SIGN = SPR_OPENTTD_BASE + 63, + SPR_IMG_PAUSE = 726, + SPR_IMG_FASTFORWARD = SPR_OPENTTD_BASE + 54, + SPR_IMG_SETTINGS = 751, + SPR_IMG_SAVE = 724, + SPR_IMG_SMALLMAP = 708, + SPR_IMG_TOWN = 4077, + SPR_IMG_SUBSIDIES = 679, + SPR_IMG_COMPANY_LIST = 1299, + SPR_IMG_COMPANY_FINANCE = 737, + SPR_IMG_COMPANY_GENERAL = 743, + SPR_IMG_GRAPHS = 745, + SPR_IMG_COMPANY_LEAGUE = 684, + SPR_IMG_SHOW_COUNTOURS = 738, + SPR_IMG_SHOW_VEHICLES = 739, + SPR_IMG_SHOW_ROUTES = 740, + SPR_IMG_INDUSTRY = 741, + SPR_IMG_PLANTTREES = 742, + SPR_IMG_TRAINLIST = 731, + SPR_IMG_TRUCKLIST = 732, + SPR_IMG_SHIPLIST = 733, + SPR_IMG_AIRPLANESLIST = 734, + SPR_IMG_ZOOMIN = 735, + SPR_IMG_ZOOMOUT = 736, + SPR_IMG_BUILDRAIL = 727, + SPR_IMG_BUILDROAD = 728, + SPR_IMG_BUILDWATER = 729, + SPR_IMG_BUILDAIR = 730, + SPR_IMG_LANDSCAPING = 4083, + SPR_IMG_MUSIC = 713, + SPR_IMG_MESSAGES = 680, + SPR_IMG_QUERY = 723, + SPR_IMG_SIGN = 4082, + SPR_IMG_BUY_LAND = 4791, + + /* OPEN TRANSPORT TYCOON in gamescreen */ + SPR_OTTD_O = 4842, + SPR_OTTD_P = 4841, + SPR_OTTD_E = SPR_OPENTTD_BASE + 13, + SPR_OTTD_D = SPR_OPENTTD_BASE + 14, + SPR_OTTD_N = 4839, + SPR_OTTD_T = 4836, + SPR_OTTD_R = 4837, + SPR_OTTD_A = 4838, + SPR_OTTD_S = 4840, + SPR_OTTD_Y = 4843, + SPR_OTTD_C = 4844, + + SPR_HIGHSCORE_CHART_BEGIN = 4804, + SPR_TYCOON_IMG1_BEGIN = 4814, + SPR_TYCOON_IMG2_BEGIN = 4824, + + /* Industry sprites */ + SPR_IT_SUGAR_MINE_SIEVE = 4775, + SPR_IT_SUGAR_MINE_CLOUDS = 4784, + SPR_IT_SUGAR_MINE_PILE = 4780, + SPR_IT_TOFFEE_QUARRY_TOFFEE = 4766, + SPR_IT_TOFFEE_QUARRY_SHOVEL = 4767, + SPR_IT_BUBBLE_GENERATOR_SPRING = 4746, + SPR_IT_BUBBLE_GENERATOR_BUBBLE = 4747, + SPR_IT_TOY_FACTORY_STAMP_HOLDER = 4717, + SPR_IT_TOY_FACTORY_STAMP = 4718, + SPR_IT_TOY_FACTORY_CLAY = 4719, + SPR_IT_TOY_FACTORY_ROBOT = 4720, + SPR_IT_POWER_PLANT_TRANSFORMERS = 2054, + + /*small icons of cargo available in station waiting*/ + SPR_CARGO_PASSENGER = 4297, + SPR_CARGO_COAL = 4298, + SPR_CARGO_MAIL = 4299, + SPR_CARGO_OIL = 4300, + SPR_CARGO_LIVESTOCK = 4301, + SPR_CARGO_GOODS = 4302, + SPR_CARGO_GRAIN = 4303, + SPR_CARGO_WOOD = 4304, + SPR_CARGO_IRON_ORE = 4305, + SPR_CARGO_STEEL = 4306, + SPR_CARGO_VALUES_GOLD = 4307, /*shared between temperate and arctic*/ + SPR_CARGO_FRUIT = 4308, + SPR_CARGO_COPPER_ORE = 4309, + SPR_CARGO_WATERCOLA = 4310, /*shared between desert and toyland*/ + SPR_CARGO_DIAMONDS = 4311, + SPR_CARGO_FOOD = 4312, + SPR_CARGO_PAPER = 4313, + SPR_CARGO_RUBBER = 4314, + SPR_CARGO_CANDY = 4315, + SPR_CARGO_SUGAR = 4316, + SPR_CARGO_TOYS = 4317, + SPR_CARGO_COTTONCANDY = 4318, + SPR_CARGO_FIZZYDRINK = 4319, + SPR_CARGO_TOFFEE = 4320, + SPR_CARGO_BUBBLES = 4321, + SPR_CARGO_PLASTIC = 4322, + SPR_CARGO_BATTERIES = 4323, + + /* Effect vehicles */ + SPR_BULLDOZER_NE = 1416, + SPR_BULLDOZER_SE = 1417, + SPR_BULLDOZER_SW = 1418, + SPR_BULLDOZER_NW = 1419, + + SPR_SMOKE_0 = 2040, + SPR_SMOKE_1 = 2041, + SPR_SMOKE_2 = 2042, + SPR_SMOKE_3 = 2043, + SPR_SMOKE_4 = 2044, + + SPR_DIESEL_SMOKE_0 = 3073, + SPR_DIESEL_SMOKE_1 = 3074, + SPR_DIESEL_SMOKE_2 = 3075, + SPR_DIESEL_SMOKE_3 = 3076, + SPR_DIESEL_SMOKE_4 = 3077, + SPR_DIESEL_SMOKE_5 = 3078, + + SPR_STEAM_SMOKE_0 = 3079, + SPR_STEAM_SMOKE_1 = 3080, + SPR_STEAM_SMOKE_2 = 3081, + SPR_STEAM_SMOKE_3 = 3082, + SPR_STEAM_SMOKE_4 = 3083, + + SPR_ELECTRIC_SPARK_0 = 3084, + SPR_ELECTRIC_SPARK_1 = 3085, + SPR_ELECTRIC_SPARK_2 = 3086, + SPR_ELECTRIC_SPARK_3 = 3087, + SPR_ELECTRIC_SPARK_4 = 3088, + SPR_ELECTRIC_SPARK_5 = 3089, + + SPR_CHIMNEY_SMOKE_0 = 3701, + SPR_CHIMNEY_SMOKE_1 = 3702, + SPR_CHIMNEY_SMOKE_2 = 3703, + SPR_CHIMNEY_SMOKE_3 = 3704, + SPR_CHIMNEY_SMOKE_4 = 3705, + SPR_CHIMNEY_SMOKE_5 = 3706, + SPR_CHIMNEY_SMOKE_6 = 3707, + SPR_CHIMNEY_SMOKE_7 = 3708, + + SPR_EXPLOSION_LARGE_0 = 3709, + SPR_EXPLOSION_LARGE_1 = 3710, + SPR_EXPLOSION_LARGE_2 = 3711, + SPR_EXPLOSION_LARGE_3 = 3712, + SPR_EXPLOSION_LARGE_4 = 3713, + SPR_EXPLOSION_LARGE_5 = 3714, + SPR_EXPLOSION_LARGE_6 = 3715, + SPR_EXPLOSION_LARGE_7 = 3716, + SPR_EXPLOSION_LARGE_8 = 3717, + SPR_EXPLOSION_LARGE_9 = 3718, + SPR_EXPLOSION_LARGE_A = 3719, + SPR_EXPLOSION_LARGE_B = 3720, + SPR_EXPLOSION_LARGE_C = 3721, + SPR_EXPLOSION_LARGE_D = 3722, + SPR_EXPLOSION_LARGE_E = 3723, + SPR_EXPLOSION_LARGE_F = 3724, + + SPR_EXPLOSION_SMALL_0 = 3725, + SPR_EXPLOSION_SMALL_1 = 3726, + SPR_EXPLOSION_SMALL_2 = 3727, + SPR_EXPLOSION_SMALL_3 = 3728, + SPR_EXPLOSION_SMALL_4 = 3729, + SPR_EXPLOSION_SMALL_5 = 3730, + SPR_EXPLOSION_SMALL_6 = 3731, + SPR_EXPLOSION_SMALL_7 = 3732, + SPR_EXPLOSION_SMALL_8 = 3733, + SPR_EXPLOSION_SMALL_9 = 3734, + SPR_EXPLOSION_SMALL_A = 3735, + SPR_EXPLOSION_SMALL_B = 3736, + + SPR_BREAKDOWN_SMOKE_0 = 3737, + SPR_BREAKDOWN_SMOKE_1 = 3738, + SPR_BREAKDOWN_SMOKE_2 = 3739, + SPR_BREAKDOWN_SMOKE_3 = 3740, + + SPR_BUBBLE_0 = 4748, + SPR_BUBBLE_1 = 4749, + SPR_BUBBLE_2 = 4750, + SPR_BUBBLE_GENERATE_0 = 4751, + SPR_BUBBLE_GENERATE_1 = 4752, + SPR_BUBBLE_GENERATE_2 = 4753, + SPR_BUBBLE_GENERATE_3 = 4754, + SPR_BUBBLE_BURST_0 = 4755, + SPR_BUBBLE_BURST_1 = 4756, + SPR_BUBBLE_BURST_2 = 4757, + SPR_BUBBLE_ABSORB_0 = 4758, + SPR_BUBBLE_ABSORB_1 = 4759, + SPR_BUBBLE_ABSORB_2 = 4760, + SPR_BUBBLE_ABSORB_3 = 4761, + SPR_BUBBLE_ABSORB_4 = 4762, + + /* Electrified rail build menu */ + SPR_BUILD_NS_ELRAIL = SPR_ELRAIL_BASE + 39, + SPR_BUILD_X_ELRAIL = SPR_ELRAIL_BASE + 40, + SPR_BUILD_EW_ELRAIL = SPR_ELRAIL_BASE + 41, + SPR_BUILD_Y_ELRAIL = SPR_ELRAIL_BASE + 42, + SPR_BUILD_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 47, + + /* airport_gui.c */ + SPR_IMG_AIRPORT = 744, + + /* dock_gui.c */ + SPR_IMG_SHIP_DEPOT = 748, + SPR_IMG_SHIP_DOCK = 746, + SPR_IMG_BOUY = 693, + + /* music_gui.c */ + SPR_IMG_SKIP_TO_PREV = 709, + SPR_IMG_SKIP_TO_NEXT = 710, + SPR_IMG_STOP_MUSIC = 711, + SPR_IMG_PLAY_MUSIC = 712, + + /* road_gui.c */ + SPR_IMG_ROAD_NW = 1309, + SPR_IMG_ROAD_NE = 1310, + SPR_IMG_ROAD_DEPOT = 1295, + SPR_IMG_BUS_STATION = 749, + SPR_IMG_TRUCK_BAY = 750, + SPR_IMG_BRIDGE = 2594, + SPR_IMG_ROAD_TUNNEL = 2429, + SPR_IMG_REMOVE = 714, + + /* rail_gui.c */ + SPR_IMG_RAIL_NS = 1251, + SPR_IMG_RAIL_NE = 1252, + SPR_IMG_RAIL_EW = 1253, + SPR_IMG_RAIL_NW = 1254, + SPR_IMG_AUTORAIL = SPR_OPENTTD_BASE + 0, + SPR_IMG_AUTOMONO = SPR_OPENTTD_BASE + 1, + SPR_IMG_AUTOMAGLEV = SPR_OPENTTD_BASE + 2, + + SPR_IMG_WAYPOINT = SPR_OPENTTD_BASE + 3, + + SPR_IMG_DEPOT_RAIL = 1294, + SPR_IMG_DEPOT_MONO = SPR_OPENTTD_BASE + 9, + SPR_IMG_DEPOT_MAGLEV = SPR_OPENTTD_BASE + 10, + + SPR_IMG_RAIL_STATION = 1298, + SPR_IMG_RAIL_SIGNALS = 1291, + + SPR_IMG_TUNNEL_RAIL = 2430, + SPR_IMG_TUNNEL_MONO = 2431, + SPR_IMG_TUNNEL_MAGLEV = 2432, + + SPR_IMG_CONVERT_RAIL = SPR_OPENTTD_BASE + 22, + SPR_IMG_CONVERT_MONO = SPR_OPENTTD_BASE + 24, + SPR_IMG_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 26, + + /* intro_gui.c, genworld_gui.c */ + SPR_SELECT_TEMPERATE = 4882, + SPR_SELECT_TEMPERATE_PUSHED = 4883, + SPR_SELECT_SUB_ARCTIC = 4884, + SPR_SELECT_SUB_ARCTIC_PUSHED = 4885, + SPR_SELECT_SUB_TROPICAL = 4886, + SPR_SELECT_SUB_TROPICAL_PUSHED = 4887, + SPR_SELECT_TOYLAND = 4888, + SPR_SELECT_TOYLAND_PUSHED = 4889, +}; + +/** Cursor sprite numbers */ +typedef enum CursorSprites { + /* Terraform */ + /* Cursors */ + SPR_CURSOR_MOUSE = 0, + SPR_CURSOR_ZZZ = 1, + SPR_CURSOR_BOUY = 702, + SPR_CURSOR_QUERY = 719, + SPR_CURSOR_HQ = 720, + SPR_CURSOR_SHIP_DEPOT = 721, + SPR_CURSOR_SIGN = 722, + + SPR_CURSOR_TREE = 2010, + SPR_CURSOR_BUY_LAND = 4792, + SPR_CURSOR_LEVEL_LAND = SPR_OPENTTD_BASE + 62, + + SPR_CURSOR_TOWN = 4080, + SPR_CURSOR_INDUSTRY = 4081, + SPR_CURSOR_ROCKY_AREA = 4087, + SPR_CURSOR_LIGHTHOUSE = 4088, + SPR_CURSOR_TRANSMITTER = 4089, + + /* airport cursors */ + SPR_CURSOR_AIRPORT = 2724, + + /* dock cursors */ + SPR_CURSOR_DOCK = 3668, + SPR_CURSOR_CANAL = SPR_OPENTTD_BASE + 8, + SPR_CURSOR_LOCK = SPR_OPENTTD_BASE + 57, + + /* shared road & rail cursors */ + SPR_CURSOR_BRIDGE = 2593, + + /* rail cursors */ + SPR_CURSOR_NS_TRACK = 1263, + SPR_CURSOR_SWNE_TRACK = 1264, + SPR_CURSOR_EW_TRACK = 1265, + SPR_CURSOR_NWSE_TRACK = 1266, + + SPR_CURSOR_NS_MONO = 1267, + SPR_CURSOR_SWNE_MONO = 1268, + SPR_CURSOR_EW_MONO = 1269, + SPR_CURSOR_NWSE_MONO = 1270, + + SPR_CURSOR_NS_MAGLEV = 1271, + SPR_CURSOR_SWNE_MAGLEV = 1272, + SPR_CURSOR_EW_MAGLEV = 1273, + SPR_CURSOR_NWSE_MAGLEV = 1274, + + SPR_CURSOR_NS_ELRAIL = SPR_ELRAIL_BASE + 43, + SPR_CURSOR_SWNE_ELRAIL = SPR_ELRAIL_BASE + 44, + SPR_CURSOR_EW_ELRAIL = SPR_ELRAIL_BASE + 45, + SPR_CURSOR_NWSE_ELRAIL = SPR_ELRAIL_BASE + 46, + + SPR_CURSOR_RAIL_STATION = 1300, + + SPR_CURSOR_TUNNEL_RAIL = 2434, + SPR_CURSOR_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 48, + SPR_CURSOR_TUNNEL_MONO = 2435, + SPR_CURSOR_TUNNEL_MAGLEV = 2436, + + SPR_CURSOR_AUTORAIL = SPR_OPENTTD_BASE + 4, + SPR_CURSOR_AUTOMONO = SPR_OPENTTD_BASE + 5, + SPR_CURSOR_AUTOMAGLEV = SPR_OPENTTD_BASE + 6, + + SPR_CURSOR_WAYPOINT = SPR_OPENTTD_BASE + 7, + + SPR_CURSOR_RAIL_DEPOT = 1296, + SPR_CURSOR_MONO_DEPOT = SPR_OPENTTD_BASE + 11, + SPR_CURSOR_MAGLEV_DEPOT = SPR_OPENTTD_BASE + 12, + + SPR_CURSOR_CONVERT_RAIL = SPR_OPENTTD_BASE + 23, + SPR_CURSOR_CONVERT_MONO = SPR_OPENTTD_BASE + 25, + SPR_CURSOR_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 27, + + /* road cursors */ + SPR_CURSOR_ROAD_NESW = 1311, + SPR_CURSOR_ROAD_NWSE = 1312, + + SPR_CURSOR_ROAD_DEPOT = 1297, + SPR_CURSOR_BUS_STATION = 2725, + SPR_CURSOR_TRUCK_STATION = 2726, + SPR_CURSOR_ROAD_TUNNEL = 2433, + + SPR_CURSOR_CLONE_TRAIN = SPR_OPENTTD_BASE + 93, + SPR_CURSOR_CLONE_ROADVEH = SPR_OPENTTD_BASE + 110, + SPR_CURSOR_CLONE_SHIP = SPR_OPENTTD_BASE + 112, + SPR_CURSOR_CLONE_AIRPLANE = SPR_OPENTTD_BASE + 114, +} CursorSprite; + +/// Animation macro in table/animcursors.h (_animcursors[]) +enum AnimCursors { + ANIMCURSOR_DEMOLISH = -1, ///< 704 - 707 - demolish dynamite + ANIMCURSOR_LOWERLAND = -2, ///< 699 - 701 - lower land tool + ANIMCURSOR_RAISELAND = -3, ///< 696 - 698 - raise land tool + ANIMCURSOR_PICKSTATION = -4, ///< 716 - 718 - goto-order icon + ANIMCURSOR_BUILDSIGNALS = -5, ///< 1292 - 1293 - build signal +}; + +/** + * Bitmask setup. For the graphics system, 32 bits are used to define + * the sprite to be displayed. This variable contains various information:

+ *