Initialize with OpenTTD 1.9.3

This commit is contained in:
dP
2019-10-31 21:58:04 +03:00
commit b84a475e14
1630 changed files with 736605 additions and 0 deletions

View File

@@ -0,0 +1,419 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file airport_defaults.h Tables with default values for airports and airport tiles. */
#ifndef AIRPORT_DEFAULTS_H
#define AIRPORT_DEFAULTS_H
/**
* Definition of an airport tiles layout.
* @param x offset x of this tile
* @param y offset y of this tile
* @param m StationGfx of the tile
* @see _airport_specs
* @see AirportTileTable
*/
#define MK(x, y, m) {{x, y}, m}
/**
* Terminator of airport tiles layout definition
*/
#define MKEND {{-0x80, 0}, 0}
/** Tiles for Country Airfield (small) */
static const AirportTileTable _tile_table_country_0[] = {
MK(0, 0, APT_SMALL_BUILDING_1),
MK(1, 0, APT_SMALL_BUILDING_2),
MK(2, 0, APT_SMALL_BUILDING_3),
MK(3, 0, APT_SMALL_DEPOT_SE),
MK(0, 1, APT_GRASS_FENCE_NE_FLAG),
MK(1, 1, APT_GRASS_1),
MK(2, 1, APT_GRASS_2),
MK(3, 1, APT_GRASS_FENCE_SW),
MK(0, 2, APT_RUNWAY_SMALL_FAR_END),
MK(1, 2, APT_RUNWAY_SMALL_MIDDLE),
MK(2, 2, APT_RUNWAY_SMALL_MIDDLE),
MK(3, 2, APT_RUNWAY_SMALL_NEAR_END),
MKEND
};
static const AirportTileTable * const _tile_table_country[] = {
_tile_table_country_0,
};
/** Tiles for Commuter Airfield (small) */
static const AirportTileTable _tile_table_commuter_0[] = {
MK(0, 0, APT_TOWER),
MK(1, 0, APT_BUILDING_3),
MK(2, 0, APT_HELIPAD_2_FENCE_NW),
MK(3, 0, APT_HELIPAD_2_FENCE_NW),
MK(4, 0, APT_DEPOT_SE),
MK(0, 1, APT_APRON_FENCE_NE),
MK(1, 1, APT_APRON),
MK(2, 1, APT_APRON),
MK(3, 1, APT_APRON),
MK(4, 1, APT_APRON_FENCE_SW),
MK(0, 2, APT_APRON_FENCE_NE),
MK(1, 2, APT_STAND),
MK(2, 2, APT_STAND),
MK(3, 2, APT_STAND),
MK(4, 2, APT_APRON_FENCE_SW),
MK(0, 3, APT_RUNWAY_END_FENCE_SE),
MK(1, 3, APT_RUNWAY_2),
MK(2, 3, APT_RUNWAY_2),
MK(3, 3, APT_RUNWAY_2),
MK(4, 3, APT_RUNWAY_END_FENCE_SE),
MKEND
};
static const AirportTileTable * const _tile_table_commuter[] = {
_tile_table_commuter_0,
};
/** Tiles for City Airport (large) */
static const AirportTileTable _tile_table_city_0[] = {
MK(0, 0, APT_BUILDING_1),
MK(1, 0, APT_APRON_FENCE_NW),
MK(2, 0, APT_STAND_1),
MK(3, 0, APT_APRON_FENCE_NW),
MK(4, 0, APT_APRON_FENCE_NW),
MK(5, 0, APT_DEPOT_SE),
MK(0, 1, APT_BUILDING_2),
MK(1, 1, APT_PIER),
MK(2, 1, APT_ROUND_TERMINAL),
MK(3, 1, APT_STAND_PIER_NE),
MK(4, 1, APT_APRON),
MK(5, 1, APT_APRON_FENCE_SW),
MK(0, 2, APT_BUILDING_3),
MK(1, 2, APT_STAND),
MK(2, 2, APT_PIER_NW_NE),
MK(3, 2, APT_APRON_S),
MK(4, 2, APT_APRON_HOR),
MK(5, 2, APT_APRON_N_FENCE_SW),
MK(0, 3, APT_RADIO_TOWER_FENCE_NE),
MK(1, 3, APT_APRON_W),
MK(2, 3, APT_APRON_VER_CROSSING_S),
MK(3, 3, APT_APRON_HOR_CROSSING_E),
MK(4, 3, APT_ARPON_N),
MK(5, 3, APT_TOWER_FENCE_SW),
MK(0, 4, APT_EMPTY_FENCE_NE),
MK(1, 4, APT_APRON_S),
MK(2, 4, APT_APRON_HOR_CROSSING_W),
MK(3, 4, APT_APRON_VER_CROSSING_N),
MK(4, 4, APT_APRON_E),
MK(5, 4, APT_RADAR_GRASS_FENCE_SW),
MK(0, 5, APT_RUNWAY_END_FENCE_SE),
MK(1, 5, APT_RUNWAY_1),
MK(2, 5, APT_RUNWAY_2),
MK(3, 5, APT_RUNWAY_3),
MK(4, 5, APT_RUNWAY_4),
MK(5, 5, APT_RUNWAY_END_FENCE_SE),
MKEND
};
static const AirportTileTable * const _tile_table_city[] = {
_tile_table_city_0,
};
/** Tiles for Metropolitain Airport (large) - 2 runways */
static const AirportTileTable _tile_table_metropolitan_0[] = {
MK(0, 0, APT_BUILDING_1),
MK(1, 0, APT_APRON_FENCE_NW),
MK(2, 0, APT_STAND_1),
MK(3, 0, APT_APRON_FENCE_NW),
MK(4, 0, APT_APRON_FENCE_NW),
MK(5, 0, APT_DEPOT_SE),
MK(0, 1, APT_BUILDING_2),
MK(1, 1, APT_PIER),
MK(2, 1, APT_ROUND_TERMINAL),
MK(3, 1, APT_STAND_PIER_NE),
MK(4, 1, APT_APRON),
MK(5, 1, APT_APRON_FENCE_SW),
MK(0, 2, APT_BUILDING_3),
MK(1, 2, APT_STAND),
MK(2, 2, APT_PIER_NW_NE),
MK(3, 2, APT_APRON_S),
MK(4, 2, APT_APRON_HOR),
MK(5, 2, APT_APRON_N_FENCE_SW),
MK(0, 3, APT_RADAR_FENCE_NE),
MK(1, 3, APT_APRON),
MK(2, 3, APT_APRON),
MK(3, 3, APT_APRON),
MK(4, 3, APT_APRON),
MK(5, 3, APT_TOWER_FENCE_SW),
MK(0, 4, APT_RUNWAY_END),
MK(1, 4, APT_RUNWAY_5),
MK(2, 4, APT_RUNWAY_5),
MK(3, 4, APT_RUNWAY_5),
MK(4, 4, APT_RUNWAY_5),
MK(5, 4, APT_RUNWAY_END),
MK(0, 5, APT_RUNWAY_END_FENCE_SE),
MK(1, 5, APT_RUNWAY_2),
MK(2, 5, APT_RUNWAY_2),
MK(3, 5, APT_RUNWAY_2),
MK(4, 5, APT_RUNWAY_2),
MK(5, 5, APT_RUNWAY_END_FENCE_SE),
MKEND
};
static const AirportTileTable * const _tile_table_metropolitan[] = {
_tile_table_metropolitan_0,
};
/** Tiles for International Airport (large) - 2 runways */
static const AirportTileTable _tile_table_international_0[] = {
MK(0, 0, APT_RUNWAY_END_FENCE_NW),
MK(1, 0, APT_RUNWAY_FENCE_NW),
MK(2, 0, APT_RUNWAY_FENCE_NW),
MK(3, 0, APT_RUNWAY_FENCE_NW),
MK(4, 0, APT_RUNWAY_FENCE_NW),
MK(5, 0, APT_RUNWAY_FENCE_NW),
MK(6, 0, APT_RUNWAY_END_FENCE_NW),
MK(0, 1, APT_RADIO_TOWER_FENCE_NE),
MK(1, 1, APT_APRON),
MK(2, 1, APT_APRON),
MK(3, 1, APT_APRON),
MK(4, 1, APT_APRON),
MK(5, 1, APT_APRON),
MK(6, 1, APT_DEPOT_SE),
MK(0, 2, APT_BUILDING_3),
MK(1, 2, APT_APRON),
MK(2, 2, APT_STAND),
MK(3, 2, APT_BUILDING_2),
MK(4, 2, APT_STAND),
MK(5, 2, APT_APRON),
MK(6, 2, APT_APRON_FENCE_SW),
MK(0, 3, APT_DEPOT_SE),
MK(1, 3, APT_APRON),
MK(2, 3, APT_STAND),
MK(3, 3, APT_BUILDING_2),
MK(4, 3, APT_STAND),
MK(5, 3, APT_APRON),
MK(6, 3, APT_HELIPAD_1),
MK(0, 4, APT_APRON_FENCE_NE),
MK(1, 4, APT_APRON),
MK(2, 4, APT_STAND),
MK(3, 4, APT_TOWER),
MK(4, 4, APT_STAND),
MK(5, 4, APT_APRON),
MK(6, 4, APT_HELIPAD_1),
MK(0, 5, APT_APRON_FENCE_NE),
MK(1, 5, APT_APRON),
MK(2, 5, APT_APRON),
MK(3, 5, APT_APRON),
MK(4, 5, APT_APRON),
MK(5, 5, APT_APRON),
MK(6, 5, APT_RADAR_FENCE_SW),
MK(0, 6, APT_RUNWAY_END_FENCE_SE),
MK(1, 6, APT_RUNWAY_2),
MK(2, 6, APT_RUNWAY_2),
MK(3, 6, APT_RUNWAY_2),
MK(4, 6, APT_RUNWAY_2),
MK(5, 6, APT_RUNWAY_2),
MK(6, 6, APT_RUNWAY_END_FENCE_SE),
MKEND
};
static const AirportTileTable * const _tile_table_international[] = {
_tile_table_international_0,
};
/** Tiles for International Airport (large) - 2 runways */
static const AirportTileTable _tile_table_intercontinental_0[] = {
MK(0, 0, APT_RADAR_FENCE_NE),
MK(1, 0, APT_RUNWAY_END_FENCE_NE_NW),
MK(2, 0, APT_RUNWAY_FENCE_NW),
MK(3, 0, APT_RUNWAY_FENCE_NW),
MK(4, 0, APT_RUNWAY_FENCE_NW),
MK(5, 0, APT_RUNWAY_FENCE_NW),
MK(6, 0, APT_RUNWAY_FENCE_NW),
MK(7, 0, APT_RUNWAY_FENCE_NW),
MK(8, 0, APT_RUNWAY_END_FENCE_NW_SW),
MK(0, 1, APT_RUNWAY_END_FENCE_NE_NW),
MK(1, 1, APT_RUNWAY_2),
MK(2, 1, APT_RUNWAY_2),
MK(3, 1, APT_RUNWAY_2),
MK(4, 1, APT_RUNWAY_2),
MK(5, 1, APT_RUNWAY_2),
MK(6, 1, APT_RUNWAY_2),
MK(7, 1, APT_RUNWAY_END_FENCE_SE_SW),
MK(8, 1, APT_APRON_FENCE_NE_SW),
MK(0, 2, APT_APRON_FENCE_NE_SW),
MK(1, 2, APT_EMPTY),
MK(2, 2, APT_APRON_FENCE_NE),
MK(3, 2, APT_APRON),
MK(4, 2, APT_APRON),
MK(5, 2, APT_APRON),
MK(6, 2, APT_APRON),
MK(7, 2, APT_RADIO_TOWER_FENCE_NE),
MK(8, 2, APT_APRON_FENCE_NE_SW),
MK(0, 3, APT_APRON_FENCE_NE),
MK(1, 3, APT_APRON_HALF_EAST),
MK(2, 3, APT_APRON_FENCE_NE),
MK(3, 3, APT_TOWER),
MK(4, 3, APT_HELIPAD_2),
MK(5, 3, APT_HELIPAD_2),
MK(6, 3, APT_APRON),
MK(7, 3, APT_APRON_FENCE_NW),
MK(8, 3, APT_APRON_FENCE_SW),
MK(0, 4, APT_APRON_FENCE_NE),
MK(1, 4, APT_APRON),
MK(2, 4, APT_APRON),
MK(3, 4, APT_STAND),
MK(4, 4, APT_BUILDING_1),
MK(5, 4, APT_STAND),
MK(6, 4, APT_APRON),
MK(7, 4, APT_LOW_BUILDING),
MK(8, 4, APT_DEPOT_SE),
MK(0, 5, APT_DEPOT_SE),
MK(1, 5, APT_LOW_BUILDING),
MK(2, 5, APT_APRON),
MK(3, 5, APT_STAND),
MK(4, 5, APT_BUILDING_2),
MK(5, 5, APT_STAND),
MK(6, 5, APT_APRON),
MK(7, 5, APT_APRON),
MK(8, 5, APT_APRON_FENCE_SW),
MK(0, 6, APT_APRON_FENCE_NE),
MK(1, 6, APT_APRON),
MK(2, 6, APT_APRON),
MK(3, 6, APT_STAND),
MK(4, 6, APT_BUILDING_3),
MK(5, 6, APT_STAND),
MK(6, 6, APT_APRON),
MK(7, 6, APT_APRON),
MK(8, 6, APT_APRON_FENCE_SW),
MK(0, 7, APT_APRON_FENCE_NE),
MK(1, 7, APT_APRON_FENCE_SE),
MK(2, 7, APT_APRON),
MK(3, 7, APT_STAND),
MK(4, 7, APT_ROUND_TERMINAL),
MK(5, 7, APT_STAND),
MK(6, 7, APT_APRON_FENCE_SW),
MK(7, 7, APT_APRON_HALF_WEST),
MK(8, 7, APT_APRON_FENCE_SW),
MK(0, 8, APT_APRON_FENCE_NE),
MK(1, 8, APT_GRASS_FENCE_NE_FLAG_2),
MK(2, 8, APT_APRON_FENCE_NE),
MK(3, 8, APT_APRON),
MK(4, 8, APT_APRON),
MK(5, 8, APT_APRON),
MK(6, 8, APT_APRON_FENCE_SW),
MK(7, 8, APT_EMPTY),
MK(8, 8, APT_APRON_FENCE_NE_SW),
MK(0, 9, APT_APRON_FENCE_NE),
MK(1, 9, APT_RUNWAY_END_FENCE_NE_NW),
MK(2, 9, APT_RUNWAY_FENCE_NW),
MK(3, 9, APT_RUNWAY_FENCE_NW),
MK(4, 9, APT_RUNWAY_FENCE_NW),
MK(5, 9, APT_RUNWAY_FENCE_NW),
MK(6, 9, APT_RUNWAY_FENCE_NW),
MK(7, 9, APT_RUNWAY_FENCE_NW),
MK(8, 9, APT_RUNWAY_END_FENCE_SE_SW),
MK(0, 10, APT_RUNWAY_END_FENCE_NE_SE),
MK(1, 10, APT_RUNWAY_2),
MK(2, 10, APT_RUNWAY_2),
MK(3, 10, APT_RUNWAY_2),
MK(4, 10, APT_RUNWAY_2),
MK(5, 10, APT_RUNWAY_2),
MK(6, 10, APT_RUNWAY_2),
MK(7, 10, APT_RUNWAY_END_FENCE_SE_SW),
MK(8, 10, APT_EMPTY),
MKEND
};
static const AirportTileTable * const _tile_table_intercontinental[] = {
_tile_table_intercontinental_0,
};
/** Tiles for Heliport */
static const AirportTileTable _tile_table_heliport_0[] = {
MK(0, 0, APT_HELIPORT),
MKEND
};
static const AirportTileTable * const _tile_table_heliport[] = {
_tile_table_heliport_0,
};
/** Tiles for Helidepot */
static const AirportTileTable _tile_table_helidepot_0[] = {
MK(0, 0, APT_LOW_BUILDING_FENCE_N),
MK(1, 0, APT_DEPOT_SE),
MK(0, 1, APT_HELIPAD_2_FENCE_NE_SE),
MK(1, 1, APT_APRON_FENCE_SE_SW),
MKEND
};
static const AirportTileTable * const _tile_table_helidepot[] = {
_tile_table_helidepot_0,
};
/** Tiles for Helistation */
static const AirportTileTable _tile_table_helistation_0[] = {
MK(0, 0, APT_DEPOT_SE),
MK(1, 0, APT_LOW_BUILDING_FENCE_NW),
MK(2, 0, APT_HELIPAD_3_FENCE_NW),
MK(3, 0, APT_HELIPAD_3_FENCE_NW_SW),
MK(0, 1, APT_APRON_FENCE_NE_SE),
MK(1, 1, APT_APRON_FENCE_SE),
MK(2, 1, APT_APRON_FENCE_SE),
MK(3, 1, APT_HELIPAD_3_FENCE_SE_SW),
MKEND
};
static const AirportTileTable * const _tile_table_helistation[] = {
_tile_table_helistation_0,
};
static const Direction _default_airports_rotation[] = {
DIR_N,
};
#undef MK
#undef MKEND
/** General AirportSpec definition. */
#define AS_GENERIC(fsm, att, rot, att_len, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled) \
{fsm, att, rot, att_len, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year, name, ttdpatch_type, class_id, preview, maint_cost, enabled, GRFFileProps(AT_INVALID)}
/** AirportSpec definition for airports without any depot. */
#define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \
AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _default_airports_rotation, lengthof(_tile_table_##ap_name), NULL, 0, \
size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true)
/** AirportSpec definition for airports with at least one depot. */
#define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \
AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _default_airports_rotation, lengthof(_tile_table_##ap_name), _airport_depots_##ap_name, lengthof(_airport_depots_##ap_name), \
size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true)
/* The helidepot and helistation have ATP_TTDP_SMALL because they are at ground level */
extern const AirportSpec _origin_airport_specs[] = {
AS(country, 4, 3, 0, 1959, 4, 3, 7, ATP_TTDP_SMALL, APC_SMALL, STR_AIRPORT_SMALL, SPR_AIRPORT_PREVIEW_SMALL),
AS(city, 6, 6, 1955, MAX_YEAR, 5, 5, 24, ATP_TTDP_LARGE, APC_LARGE, STR_AIRPORT_CITY, SPR_AIRPORT_PREVIEW_LARGE),
AS_ND(heliport, 1, 1, 1963, MAX_YEAR, 4, 1, 4, ATP_TTDP_HELIPORT, APC_HELIPORT, STR_AIRPORT_HELIPORT, SPR_AIRPORT_PREVIEW_HELIPORT),
AS(metropolitan, 6, 6, 1980, MAX_YEAR, 6, 8, 28, ATP_TTDP_LARGE, APC_LARGE, STR_AIRPORT_METRO, SPR_AIRPORT_PREVIEW_METROPOLITAN),
AS(international, 7, 7, 1990, MAX_YEAR, 8, 17, 42, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERNATIONAL, SPR_AIRPORT_PREVIEW_INTERNATIONAL),
AS(commuter, 5, 4, 1983, MAX_YEAR, 4, 4, 20, ATP_TTDP_SMALL, APC_SMALL, STR_AIRPORT_COMMUTER, SPR_AIRPORT_PREVIEW_COMMUTER),
AS(helidepot, 2, 2, 1976, MAX_YEAR, 4, 2, 7, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELIDEPOT, SPR_AIRPORT_PREVIEW_HELIDEPOT),
AS(intercontinental, 9, 11, 2002, MAX_YEAR, 10, 25, 72, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERCONTINENTAL, SPR_AIRPORT_PREVIEW_INTERCONTINENTAL),
AS(helistation, 4, 2, 1980, MAX_YEAR, 4, 3, 14, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELISTATION, SPR_AIRPORT_PREVIEW_HELISTATION),
AS_GENERIC(&_airportfta_oilrig, NULL, _default_airports_rotation, 0, NULL, 0, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false),
};
assert_compile(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs));
const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, NULL, _default_airports_rotation, 0, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false);
#undef AS
#undef AS_ND
#undef AS_GENERIC
#endif /* AIRPORT_DEFAULTS_H */

View File

@@ -0,0 +1,831 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file airport_movement.h Heart of the airports and their finite state machines */
#ifndef AIRPORT_MOVEMENT_H
#define AIRPORT_MOVEMENT_H
/**
* State machine input struct (from external file, etc.)
* Finite sTate mAchine --> FTA
*/
struct AirportFTAbuildup {
byte position; ///< The position that an airplane is at.
byte heading; ///< The current orders (eg. TAKEOFF, HANGAR, ENDLANDING, etc.).
uint64 block; ///< The block this position is on on the airport (st->airport.flags).
byte next; ///< Next position from this position.
};
///////////////////////////////////////////////////////////////////////
/////*********Movement Positions on Airports********************///////
/**
* Airport movement data creation macro.
* @param x X position.
* @param y Y position.
* @param flags Movement flags.
* @param dir Direction.
*/
#define AMD(x, y, flags, dir) { x, y, flags, {dir} }
/** Dummy airport. */
static const AirportMovingData _airport_moving_data_dummy[] = {
AMD( 0, 0, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ),
AMD( 0, 96, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ),
AMD( 96, 96, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ),
AMD( 96, 0, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ),
};
/** Country Airfield (small) 4x3. */
static const AirportMovingData _airport_moving_data_country[22] = {
AMD( 53, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
AMD( 53, 27, 0, DIR_N ), // 01 Taxi to right outside depot
AMD( 32, 23, AMED_EXACTPOS, DIR_NW), // 02 Terminal 1
AMD( 10, 23, AMED_EXACTPOS, DIR_NW), // 03 Terminal 2
AMD( 43, 37, 0, DIR_N ), // 04 Going towards terminal 2
AMD( 24, 37, 0, DIR_N ), // 05 Going towards terminal 2
AMD( 53, 37, 0, DIR_N ), // 06 Going for takeoff
AMD( 61, 40, AMED_EXACTPOS, DIR_NE), // 07 Taxi to start of runway (takeoff)
AMD( 3, 40, AMED_NOSPDCLAMP, DIR_N ), // 08 Accelerate to end of runway
AMD( -79, 40, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 09 Take off
AMD( 177, 40, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 10 Fly to landing position in air
AMD( 56, 40, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 11 Going down for land
AMD( 3, 40, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 12 Just landed, brake until end of runway
AMD( 7, 40, 0, DIR_N ), // 13 Just landed, turn around and taxi 1 square
AMD( 53, 40, 0, DIR_N ), // 14 Taxi from runway to crossing
AMD( 1, 193, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 15 Fly around waiting for a landing spot (north-east)
AMD( 1, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 16 Fly around waiting for a landing spot (north-west)
AMD( 257, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 17 Fly around waiting for a landing spot (south-west)
AMD( 273, 47, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 18 Fly around waiting for a landing spot (south)
AMD( 44, 37, AMED_HELI_RAISE, DIR_N ), // 19 Helicopter takeoff
AMD( 44, 40, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 20 In position above landing spot helicopter
AMD( 44, 40, AMED_HELI_LOWER, DIR_N ), // 21 Helicopter landing
};
/** Commuter Airfield (small) 5x4. */
static const AirportMovingData _airport_moving_data_commuter[37] = {
AMD( 69, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
AMD( 72, 22, 0, DIR_N ), // 01 Taxi to right outside depot
AMD( 8, 22, AMED_EXACTPOS, DIR_SW), // 01 Taxi to right outside depot
AMD( 24, 36, AMED_EXACTPOS, DIR_SE), // 03 Terminal 1
AMD( 40, 36, AMED_EXACTPOS, DIR_SE), // 04 Terminal 2
AMD( 56, 36, AMED_EXACTPOS, DIR_SE), // 05 Terminal 3
AMD( 40, 8, AMED_EXACTPOS, DIR_NE), // 06 Helipad 1
AMD( 56, 8, AMED_EXACTPOS, DIR_NE), // 07 Helipad 2
AMD( 24, 22, 0, DIR_SW), // 08 Taxiing
AMD( 40, 22, 0, DIR_SW), // 09 Taxiing
AMD( 56, 22, 0, DIR_SW), // 10 Taxiing
AMD( 72, 40, 0, DIR_SE), // 11 Airport OUTWAY
AMD( 72, 54, AMED_EXACTPOS, DIR_NE), // 12 Accelerate to end of runway
AMD( 7, 54, AMED_NOSPDCLAMP, DIR_N ), // 13 Release control of runway, for smoother movement
AMD( 5, 54, AMED_NOSPDCLAMP, DIR_N ), // 14 End of runway
AMD( -79, 54, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 15 Take off
AMD( 145, 54, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 16 Fly to landing position in air
AMD( 73, 54, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 17 Going down for land
AMD( 3, 54, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 18 Just landed, brake until end of runway
AMD( 12, 54, AMED_SLOWTURN, DIR_NW), // 19 Just landed, turn around and taxi
AMD( 8, 32, 0, DIR_NW), // 20 Taxi from runway to crossing
AMD( 1, 149, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 21 Fly around waiting for a landing spot (north-east)
AMD( 1, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 22 Fly around waiting for a landing spot (north-west)
AMD( 193, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 23 Fly around waiting for a landing spot (south-west)
AMD( 225, 62, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 24 Fly around waiting for a landing spot (south)
/* Helicopter */
AMD( 80, 0, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 25 Bufferspace before helipad
AMD( 80, 0, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 26 Bufferspace before helipad
AMD( 32, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 27 Get in position for Helipad1
AMD( 48, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 28 Get in position for Helipad2
AMD( 32, 8, AMED_HELI_LOWER, DIR_N ), // 29 Land at Helipad1
AMD( 48, 8, AMED_HELI_LOWER, DIR_N ), // 30 Land at Helipad2
AMD( 32, 8, AMED_HELI_RAISE, DIR_N ), // 31 Takeoff Helipad1
AMD( 48, 8, AMED_HELI_RAISE, DIR_N ), // 32 Takeoff Helipad2
AMD( 64, 22, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 33 Go to position for Hangarentrance in air
AMD( 64, 22, AMED_HELI_LOWER, DIR_N ), // 34 Land in front of hangar
AMD( 40, 8, AMED_EXACTPOS, DIR_N ), // pre-helitakeoff helipad 1
AMD( 56, 8, AMED_EXACTPOS, DIR_N ), // pre-helitakeoff helipad 2
};
/** City Airport (large) 6x6. */
static const AirportMovingData _airport_moving_data_city[] = {
AMD( 85, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
AMD( 85, 22, 0, DIR_N ), // 01 Taxi to right outside depot
AMD( 26, 41, AMED_EXACTPOS, DIR_SW), // 02 Terminal 1
AMD( 56, 22, AMED_EXACTPOS, DIR_SE), // 03 Terminal 2
AMD( 38, 8, AMED_EXACTPOS, DIR_SW), // 04 Terminal 3
AMD( 65, 6, 0, DIR_N ), // 05 Taxi to right in infront of terminal 2/3
AMD( 80, 27, 0, DIR_N ), // 06 Taxiway terminals 2-3
AMD( 44, 63, 0, DIR_N ), // 07 Taxi to Airport center
AMD( 58, 71, 0, DIR_N ), // 08 Towards takeoff
AMD( 72, 85, 0, DIR_N ), // 09 Taxi to runway (takeoff)
AMD( 89, 85, AMED_EXACTPOS, DIR_NE), // 10 Taxi to start of runway (takeoff)
AMD( 3, 85, AMED_NOSPDCLAMP, DIR_N ), // 11 Accelerate to end of runway
AMD( -79, 85, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 12 Take off
AMD( 177, 87, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 13 Fly to landing position in air
AMD( 89, 87, AMED_HOLD | AMED_LAND, DIR_N ), // 14 Going down for land
AMD( 20, 87, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 15 Just landed, brake until end of runway
AMD( 20, 87, 0, DIR_N ), // 16 Just landed, turn around and taxi 1 square // NOT USED
AMD( 36, 71, 0, DIR_N ), // 17 Taxi from runway to crossing
AMD( 160, 87, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 18 Fly around waiting for a landing spot (north-east)
AMD( 140, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 19 Final approach fix
AMD( 257, 1, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 20 Fly around waiting for a landing spot (south-west)
AMD( 273, 49, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 21 Fly around waiting for a landing spot (south)
AMD( 44, 63, AMED_HELI_RAISE, DIR_N ), // 22 Helicopter takeoff
AMD( 28, 74, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 23 In position above landing spot helicopter
AMD( 28, 74, AMED_HELI_LOWER, DIR_N ), // 24 Helicopter landing
AMD( 145, 1, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 25 Fly around waiting for a landing spot (north-west)
AMD( -32, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 26 Initial approach fix (north)
AMD( 300, -48, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 27 Initial approach fix (south)
AMD( 140, -48, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 28 Intermediate Approach fix (south), IAF (west)
AMD( -32, 120, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 29 Initial approach fix (east)
};
/** Metropolitan Airport (metropolitan) - 2 runways. */
static const AirportMovingData _airport_moving_data_metropolitan[28] = {
AMD( 85, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
AMD( 85, 22, 0, DIR_N ), // 01 Taxi to right outside depot
AMD( 26, 41, AMED_EXACTPOS, DIR_SW), // 02 Terminal 1
AMD( 56, 22, AMED_EXACTPOS, DIR_SE), // 03 Terminal 2
AMD( 38, 8, AMED_EXACTPOS, DIR_SW), // 04 Terminal 3
AMD( 65, 6, 0, DIR_N ), // 05 Taxi to right in infront of terminal 2/3
AMD( 80, 27, 0, DIR_N ), // 06 Taxiway terminals 2-3
AMD( 49, 58, 0, DIR_N ), // 07 Taxi to Airport center
AMD( 72, 58, 0, DIR_N ), // 08 Towards takeoff
AMD( 72, 69, 0, DIR_N ), // 09 Taxi to runway (takeoff)
AMD( 89, 69, AMED_EXACTPOS, DIR_NE), // 10 Taxi to start of runway (takeoff)
AMD( 3, 69, AMED_NOSPDCLAMP, DIR_N ), // 11 Accelerate to end of runway
AMD( -79, 69, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 12 Take off
AMD( 177, 85, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 13 Fly to landing position in air
AMD( 89, 85, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 14 Going down for land
AMD( 3, 85, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 15 Just landed, brake until end of runway
AMD( 21, 85, 0, DIR_N ), // 16 Just landed, turn around and taxi 1 square
AMD( 21, 69, 0, DIR_N ), // 17 On Runway-out taxiing to In-Way
AMD( 21, 58, AMED_EXACTPOS, DIR_SW), // 18 Taxi from runway to crossing
AMD( 1, 193, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 19 Fly around waiting for a landing spot (north-east)
AMD( 1, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 20 Fly around waiting for a landing spot (north-west)
AMD( 257, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 21 Fly around waiting for a landing spot (south-west)
AMD( 273, 49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 22 Fly around waiting for a landing spot (south)
AMD( 44, 58, 0, DIR_N ), // 23 Helicopter takeoff spot on ground (to clear airport sooner)
AMD( 44, 63, AMED_HELI_RAISE, DIR_N ), // 24 Helicopter takeoff
AMD( 15, 54, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 25 Get in position above landing spot helicopter
AMD( 15, 54, AMED_HELI_LOWER, DIR_N ), // 26 Helicopter landing
AMD( 21, 58, AMED_EXACTPOS, DIR_SW), // 27 Transitions after landing to on-ground movement
};
/** International Airport (international) - 2 runways, 6 terminals, dedicated helipad. */
static const AirportMovingData _airport_moving_data_international[51] = {
AMD( 7, 55, AMED_EXACTPOS, DIR_SE), // 00 In Hangar 1
AMD( 100, 21, AMED_EXACTPOS, DIR_SE), // 01 In Hangar 2
AMD( 7, 70, 0, DIR_N ), // 02 Taxi to right outside depot
AMD( 100, 36, 0, DIR_N ), // 03 Taxi to right outside depot
AMD( 38, 70, AMED_EXACTPOS, DIR_SW), // 04 Terminal 1
AMD( 38, 54, AMED_EXACTPOS, DIR_SW), // 05 Terminal 2
AMD( 38, 38, AMED_EXACTPOS, DIR_SW), // 06 Terminal 3
AMD( 70, 70, AMED_EXACTPOS, DIR_NE), // 07 Terminal 4
AMD( 70, 54, AMED_EXACTPOS, DIR_NE), // 08 Terminal 5
AMD( 70, 38, AMED_EXACTPOS, DIR_NE), // 09 Terminal 6
AMD( 104, 71, AMED_EXACTPOS, DIR_NE), // 10 Helipad 1
AMD( 104, 55, AMED_EXACTPOS, DIR_NE), // 11 Helipad 2
AMD( 22, 87, 0, DIR_N ), // 12 Towards Terminals 4/5/6, Helipad 1/2
AMD( 60, 87, 0, DIR_N ), // 13 Towards Terminals 4/5/6, Helipad 1/2
AMD( 66, 87, 0, DIR_N ), // 14 Towards Terminals 4/5/6, Helipad 1/2
AMD( 86, 87, AMED_EXACTPOS, DIR_NW), // 15 Towards Terminals 4/5/6, Helipad 1/2
AMD( 86, 70, 0, DIR_N ), // 16 In Front of Terminal 4 / Helipad 1
AMD( 86, 54, 0, DIR_N ), // 17 In Front of Terminal 5 / Helipad 2
AMD( 86, 38, 0, DIR_N ), // 18 In Front of Terminal 6
AMD( 86, 22, 0, DIR_N ), // 19 Towards Terminals Takeoff (Taxiway)
AMD( 66, 22, 0, DIR_N ), // 20 Towards Terminals Takeoff (Taxiway)
AMD( 60, 22, 0, DIR_N ), // 21 Towards Terminals Takeoff (Taxiway)
AMD( 38, 22, 0, DIR_N ), // 22 Towards Terminals Takeoff (Taxiway)
AMD( 22, 70, 0, DIR_N ), // 23 In Front of Terminal 1
AMD( 22, 58, 0, DIR_N ), // 24 In Front of Terminal 2
AMD( 22, 38, 0, DIR_N ), // 25 In Front of Terminal 3
AMD( 22, 22, AMED_EXACTPOS, DIR_NW), // 26 Going for Takeoff
AMD( 22, 6, 0, DIR_N ), // 27 On Runway-out, prepare for takeoff
AMD( 3, 6, AMED_EXACTPOS, DIR_SW), // 28 Accelerate to end of runway
AMD( 60, 6, AMED_NOSPDCLAMP, DIR_N ), // 29 Release control of runway, for smoother movement
AMD( 105, 6, AMED_NOSPDCLAMP, DIR_N ), // 30 End of runway
AMD( 190, 6, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 31 Take off
AMD( 193, 104, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 32 Fly to landing position in air
AMD( 105, 104, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 33 Going down for land
AMD( 3, 104, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 34 Just landed, brake until end of runway
AMD( 12, 104, AMED_SLOWTURN, DIR_N ), // 35 Just landed, turn around and taxi 1 square
AMD( 7, 84, 0, DIR_N ), // 36 Taxi from runway to crossing
AMD( 1, 209, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 37 Fly around waiting for a landing spot (north-east)
AMD( 1, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 38 Fly around waiting for a landing spot (north-west)
AMD( 273, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 39 Fly around waiting for a landing spot (south-west)
AMD( 305, 81, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 40 Fly around waiting for a landing spot (south)
/* Helicopter */
AMD( 128, 80, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 41 Bufferspace before helipad
AMD( 128, 80, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 42 Bufferspace before helipad
AMD( 96, 71, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 43 Get in position for Helipad1
AMD( 96, 55, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 44 Get in position for Helipad2
AMD( 96, 71, AMED_HELI_LOWER, DIR_N ), // 45 Land at Helipad1
AMD( 96, 55, AMED_HELI_LOWER, DIR_N ), // 46 Land at Helipad2
AMD( 104, 71, AMED_HELI_RAISE, DIR_N ), // 47 Takeoff Helipad1
AMD( 104, 55, AMED_HELI_RAISE, DIR_N ), // 48 Takeoff Helipad2
AMD( 104, 32, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 49 Go to position for Hangarentrance in air
AMD( 104, 32, AMED_HELI_LOWER, DIR_N ), // 50 Land in HANGAR2_AREA to go to hangar
};
/** Intercontinental Airport - 4 runways, 8 terminals, 2 dedicated helipads. */
static const AirportMovingData _airport_moving_data_intercontinental[77] = {
AMD( 8, 87, AMED_EXACTPOS, DIR_SE), // 00 In Hangar 1
AMD( 136, 72, AMED_EXACTPOS, DIR_SE), // 01 In Hangar 2
AMD( 8, 104, 0, DIR_N ), // 02 Taxi to right outside depot 1
AMD( 136, 88, 0, DIR_N ), // 03 Taxi to right outside depot 2
AMD( 56, 120, AMED_EXACTPOS, DIR_W ), // 04 Terminal 1
AMD( 56, 104, AMED_EXACTPOS, DIR_SW), // 05 Terminal 2
AMD( 56, 88, AMED_EXACTPOS, DIR_SW), // 06 Terminal 3
AMD( 56, 72, AMED_EXACTPOS, DIR_SW), // 07 Terminal 4
AMD( 88, 120, AMED_EXACTPOS, DIR_N ), // 08 Terminal 5
AMD( 88, 104, AMED_EXACTPOS, DIR_NE), // 09 Terminal 6
AMD( 88, 88, AMED_EXACTPOS, DIR_NE), // 10 Terminal 7
AMD( 88, 72, AMED_EXACTPOS, DIR_NE), // 11 Terminal 8
AMD( 88, 56, AMED_EXACTPOS, DIR_SE), // 12 Helipad 1
AMD( 72, 56, AMED_EXACTPOS, DIR_NE), // 13 Helipad 2
AMD( 40, 136, 0, DIR_N ), // 14 Term group 2 enter 1 a
AMD( 56, 136, 0, DIR_N ), // 15 Term group 2 enter 1 b
AMD( 88, 136, 0, DIR_N ), // 16 Term group 2 enter 2 a
AMD( 104, 136, 0, DIR_N ), // 17 Term group 2 enter 2 b
AMD( 104, 120, 0, DIR_N ), // 18 Term group 2 - opp term 5
AMD( 104, 104, 0, DIR_N ), // 19 Term group 2 - opp term 6 & exit2
AMD( 104, 88, 0, DIR_N ), // 20 Term group 2 - opp term 7 & hangar area 2
AMD( 104, 72, 0, DIR_N ), // 21 Term group 2 - opp term 8
AMD( 104, 56, 0, DIR_N ), // 22 Taxi Term group 2 exit a
AMD( 104, 40, 0, DIR_N ), // 23 Taxi Term group 2 exit b
AMD( 56, 40, 0, DIR_N ), // 24 Term group 2 exit 2a
AMD( 40, 40, 0, DIR_N ), // 25 Term group 2 exit 2b
AMD( 40, 120, 0, DIR_N ), // 26 Term group 1 - opp term 1
AMD( 40, 104, 0, DIR_N ), // 27 Term group 1 - opp term 2 & hangar area 1
AMD( 40, 88, 0, DIR_N ), // 28 Term group 1 - opp term 3
AMD( 40, 72, 0, DIR_N ), // 29 Term group 1 - opp term 4
AMD( 18, 72, 0, DIR_NW), // 30 Outway 1
AMD( 8, 40, 0, DIR_NW), // 31 Airport OUTWAY
AMD( 8, 24, AMED_EXACTPOS, DIR_SW), // 32 Accelerate to end of runway
AMD( 119, 24, AMED_NOSPDCLAMP, DIR_N ), // 33 Release control of runway, for smoother movement
AMD( 117, 24, AMED_NOSPDCLAMP, DIR_N ), // 34 End of runway
AMD( 197, 24, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 35 Take off
AMD( 254, 84, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 36 Flying to landing position in air
AMD( 117, 168, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 37 Going down for land
AMD( 8, 168, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 38 Just landed, brake until end of runway
AMD( 8, 168, 0, DIR_N ), // 39 Just landed, turn around and taxi
AMD( 8, 144, 0, DIR_NW), // 40 Taxi from runway
AMD( 8, 128, 0, DIR_NW), // 41 Taxi from runway
AMD( 8, 120, AMED_EXACTPOS, DIR_NW), // 42 Airport entrance
AMD( 56, 344, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 43 Fly around waiting for a landing spot (north-east)
AMD( -200, 88, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 44 Fly around waiting for a landing spot (north-west)
AMD( 56, -168, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 45 Fly around waiting for a landing spot (south-west)
AMD( 312, 88, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 46 Fly around waiting for a landing spot (south)
/* Helicopter */
AMD( 96, 40, AMED_NOSPDCLAMP, DIR_N ), // 47 Bufferspace before helipad
AMD( 96, 40, AMED_NOSPDCLAMP, DIR_N ), // 48 Bufferspace before helipad
AMD( 82, 54, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 49 Get in position for Helipad1
AMD( 64, 56, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 50 Get in position for Helipad2
AMD( 81, 55, AMED_HELI_LOWER, DIR_N ), // 51 Land at Helipad1
AMD( 64, 56, AMED_HELI_LOWER, DIR_N ), // 52 Land at Helipad2
AMD( 80, 56, AMED_HELI_RAISE, DIR_N ), // 53 Takeoff Helipad1
AMD( 64, 56, AMED_HELI_RAISE, DIR_N ), // 54 Takeoff Helipad2
AMD( 136, 96, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 55 Go to position for Hangarentrance in air
AMD( 136, 96, AMED_HELI_LOWER, DIR_N ), // 56 Land in front of hangar2
AMD( 126, 104, 0, DIR_SE), // 57 Outway 2
AMD( 136, 136, 0, DIR_NE), // 58 Airport OUTWAY 2
AMD( 136, 152, AMED_EXACTPOS, DIR_NE), // 59 Accelerate to end of runway2
AMD( 16, 152, AMED_NOSPDCLAMP, DIR_N ), // 60 Release control of runway2, for smoother movement
AMD( 20, 152, AMED_NOSPDCLAMP, DIR_N ), // 61 End of runway2
AMD( -56, 152, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 62 Take off2
AMD( 24, 8, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 63 Going down for land2
AMD( 136, 8, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 64 Just landed, brake until end of runway2in
AMD( 136, 8, 0, DIR_N ), // 65 Just landed, turn around and taxi
AMD( 136, 24, 0, DIR_SE), // 66 Taxi from runway 2in
AMD( 136, 40, 0, DIR_SE), // 67 Taxi from runway 2in
AMD( 136, 56, AMED_EXACTPOS, DIR_NE), // 68 Airport entrance2
AMD( -56, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 69 Fly to landing position in air2
AMD( 88, 40, 0, DIR_N ), // 70 Taxi Term group 2 exit - opp heli1
AMD( 72, 40, 0, DIR_N ), // 71 Taxi Term group 2 exit - opp heli2
AMD( 88, 57, AMED_EXACTPOS, DIR_SE), // 72 pre-helitakeoff helipad 1
AMD( 71, 56, AMED_EXACTPOS, DIR_NE), // 73 pre-helitakeoff helipad 2
AMD( 8, 120, AMED_HELI_RAISE, DIR_N ), // 74 Helitakeoff outside depot 1
AMD( 136, 104, AMED_HELI_RAISE, DIR_N ), // 75 Helitakeoff outside depot 2
AMD( 197, 168, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 76 Fly to landing position in air1
};
/** Heliport (heliport). */
static const AirportMovingData _airport_moving_data_heliport[9] = {
AMD( 5, 9, AMED_EXACTPOS, DIR_NE), // 0 - At heliport terminal
AMD( 2, 9, AMED_HELI_RAISE, DIR_N ), // 1 - Take off (play sound)
AMD( -3, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 2 - In position above landing spot helicopter
AMD( -3, 9, AMED_HELI_LOWER, DIR_N ), // 3 - Land
AMD( 2, 9, 0, DIR_N ), // 4 - Goto terminal on ground
AMD( -31, 59, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 5 - Circle #1 (north-east)
AMD( -31, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 6 - Circle #2 (north-west)
AMD( 49, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 7 - Circle #3 (south-west)
AMD( 70, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 8 - Circle #4 (south)
};
/** HeliDepot 2x2 (heliport). */
static const AirportMovingData _airport_moving_data_helidepot[18] = {
AMD( 24, 4, AMED_EXACTPOS, DIR_NE), // 0 - At depot
AMD( 24, 28, 0, DIR_N ), // 1 Taxi to right outside depot
AMD( 5, 38, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 2 Flying
AMD( -15, -15, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 3 - Circle #1 (north-east)
AMD( -15, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 4 - Circle #2 (north-west)
AMD( 49, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 5 - Circle #3 (south-west)
AMD( 49, -15, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 6 - Circle #4 (south-east)
AMD( 8, 32, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 7 - PreHelipad
AMD( 8, 32, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 8 - Helipad
AMD( 8, 16, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 9 - Land
AMD( 8, 16, AMED_HELI_LOWER, DIR_NW), // 10 - Land
AMD( 8, 24, AMED_HELI_RAISE, DIR_N ), // 11 - Take off (play sound)
AMD( 32, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 12 Air to above hangar area
AMD( 32, 24, AMED_HELI_LOWER, DIR_NW), // 13 Taxi to right outside depot
AMD( 8, 24, AMED_EXACTPOS, DIR_NW), // 14 - on helipad1
AMD( 24, 28, AMED_HELI_RAISE, DIR_N ), // 15 Takeoff right outside depot
AMD( 8, 24, AMED_HELI_RAISE, DIR_SW), // 16 - Take off (play sound)
AMD( 8, 24, AMED_SLOWTURN | AMED_EXACTPOS, DIR_E ), // 17 - turn on helipad1 for takeoff
};
/** HeliDepot 2x2 (heliport). */
static const AirportMovingData _airport_moving_data_helistation[33] = {
AMD( 8, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar2
AMD( 8, 22, 0, DIR_N ), // 01 outside hangar 2
AMD( 116, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 02 Fly to landing position in air
AMD( 14, 22, AMED_HELI_RAISE, DIR_N ), // 03 Helitakeoff outside hangar1(play sound)
AMD( 24, 22, 0, DIR_N ), // 04 taxiing
AMD( 40, 22, 0, DIR_N ), // 05 taxiing
AMD( 40, 8, AMED_EXACTPOS, DIR_NE), // 06 Helipad 1
AMD( 56, 8, AMED_EXACTPOS, DIR_NE), // 07 Helipad 2
AMD( 56, 24, AMED_EXACTPOS, DIR_NE), // 08 Helipad 3
AMD( 40, 8, AMED_EXACTPOS, DIR_N ), // 09 pre-helitakeoff helipad 1
AMD( 56, 8, AMED_EXACTPOS, DIR_N ), // 10 pre-helitakeoff helipad 2
AMD( 56, 24, AMED_EXACTPOS, DIR_N ), // 11 pre-helitakeoff helipad 3
AMD( 32, 8, AMED_HELI_RAISE, DIR_N ), // 12 Takeoff Helipad1
AMD( 48, 8, AMED_HELI_RAISE, DIR_N ), // 13 Takeoff Helipad2
AMD( 48, 24, AMED_HELI_RAISE, DIR_N ), // 14 Takeoff Helipad3
AMD( 84, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 15 Bufferspace before helipad
AMD( 68, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 16 Bufferspace before helipad
AMD( 32, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 17 Get in position for Helipad1
AMD( 48, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 18 Get in position for Helipad2
AMD( 48, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NE), // 19 Get in position for Helipad3
AMD( 40, 8, AMED_HELI_LOWER, DIR_N ), // 20 Land at Helipad1
AMD( 48, 8, AMED_HELI_LOWER, DIR_N ), // 21 Land at Helipad2
AMD( 48, 24, AMED_HELI_LOWER, DIR_N ), // 22 Land at Helipad3
AMD( 0, 22, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 23 Go to position for Hangarentrance in air
AMD( 0, 22, AMED_HELI_LOWER, DIR_N ), // 24 Land in front of hangar
AMD( 148, -8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 25 Fly around waiting for a landing spot (south-east)
AMD( 148, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 26 Fly around waiting for a landing spot (south-west)
AMD( 132, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 27 Fly around waiting for a landing spot (south-west)
AMD( 100, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 28 Fly around waiting for a landing spot (north-east)
AMD( 84, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 29 Fly around waiting for a landing spot (south-east)
AMD( 84, -8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 30 Fly around waiting for a landing spot (south-west)
AMD( 100, -24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 31 Fly around waiting for a landing spot (north-west)
AMD( 132, -24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 32 Fly around waiting for a landing spot (north-east)
};
/** Oilrig. */
static const AirportMovingData _airport_moving_data_oilrig[9] = {
AMD( 31, 9, AMED_EXACTPOS, DIR_NE), // 0 - At oilrig terminal
AMD( 28, 9, AMED_HELI_RAISE, DIR_N ), // 1 - Take off (play sound)
AMD( 23, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 2 - In position above landing spot helicopter
AMD( 23, 9, AMED_HELI_LOWER, DIR_N ), // 3 - Land
AMD( 28, 9, 0, DIR_N ), // 4 - Goto terminal on ground
AMD( -31, 69, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 5 - circle #1 (north-east)
AMD( -31, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 6 - circle #2 (north-west)
AMD( 69, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 7 - circle #3 (south-west)
AMD( 69, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 8 - circle #4 (south)
};
#undef AMD
///////////////////////////////////////////////////////////////////////
/////**********Movement Machine on Airports*********************///////
static const byte _airport_entries_dummy[] = {0, 1, 2, 3};
static const AirportFTAbuildup _airport_fta_dummy[] = {
{ 0, 0, 0, 3},
{ 1, 0, 0, 0},
{ 2, 0, 0, 1},
{ 3, 0, 0, 2},
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
/* First element of terminals array tells us how many depots there are (to know size of array)
* this may be changed later when airports are moved to external file */
static const HangarTileTable _airport_depots_country[] = { {{3, 0}, DIR_SE, 0} };
static const byte _airport_terminal_country[] = {1, 2};
static const byte _airport_entries_country[] = {16, 15, 18, 17};
static const AirportFTAbuildup _airport_fta_country[] = {
{ 0, HANGAR, NOTHING_block, 1 },
{ 1, 255, AIRPORT_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM1, TERM1_block, 2 }, { 1, TERM2, 0, 4 }, { 1, HELITAKEOFF, 0, 19 }, { 1, 0, 0, 6 },
{ 2, TERM1, TERM1_block, 1 },
{ 3, TERM2, TERM2_block, 5 },
{ 4, 255, AIRPORT_BUSY_block, 0 }, { 4, TERM2, 0, 5 }, { 4, HANGAR, 0, 1 }, { 4, TAKEOFF, 0, 6 }, { 4, HELITAKEOFF, 0, 1 },
{ 5, 255, AIRPORT_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, 0, 0, 4 },
{ 6, 0, AIRPORT_BUSY_block, 7 },
/* takeoff */
{ 7, TAKEOFF, AIRPORT_BUSY_block, 8 },
{ 8, STARTTAKEOFF, NOTHING_block, 9 },
{ 9, ENDTAKEOFF, NOTHING_block, 0 },
/* landing */
{ 10, FLYING, NOTHING_block, 15 }, { 10, LANDING, 0, 11 }, { 10, HELILANDING, 0, 20 },
{ 11, LANDING, AIRPORT_BUSY_block, 12 },
{ 12, 0, AIRPORT_BUSY_block, 13 },
{ 13, ENDLANDING, AIRPORT_BUSY_block, 14 }, { 13, TERM2, 0, 5 }, { 13, 0, 0, 14 },
{ 14, 0, AIRPORT_BUSY_block, 1 },
/* In air */
{ 15, 0, NOTHING_block, 16 },
{ 16, 0, NOTHING_block, 17 },
{ 17, 0, NOTHING_block, 18 },
{ 18, 0, NOTHING_block, 10 },
{ 19, HELITAKEOFF, NOTHING_block, 0 },
{ 20, HELILANDING, AIRPORT_BUSY_block, 21 },
{ 21, HELIENDLANDING, AIRPORT_BUSY_block, 1 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
static const HangarTileTable _airport_depots_commuter[] = { {{4, 0}, DIR_SE, 0} };
static const byte _airport_terminal_commuter[] = { 1, 3 };
static const byte _airport_entries_commuter[] = {22, 21, 24, 23};
static const AirportFTAbuildup _airport_fta_commuter[] = {
{ 0, HANGAR, NOTHING_block, 1 }, { 0, HELITAKEOFF, HELIPAD2_block, 1 }, { 0, 0, 0, 1 },
{ 1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TAKEOFF, 0, 11 }, { 1, TERM1, TAXIWAY_BUSY_block, 10 }, { 1, TERM2, TAXIWAY_BUSY_block, 10 }, { 1, TERM3, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD1, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD2, TAXIWAY_BUSY_block, 10 }, { 1, HELITAKEOFF, TAXIWAY_BUSY_block, 10 }, { 1, 0, 0, 0 },
{ 2, 255, AIRPORT_ENTRANCE_block, 2 }, { 2, HANGAR, 0, 8 }, { 2, TERM1, 0, 8 }, { 2, TERM2, 0, 8 }, { 2, TERM3, 0, 8 }, { 2, HELIPAD1, 0, 8 }, { 2, HELIPAD2, 0, 8 }, { 2, HELITAKEOFF, 0, 8 }, { 2, 0, 0, 2 },
{ 3, TERM1, TERM1_block, 8 }, { 3, HANGAR, 0, 8 }, { 3, TAKEOFF, 0, 8 }, { 3, 0, 0, 3 },
{ 4, TERM2, TERM2_block, 9 }, { 4, HANGAR, 0, 9 }, { 4, TAKEOFF, 0, 9 }, { 4, 0, 0, 4 },
{ 5, TERM3, TERM3_block, 10 }, { 5, HANGAR, 0, 10 }, { 5, TAKEOFF, 0, 10 }, { 5, 0, 0, 5 },
{ 6, HELIPAD1, HELIPAD1_block, 6 }, { 6, HANGAR, TAXIWAY_BUSY_block, 9 }, { 6, HELITAKEOFF, 0, 35 },
{ 7, HELIPAD2, HELIPAD2_block, 7 }, { 7, HANGAR, TAXIWAY_BUSY_block, 10 }, { 7, HELITAKEOFF, 0, 36 },
{ 8, 255, TAXIWAY_BUSY_block, 8 }, { 8, TAKEOFF, TAXIWAY_BUSY_block, 9 }, { 8, HANGAR, TAXIWAY_BUSY_block, 9 }, { 8, TERM1, TERM1_block, 3 }, { 8, 0, TAXIWAY_BUSY_block, 9 },
{ 9, 255, TAXIWAY_BUSY_block, 9 }, { 9, TAKEOFF, TAXIWAY_BUSY_block, 10 }, { 9, HANGAR, TAXIWAY_BUSY_block, 10 }, { 9, TERM2, TERM2_block, 4 }, { 9, HELIPAD1, HELIPAD1_block, 6 }, { 9, HELITAKEOFF, HELIPAD1_block, 6 }, { 9, TERM1, TAXIWAY_BUSY_block, 8 }, { 9, 0, TAXIWAY_BUSY_block, 10 },
{ 10, 255, TAXIWAY_BUSY_block, 10 }, { 10, TERM3, TERM3_block, 5 }, { 10, HELIPAD1, 0, 9 }, { 10, HELIPAD2, HELIPAD2_block, 7 }, { 10, HELITAKEOFF, HELIPAD2_block, 7 }, { 10, TAKEOFF, TAXIWAY_BUSY_block, 1 }, { 10, HANGAR, TAXIWAY_BUSY_block, 1 }, { 10, 0, TAXIWAY_BUSY_block, 9 },
{ 11, 0, OUT_WAY_block, 12 },
/* takeoff */
{ 12, TAKEOFF, RUNWAY_IN_OUT_block, 13 },
{ 13, 0, RUNWAY_IN_OUT_block, 14 },
{ 14, STARTTAKEOFF, RUNWAY_IN_OUT_block, 15 },
{ 15, ENDTAKEOFF, NOTHING_block, 0 },
/* landing */
{ 16, FLYING, NOTHING_block, 21 }, { 16, LANDING, IN_WAY_block, 17 }, { 16, HELILANDING, 0, 25 },
{ 17, LANDING, RUNWAY_IN_OUT_block, 18 },
{ 18, 0, RUNWAY_IN_OUT_block, 19 },
{ 19, 0, RUNWAY_IN_OUT_block, 20 },
{ 20, ENDLANDING, IN_WAY_block, 2 },
/* In Air */
{ 21, 0, NOTHING_block, 22 },
{ 22, 0, NOTHING_block, 23 },
{ 23, 0, NOTHING_block, 24 },
{ 24, 0, NOTHING_block, 16 },
/* Helicopter -- stay in air in special place as a buffer to choose from helipads */
{ 25, HELILANDING, PRE_HELIPAD_block, 26 },
{ 26, HELIENDLANDING, PRE_HELIPAD_block, 26 }, { 26, HELIPAD1, 0, 27 }, { 26, HELIPAD2, 0, 28 }, { 26, HANGAR, 0, 33 },
{ 27, 0, NOTHING_block, 29 }, // helipad1 approach
{ 28, 0, NOTHING_block, 30 },
/* landing */
{ 29, 255, NOTHING_block, 0 }, { 29, HELIPAD1, HELIPAD1_block, 6 },
{ 30, 255, NOTHING_block, 0 }, { 30, HELIPAD2, HELIPAD2_block, 7 },
/* Helicopter -- takeoff */
{ 31, HELITAKEOFF, NOTHING_block, 0 },
{ 32, HELITAKEOFF, NOTHING_block, 0 },
{ 33, 0, TAXIWAY_BUSY_block, 34 }, // need to go to hangar when waiting in air
{ 34, 0, TAXIWAY_BUSY_block, 1 },
{ 35, 0, HELIPAD1_block, 31 },
{ 36, 0, HELIPAD2_block, 32 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
static const HangarTileTable _airport_depots_city[] = { {{5, 0}, DIR_SE, 0} };
static const byte _airport_terminal_city[] = { 1, 3 };
static const byte _airport_entries_city[] = {26, 29, 27, 28};
static const AirportFTAbuildup _airport_fta_city[] = {
{ 0, HANGAR, NOTHING_block, 1 }, { 0, TAKEOFF, OUT_WAY_block, 1 }, { 0, 0, 0, 1 },
{ 1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, 0, 0, 7 }, // for all else, go to 7
{ 2, TERM1, TERM1_block, 7 }, { 2, TAKEOFF, OUT_WAY_block, 7 }, { 2, 0, 0, 7 },
{ 3, TERM2, TERM2_block, 5 }, { 3, TAKEOFF, OUT_WAY_block, 6 }, { 3, 0, 0, 6 },
{ 4, TERM3, TERM3_block, 5 }, { 4, TAKEOFF, OUT_WAY_block, 5 }, { 4, 0, 0, 5 },
{ 5, 255, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, 0, 0, 6 },
{ 6, 255, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, TERM2_block, 3 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, 0, 0, 7 },
{ 7, 255, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, OUT_WAY_block, 8 }, { 7, HELITAKEOFF, 0, 22 }, { 7, HANGAR, 0, 1 }, { 7, 0, 0, 6 },
{ 8, 0, OUT_WAY_block, 9 },
{ 9, 0, RUNWAY_IN_OUT_block, 10 },
/* takeoff */
{ 10, TAKEOFF, RUNWAY_IN_OUT_block, 11 },
{ 11, STARTTAKEOFF, NOTHING_block, 12 },
{ 12, ENDTAKEOFF, NOTHING_block, 0 },
/* landing */
{ 13, FLYING, NOTHING_block, 18 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 23 },
{ 14, LANDING, RUNWAY_IN_OUT_block, 15 },
{ 15, 0, RUNWAY_IN_OUT_block, 17 },
{ 16, 0, RUNWAY_IN_OUT_block, 17 }, // not used, left for compatibility
{ 17, ENDLANDING, IN_WAY_block, 7 },
/* In Air */
{ 18, 0, NOTHING_block, 25 },
{ 19, 0, NOTHING_block, 20 },
{ 20, 0, NOTHING_block, 21 },
{ 21, 0, NOTHING_block, 13 },
/* helicopter */
{ 22, HELITAKEOFF, NOTHING_block, 0 },
{ 23, HELILANDING, IN_WAY_block, 24 },
{ 24, HELIENDLANDING, IN_WAY_block, 17 },
{ 25, 0, NOTHING_block, 20},
{ 26, 0, NOTHING_block, 19},
{ 27, 0, NOTHING_block, 28},
{ 28, 0, NOTHING_block, 19},
{ 29, 0, NOTHING_block, 26},
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
static const HangarTileTable _airport_depots_metropolitan[] = { {{5, 0}, DIR_SE, 0} };
static const byte _airport_terminal_metropolitan[] = { 1, 3 };
static const byte _airport_entries_metropolitan[] = {20, 19, 22, 21};
static const AirportFTAbuildup _airport_fta_metropolitan[] = {
{ 0, HANGAR, NOTHING_block, 1 },
{ 1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, 0, 0, 7 }, // for all else, go to 7
{ 2, TERM1, TERM1_block, 7 },
{ 3, TERM2, TERM2_block, 6 },
{ 4, TERM3, TERM3_block, 5 },
{ 5, 255, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, 0, 0, 6 },
{ 6, 255, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, TERM2_block, 3 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, 0, 0, 7 },
{ 7, 255, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, 0, 8 }, { 7, HELITAKEOFF, 0, 23 }, { 7, HANGAR, 0, 1 }, { 7, 0, 0, 6 },
{ 8, 0, OUT_WAY_block, 9 },
{ 9, 0, RUNWAY_OUT_block, 10 },
/* takeoff */
{ 10, TAKEOFF, RUNWAY_OUT_block, 11 },
{ 11, STARTTAKEOFF, NOTHING_block, 12 },
{ 12, ENDTAKEOFF, NOTHING_block, 0 },
/* landing */
{ 13, FLYING, NOTHING_block, 19 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 25 },
{ 14, LANDING, RUNWAY_IN_block, 15 },
{ 15, 0, RUNWAY_IN_block, 16 },
{ 16, 255, RUNWAY_IN_block, 0 }, { 16, ENDLANDING, IN_WAY_block, 17 },
{ 17, 255, RUNWAY_OUT_block, 0 }, { 17, ENDLANDING, IN_WAY_block, 18 },
{ 18, ENDLANDING, IN_WAY_block, 27 },
/* In Air */
{ 19, 0, NOTHING_block, 20 },
{ 20, 0, NOTHING_block, 21 },
{ 21, 0, NOTHING_block, 22 },
{ 22, 0, NOTHING_block, 13 },
/* helicopter */
{ 23, 0, NOTHING_block, 24 },
{ 24, HELITAKEOFF, NOTHING_block, 0 },
{ 25, HELILANDING, IN_WAY_block, 26 },
{ 26, HELIENDLANDING, IN_WAY_block, 18 },
{ 27, 255, TAXIWAY_BUSY_block, 27 }, { 27, TERM1, TERM1_block, 2 }, { 27, 0, 0, 7 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
static const HangarTileTable _airport_depots_international[] = { {{0, 3}, DIR_SE, 0}, {{6, 1}, DIR_SE, 1} };
static const byte _airport_terminal_international[] = { 2, 3, 3 };
static const byte _airport_entries_international[] = { 38, 37, 40, 39 };
static const AirportFTAbuildup _airport_fta_international[] = {
{ 0, HANGAR, NOTHING_block, 2 }, { 0, 255, TERM_GROUP1_block, 0 }, { 0, 255, TERM_GROUP2_ENTER1_block, 1 }, { 0, HELITAKEOFF, HELIPAD1_block, 2 }, { 0, 0, 0, 2 },
{ 1, HANGAR, NOTHING_block, 3 }, { 1, 255, HANGAR2_AREA_block, 1 }, { 1, HELITAKEOFF, HELIPAD2_block, 3 }, { 1, 0, 0, 3 },
{ 2, 255, AIRPORT_ENTRANCE_block, 0 }, { 2, HANGAR, 0, 0 }, { 2, TERM4, 0, 12 }, { 2, TERM5, 0, 12 }, { 2, TERM6, 0, 12 }, { 2, HELIPAD1, 0, 12 }, { 2, HELIPAD2, 0, 12 }, { 2, HELITAKEOFF, 0, 12 }, { 2, 0, 0, 23 },
{ 3, 255, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, 0, 0, 18 },
{ 4, TERM1, TERM1_block, 23 }, { 4, HANGAR, AIRPORT_ENTRANCE_block, 23 }, { 4, 0, 0, 23 },
{ 5, TERM2, TERM2_block, 24 }, { 5, HANGAR, AIRPORT_ENTRANCE_block, 24 }, { 5, 0, 0, 24 },
{ 6, TERM3, TERM3_block, 25 }, { 6, HANGAR, AIRPORT_ENTRANCE_block, 25 }, { 6, 0, 0, 25 },
{ 7, TERM4, TERM4_block, 16 }, { 7, HANGAR, HANGAR2_AREA_block, 16 }, { 7, 0, 0, 16 },
{ 8, TERM5, TERM5_block, 17 }, { 8, HANGAR, HANGAR2_AREA_block, 17 }, { 8, 0, 0, 17 },
{ 9, TERM6, TERM6_block, 18 }, { 9, HANGAR, HANGAR2_AREA_block, 18 }, { 9, 0, 0, 18 },
{ 10, HELIPAD1, HELIPAD1_block, 10 }, { 10, HANGAR, HANGAR2_AREA_block, 16 }, { 10, HELITAKEOFF, 0, 47 },
{ 11, HELIPAD2, HELIPAD2_block, 11 }, { 11, HANGAR, HANGAR2_AREA_block, 17 }, { 11, HELITAKEOFF, 0, 48 },
{ 12, 0, TERM_GROUP2_ENTER1_block, 13 },
{ 13, 0, TERM_GROUP2_ENTER1_block, 14 },
{ 14, 0, TERM_GROUP2_ENTER2_block, 15 },
{ 15, 0, TERM_GROUP2_ENTER2_block, 16 },
{ 16, 255, TERM_GROUP2_block, 0 }, { 16, TERM4, TERM4_block, 7 }, { 16, HELIPAD1, HELIPAD1_block, 10 }, { 16, HELITAKEOFF, HELIPAD1_block, 10 }, { 16, 0, 0, 17 },
{ 17, 255, TERM_GROUP2_block, 0 }, { 17, TERM5, TERM5_block, 8 }, { 17, TERM4, 0, 16 }, { 17, HELIPAD1, 0, 16 }, { 17, HELIPAD2, HELIPAD2_block, 11 }, { 17, HELITAKEOFF, HELIPAD2_block, 11 }, { 17, 0, 0, 18 },
{ 18, 255, TERM_GROUP2_block, 0 }, { 18, TERM6, TERM6_block, 9 }, { 18, TAKEOFF, 0, 19 }, { 18, HANGAR, HANGAR2_AREA_block, 3 }, { 18, 0, 0, 17 },
{ 19, 0, TERM_GROUP2_EXIT1_block, 20 },
{ 20, 0, TERM_GROUP2_EXIT1_block, 21 },
{ 21, 0, TERM_GROUP2_EXIT2_block, 22 },
{ 22, 0, TERM_GROUP2_EXIT2_block, 26 },
{ 23, 255, TERM_GROUP1_block, 0 }, { 23, TERM1, TERM1_block, 4 }, { 23, HANGAR, AIRPORT_ENTRANCE_block, 2 }, { 23, 0, 0, 24 },
{ 24, 255, TERM_GROUP1_block, 0 }, { 24, TERM2, TERM2_block, 5 }, { 24, TERM1, 0, 23 }, { 24, HANGAR, 0, 23 }, { 24, 0, 0, 25 },
{ 25, 255, TERM_GROUP1_block, 0 }, { 25, TERM3, TERM3_block, 6 }, { 25, TAKEOFF, 0, 26 }, { 25, 0, 0, 24 },
{ 26, 255, TAXIWAY_BUSY_block, 0 }, { 26, TAKEOFF, 0, 27 }, { 26, 0, 0, 25 },
{ 27, 0, OUT_WAY_block, 28 },
/* takeoff */
{ 28, TAKEOFF, OUT_WAY_block, 29 },
{ 29, 0, RUNWAY_OUT_block, 30 },
{ 30, STARTTAKEOFF, NOTHING_block, 31 },
{ 31, ENDTAKEOFF, NOTHING_block, 0 },
/* landing */
{ 32, FLYING, NOTHING_block, 37 }, { 32, LANDING, 0, 33 }, { 32, HELILANDING, 0, 41 },
{ 33, LANDING, RUNWAY_IN_block, 34 },
{ 34, 0, RUNWAY_IN_block, 35 },
{ 35, 0, RUNWAY_IN_block, 36 },
{ 36, ENDLANDING, IN_WAY_block, 36 }, { 36, 255, TERM_GROUP1_block, 0 }, { 36, 255, TERM_GROUP2_ENTER1_block, 1 }, { 36, TERM4, 0, 12 }, { 36, TERM5, 0, 12 }, { 36, TERM6, 0, 12 }, { 36, 0, 0, 2 },
/* In Air */
{ 37, 0, NOTHING_block, 38 },
{ 38, 0, NOTHING_block, 39 },
{ 39, 0, NOTHING_block, 40 },
{ 40, 0, NOTHING_block, 32 },
/* Helicopter -- stay in air in special place as a buffer to choose from helipads */
{ 41, HELILANDING, PRE_HELIPAD_block, 42 },
{ 42, HELIENDLANDING, PRE_HELIPAD_block, 42 }, { 42, HELIPAD1, 0, 43 }, { 42, HELIPAD2, 0, 44 }, { 42, HANGAR, 0, 49 },
{ 43, 0, NOTHING_block, 45 },
{ 44, 0, NOTHING_block, 46 },
/* landing */
{ 45, 255, NOTHING_block, 0 }, { 45, HELIPAD1, HELIPAD1_block, 10 },
{ 46, 255, NOTHING_block, 0 }, { 46, HELIPAD2, HELIPAD2_block, 11 },
/* Helicopter -- takeoff */
{ 47, HELITAKEOFF, NOTHING_block, 0 },
{ 48, HELITAKEOFF, NOTHING_block, 0 },
{ 49, 0, HANGAR2_AREA_block, 50 }, // need to go to hangar when waiting in air
{ 50, 0, HANGAR2_AREA_block, 3 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
/* intercontinental */
static const HangarTileTable _airport_depots_intercontinental[] = { {{0, 5}, DIR_SE, 0}, {{8, 4}, DIR_SE, 1} };
static const byte _airport_terminal_intercontinental[] = { 2, 4, 4 };
static const byte _airport_entries_intercontinental[] = { 44, 43, 46, 45 };
static const AirportFTAbuildup _airport_fta_intercontinental[] = {
{ 0, HANGAR, NOTHING_block, 2 }, { 0, 255, HANGAR1_AREA_block | TERM_GROUP1_block, 0 }, { 0, 255, HANGAR1_AREA_block | TERM_GROUP1_block, 1 }, { 0, TAKEOFF, HANGAR1_AREA_block | TERM_GROUP1_block, 2 }, { 0, 0, 0, 2 },
{ 1, HANGAR, NOTHING_block, 3 }, { 1, 255, HANGAR2_AREA_block, 1 }, { 1, 255, HANGAR2_AREA_block, 0 }, { 1, 0, 0, 3 },
{ 2, 255, HANGAR1_AREA_block, 0 }, { 2, 255, TERM_GROUP1_block, 0 }, { 2, 255, TERM_GROUP1_block, 1 }, { 2, HANGAR, 0, 0 }, { 2, TAKEOFF, TERM_GROUP1_block, 27 }, { 2, TERM5, 0, 26 }, { 2, TERM6, 0, 26 }, { 2, TERM7, 0, 26 }, { 2, TERM8, 0, 26 }, { 2, HELIPAD1, 0, 26 }, { 2, HELIPAD2, 0, 26 }, { 2, HELITAKEOFF, 0, 74 }, { 2, 0, 0, 27 },
{ 3, 255, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, HELITAKEOFF, 0, 75 }, {3, TAKEOFF, 0, 59}, { 3, 0, 0, 20 },
{ 4, TERM1, TERM1_block, 26 }, { 4, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 26 }, { 4, 0, 0, 26 },
{ 5, TERM2, TERM2_block, 27 }, { 5, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 27 }, { 5, 0, 0, 27 },
{ 6, TERM3, TERM3_block, 28 }, { 6, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 28 }, { 6, 0, 0, 28 },
{ 7, TERM4, TERM4_block, 29 }, { 7, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 7, 0, 0, 29 },
{ 8, TERM5, TERM5_block, 18 }, { 8, HANGAR, HANGAR2_AREA_block, 18 }, { 8, 0, 0, 18 },
{ 9, TERM6, TERM6_block, 19 }, { 9, HANGAR, HANGAR2_AREA_block, 19 }, { 9, 0, 0, 19 },
{ 10, TERM7, TERM7_block, 20 }, { 10, HANGAR, HANGAR2_AREA_block, 20 }, { 10, 0, 0, 20 },
{ 11, TERM8, TERM8_block, 21 }, { 11, HANGAR, HANGAR2_AREA_block, 21 }, { 11, 0, 0, 21 },
{ 12, HELIPAD1, HELIPAD1_block, 12 }, { 12, HANGAR, 0, 70 }, { 12, HELITAKEOFF, 0, 72 },
{ 13, HELIPAD2, HELIPAD2_block, 13 }, { 13, HANGAR, 0, 71 }, { 13, HELITAKEOFF, 0, 73 },
{ 14, 0, TERM_GROUP2_ENTER1_block, 15 },
{ 15, 0, TERM_GROUP2_ENTER1_block, 16 },
{ 16, 0, TERM_GROUP2_ENTER2_block, 17 },
{ 17, 0, TERM_GROUP2_ENTER2_block, 18 },
{ 18, 255, TERM_GROUP2_block, 0 }, { 18, TERM5, TERM5_block, 8 }, { 18, TAKEOFF, 0, 19 }, { 18, HELITAKEOFF, HELIPAD1_block, 19 }, { 18, 0, TERM_GROUP2_EXIT1_block, 19 },
{ 19, 255, TERM_GROUP2_block, 0 }, { 19, TERM6, TERM6_block, 9 }, { 19, TERM5, 0, 18 }, { 19, TAKEOFF, 0, 57 }, { 19, HELITAKEOFF, HELIPAD1_block, 20 }, { 19, 0, TERM_GROUP2_EXIT1_block, 20 }, // add exit to runway out 2
{ 20, 255, TERM_GROUP2_block, 0 }, { 20, TERM7, TERM7_block, 10 }, { 20, TERM5, 0, 19 }, { 20, TERM6, 0, 19 }, { 20, HANGAR, HANGAR2_AREA_block, 3 }, { 20, TAKEOFF, 0, 19 }, { 20, 0, TERM_GROUP2_EXIT1_block, 21 },
{ 21, 255, TERM_GROUP2_block, 0 }, { 21, TERM8, TERM8_block, 11 }, { 21, HANGAR, HANGAR2_AREA_block, 20 }, { 21, TERM5, 0, 20 }, { 21, TERM6, 0, 20 }, { 21, TERM7, 0, 20 }, { 21, TAKEOFF, 0, 20 }, { 21, 0, TERM_GROUP2_EXIT1_block, 22 },
{ 22, 255, TERM_GROUP2_block, 0 }, { 22, HANGAR, 0, 21 }, { 22, TERM5, 0, 21 }, { 22, TERM6, 0, 21 }, { 22, TERM7, 0, 21 }, { 22, TERM8, 0, 21 }, { 22, TAKEOFF, 0, 21 }, { 22, 0, 0, 23 },
{ 23, 0, TERM_GROUP2_EXIT1_block, 70 },
{ 24, 0, TERM_GROUP2_EXIT2_block, 25 },
{ 25, 255, TERM_GROUP2_EXIT2_block, 0 }, { 25, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 25, 0, 0, 29 },
{ 26, 255, TERM_GROUP1_block, 0 }, { 26, TERM1, TERM1_block, 4 }, { 26, HANGAR, HANGAR1_AREA_block, 27 }, { 26, TERM5, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM6, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM7, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM8, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELIPAD1, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELIPAD2, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELITAKEOFF, TERM_GROUP2_ENTER1_block, 14 }, { 26, 0, 0, 27 },
{ 27, 255, TERM_GROUP1_block, 0 }, { 27, TERM2, TERM2_block, 5 }, { 27, HANGAR, HANGAR1_AREA_block, 2 }, { 27, TERM1, 0, 26 }, { 27, TERM5, 0, 26 }, { 27, TERM6, 0, 26 }, { 27, TERM7, 0, 26 }, { 27, TERM8, 0, 26 }, { 27, HELIPAD1, 0, 14 }, { 27, HELIPAD2, 0, 14 }, { 27, 0, 0, 28 },
{ 28, 255, TERM_GROUP1_block, 0 }, { 28, TERM3, TERM3_block, 6 }, { 28, HANGAR, HANGAR1_AREA_block, 27 }, { 28, TERM1, 0, 27 }, { 28, TERM2, 0, 27 }, { 28, TERM4, 0, 29 }, { 28, TERM5, 0, 14 }, { 28, TERM6, 0, 14 }, { 28, TERM7, 0, 14 }, { 28, TERM8, 0, 14 }, { 28, HELIPAD1, 0, 14 }, { 28, HELIPAD2, 0, 14 }, { 28, 0, 0, 29 },
{ 29, 255, TERM_GROUP1_block, 0 }, { 29, TERM4, TERM4_block, 7 }, { 29, HANGAR, HANGAR1_AREA_block, 27 }, { 29, TAKEOFF, 0, 30 }, { 29, 0, 0, 28 },
{ 30, 0, OUT_WAY_block2, 31 },
{ 31, 0, OUT_WAY_block, 32 },
/* takeoff */
{ 32, TAKEOFF, RUNWAY_OUT_block, 33 },
{ 33, 0, RUNWAY_OUT_block, 34 },
{ 34, STARTTAKEOFF, NOTHING_block, 35 },
{ 35, ENDTAKEOFF, NOTHING_block, 0 },
/* landing */
{ 36, 0, 0, 0 },
{ 37, LANDING, RUNWAY_IN_block, 38 },
{ 38, 0, RUNWAY_IN_block, 39 },
{ 39, 0, RUNWAY_IN_block, 40 },
{ 40, ENDLANDING, RUNWAY_IN_block, 41 },
{ 41, 0, IN_WAY_block, 42 },
{ 42, 255, IN_WAY_block, 0 }, { 42, 255, TERM_GROUP1_block, 0 }, { 42, 255, TERM_GROUP1_block, 1 }, { 42, HANGAR, 0, 2 }, { 42, 0, 0, 26 },
/* In Air */
{ 43, 0, 0, 44 },
{ 44, FLYING, 0, 45 }, { 44, HELILANDING, 0, 47 }, { 44, LANDING, 0, 69 }, { 44, 0, 0, 45 },
{ 45, 0, 0, 46 },
{ 46, FLYING, 0, 43 }, { 46, LANDING, 0, 76 }, { 46, 0, 0, 43 },
/* Helicopter -- stay in air in special place as a buffer to choose from helipads */
{ 47, HELILANDING, PRE_HELIPAD_block, 48 },
{ 48, HELIENDLANDING, PRE_HELIPAD_block, 48 }, { 48, HELIPAD1, 0, 49 }, { 48, HELIPAD2, 0, 50 }, { 48, HANGAR, 0, 55 },
{ 49, 0, NOTHING_block, 51 },
{ 50, 0, NOTHING_block, 52 },
/* landing */
{ 51, 255, NOTHING_block, 0 }, { 51, HELIPAD1, HELIPAD1_block, 12 }, { 51, HANGAR, 0, 55 }, { 51, 0, 0, 12 },
{ 52, 255, NOTHING_block, 0 }, { 52, HELIPAD2, HELIPAD2_block, 13 }, { 52, HANGAR, 0, 55 }, { 52, 0, 0, 13 },
/* Helicopter -- takeoff */
{ 53, HELITAKEOFF, NOTHING_block, 0 },
{ 54, HELITAKEOFF, NOTHING_block, 0 },
{ 55, 0, HANGAR2_AREA_block, 56 }, // need to go to hangar when waiting in air
{ 56, 0, HANGAR2_AREA_block, 3 },
/* runway 2 out support */
{ 57, 255, OUT_WAY2_block, 0 }, { 57, TAKEOFF, 0, 58 }, { 57, 0, 0, 58 },
{ 58, 0, OUT_WAY2_block, 59 },
{ 59, TAKEOFF, RUNWAY_OUT2_block, 60 }, // takeoff
{ 60, 0, RUNWAY_OUT2_block, 61 },
{ 61, STARTTAKEOFF, NOTHING_block, 62 },
{ 62, ENDTAKEOFF, NOTHING_block, 0 },
/* runway 2 in support */
{ 63, LANDING, RUNWAY_IN2_block, 64 },
{ 64, 0, RUNWAY_IN2_block, 65 },
{ 65, 0, RUNWAY_IN2_block, 66 },
{ 66, ENDLANDING, RUNWAY_IN2_block, 0 }, { 66, 255, 0, 1 }, { 66, 255, 0, 0 }, { 66, 0, 0, 67 },
{ 67, 0, IN_WAY2_block, 68 },
{ 68, 255, IN_WAY2_block, 0 }, { 68, 255, TERM_GROUP2_block, 1 }, { 68, 255, TERM_GROUP1_block, 0 }, { 68, HANGAR, HANGAR2_AREA_block, 22 }, { 68, 0, 0, 22 },
{ 69, 255, RUNWAY_IN2_block, 0 }, { 69, 0, RUNWAY_IN2_block, 63 },
{ 70, 255, TERM_GROUP2_EXIT1_block, 0 }, { 70, HELIPAD1, HELIPAD1_block, 12 }, { 70, HELITAKEOFF, HELIPAD1_block, 12 }, { 70, 0, 0, 71 },
{ 71, 255, TERM_GROUP2_EXIT1_block, 0 }, { 71, HELIPAD2, HELIPAD2_block, 13 }, { 71, HELITAKEOFF, HELIPAD1_block, 12 }, { 71, 0, 0, 24 },
{ 72, 0, HELIPAD1_block, 53 },
{ 73, 0, HELIPAD2_block, 54 },
{ 74, HELITAKEOFF, NOTHING_block, 0 },
{ 75, HELITAKEOFF, NOTHING_block, 0 },
{ 76, 255, RUNWAY_IN_block, 0 }, { 76, 0, RUNWAY_IN_block, 37 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
/* heliports, oilrigs don't have depots */
static const byte _airport_entries_heliport[] = { 7, 7, 7, 7 };
static const AirportFTAbuildup _airport_fta_heliport[] = {
{ 0, HELIPAD1, HELIPAD1_block, 1 },
{ 1, HELITAKEOFF, NOTHING_block, 0 }, // takeoff
{ 2, 255, AIRPORT_BUSY_block, 0 }, { 2, HELILANDING, 0, 3 }, { 2, HELITAKEOFF, 0, 1 },
{ 3, HELILANDING, AIRPORT_BUSY_block, 4 },
{ 4, HELIENDLANDING, AIRPORT_BUSY_block, 4 }, { 4, HELIPAD1, HELIPAD1_block, 0 }, { 4, HELITAKEOFF, 0, 2 },
/* In Air */
{ 5, 0, NOTHING_block, 6 },
{ 6, 0, NOTHING_block, 7 },
{ 7, 0, NOTHING_block, 8 },
{ 8, FLYING, NOTHING_block, 5 }, { 8, HELILANDING, HELIPAD1_block, 2 }, // landing
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
#define _airport_entries_oilrig _airport_entries_heliport
#define _airport_fta_oilrig _airport_fta_heliport
/* helidepots */
static const HangarTileTable _airport_depots_helidepot[] = { {{1, 0}, DIR_SE, 0} };
static const byte _airport_entries_helidepot[] = { 4, 4, 4, 4 };
static const AirportFTAbuildup _airport_fta_helidepot[] = {
{ 0, HANGAR, NOTHING_block, 1 },
{ 1, 255, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELIPAD1, HELIPAD1_block, 14 }, { 1, HELITAKEOFF, 0, 15 }, { 1, 0, 0, 0 },
{ 2, FLYING, NOTHING_block, 3 }, { 2, HELILANDING, PRE_HELIPAD_block, 7 }, { 2, HANGAR, 0, 12 }, { 2, HELITAKEOFF, NOTHING_block, 16 },
/* In Air */
{ 3, 0, NOTHING_block, 4 },
{ 4, 0, NOTHING_block, 5 },
{ 5, 0, NOTHING_block, 6 },
{ 6, 0, NOTHING_block, 2 },
/* Helicopter -- stay in air in special place as a buffer to choose from helipads */
{ 7, HELILANDING, PRE_HELIPAD_block, 8 },
{ 8, HELIENDLANDING, PRE_HELIPAD_block, 8 }, { 8, HELIPAD1, 0, 9 }, { 8, HANGAR, 0, 12 }, { 8, 0, 0, 2 },
{ 9, 0, NOTHING_block, 10 },
/* landing */
{ 10, 255, NOTHING_block, 10 }, { 10, HELIPAD1, HELIPAD1_block, 14 }, { 10, HANGAR, 0, 1 }, { 10, 0, 0, 14 },
/* Helicopter -- takeoff */
{ 11, HELITAKEOFF, NOTHING_block, 0 },
{ 12, 0, HANGAR2_AREA_block, 13 }, // need to go to hangar when waiting in air
{ 13, 0, HANGAR2_AREA_block, 1 },
{ 14, HELIPAD1, HELIPAD1_block, 14 }, { 14, HANGAR, 0, 1 }, { 14, HELITAKEOFF, 0, 17 },
{ 15, HELITAKEOFF, NOTHING_block, 0 }, // takeoff outside depot
{ 16, HELITAKEOFF, 0, 14 },
{ 17, 0, NOTHING_block, 11 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
/* helistation */
static const HangarTileTable _airport_depots_helistation[] = { {{0, 0}, DIR_SE, 0} };
static const byte _airport_entries_helistation[] = { 25, 25, 25, 25 };
static const AirportFTAbuildup _airport_fta_helistation[] = {
{ 0, HANGAR, NOTHING_block, 8 }, { 0, HELIPAD1, 0, 1 }, { 0, HELIPAD2, 0, 1 }, { 0, HELIPAD3, 0, 1 }, { 0, HELITAKEOFF, 0, 1 }, { 0, 0, 0, 0 },
{ 1, 255, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELITAKEOFF, 0, 3 }, { 1, 0, 0, 4 },
/* landing */
{ 2, FLYING, NOTHING_block, 28 }, { 2, HELILANDING, 0, 15 }, { 2, 0, 0, 28 },
/* helicopter side */
{ 3, HELITAKEOFF, NOTHING_block, 0 }, // helitakeoff outside hangar2
{ 4, 255, TAXIWAY_BUSY_block, 0 }, { 4, HANGAR, HANGAR2_AREA_block, 1 }, { 4, HELITAKEOFF, 0, 1 }, { 4, 0, 0, 5 },
{ 5, 255, TAXIWAY_BUSY_block, 0 }, { 5, HELIPAD1, HELIPAD1_block, 6 }, { 5, HELIPAD2, HELIPAD2_block, 7 }, { 5, HELIPAD3, HELIPAD3_block, 8 }, { 5, 0, 0, 4 },
{ 6, HELIPAD1, HELIPAD1_block, 5 }, { 6, HANGAR, HANGAR2_AREA_block, 5 }, { 6, HELITAKEOFF, 0, 9 }, { 6, 0, 0, 6 },
{ 7, HELIPAD2, HELIPAD2_block, 5 }, { 7, HANGAR, HANGAR2_AREA_block, 5 }, { 7, HELITAKEOFF, 0, 10 }, { 7, 0, 0, 7 },
{ 8, HELIPAD3, HELIPAD3_block, 5 }, { 8, HANGAR, HANGAR2_AREA_block, 5 }, { 8, HELITAKEOFF, 0, 11 }, { 8, 0, 0, 8 },
{ 9, 0, HELIPAD1_block, 12 },
{ 10, 0, HELIPAD2_block, 13 },
{ 11, 0, HELIPAD3_block, 14 },
{ 12, HELITAKEOFF, NOTHING_block, 0 },
{ 13, HELITAKEOFF, NOTHING_block, 0 },
{ 14, HELITAKEOFF, NOTHING_block, 0 },
/* heli - in flight moves */
{ 15, HELILANDING, PRE_HELIPAD_block, 16 },
{ 16, HELIENDLANDING, PRE_HELIPAD_block, 16 }, { 16, HELIPAD1, 0, 17 }, { 16, HELIPAD2, 0, 18 }, { 16, HELIPAD3, 0, 19 }, { 16, HANGAR, 0, 23 },
{ 17, 0, NOTHING_block, 20 },
{ 18, 0, NOTHING_block, 21 },
{ 19, 0, NOTHING_block, 22 },
/* heli landing */
{ 20, 255, NOTHING_block, 0 }, { 20, HELIPAD1, HELIPAD1_block, 6 }, { 20, HANGAR, 0, 23 }, { 20, 0, 0, 6 },
{ 21, 255, NOTHING_block, 0 }, { 21, HELIPAD2, HELIPAD2_block, 7 }, { 21, HANGAR, 0, 23 }, { 21, 0, 0, 7 },
{ 22, 255, NOTHING_block, 0 }, { 22, HELIPAD3, HELIPAD3_block, 8 }, { 22, HANGAR, 0, 23 }, { 22, 0, 0, 8 },
{ 23, 0, HANGAR2_AREA_block, 24 }, // need to go to helihangar when waiting in air
{ 24, 0, HANGAR2_AREA_block, 1 },
{ 25, 0, NOTHING_block, 26 },
{ 26, 0, NOTHING_block, 27 },
{ 27, 0, NOTHING_block, 2 },
{ 28, 0, NOTHING_block, 29 },
{ 29, 0, NOTHING_block, 30 },
{ 30, 0, NOTHING_block, 31 },
{ 31, 0, NOTHING_block, 32 },
{ 32, 0, NOTHING_block, 25 },
{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};
#endif /* AIRPORT_MOVEMENT_H */

View File

@@ -0,0 +1,92 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file airporttile_ids.h Enum of the default airport tiles. */
#ifndef AIRPORTTILE_IDS_H
#define AIRPORTTILE_IDS_H
enum AirportTiles {
APT_APRON,
APT_APRON_FENCE_NW,
APT_APRON_FENCE_SW,
APT_STAND,
APT_APRON_W,
APT_APRON_S,
APT_APRON_VER_CROSSING_S,
APT_APRON_HOR_CROSSING_W,
APT_APRON_VER_CROSSING_N,
APT_APRON_HOR_CROSSING_E,
APT_APRON_E,
APT_ARPON_N,
APT_APRON_HOR,
APT_APRON_N_FENCE_SW,
APT_RUNWAY_1,
APT_RUNWAY_2,
APT_RUNWAY_3,
APT_RUNWAY_4,
APT_RUNWAY_END_FENCE_SE,
APT_BUILDING_2,
APT_TOWER_FENCE_SW,
APT_ROUND_TERMINAL,
APT_BUILDING_3,
APT_BUILDING_1,
APT_DEPOT_SE,
APT_STAND_1,
APT_STAND_PIER_NE,
APT_PIER_NW_NE,
APT_PIER,
APT_EMPTY,
APT_EMPTY_FENCE_NE,
APT_RADAR_GRASS_FENCE_SW,
APT_RADIO_TOWER_FENCE_NE,
APT_SMALL_BUILDING_3,
APT_SMALL_BUILDING_2,
APT_SMALL_BUILDING_1,
APT_GRASS_FENCE_SW,
APT_GRASS_2,
APT_GRASS_1,
APT_GRASS_FENCE_NE_FLAG,
APT_RUNWAY_SMALL_NEAR_END,
APT_RUNWAY_SMALL_MIDDLE,
APT_RUNWAY_SMALL_FAR_END,
APT_SMALL_DEPOT_SE,
APT_HELIPORT,
APT_RUNWAY_END,
APT_RUNWAY_5,
APT_TOWER,
APT_APRON_FENCE_NE,
APT_RUNWAY_END_FENCE_NW,
APT_RUNWAY_FENCE_NW,
APT_RADAR_FENCE_SW,
APT_RADAR_FENCE_NE,
APT_HELIPAD_1,
APT_HELIPAD_2_FENCE_NW,
APT_HELIPAD_2,
APT_APRON_FENCE_NE_SW,
APT_RUNWAY_END_FENCE_NW_SW,
APT_RUNWAY_END_FENCE_SE_SW,
APT_RUNWAY_END_FENCE_NE_NW,
APT_RUNWAY_END_FENCE_NE_SE,
APT_HELIPAD_2_FENCE_NE_SE,
APT_APRON_FENCE_SE_SW,
APT_LOW_BUILDING_FENCE_N,
APT_LOW_BUILDING_FENCE_NW,
APT_APRON_FENCE_SE,
APT_HELIPAD_3_FENCE_SE_SW,
APT_HELIPAD_3_FENCE_NW_SW,
APT_HELIPAD_3_FENCE_NW,
APT_LOW_BUILDING,
APT_APRON_FENCE_NE_SE,
APT_APRON_HALF_EAST,
APT_APRON_HALF_WEST,
APT_GRASS_FENCE_NE_FLAG_2,
};
#endif /* AIRPORTTILE_IDS_H */

114
src/table/airporttiles.h Normal file
View File

@@ -0,0 +1,114 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file airporttiles.h Tables with airporttile defaults. */
#ifndef AIRPORTTILES_H
#define AIRPORTTILES_H
/** Writes all airport tile properties in the AirportTile struct */
#define AT(num_frames, anim_speed) {{num_frames, ANIM_STATUS_LOOPING, anim_speed, 0}, STR_NULL, 0, 0, true, GRFFileProps(INVALID_AIRPORTTILE)}
/** Writes an airport tile without animation in the AirportTile struct */
#define AT_NOANIM {{0, ANIM_STATUS_NO_ANIMATION, 2, 0}, STR_NULL, 0, 0, true, GRFFileProps(INVALID_AIRPORTTILE)}
/**
* All default airport tiles.
* @see AirportTiles for a list of names.
*/
static const AirportTileSpec _origin_airporttile_specs[] = {
/* 0..9 */
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT(11, 2), // APT_RADAR_GRASS_FENCE_SW
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT(3, 1), // APT_GRASS_FENCE_NE_FLAG
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT(11, 2), // APT_RADAR_FENCE_SW
AT(11, 2), // APT_RADAR_FENCE_NE
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT_NOANIM,
AT(3, 1), // APT_GRASS_FENCE_NE_FLAG_2
};
assert_compile(NEW_AIRPORTTILE_OFFSET == lengthof(_origin_airporttile_specs));
#undef AT_NOANIM
#undef AT
#endif /* AIRPORTTILES_H */

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

@@ -0,0 +1,93 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @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.
*/
/**
* 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() ANIM_CURSOR_LINE(AnimCursor::LAST, 0)
/**
* Animated cursor elements for demolition
*/
static const AnimCursor _demolish_animcursor[] = {
ANIM_CURSOR_LINE(SPR_CURSOR_DEMOLISH_FIRST, 8)
ANIM_CURSOR_LINE(SPR_CURSOR_DEMOLISH_1, 8)
ANIM_CURSOR_LINE(SPR_CURSOR_DEMOLISH_2, 8)
ANIM_CURSOR_LINE(SPR_CURSOR_DEMOLISH_LAST, 8)
ANIM_CURSOR_END()
};
/**
* Animated cursor elements for lower land
*/
static const AnimCursor _lower_land_animcursor[] = {
ANIM_CURSOR_LINE(SPR_CURSOR_LOWERLAND_FIRST, 10)
ANIM_CURSOR_LINE(SPR_CURSOR_LOWERLAND_1, 10)
ANIM_CURSOR_LINE(SPR_CURSOR_LOWERLAND_LAST, 29)
ANIM_CURSOR_END()
};
/**
* Animated cursor elements for raise land
*/
static const AnimCursor _raise_land_animcursor[] = {
ANIM_CURSOR_LINE(SPR_CURSOR_RAISELAND_FIRST, 10)
ANIM_CURSOR_LINE(SPR_CURSOR_RAISELAND_1, 10)
ANIM_CURSOR_LINE(SPR_CURSOR_RAISELAND_LAST, 29)
ANIM_CURSOR_END()
};
/**
* Animated cursor elements for the goto icon
*/
static const AnimCursor _order_goto_animcursor[] = {
ANIM_CURSOR_LINE(SPR_CURSOR_PICKSTATION_FIRST, 10)
ANIM_CURSOR_LINE(SPR_CURSOR_PICKSTATION_1, 10)
ANIM_CURSOR_LINE(SPR_CURSOR_PICKSTATION_LAST, 29)
ANIM_CURSOR_END()
};
/**
* Animated cursor elements for the build signal icon
*/
static const AnimCursor _build_signals_animcursor[] = {
ANIM_CURSOR_LINE(SPR_CURSOR_BUILDSIGNALS_FIRST, 20)
ANIM_CURSOR_LINE(SPR_CURSOR_BUILDSIGNALS_LAST, 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 AnimCursor * const _animcursors[] = {
_demolish_animcursor,
_lower_land_animcursor,
_raise_land_animcursor,
_order_goto_animcursor,
_build_signals_animcursor
};

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

@@ -0,0 +1,81 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file autorail.h Highlight/sprite information for autorail. */
/* Rail selection types (directions):
* / \ / \ / \ / \ / \ / \
* / /\ /\ \ /===\ / \ /| \ / |\
* \/ / \ \/ \ / \===/ \| / \ |/
* \ / \ / \ / \ / \ / \ /
* 0 1 2 3 4 5
*/
/* mark invalid tiles red */
#define RED(c) -c
/* 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 HighLightStyle _autorail_piece[][16] = {
{ HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR },
{ HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR },
{ HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR },
{ HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR },
{ HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR },
{ HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_HU, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR, HT_DIR_VR },
{ HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y },
{ HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_X, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y },
{ HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_X, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y },
{ HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y, HT_DIR_Y },
{ HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL },
{ HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL },
{ HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL },
{ HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL },
{ HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL },
{ HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_VL, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_X, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL, HT_DIR_HL }
};

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

@@ -0,0 +1,801 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file bridge_land.h This file contains all the sprites for bridges
* It consists of a number of arrays.
* <ul><li>_bridge_sprite_table_n_m. Defines all the sprites of a bridge besides the pylons.
* n defines the number of the bridge type, m the number of the section. the highest m for
* each bridge set defines the heads.<br>
* Sprites for middle sections are arranged in groups of four, the elements are:
* <ol><li>Element containing the track. This element is logically behind the vehicle.</li>
* <li>Element containing the structure that is logically between the vehicle and the camera</li>
* <li>Element containing the pylons.</li></ol>
* First group is for railway in X direction, second for railway in Y direction, two groups each follow for road, monorail and maglev<p>
* <br>Elements for heads are arranged in groups of eight:
* <ol><li>X direction, north end, flat</li>
* <li>Y direction, north end, flat</li>
* <li>X direction, south end, flat</li>
* <li>Y direction, south end, flat</li>
* <li>X direction, north end, sloped</li>
* <li>Y direction, north end, sloped</li>
* <li>X direction, south end, sloped</li>
* <li>Y direction, south end, sloped</li></ol>
* This is repeated 4 times, for rail, road, monorail, maglev</li>
* </ul>
*/
# define MN(a) {a, PAL_NONE}
# define MR(a) {a, PALETTE_TO_STRUCT_RED}
# define MW(a) {a, PALETTE_TO_STRUCT_WHITE}
# define MC(a) {a, PALETTE_TO_STRUCT_CONCRETE}
static const PalSpriteID _aqueduct_sprites[] = {
{ SPR_AQUEDUCT_MIDDLE_X, PAL_NONE }, { 0x0, PAL_NONE }, { SPR_AQUEDUCT_PILLAR_X, PAL_NONE }, { 0x0, PAL_NONE },
{ SPR_AQUEDUCT_MIDDLE_Y, PAL_NONE }, { 0x0, PAL_NONE }, { SPR_AQUEDUCT_PILLAR_Y, PAL_NONE }, { 0x0, PAL_NONE },
{ SPR_AQUEDUCT_RAMP_SW, PAL_NONE }, { SPR_AQUEDUCT_RAMP_SE, PAL_NONE }, { SPR_AQUEDUCT_RAMP_NE, PAL_NONE }, { SPR_AQUEDUCT_RAMP_NW, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_0[] = {
{ 0x9A9, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A5, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x99D, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x995, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F2, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10EE, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x111A, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1116, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_1[] = {
{ 0x9AA, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A6, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x99E, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x996, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F3, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10EF, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x111B, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1117, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_2[] = {
{ 0x9AC, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A8, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A2, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x99A, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F5, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F1, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x111D, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1119, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_3[] = {
{ 0x9AB, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A7, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A1, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x999, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F4, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F0, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x111C, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1118, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_4[] = {
{ 0x9B6, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9B5, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9B8, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9B7, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F7, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F6, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x111F, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x111E, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_5[] = {
{ 0x9BD, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BE, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BF, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9C0, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F8, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F9, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1120, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1121, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_4_6[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PAL_NONE }, { 0x990, PAL_NONE }, { 0x98D, PAL_NONE }, { 0x98F, PAL_NONE },
{ 0x992, PAL_NONE }, { 0x994, PAL_NONE }, { 0x991, PAL_NONE }, { 0x993, PAL_NONE },
{ 0x10E7, PAL_NONE }, { 0x10E9, PAL_NONE }, { 0x10E6, PAL_NONE }, { 0x10E8, PAL_NONE },
{ 0x10EB, PAL_NONE }, { 0x10ED, PAL_NONE }, { 0x10EA, PAL_NONE }, { 0x10EC, PAL_NONE },
{ 0x110F, PAL_NONE }, { 0x1111, PAL_NONE }, { 0x110E, PAL_NONE }, { 0x1110, PAL_NONE },
{ 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_0[] = {
{ 0x9A9, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A5, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x99D, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x995, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F2, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10EE, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x111A, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x1116, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_1[] = {
{ 0x9AA, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A6, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x99E, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x996, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F3, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10EF, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x111B, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x1117, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_2[] = {
{ 0x9AC, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A8, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A2, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x99A, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F5, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F1, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x111D, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x1119, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_3[] = {
{ 0x9AB, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A7, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A1, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x999, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F4, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F0, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x111C, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x1118, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_4[] = {
{ 0x9B6, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9B5, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9B8, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9B7, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F7, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x10F6, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x111F, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x111E, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_5[] = {
{ 0x9BD, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BE, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BF, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9C0, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F8, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10F9, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1120, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1121, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_5_6[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 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 },
};
static const PalSpriteID _bridge_sprite_table_6_0[] = {
{ 0x9CD, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CE, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D3, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D4, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FC, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FD, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1124, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1125, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_6_1[] = {
{ 0x9CB, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D0, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D1, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D6, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FA, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FF, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1122, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1127, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_6_2[] = {
{ 0x9CC, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CF, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D2, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D5, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FB, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FE, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1123, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1126, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_6_3[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PAL_NONE }, { 0x990, PAL_NONE }, { 0x98D, PAL_NONE }, { 0x98F, PAL_NONE },
{ 0x992, PAL_NONE }, { 0x994, PAL_NONE }, { 0x991, PAL_NONE }, { 0x993, PAL_NONE },
{ 0x10E7, PAL_NONE }, { 0x10E9, PAL_NONE }, { 0x10E6, PAL_NONE }, { 0x10E8, PAL_NONE },
{ 0x10EB, PAL_NONE }, { 0x10ED, PAL_NONE }, { 0x10EA, PAL_NONE }, { 0x10EC, PAL_NONE },
{ 0x110F, PAL_NONE }, { 0x1111, PAL_NONE }, { 0x110E, PAL_NONE }, { 0x1110, PAL_NONE },
{ 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_7_0[] = {
{ 0x9CD, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CE, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D3, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D4, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FC, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FD, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1124, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1125, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_7_1[] = {
{ 0x9CB, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D0, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D1, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D6, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x10FA, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x10FF, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x1122, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x1127, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_7_2[] = {
{ 0x9CC, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9CF, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D2, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D5, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x10FB, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x10FE, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x1123, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x1126, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_7_3[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 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, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CE, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D3, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D4, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FC, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x10FD, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1124, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1125, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_8_1[] = {
{ 0x9CB, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D0, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D1, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D6, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x10FA, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x10FF, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x1122, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x1127, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_8_2[] = {
{ 0x9CC, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9CF, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D2, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D5, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x10FB, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x10FE, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x1123, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x1126, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_8_3[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 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_wood_middle[] = {
MN( SPR_BTWDN_RAIL_X_REAR ), MN( SPR_BTWDN_X_FRONT ), MN( SPR_BTWDN_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_RAIL_Y_REAR ), MN( SPR_BTWDN_Y_FRONT ), MN( SPR_BTWDN_Y_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_ROAD_X_REAR ), MN( SPR_BTWDN_X_FRONT ), MN( SPR_BTWDN_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_ROAD_Y_REAR ), MN( SPR_BTWDN_Y_FRONT ), MN( SPR_BTWDN_Y_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_MONO_X_REAR ), MN( SPR_BTWDN_X_FRONT ), MN( SPR_BTWDN_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_MONO_Y_REAR ), MN( SPR_BTWDN_Y_FRONT ), MN( SPR_BTWDN_Y_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_MGLV_X_REAR ), MN( SPR_BTWDN_X_FRONT ), MN( SPR_BTWDN_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTWDN_MGLV_Y_REAR ), MN( SPR_BTWDN_Y_FRONT ), MN( SPR_BTWDN_Y_PILLAR ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_wood_heads[] = {
MN( SPR_BTWDN_RAIL_X_SLOPE_UP ), MN( SPR_BTWDN_RAIL_Y_SLOPE_UP ), MN( SPR_BTWDN_RAIL_X_SLOPE_DOWN ), MN( SPR_BTWDN_RAIL_Y_SLOPE_DOWN ),
MN( SPR_BTWDN_RAIL_RAMP_X_DOWN ), MN( SPR_BTWDN_RAIL_RAMP_Y_DOWN ), MN( SPR_BTWDN_RAIL_RAMP_X_UP ), MN( SPR_BTWDN_RAIL_RAMP_Y_UP ),
MN( SPR_BTWDN_ROAD_X_SLOPE_UP ), MN( SPR_BTWDN_ROAD_Y_SLOPE_UP ), MN( SPR_BTWDN_ROAD_X_SLOPE_DOWN ), MN( SPR_BTWDN_ROAD_Y_SLOPE_DOWN ),
MN( SPR_BTWDN_ROAD_RAMP_X_DOWN ), MN( SPR_BTWDN_ROAD_RAMP_Y_DOWN ), MN( SPR_BTWDN_ROAD_RAMP_X_UP ), MN( SPR_BTWDN_ROAD_RAMP_Y_UP ),
MN( SPR_BTWDN_MONO_X_SLOPE_UP ), MN( SPR_BTWDN_MONO_Y_SLOPE_UP ), MN( SPR_BTWDN_MONO_X_SLOPE_DOWN ), MN( SPR_BTWDN_MONO_Y_SLOPE_DOWN ),
MN( SPR_BTWDN_MONO_RAMP_X_DOWN ), MN( SPR_BTWDN_MONO_RAMP_Y_DOWN ), MN( SPR_BTWDN_MONO_RAMP_X_UP ), MN( SPR_BTWDN_MONO_RAMP_Y_UP ),
MN( SPR_BTWDN_MGLV_X_SLOPE_UP ), MN( SPR_BTWDN_MGLV_Y_SLOPE_UP ), MN( SPR_BTWDN_MGLV_X_SLOPE_DOWN ), MN( SPR_BTWDN_MGLV_Y_SLOPE_DOWN ),
MN( SPR_BTWDN_MGLV_RAMP_X_DOWN ), MN( SPR_BTWDN_MGLV_RAMP_Y_DOWN ), MN( SPR_BTWDN_MGLV_RAMP_X_UP ), MN( SPR_BTWDN_MGLV_RAMP_Y_UP ),
};
static const PalSpriteID _bridge_sprite_table_concrete_middle[] = {
MR( SPR_BTCON_RAIL_X ), MR( SPR_BTCON_X_FRONT ), MN( SPR_BTCON_X_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_RAIL_Y ), MR( SPR_BTCON_Y_FRONT ), MN( SPR_BTCON_Y_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_ROAD_X ), MR( SPR_BTCON_X_FRONT ), MN( SPR_BTCON_X_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_ROAD_Y ), MR( SPR_BTCON_Y_FRONT ), MN( SPR_BTCON_Y_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_MONO_X ), MR( SPR_BTCON_X_FRONT ), MN( SPR_BTCON_X_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_MONO_Y ), MR( SPR_BTCON_Y_FRONT ), MN( SPR_BTCON_Y_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_MGLV_X ), MR( SPR_BTCON_X_FRONT ), MN( SPR_BTCON_X_PILLAR ), MN( 0x0 ),
MR( SPR_BTCON_MGLV_Y ), MR( SPR_BTCON_Y_FRONT ), MN( SPR_BTCON_Y_PILLAR ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_heads[] = {
MN( SPR_BTGEN_RAIL_X_SLOPE_UP ), MN( SPR_BTGEN_RAIL_Y_SLOPE_UP ), MN( SPR_BTGEN_RAIL_X_SLOPE_DOWN ), MN( SPR_BTGEN_RAIL_Y_SLOPE_DOWN ),
MN( SPR_BTGEN_RAIL_RAMP_X_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_Y_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_X_UP ), MN( SPR_BTGEN_RAIL_RAMP_Y_UP ),
MR( SPR_BTGEN_ROAD_X_SLOPE_UP ), MR( SPR_BTGEN_ROAD_Y_SLOPE_UP ), MR( SPR_BTGEN_ROAD_X_SLOPE_DOWN ), MR( SPR_BTGEN_ROAD_Y_SLOPE_DOWN ),
MR( SPR_BTGEN_ROAD_RAMP_X_DOWN ), MR( SPR_BTGEN_ROAD_RAMP_Y_DOWN ), MR( SPR_BTGEN_ROAD_RAMP_X_UP ), MR( SPR_BTGEN_ROAD_RAMP_Y_UP ),
MR( SPR_BTGEN_MONO_X_SLOPE_UP ), MR( SPR_BTGEN_MONO_Y_SLOPE_UP ), MR( SPR_BTGEN_MONO_X_SLOPE_DOWN ), MR( SPR_BTGEN_MONO_Y_SLOPE_DOWN ),
MR( SPR_BTGEN_MONO_RAMP_X_DOWN ), MR( SPR_BTGEN_MONO_RAMP_Y_DOWN ), MR( SPR_BTGEN_MONO_RAMP_X_UP ), MR( SPR_BTGEN_MONO_RAMP_Y_UP ),
MR( SPR_BTGEN_MGLV_X_SLOPE_UP ), MR( SPR_BTGEN_MGLV_Y_SLOPE_UP ), MR( SPR_BTGEN_MGLV_X_SLOPE_DOWN ), MR( SPR_BTGEN_MGLV_Y_SLOPE_DOWN ),
MR( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MR( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MR( SPR_BTGEN_MGLV_RAMP_X_UP ), MR( SPR_BTGEN_MGLV_RAMP_Y_UP ),
};
static const PalSpriteID _bridge_sprite_table_archgirder_middle[] = {
MN( SPR_BTSGA_RAIL_X_REAR ), MN( SPR_BTSGA_X_FRONT ), MN( SPR_BTSGA_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_RAIL_Y_REAR ), MN( SPR_BTSGA_Y_FRONT ), MN( SPR_BTSGA_Y_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_ROAD_X_REAR ), MN( SPR_BTSGA_X_FRONT ), MN( SPR_BTSGA_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_ROAD_Y_REAR ), MN( SPR_BTSGA_Y_FRONT ), MN( SPR_BTSGA_Y_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_MONO_X_REAR ), MN( SPR_BTSGA_X_FRONT ), MN( SPR_BTSGA_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_MONO_Y_REAR ), MN( SPR_BTSGA_Y_FRONT ), MN( SPR_BTSGA_Y_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_MGLV_X_REAR ), MN( SPR_BTSGA_X_FRONT ), MN( SPR_BTSGA_X_PILLAR ), MN( 0x0 ),
MN( SPR_BTSGA_MGLV_Y_REAR ), MN( SPR_BTSGA_Y_FRONT ), MN( SPR_BTSGA_Y_PILLAR ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_archgirder_heads[] = {
MN( SPR_BTGEN_RAIL_X_SLOPE_UP ), MN( SPR_BTGEN_RAIL_Y_SLOPE_UP ), MN( SPR_BTGEN_RAIL_X_SLOPE_DOWN ), MN( SPR_BTGEN_RAIL_Y_SLOPE_DOWN ),
MN( SPR_BTGEN_RAIL_RAMP_X_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_Y_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_X_UP ), MN( SPR_BTGEN_RAIL_RAMP_Y_UP ),
MW( SPR_BTGEN_ROAD_X_SLOPE_UP ), MW( SPR_BTGEN_ROAD_Y_SLOPE_UP ), MW( SPR_BTGEN_ROAD_X_SLOPE_DOWN ), MW( SPR_BTGEN_ROAD_Y_SLOPE_DOWN ),
MW( SPR_BTGEN_ROAD_RAMP_X_DOWN ), MW( SPR_BTGEN_ROAD_RAMP_Y_DOWN ), MW( SPR_BTGEN_ROAD_RAMP_X_UP ), MW( SPR_BTGEN_ROAD_RAMP_Y_UP ),
MW( SPR_BTGEN_MONO_X_SLOPE_UP ), MW( SPR_BTGEN_MONO_Y_SLOPE_UP ), MW( SPR_BTGEN_MONO_X_SLOPE_DOWN ), MW( SPR_BTGEN_MONO_Y_SLOPE_DOWN ),
MW( SPR_BTGEN_MONO_RAMP_X_DOWN ), MW( SPR_BTGEN_MONO_RAMP_Y_DOWN ), MW( SPR_BTGEN_MONO_RAMP_X_UP ), MW( SPR_BTGEN_MONO_RAMP_Y_UP ),
MW( SPR_BTGEN_MGLV_X_SLOPE_UP ), MW( SPR_BTGEN_MGLV_Y_SLOPE_UP ), MW( SPR_BTGEN_MGLV_X_SLOPE_DOWN ), MW( SPR_BTGEN_MGLV_Y_SLOPE_DOWN ),
MW( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MW( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MW( SPR_BTGEN_MGLV_RAMP_X_UP ), MW( SPR_BTGEN_MGLV_RAMP_Y_UP ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_A[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_B[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_C[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_D[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_E[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_F[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_MONO_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
};
static const PalSpriteID _bridge_sprite_table_concrete_suspended_heads[] = {
MN( SPR_BTGEN_RAIL_X_SLOPE_UP ), MN( SPR_BTGEN_RAIL_Y_SLOPE_UP ), MN( SPR_BTGEN_RAIL_X_SLOPE_DOWN ), MN( SPR_BTGEN_RAIL_Y_SLOPE_DOWN ),
MN( SPR_BTGEN_RAIL_RAMP_X_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_Y_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_X_UP ), MN( SPR_BTGEN_RAIL_RAMP_Y_UP ),
MC( SPR_BTGEN_ROAD_X_SLOPE_UP ), MC( SPR_BTGEN_ROAD_Y_SLOPE_UP ), MC( SPR_BTGEN_ROAD_X_SLOPE_DOWN ), MC( SPR_BTGEN_ROAD_Y_SLOPE_DOWN ),
MC( SPR_BTGEN_ROAD_RAMP_X_DOWN ), MC( SPR_BTGEN_ROAD_RAMP_Y_DOWN ), MC( SPR_BTGEN_ROAD_RAMP_X_UP ), MC( SPR_BTGEN_ROAD_RAMP_Y_UP ),
MC( SPR_BTGEN_MONO_X_SLOPE_UP ), MC( SPR_BTGEN_MONO_Y_SLOPE_UP ), MC( SPR_BTGEN_MONO_X_SLOPE_DOWN ), MC( SPR_BTGEN_MONO_Y_SLOPE_DOWN ),
MC( SPR_BTGEN_MONO_RAMP_X_DOWN ), MC( SPR_BTGEN_MONO_RAMP_Y_DOWN ), MC( SPR_BTGEN_MONO_RAMP_X_UP ), MC( SPR_BTGEN_MONO_RAMP_Y_UP ),
MC( SPR_BTGEN_MGLV_X_SLOPE_UP ), MC( SPR_BTGEN_MGLV_Y_SLOPE_UP ), MC( SPR_BTGEN_MGLV_X_SLOPE_DOWN ), MC( SPR_BTGEN_MGLV_Y_SLOPE_DOWN ),
MC( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MC( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MC( SPR_BTGEN_MGLV_RAMP_X_UP ), MC( SPR_BTGEN_MGLV_RAMP_Y_UP ),
};
static const PalSpriteID _bridge_sprite_table_9_0[] = {
{ 0x9F9, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9FA, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9FB, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9FC, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x110A, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x110B, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1132, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x1133, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_10_0[] = {
{ 0xA0B, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0C, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA11, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA12, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA17, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA18, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1D, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1E, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_10_1[] = {
{ 0xA09, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0E, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0F, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA14, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA15, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1A, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1B, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA20, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_10_2[] = {
{ 0xA0A, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0D, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA10, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA13, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA16, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA19, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1C, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1F, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_11_0[] = {
{ 0xA0B, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0C, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA11, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA12, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA17, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA18, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1D, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1E, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_11_1[] = {
{ 0xA09, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA0E, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA0F, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA14, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA15, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA1A, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA1B, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA20, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_11_2[] = {
{ 0xA0A, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA0D, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA10, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA13, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA16, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA19, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA1C, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA1F, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_12_0[] = {
{ 0xA0B, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0C, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA11, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA12, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA17, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA18, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1D, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA1E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_12_1[] = {
{ 0xA09, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA0E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA0F, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA14, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA15, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA1A, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA1B, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA20, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
};
static const PalSpriteID _bridge_sprite_table_12_2[] = {
{ 0xA0A, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA0D, PALETTE_TO_STRUCT_CONCRETE }, { 0xA03, PALETTE_TO_STRUCT_CONCRETE }, { 0xA07, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA10, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA13, PALETTE_TO_STRUCT_CONCRETE }, { 0xA03, PALETTE_TO_STRUCT_CONCRETE }, { 0xA07, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA16, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA19, PALETTE_TO_STRUCT_CONCRETE }, { 0xA03, PALETTE_TO_STRUCT_CONCRETE }, { 0xA07, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA1C, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA1F, PALETTE_TO_STRUCT_CONCRETE }, { 0xA03, PALETTE_TO_STRUCT_CONCRETE }, { 0xA07, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
};
static const PalSpriteID * const _bridge_sprite_table_archgirder[] = {
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_heads,
};
static const PalSpriteID * 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 PalSpriteID * 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 PalSpriteID * const _bridge_sprite_table_concrete_suspended[] = {
_bridge_sprite_table_concrete_suspended_A,
_bridge_sprite_table_concrete_suspended_B,
_bridge_sprite_table_concrete_suspended_C,
_bridge_sprite_table_concrete_suspended_D,
_bridge_sprite_table_concrete_suspended_E,
_bridge_sprite_table_concrete_suspended_F,
_bridge_sprite_table_concrete_suspended_heads,
};
static const PalSpriteID * 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 PalSpriteID * 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 PalSpriteID * 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 PalSpriteID * const _bridge_sprite_table_wood[] = {
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_heads,
};
static const PalSpriteID * const _bridge_sprite_table_concrete[] = {
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_heads,
};
static const PalSpriteID * 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 PalSpriteID * 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 PalSpriteID * 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 PalSpriteID * 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_concrete_suspended_heads,
};
static const PalSpriteID * const * const _bridge_sprite_table[MAX_BRIDGES] = {
_bridge_sprite_table_wood,
_bridge_sprite_table_concrete,
_bridge_sprite_table_archgirder,
_bridge_sprite_table_concrete_suspended,
_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
};
/**
* Describes the data that defines each bridge in the game
* @param y year of availability
* @param mnl minimum length (not counting bridge heads)
* @param mxl maximum length (not counting bridge heads)
* @param p price multiplier
* @param mxs maximum speed allowed (1 unit = 1/1.6 mph = 1 km-ish/h)
* @param spr sprite to use in purchase GUI
* @param plt palette for the sprite in purchase GUI
* @param dsc description of the bridge in purchase GUI
* @param nrl description of the rail bridge in query tool
* @param nrd description of the road bridge in query tool
*/
#define MBR(y, mnl, mxl, p, mxs, spr, plt, dsc, nrl, nrd) \
{y, mnl, mxl, p, mxs, spr, plt, dsc, { nrl, nrd }, NULL, 0}
const BridgeSpec _orig_bridge[] = {
/*
year of availability
| minimum length
| | maximum length
| | | price multiplier
| | | | maximum speed
| | | | | sprite to use in GUI
| | | | | | palette in GUI
string with description name on rail name on road
| | | | */
MBR( 0, 0, 0xFFFF, 80, 32, 0xA24, PAL_NONE,
STR_BRIDGE_NAME_WOODEN, STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN, STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN),
MBR( 0, 0, 2, 112, 48, 0xA26, PALETTE_TO_STRUCT_RED,
STR_BRIDGE_NAME_CONCRETE, STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE, STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE),
MBR(1930, 0, 5, 144, 64, 0xA25, PAL_NONE,
STR_BRIDGE_NAME_GIRDER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL),
MBR( 0, 2, 10, 168, 80, 0xA22, PALETTE_TO_STRUCT_CONCRETE,
STR_BRIDGE_NAME_SUSPENSION_CONCRETE, STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE, STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE),
MBR(1930, 3, 0xFFFF, 185, 96, 0xA22, PAL_NONE,
STR_BRIDGE_NAME_SUSPENSION_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL),
MBR(1930, 3, 0xFFFF, 192, 112, 0xA22, PALETTE_TO_STRUCT_YELLOW,
STR_BRIDGE_NAME_SUSPENSION_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL),
MBR(1930, 3, 7, 224, 160, 0xA23, PAL_NONE,
STR_BRIDGE_NAME_CANTILEVER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL),
MBR(1930, 3, 8, 232, 208, 0xA23, PALETTE_TO_STRUCT_BROWN,
STR_BRIDGE_NAME_CANTILEVER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL),
MBR(1930, 3, 9, 248, 240, 0xA23, PALETTE_TO_STRUCT_RED,
STR_BRIDGE_NAME_CANTILEVER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL),
MBR(1930, 0, 2, 240, 256, 0xA27, PAL_NONE,
STR_BRIDGE_NAME_GIRDER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL),
MBR(1995, 2, 0xFFFF, 255, 320, 0xA28, PAL_NONE,
STR_BRIDGE_NAME_TUBULAR_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL),
MBR(2005, 2, 0xFFFF, 380, 512, 0xA28, PALETTE_TO_STRUCT_YELLOW,
STR_BRIDGE_NAME_TUBULAR_STEEL, STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL),
MBR(2010, 2, 0xFFFF, 510, 608, 0xA28, PALETTE_TO_STRUCT_CONCRETE,
STR_BRIDGE_TUBULAR_SILICON, STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL, STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL)
};
#undef MBR
#undef MN
#undef MR
#undef MW
#undef MC

1852
src/table/build_industry.h Normal file

File diff suppressed because it is too large Load Diff

173
src/table/cargo_const.h Normal file
View File

@@ -0,0 +1,173 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file cargo_const.h Table of all default cargo types */
/** Construction macro for a #CargoSpec structure. */
#define MK(bt, label, c, e, f, g, h, fr, te, ks1, ks2, ks3, ks4, ks5, l, m, cmult) \
{bt, label, c, c, e, cmult, f, {g, h}, fr, te, 0, 0, ks1, ks2, ks3, ks4, ks5, l, m, NULL, NULL, 0}
/** Cargo types available by default. */
static const CargoSpec _default_cargo[] = {
MK( 0, 'PASS', 152, 1, 3185, 0, 24, false, TE_PASSENGERS,
STR_CARGO_PLURAL_PASSENGERS, STR_CARGO_SINGULAR_PASSENGER, STR_PASSENGERS, STR_QUANTITY_PASSENGERS, STR_ABBREV_PASSENGERS,
SPR_CARGO_PASSENGER, CC_PASSENGERS, 0x400),
MK( 1, 'COAL', 6, 16, 5916, 7, 255, true, TE_NONE,
STR_CARGO_PLURAL_COAL, STR_CARGO_SINGULAR_COAL, STR_TONS, STR_QUANTITY_COAL, STR_ABBREV_COAL,
SPR_CARGO_COAL, CC_BULK, 0x100),
MK( 2, 'MAIL', 15, 4, 4550, 20, 90, false, TE_MAIL,
STR_CARGO_PLURAL_MAIL, STR_CARGO_SINGULAR_MAIL, STR_BAGS, STR_QUANTITY_MAIL, STR_ABBREV_MAIL,
SPR_CARGO_MAIL, CC_MAIL, 0x200),
/* Oil in temperate and arctic */
MK( 3, 'OIL_', 174, 16, 4437, 25, 255, true, TE_NONE,
STR_CARGO_PLURAL_OIL, STR_CARGO_SINGULAR_OIL, STR_LITERS, STR_QUANTITY_OIL, STR_ABBREV_OIL,
SPR_CARGO_OIL, CC_LIQUID, 0x100),
/* Oil in subtropic */
MK( 3, 'OIL_', 174, 16, 4892, 25, 255, true, TE_NONE,
STR_CARGO_PLURAL_OIL, STR_CARGO_SINGULAR_OIL, STR_LITERS, STR_QUANTITY_OIL, STR_ABBREV_OIL,
SPR_CARGO_OIL, CC_LIQUID, 0x100),
MK( 4, 'LVST', 208, 3, 4322, 4, 18, true, TE_NONE,
STR_CARGO_PLURAL_LIVESTOCK, STR_CARGO_SINGULAR_LIVESTOCK, STR_ITEMS, STR_QUANTITY_LIVESTOCK, STR_ABBREV_LIVESTOCK,
SPR_CARGO_LIVESTOCK, CC_PIECE_GOODS, 0x100),
MK( 5, 'GOOD', 194, 8, 6144, 5, 28, true, TE_GOODS,
STR_CARGO_PLURAL_GOODS, STR_CARGO_SINGULAR_GOODS, STR_CRATES, STR_QUANTITY_GOODS, STR_ABBREV_GOODS,
SPR_CARGO_GOODS, CC_EXPRESS, 0x200),
MK( 6, 'GRAI', 191, 16, 4778, 4, 40, true, TE_NONE,
STR_CARGO_PLURAL_GRAIN, STR_CARGO_SINGULAR_GRAIN, STR_TONS, STR_QUANTITY_GRAIN, STR_ABBREV_GRAIN,
SPR_CARGO_GRAIN, CC_BULK, 0x100),
MK( 6, 'WHEA', 191, 16, 4778, 4, 40, true, TE_NONE,
STR_CARGO_PLURAL_WHEAT, STR_CARGO_SINGULAR_WHEAT, STR_TONS, STR_QUANTITY_WHEAT, STR_ABBREV_WHEAT,
SPR_CARGO_GRAIN, CC_BULK, 0x100),
MK( 6, 'MAIZ', 191, 16, 4322, 4, 40, true, TE_NONE,
STR_CARGO_PLURAL_MAIZE, STR_CARGO_SINGULAR_MAIZE, STR_TONS, STR_QUANTITY_MAIZE, STR_ABBREV_MAIZE,
SPR_CARGO_GRAIN, CC_BULK, 0x100),
/* Wood in temperate and arctic */
MK( 7, 'WOOD', 84, 16, 5005, 15, 255, true, TE_NONE,
STR_CARGO_PLURAL_WOOD, STR_CARGO_SINGULAR_WOOD, STR_TONS, STR_QUANTITY_WOOD, STR_ABBREV_WOOD,
SPR_CARGO_WOOD, CC_PIECE_GOODS, 0x100),
/* Wood in subtropic */
MK( 7, 'WOOD', 84, 16, 7964, 15, 255, true, TE_NONE,
STR_CARGO_PLURAL_WOOD, STR_CARGO_SINGULAR_WOOD, STR_TONS, STR_QUANTITY_WOOD, STR_ABBREV_WOOD,
SPR_CARGO_WOOD, CC_PIECE_GOODS, 0x100),
MK( 8, 'IORE', 184, 16, 5120, 9, 255, true, TE_NONE,
STR_CARGO_PLURAL_IRON_ORE, STR_CARGO_SINGULAR_IRON_ORE, STR_TONS, STR_QUANTITY_IRON_ORE, STR_ABBREV_IRON_ORE,
SPR_CARGO_IRON_ORE, CC_BULK, 0x100),
MK( 9, 'STEL', 10, 16, 5688, 7, 255, true, TE_NONE,
STR_CARGO_PLURAL_STEEL, STR_CARGO_SINGULAR_STEEL, STR_TONS, STR_QUANTITY_STEEL, STR_ABBREV_STEEL,
SPR_CARGO_STEEL, CC_PIECE_GOODS, 0x100),
MK( 10, 'VALU', 202, 2, 7509, 1, 32, true, TE_NONE,
STR_CARGO_PLURAL_VALUABLES, STR_CARGO_SINGULAR_VALUABLES, STR_BAGS, STR_QUANTITY_VALUABLES, STR_ABBREV_VALUABLES,
SPR_CARGO_VALUES_GOLD, CC_ARMOURED, 0x100),
MK( 10, 'GOLD', 202, 8, 5802, 10, 40, true, TE_NONE,
STR_CARGO_PLURAL_GOLD, STR_CARGO_SINGULAR_GOLD, STR_BAGS, STR_QUANTITY_GOLD, STR_ABBREV_GOLD,
SPR_CARGO_VALUES_GOLD, CC_ARMOURED, 0x100),
MK( 10, 'DIAM', 202, 2, 5802, 10, 255, true, TE_NONE,
STR_CARGO_PLURAL_DIAMONDS, STR_CARGO_SINGULAR_DIAMOND, STR_BAGS, STR_QUANTITY_DIAMONDS, STR_ABBREV_DIAMONDS,
SPR_CARGO_DIAMONDS, CC_ARMOURED, 0x100),
MK( 11, 'PAPR', 10, 16, 5461, 7, 60, true, TE_NONE,
STR_CARGO_PLURAL_PAPER, STR_CARGO_SINGULAR_PAPER, STR_TONS, STR_QUANTITY_PAPER, STR_ABBREV_PAPER,
SPR_CARGO_PAPER, CC_PIECE_GOODS, 0x100),
MK( 12, 'FOOD', 48, 16, 5688, 0, 30, true, TE_FOOD,
STR_CARGO_PLURAL_FOOD, STR_CARGO_SINGULAR_FOOD, STR_TONS, STR_QUANTITY_FOOD, STR_ABBREV_FOOD,
SPR_CARGO_FOOD, CC_EXPRESS | CC_REFRIGERATED, 0x100),
MK( 13, 'FRUT', 208, 16, 4209, 0, 15, true, TE_NONE,
STR_CARGO_PLURAL_FRUIT, STR_CARGO_SINGULAR_FRUIT, STR_TONS, STR_QUANTITY_FRUIT, STR_ABBREV_FRUIT,
SPR_CARGO_FRUIT, CC_BULK | CC_REFRIGERATED, 0x100),
MK( 14, 'CORE', 184, 16, 4892, 12, 255, true, TE_NONE,
STR_CARGO_PLURAL_COPPER_ORE, STR_CARGO_SINGULAR_COPPER_ORE, STR_TONS, STR_QUANTITY_COPPER_ORE, STR_ABBREV_COPPER_ORE,
SPR_CARGO_COPPER_ORE, CC_BULK, 0x100),
MK( 15, 'WATR', 10, 16, 4664, 20, 80, true, TE_WATER,
STR_CARGO_PLURAL_WATER, STR_CARGO_SINGULAR_WATER, STR_LITERS, STR_QUANTITY_WATER, STR_ABBREV_WATER,
SPR_CARGO_WATERCOLA, CC_LIQUID, 0x100),
MK( 16, 'RUBR', 6, 16, 4437, 2, 20, true, TE_NONE,
STR_CARGO_PLURAL_RUBBER, STR_CARGO_SINGULAR_RUBBER, STR_LITERS, STR_QUANTITY_RUBBER, STR_ABBREV_RUBBER,
SPR_CARGO_RUBBER, CC_LIQUID, 0x100),
MK( 17, 'SUGR', 6, 16, 4437, 20, 255, true, TE_NONE,
STR_CARGO_PLURAL_SUGAR, STR_CARGO_SINGULAR_SUGAR, STR_TONS, STR_QUANTITY_SUGAR, STR_ABBREV_SUGAR,
SPR_CARGO_SUGAR, CC_BULK, 0x100),
MK( 18, 'TOYS', 174, 2, 5574, 25, 255, true, TE_NONE,
STR_CARGO_PLURAL_TOYS, STR_CARGO_SINGULAR_TOY, STR_ITEMS, STR_QUANTITY_TOYS, STR_ABBREV_TOYS,
SPR_CARGO_TOYS, CC_PIECE_GOODS, 0x100),
MK( 19, 'BATT', 208, 4, 4322, 2, 30, true, TE_NONE,
STR_CARGO_PLURAL_BATTERIES, STR_CARGO_SINGULAR_BATTERY, STR_ITEMS, STR_QUANTITY_BATTERIES, STR_ABBREV_BATTERIES,
SPR_CARGO_BATTERIES, CC_PIECE_GOODS, 0x100),
MK( 20, 'SWET', 194, 5, 6144, 8, 40, true, TE_GOODS,
STR_CARGO_PLURAL_CANDY, STR_CARGO_SINGULAR_CANDY, STR_BAGS, STR_QUANTITY_SWEETS, STR_ABBREV_SWEETS,
SPR_CARGO_CANDY, CC_EXPRESS, 0x200),
MK( 21, 'TOFF', 191, 16, 4778, 14, 60, true, TE_NONE,
STR_CARGO_PLURAL_TOFFEE, STR_CARGO_SINGULAR_TOFFEE, STR_TONS, STR_QUANTITY_TOFFEE, STR_ABBREV_TOFFEE,
SPR_CARGO_TOFFEE, CC_BULK, 0x100),
MK( 22, 'COLA', 84, 16, 4892, 5, 75, true, TE_NONE,
STR_CARGO_PLURAL_COLA, STR_CARGO_SINGULAR_COLA, STR_LITERS, STR_QUANTITY_COLA, STR_ABBREV_COLA,
SPR_CARGO_WATERCOLA, CC_LIQUID, 0x100),
MK( 23, 'CTCD', 184, 16, 5005, 10, 25, true, TE_NONE,
STR_CARGO_PLURAL_COTTON_CANDY, STR_CARGO_SINGULAR_COTTON_CANDY, STR_TONS, STR_QUANTITY_CANDYFLOSS, STR_ABBREV_CANDYFLOSS,
SPR_CARGO_COTTONCANDY, CC_BULK, 0x100),
MK( 24, 'BUBL', 10, 1, 5077, 20, 80, true, TE_NONE,
STR_CARGO_PLURAL_BUBBLES, STR_CARGO_SINGULAR_BUBBLE, STR_ITEMS, STR_QUANTITY_BUBBLES, STR_ABBREV_BUBBLES,
SPR_CARGO_BUBBLES, CC_PIECE_GOODS, 0x100),
MK( 25, 'PLST', 202, 16, 4664, 30, 255, true, TE_NONE,
STR_CARGO_PLURAL_PLASTIC, STR_CARGO_SINGULAR_PLASTIC, STR_LITERS, STR_QUANTITY_PLASTIC, STR_ABBREV_PLASTIC,
SPR_CARGO_PLASTIC, CC_LIQUID, 0x100),
MK( 26, 'FZDR', 48, 2, 6250, 30, 50, true, TE_FOOD,
STR_CARGO_PLURAL_FIZZY_DRINKS, STR_CARGO_SINGULAR_FIZZY_DRINK, STR_ITEMS, STR_QUANTITY_FIZZY_DRINKS, STR_ABBREV_FIZZY_DRINKS,
SPR_CARGO_FIZZYDRINK, CC_PIECE_GOODS, 0x100),
/* Void slot in temperate */
MK( 0xFF, 0, 1, 0, 5688, 0, 30, true, TE_NONE,
STR_CARGO_PLURAL_NOTHING, STR_CARGO_SINGULAR_NOTHING, STR_TONS, STR_QUANTITY_NOTHING, STR_ABBREV_NOTHING,
SPR_ASCII_SPACE, CC_NOAVAILABLE, 0x100),
/* Void slot in arctic */
MK( 0xFF, 0, 184, 0, 5120, 9, 255, true, TE_NONE,
STR_CARGO_PLURAL_NOTHING, STR_CARGO_SINGULAR_NOTHING, STR_TONS, STR_QUANTITY_NOTHING, STR_ABBREV_NOTHING,
SPR_ASCII_SPACE, CC_NOAVAILABLE, 0x100),
};
/** Table of cargo types available in each climate, by default */
static const CargoLabel _default_climate_cargo[NUM_LANDSCAPE][12] = {
{ 'PASS', 'COAL', 'MAIL', 'OIL_', 'LVST', 'GOOD', 'GRAI', 'WOOD', 'IORE', 'STEL', 'VALU', 33, },
{ 'PASS', 'COAL', 'MAIL', 'OIL_', 'LVST', 'GOOD', 'WHEA', 'WOOD', 34, 'PAPR', 'GOLD', 'FOOD', },
{ 'PASS', 'RUBR', 'MAIL', 4, 'FRUT', 'GOOD', 'MAIZ', 11, 'CORE', 'WATR', 'DIAM', 'FOOD', },
{ 'PASS', 'SUGR', 'MAIL', 'TOYS', 'BATT', 'SWET', 'TOFF', 'COLA', 'CTCD', 'BUBL', 'PLST', 'FZDR', },
};

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

@@ -0,0 +1,78 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file clear_land.h Tables with sprites for clear land and fences. */
static const SpriteID _landscape_clear_sprites_rough[8] = {
SPR_FLAT_ROUGH_LAND,
SPR_FLAT_ROUGH_LAND_1,
SPR_FLAT_ROUGH_LAND_2,
SPR_FLAT_ROUGH_LAND_3,
SPR_FLAT_ROUGH_LAND_4,
SPR_FLAT_ROUGH_LAND,
SPR_FLAT_ROUGH_LAND_1,
SPR_FLAT_ROUGH_LAND_2,
};
static const byte _fence_mod_by_tileh_sw[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_se[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 byte _fence_mod_by_tileh_ne[32] = {
0, 0, 0, 0, 4, 4, 4, 4,
2, 2, 2, 2, 0, 0, 0, 0,
0, 0, 0, 0, 4, 4, 4, 4,
2, 2, 2, 2, 0, 2, 4, 0,
};
static const byte _fence_mod_by_tileh_nw[32] = {
1, 5, 1, 5, 1, 5, 1, 5,
3, 1, 3, 1, 3, 1, 3, 1,
1, 5, 1, 5, 1, 5, 1, 5,
3, 1, 3, 5, 3, 3, 3, 1,
};
static const SpriteID _clear_land_fence_sprites[7] = {
SPR_HEDGE_BUSHES,
SPR_HEDGE_BUSHES_WITH_GATE,
SPR_HEDGE_FENCE,
SPR_HEDGE_BLOOMBUSH_YELLOW,
SPR_HEDGE_BLOOMBUSH_RED,
SPR_HEDGE_STONE,
};
static const SpriteID _clear_land_sprites_farmland[16] = {
SPR_FARMLAND_BARE,
SPR_FARMLAND_STATE_1,
SPR_FARMLAND_STATE_2,
SPR_FARMLAND_STATE_3,
SPR_FARMLAND_STATE_4,
SPR_FARMLAND_STATE_5,
SPR_FARMLAND_STATE_6,
SPR_FARMLAND_STATE_7,
SPR_FARMLAND_HAYPACKS,
};
static const SpriteID _clear_land_sprites_snow_desert[8] = {
SPR_FLAT_1_QUART_SNOW_DESERT_TILE,
SPR_FLAT_2_QUART_SNOW_DESERT_TILE,
SPR_FLAT_3_QUART_SNOW_DESERT_TILE,
SPR_FLAT_SNOW_DESERT_TILE,
};

View File

@@ -0,0 +1,139 @@
; $Id$
;
; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;
[pre-amble]
static bool CheckInterval(int32 p1);
static bool InvalidateDetailsWindow(int32 p1);
static bool UpdateIntervalTrains(int32 p1);
static bool UpdateIntervalRoadVeh(int32 p1);
static bool UpdateIntervalShips(int32 p1);
static bool UpdateIntervalAircraft(int32 p1);
static const SettingDesc _company_settings[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL($base, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_END = SDT_END()
[defaults]
flags = 0
guiflags = SGF_PER_COMPANY
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
[SDT_BOOL]
base = CompanySettings
var = engine_renew
def = false
str = STR_CONFIG_SETTING_AUTORENEW_VEHICLE
strhelp = STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT
[SDT_VAR]
base = CompanySettings
var = engine_renew_months
type = SLE_INT16
guiflags = SGF_PER_COMPANY | SGF_DISPLAY_ABS
def = 6
min = -12
max = 12
str = STR_CONFIG_SETTING_AUTORENEW_MONTHS
strhelp = STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT
strval = STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE
[SDT_VAR]
base = CompanySettings
var = engine_renew_money
type = SLE_UINT
guiflags = SGF_PER_COMPANY | SGF_CURRENCY
def = 100000
min = 0
max = 2000000
str = STR_CONFIG_SETTING_AUTORENEW_MONEY
strhelp = STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT
strval = STR_JUST_CURRENCY_LONG
[SDT_BOOL]
base = CompanySettings
var = renew_keep_length
def = false
[SDT_BOOL]
base = CompanySettings
var = vehicle.servint_ispercent
def = false
str = STR_CONFIG_SETTING_SERVINT_ISPERCENT
strhelp = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
proc = CheckInterval
[SDT_VAR]
base = CompanySettings
var = vehicle.servint_trains
type = SLE_UINT16
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
def = 150
min = 5
max = 800
str = STR_CONFIG_SETTING_SERVINT_TRAINS
strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE
proc = UpdateIntervalTrains
[SDT_VAR]
base = CompanySettings
var = vehicle.servint_roadveh
type = SLE_UINT16
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
def = 150
min = 5
max = 800
str = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES
strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE
proc = UpdateIntervalRoadVeh
[SDT_VAR]
base = CompanySettings
var = vehicle.servint_ships
type = SLE_UINT16
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
def = 360
min = 5
max = 800
str = STR_CONFIG_SETTING_SERVINT_SHIPS
strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE
proc = UpdateIntervalShips
[SDT_VAR]
base = CompanySettings
var = vehicle.servint_aircraft
type = SLE_UINT16
guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
def = 100
min = 5
max = 800
str = STR_CONFIG_SETTING_SERVINT_AIRCRAFT
strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE
proc = UpdateIntervalAircraft
[SDT_END]
};

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

@@ -0,0 +1,179 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file control_codes.h Control codes that are embedded in the translation strings. */
#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 StringControlCode {
SCC_CONTROL_START = 0xE000,
SCC_CONTROL_END = 0xE1FF,
SCC_SPRITE_START = 0xE200,
SCC_SPRITE_END = SCC_SPRITE_START + 0xFF,
/* This must be the first entry. It's encoded in strings that are saved. */
SCC_ENCODED = SCC_CONTROL_START,
/* Font selection codes, must be in same order as FontSize enum */
SCC_FIRST_FONT,
SCC_NORMALFONT = SCC_FIRST_FONT, ///< Switch to normal size font
SCC_TINYFONT, ///< Switch to small font
SCC_BIGFONT, ///< Switch to large font
SCC_MONOFONT, ///< Switch to monospaced font
SCC_LAST_FONT = SCC_MONOFONT,
/* Formatting control codes */
SCC_REVISION,
SCC_COMPANY_NUM,
SCC_STATION_FEATURES,
SCC_INDUSTRY_NAME,
SCC_WAYPOINT_NAME,
SCC_STATION_NAME,
SCC_DEPOT_NAME,
SCC_TOWN_NAME,
SCC_GROUP_NAME,
SCC_VEHICLE_NAME,
SCC_SIGN_NAME,
SCC_COMPANY_NAME,
SCC_PRESIDENT_NAME,
SCC_ENGINE_NAME,
SCC_CURRENCY_SHORT,
SCC_CURRENCY_LONG,
SCC_CARGO_LONG,
SCC_CARGO_SHORT,
SCC_CARGO_TINY,
SCC_CARGO_LIST,
SCC_POWER,
SCC_VOLUME_LONG,
SCC_VOLUME_SHORT,
SCC_WEIGHT_LONG,
SCC_WEIGHT_SHORT,
SCC_FORCE,
SCC_VELOCITY,
SCC_HEIGHT,
SCC_DATE_TINY,
SCC_DATE_SHORT,
SCC_DATE_LONG,
SCC_DATE_ISO,
/* Must be consecutive */
SCC_STRING1,
SCC_STRING2,
SCC_STRING3,
SCC_STRING4,
SCC_STRING5,
SCC_STRING6,
SCC_STRING7,
SCC_STRING,
SCC_COMMA,
SCC_DECIMAL,
SCC_NUM,
SCC_ZEROFILL_NUM,
SCC_HEX,
SCC_BYTES,
SCC_RAW_STRING_POINTER,
SCC_PLURAL_LIST,
SCC_GENDER_LIST,
SCC_GENDER_INDEX,
SCC_ARG_INDEX,
SCC_SET_CASE,
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,
SCC_PUSH_COLOUR,
SCC_POP_COLOUR,
/**
* The next variables are part of a NewGRF subsystem for creating text strings.
* It uses a "stack" of bytes and reads from there.
*/
SCC_NEWGRF_FIRST,
SCC_NEWGRF_PRINT_DWORD_SIGNED = SCC_NEWGRF_FIRST, ///< 7B: Read 4 bytes from the stack
SCC_NEWGRF_PRINT_WORD_SIGNED, ///< 7C: Read 2 bytes from the stack as signed value
SCC_NEWGRF_PRINT_BYTE_SIGNED, ///< 7D: Read 1 byte from the stack as signed value
SCC_NEWGRF_PRINT_WORD_UNSIGNED, ///< 7E: Read 2 bytes from the stack as unsigned value
SCC_NEWGRF_PRINT_DWORD_CURRENCY, ///< 8F: Read 4 bytes from the stack as currency
SCC_NEWGRF_PRINT_WORD_STRING_ID, ///< 81: Read 2 bytes from the stack as String ID
SCC_NEWGRF_PRINT_WORD_DATE_LONG, ///< 82: Read 2 bytes from the stack as base 1920 date
SCC_NEWGRF_PRINT_WORD_DATE_SHORT, ///< 83: Read 2 bytes from the stack as base 1920 date
SCC_NEWGRF_PRINT_WORD_SPEED, ///< 84: Read 2 bytes from the stack as signed speed
SCC_NEWGRF_PRINT_WORD_VOLUME_LONG, ///< 87: Read 2 bytes from the stack as long signed volume
SCC_NEWGRF_PRINT_WORD_WEIGHT_LONG, ///< 9A 0D: Read 2 bytes from the stack as long unsigned weight
SCC_NEWGRF_PRINT_WORD_STATION_NAME, ///< 9A 0C: Read 2 bytes from the stack as station name
SCC_NEWGRF_PRINT_QWORD_CURRENCY, ///< 9A 01: Read 8 bytes from the stack as currency
SCC_NEWGRF_PRINT_BYTE_HEX, ///< 9A 06: Read 1 byte from the stack and print it as hex
SCC_NEWGRF_PRINT_WORD_HEX, ///< 9A 07: Read 2 bytes from the stack and print it as hex
SCC_NEWGRF_PRINT_DWORD_HEX, ///< 9A 08: Read 4 bytes from the stack and print it as hex
SCC_NEWGRF_PRINT_QWORD_HEX, ///< 9A 0B: Read 8 bytes from the stack and print it as hex
SCC_NEWGRF_PRINT_DWORD_DATE_LONG, ///< 9A 16: Read 4 bytes from the stack as base 0 date
SCC_NEWGRF_PRINT_DWORD_DATE_SHORT, ///< 9A 17: Read 4 bytes from the stack as base 0 date
SCC_NEWGRF_PRINT_WORD_POWER, ///< 9A 18: Read 2 bytes from the stack as unsigned power
SCC_NEWGRF_PRINT_WORD_VOLUME_SHORT, ///< 9A 19: Read 2 bytes from the stack as short signed volume
SCC_NEWGRF_PRINT_WORD_WEIGHT_SHORT, ///< 9A 1A: Read 2 bytes from the stack as short unsigned weight
SCC_NEWGRF_PRINT_WORD_CARGO_LONG, ///< 9A 1B: Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount
SCC_NEWGRF_PRINT_WORD_CARGO_SHORT, ///< 9A 1C: Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount
SCC_NEWGRF_PRINT_WORD_CARGO_TINY, ///< 9A 1D: Read 2 + 2 bytes from the stack as cargo type (translated) and unsigned cargo amount
SCC_NEWGRF_PRINT_WORD_CARGO_NAME, ///< 9A 1E: Read 2 bytes from the stack as cargo name
SCC_NEWGRF_PUSH_WORD, ///< 9A 03: Pushes 2 bytes onto the stack
SCC_NEWGRF_UNPRINT, ///< 9A 04: "Unprints" the given number of bytes from the string
SCC_NEWGRF_DISCARD_WORD, ///< 85: Discard the next two bytes
SCC_NEWGRF_ROTATE_TOP_4_WORDS, ///< 86: Rotate the top 4 words of the stack (W4 W1 W2 W3)
SCC_NEWGRF_LAST = SCC_NEWGRF_ROTATE_TOP_4_WORDS,
SCC_NEWGRF_STRINL, ///< Inline another string at the current position, StringID is encoded in the string
/* Special printable symbols.
* These are mapped to the original glyphs */
SCC_LESS_THAN = SCC_SPRITE_START + 0x3C,
SCC_GREATER_THAN = SCC_SPRITE_START + 0x3E,
SCC_UP_ARROW = SCC_SPRITE_START + 0xA0,
SCC_DOWN_ARROW = SCC_SPRITE_START + 0xAA,
SCC_CHECKMARK = SCC_SPRITE_START + 0xAC,
SCC_CROSS = SCC_SPRITE_START + 0xAD,
SCC_RIGHT_ARROW = SCC_SPRITE_START + 0xAF,
SCC_TRAIN = SCC_SPRITE_START + 0xB4,
SCC_LORRY = SCC_SPRITE_START + 0xB5,
SCC_BUS = SCC_SPRITE_START + 0xB6,
SCC_PLANE = SCC_SPRITE_START + 0xB7,
SCC_SHIP = SCC_SPRITE_START + 0xB8,
SCC_SUPERSCRIPT_M1 = SCC_SPRITE_START + 0xB9,
SCC_SMALL_UP_ARROW = SCC_SPRITE_START + 0xBC,
SCC_SMALL_DOWN_ARROW = SCC_SPRITE_START + 0xBD,
};
#endif /* CONTROL_CODES_H */

View File

@@ -0,0 +1,69 @@
; $Id$
;
; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;
[pre-amble]
static const SettingDesc _currency_settings[] = {
[post-amble]
};
[templates]
SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_CHR = SDT_CHR($base, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_STR = SDT_STR($base, $var, $type, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_END = SDT_END()
[defaults]
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
guiflags = 0
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
[SDT_VAR]
base = CurrencySpec
var = rate
type = SLE_UINT16
def = 1
min = 0
max = UINT16_MAX
[SDT_CHR]
base = CurrencySpec
var = separator
def = "".""
cat = SC_BASIC
[SDT_VAR]
base = CurrencySpec
var = to_euro
type = SLE_INT32
def = 0
min = MIN_YEAR
max = MAX_YEAR
[SDT_STR]
base = CurrencySpec
var = prefix
type = SLE_STRBQ
def = NULL
[SDT_STR]
base = CurrencySpec
var = suffix
type = SLE_STRBQ
def = "" credits""
[SDT_END]

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

@@ -0,0 +1,513 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @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
*/
enum TLG {
XEVEN_YEVEN = 0,
XEVEN_YODD = 1,
XODD_YEVEN = 2,
XODD_YODD = 3,
TLG_END
};
/**
* 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
*/
enum TileSource {
TS_HOME = 0,
TS_NEIGHBOUR = 1,
TS_END
};
static const uint NUM_TRACKS_AT_PCP = 6;
/** Which PPPs are possible at all on a given PCP */
static const 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 const 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 const 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 straight 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 const 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 definitely NOT be built */
static const 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, 16, 8};
static const int8 y_pcp_offsets[DIAGDIR_END] = {8, 16, 8, 0};
/* Geometric placement of the PPP relative to the PCP*/
static const int8 x_ppp_offsets[DIR_END] = {-2, -4, -2, 0, 2, 4, 2, 0};
static const int8 y_ppp_offsets[DIR_END] = {-2, 0, 2, 4, 2, 0, -2, -4};
/**
* Offset for pylon sprites from the base pylon sprite.
*/
enum PylonSpriteOffset {
PSO_Y_NE,
PSO_Y_SW,
PSO_X_NW,
PSO_X_SE,
PSO_EW_N,
PSO_EW_S,
PSO_NS_W,
PSO_NS_E,
};
/* The type of pylon to draw at each PPP */
static const uint8 pylon_sprites[] = {
PSO_EW_N,
PSO_Y_NE,
PSO_NS_E,
PSO_X_SE,
PSO_EW_S,
PSO_Y_SW,
PSO_NS_W,
PSO_X_NW,
};
/**
* Offset for wire sprites from the base wire sprite.
*/
enum WireSpriteOffset {
WSO_X_SHORT,
WSO_Y_SHORT,
WSO_EW_SHORT,
WSO_NS_SHORT,
WSO_X_SHORT_DOWN,
WSO_Y_SHORT_UP,
WSO_X_SHORT_UP,
WSO_Y_SHORT_DOWN,
WSO_X_SW,
WSO_Y_SE,
WSO_EW_E,
WSO_NS_S,
WSO_X_SW_DOWN,
WSO_Y_SE_UP,
WSO_X_SW_UP,
WSO_Y_SE_DOWN,
WSO_X_NE,
WSO_Y_NW,
WSO_EW_W,
WSO_NS_N,
WSO_X_NE_DOWN,
WSO_Y_NW_UP,
WSO_X_NE_UP,
WSO_Y_NW_DOWN,
WSO_ENTRANCE_SW,
WSO_ENTRANCE_NW,
WSO_ENTRANCE_NE,
WSO_ENTRANCE_SE,
};
struct SortableSpriteStruct {
uint8 image_offset;
int8 x_offset;
int8 y_offset;
int8 x_size;
int8 y_size;
int8 z_size;
int8 z_offset;
};
/** Distance between wire and rail */
static const uint ELRAIL_ELEVATION = 10;
/** Wires that a draw one level higher than the north corner. */
static const uint ELRAIL_ELEVRAISE = ELRAIL_ELEVATION + TILE_HEIGHT;
static const SortableSpriteStruct RailCatenarySpriteData[] = {
/* X direction
* Flat tiles:
* Wires */
{ WSO_X_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! 0: Wire in X direction, pylon on the SW end only
{ WSO_X_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! 1: Wire in X direction, pylon on the NE end
{ WSO_X_SHORT, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! 2: Wire in X direction, pylon on both ends
/* "up" tiles
* Wires */
{ WSO_X_SW_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE }, //! 3: Wire in X pitch up, pylon on the SW end only
{ WSO_X_NE_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE }, //! 4: Wire in X pitch up, pylon on the NE end
{ WSO_X_SHORT_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE }, //! 5: Wire in X pitch up, pylon on both ends
/* "down" tiles
* Wires */
{ WSO_X_SW_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION }, //! 6: Wire in X pitch down, pylon on the SW end
{ WSO_X_NE_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION }, //! 7: Wire in X pitch down, pylon on the NE end
{ WSO_X_SHORT_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION }, //! 8: Wire in X pitch down, pylon on both ends
/* Y direction
* Flat tiles:
* Wires */
{ WSO_Y_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! 9: Wire in Y direction, pylon on the SE end only
{ WSO_Y_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //!10: Wire in Y direction, pylon on the NW end
{ WSO_Y_SHORT, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //!11: Wire in Y direction, pylon on both ends
/* "up" tiles
* Wires */
{ WSO_Y_SE_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE }, //!12: Wire in Y pitch up, pylon on the SE end only
{ WSO_Y_NW_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE }, //!13: Wire in Y pitch up, pylon on the NW end
{ WSO_Y_SHORT_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE }, //!14: Wire in Y pitch up, pylon on both ends
/* "down" tiles
* Wires */
{ WSO_Y_SE_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION }, //!15: Wire in Y pitch down, pylon on the SE end
{ WSO_Y_NW_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION }, //!16: Wire in Y pitch down, pylon on the NW end
{ WSO_Y_SHORT_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION }, //!17: Wire in Y pitch down, pylon on both ends
/* NS Direction */
{ WSO_NS_SHORT, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!18: LEFT trackbit wire, pylon on both ends
{ WSO_NS_SHORT, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!19: RIGHT trackbit wire, pylon on both ends
{ WSO_NS_N, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!20: LEFT trackbit wire, pylon on N end
{ WSO_NS_N, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!21: RIGHT trackbit wire, pylon on N end
{ WSO_NS_S, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!22: LEFT trackbit wire, pylon on S end
{ WSO_NS_S, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!23: RIGHT trackbit wire, pylon on S end
/* EW Direction */
{ WSO_EW_SHORT, 7, 0, 1, 1, 1, ELRAIL_ELEVATION }, //!24: UPPER trackbit wire, pylon on both ends
{ WSO_EW_SHORT, 15, 8, 3, 3, 1, ELRAIL_ELEVATION }, //!25: LOWER trackbit wire, pylon on both ends
{ WSO_EW_W, 7, 0, 1, 1, 1, ELRAIL_ELEVATION }, //!28: UPPER trackbit wire, pylon on both ends
{ WSO_EW_W, 15, 8, 3, 3, 1, ELRAIL_ELEVATION }, //!29: LOWER trackbit wire, pylon on both ends
{ WSO_EW_E, 7, 0, 1, 1, 1, ELRAIL_ELEVATION }, //!32: UPPER trackbit wire, pylon on both ends
{ WSO_EW_E, 15, 8, 3, 3, 1, ELRAIL_ELEVATION } //!33: LOWER trackbit wire, pylon on both ends
};
static const SortableSpriteStruct RailCatenarySpriteData_Depot[] = {
{ WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE depot exit
{ WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE depot exit
{ WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW depot exit
{ WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit
};
static const SortableSpriteStruct RailCatenarySpriteData_Tunnel[] = {
{ WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel (SW facing exit)
{ WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel (NW facing exit)
{ WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel (NE facing exit)
{ WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel (SE facing exit)
};
/**
* Refers to a certain element of the catenary.
* Identifiers for Wires:
* <ol><li>Direction of the wire</li>
* <li>Slope of the tile for diagonals, placement inside the track for horiz/vertical pieces</li>
* <li>Place where a pylon shoule be</li></ol>
* Identifiers for Pylons:
* <ol><li>Direction of the wire</li>
* <li>Slope of the tile</li>
* <li>Position of the Pylon relative to the track</li>
* <li>Position of the Pylon inside the tile</li></ol>
*/
enum RailCatenarySprite {
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
};
/* 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 RailCatenarySprite 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 */

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

@@ -0,0 +1,769 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file table/engines.h
* This file contains all the data for vehicles
*/
#ifndef ENGINES_H
#define ENGINES_H
/**
* Writes the properties of a train into the EngineInfo struct.
* @see EngineInfo
* @param a base introduction date (days since 1920-01-01)
* @param b decay speed
* @param c life length (years)
* @param d base life (years)
* @param e cargo type
* @param f Bitmask of the climates
* @note the 5 between b and f is the load amount
*/
#define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
/**
* Writes the properties of a multiple-unit train into the EngineInfo struct.
* @see EngineInfo
* @param a base introduction date (days since 1920-01-01)
* @param b decay speed
* @param c life length (years)
* @param d base life (years)
* @param e cargo type
* @param f Bitmask of the climates
* @note the 5 between b and f is the load amount
*/
#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS | 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
/**
* Writes the properties of a train carriage into the EngineInfo struct.
* @param a base introduction date (days since 1920-01-01)
* @param b decay speed
* @param c life length (years)
* @param d base life (years)
* @param e cargo type
* @param f Bitmask of the climates
* @see MT
* @note the 5 between b and f is the load amount
*/
#define MW(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
/**
* Writes the properties of a road vehicle into the EngineInfo struct.
* @see EngineInfo
* @param a base introduction date (days since 1920-01-01)
* @param b decay speed
* @param c life length (years)
* @param d base life (years)
* @param e cargo type
* @param f Bitmask of the climates
* @note the 5 between b and f is the load amount
*/
#define MR(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
/**
* Writes the properties of a ship into the EngineInfo struct.
* @param a base introduction date (days since 1920-01-01)
* @param b decay speed
* @param c life length (years)
* @param d base life (years)
* @param e cargo type
* @param f Bitmask of the climates
* @note the 10 between b and f is the load amount
*/
#define MS(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
/**
* Writes the properties of an aeroplane into the EngineInfo struct.
* @param a base introduction date (days since 1920-01-01)
* @param b decay speed
* @param c life length (years)
* @param d base life (years)
* @param e Bitmask of the climates
* @note the 20 between b and e is the load amount
*/
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, CT_INVALID, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
/* Climates
* T = Temperate
* A = Sub-Arctic
* S = Sub-Tropic
* Y = Toyland */
#define T 1
#define A 2
#define S 4
#define Y 8
static const EngineInfo _orig_engine_info[] = {
/* base_intro base_life
* | decay_speed cargo_type
* | | lifelength | climates
* | | | | | | */
MT( 1827, 20, 15, 30, 0 , T ), // 0 Kirby Paul Tank (Steam)
MT( 12784, 20, 22, 30, 0 , A|S ), // 1 MJS 250 (Diesel)
MT( 9497, 20, 20, 50, 0 , Y), // 2 Ploddyphut Choo-Choo
MT( 11688, 20, 20, 30, 0 , Y), // 3 Powernaut Choo-Choo
MT( 16802, 20, 20, 30, 0 , Y), // 4 Mightymover Choo-Choo
MT( 18993, 20, 20, 30, 0 , Y), // 5 Ploddyphut Diesel
MT( 20820, 20, 20, 30, 0 , Y), // 6 Powernaut Diesel
MT( 8766, 20, 20, 30, 0 , A|S ), // 7 Wills 2-8-0 (Steam)
MT( 5114, 20, 21, 30, 0 , T ), // 8 Chaney 'Jubilee' (Steam)
MT( 5479, 20, 20, 30, 0 , T ), // 9 Ginzu 'A4' (Steam)
MT( 12419, 20, 23, 25, 0 , T ), // 10 SH '8P' (Steam)
MM( 13149, 20, 12, 30, CT_PASSENGERS , T ), // 11 Manley-Morel DMU (Diesel)
MM( 23376, 20, 15, 35, CT_PASSENGERS , T ), // 12 'Dash' (Diesel)
MT( 14976, 20, 18, 28, 0 , T ), // 13 SH/Hendry '25' (Diesel)
MT( 14245, 20, 20, 30, 0 , T ), // 14 UU '37' (Diesel)
MT( 15341, 20, 22, 33, 0 , T ), // 15 Floss '47' (Diesel)
MT( 14976, 20, 20, 25, 0 , A|S ), // 16 CS 4000 (Diesel)
MT( 16437, 20, 20, 30, 0 , A|S ), // 17 CS 2400 (Diesel)
MT( 18993, 20, 22, 30, 0 , A|S ), // 18 Centennial (Diesel)
MT( 13880, 20, 22, 30, 0 , A|S ), // 19 Kelling 3100 (Diesel)
MM( 20454, 20, 22, 30, 0 , A|S ), // 20 Turner Turbo (Diesel)
MT( 16071, 20, 22, 30, 0 , A|S ), // 21 MJS 1000 (Diesel)
MT( 20820, 20, 20, 25, CT_MAIL , T ), // 22 SH '125' (Diesel)
MT( 16437, 20, 23, 30, 0 , T ), // 23 SH '30' (Electric)
MT( 19359, 20, 23, 80, 0 , T ), // 24 SH '40' (Electric)
MM( 23376, 20, 25, 30, 0 , T ), // 25 'T.I.M.' (Electric)
MM( 26298, 20, 25, 50, 0 , T ), // 26 'AsiaStar' (Electric)
MW( 1827, 20, 20, 50, CT_PASSENGERS , T|A|S|Y), // 27 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , T|A|S|Y), // 28 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , T|A ), // 29 Coal Truck
MW( 1827, 20, 20, 50, CT_OIL , T|A|S ), // 30 Oil Tanker
MW( 1827, 20, 20, 50, CT_LIVESTOCK , T|A ), // 31 Livestock Van
MW( 1827, 20, 20, 50, CT_GOODS , T|A|S ), // 32 Goods Van
MW( 1827, 20, 20, 50, CT_GRAIN , T|A|S ), // 33 Grain Hopper
MW( 1827, 20, 20, 50, CT_WOOD , T|A|S ), // 34 Wood Truck
MW( 1827, 20, 20, 50, CT_IRON_ORE , T ), // 35 Iron Ore Hopper
MW( 1827, 20, 20, 50, CT_STEEL , T ), // 36 Steel Truck
MW( 1827, 20, 20, 50, CT_VALUABLES , T|A|S ), // 37 Armoured Van
MW( 1827, 20, 20, 50, CT_FOOD , A|S ), // 38 Food Van
MW( 1827, 20, 20, 50, CT_PAPER , A ), // 39 Paper Truck
MW( 1827, 20, 20, 50, CT_COPPER_ORE , S ), // 40 Copper Ore Hopper
MW( 1827, 20, 20, 50, CT_WATER , S ), // 41 Water Tanker
MW( 1827, 20, 20, 50, CT_FRUIT , S ), // 42 Fruit Truck
MW( 1827, 20, 20, 50, CT_RUBBER , S ), // 43 Rubber Truck
MW( 1827, 20, 20, 50, CT_SUGAR , Y), // 44 Sugar Truck
MW( 1827, 20, 20, 50, CT_COTTON_CANDY, Y), // 45 Candyfloss Hopper
MW( 1827, 20, 20, 50, CT_TOFFEE , Y), // 46 Toffee Hopper
MW( 1827, 20, 20, 50, CT_BUBBLES , Y), // 47 Bubble Van
MW( 1827, 20, 20, 50, CT_COLA , Y), // 48 Cola Tanker
MW( 1827, 20, 20, 50, CT_CANDY , Y), // 49 Sweet Van
MW( 1827, 20, 20, 50, CT_TOYS , Y), // 50 Toy Van
MW( 1827, 20, 20, 50, CT_BATTERIES , Y), // 51 Battery Truck
MW( 1827, 20, 20, 50, CT_FIZZY_DRINKS, Y), // 52 Fizzy Drink Truck
MW( 1827, 20, 20, 50, CT_PLASTIC , Y), // 53 Plastic Truck
MT( 28490, 20, 20, 50, 0 , T|A|S ), // 54 'X2001' (Electric)
MT( 31047, 20, 20, 50, CT_PASSENGERS , T|A|S ), // 55 'Millennium Z1' (Electric)
MT( 28855, 20, 20, 50, 0 , Y), // 56 Wizzowow Z99
MW( 1827, 20, 20, 50, CT_PASSENGERS , T|A|S|Y), // 57 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , T|A|S|Y), // 58 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , T|A ), // 59 Coal Truck
MW( 1827, 20, 20, 50, CT_OIL , T|A|S ), // 60 Oil Tanker
MW( 1827, 20, 20, 50, CT_LIVESTOCK , T|A ), // 61 Livestock Van
MW( 1827, 20, 20, 50, CT_GOODS , T|A|S ), // 62 Goods Van
MW( 1827, 20, 20, 50, CT_GRAIN , T|A|S ), // 63 Grain Hopper
MW( 1827, 20, 20, 50, CT_WOOD , T|A|S ), // 64 Wood Truck
MW( 1827, 20, 20, 50, CT_IRON_ORE , T ), // 65 Iron Ore Hopper
MW( 1827, 20, 20, 50, CT_STEEL , T ), // 66 Steel Truck
MW( 1827, 20, 20, 50, CT_VALUABLES , T|A|S ), // 67 Armoured Van
MW( 1827, 20, 20, 50, CT_FOOD , A|S ), // 68 Food Van
MW( 1827, 20, 20, 50, CT_PAPER , A ), // 69 Paper Truck
MW( 1827, 20, 20, 50, CT_COPPER_ORE , S ), // 70 Copper Ore Hopper
MW( 1827, 20, 20, 50, CT_WATER , S ), // 71 Water Tanker
MW( 1827, 20, 20, 50, CT_FRUIT , S ), // 72 Fruit Truck
MW( 1827, 20, 20, 50, CT_RUBBER , S ), // 73 Rubber Truck
MW( 1827, 20, 20, 50, CT_SUGAR , Y), // 74 Sugar Truck
MW( 1827, 20, 20, 50, CT_COTTON_CANDY, Y), // 75 Candyfloss Hopper
MW( 1827, 20, 20, 50, CT_TOFFEE , Y), // 76 Toffee Hopper
MW( 1827, 20, 20, 50, CT_BUBBLES , Y), // 77 Bubble Van
MW( 1827, 20, 20, 50, CT_COLA , Y), // 78 Cola Tanker
MW( 1827, 20, 20, 50, CT_CANDY , Y), // 79 Sweet Van
MW( 1827, 20, 20, 50, CT_TOYS , Y), // 80 Toy Van
MW( 1827, 20, 20, 50, CT_BATTERIES , Y), // 81 Battery Truck
MW( 1827, 20, 20, 50, CT_FIZZY_DRINKS, Y), // 82 Fizzy Drink Truck
MW( 1827, 20, 20, 50, CT_PLASTIC , Y), // 83 Plastic Truck
MT( 36525, 20, 20, 50, 0 , T|A|S ), // 84 Lev1 'Leviathan' (Electric)
MT( 39447, 20, 20, 50, 0 , T|A|S ), // 85 Lev2 'Cyclops' (Electric)
MT( 42004, 20, 20, 50, 0 , T|A|S ), // 86 Lev3 'Pegasus' (Electric)
MT( 42735, 20, 20, 50, 0 , T|A|S ), // 87 Lev4 'Chimaera' (Electric)
MT( 36891, 20, 20, 60, 0 , Y), // 88 Wizzowow Rocketeer
MW( 1827, 20, 20, 50, CT_PASSENGERS , T|A|S|Y), // 89 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , T|A|S|Y), // 90 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , T|A ), // 91 Coal Truck
MW( 1827, 20, 20, 50, CT_OIL , T|A|S ), // 92 Oil Tanker
MW( 1827, 20, 20, 50, CT_LIVESTOCK , T|A ), // 93 Livestock Van
MW( 1827, 20, 20, 50, CT_GOODS , T|A|S ), // 94 Goods Van
MW( 1827, 20, 20, 50, CT_GRAIN , T|A|S ), // 95 Grain Hopper
MW( 1827, 20, 20, 50, CT_WOOD , T|A|S ), // 96 Wood Truck
MW( 1827, 20, 20, 50, CT_IRON_ORE , T ), // 97 Iron Ore Hopper
MW( 1827, 20, 20, 50, CT_STEEL , T ), // 98 Steel Truck
MW( 1827, 20, 20, 50, CT_VALUABLES , T|A|S ), // 99 Armoured Van
MW( 1827, 20, 20, 50, CT_FOOD , A|S ), // 100 Food Van
MW( 1827, 20, 20, 50, CT_PAPER , A ), // 101 Paper Truck
MW( 1827, 20, 20, 50, CT_COPPER_ORE , S ), // 102 Copper Ore Hopper
MW( 1827, 20, 20, 50, CT_WATER , S ), // 103 Water Tanker
MW( 1827, 20, 20, 50, CT_FRUIT , S ), // 104 Fruit Truck
MW( 1827, 20, 20, 50, CT_RUBBER , S ), // 105 Rubber Truck
MW( 1827, 20, 20, 50, CT_SUGAR , Y), // 106 Sugar Truck
MW( 1827, 20, 20, 50, CT_COTTON_CANDY, Y), // 107 Candyfloss Hopper
MW( 1827, 20, 20, 50, CT_TOFFEE , Y), // 108 Toffee Hopper
MW( 1827, 20, 20, 50, CT_BUBBLES , Y), // 109 Bubble Van
MW( 1827, 20, 20, 50, CT_COLA , Y), // 110 Cola Tanker
MW( 1827, 20, 20, 50, CT_CANDY , Y), // 111 Sweet Van
MW( 1827, 20, 20, 50, CT_TOYS , Y), // 112 Toy Van
MW( 1827, 20, 20, 50, CT_BATTERIES , Y), // 113 Battery Truck
MW( 1827, 20, 20, 50, CT_FIZZY_DRINKS, Y), // 114 Fizzy Drink Truck
MW( 1827, 20, 20, 50, CT_PLASTIC , Y), // 115 Plastic Truck
MR( 3378, 20, 12, 40, CT_PASSENGERS , T|A|S ), // 116 MPS Regal Bus
MR( 16071, 20, 15, 30, CT_PASSENGERS , T|A|S ), // 117 Hereford Leopard Bus
MR( 24107, 20, 15, 40, CT_PASSENGERS , T|A|S ), // 118 Foster Bus
MR( 32142, 20, 15, 80, CT_PASSENGERS , T|A|S ), // 119 Foster MkII Superbus
MR( 9132, 20, 15, 40, CT_PASSENGERS , Y), // 120 Ploddyphut MkI Bus
MR( 18993, 20, 15, 40, CT_PASSENGERS , Y), // 121 Ploddyphut MkII Bus
MR( 32873, 20, 15, 80, CT_PASSENGERS , Y), // 122 Ploddyphut MkIII Bus
MR( 5479, 20, 15, 55, CT_COAL , T|A ), // 123 Balogh Coal Truck
MR( 20089, 20, 15, 55, CT_COAL , T|A ), // 124 Uhl Coal Truck
MR( 33969, 20, 15, 85, CT_COAL , T|A ), // 125 DW Coal Truck
MR( 5479, 20, 15, 55, CT_MAIL , T|A|S ), // 126 MPS Mail Truck
MR( 21550, 20, 15, 55, CT_MAIL , T|A|S ), // 127 Reynard Mail Truck
MR( 35795, 20, 15, 85, CT_MAIL , T|A|S ), // 128 Perry Mail Truck
MR( 5479, 20, 15, 55, CT_MAIL , Y), // 129 MightyMover Mail Truck
MR( 21550, 20, 15, 55, CT_MAIL , Y), // 130 Powernaught Mail Truck
MR( 35795, 20, 15, 85, CT_MAIL , Y), // 131 Wizzowow Mail Truck
MR( 5479, 20, 15, 55, CT_OIL , T|A|S ), // 132 Witcombe Oil Tanker
MR( 19359, 20, 15, 55, CT_OIL , T|A|S ), // 133 Foster Oil Tanker
MR( 31047, 20, 15, 85, CT_OIL , T|A|S ), // 134 Perry Oil Tanker
MR( 5479, 20, 15, 55, CT_LIVESTOCK , T|A ), // 135 Talbott Livestock Van
MR( 21915, 20, 15, 55, CT_LIVESTOCK , T|A ), // 136 Uhl Livestock Van
MR( 37256, 20, 15, 85, CT_LIVESTOCK , T|A ), // 137 Foster Livestock Van
MR( 5479, 20, 15, 55, CT_GOODS , T|A|S ), // 138 Balogh Goods Truck
MR( 19724, 20, 15, 55, CT_GOODS , T|A|S ), // 139 Craighead Goods Truck
MR( 31047, 20, 15, 85, CT_GOODS , T|A|S ), // 140 Goss Goods Truck
MR( 5479, 20, 15, 55, CT_GRAIN , T|A|S ), // 141 Hereford Grain Truck
MR( 21185, 20, 15, 55, CT_GRAIN , T|A|S ), // 142 Thomas Grain Truck
MR( 32873, 20, 15, 85, CT_GRAIN , T|A|S ), // 143 Goss Grain Truck
MR( 5479, 20, 15, 55, CT_WOOD , T|A|S ), // 144 Witcombe Wood Truck
MR( 19724, 20, 15, 55, CT_WOOD , T|A|S ), // 145 Foster Wood Truck
MR( 35430, 20, 15, 85, CT_WOOD , T|A|S ), // 146 Moreland Wood Truck
MR( 5479, 20, 15, 55, CT_IRON_ORE , T ), // 147 MPS Iron Ore Truck
MR( 20820, 20, 15, 55, CT_IRON_ORE , T ), // 148 Uhl Iron Ore Truck
MR( 33238, 20, 15, 85, CT_IRON_ORE , T ), // 149 Chippy Iron Ore Truck
MR( 5479, 20, 15, 55, CT_STEEL , T ), // 150 Balogh Steel Truck
MR( 21185, 20, 15, 55, CT_STEEL , T ), // 151 Uhl Steel Truck
MR( 31777, 20, 15, 85, CT_STEEL , T ), // 152 Kelling Steel Truck
MR( 5479, 20, 15, 55, CT_VALUABLES , T|A|S ), // 153 Balogh Armoured Truck
MR( 22281, 20, 15, 55, CT_VALUABLES , T|A|S ), // 154 Uhl Armoured Truck
MR( 33603, 20, 15, 85, CT_VALUABLES , T|A|S ), // 155 Foster Armoured Truck
MR( 5479, 20, 15, 55, CT_FOOD , A|S ), // 156 Foster Food Van
MR( 18628, 20, 15, 55, CT_FOOD , A|S ), // 157 Perry Food Van
MR( 30681, 20, 15, 85, CT_FOOD , A|S ), // 158 Chippy Food Van
MR( 5479, 20, 15, 55, CT_PAPER , A ), // 159 Uhl Paper Truck
MR( 21185, 20, 15, 55, CT_PAPER , A ), // 160 Balogh Paper Truck
MR( 31777, 20, 15, 85, CT_PAPER , A ), // 161 MPS Paper Truck
MR( 5479, 20, 15, 55, CT_COPPER_ORE , S ), // 162 MPS Copper Ore Truck
MR( 20820, 20, 15, 55, CT_COPPER_ORE , S ), // 163 Uhl Copper Ore Truck
MR( 33238, 20, 15, 85, CT_COPPER_ORE , S ), // 164 Goss Copper Ore Truck
MR( 5479, 20, 15, 55, CT_WATER , S ), // 165 Uhl Water Tanker
MR( 20970, 20, 15, 55, CT_WATER , S ), // 166 Balogh Water Tanker
MR( 33388, 20, 15, 85, CT_WATER , S ), // 167 MPS Water Tanker
MR( 5479, 20, 15, 55, CT_FRUIT , S ), // 168 Balogh Fruit Truck
MR( 21335, 20, 15, 55, CT_FRUIT , S ), // 169 Uhl Fruit Truck
MR( 33753, 20, 15, 85, CT_FRUIT , S ), // 170 Kelling Fruit Truck
MR( 5479, 20, 15, 55, CT_RUBBER , S ), // 171 Balogh Rubber Truck
MR( 20604, 20, 15, 55, CT_RUBBER , S ), // 172 Uhl Rubber Truck
MR( 33023, 20, 15, 85, CT_RUBBER , S ), // 173 RMT Rubber Truck
MR( 5479, 20, 15, 55, CT_SUGAR , Y), // 174 MightyMover Sugar Truck
MR( 19724, 20, 15, 55, CT_SUGAR , Y), // 175 Powernaught Sugar Truck
MR( 33238, 20, 15, 85, CT_SUGAR , Y), // 176 Wizzowow Sugar Truck
MR( 5479, 20, 15, 55, CT_COLA , Y), // 177 MightyMover Cola Truck
MR( 20089, 20, 15, 55, CT_COLA , Y), // 178 Powernaught Cola Truck
MR( 33603, 20, 15, 85, CT_COLA , Y), // 179 Wizzowow Cola Truck
MR( 5479, 20, 15, 55, CT_COTTON_CANDY, Y), // 180 MightyMover Candyfloss Truck
MR( 20454, 20, 15, 55, CT_COTTON_CANDY, Y), // 181 Powernaught Candyfloss Truck
MR( 33969, 20, 15, 85, CT_COTTON_CANDY, Y), // 182 Wizzowow Candyfloss Truck
MR( 5479, 20, 15, 55, CT_TOFFEE , Y), // 183 MightyMover Toffee Truck
MR( 20820, 20, 15, 55, CT_TOFFEE , Y), // 184 Powernaught Toffee Truck
MR( 34334, 20, 15, 85, CT_TOFFEE , Y), // 185 Wizzowow Toffee Truck
MR( 5479, 20, 15, 55, CT_TOYS , Y), // 186 MightyMover Toy Van
MR( 21185, 20, 15, 55, CT_TOYS , Y), // 187 Powernaught Toy Van
MR( 34699, 20, 15, 85, CT_TOYS , Y), // 188 Wizzowow Toy Van
MR( 5479, 20, 15, 55, CT_CANDY , Y), // 189 MightyMover Sweet Truck
MR( 21550, 20, 15, 55, CT_CANDY , Y), // 190 Powernaught Sweet Truck
MR( 35064, 20, 15, 85, CT_CANDY , Y), // 191 Wizzowow Sweet Truck
MR( 5479, 20, 15, 55, CT_BATTERIES , Y), // 192 MightyMover Battery Truck
MR( 19874, 20, 15, 55, CT_BATTERIES , Y), // 193 Powernaught Battery Truck
MR( 35430, 20, 15, 85, CT_BATTERIES , Y), // 194 Wizzowow Battery Truck
MR( 5479, 20, 15, 55, CT_FIZZY_DRINKS, Y), // 195 MightyMover Fizzy Drink Truck
MR( 20239, 20, 15, 55, CT_FIZZY_DRINKS, Y), // 196 Powernaught Fizzy Drink Truck
MR( 35795, 20, 15, 85, CT_FIZZY_DRINKS, Y), // 197 Wizzowow Fizzy Drink Truck
MR( 5479, 20, 15, 55, CT_PLASTIC , Y), // 198 MightyMover Plastic Truck
MR( 20604, 20, 15, 55, CT_PLASTIC , Y), // 199 Powernaught Plastic Truck
MR( 32873, 20, 15, 85, CT_PLASTIC , Y), // 200 Wizzowow Plastic Truck
MR( 5479, 20, 15, 55, CT_BUBBLES , Y), // 201 MightyMover Bubble Truck
MR( 20970, 20, 15, 55, CT_BUBBLES , Y), // 202 Powernaught Bubble Truck
MR( 33023, 20, 15, 85, CT_BUBBLES , Y), // 203 Wizzowow Bubble Truck
MS( 2922, 5, 30, 50, CT_OIL , T|A|S ), // 204 MPS Oil Tanker
MS( 17167, 5, 30, 90, CT_OIL , T|A|S ), // 205 CS-Inc. Oil Tanker
MS( 2192, 5, 30, 55, CT_PASSENGERS , T|A|S ), // 206 MPS Passenger Ferry
MS( 18628, 5, 30, 90, CT_PASSENGERS , T|A|S ), // 207 FFP Passenger Ferry
MS( 17257, 10, 25, 90, CT_PASSENGERS , T|A|S ), // 208 Bakewell 300 Hovercraft
MS( 9587, 5, 30, 40, CT_PASSENGERS , Y), // 209 Chugger-Chug Passenger Ferry
MS( 20544, 5, 30, 90, CT_PASSENGERS , Y), // 210 Shivershake Passenger Ferry
MS( 2557, 5, 30, 55, CT_GOODS , T|A|S ), // 211 Yate Cargo ship
MS( 19724, 5, 30, 98, CT_GOODS , T|A|S ), // 212 Bakewell Cargo ship
MS( 9587, 5, 30, 45, CT_GOODS , Y), // 213 Mightymover Cargo ship
MS( 22371, 5, 30, 90, CT_GOODS , Y), // 214 Powernaut Cargo ship
MA( 2922, 20, 20, 20, T|A|S ), // 215 Sampson U52
MA( 9922, 20, 24, 20, T|A|S ), // 216 Coleman Count
MA( 12659, 20, 18, 20, T|A|S ), // 217 FFP Dart
MA( 17652, 20, 25, 35, T|A|S ), // 218 Yate Haugan
MA( 4929, 20, 30, 30, T|A|S ), // 219 Bakewell Cotswald LB-3
MA( 13695, 20, 23, 25, T|A|S ), // 220 Bakewell Luckett LB-8
MA( 16341, 20, 26, 30, T|A|S ), // 221 Bakewell Luckett LB-9
MA( 21395, 20, 25, 30, T|A|S ), // 222 Bakewell Luckett LB80
MA( 18263, 20, 20, 30, T|A|S ), // 223 Bakewell Luckett LB-10
MA( 25233, 20, 25, 30, T|A|S ), // 224 Bakewell Luckett LB-11
MA( 15371, 20, 22, 25, T|A|S ), // 225 Yate Aerospace YAC 1-11
MA( 15461, 20, 25, 25, T|A|S ), // 226 Darwin 100
MA( 16952, 20, 22, 25, T|A|S ), // 227 Darwin 200
MA( 17227, 20, 25, 30, T|A|S ), // 228 Darwin 300
MA( 22371, 20, 25, 35, T|A|S ), // 229 Darwin 400
MA( 22341, 20, 25, 30, T|A|S ), // 230 Darwin 500
MA( 27209, 20, 25, 30, T|A|S ), // 231 Darwin 600
MA( 17988, 20, 20, 30, T|A|S ), // 232 Guru Galaxy
MA( 18993, 20, 24, 35, T|A|S ), // 233 Airtaxi A21
MA( 22401, 20, 24, 30, T|A|S ), // 234 Airtaxi A31
MA( 24472, 20, 24, 30, T|A|S ), // 235 Airtaxi A32
MA( 26724, 20, 24, 30, T|A|S ), // 236 Airtaxi A33
MA( 22005, 20, 25, 30, T|A|S ), // 237 Yate Aerospace YAe46
MA( 24107, 20, 20, 35, T|A|S ), // 238 Dinger 100
MA( 29310, 20, 25, 60, T|A|S ), // 239 AirTaxi A34-1000
MA( 35520, 20, 22, 30, T|A|S ), // 240 Yate Z-Shuttle
MA( 36981, 20, 22, 30, T|A|S ), // 241 Kelling K1
MA( 38807, 20, 22, 50, T|A|S ), // 242 Kelling K6
MA( 42094, 20, 25, 30, T|A|S ), // 243 Kelling K7
MA( 44651, 20, 23, 30, T|A|S ), // 244 Darwin 700
MA( 40268, 20, 25, 30, T|A|S ), // 245 FFP Hyperdart 2
MA( 33693, 20, 25, 50, T|A|S ), // 246 Dinger 200
MA( 32963, 20, 20, 60, T|A|S ), // 247 Dinger 1000
MA( 9222, 20, 20, 35, Y), // 248 Ploddyphut 100
MA( 12874, 20, 20, 35, Y), // 249 Ploddyphut 500
MA( 16892, 20, 20, 35, Y), // 250 Flashbang X1
MA( 21275, 20, 20, 99, Y), // 251 Juggerplane M1
MA( 23832, 20, 20, 99, Y), // 252 Flashbang Wizzer
MA( 13575, 20, 20, 40, T|A|S ), // 253 Tricario Helicopter
MA( 28215, 20, 20, 30, T|A|S ), // 254 Guru X2 Helicopter
MA( 13575, 20, 20, 99, Y), // 255 Powernaut Helicopter
};
#undef Y
#undef S
#undef A
#undef T
#undef MT
#undef MW
#undef MR
#undef MS
#undef MA
/**
* Writes the properties of a rail vehicle into the RailVehicleInfo struct.
* @see RailVehicleInfo
* @param a image_index
* @param b type
* @param c cost_factor
* @param d max_speed (1 unit = 1/1.6 mph = 1 km-ish/h)
* @param e power (hp)
* @param f weight (tons)
* @param g running_cost
* @param h running_cost_class
* @param i capacity (persons, bags, tons, pieces, items, cubic metres, ...)
* @param j railtype
* @param k engclass
* Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
* Air drag value depends on the top speed of the vehicle.
*/
#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, {j}, d, e, f, g, h, k, i, 0, 0, 0, VE_DEFAULT, 0, 76, 0, 0 }
#define M RAILVEH_MULTIHEAD
#define W RAILVEH_WAGON
#define G RAILVEH_SINGLEHEAD
#define S EC_STEAM
#define D EC_DIESEL
#define E EC_ELECTRIC
#define N EC_MONORAIL
#define V EC_MAGLEV
/* Wagons always have engine type 0, i.e. steam. */
#define A EC_STEAM
#define R RAILTYPE_RAIL
#define C RAILTYPE_ELECTRIC
#define O RAILTYPE_MONO
#define L RAILTYPE_MAGLEV
#define RC_S PR_RUNNING_TRAIN_STEAM
#define RC_D PR_RUNNING_TRAIN_DIESEL
#define RC_E PR_RUNNING_TRAIN_ELECTRIC
#define RC_W INVALID_PRICE
static const RailVehicleInfo _orig_rail_vehicle_info[] = {
/* image_index max_speed running_cost engclass
* | type | power | running_cost_class
* | | cost_factor | weight | | capacity
* | | | | | | | | | railtype
* | | | | | | | | | | | */
/* Rail */
RVI( 2, G, 7, 64, 300, 47, 50, RC_S, 0, R, S), // 0 Kirby Paul Tank (Steam)
RVI(19, G, 8, 80, 600, 65, 65, RC_D, 0, R, D), // 1 MJS 250 (Diesel)
RVI( 2, G, 10, 72, 400, 85, 90, RC_S, 0, R, S), // 2 Ploddyphut Choo-Choo
RVI( 0, G, 15, 96, 900, 130, 130, RC_S, 0, R, S), // 3 Powernaut Choo-Choo
RVI( 1, G, 19, 112, 1000, 140, 145, RC_S, 0, R, S), // 4 Mightymover Choo-Choo
RVI(12, G, 16, 120, 1400, 95, 125, RC_D, 0, R, D), // 5 Ploddyphut Diesel
RVI(14, G, 20, 152, 2000, 120, 135, RC_D, 0, R, D), // 6 Powernaut Diesel
RVI( 3, G, 14, 88, 1100, 145, 130, RC_S, 0, R, S), // 7 Wills 2-8-0 (Steam)
RVI( 0, G, 13, 112, 1000, 131, 120, RC_S, 0, R, S), // 8 Chaney 'Jubilee' (Steam)
RVI( 1, G, 19, 128, 1200, 162, 140, RC_S, 0, R, S), // 9 Ginzu 'A4' (Steam)
RVI( 0, G, 22, 144, 1600, 170, 130, RC_S, 0, R, S), // 10 SH '8P' (Steam)
RVI( 8, M, 11, 112, 600, 32, 85, RC_D, 38, R, D), // 11 Manley-Morel DMU (Diesel)
RVI(10, M, 14, 120, 700, 38, 70, RC_D, 40, R, D), // 12 'Dash' (Diesel)
RVI( 4, G, 15, 128, 1250, 72, 95, RC_D, 0, R, D), // 13 SH/Hendry '25' (Diesel)
RVI( 5, G, 17, 144, 1750, 101, 120, RC_D, 0, R, D), // 14 UU '37' (Diesel)
RVI( 4, G, 18, 160, 2580, 112, 140, RC_D, 0, R, D), // 15 Floss '47' (Diesel)
RVI(14, G, 23, 96, 4000, 150, 135, RC_D, 0, R, D), // 16 CS 4000 (Diesel)
RVI(12, G, 16, 112, 2400, 120, 105, RC_D, 0, R, D), // 17 CS 2400 (Diesel)
RVI(13, G, 30, 112, 6600, 207, 155, RC_D, 0, R, D), // 18 Centennial (Diesel)
RVI(15, G, 18, 104, 1500, 110, 105, RC_D, 0, R, D), // 19 Kelling 3100 (Diesel)
RVI(16, M, 35, 160, 3500, 95, 205, RC_D, 0, R, D), // 20 Turner Turbo (Diesel)
RVI(18, G, 21, 104, 2200, 120, 145, RC_D, 0, R, D), // 21 MJS 1000 (Diesel)
RVI( 6, M, 20, 200, 4500, 70, 190, RC_D, 4, R, D), // 22 SH '125' (Diesel)
RVI(20, G, 26, 160, 3600, 84, 180, RC_E, 0, C, E), // 23 SH '30' (Electric)
RVI(20, G, 30, 176, 5000, 82, 205, RC_E, 0, C, E), // 24 SH '40' (Electric)
RVI(21, M, 40, 240, 7000, 90, 240, RC_E, 0, C, E), // 25 'T.I.M.' (Electric)
RVI(23, M, 43, 264, 8000, 95, 250, RC_E, 0, C, E), // 26 'AsiaStar' (Electric)
RVI(33, W, 247, 0, 0, 25, 0, RC_W, 40, R, A), // 27 Passenger Carriage
RVI(35, W, 228, 0, 0, 21, 0, RC_W, 30, R, A), // 28 Mail Van
RVI(34, W, 176, 0, 0, 18, 0, RC_W, 30, R, A), // 29 Coal Truck
RVI(36, W, 200, 0, 0, 24, 0, RC_W, 30, R, A), // 30 Oil Tanker
RVI(37, W, 192, 0, 0, 20, 0, RC_W, 25, R, A), // 31 Livestock Van
RVI(38, W, 190, 0, 0, 21, 0, RC_W, 25, R, A), // 32 Goods Van
RVI(39, W, 182, 0, 0, 19, 0, RC_W, 30, R, A), // 33 Grain Hopper
RVI(40, W, 181, 0, 0, 16, 0, RC_W, 30, R, A), // 34 Wood Truck
RVI(41, W, 179, 0, 0, 19, 0, RC_W, 30, R, A), // 35 Iron Ore Hopper
RVI(42, W, 196, 0, 0, 18, 0, RC_W, 20, R, A), // 36 Steel Truck
RVI(43, W, 255, 0, 0, 30, 0, RC_W, 20, R, A), // 37 Armoured Van
RVI(44, W, 191, 0, 0, 22, 0, RC_W, 25, R, A), // 38 Food Van
RVI(45, W, 196, 0, 0, 18, 0, RC_W, 20, R, A), // 39 Paper Truck
RVI(46, W, 179, 0, 0, 19, 0, RC_W, 30, R, A), // 40 Copper Ore Hopper
RVI(47, W, 199, 0, 0, 25, 0, RC_W, 25, R, A), // 41 Water Tanker
RVI(48, W, 182, 0, 0, 18, 0, RC_W, 25, R, A), // 42 Fruit Truck
RVI(49, W, 185, 0, 0, 19, 0, RC_W, 21, R, A), // 43 Rubber Truck
RVI(50, W, 176, 0, 0, 19, 0, RC_W, 30, R, A), // 44 Sugar Truck
RVI(51, W, 178, 0, 0, 20, 0, RC_W, 30, R, A), // 45 Candyfloss Hopper
RVI(52, W, 192, 0, 0, 20, 0, RC_W, 30, R, A), // 46 Toffee Hopper
RVI(53, W, 190, 0, 0, 21, 0, RC_W, 20, R, A), // 47 Bubble Van
RVI(54, W, 182, 0, 0, 24, 0, RC_W, 25, R, A), // 48 Cola Tanker
RVI(55, W, 181, 0, 0, 21, 0, RC_W, 25, R, A), // 49 Sweet Van
RVI(56, W, 183, 0, 0, 21, 0, RC_W, 20, R, A), // 50 Toy Van
RVI(57, W, 196, 0, 0, 18, 0, RC_W, 22, R, A), // 51 Battery Truck
RVI(58, W, 193, 0, 0, 18, 0, RC_W, 25, R, A), // 52 Fizzy Drink Truck
RVI(59, W, 191, 0, 0, 18, 0, RC_W, 30, R, A), // 53 Plastic Truck
/* Monorail */
RVI(25, G, 52, 304, 9000, 95, 230, RC_E, 0, O, N), // 54 'X2001' (Electric)
RVI(26, M, 60, 336, 10000, 85, 240, RC_E, 25, O, N), // 55 'Millennium Z1' (Electric)
RVI(26, G, 53, 320, 5000, 95, 230, RC_E, 0, O, N), // 56 Wizzowow Z99
RVI(60, W, 247, 0, 0, 25, 0, RC_W, 45, O, A), // 57 Passenger Carriage
RVI(62, W, 228, 0, 0, 21, 0, RC_W, 35, O, A), // 58 Mail Van
RVI(61, W, 176, 0, 0, 18, 0, RC_W, 35, O, A), // 59 Coal Truck
RVI(63, W, 200, 0, 0, 24, 0, RC_W, 35, O, A), // 60 Oil Tanker
RVI(64, W, 192, 0, 0, 20, 0, RC_W, 30, O, A), // 61 Livestock Van
RVI(65, W, 190, 0, 0, 21, 0, RC_W, 30, O, A), // 62 Goods Van
RVI(66, W, 182, 0, 0, 19, 0, RC_W, 35, O, A), // 63 Grain Hopper
RVI(67, W, 181, 0, 0, 16, 0, RC_W, 35, O, A), // 64 Wood Truck
RVI(68, W, 179, 0, 0, 19, 0, RC_W, 35, O, A), // 65 Iron Ore Hopper
RVI(69, W, 196, 0, 0, 18, 0, RC_W, 25, O, A), // 66 Steel Truck
RVI(70, W, 255, 0, 0, 30, 0, RC_W, 25, O, A), // 67 Armoured Van
RVI(71, W, 191, 0, 0, 22, 0, RC_W, 30, O, A), // 68 Food Van
RVI(72, W, 196, 0, 0, 18, 0, RC_W, 25, O, A), // 69 Paper Truck
RVI(73, W, 179, 0, 0, 19, 0, RC_W, 35, O, A), // 70 Copper Ore Hopper
RVI(47, W, 199, 0, 0, 25, 0, RC_W, 30, O, A), // 71 Water Tanker
RVI(48, W, 182, 0, 0, 18, 0, RC_W, 30, O, A), // 72 Fruit Truck
RVI(49, W, 185, 0, 0, 19, 0, RC_W, 26, O, A), // 73 Rubber Truck
RVI(50, W, 176, 0, 0, 19, 0, RC_W, 35, O, A), // 74 Sugar Truck
RVI(51, W, 178, 0, 0, 20, 0, RC_W, 35, O, A), // 75 Candyfloss Hopper
RVI(52, W, 192, 0, 0, 20, 0, RC_W, 35, O, A), // 76 Toffee Hopper
RVI(53, W, 190, 0, 0, 21, 0, RC_W, 25, O, A), // 77 Bubble Van
RVI(54, W, 182, 0, 0, 24, 0, RC_W, 30, O, A), // 78 Cola Tanker
RVI(55, W, 181, 0, 0, 21, 0, RC_W, 30, O, A), // 79 Sweet Van
RVI(56, W, 183, 0, 0, 21, 0, RC_W, 25, O, A), // 80 Toy Van
RVI(57, W, 196, 0, 0, 18, 0, RC_W, 27, O, A), // 81 Battery Truck
RVI(58, W, 193, 0, 0, 18, 0, RC_W, 30, O, A), // 82 Fizzy Drink Truck
RVI(59, W, 191, 0, 0, 18, 0, RC_W, 35, O, A), // 83 Plastic Truck
/* Maglev */
RVI(28, G, 70, 400, 10000, 105, 250, RC_E, 0, L, V), // 84 Lev1 'Leviathan' (Electric)
RVI(29, G, 74, 448, 12000, 120, 253, RC_E, 0, L, V), // 85 Lev2 'Cyclops' (Electric)
RVI(30, G, 82, 480, 15000, 130, 254, RC_E, 0, L, V), // 86 Lev3 'Pegasus' (Electric)
RVI(31, M, 95, 640, 20000, 150, 255, RC_E, 0, L, V), // 87 Lev4 'Chimaera' (Electric)
RVI(28, G, 70, 480, 10000, 120, 250, RC_E, 0, L, V), // 88 Wizzowow Rocketeer
RVI(60, W, 247, 0, 0, 25, 0, RC_W, 47, L, A), // 89 Passenger Carriage
RVI(62, W, 228, 0, 0, 21, 0, RC_W, 37, L, A), // 90 Mail Van
RVI(61, W, 176, 0, 0, 18, 0, RC_W, 37, L, A), // 91 Coal Truck
RVI(63, W, 200, 0, 0, 24, 0, RC_W, 37, L, A), // 92 Oil Tanker
RVI(64, W, 192, 0, 0, 20, 0, RC_W, 32, L, A), // 93 Livestock Van
RVI(65, W, 190, 0, 0, 21, 0, RC_W, 32, L, A), // 94 Goods Van
RVI(66, W, 182, 0, 0, 19, 0, RC_W, 37, L, A), // 95 Grain Hopper
RVI(67, W, 181, 0, 0, 16, 0, RC_W, 37, L, A), // 96 Wood Truck
RVI(68, W, 179, 0, 0, 19, 0, RC_W, 37, L, A), // 97 Iron Ore Hopper
RVI(69, W, 196, 0, 0, 18, 0, RC_W, 27, L, A), // 98 Steel Truck
RVI(70, W, 255, 0, 0, 30, 0, RC_W, 27, L, A), // 99 Armoured Van
RVI(71, W, 191, 0, 0, 22, 0, RC_W, 32, L, A), // 100 Food Van
RVI(72, W, 196, 0, 0, 18, 0, RC_W, 27, L, A), // 101 Paper Truck
RVI(73, W, 179, 0, 0, 19, 0, RC_W, 37, L, A), // 102 Copper Ore Hopper
RVI(47, W, 199, 0, 0, 25, 0, RC_W, 32, L, A), // 103 Water Tanker
RVI(48, W, 182, 0, 0, 18, 0, RC_W, 32, L, A), // 104 Fruit Truck
RVI(49, W, 185, 0, 0, 19, 0, RC_W, 28, L, A), // 105 Rubber Truck
RVI(50, W, 176, 0, 0, 19, 0, RC_W, 37, L, A), // 106 Sugar Truck
RVI(51, W, 178, 0, 0, 20, 0, RC_W, 37, L, A), // 107 Candyfloss Hopper
RVI(52, W, 192, 0, 0, 20, 0, RC_W, 37, L, A), // 108 Toffee Hopper
RVI(53, W, 190, 0, 0, 21, 0, RC_W, 27, L, A), // 109 Bubble Van
RVI(54, W, 182, 0, 0, 24, 0, RC_W, 32, L, A), // 110 Cola Tanker
RVI(55, W, 181, 0, 0, 21, 0, RC_W, 32, L, A), // 111 Sweet Van
RVI(56, W, 183, 0, 0, 21, 0, RC_W, 27, L, A), // 112 Toy Van
RVI(57, W, 196, 0, 0, 18, 0, RC_W, 29, L, A), // 113 Battery Truck
RVI(58, W, 193, 0, 0, 18, 0, RC_W, 32, L, A), // 114 Fizzy Drink Truck
RVI(59, W, 191, 0, 0, 18, 0, RC_W, 37, L, A), // 115 Plastic Truck
};
#undef RC_W
#undef RC_E
#undef RC_D
#undef RC_S
#undef L
#undef O
#undef C
#undef R
#undef V
#undef N
#undef E
#undef D
#undef S
#undef G
#undef W
#undef M
#undef RVI
/**
* Writes the properties of a ship into the ShipVehicleInfo struct.
* @see ShipVehicleInfo
* @param a image_index
* @param b cost_factor
* @param c max_speed (1 unit = 1/3.2 mph = 0.5 km-ish/h)
* @param d capacity (persons, bags, tons, pieces, items, cubic metres, ...)
* @param e running_cost
* @param f sound effect
* @param g refittable
*/
#define SVI(a, b, c, d, e, f, g) { a, b, c, d, e, f, g, VE_DEFAULT, 0, 0 }
static const ShipVehicleInfo _orig_ship_vehicle_info[] = {
/* image_index capacity refittable
* | cost_factor running_cost |
* | | max_speed | sfx |
* | | | | | | | */
SVI( 1, 160, 48, 220, 140, SND_06_SHIP_HORN, 0 ), // 0 MPS Oil Tanker
SVI( 1, 176, 80, 350, 125, SND_06_SHIP_HORN, 0 ), // 1 CS-Inc. Oil Tanker
SVI( 2, 96, 64, 100, 90, SND_07_FERRY_HORN, 0 ), // 2 MPS Passenger Ferry
SVI( 2, 112, 128, 130, 80, SND_07_FERRY_HORN, 0 ), // 3 FFP Passenger Ferry
SVI( 3, 148, 224, 100, 190, SND_07_FERRY_HORN, 0 ), // 4 Bakewell 300 Hovercraft
SVI( 2, 96, 64, 100, 90, SND_07_FERRY_HORN, 0 ), // 5 Chugger-Chug Passenger Ferry
SVI( 2, 112, 128, 130, 80, SND_07_FERRY_HORN, 0 ), // 6 Shivershake Passenger Ferry
SVI( 0, 128, 48, 160, 150, SND_06_SHIP_HORN, 1 ), // 7 Yate Cargo ship
SVI( 0, 144, 80, 190, 113, SND_06_SHIP_HORN, 1 ), // 8 Bakewell Cargo ship
SVI( 0, 128, 48, 160, 150, SND_06_SHIP_HORN, 1 ), // 9 Mightymover Cargo ship
SVI( 0, 144, 80, 190, 113, SND_06_SHIP_HORN, 1 ), // 10 Powernaut Cargo ship
};
#undef SVI
/**
* Writes the properties of an aircraft into the AircraftVehicleInfo struct.
* @see AircraftVehicleInfo
* @param a image_index
* @param b cost_factor
* @param c running_Cost
* @param d subtype (bit 0 - plane, bit 1 - large plane)
* @param e sound effect
* @param f acceleration (1 unit = 3/8 mph/tick = 3/5 km-ish/h/tick) (stays the same in the variable)
* @param g max_speed (1 unit = 8 mph = 12.8 km-ish/h) (is converted to km-ish/h by the macro)
* @param h mail_capacity (bags)
* @param i passenger_capacity (persons)
*/
#define AVI(a, b, c, d, e, f, g, h, i) { a, b, c, d, e, f, (g * 128) / 10, h, i, 0 }
#define H AIR_HELI
#define P AIR_CTOL
#define J AIR_CTOL | AIR_FAST
static const AircraftVehicleInfo _orig_aircraft_vehicle_info[] = {
/* image_index sfx acceleration
* | cost_factor | | max_speed
* | | running_cost | | mail_capacity
* | | | subtype | | | | passenger_capacity
* | | | | | | | | | */
AVI( 1, 14, 85, P, SND_08_PLANE_TAKE_OFF, 18, 37, 4, 25 ), // 0 Sampson U52
AVI( 0, 15, 100, P, SND_08_PLANE_TAKE_OFF, 20, 37, 8, 65 ), // 1 Coleman Count
AVI( 2, 16, 130, J, SND_09_JET, 35, 74, 10, 90 ), // 2 FFP Dart
AVI( 8, 75, 250, J, SND_3B_JET_OVERHEAD, 50, 181, 20, 100 ), // 3 Yate Haugan
AVI( 5, 15, 98, P, SND_08_PLANE_TAKE_OFF, 20, 37, 6, 30 ), // 4 Bakewell Cotswald LB-3
AVI( 6, 18, 240, J, SND_09_JET, 40, 74, 30, 200 ), // 5 Bakewell Luckett LB-8
AVI( 2, 17, 150, P, SND_09_JET, 35, 74, 15, 100 ), // 6 Bakewell Luckett LB-9
AVI( 2, 18, 245, J, SND_09_JET, 40, 74, 30, 150 ), // 7 Bakewell Luckett LB80
AVI( 3, 19, 192, J, SND_09_JET, 40, 74, 40, 220 ), // 8 Bakewell Luckett LB-10
AVI( 3, 20, 190, J, SND_09_JET, 40, 74, 25, 230 ), // 9 Bakewell Luckett LB-11
AVI( 2, 16, 135, J, SND_09_JET, 35, 74, 10, 95 ), // 10 Yate Aerospace YAC 1-11
AVI( 2, 18, 240, J, SND_09_JET, 40, 74, 35, 170 ), // 11 Darwin 100
AVI( 4, 17, 155, J, SND_09_JET, 40, 74, 15, 110 ), // 12 Darwin 200
AVI( 7, 30, 253, J, SND_3D_ANOTHER_JET_OVERHEAD, 40, 74, 50, 300 ), // 13 Darwin 300
AVI( 4, 18, 210, J, SND_09_JET, 40, 74, 25, 200 ), // 14 Darwin 400
AVI( 4, 19, 220, J, SND_09_JET, 40, 74, 25, 240 ), // 15 Darwin 500
AVI( 4, 27, 230, J, SND_09_JET, 40, 74, 40, 260 ), // 16 Darwin 600
AVI( 3, 25, 225, J, SND_09_JET, 40, 74, 35, 240 ), // 17 Guru Galaxy
AVI( 4, 20, 235, J, SND_09_JET, 40, 74, 30, 260 ), // 18 Airtaxi A21
AVI( 4, 19, 220, J, SND_09_JET, 40, 74, 25, 210 ), // 19 Airtaxi A31
AVI( 4, 18, 170, J, SND_09_JET, 40, 74, 20, 160 ), // 20 Airtaxi A32
AVI( 4, 26, 210, J, SND_09_JET, 40, 74, 20, 220 ), // 21 Airtaxi A33
AVI( 6, 16, 125, P, SND_09_JET, 50, 74, 10, 80 ), // 22 Yate Aerospace YAe46
AVI( 2, 17, 145, P, SND_09_JET, 40, 74, 10, 85 ), // 23 Dinger 100
AVI( 11, 16, 130, P, SND_09_JET, 40, 74, 10, 75 ), // 24 AirTaxi A34-1000
AVI( 10, 16, 149, P, SND_09_JET, 40, 74, 10, 85 ), // 25 Yate Z-Shuttle
AVI( 15, 17, 170, P, SND_09_JET, 40, 74, 18, 65 ), // 26 Kelling K1
AVI( 12, 18, 210, J, SND_09_JET, 40, 74, 25, 110 ), // 27 Kelling K6
AVI( 13, 20, 230, J, SND_09_JET, 40, 74, 60, 180 ), // 28 Kelling K7
AVI( 14, 21, 220, J, SND_09_JET, 40, 74, 65, 150 ), // 29 Darwin 700
AVI( 16, 19, 160, J, SND_09_JET, 40, 181, 45, 85 ), // 30 FFP Hyperdart 2
AVI( 17, 24, 248, J, SND_3D_ANOTHER_JET_OVERHEAD, 40, 74, 80, 400 ), // 31 Dinger 200
AVI( 18, 80, 251, J, SND_3B_JET_OVERHEAD, 50, 181, 45, 130 ), // 32 Dinger 1000
AVI( 20, 13, 85, P, SND_45_PLANE_CRASHING, 18, 37, 5, 25 ), // 33 Ploddyphut 100
AVI( 21, 18, 100, P, SND_46_PLANE_ENGINE_SPUTTERING, 20, 37, 9, 60 ), // 34 Ploddyphut 500
AVI( 22, 25, 140, P, SND_09_JET, 40, 74, 12, 90 ), // 35 Flashbang X1
AVI( 23, 32, 220, J, SND_3D_ANOTHER_JET_OVERHEAD, 40, 74, 40, 200 ), // 36 Juggerplane M1
AVI( 24, 80, 255, J, SND_3B_JET_OVERHEAD, 50, 181, 30, 100 ), // 37 Flashbang Wizzer
AVI( 9, 15, 81, H, SND_09_JET, 20, 25, 15, 40 ), // 38 Tricario Helicopter
AVI( 19, 17, 77, H, SND_09_JET, 20, 40, 20, 55 ), // 39 Guru X2 Helicopter
AVI( 25, 15, 80, H, SND_09_JET, 20, 25, 10, 40 ), // 40 Powernaut Helicopter
};
#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 cost_factor
* @param c running_cost
* @param d sound effect
* @param e max_speed (1 unit = 1/3.2 mph = 0.5 km-ish/h)
* @param f capacity (persons, bags, tons, pieces, items, cubic metres, ...)
* @param g weight (1/4 ton)
* @param h power (10 hp)
* Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
* Air drag value depends on the top speed of the vehicle.
*/
#define ROV(a, b, c, d, e, f, g, h) { a, b, c, PR_RUNNING_ROADVEH, d, e, f, g, h, 76, 0, VE_DEFAULT, 0 }
static const RoadVehicleInfo _orig_road_vehicle_info[] = {
/* image_index sfx max_speed power
* | cost_factor | | capacity |
* | | running_cost | | weight
* | | | | | | | |*/
ROV( 0, 120, 91, SND_19_BUS_START_PULL_AWAY, 112, 31, 42, 9), // 0 MPS Regal Bus
ROV( 17, 140, 128, SND_1C_TRUCK_START_2, 176, 35, 60, 12), // 1 Hereford Leopard Bus
ROV( 17, 150, 178, SND_1B_TRUCK_START, 224, 37, 70, 15), // 2 Foster Bus
ROV( 34, 160, 240, SND_1B_TRUCK_START, 255, 40, 100, 25), // 3 Foster MkII Superbus
ROV( 51, 120, 91, SND_3C_COMEDY_CAR, 112, 30, 42, 9), // 4 Ploddyphut MkI Bus
ROV( 51, 140, 171, SND_3E_COMEDY_CAR_2, 192, 35, 60, 15), // 5 Ploddyphut MkII Bus
ROV( 51, 160, 240, SND_3C_COMEDY_CAR, 240, 38, 90, 25), // 6 Ploddyphut MkIII Bus
ROV( 1, 108, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12), // 7 Balogh Coal Truck
ROV( 18, 128, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 8 Uhl Coal Truck
ROV( 35, 138, 240, SND_19_BUS_START_PULL_AWAY, 224, 28, 69, 45), // 9 DW Coal Truck
ROV( 2, 115, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12), // 10 MPS Mail Truck
ROV( 19, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 28, 48, 22), // 11 Reynard Mail Truck
ROV( 36, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, 69, 45), // 12 Perry Mail Truck
ROV( 57, 115, 90, SND_3E_COMEDY_CAR_2, 96, 22, 38, 12), // 13 MightyMover Mail Truck
ROV( 57, 135, 168, SND_3C_COMEDY_CAR, 176, 28, 48, 22), // 14 Powernaught Mail Truck
ROV( 57, 145, 240, SND_3E_COMEDY_CAR_2, 224, 30, 69, 45), // 15 Wizzowow Mail Truck
ROV( 3, 110, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, 38, 12), // 16 Witcombe Oil Tanker
ROV( 20, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 17 Foster Oil Tanker
ROV( 37, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 18 Perry Oil Tanker
ROV( 4, 105, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, 38, 12), // 19 Talbott Livestock Van
ROV( 21, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, 48, 22), // 20 Uhl Livestock Van
ROV( 38, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, 69, 45), // 21 Foster Livestock Van
ROV( 5, 107, 90, SND_19_BUS_START_PULL_AWAY, 96, 14, 38, 12), // 22 Balogh Goods Truck
ROV( 22, 130, 168, SND_19_BUS_START_PULL_AWAY, 176, 16, 48, 22), // 23 Craighead Goods Truck
ROV( 39, 140, 240, SND_19_BUS_START_PULL_AWAY, 224, 18, 69, 45), // 24 Goss Goods Truck
ROV( 6, 114, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12), // 25 Hereford Grain Truck
ROV( 23, 133, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 26 Thomas Grain Truck
ROV( 40, 143, 240, SND_19_BUS_START_PULL_AWAY, 224, 30, 69, 45), // 27 Goss Grain Truck
ROV( 7, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 20, 38, 12), // 28 Witcombe Wood Truck
ROV( 24, 137, 168, SND_19_BUS_START_PULL_AWAY, 176, 22, 48, 22), // 29 Foster Wood Truck
ROV( 41, 147, 240, SND_19_BUS_START_PULL_AWAY, 224, 24, 69, 45), // 30 Moreland Wood Truck
ROV( 8, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12), // 31 MPS Iron Ore Truck
ROV( 25, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 32 Uhl Iron Ore Truck
ROV( 42, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 33 Chippy Iron Ore Truck
ROV( 9, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, 38, 12), // 34 Balogh Steel Truck
ROV( 26, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, 48, 22), // 35 Uhl Steel Truck
ROV( 43, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, 69, 45), // 36 Kelling Steel Truck
ROV( 10, 145, 90, SND_19_BUS_START_PULL_AWAY, 96, 12, 38, 12), // 37 Balogh Armoured Truck
ROV( 27, 170, 168, SND_19_BUS_START_PULL_AWAY, 176, 15, 48, 22), // 38 Uhl Armoured Truck
ROV( 44, 180, 240, SND_19_BUS_START_PULL_AWAY, 224, 16, 69, 45), // 39 Foster Armoured Truck
ROV( 11, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, 38, 12), // 40 Foster Food Van
ROV( 28, 134, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, 48, 22), // 41 Perry Food Van
ROV( 45, 144, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, 69, 45), // 42 Chippy Food Van
ROV( 12, 112, 90, SND_19_BUS_START_PULL_AWAY, 96, 15, 38, 12), // 43 Uhl Paper Truck
ROV( 29, 135, 168, SND_19_BUS_START_PULL_AWAY, 176, 18, 48, 22), // 44 Balogh Paper Truck
ROV( 46, 145, 240, SND_19_BUS_START_PULL_AWAY, 224, 20, 69, 45), // 45 MPS Paper Truck
ROV( 13, 121, 90, SND_19_BUS_START_PULL_AWAY, 96, 22, 38, 12), // 46 MPS Copper Ore Truck
ROV( 30, 140, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 47 Uhl Copper Ore Truck
ROV( 47, 150, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 48 Goss Copper Ore Truck
ROV( 14, 111, 90, SND_19_BUS_START_PULL_AWAY, 96, 21, 38, 12), // 49 Uhl Water Tanker
ROV( 31, 141, 168, SND_19_BUS_START_PULL_AWAY, 176, 25, 48, 22), // 50 Balogh Water Tanker
ROV( 48, 151, 240, SND_19_BUS_START_PULL_AWAY, 224, 27, 69, 45), // 51 MPS Water Tanker
ROV( 15, 118, 90, SND_19_BUS_START_PULL_AWAY, 96, 18, 38, 12), // 52 Balogh Fruit Truck
ROV( 32, 148, 168, SND_19_BUS_START_PULL_AWAY, 176, 20, 48, 22), // 53 Uhl Fruit Truck
ROV( 49, 158, 240, SND_19_BUS_START_PULL_AWAY, 224, 23, 69, 45), // 54 Kelling Fruit Truck
ROV( 16, 117, 90, SND_19_BUS_START_PULL_AWAY, 96, 17, 38, 12), // 55 Balogh Rubber Truck
ROV( 33, 147, 168, SND_19_BUS_START_PULL_AWAY, 176, 19, 48, 22), // 56 Uhl Rubber Truck
ROV( 50, 157, 240, SND_19_BUS_START_PULL_AWAY, 224, 22, 69, 45), // 57 RMT Rubber Truck
ROV( 52, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 58 MightyMover Sugar Truck
ROV( 52, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 59 Powernaught Sugar Truck
ROV( 52, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 60 Wizzowow Sugar Truck
ROV( 53, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 61 MightyMover Cola Truck
ROV( 53, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 62 Powernaught Cola Truck
ROV( 53, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 63 Wizzowow Cola Truck
ROV( 54, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 64 MightyMover Candyfloss Truck
ROV( 54, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 65 Powernaught Candyfloss Truck
ROV( 54, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 66 Wizzowow Candyfloss Truck
ROV( 55, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 67 MightyMover Toffee Truck
ROV( 55, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 68 Powernaught Toffee Truck
ROV( 55, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 69 Wizzowow Toffee Truck
ROV( 56, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 70 MightyMover Toy Van
ROV( 56, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 71 Powernaught Toy Van
ROV( 56, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 72 Wizzowow Toy Van
ROV( 58, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 73 MightyMover Sweet Truck
ROV( 58, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 74 Powernaught Sweet Truck
ROV( 58, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 75 Wizzowow Sweet Truck
ROV( 59, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 76 MightyMover Battery Truck
ROV( 59, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 77 Powernaught Battery Truck
ROV( 59, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 78 Wizzowow Battery Truck
ROV( 60, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 79 MightyMover Fizzy Drink Truck
ROV( 60, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 80 Powernaught Fizzy Drink Truck
ROV( 60, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 81 Wizzowow Fizzy Drink Truck
ROV( 61, 117, 90, SND_3F_COMEDY_CAR_3, 96, 17, 38, 12), // 82 MightyMover Plastic Truck
ROV( 61, 147, 168, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 176, 19, 48, 22), // 83 Powernaught Plastic Truck
ROV( 61, 157, 240, SND_3F_COMEDY_CAR_3, 224, 22, 69, 45), // 84 Wizzowow Plastic Truck
ROV( 62, 117, 90, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 96, 17, 38, 12), // 85 MightyMover Bubble Truck
ROV( 62, 147, 168, SND_3F_COMEDY_CAR_3, 176, 19, 48, 22), // 86 Powernaught Bubble Truck
ROV( 62, 157, 240, SND_40_COMEDY_CAR_START_AND_PULL_AWAY, 224, 22, 69, 45), // 87 Wizzowow Bubble Truck
};
#undef ROV
#endif /* ENGINES_H */

View File

@@ -0,0 +1,186 @@
; $Id$
;
; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;
[pre-amble]
static const uint GAME_DIFFICULTY_NUM = 18;
static uint16 _old_diff_custom[GAME_DIFFICULTY_NUM];
uint8 _old_diff_level; ///< Old difficulty level from old savegames
uint8 _old_units; ///< Old units from old savegames
/* Most of these strings are used both for gameopt-backward compatability
* and the settings tables. The rest is here for consistency. */
static const char *_locale_currencies = "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|RON|RUR|SIT|SEK|YTL|SKK|BRL|EEK|custom";
static const char *_locale_units = "imperial|metric|si";
static const char *_town_names = "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovak|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan";
static const char *_climates = "temperate|arctic|tropic|toyland";
static const char *_autosave_interval = "off|monthly|quarterly|half year|yearly";
static const char *_roadsides = "left|right";
static const char *_savegame_date = "long|short|iso";
#ifdef ENABLE_NETWORK
static const char *_server_langs = "ANY|ENGLISH|GERMAN|FRENCH|BRAZILIAN|BULGARIAN|CHINESE|CZECH|DANISH|DUTCH|ESPERANTO|FINNISH|HUNGARIAN|ICELANDIC|ITALIAN|JAPANESE|KOREAN|LITHUANIAN|NORWEGIAN|POLISH|PORTUGUESE|ROMANIAN|RUSSIAN|SLOVAK|SLOVENIAN|SPANISH|SWEDISH|TURKISH|UKRAINIAN|AFRIKAANS|CROATIAN|CATALAN|ESTONIAN|GALICIAN|GREEK|LATVIAN";
#endif /* ENABLE_NETWORK */
static const char *_osk_activation = "disabled|double|single|immediately";
static const char *_settings_profiles = "easy|medium|hard";
static const char *_news_display = "off|summarized|full";
static const SettingDesc _gameopt_settings[] = {
/* In version 4 a new difficulty setting has been added to the difficulty settings,
* town attitude towards demolishing. Needs special handling because some dimwit thought
* it funny to have the GameDifficulty struct be an array while it is a struct of
* same-sized members
* XXX - To save file-space and since values are never bigger than about 10? only
* save the first 16 bits in the savegame. Question is why the values are still int32
* and why not byte for example?
* 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlArray() hack
* for savegames version 0 - though it is an array, it has to go through the byteswap process */
[post-amble]
};
[templates]
SDTG_GENERAL = SDTG_GENERAL($name, $sdt_cmd, $sle_cmd, $type, $flags, $guiflags, $var, $length, $def, $min, $max, $interval, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_NULL = SDT_NULL($length, $from, $to),
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $guiflags, $def, $max, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def, $max, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_OMANY = SDT_OMANY($base, $var, $type, $flags, $guiflags, $def, $max, $full, $str, $strhelp, $strval, $proc, $from, $to, $load, $cat),
SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_END = SDT_END()
[defaults]
flags = 0
guiflags = 0
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
[SDTG_GENERAL]
name = ""diff_custom""
sdt_cmd = SDT_INTLIST
sle_cmd = SL_ARR
type = SLE_FILE_I16 | SLE_VAR_U16
flags = SLF_NOT_IN_CONFIG
var = _old_diff_custom
length = 17
def = 0
min = 0
max = 0
full = NULL
to = SLV_4
[SDTG_GENERAL]
name = ""diff_custom""
sdt_cmd = SDT_INTLIST
sle_cmd = SL_ARR
type = SLE_UINT16
flags = SLF_NOT_IN_CONFIG
var = _old_diff_custom
length = 18
def = 0
min = 0
max = 0
full = NULL
from = SLV_4
##
[SDTG_VAR]
name = ""diff_level""
var = _old_diff_level
type = SLE_UINT8
flags = SLF_NOT_IN_CONFIG
def = SP_CUSTOM
min = SP_EASY
max = SP_CUSTOM
cat = SC_BASIC
[SDT_OMANY]
base = GameSettings
var = locale.currency
type = SLE_UINT8
flags = SLF_NO_NETWORK_SYNC
def = 0
max = CURRENCY_END - 1
full = _locale_currencies
cat = SC_BASIC
[SDTG_OMANY]
name = ""units""
var = _old_units
type = SLE_UINT8
flags = SLF_NOT_IN_CONFIG
def = 1
max = 2
full = _locale_units
cat = SC_BASIC
# There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow
# these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI.
[SDT_OMANY]
base = GameSettings
var = game_creation.town_name
type = SLE_UINT8
def = 0
max = 255
full = _town_names
cat = SC_BASIC
[SDT_OMANY]
base = GameSettings
var = game_creation.landscape
type = SLE_UINT8
def = 0
max = 3
full = _climates
load = ConvertLandscape
cat = SC_BASIC
[SDT_VAR]
base = GameSettings
var = game_creation.snow_line_height
type = SLE_UINT8
def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT
min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT
max = MAX_SNOWLINE_HEIGHT * TILE_HEIGHT
to = SLV_22
[SDT_NULL]
length = 1
from = SLV_22
to = SLV_165
[SDT_NULL]
length = 1
to = SLV_23
[SDTC_OMANY]
var = gui.autosave
type = SLE_UINT8
from = SLV_23
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
def = 1
max = 4
full = _autosave_interval
cat = SC_BASIC
[SDT_OMANY]
base = GameSettings
var = vehicle.road_side
type = SLE_UINT8
def = 1
max = 1
full = _roadsides
cat = SC_BASIC
[SDT_END]

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

@@ -0,0 +1,168 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file genland.h Table used to generate deserts and/or rain forests. */
#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

View File

@@ -0,0 +1,344 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file heightmap_colours.h The colour tables for heightmaps.
*/
/** Height map colours for the green colour scheme, ordered by height. */
static const uint32 _green_map_heights[] = {
MKCOLOUR(0x59595958),
MKCOLOUR(0x59595958),
MKCOLOUR(0x59595959),
MKCOLOUR(0x5959595A),
MKCOLOUR(0x59595A59),
MKCOLOUR(0x59595A5A),
MKCOLOUR(0x595A5959),
MKCOLOUR(0x595A595A),
MKCOLOUR(0x595A5A59),
MKCOLOUR(0x595A5A5A),
MKCOLOUR(0x5A595959),
MKCOLOUR(0x5A59595A),
MKCOLOUR(0x5A595A59),
MKCOLOUR(0x5A595A5A),
MKCOLOUR(0x5A5A5959),
MKCOLOUR(0x5A5A595A),
MKCOLOUR(0x5A5A5A59),
MKCOLOUR(0x5A5A5A5A),
MKCOLOUR(0x5A5A5A5B),
MKCOLOUR(0x5A5A5B5A),
MKCOLOUR(0x5A5A5B5B),
MKCOLOUR(0x5A5B5A5A),
MKCOLOUR(0x5A5B5A5B),
MKCOLOUR(0x5A5B5B5A),
MKCOLOUR(0x5A5B5B5B),
MKCOLOUR(0x5B5A5A5A),
MKCOLOUR(0x5B5A5A5B),
MKCOLOUR(0x5B5A5B5A),
MKCOLOUR(0x5B5A5B5B),
MKCOLOUR(0x5B5B5A5A),
MKCOLOUR(0x5B5B5A5B),
MKCOLOUR(0x5B5B5B5B),
MKCOLOUR(0x5B5B5B5C),
MKCOLOUR(0x5B5B5C5B),
MKCOLOUR(0x5B5B5C5C),
MKCOLOUR(0x5B5C5B5B),
MKCOLOUR(0x5B5C5B5C),
MKCOLOUR(0x5B5C5C5B),
MKCOLOUR(0x5B5C5C5C),
MKCOLOUR(0x5C5B5B5B),
MKCOLOUR(0x5C5B5B5C),
MKCOLOUR(0x5C5B5C5B),
MKCOLOUR(0x5C5B5C5C),
MKCOLOUR(0x5C5C5B5B),
MKCOLOUR(0x5C5C5B5C),
MKCOLOUR(0x5C5C5C5C),
MKCOLOUR(0x5C5C5C5D),
MKCOLOUR(0x5C5C5D5C),
MKCOLOUR(0x5C5C5D5D),
MKCOLOUR(0x5C5D5C5C),
MKCOLOUR(0x5C5D5C5D),
MKCOLOUR(0x5C5D5D5C),
MKCOLOUR(0x5C5D5D5D),
MKCOLOUR(0x5D5C5C5C),
MKCOLOUR(0x5D5C5C5D),
MKCOLOUR(0x5D5C5D5C),
MKCOLOUR(0x5D5C5D5D),
MKCOLOUR(0x5D5D5C5C),
MKCOLOUR(0x5D5D5C5D),
MKCOLOUR(0x5D5D5D5D),
MKCOLOUR(0x5D5D5D5E),
MKCOLOUR(0x5D5D5E5D),
MKCOLOUR(0x5D5D5E5E),
MKCOLOUR(0x5D5E5D5D),
MKCOLOUR(0x5D5E5D5E),
MKCOLOUR(0x5D5E5E5D),
MKCOLOUR(0x5D5E5E5E),
MKCOLOUR(0x5E5D5D5D),
MKCOLOUR(0x5E5D5D5E),
MKCOLOUR(0x5E5D5E5D),
MKCOLOUR(0x5E5D5E5E),
MKCOLOUR(0x5E5D5D5D),
MKCOLOUR(0x5E5D5D5E),
MKCOLOUR(0x5E5E5E5E),
MKCOLOUR(0x5E5E5E5F),
MKCOLOUR(0x5E5E5F5E),
MKCOLOUR(0x5E5E5F5F),
MKCOLOUR(0x5E5F5E5E),
MKCOLOUR(0x5E5F5E5F),
MKCOLOUR(0x5E5F5F5E),
MKCOLOUR(0x5E5F5F5F),
MKCOLOUR(0x5F5E5E5E),
MKCOLOUR(0x5F5E5E5F),
MKCOLOUR(0x5F5E5F5E),
MKCOLOUR(0x5F5E5F5F),
MKCOLOUR(0x5F5F5E5E),
MKCOLOUR(0x5F5F5E5F),
MKCOLOUR(0x5F5F5F5F),
MKCOLOUR(0x5F5F5F1F),
MKCOLOUR(0x5F5F1F5F),
MKCOLOUR(0x5F5F1F1F),
MKCOLOUR(0x5F1F5F1F),
MKCOLOUR(0x5F1F1F1F),
MKCOLOUR(0x1F5F5F5F),
MKCOLOUR(0x1F5F5F1F),
MKCOLOUR(0x1F5F1F5F),
MKCOLOUR(0x1F5F1F1F),
MKCOLOUR(0x1F1F5F5F),
MKCOLOUR(0x1F1F5F1F),
MKCOLOUR(0x1F1F1F5F),
MKCOLOUR(0x1F1F1F1F),
MKCOLOUR(0x1F1F1F27),
MKCOLOUR(0x1F1F271F),
MKCOLOUR(0x1F1F2727),
MKCOLOUR(0x1F271F1F),
MKCOLOUR(0x1F271F27),
MKCOLOUR(0x1F272727),
MKCOLOUR(0x271F1F1F),
MKCOLOUR(0x271F1F27),
MKCOLOUR(0x271F271F),
MKCOLOUR(0x271F2727),
MKCOLOUR(0x27271F1F),
MKCOLOUR(0x27271F27),
MKCOLOUR(0x2727271F),
MKCOLOUR(0x27272727),
};
/** Height map colours for the dark green colour scheme, ordered by height. */
static const uint32 _dark_green_map_heights[] = {
MKCOLOUR(0x60606060),
MKCOLOUR(0x60606061),
MKCOLOUR(0x60606160),
MKCOLOUR(0x60606161),
MKCOLOUR(0x60616060),
MKCOLOUR(0x60616061),
MKCOLOUR(0x60616160),
MKCOLOUR(0x60616161),
MKCOLOUR(0x61606060),
MKCOLOUR(0x61606061),
MKCOLOUR(0x61606160),
MKCOLOUR(0x61606161),
MKCOLOUR(0x61616060),
MKCOLOUR(0x61616061),
MKCOLOUR(0x61616160),
MKCOLOUR(0x61616161),
MKCOLOUR(0x61616162),
MKCOLOUR(0x61616261),
MKCOLOUR(0x61616262),
MKCOLOUR(0x61626161),
MKCOLOUR(0x61626162),
MKCOLOUR(0x61626261),
MKCOLOUR(0x61626262),
MKCOLOUR(0x62616161),
MKCOLOUR(0x62616162),
MKCOLOUR(0x62616261),
MKCOLOUR(0x62616262),
MKCOLOUR(0x62626161),
MKCOLOUR(0x62626162),
MKCOLOUR(0x62626261),
MKCOLOUR(0x62626262),
MKCOLOUR(0x62626263),
MKCOLOUR(0x62626362),
MKCOLOUR(0x62626363),
MKCOLOUR(0x62636262),
MKCOLOUR(0x62636263),
MKCOLOUR(0x62636362),
MKCOLOUR(0x62636363),
MKCOLOUR(0x63626262),
MKCOLOUR(0x63626263),
MKCOLOUR(0x63626362),
MKCOLOUR(0x63626363),
MKCOLOUR(0x63636262),
MKCOLOUR(0x63636263),
MKCOLOUR(0x63636362),
MKCOLOUR(0x63636363),
MKCOLOUR(0x63636364),
MKCOLOUR(0x63636463),
MKCOLOUR(0x63636464),
MKCOLOUR(0x63646363),
MKCOLOUR(0x63646364),
MKCOLOUR(0x63646463),
MKCOLOUR(0x63646464),
MKCOLOUR(0x64636363),
MKCOLOUR(0x64636364),
MKCOLOUR(0x64636463),
MKCOLOUR(0x64636464),
MKCOLOUR(0x64646363),
MKCOLOUR(0x64646364),
MKCOLOUR(0x64646463),
MKCOLOUR(0x64646464),
MKCOLOUR(0x64646465),
MKCOLOUR(0x64646564),
MKCOLOUR(0x64646565),
MKCOLOUR(0x64656464),
MKCOLOUR(0x64656465),
MKCOLOUR(0x64656564),
MKCOLOUR(0x64656565),
MKCOLOUR(0x65646464),
MKCOLOUR(0x65646465),
MKCOLOUR(0x65646564),
MKCOLOUR(0x65646565),
MKCOLOUR(0x65656464),
MKCOLOUR(0x65656465),
MKCOLOUR(0x65656564),
MKCOLOUR(0x65656565),
MKCOLOUR(0x65656566),
MKCOLOUR(0x65656665),
MKCOLOUR(0x65656666),
MKCOLOUR(0x65666565),
MKCOLOUR(0x65666566),
MKCOLOUR(0x65666665),
MKCOLOUR(0x65666666),
MKCOLOUR(0x66656565),
MKCOLOUR(0x66656566),
MKCOLOUR(0x66656665),
MKCOLOUR(0x66656666),
MKCOLOUR(0x66666565),
MKCOLOUR(0x66666566),
MKCOLOUR(0x66666665),
MKCOLOUR(0x66666666),
MKCOLOUR(0x66666667),
MKCOLOUR(0x66666766),
MKCOLOUR(0x66666767),
MKCOLOUR(0x66676666),
MKCOLOUR(0x66676667),
MKCOLOUR(0x66676766),
MKCOLOUR(0x66676767),
MKCOLOUR(0x67676767),
};
/** Height map colours for the violet colour scheme, ordered by height. */
static const uint32 _violet_map_heights[] = {
MKCOLOUR(0x80808080),
MKCOLOUR(0x80808081),
MKCOLOUR(0x80808180),
MKCOLOUR(0x80808181),
MKCOLOUR(0x80818080),
MKCOLOUR(0x80818081),
MKCOLOUR(0x80818180),
MKCOLOUR(0x80818181),
MKCOLOUR(0x81808080),
MKCOLOUR(0x81808081),
MKCOLOUR(0x81808180),
MKCOLOUR(0x81808181),
MKCOLOUR(0x81818080),
MKCOLOUR(0x81818081),
MKCOLOUR(0x81818180),
MKCOLOUR(0x81818181),
MKCOLOUR(0x81818182),
MKCOLOUR(0x81818281),
MKCOLOUR(0x81818282),
MKCOLOUR(0x81828181),
MKCOLOUR(0x81828182),
MKCOLOUR(0x81828281),
MKCOLOUR(0x81828282),
MKCOLOUR(0x82818181),
MKCOLOUR(0x82818182),
MKCOLOUR(0x82818281),
MKCOLOUR(0x82818282),
MKCOLOUR(0x82828181),
MKCOLOUR(0x82828182),
MKCOLOUR(0x82828281),
MKCOLOUR(0x82828282),
MKCOLOUR(0x82828283),
MKCOLOUR(0x82828382),
MKCOLOUR(0x82828383),
MKCOLOUR(0x82838282),
MKCOLOUR(0x82838283),
MKCOLOUR(0x82838382),
MKCOLOUR(0x82838383),
MKCOLOUR(0x83828282),
MKCOLOUR(0x83828283),
MKCOLOUR(0x83828382),
MKCOLOUR(0x83828383),
MKCOLOUR(0x83838282),
MKCOLOUR(0x83838283),
MKCOLOUR(0x83838382),
MKCOLOUR(0x83838383),
MKCOLOUR(0x83838384),
MKCOLOUR(0x83838483),
MKCOLOUR(0x83838484),
MKCOLOUR(0x83848383),
MKCOLOUR(0x83848384),
MKCOLOUR(0x83848483),
MKCOLOUR(0x83848484),
MKCOLOUR(0x84838383),
MKCOLOUR(0x84838384),
MKCOLOUR(0x84838483),
MKCOLOUR(0x84838484),
MKCOLOUR(0x84848383),
MKCOLOUR(0x84848384),
MKCOLOUR(0x84848483),
MKCOLOUR(0x84848484),
MKCOLOUR(0x84848485),
MKCOLOUR(0x84848584),
MKCOLOUR(0x84848585),
MKCOLOUR(0x84858484),
MKCOLOUR(0x84858485),
MKCOLOUR(0x84858584),
MKCOLOUR(0x84858585),
MKCOLOUR(0x85848484),
MKCOLOUR(0x85848485),
MKCOLOUR(0x85848584),
MKCOLOUR(0x85848585),
MKCOLOUR(0x85858484),
MKCOLOUR(0x85858485),
MKCOLOUR(0x85858584),
MKCOLOUR(0x85858585),
MKCOLOUR(0x85858586),
MKCOLOUR(0x85858685),
MKCOLOUR(0x85858686),
MKCOLOUR(0x85868585),
MKCOLOUR(0x85868586),
MKCOLOUR(0x85868685),
MKCOLOUR(0x85868686),
MKCOLOUR(0x85868585),
MKCOLOUR(0x85868586),
MKCOLOUR(0x85868685),
MKCOLOUR(0x85868686),
MKCOLOUR(0x86868585),
MKCOLOUR(0x86868586),
MKCOLOUR(0x86868685),
MKCOLOUR(0x86868686),
MKCOLOUR(0x86868687),
MKCOLOUR(0x86868786),
MKCOLOUR(0x86868787),
MKCOLOUR(0x86878686),
MKCOLOUR(0x86878687),
MKCOLOUR(0x86878786),
MKCOLOUR(0x86878787),
MKCOLOUR(0x87868686),
MKCOLOUR(0x87868687),
MKCOLOUR(0x87868786),
MKCOLOUR(0x87868787),
MKCOLOUR(0x87878686),
MKCOLOUR(0x87878687),
MKCOLOUR(0x87878786),
MKCOLOUR(0x87878787),
};

958
src/table/industry_land.h Normal file
View File

@@ -0,0 +1,958 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file industry_land.h Information about the behaviour of the default industry tiles. */
/**
* This is used to gather some data about animation
* drawing in the industry code
* Image_1-2-3 are in fact only offset in the sprites
* used by the industry.
* To specify an invalid one, either 255 or 0 is used,
* depending of the industry.
*/
struct DrawIndustryAnimationStruct {
int x; ///< coordinate x of the first image offset
byte image_1; ///< image offset 1
byte image_2; ///< image offset 2
byte image_3; ///< image offset 3
};
/**
* Simple structure gathering x,y coordinates for
* industries animations
*/
struct DrawIndustryCoordinates {
byte x; ///< coordinate x of the pair
byte y; ///< coordinate y of the pair
};
/**
* Macro to ease the declaration of the array
* @param s1 sprite ID of ground sprite
* @param p1 palette ID of ground sprite
* @param s2 sprite ID of building sprite
* @param p2 palette ID of building sprite
* @param sx coordinate x of the sprite
* @param sy coordinate y of the sprite
* @param w width of the sprite
* @param h height of the sprite
* @param dz virtual height of the sprite
* @param p this allows to specify a special drawing procedure.
* @see DrawBuildingsTileStruct
*/
#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p }
/** Structure for industry tiles drawing */
static const DrawBuildingsTileStruct _industry_draw_tile_data[NEW_INDUSTRYTILEOFFSET * 4] = {
M( 0xf54, PAL_NONE, 0x7db, PAL_NONE, 7, 0, 9, 9, 10, 0),
M( 0xf54, PAL_NONE, 0x7dc, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7dd, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7dd, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7dd, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7de, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7df, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7df, PAL_NONE, 7, 0, 9, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7e0, PAL_NONE, 1, 2, 15, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7e1, PAL_NONE, 1, 2, 15, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7e2, PAL_NONE, 1, 2, 15, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7e2, PAL_NONE, 1, 2, 15, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7e3, PAL_NONE, 4, 4, 9, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7e4, PAL_NONE, 4, 4, 9, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x7e5, PAL_NONE, 4, 4, 9, 9, 30, 0),
M( 0x7e6, PAL_NONE, 0x7e5, PAL_NONE, 4, 4, 9, 9, 30, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e9, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e7, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x7fd, PAL_NONE, 1, 1, 14, 14, 5, 0),
M( 0xf54, PAL_NONE, 0x7fe, PAL_NONE, 1, 1, 14, 14, 44, 0),
M( 0xf54, PAL_NONE, 0x7ff, PAL_NONE, 1, 1, 14, 14, 44, 0),
M( 0xf54, PAL_NONE, 0x7ff, PAL_NONE, 1, 1, 14, 14, 44, 0),
M( 0xf54, PAL_NONE, 0x800, PAL_NONE, 0, 2, 16, 12, 6, 0),
M( 0xf54, PAL_NONE, 0x801, PAL_NONE, 0, 2, 16, 12, 47, 0),
M( 0xf54, PAL_NONE, 0x802, PAL_NONE, 0, 2, 16, 12, 50, 0),
M( 0xf54, PAL_NONE, 0x802, PAL_NONE, 0, 2, 16, 12, 50, 0),
M( 0xf54, PAL_NONE, 0x803, PAL_NONE, 1, 0, 14, 15, 5, 0),
M( 0xf54, PAL_NONE, 0x804, PAL_NONE, 1, 0, 14, 15, 19, 0),
M( 0xf54, PAL_NONE, 0x805, PAL_NONE, 1, 0, 14, 15, 21, 0),
M( 0xf54, PAL_NONE, 0x805, PAL_NONE, 1, 0, 14, 15, 21, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x806, PAL_NONE, 1, 2, 14, 11, 32, 5),
M( 0xf54, PAL_NONE, 0x80d, PAL_NONE, 1, 0, 13, 16, 8, 0),
M( 0xf54, PAL_NONE, 0x80e, PAL_NONE, 1, 0, 13, 16, 20, 0),
M( 0xf54, PAL_NONE, 0x80f, PAL_NONE, 1, 0, 13, 16, 20, 0),
M( 0xf54, PAL_NONE, 0x80f, PAL_NONE, 1, 0, 13, 16, 20, 0),
M( 0xf54, PAL_NONE, 0x810, PAL_NONE, 0, 1, 16, 14, 8, 0),
M( 0xf54, PAL_NONE, 0x811, PAL_NONE, 0, 1, 16, 14, 21, 0),
M( 0xf54, PAL_NONE, 0x812, PAL_NONE, 0, 1, 16, 14, 21, 0),
M( 0xf54, PAL_NONE, 0x812, PAL_NONE, 0, 1, 16, 14, 21, 0),
M( 0xf54, PAL_NONE, 0x813, PAL_NONE, 1, 1, 14, 14, 12, 0),
M( 0xf54, PAL_NONE, 0x814, PAL_NONE, 1, 1, 14, 14, 15, 0),
M( 0xf54, PAL_NONE, 0x815, PAL_NONE, 1, 1, 14, 14, 22, 0),
M( 0xf54, PAL_NONE, 0x815, PAL_NONE, 1, 1, 14, 14, 22, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x816, PAL_NONE, 0, 0, 16, 15, 20, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x817, PAL_NONE, 0, 1, 16, 13, 19, 0),
M( 0x81d, PAL_NONE, 0x818, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x819, PAL_NONE, 0, 0, 16, 16, 15, 0),
M( 0x81d, PAL_NONE, 0x81a, PAL_NONE, 0, 0, 16, 16, 31, 0),
M( 0x81d, PAL_NONE, 0x81b, PAL_NONE, 0, 0, 16, 16, 39, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0xf54, PAL_NONE, 0x81e | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 1, 1, 14, 14, 4, 0),
M( 0xf54, PAL_NONE, 0x81f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 1, 1, 14, 14, 24, 0),
M( 0xf54, PAL_NONE, 0x820 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 1, 1, 14, 14, 27, 0),
M( 0x58c, PAL_NONE, 0x820 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 1, 1, 14, 14, 27, 0),
M( 0xf54, PAL_NONE, 0x821 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 3, 3, 10, 9, 3, 0),
M( 0xf54, PAL_NONE, 0x822 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 3, 3, 10, 9, 63, 0),
M( 0xf54, PAL_NONE, 0x823 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 3, 3, 10, 9, 62, 0),
M( 0x58c, PAL_NONE, 0x823 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 3, 3, 10, 9, 62, 0),
M( 0xf54, PAL_NONE, 0x824 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 4, 4, 7, 7, 3, 0),
M( 0xf54, PAL_NONE, 0x825 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 4, 4, 7, 7, 72, 0),
M( 0xf54, PAL_NONE, 0x825 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 4, 4, 7, 7, 72, 0),
M( 0x58c, PAL_NONE, 0x826 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 4, 4, 7, 7, 80, 0),
M( 0xf54, PAL_NONE, 0x827 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 2, 0, 12, 16, 51, 0),
M( 0xf54, PAL_NONE, 0x828 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 2, 0, 12, 16, 51, 0),
M( 0xf54, PAL_NONE, 0x829 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 2, 0, 12, 16, 51, 0),
M( 0x58c, PAL_NONE, 0x829 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 2, 0, 12, 16, 51, 0),
M( 0xf54, PAL_NONE, 0x82a | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 26, 0),
M( 0xf54, PAL_NONE, 0x82b | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 44, 0),
M( 0xf54, PAL_NONE, 0x82c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 46, 0),
M( 0x58c, PAL_NONE, 0x82c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 46, 0),
M( 0xf54, PAL_NONE, 0x82d, PAL_NONE, 3, 1, 10, 13, 2, 0),
M( 0xf54, PAL_NONE, 0x82e, PAL_NONE, 3, 1, 10, 13, 11, 0),
M( 0xf54, PAL_NONE, 0x82f, PAL_NONE, 3, 1, 10, 13, 11, 0),
M( 0x58c, PAL_NONE, 0x82f, PAL_NONE, 3, 1, 10, 13, 11, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xfdd, PAL_NONE, 0x833, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x837, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x834, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x834, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x830, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x838, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x835, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x835, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x831, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x839, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x836, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x836, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0xfdd, PAL_NONE, 0x832, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x87d, PAL_NONE, 0x87e, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x87e, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x87e, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x87e, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x87f, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x880, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x881, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x882, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x883, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x883, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x882, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x881, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x880, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x87f, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x87d, PAL_NONE, 0x87e, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x83a, PAL_NONE, 0x83c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83a, PAL_NONE, 0x83c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83a, PAL_NONE, 0x83c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83a, PAL_NONE, 0x83c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83b, PAL_NONE, 0x83d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83b, PAL_NONE, 0x83d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83b, PAL_NONE, 0x83d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83b, PAL_NONE, 0x83d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x83e, PAL_NONE, 0x83f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83e, PAL_NONE, 0x83f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x83e, PAL_NONE, 0x83f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x840, PAL_NONE, 0x841, PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x840, PAL_NONE, 0x841, PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x840, PAL_NONE, 0x841, PAL_NONE, 0, 0, 16, 16, 18, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x842, PAL_NONE, 0x843, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x842, PAL_NONE, 0x843, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x842, PAL_NONE, 0x843, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x844, PAL_NONE, 0x845, PAL_NONE, 0, 0, 16, 16, 16, 0),
M( 0x844, PAL_NONE, 0x845, PAL_NONE, 0, 0, 16, 16, 16, 0),
M( 0x844, PAL_NONE, 0x845, PAL_NONE, 0, 0, 16, 16, 16, 0),
M( 0x7e6, PAL_NONE, 0x869, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x862 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x866 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86a, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x863 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x867 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x864 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x868 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86c, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x870, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x870, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x865 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0xf54, PAL_NONE, 0x871 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x875 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x875 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x879 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x872 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x876 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x876 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x87a | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x873 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x877 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x877 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x87b | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x874 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x878 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x878 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x87c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf54, PAL_NONE, 0x7ea, PAL_NONE, 3, 2, 8, 8, 18, 0),
M( 0xf54, PAL_NONE, 0x7eb, PAL_NONE, 3, 2, 8, 8, 37, 0),
M( 0xf54, PAL_NONE, 0x7ec, PAL_NONE, 3, 2, 8, 8, 49, 0),
M( 0x7e6, PAL_NONE, 0x7ec, PAL_NONE, 3, 2, 8, 8, 49, 0),
M( 0x7e6, PAL_NONE, 0x7ec, PAL_NONE, 3, 2, 8, 8, 49, 0),
M( 0x7e6, PAL_NONE, 0x7ed, PAL_NONE, 3, 2, 8, 8, 49, 0),
M( 0x7e6, PAL_NONE, 0x7ee, PAL_NONE, 3, 2, 8, 8, 49, 0),
M( 0x7e6, PAL_NONE, 0x7ee, PAL_NONE, 3, 2, 8, 8, 49, 0),
M( 0xf54, PAL_NONE, 0x7ef, PAL_NONE, 3, 2, 10, 7, 20, 0),
M( 0xf54, PAL_NONE, 0x7f0, PAL_NONE, 3, 2, 10, 7, 40, 0),
M( 0xf54, PAL_NONE, 0x7f1, PAL_NONE, 3, 2, 10, 7, 40, 0),
M( 0x7e6, PAL_NONE, 0x7f1, PAL_NONE, 3, 2, 10, 7, 40, 0),
M( 0xf54, PAL_NONE, 0x7f2, PAL_NONE, 4, 4, 7, 8, 22, 0),
M( 0xf54, PAL_NONE, 0x7f3, PAL_NONE, 4, 4, 7, 8, 22, 0),
M( 0xf54, PAL_NONE, 0x7f4, PAL_NONE, 4, 4, 7, 8, 22, 0),
M( 0x7e6, PAL_NONE, 0x7f4, PAL_NONE, 4, 4, 7, 8, 22, 0),
M( 0xf54, PAL_NONE, 0x7f5, PAL_NONE, 2, 1, 11, 13, 12, 0),
M( 0xf54, PAL_NONE, 0x7f6, PAL_NONE, 2, 1, 11, 13, 12, 0),
M( 0xf54, PAL_NONE, 0x7f7, PAL_NONE, 2, 1, 11, 13, 12, 0),
M( 0x7e6, PAL_NONE, 0x7f7, PAL_NONE, 2, 1, 11, 13, 12, 0),
M( 0x7e6, PAL_NONE, 0x85c, PAL_NONE, 0, 0, 1, 1, 1, 0),
M( 0x851, PAL_NONE, 0x852, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x851, PAL_NONE, 0x852, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x846 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x847 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x7e6, PAL_NONE, 0x85d, PAL_NONE, 0, 0, 1, 1, 1, 0),
M( 0x853, PAL_NONE, 0x854, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x853, PAL_NONE, 0x854, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x848 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x849 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x7e6, PAL_NONE, 0x85e, PAL_NONE, 0, 0, 1, 1, 1, 0),
M( 0x855, PAL_NONE, 0x856, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x855, PAL_NONE, 0x856, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x84a | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x84b | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x7e6, PAL_NONE, 0x85f, PAL_NONE, 0, 0, 1, 1, 1, 0),
M( 0x857, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x857, PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x84c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e6, PAL_NONE, 0x860, PAL_NONE, 0, 0, 1, 1, 1, 0),
M( 0x858, PAL_NONE, 0x859, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x858, PAL_NONE, 0x859, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x84d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x84e | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x7e6, PAL_NONE, 0x861, PAL_NONE, 0, 0, 1, 1, 1, 0),
M( 0x85a, PAL_NONE, 0x85b, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x85a, PAL_NONE, 0x85b, PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x84f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x850 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 20, 0),
M( 0x7e6, PAL_NONE, 0x884, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x884, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x884, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x886, PAL_NONE, 0x884, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x885, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x885, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x885, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x887, PAL_NONE, 0x885, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88e | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x890 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x890 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x891 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x892 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x893 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x893 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x894 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x895 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x896 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x896 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x897 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x898, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x899, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x899, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89a, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a6, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89b, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89c, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89c, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89d, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89e, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89f, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x89f, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a1, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a2, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a3, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a4, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a2, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a3, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8a5, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8a7, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8b7, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8b7, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8c7, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8a8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8a9, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8b9, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8b9, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8c9, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8aa, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ba, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ba, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ca, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ab, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bb, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bb, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8cb, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ac, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bc, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bc, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8cc, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ad, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8cd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ae, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8be, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8be, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ce, PAL_NONE, 0x8d7, PAL_NONE, 0, 0, 16, 16, 35, 0),
M( 0x8af, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bf, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8bf, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8cf, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b0, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c0, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c0, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d0, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b1, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c1, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c1, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d1, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b2, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c2, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c2, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d2, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b3, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c3, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c3, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d3, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b4, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c4, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c4, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d4, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b5, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c5, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c5, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d5, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8b6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8c6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8d6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ce, PAL_NONE, 0x8d7, PAL_NONE, 0, 0, 16, 16, 35, 0),
M( 0x8ce, PAL_NONE, 0x8d8, PAL_NONE, 0, 0, 16, 16, 35, 0),
M( 0x8ce, PAL_NONE, 0x8d9, PAL_NONE, 0, 0, 16, 16, 35, 0),
M( 0x8ce, PAL_NONE, 0x8d9, PAL_NONE, 0, 0, 16, 16, 35, 0),
M( 0x7e6, PAL_NONE, 0x88a, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88a, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88a, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x888, PAL_NONE, 0x88a, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88b, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88b, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x88b, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x889, PAL_NONE, 0x88b, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8da, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e3, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e3, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ec, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8db, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e4, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e4, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ed, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8dc, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e5, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e5, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ee, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8dd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e6, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e6, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8ef, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8de, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e7, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e7, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f0, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8df, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f1, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e0, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e9, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8e9, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x8f2, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e1, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ea, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ea, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f3, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8e2, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8eb, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8eb, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f4, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f5, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x905, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x905, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x915, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x906, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x906, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x916, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f7, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x907, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x907, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x917, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f8, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x908, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x908, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x918, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8f9, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x909, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x909, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x919, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8fa, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90a, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90a, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x91a, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8fb, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90b, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90b, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x91b, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8fc, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90c, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90c, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x91c, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8fd, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x91d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8fe, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90e, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90e, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x91e, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x8ff, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90f, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x90f, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x91f, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x900, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x910, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x910, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x920, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x901, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x911, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x911, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x921, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x902, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x912, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x912, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x922, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x903, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x913, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x913, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x923, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x904, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x914, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x914, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x924, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x925, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x925, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x925, PAL_NONE, 0x926, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x925, PAL_NONE, 0x926, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x925, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x925, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x925, PAL_NONE, 0x927, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x925, PAL_NONE, 0x927, PAL_NONE, 0, 0, 16, 16, 30, 0),
M( 0x11c6, PAL_NONE, 0x92b | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92e | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92f | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x930 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x928 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x929 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x929 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x11c6, PAL_NONE, 0x92a | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 25, 0),
M( 0x7e6, PAL_NONE, 0x869, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x862 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x866 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86a, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x863 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x867 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x864 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x868 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x86c, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x870, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x870, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x865 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 1, 1, 0, 0),
M( 0x7e6, PAL_NONE, 0x931, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x935, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x935, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x939, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x932, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x936, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x936, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x93a, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x933, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x937, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x937, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x93b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x934, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x938, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x938, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x93c, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x81d, PAL_NONE, 0x818, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x819, PAL_NONE, 0, 0, 16, 16, 15, 0),
M( 0x81d, PAL_NONE, 0x81a, PAL_NONE, 0, 0, 16, 16, 31, 0),
M( 0x81d, PAL_NONE, 0x81b, PAL_NONE, 0, 0, 16, 16, 39, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x81d, PAL_NONE, 0x81c, PAL_NONE, 0, 0, 16, 16, 7, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1245 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1248 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1248 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x124b | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1247 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x124a | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x124a | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x124d | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1246 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1249 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1249 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x124c | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x81d, PAL_NONE, 0x124e, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x124f, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1250, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1251, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1252, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1252, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1252, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1252, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1253, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1254, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1254, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x81d, PAL_NONE, 0x1255, PAL_NONE, 0, 0, 16, 16, 10, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1261, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125c, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1262, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x125d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1260, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1260, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x7e6, PAL_NONE, 0x1263, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1264, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1264, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1268, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1265, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1265, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1269, PAL_NONE, 0, 0, 16, 16, 50, 4),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1266, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1266, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x126a, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1267, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1267, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x126b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x126c, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1271, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1271, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1271, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1271, PAL_NONE, 0x1279, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1272, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1272, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1272, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1272, PAL_NONE, 0x127a, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1273, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1273, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1273, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1273, PAL_NONE, 0x127b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1274, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1274, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1274, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1274, PAL_NONE, 0x127c, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1275, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1275, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1275, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1275, PAL_NONE, 0x127d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1276, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1276, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1276, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1276, PAL_NONE, 0x127e, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1277, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1277, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1277, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1277, PAL_NONE, 0x127f, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1278, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1278, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1278, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1278, PAL_NONE, 0x1280, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1284 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1283 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1283 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1286 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1281 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1282 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1282 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1285 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1287 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1287 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1287 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1288 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1288 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x1288 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1243, PAL_NONE, 0x1289 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 3),
M( 0x1243, PAL_NONE, 0x1289 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 3),
M( 0x1243, PAL_NONE, 0x1289 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 3),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x1244, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129b, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129c, PAL_NONE, 0, 0, 16, 16, 50, 2),
M( 0xf8d, PAL_NONE, 0x129c, PAL_NONE, 0, 0, 16, 16, 50, 2),
M( 0xf8d, PAL_NONE, 0x129c, PAL_NONE, 0, 0, 16, 16, 50, 2),
M( 0xf8d, PAL_NONE, 0x129c, PAL_NONE, 0, 0, 16, 16, 50, 2),
M( 0xf8d, PAL_NONE, 0x129d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x129d, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a0 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a0 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a0 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a0 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a1 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a1 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a1 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a1 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a2 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a2 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a2 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a2 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a3 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a3 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a3 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0x12a3 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x0, PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a4 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a4 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a4 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a4 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a6 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a6 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a6 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a6 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 0),
M( 0xf8d, PAL_NONE, 0x12a5 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 1),
M( 0xf8d, PAL_NONE, 0x12a5 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 1),
M( 0xf8d, PAL_NONE, 0x12a5 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 1),
M( 0xf8d, PAL_NONE, 0x12a5 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 16, 50, 1),
};
#undef M
/* this is ONLY used for Sugar Mine*/
static const DrawIndustryAnimationStruct _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},
};
/* this is ONLY used for Sugar Mine*/
static const DrawIndustryCoordinates _drawtile_proc1[5] = {
{22, 73},
{17, 70},
{14, 69},
{10, 66},
{ 8, 41},
};
/**
* this is ONLY used for Toy Factory.
* 255 means no drawing
* @param img1 offset from base sprite SPR_IT_SUGAR_MINE_SIEVE
* @param img2 offset from base sprite SPR_IT_SUGAR_MINE_CLOUDS
* @param img3 offset from base sprite SPR_IT_SUGAR_MINE_PILE
*/
#define MD( img1, img2, img3) { (50 - img1 * 2), img1, img2, img3 }
static const DrawIndustryAnimationStruct _industry_anim_offs_toys[] = {
MD(255, 255, 0),
MD( 0, 255, 0),
MD( 1, 255, 0),
MD( 2, 255, 0),
MD( 3, 255, 0),
MD( 4, 255, 0),
MD( 5, 255, 0),
MD( 6, 255, 0),
MD( 7, 255, 0),
MD( 8, 255, 0),
MD( 9, 255, 0),
MD( 10, 255, 0),
MD( 11, 255, 0),
MD( 12, 255, 0),
MD( 13, 255, 0),
MD( 14, 255, 0),
MD( 15, 255, 0),
MD( 16, 255, 0),
MD( 17, 255, 0),
MD( 18, 255, 0),
MD( 18, 255, 1),
MD( 18, 255, 2),
MD( 18, 255, 4),
MD( 18, 255, 6),
MD( 18, 255, 8),
MD( 18, 255, 11),
MD( 18, 255, 14),
MD( 18, 255, 17),
MD( 18, 255, 20),
MD( 18, 255, 24),
MD(255, 0, 29),
MD(255, 0, 24),
MD(255, 0, 20),
MD(255, 0, 17),
MD(255, 0, 14),
MD(255, 0, 11),
MD(255, 0, 8),
MD(255, 0, 6),
MD(255, 0, 4),
MD(255, 0, 2),
MD(255, 0, 1),
MD(255, 1, 0),
MD(255, 2, 0),
MD(255, 3, 0),
MD(255, 4, 0),
MD(255, 5, 0),
MD(255, 6, 0),
MD(255, 7, 0),
MD(255, 8, 0),
MD(255, 255, 0),
};
#undef MD
/* this is ONLY used for Toffee Quarry*/
static const byte _industry_anim_offs_toffee[] = {
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
};
/* this is ONLY used for the Bubble Generator*/
static const byte _industry_anim_offs_bubbles[] = {
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,
};
/**
* Movement of the sparks , only used for Power Station
*/
static const DrawIndustryCoordinates _coal_plant_sparks[] = {
{11, 23},
{11, 11},
{14, 6},
{13, 3},
{18, 1},
{15, 0},
};

View File

@@ -0,0 +1,145 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file landscape_sprite.h Offsets of sprites to replace for non-temperate landscapes. */
static const SpriteID END = 0xFFFF;
static const SpriteID _landscape_spriteindexes_arctic[] = {
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_tropic[] = {
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_toyland[] = {
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
};

321
src/table/misc_settings.ini Normal file
View File

@@ -0,0 +1,321 @@
; $Id$
;
; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;
[pre-amble]
extern char _config_language_file[MAX_PATH];
static const char *_support8bppmodes = "no|system|hardware";
static const SettingDescGlobVarList _misc_settings[] = {
[post-amble]
};
[templates]
SDTG_LIST = SDTG_LIST($name, $type, $length, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $guiflags, $var, $def, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def, $max, $full, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_STR = SDTG_STR($name, $type, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_END = SDTG_END()
[defaults]
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
guiflags = 0
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
[SDTG_MMANY]
name = ""display_opt""
type = SLE_UINT8
var = _display_opt
def = (1 << DO_SHOW_TOWN_NAMES | 1 << DO_SHOW_STATION_NAMES | 1 << DO_SHOW_SIGNS | 1 << DO_FULL_ANIMATION | 1 << DO_FULL_DETAIL | 1 << DO_SHOW_WAYPOINT_NAMES | 1 << DO_SHOW_COMPETITOR_SIGNS)
full = ""SHOW_TOWN_NAMES|SHOW_STATION_NAMES|SHOW_SIGNS|FULL_ANIMATION||FULL_DETAIL|WAYPOINTS|SHOW_COMPETITOR_SIGNS""
[SDTG_BOOL]
name = ""fullscreen""
var = _fullscreen
def = false
cat = SC_BASIC
[SDTG_OMANY]
name = ""support8bpp""
type = SLE_UINT8
var = _support8bpp
def = 0
max = 2
full = _support8bppmodes
cat = SC_BASIC
[SDTG_STR]
name = ""graphicsset""
type = SLE_STRQ
var = BaseGraphics::ini_set
def = NULL
cat = SC_BASIC
[SDTG_STR]
name = ""soundsset""
type = SLE_STRQ
var = BaseSounds::ini_set
def = NULL
cat = SC_BASIC
[SDTG_STR]
name = ""musicset""
type = SLE_STRQ
var = BaseMusic::ini_set
def = NULL
cat = SC_BASIC
[SDTG_STR]
name = ""videodriver""
type = SLE_STRQ
var = _ini_videodriver
def = NULL
cat = SC_EXPERT
[SDTG_STR]
name = ""musicdriver""
type = SLE_STRQ
var = _ini_musicdriver
def = NULL
cat = SC_EXPERT
[SDTG_STR]
name = ""sounddriver""
type = SLE_STRQ
var = _ini_sounddriver
def = NULL
cat = SC_EXPERT
[SDTG_STR]
name = ""blitter""
type = SLE_STRQ
var = _ini_blitter
def = NULL
[SDTG_STR]
name = ""language""
type = SLE_STRB
var = _config_language_file
def = NULL
cat = SC_BASIC
; workaround for implicit lengthof() in SDTG_LIST
[SDTG_LIST]
name = ""resolution""
type = SLE_INT
length = 2
var = _cur_resolution
def = ""640,480""
cat = SC_BASIC
[SDTG_STR]
name = ""screenshot_format""
type = SLE_STRB
var = _screenshot_format_name
def = NULL
cat = SC_EXPERT
[SDTG_STR]
name = ""savegame_format""
type = SLE_STRB
var = _savegame_format
def = NULL
cat = SC_EXPERT
[SDTG_BOOL]
name = ""rightclick_emulate""
var = _rightclick_emulate
def = false
[SDTG_STR]
ifdef = WITH_FREETYPE
name = ""small_font""
type = SLE_STRB
var = _freetype.small.font
def = NULL
[SDTG_STR]
ifdef = WITH_FREETYPE
name = ""medium_font""
type = SLE_STRB
var = _freetype.medium.font
def = NULL
[SDTG_STR]
ifdef = WITH_FREETYPE
name = ""large_font""
type = SLE_STRB
var = _freetype.large.font
def = NULL
[SDTG_STR]
ifdef = WITH_FREETYPE
name = ""mono_font""
type = SLE_STRB
var = _freetype.mono.font
def = NULL
[SDTG_VAR]
ifdef = WITH_FREETYPE
name = ""small_size""
type = SLE_UINT
var = _freetype.small.size
def = 0
min = 0
max = 72
[SDTG_VAR]
ifdef = WITH_FREETYPE
name = ""medium_size""
type = SLE_UINT
var = _freetype.medium.size
def = 0
min = 0
max = 72
[SDTG_VAR]
ifdef = WITH_FREETYPE
name = ""large_size""
type = SLE_UINT
var = _freetype.large.size
def = 0
min = 0
max = 72
[SDTG_VAR]
ifdef = WITH_FREETYPE
name = ""mono_size""
type = SLE_UINT
var = _freetype.mono.size
def = 0
min = 0
max = 72
[SDTG_BOOL]
ifdef = WITH_FREETYPE
name = ""small_aa""
var = _freetype.small.aa
def = false
[SDTG_BOOL]
ifdef = WITH_FREETYPE
name = ""medium_aa""
var = _freetype.medium.aa
def = false
[SDTG_BOOL]
ifdef = WITH_FREETYPE
name = ""large_aa""
var = _freetype.large.aa
def = false
[SDTG_BOOL]
ifdef = WITH_FREETYPE
name = ""mono_aa""
var = _freetype.mono.aa
def = false
[SDTG_VAR]
name = ""sprite_cache_size_px""
type = SLE_UINT
var = _sprite_cache_size
def = 128
min = 1
max = 512
cat = SC_EXPERT
[SDTG_VAR]
name = ""player_face""
type = SLE_UINT32
var = _company_manager_face
def = 0
min = 0
max = 0xFFFFFFFF
cat = SC_BASIC
[SDTG_VAR]
name = ""transparency_options""
type = SLE_UINT
var = _transparency_opt
def = 0
min = 0
max = 0x1FF
cat = SC_BASIC
[SDTG_VAR]
name = ""transparency_locks""
type = SLE_UINT
var = _transparency_lock
def = 0
min = 0
max = 0x1FF
cat = SC_BASIC
[SDTG_VAR]
name = ""invisibility_options""
type = SLE_UINT
var = _invisibility_opt
def = 0
min = 0
max = 0xFF
cat = SC_BASIC
[SDTG_STR]
name = ""keyboard""
type = SLE_STRB
var = _keyboard_opt[0]
def = NULL
cat = SC_EXPERT
[SDTG_STR]
name = ""keyboard_caps""
type = SLE_STRB
var = _keyboard_opt[1]
def = NULL
cat = SC_EXPERT
[SDTG_VAR]
name = ""last_newgrf_count""
type = SLE_UINT32
var = _settings_client.gui.last_newgrf_count
def = 100
min = 0
max = UINT32_MAX
cat = SC_EXPERT
[SDTG_VAR]
name = ""gui_zoom""
type = SLE_UINT8
var = _gui_zoom
def = ZOOM_LVL_OUT_4X
min = ZOOM_LVL_MIN
max = ZOOM_LVL_OUT_4X
cat = SC_BASIC
[SDTG_VAR]
name = ""font_zoom""
type = SLE_UINT8
var = _font_zoom
def = ZOOM_LVL_OUT_4X
min = ZOOM_LVL_MIN
max = ZOOM_LVL_OUT_4X
cat = SC_BASIC
[SDTG_END]

View File

@@ -0,0 +1,579 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file newgrf_debug_data.h Data 'tables' for NewGRF debugging. */
#include "../newgrf_house.h"
#include "../newgrf_engine.h"
/* Helper for filling property tables */
#define NIP(prop, base, variable, type, name) { name, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), prop, type }
#define NIP_END() { NULL, 0, 0, 0, 0 }
/* Helper for filling callback tables */
#define NIC(cb_id, base, variable, bit) { #cb_id, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), bit, cb_id }
#define NIC_END() { NULL, 0, 0, 0, 0 }
/* Helper for filling variable tables */
#define NIV(var, name) { name, var }
#define NIV_END() { NULL, 0 }
/*** NewGRF Vehicles ***/
#define NICV(cb_id, bit) NIC(cb_id, Engine, info.callback_mask, bit)
static const NICallback _nic_vehicles[] = {
NICV(CBID_VEHICLE_VISUAL_EFFECT, CBM_VEHICLE_VISUAL_EFFECT),
NICV(CBID_VEHICLE_LENGTH, CBM_VEHICLE_LENGTH),
NICV(CBID_VEHICLE_LOAD_AMOUNT, CBM_VEHICLE_LOAD_AMOUNT),
NICV(CBID_VEHICLE_REFIT_CAPACITY, CBM_VEHICLE_REFIT_CAPACITY),
NICV(CBID_VEHICLE_ARTIC_ENGINE, CBM_VEHICLE_ARTIC_ENGINE),
NICV(CBID_VEHICLE_CARGO_SUFFIX, CBM_VEHICLE_CARGO_SUFFIX),
NICV(CBID_TRAIN_ALLOW_WAGON_ATTACH, CBM_NO_BIT),
NICV(CBID_VEHICLE_ADDITIONAL_TEXT, CBM_NO_BIT),
NICV(CBID_VEHICLE_COLOUR_MAPPING, CBM_VEHICLE_COLOUR_REMAP),
NICV(CBID_VEHICLE_START_STOP_CHECK, CBM_NO_BIT),
NICV(CBID_VEHICLE_32DAY_CALLBACK, CBM_NO_BIT),
NICV(CBID_VEHICLE_SOUND_EFFECT, CBM_VEHICLE_SOUND_EFFECT),
NICV(CBID_VEHICLE_AUTOREPLACE_SELECTION, CBM_NO_BIT),
NICV(CBID_VEHICLE_MODIFY_PROPERTY, CBM_NO_BIT),
NIC_END()
};
static const NIVariable _niv_vehicles[] = {
NIV(0x40, "position in consist and length"),
NIV(0x41, "position and length of chain of same vehicles"),
NIV(0x42, "transported cargo types"),
NIV(0x43, "player info"),
NIV(0x44, "aircraft info"),
NIV(0x45, "curvature info"),
NIV(0x46, "motion counter"),
NIV(0x47, "vehicle cargo info"),
NIV(0x48, "vehicle type info"),
NIV(0x49, "year of construction"),
NIV(0x4A, "current rail type info"),
NIV(0x4B, "long date of last service"),
NIV(0x4C, "current max speed"),
NIV(0x4D, "position in articulated vehicle"),
NIV(0x60, "count vehicle id occurrences"),
// 0x61 not useful, since it requires register 0x10F
NIV(0x62, "Curvature/position difference to other vehicle"),
NIV_END()
};
class NIHVehicle : public NIHelper {
bool IsInspectable(uint index) const { return Vehicle::Get(index)->GetGRF() != NULL; }
uint GetParent(uint index) const { const Vehicle *first = Vehicle::Get(index)->First(); return GetInspectWindowNumber(GetGrfSpecFeature(first->type), first->index); }
const void *GetInstance(uint index)const { return Vehicle::Get(index); }
const void *GetSpec(uint index) const { return Vehicle::Get(index)->GetEngine(); }
void SetStringParameters(uint index) const { this->SetSimpleStringParameters(STR_VEHICLE_NAME, index); }
uint32 GetGRFID(uint index) const { return Vehicle::Get(index)->GetGRFID(); }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
Vehicle *v = Vehicle::Get(index);
VehicleResolverObject ro(v->engine_type, v, VehicleResolverObject::WO_CACHED);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_vehicle = {
NULL,
_nic_vehicles,
_niv_vehicles,
new NIHVehicle(),
};
/*** NewGRF station (tiles) ***/
#define NICS(cb_id, bit) NIC(cb_id, StationSpec, callback_mask, bit)
static const NICallback _nic_stations[] = {
NICS(CBID_STATION_AVAILABILITY, CBM_STATION_AVAIL),
NICS(CBID_STATION_SPRITE_LAYOUT, CBM_STATION_SPRITE_LAYOUT),
NICS(CBID_STATION_TILE_LAYOUT, CBM_NO_BIT),
NICS(CBID_STATION_ANIM_START_STOP, CBM_NO_BIT),
NICS(CBID_STATION_ANIM_NEXT_FRAME, CBM_STATION_ANIMATION_NEXT_FRAME),
NICS(CBID_STATION_ANIMATION_SPEED, CBM_STATION_ANIMATION_SPEED),
NICS(CBID_STATION_LAND_SLOPE_CHECK, CBM_STATION_SLOPE_CHECK),
NIC_END()
};
static const NIVariable _niv_stations[] = {
NIV(0x40, "platform info and relative position"),
NIV(0x41, "platform info and relative position for individually built sections"),
NIV(0x42, "terrain and track type"),
NIV(0x43, "player info"),
NIV(0x44, "path signalling info"),
NIV(0x45, "rail continuation info"),
NIV(0x46, "platform info and relative position from middle"),
NIV(0x47, "platform info and relative position from middle for individually built sections"),
NIV(0x48, "bitmask of accepted cargoes"),
NIV(0x49, "platform info and relative position of same-direction section"),
NIV(0x4A, "current animation frame"),
NIV(0x60, "amount of cargo waiting"),
NIV(0x61, "time since last cargo pickup"),
NIV(0x62, "rating of cargo"),
NIV(0x63, "time spent on route"),
NIV(0x64, "information about last vehicle picking cargo up"),
NIV(0x65, "amount of cargo acceptance"),
NIV(0x66, "animation frame of nearby tile"),
NIV(0x67, "land info of nearby tiles"),
NIV(0x68, "station info of nearby tiles"),
NIV(0x69, "information about cargo accepted in the past"),
NIV_END()
};
class NIHStation : public NIHelper {
bool IsInspectable(uint index) const { return GetStationSpec(index) != NULL; }
uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); }
const void *GetInstance(uint index)const { return NULL; }
const void *GetSpec(uint index) const { return GetStationSpec(index); }
void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); }
uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? GetStationSpec(index)->grf_prop.grffile->grfid : 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
StationResolverObject ro(GetStationSpec(index), Station::GetByTile(index), index);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_station = {
NULL,
_nic_stations,
_niv_stations,
new NIHStation(),
};
/*** NewGRF house tiles ***/
#define NICH(cb_id, bit) NIC(cb_id, HouseSpec, callback_mask, bit)
static const NICallback _nic_house[] = {
NICH(CBID_HOUSE_ALLOW_CONSTRUCTION, CBM_HOUSE_ALLOW_CONSTRUCTION),
NICH(CBID_HOUSE_ANIMATION_NEXT_FRAME, CBM_HOUSE_ANIMATION_NEXT_FRAME),
NICH(CBID_HOUSE_ANIMATION_START_STOP, CBM_HOUSE_ANIMATION_START_STOP),
NICH(CBID_HOUSE_CONSTRUCTION_STATE_CHANGE, CBM_HOUSE_CONSTRUCTION_STATE_CHANGE),
NICH(CBID_HOUSE_COLOUR, CBM_HOUSE_COLOUR),
NICH(CBID_HOUSE_CARGO_ACCEPTANCE, CBM_HOUSE_CARGO_ACCEPTANCE),
NICH(CBID_HOUSE_ANIMATION_SPEED, CBM_HOUSE_ANIMATION_SPEED),
NICH(CBID_HOUSE_DESTRUCTION, CBM_HOUSE_DESTRUCTION),
NICH(CBID_HOUSE_ACCEPT_CARGO, CBM_HOUSE_ACCEPT_CARGO),
NICH(CBID_HOUSE_PRODUCE_CARGO, CBM_HOUSE_PRODUCE_CARGO),
NICH(CBID_HOUSE_DENY_DESTRUCTION, CBM_HOUSE_DENY_DESTRUCTION),
NICH(CBID_HOUSE_WATCHED_CARGO_ACCEPTED, CBM_NO_BIT),
NICH(CBID_HOUSE_CUSTOM_NAME, CBM_NO_BIT),
NICH(CBID_HOUSE_DRAW_FOUNDATIONS, CBM_HOUSE_DRAW_FOUNDATIONS),
NICH(CBID_HOUSE_AUTOSLOPE, CBM_HOUSE_AUTOSLOPE),
NIC_END()
};
static const NIVariable _niv_house[] = {
NIV(0x40, "construction state of tile and pseudo-random value"),
NIV(0x41, "age of building in years"),
NIV(0x42, "town zone"),
NIV(0x43, "terrain type"),
NIV(0x44, "building counts"),
NIV(0x45, "town expansion bits"),
NIV(0x46, "current animation frame"),
NIV(0x47, "xy coordinate of the building"),
NIV(0x60, "other building counts (old house type)"),
NIV(0x61, "other building counts (new house type)"),
NIV(0x62, "land info of nearby tiles"),
NIV(0x63, "current animation frame of nearby house tile"),
NIV(0x64, "cargo acceptance history of nearby stations"),
NIV(0x65, "distance of nearest house matching a given criterion"),
NIV(0x66, "class and ID of nearby house tile"),
NIV(0x67, "GRFID of nearby house tile"),
NIV_END()
};
class NIHHouse : public NIHelper {
bool IsInspectable(uint index) const { return HouseSpec::Get(GetHouseType(index))->grf_prop.grffile != NULL; }
uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, GetTownIndex(index)); }
const void *GetInstance(uint index)const { return NULL; }
const void *GetSpec(uint index) const { return HouseSpec::Get(GetHouseType(index)); }
void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_TOWN_NAME, GetTownIndex(index), index); }
uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? HouseSpec::Get(GetHouseType(index))->grf_prop.grffile->grfid : 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
HouseResolverObject ro(GetHouseType(index), index, Town::GetByTile(index));
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_house = {
NULL,
_nic_house,
_niv_house,
new NIHHouse(),
};
/*** NewGRF industry tiles ***/
#define NICIT(cb_id, bit) NIC(cb_id, IndustryTileSpec, callback_mask, bit)
static const NICallback _nic_industrytiles[] = {
NICIT(CBID_INDTILE_ANIM_START_STOP, CBM_NO_BIT),
NICIT(CBID_INDTILE_ANIM_NEXT_FRAME, CBM_INDT_ANIM_NEXT_FRAME),
NICIT(CBID_INDTILE_ANIMATION_SPEED, CBM_INDT_ANIM_SPEED),
NICIT(CBID_INDTILE_CARGO_ACCEPTANCE, CBM_INDT_CARGO_ACCEPTANCE),
NICIT(CBID_INDTILE_ACCEPT_CARGO, CBM_INDT_ACCEPT_CARGO),
NICIT(CBID_INDTILE_SHAPE_CHECK, CBM_INDT_SHAPE_CHECK),
NICIT(CBID_INDTILE_DRAW_FOUNDATIONS, CBM_INDT_DRAW_FOUNDATIONS),
NICIT(CBID_INDTILE_AUTOSLOPE, CBM_INDT_AUTOSLOPE),
NIC_END()
};
static const NIVariable _niv_industrytiles[] = {
NIV(0x40, "construction state of tile"),
NIV(0x41, "ground type"),
NIV(0x42, "current town zone in nearest town"),
NIV(0x43, "relative position"),
NIV(0x44, "animation frame"),
NIV(0x60, "land info of nearby tiles"),
NIV(0x61, "animation stage of nearby tiles"),
NIV(0x62, "get industry or airport tile ID at offset"),
NIV_END()
};
class NIHIndustryTile : public NIHelper {
bool IsInspectable(uint index) const { return GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile != NULL; }
uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_INDUSTRIES, GetIndustryIndex(index)); }
const void *GetInstance(uint index)const { return NULL; }
const void *GetSpec(uint index) const { return GetIndustryTileSpec(GetIndustryGfx(index)); }
void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_INDUSTRY_NAME, GetIndustryIndex(index), index); }
uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile->grfid : 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
IndustryTileResolverObject ro(GetIndustryGfx(index), index, Industry::GetByTile(index));
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_industrytile = {
NULL,
_nic_industrytiles,
_niv_industrytiles,
new NIHIndustryTile(),
};
/*** NewGRF industries ***/
static const NIProperty _nip_industries[] = {
NIP(0x25, Industry, produced_cargo[ 0], NIT_CARGO, "produced cargo 0"),
NIP(0x25, Industry, produced_cargo[ 1], NIT_CARGO, "produced cargo 1"),
NIP(0x25, Industry, produced_cargo[ 2], NIT_CARGO, "produced cargo 2"),
NIP(0x25, Industry, produced_cargo[ 3], NIT_CARGO, "produced cargo 3"),
NIP(0x25, Industry, produced_cargo[ 4], NIT_CARGO, "produced cargo 4"),
NIP(0x25, Industry, produced_cargo[ 5], NIT_CARGO, "produced cargo 5"),
NIP(0x25, Industry, produced_cargo[ 6], NIT_CARGO, "produced cargo 6"),
NIP(0x25, Industry, produced_cargo[ 7], NIT_CARGO, "produced cargo 7"),
NIP(0x25, Industry, produced_cargo[ 8], NIT_CARGO, "produced cargo 8"),
NIP(0x25, Industry, produced_cargo[ 9], NIT_CARGO, "produced cargo 9"),
NIP(0x25, Industry, produced_cargo[10], NIT_CARGO, "produced cargo 10"),
NIP(0x25, Industry, produced_cargo[11], NIT_CARGO, "produced cargo 11"),
NIP(0x25, Industry, produced_cargo[12], NIT_CARGO, "produced cargo 12"),
NIP(0x25, Industry, produced_cargo[13], NIT_CARGO, "produced cargo 13"),
NIP(0x25, Industry, produced_cargo[14], NIT_CARGO, "produced cargo 14"),
NIP(0x25, Industry, produced_cargo[15], NIT_CARGO, "produced cargo 15"),
NIP(0x26, Industry, accepts_cargo[ 0], NIT_CARGO, "accepted cargo 0"),
NIP(0x26, Industry, accepts_cargo[ 1], NIT_CARGO, "accepted cargo 1"),
NIP(0x26, Industry, accepts_cargo[ 2], NIT_CARGO, "accepted cargo 2"),
NIP(0x26, Industry, accepts_cargo[ 3], NIT_CARGO, "accepted cargo 3"),
NIP(0x26, Industry, accepts_cargo[ 4], NIT_CARGO, "accepted cargo 4"),
NIP(0x26, Industry, accepts_cargo[ 5], NIT_CARGO, "accepted cargo 5"),
NIP(0x26, Industry, accepts_cargo[ 6], NIT_CARGO, "accepted cargo 6"),
NIP(0x26, Industry, accepts_cargo[ 7], NIT_CARGO, "accepted cargo 7"),
NIP(0x26, Industry, accepts_cargo[ 8], NIT_CARGO, "accepted cargo 8"),
NIP(0x26, Industry, accepts_cargo[ 9], NIT_CARGO, "accepted cargo 9"),
NIP(0x26, Industry, accepts_cargo[10], NIT_CARGO, "accepted cargo 10"),
NIP(0x26, Industry, accepts_cargo[11], NIT_CARGO, "accepted cargo 11"),
NIP(0x26, Industry, accepts_cargo[12], NIT_CARGO, "accepted cargo 12"),
NIP(0x26, Industry, accepts_cargo[13], NIT_CARGO, "accepted cargo 13"),
NIP(0x26, Industry, accepts_cargo[14], NIT_CARGO, "accepted cargo 14"),
NIP(0x26, Industry, accepts_cargo[15], NIT_CARGO, "accepted cargo 15"),
NIP_END()
};
#define NICI(cb_id, bit) NIC(cb_id, IndustrySpec, callback_mask, bit)
static const NICallback _nic_industries[] = {
NICI(CBID_INDUSTRY_PROBABILITY, CBM_IND_PROBABILITY),
NICI(CBID_INDUSTRY_LOCATION, CBM_IND_LOCATION),
NICI(CBID_INDUSTRY_PRODUCTION_CHANGE, CBM_IND_PRODUCTION_CHANGE),
NICI(CBID_INDUSTRY_MONTHLYPROD_CHANGE, CBM_IND_MONTHLYPROD_CHANGE),
NICI(CBID_INDUSTRY_CARGO_SUFFIX, CBM_IND_CARGO_SUFFIX),
NICI(CBID_INDUSTRY_FUND_MORE_TEXT, CBM_IND_FUND_MORE_TEXT),
NICI(CBID_INDUSTRY_WINDOW_MORE_TEXT, CBM_IND_WINDOW_MORE_TEXT),
NICI(CBID_INDUSTRY_SPECIAL_EFFECT, CBM_IND_SPECIAL_EFFECT),
NICI(CBID_INDUSTRY_REFUSE_CARGO, CBM_IND_REFUSE_CARGO),
NICI(CBID_INDUSTRY_DECIDE_COLOUR, CBM_IND_DECIDE_COLOUR),
NICI(CBID_INDUSTRY_INPUT_CARGO_TYPES, CBM_IND_INPUT_CARGO_TYPES),
NICI(CBID_INDUSTRY_OUTPUT_CARGO_TYPES, CBM_IND_OUTPUT_CARGO_TYPES),
NICI(CBID_INDUSTRY_PROD_CHANGE_BUILD, CBM_IND_PROD_CHANGE_BUILD),
NIC_END()
};
static const NIVariable _niv_industries[] = {
NIV(0x40, "waiting cargo 0"),
NIV(0x41, "waiting cargo 1"),
NIV(0x42, "waiting cargo 2"),
NIV(0x43, "distance to closest dry/land tile"),
NIV(0x44, "layout number"),
NIV(0x45, "player info"),
NIV(0x46, "industry construction date"),
NIV(0x60, "get industry tile ID at offset"),
NIV(0x61, "get random tile bits at offset"),
NIV(0x62, "land info of nearby tiles"),
NIV(0x63, "animation stage of nearby tiles"),
NIV(0x64, "distance on nearest industry with given type"),
NIV(0x65, "get town zone and Manhattan distance of closest town"),
NIV(0x66, "get square of Euclidean distance of closes town"),
NIV(0x67, "count of industry and distance of closest instance"),
NIV(0x68, "count of industry and distance of closest instance with layout filter"),
NIV_END()
};
class NIHIndustry : public NIHelper {
bool IsInspectable(uint index) const { return GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile != NULL; }
uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Industry::Get(index)->town->index); }
const void *GetInstance(uint index)const { return Industry::Get(index); }
const void *GetSpec(uint index) const { return GetIndustrySpec(Industry::Get(index)->type); }
void SetStringParameters(uint index) const { this->SetSimpleStringParameters(STR_INDUSTRY_NAME, index); }
uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile->grfid : 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
Industry *i = Industry::Get(index);
IndustriesResolverObject ro(i->location.tile, i, i->type);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
uint GetPSASize(uint index, uint32 grfid) const { return cpp_lengthof(PersistentStorage, storage); }
const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const
{
const Industry *i = (const Industry *)this->GetInstance(index);
if (i->psa == NULL) return NULL;
return (int32 *)(&i->psa->storage);
}
};
static const NIFeature _nif_industry = {
_nip_industries,
_nic_industries,
_niv_industries,
new NIHIndustry(),
};
/*** NewGRF objects ***/
#define NICO(cb_id, bit) NIC(cb_id, ObjectSpec, callback_mask, bit)
static const NICallback _nic_objects[] = {
NICO(CBID_OBJECT_LAND_SLOPE_CHECK, CBM_OBJ_SLOPE_CHECK),
NICO(CBID_OBJECT_ANIMATION_NEXT_FRAME, CBM_OBJ_ANIMATION_NEXT_FRAME),
NICO(CBID_OBJECT_ANIMATION_START_STOP, CBM_NO_BIT),
NICO(CBID_OBJECT_ANIMATION_SPEED, CBM_OBJ_ANIMATION_SPEED),
NICO(CBID_OBJECT_COLOUR, CBM_OBJ_COLOUR),
NICO(CBID_OBJECT_FUND_MORE_TEXT, CBM_OBJ_FUND_MORE_TEXT),
NICO(CBID_OBJECT_AUTOSLOPE, CBM_OBJ_AUTOSLOPE),
NIC_END()
};
static const NIVariable _niv_objects[] = {
NIV(0x40, "relative position"),
NIV(0x41, "tile information"),
NIV(0x42, "construction date"),
NIV(0x43, "animation counter"),
NIV(0x44, "object founder"),
NIV(0x45, "get town zone and Manhattan distance of closest town"),
NIV(0x46, "get square of Euclidean distance of closes town"),
NIV(0x47, "colour"),
NIV(0x48, "view"),
NIV(0x60, "get object ID at offset"),
NIV(0x61, "get random tile bits at offset"),
NIV(0x62, "land info of nearby tiles"),
NIV(0x63, "animation stage of nearby tiles"),
NIV(0x64, "distance on nearest object with given type"),
NIV_END()
};
class NIHObject : public NIHelper {
bool IsInspectable(uint index) const { return ObjectSpec::GetByTile(index)->grf_prop.grffile != NULL; }
uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Object::GetByTile(index)->town->index); }
const void *GetInstance(uint index)const { return Object::GetByTile(index); }
const void *GetSpec(uint index) const { return ObjectSpec::GetByTile(index); }
void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT, INVALID_STRING_ID, index); }
uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? ObjectSpec::GetByTile(index)->grf_prop.grffile->grfid : 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
ObjectResolverObject ro(ObjectSpec::GetByTile(index), Object::GetByTile(index), index);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_object = {
NULL,
_nic_objects,
_niv_objects,
new NIHObject(),
};
/*** NewGRF rail types ***/
static const NIVariable _niv_railtypes[] = {
NIV(0x40, "terrain type"),
NIV(0x41, "enhanced tunnels"),
NIV(0x42, "level crossing status"),
NIV(0x43, "construction date"),
NIV(0x44, "town zone"),
NIV_END()
};
class NIHRailType : public NIHelper {
bool IsInspectable(uint index) const { return true; }
uint GetParent(uint index) const { return UINT32_MAX; }
const void *GetInstance(uint index)const { return NULL; }
const void *GetSpec(uint index) const { return NULL; }
void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); }
uint32 GetGRFID(uint index) const { return 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
/* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype.
* However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */
RailTypeResolverObject ro(NULL, index, TCX_NORMAL, RTSG_END);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_railtype = {
NULL,
NULL,
_niv_railtypes,
new NIHRailType(),
};
/*** NewGRF airport tiles ***/
#define NICAT(cb_id, bit) NIC(cb_id, AirportTileSpec, callback_mask, bit)
static const NICallback _nic_airporttiles[] = {
NICAT(CBID_AIRPTILE_DRAW_FOUNDATIONS, CBM_AIRT_DRAW_FOUNDATIONS),
NICAT(CBID_AIRPTILE_ANIM_START_STOP, CBM_NO_BIT),
NICAT(CBID_AIRPTILE_ANIM_NEXT_FRAME, CBM_AIRT_ANIM_NEXT_FRAME),
NICAT(CBID_AIRPTILE_ANIMATION_SPEED, CBM_AIRT_ANIM_SPEED),
NIC_END()
};
class NIHAirportTile : public NIHelper {
bool IsInspectable(uint index) const { return AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile != NULL; }
uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); }
const void *GetInstance(uint index)const { return NULL; }
const void *GetSpec(uint index) const { return AirportTileSpec::Get(GetAirportGfx(index)); }
void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); }
uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile->grfid : 0; }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
AirportTileResolverObject ro(AirportTileSpec::GetByTile(index), index, Station::GetByTile(index));
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_airporttile = {
NULL,
_nic_airporttiles,
_niv_industrytiles, // Yes, they share this (at least now)
new NIHAirportTile(),
};
/*** NewGRF towns ***/
static const NIVariable _niv_towns[] = {
NIV(0x40, "larger town effect on this town"),
NIV(0x41, "town index"),
NIV(0x82, "population"),
NIV(0x94, "zone radius 0"),
NIV(0x96, "zone radius 1"),
NIV(0x98, "zone radius 2"),
NIV(0x9A, "zone radius 3"),
NIV(0x9C, "zone radius 4"),
NIV(0xB6, "number of buildings"),
NIV_END()
};
class NIHTown : public NIHelper {
bool IsInspectable(uint index) const { return Town::IsValidID(index); }
uint GetParent(uint index) const { return UINT32_MAX; }
const void *GetInstance(uint index)const { return Town::Get(index); }
const void *GetSpec(uint index) const { return NULL; }
void SetStringParameters(uint index) const { this->SetSimpleStringParameters(STR_TOWN_NAME, index); }
uint32 GetGRFID(uint index) const { return 0; }
bool PSAWithParameter() const { return true; }
uint GetPSASize(uint index, uint32 grfid) const { return cpp_lengthof(PersistentStorage, storage); }
/* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const
{
TownResolverObject ro(NULL, Town::Get(index), true);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const
{
Town *t = Town::Get(index);
std::list<PersistentStorage *>::iterator iter;
for (iter = t->psa_list.begin(); iter != t->psa_list.end(); iter++) {
if ((*iter)->grfid == grfid) return (int32 *)(&(*iter)->storage[0]);
}
return NULL;
}
};
static const NIFeature _nif_town = {
NULL,
NULL,
_niv_towns,
new NIHTown(),
};
/** Table with all NIFeatures. */
static const NIFeature * const _nifeatures[] = {
&_nif_vehicle, // GSF_TRAINS
&_nif_vehicle, // GSF_ROADVEHICLES
&_nif_vehicle, // GSF_SHIPS
&_nif_vehicle, // GSF_AIRCRAFT
&_nif_station, // GSF_STATIONS
NULL, // GSF_CANALS (no callbacks/action2 implemented)
NULL, // GSF_BRIDGES (no callbacks/action2)
&_nif_house, // GSF_HOUSES
NULL, // GSF_GLOBALVAR (has no "physical" objects)
&_nif_industrytile, // GSF_INDUSTRYTILES
&_nif_industry, // GSF_INDUSTRIES
NULL, // GSF_CARGOES (has no "physical" objects)
NULL, // GSF_SOUNDFX (has no "physical" objects)
NULL, // GSF_AIRPORTS (feature not implemented)
NULL, // GSF_SIGNALS (feature not implemented)
&_nif_object, // GSF_OBJECTS
&_nif_railtype, // GSF_RAILTYPES
&_nif_airporttile, // GSF_AIRPORTTILES
&_nif_town, // GSF_FAKE_TOWNS
};
assert_compile(lengthof(_nifeatures) == GSF_FAKE_END);

150
src/table/object_land.h Normal file
View File

@@ -0,0 +1,150 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file object_land.h Sprites to use and how to display them for object tiles. */
#define TILE_SEQ_LINE(sz, img) { 0, 0, 0, 16, 16, sz, {img, PAL_NONE} },
#define TILE_SEQ_END() { (int8)0x80, 0, 0, 0, 0, 0, {0, 0} }
static const DrawTileSeqStruct _object_nothing[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_transmitter_seq[] = {
{ 7, 7, 0, 2, 2, 70, {SPR_TRANSMITTER, PAL_NONE}},
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_lighthouse_seq[] = {
{ 4, 4, 0, 7, 7, 61, {SPR_LIGHTHOUSE, PAL_NONE}},
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_statue_seq[] = {
{ 0, 0, 0, 16, 16, 25, {SPR_STATUE_COMPANY | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE}},
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_owned_land_seq[] = {
{ 8, 8, 0, 1, 1, 6, {SPR_BOUGHT_LAND | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE}},
TILE_SEQ_END()
};
extern const DrawTileSprites _objects[] = {
{ { SPR_FLAT_2_THIRD_GRASS_TILE, PAL_NONE }, _object_transmitter_seq },
{ { SPR_FLAT_2_THIRD_GRASS_TILE, PAL_NONE }, _object_lighthouse_seq },
{ { SPR_CONCRETE_GROUND, PAL_NONE }, _object_statue_seq },
{ { SPR_FLAT_BARE_LAND, PAL_NONE }, _object_owned_land_seq },
};
static const DrawTileSeqStruct _object_hq_medium_north[] = {
TILE_SEQ_LINE(20, SPR_MEDIUMHQ_NORTH_WALL | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_medium_east[] = {
TILE_SEQ_LINE(20, SPR_MEDIUMHQ_EAST_WALL | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_medium_west[] = {
TILE_SEQ_LINE(20, SPR_MEDIUMHQ_WEST_WALL | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_large_north[] = {
TILE_SEQ_LINE(50, SPR_LARGEHQ_NORTH_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_large_east[] = {
TILE_SEQ_LINE(50, SPR_LARGEHQ_EAST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_large_west[] = {
TILE_SEQ_LINE(50, SPR_LARGEHQ_WEST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_huge_north[] = {
TILE_SEQ_LINE(60, SPR_HUGEHQ_NORTH_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_huge_east[] = {
TILE_SEQ_LINE(60, SPR_HUGEHQ_EAST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _object_hq_huge_west[] = {
TILE_SEQ_LINE(60, SPR_HUGEHQ_WEST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END
#define TILE_SPRITE_LINE(img, dtss) { {img | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE}, dtss },
static const DrawTileSprites _object_hq[] = {
TILE_SPRITE_LINE(SPR_TINYHQ_NORTH, _object_nothing)
TILE_SPRITE_LINE(SPR_TINYHQ_WEST, _object_nothing)
TILE_SPRITE_LINE(SPR_TINYHQ_EAST, _object_nothing)
TILE_SPRITE_LINE(SPR_TINYHQ_SOUTH, _object_nothing)
TILE_SPRITE_LINE(SPR_SMALLHQ_NORTH, _object_nothing)
TILE_SPRITE_LINE(SPR_SMALLHQ_WEST, _object_nothing)
TILE_SPRITE_LINE(SPR_SMALLHQ_EAST, _object_nothing)
TILE_SPRITE_LINE(SPR_SMALLHQ_SOUTH, _object_nothing)
TILE_SPRITE_LINE(SPR_MEDIUMHQ_NORTH, _object_hq_medium_north)
TILE_SPRITE_LINE(SPR_MEDIUMHQ_WEST, _object_hq_medium_west)
TILE_SPRITE_LINE(SPR_MEDIUMHQ_EAST, _object_hq_medium_east)
TILE_SPRITE_LINE(SPR_MEDIUMHQ_SOUTH, _object_nothing)
TILE_SPRITE_LINE(SPR_LARGEHQ_NORTH_GROUND, _object_hq_large_north)
TILE_SPRITE_LINE(SPR_LARGEHQ_WEST_GROUND, _object_hq_large_west)
TILE_SPRITE_LINE(SPR_LARGEHQ_EAST_GROUND, _object_hq_large_east)
TILE_SPRITE_LINE(SPR_LARGEHQ_SOUTH, _object_nothing)
TILE_SPRITE_LINE(SPR_HUGEHQ_NORTH_GROUND, _object_hq_huge_north)
TILE_SPRITE_LINE(SPR_HUGEHQ_WEST_GROUND, _object_hq_huge_west)
TILE_SPRITE_LINE(SPR_HUGEHQ_EAST_GROUND, _object_hq_huge_east)
TILE_SPRITE_LINE(SPR_HUGEHQ_SOUTH, _object_nothing)
};
#undef TILE_SPRITE_LINE
#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) { GRFFilePropsBase<2>(), INVALID_OBJECT_CLASS, name, climate, size, build_cost_multiplier, clear_cost_multiplier, 0, MAX_DAY + 1, flags, {0, 0, 0, 0}, 0, height, 1, gen_amount, true }
/* Climates
* T = Temperate
* A = Sub-Arctic
* S = Sub-Tropic
* Y = Toyland */
#define T 1
#define A 2
#define S 4
#define Y 8
/** Specification of the original object structures. */
extern const ObjectSpec _original_objects[] = {
M(STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER, 0x11, 0, 0, 10, T|A|S , 15, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_SCENEDIT),
M(STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE, 0x11, 0, 0, 8, T|A , 8, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_SCENEDIT | OBJECT_FLAG_SCALE_BY_WATER),
M(STR_TOWN_BUILDING_NAME_STATUE_1, 0x11, 0, 0, 5, T|S|A|Y, 0, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_GAME | OBJECT_FLAG_ONLY_IN_SCENEDIT), // Yes, we disallow building this everywhere. Happens in "special" case!
M(STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND, 0x11, 10, 10, 0, T|S|A|Y, 0, OBJECT_FLAG_AUTOREMOVE | OBJECT_FLAG_ONLY_IN_GAME | OBJECT_FLAG_CLEAR_INCOME | OBJECT_FLAG_HAS_NO_FOUNDATION ), // Only non-silly use case is to use it when you cannot build a station, so disallow bridges
M(STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS, 0x22, 0, 0, 7, T|S|A|Y, 0, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_GAME),
};
#undef M
#undef Y
#undef S
#undef A
#undef T

View File

@@ -0,0 +1,82 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file palette_convert.h Translation tables from one GRF to another GRF. */
/** Converting from the Windows palette to the DOS palette */
extern const byte _palmap_w2d[] = {
0, 1, 2, 3, 4, 5, 6, 7, // 0..7
8, 9, 10, 11, 12, 13, 14, 15, // 8..15
16, 17, 18, 19, 20, 21, 22, 23, // 16..23
24, 25, 26, 27, 28, 29, 30, 31, // 24..31
6, 7, 34, 35, 36, 37, 38, 39, // 32..39
8, 41, 42, 43, 44, 45, 46, 47, // 40..47
48, 49, 50, 51, 52, 53, 54, 55, // 48..55
56, 57, 58, 59, 60, 61, 62, 63, // 56..63
64, 65, 66, 67, 68, 69, 70, 71, // 64..71
72, 73, 74, 75, 76, 77, 78, 79, // 72..79
80, 81, 82, 83, 84, 85, 86, 87, // 80..87
4, 89, 90, 91, 92, 93, 94, 95, // 88..95
96, 97, 98, 99, 100, 101, 102, 103, // 96..103
104, 105, 5, 107, 108, 109, 110, 111, // 104..111
112, 113, 114, 115, 116, 117, 118, 119, // 112..119
120, 121, 122, 123, 124, 125, 126, 127, // 120..127
128, 129, 130, 131, 132, 133, 134, 135, // 128..135
3, 137, 138, 139, 140, 141, 142, 143, // 136..143
144, 145, 146, 147, 148, 149, 150, 151, // 144..151
152, 153, 154, 155, 156, 157, 158, 159, // 152..159
160, 161, 162, 163, 164, 165, 166, 167, // 160..167
168, 169, 170, 171, 172, 173, 174, 175, // 168..175
176, 177, 178, 179, 180, 181, 182, 183, // 176..183
184, 185, 186, 187, 188, 189, 190, 191, // 184..191
192, 193, 194, 195, 196, 197, 198, 199, // 192..199
200, 201, 202, 203, 204, 205, 206, 207, // 200..207
208, 209, 210, 211, 212, 213, 214, 1, // 208..215
2, 245, 246, 247, 248, 249, 250, 251, // 216..223
252, 253, 254, 227, 228, 229, 230, 231, // 224..231
232, 233, 234, 235, 236, 237, 238, 239, // 232..239
240, 241, 242, 243, 244, 9, 218, 219, // 240..247
220, 221, 222, 223, 224, 225, 226, 255, // 248..255
};
/** Converting from the DOS palette to the Windows palette */
static const byte _palmap_d2w[] = {
0, 215, 216, 136, 88, 106, 32, 33, // 0..7
40, 245, 10, 11, 12, 13, 14, 15, // 8..15
16, 17, 18, 19, 20, 21, 22, 23, // 16..23
24, 25, 26, 27, 28, 29, 30, 31, // 24..31
53, 54, 34, 35, 36, 37, 38, 39, // 32..39
178, 41, 42, 43, 44, 45, 46, 47, // 40..47
48, 49, 50, 51, 52, 53, 54, 55, // 48..55
56, 57, 58, 59, 60, 61, 62, 63, // 56..63
64, 65, 66, 67, 68, 69, 70, 71, // 64..71
72, 73, 74, 75, 76, 77, 78, 79, // 72..79
80, 81, 82, 83, 84, 85, 86, 87, // 80..87
96, 89, 90, 91, 92, 93, 94, 95, // 88..95
96, 97, 98, 99, 100, 101, 102, 103, // 96..103
104, 105, 53, 107, 108, 109, 110, 111, // 104..111
112, 113, 114, 115, 116, 117, 118, 119, // 112..119
120, 121, 122, 123, 124, 125, 126, 127, // 120..127
128, 129, 130, 131, 132, 133, 134, 135, // 128..135
170, 137, 138, 139, 140, 141, 142, 143, // 136..143
144, 145, 146, 147, 148, 149, 150, 151, // 144..151
152, 153, 154, 155, 156, 157, 158, 159, // 152..159
160, 161, 162, 163, 164, 165, 166, 167, // 160..167
168, 169, 170, 171, 172, 173, 174, 175, // 168..175
176, 177, 178, 179, 180, 181, 182, 183, // 176..183
184, 185, 186, 187, 188, 189, 190, 191, // 184..191
192, 193, 194, 195, 196, 197, 198, 199, // 192..199
200, 201, 202, 203, 204, 205, 206, 207, // 200..207
208, 209, 210, 211, 212, 213, 214, 215, // 208..215
216, 217, 246, 247, 248, 249, 250, 251, // 216..223
252, 253, 254, 227, 228, 229, 230, 231, // 224..231
232, 233, 234, 235, 236, 237, 238, 239, // 232..239
240, 241, 242, 243, 244, 217, 218, 219, // 240..247
220, 221, 222, 223, 224, 225, 226, 255, // 248..255
};

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

@@ -0,0 +1,149 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file palettes.h The colour translation of the GRF palettes. */
#include "../core/endian_type.hpp"
#define M(r, g, b) Colour(r, g, b)
/** Colour palette (DOS) */
static const Palette _palette = {
{
/* transparent */
Colour(0, 0, 0, 0),
/* grey scale */
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),
/* regular colours */
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, 4), 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),
/* unused pink */
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(212, 0, 212), M(212, 0, 212), M(212, 0, 212),
/* Palette animated colours (filled with data from #ExtraPaletteValues) */
M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0),
/* pure white */
M(252, 252, 252)
},
0, // First dirty
256 // Dirty count
};
/** Description of the length of the palette cycle animations */
static const uint EPV_CYCLES_DARK_WATER = 5; ///< length of the dark blue water animation
static const uint EPV_CYCLES_LIGHTHOUSE = 4; ///< length of the lighthouse/stadium animation
static const uint EPV_CYCLES_OIL_REFINERY = 7; ///< length of the oil refinery's fire animation
static const uint EPV_CYCLES_FIZZY_DRINK = 5; ///< length of the fizzy drinks animation
static const uint EPV_CYCLES_GLITTER_WATER = 15; ///< length of the glittery water animation
/** Description of tables for the palette animation */
struct ExtraPaletteValues {
Colour dark_water[EPV_CYCLES_DARK_WATER]; ///< dark blue water
Colour dark_water_toyland[EPV_CYCLES_DARK_WATER]; ///< dark blue water Toyland
Colour lighthouse[EPV_CYCLES_LIGHTHOUSE]; ///< lighthouse & stadium
Colour oil_refinery[EPV_CYCLES_OIL_REFINERY]; ///< oil refinery
Colour fizzy_drink[EPV_CYCLES_FIZZY_DRINK]; ///< fizzy drinks
Colour glitter_water[EPV_CYCLES_GLITTER_WATER]; ///< glittery water
Colour glitter_water_toyland[EPV_CYCLES_GLITTER_WATER]; ///< glittery water Toyland
};
/** Actual palette animation tables */
static const ExtraPaletteValues _extra_palette_values = {
/* dark blue water */
{ M( 32, 68, 112), M( 36, 72, 116), M( 40, 76, 120), M( 44, 80, 124),
M( 48, 84, 128) },
/* dark blue water Toyland */
{ M( 28, 108, 124), M( 32, 112, 128), M( 36, 116, 132), M( 40, 120, 136),
M( 44, 124, 140) },
/* lighthouse & stadium */
{ M(240, 208, 0), M( 0, 0, 0), M( 0, 0, 0), M( 0, 0, 0) },
/* oil refinery */
{ 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) },
/* fizzy drinks */
{ M( 76, 24, 8), M(108, 44, 24), M(144, 72, 52), M(176, 108, 84),
M(212, 148, 128) },
/* glittery water */
{ 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) },
/* glittery water Toyland */
{ 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

85
src/table/pricebase.h Normal file
View File

@@ -0,0 +1,85 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file pricebase.h Price Bases */
extern const PriceBaseSpec _price_base_specs[] = {
{ 100, PCAT_NONE, GSF_END, INVALID_PRICE }, ///< PR_STATION_VALUE
{ 100, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_RAIL
{ 95, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_ROAD
{ 65, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_SIGNALS
{ 275, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_BRIDGE
{ 600, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_DEPOT_TRAIN
{ 500, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_DEPOT_ROAD
{ 700, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_DEPOT_SHIP
{ 450, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_TUNNEL
{ 200, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_STATION_RAIL
{ 180, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_STATION_RAIL_LENGTH
{ 600, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_STATION_AIRPORT
{ 200, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_STATION_BUS
{ 200, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_STATION_TRUCK
{ 350, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_STATION_DOCK
{ 400000, PCAT_CONSTRUCTION, GSF_TRAINS, INVALID_PRICE }, ///< PR_BUILD_VEHICLE_TRAIN
{ 2000, PCAT_CONSTRUCTION, GSF_TRAINS, INVALID_PRICE }, ///< PR_BUILD_VEHICLE_WAGON
{ 700000, PCAT_CONSTRUCTION, GSF_AIRCRAFT, INVALID_PRICE }, ///< PR_BUILD_VEHICLE_AIRCRAFT
{ 14000, PCAT_CONSTRUCTION, GSF_ROADVEHICLES, INVALID_PRICE }, ///< PR_BUILD_VEHICLE_ROAD
{ 65000, PCAT_CONSTRUCTION, GSF_SHIPS, INVALID_PRICE }, ///< PR_BUILD_VEHICLE_SHIP
{ 20, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_TREES
{ 250, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_TERRAFORM
{ 20, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_GRASS
{ 40, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_ROUGH
{ 200, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_ROCKS
{ 500, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_FIELDS
{ 20, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_TREES
{ -70, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_RAIL
{ 10, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_SIGNALS
{ 50, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_BRIDGE
{ 80, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_DEPOT_TRAIN
{ 80, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_DEPOT_ROAD
{ 90, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_DEPOT_SHIP
{ 30, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_TUNNEL
{ 10000, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_WATER
{ 50, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_STATION_RAIL
{ 30, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_STATION_AIRPORT
{ 50, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_STATION_BUS
{ 50, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_STATION_TRUCK
{ 55, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_STATION_DOCK
{ 1600, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_HOUSE
{ 40, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_CLEAR_ROAD
{ 5600, PCAT_RUNNING, GSF_TRAINS, INVALID_PRICE }, ///< PR_RUNNING_TRAIN_STEAM
{ 5200, PCAT_RUNNING, GSF_TRAINS, INVALID_PRICE }, ///< PR_RUNNING_TRAIN_DIESEL
{ 4800, PCAT_RUNNING, GSF_TRAINS, INVALID_PRICE }, ///< PR_RUNNING_TRAIN_ELECTRIC
{ 9600, PCAT_RUNNING, GSF_AIRCRAFT, INVALID_PRICE }, ///< PR_RUNNING_AIRCRAFT
{ 1600, PCAT_RUNNING, GSF_ROADVEHICLES, INVALID_PRICE }, ///< PR_RUNNING_ROADVEH
{ 5600, PCAT_RUNNING, GSF_SHIPS, INVALID_PRICE }, ///< PR_RUNNING_SHIP
{1000000, PCAT_CONSTRUCTION, GSF_END, INVALID_PRICE }, ///< PR_BUILD_INDUSTRY
{ 1600, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_HOUSE }, ///< PR_CLEAR_INDUSTRY
{ 40, PCAT_CONSTRUCTION, GSF_OBJECTS, PR_CLEAR_ROUGH }, ///< PR_BUILD_OBJECT
{ 40, PCAT_CONSTRUCTION, GSF_OBJECTS, PR_CLEAR_ROUGH }, ///< PR_CLEAR_OBJECT
{ 600, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_DEPOT_TRAIN }, ///< PR_BUILD_WAYPOINT_RAIL
{ 80, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_DEPOT_TRAIN }, ///< PR_CLEAR_WAYPOINT_RAIL
{ 350, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_STATION_DOCK }, ///< PR_BUILD_WAYPOINT_BUOY
{ 50, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_STATION_TRUCK}, ///< PR_CLEAR_WAYPOINT_BUOY
{1000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_TOWN_ACTION
{ 250, PCAT_CONSTRUCTION, GSF_END, PR_TERRAFORM }, ///< PR_BUILD_FOUNDATION
{8000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_BUILD_INDUSTRY_RAW
{1000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_BUILD_TOWN
{ 5000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_BUILD_CANAL
{ 5000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_CLEAR_CANAL
{ 10000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_BUILD_AQUEDUCT
{ 2000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_BRIDGE }, ///< PR_CLEAR_AQUEDUCT
{ 7500, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_BUILD_LOCK
{ 2000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_CLEAR_LOCK
{ 10, PCAT_RUNNING, GSF_END, PR_BUILD_RAIL }, ///< PR_INFRASTRUCTURE_RAIL
{ 10, PCAT_RUNNING, GSF_END, PR_BUILD_ROAD }, ///< PR_INFRASTRUCTURE_ROAD
{ 8, PCAT_RUNNING, GSF_END, PR_BUILD_CANAL }, ///< PR_INFRASTRUCTURE_WATER
{ 100, PCAT_RUNNING, GSF_END, PR_STATION_VALUE }, ///< PR_INFRASTRUCTURE_STATION
{ 5000, PCAT_RUNNING, GSF_END, PR_BUILD_STATION_AIRPORT}, ///< PR_INFRASTRUCTURE_AIRPORT
};
assert_compile(lengthof(_price_base_specs) == PR_END);

415
src/table/railtypes.h Normal file
View File

@@ -0,0 +1,415 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file railtypes.h
* All the railtype-specific information is stored here.
*/
#ifndef RAILTYPES_H
#define RAILTYPES_H
/**
* Global Railtype definition
*/
static const RailtypeInfo _original_railtypes[] = {
/** Railway */
{ // Main Sprites
{ SPR_RAIL_TRACK_Y, SPR_RAIL_TRACK_N_S, SPR_RAIL_TRACK_BASE, SPR_RAIL_SINGLE_X, SPR_RAIL_SINGLE_Y,
SPR_RAIL_SINGLE_NORTH, SPR_RAIL_SINGLE_SOUTH, SPR_RAIL_SINGLE_EAST, SPR_RAIL_SINGLE_WEST,
SPR_TRACKS_FOR_SLOPES_RAIL_BASE,
SPR_CROSSING_OFF_X_RAIL,
SPR_TUNNEL_ENTRY_REAR_RAIL
},
/* GUI sprites */
{ 0x4E3, 0x4E4, 0x4E5, 0x4E6,
SPR_IMG_AUTORAIL,
SPR_IMG_DEPOT_RAIL,
SPR_IMG_TUNNEL_RAIL,
SPR_IMG_CONVERT_RAIL,
{}
},
{
SPR_CURSOR_NS_TRACK,
SPR_CURSOR_SWNE_TRACK,
SPR_CURSOR_EW_TRACK,
SPR_CURSOR_NWSE_TRACK,
SPR_CURSOR_AUTORAIL,
SPR_CURSOR_RAIL_DEPOT,
SPR_CURSOR_TUNNEL_RAIL,
SPR_CURSOR_CONVERT_RAIL
},
/* strings */
{
STR_RAIL_NAME_RAILROAD,
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION,
STR_RAIL_MENU_RAILROAD_CONSTRUCTION,
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION,
STR_REPLACE_RAIL_VEHICLES,
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE,
},
/* Offset of snow tiles */
SPR_RAIL_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_RAIL | RAILTYPES_ELECTRIC,
/* Compatible railtypes */
RAILTYPES_RAIL | RAILTYPES_ELECTRIC,
/* bridge offset */
0,
/* fallback_railtype */
0,
/* curve speed advantage (multiplier) */
0,
/* flags */
RTFB_NONE,
/* cost multiplier */
8,
/* maintenance cost multiplier */
8,
/* acceleration type */
0,
/* max speed */
0,
/* rail type label */
'RAIL',
/* alternate labels */
RailTypeLabelList(),
/* map colour */
0x0A,
/* introduction date */
INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
/* introduction rail types */
RAILTYPES_RAIL,
/* sort order */
0 << 4 | 7,
{ NULL },
{ NULL },
},
/** Electrified railway */
{ // Main Sprites
{ SPR_RAIL_TRACK_Y, SPR_RAIL_TRACK_N_S, SPR_RAIL_TRACK_BASE, SPR_RAIL_SINGLE_X, SPR_RAIL_SINGLE_Y,
SPR_RAIL_SINGLE_NORTH, SPR_RAIL_SINGLE_SOUTH, SPR_RAIL_SINGLE_EAST, SPR_RAIL_SINGLE_WEST,
SPR_TRACKS_FOR_SLOPES_RAIL_BASE,
SPR_CROSSING_OFF_X_RAIL,
SPR_TUNNEL_ENTRY_REAR_RAIL
},
/* GUI sprites */
{
SPR_BUILD_NS_ELRAIL,
SPR_BUILD_X_ELRAIL,
SPR_BUILD_EW_ELRAIL,
SPR_BUILD_Y_ELRAIL,
SPR_IMG_AUTOELRAIL,
SPR_IMG_DEPOT_ELRAIL,
SPR_BUILD_TUNNEL_ELRAIL,
SPR_IMG_CONVERT_ELRAIL,
{}
},
{
SPR_CURSOR_NS_ELRAIL,
SPR_CURSOR_SWNE_ELRAIL,
SPR_CURSOR_EW_ELRAIL,
SPR_CURSOR_NWSE_ELRAIL,
SPR_CURSOR_AUTOELRAIL,
SPR_CURSOR_ELRAIL_DEPOT,
SPR_CURSOR_TUNNEL_ELRAIL,
SPR_CURSOR_CONVERT_ELRAIL
},
/* strings */
{
STR_RAIL_NAME_ELRAIL,
STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION,
STR_RAIL_MENU_ELRAIL_CONSTRUCTION,
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION,
STR_REPLACE_ELRAIL_VEHICLES,
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE,
},
/* Offset of snow tiles */
SPR_RAIL_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_ELECTRIC,
/* Compatible railtypes */
RAILTYPES_ELECTRIC | RAILTYPES_RAIL,
/* bridge offset */
0,
/* fallback_railtype */
0,
/* curve speed advantage (multiplier) */
0,
/* flags */
RTFB_CATENARY,
/* cost multiplier */
12,
/* maintenance cost multiplier */
12,
/* acceleration type */
0,
/* max speed */
0,
/* rail type label */
'ELRL',
/* alternate labels */
RailTypeLabelList(),
/* map colour */
0x0A,
/* introduction date */
INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
/* introduction rail types */
RAILTYPES_ELECTRIC,
/* sort order */
1 << 4 | 7,
{ NULL },
{ NULL },
},
/** Monorail */
{ // Main Sprites
{ SPR_MONO_TRACK_Y, SPR_MONO_TRACK_N_S, SPR_MONO_TRACK_BASE, SPR_MONO_SINGLE_X, SPR_MONO_SINGLE_Y,
SPR_MONO_SINGLE_NORTH, SPR_MONO_SINGLE_SOUTH, SPR_MONO_SINGLE_EAST, SPR_MONO_SINGLE_WEST,
SPR_TRACKS_FOR_SLOPES_MONO_BASE,
SPR_CROSSING_OFF_X_MONO,
SPR_TUNNEL_ENTRY_REAR_MONO
},
/* GUI sprites */
{ 0x4E7, 0x4E8, 0x4E9, 0x4EA,
SPR_IMG_AUTOMONO,
SPR_IMG_DEPOT_MONO,
SPR_IMG_TUNNEL_MONO,
SPR_IMG_CONVERT_MONO,
{}
},
{
SPR_CURSOR_NS_MONO,
SPR_CURSOR_SWNE_MONO,
SPR_CURSOR_EW_MONO,
SPR_CURSOR_NWSE_MONO,
SPR_CURSOR_AUTOMONO,
SPR_CURSOR_MONO_DEPOT,
SPR_CURSOR_TUNNEL_MONO,
SPR_CURSOR_CONVERT_MONO
},
/* strings */
{
STR_RAIL_NAME_MONORAIL,
STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION,
STR_RAIL_MENU_MONORAIL_CONSTRUCTION,
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION,
STR_REPLACE_MONORAIL_VEHICLES,
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE,
},
/* Offset of snow tiles */
SPR_MONO_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_MONO,
/* Compatible Railtypes */
RAILTYPES_MONO,
/* bridge offset */
16,
/* fallback_railtype */
1,
/* curve speed advantage (multiplier) */
1,
/* flags */
RTFB_NONE,
/* cost multiplier */
16,
/* maintenance cost multiplier */
16,
/* acceleration type */
1,
/* max speed */
0,
/* rail type label */
'MONO',
/* alternate labels */
RailTypeLabelList(),
/* map colour */
0x0A,
/* introduction date */
INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
/* introduction rail types */
RAILTYPES_MONO,
/* sort order */
2 << 4 | 7,
{ NULL },
{ NULL },
},
/** Maglev */
{ // Main sprites
{ SPR_MGLV_TRACK_Y, SPR_MGLV_TRACK_N_S, SPR_MGLV_TRACK_BASE, SPR_MGLV_SINGLE_X, SPR_MGLV_SINGLE_Y,
SPR_MGLV_SINGLE_NORTH, SPR_MGLV_SINGLE_SOUTH, SPR_MGLV_SINGLE_EAST, SPR_MGLV_SINGLE_WEST,
SPR_TRACKS_FOR_SLOPES_MAGLEV_BASE,
SPR_CROSSING_OFF_X_MAGLEV,
SPR_TUNNEL_ENTRY_REAR_MAGLEV
},
/* GUI sprites */
{ 0x4EB, 0x4EC, 0x4EE, 0x4ED,
SPR_IMG_AUTOMAGLEV,
SPR_IMG_DEPOT_MAGLEV,
SPR_IMG_TUNNEL_MAGLEV,
SPR_IMG_CONVERT_MAGLEV,
{}
},
{
SPR_CURSOR_NS_MAGLEV,
SPR_CURSOR_SWNE_MAGLEV,
SPR_CURSOR_EW_MAGLEV,
SPR_CURSOR_NWSE_MAGLEV,
SPR_CURSOR_AUTOMAGLEV,
SPR_CURSOR_MAGLEV_DEPOT,
SPR_CURSOR_TUNNEL_MAGLEV,
SPR_CURSOR_CONVERT_MAGLEV
},
/* strings */
{
STR_RAIL_NAME_MAGLEV,
STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION,
STR_RAIL_MENU_MAGLEV_CONSTRUCTION,
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION,
STR_REPLACE_MAGLEV_VEHICLES,
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE,
},
/* Offset of snow tiles */
SPR_MGLV_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_MAGLEV,
/* Compatible Railtypes */
RAILTYPES_MAGLEV,
/* bridge offset */
24,
/* fallback_railtype */
2,
/* curve speed advantage (multiplier) */
2,
/* flags */
RTFB_NONE,
/* cost multiplier */
24,
/* maintenance cost multiplier */
24,
/* acceleration type */
2,
/* max speed */
0,
/* rail type label */
'MGLV',
/* alternate labels */
RailTypeLabelList(),
/* map colour */
0x0A,
/* introduction date */
INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
/* introduction rail types */
RAILTYPES_MAGLEV,
/* sort order */
3 << 4 | 7,
{ NULL },
{ NULL },
},
};
#endif /* RAILTYPES_H */

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

@@ -0,0 +1,291 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file road_land.h Sprite constructs for road depots. */
#define TILE_SEQ_LINE(img, pal, dx, dy, sx, sy) { dx, dy, 0, sx, sy, 20, {img, pal} },
#define TILE_SEQ_END() { (int8)0x80, 0, 0, 0, 0, 0, {0, 0} }
static const DrawTileSeqStruct _road_depot_NE[] = {
TILE_SEQ_LINE(0x584 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 15, 16, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _road_depot_SE[] = {
TILE_SEQ_LINE(0x580 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 1, 16)
TILE_SEQ_LINE(0x581 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 15, 0, 1, 16)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _road_depot_SW[] = {
TILE_SEQ_LINE(0x582 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 1)
TILE_SEQ_LINE(0x583 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 15, 16, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _road_depot_NW[] = {
TILE_SEQ_LINE(0x585 | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 15, 0, 1, 16)
TILE_SEQ_END()
};
static const DrawTileSprites _road_depot[] = {
{ {0xA4A, PAL_NONE}, _road_depot_NE },
{ {0xA4A, PAL_NONE}, _road_depot_SE },
{ {0xA4A, PAL_NONE}, _road_depot_SW },
{ {0xA4A, PAL_NONE}, _road_depot_NW }
};
static const DrawTileSeqStruct _tram_depot_NE[] = {
TILE_SEQ_LINE((SPR_TRAMWAY_BASE + 0x35) | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 15, 16, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _tram_depot_SE[] = {
TILE_SEQ_LINE((SPR_TRAMWAY_BASE + 0x31) | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 1, 16)
TILE_SEQ_LINE((SPR_TRAMWAY_BASE + 0x32) | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 15, 0, 1, 16)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _tram_depot_SW[] = {
TILE_SEQ_LINE((SPR_TRAMWAY_BASE + 0x33) | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 0, 16, 1)
TILE_SEQ_LINE((SPR_TRAMWAY_BASE + 0x34) | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 0, 15, 16, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _tram_depot_NW[] = {
TILE_SEQ_LINE((SPR_TRAMWAY_BASE + 0x36) | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE, 15, 0, 1, 16)
TILE_SEQ_END()
};
static const DrawTileSprites _tram_depot[] = {
{ {0xA4A, PAL_NONE}, _tram_depot_NE },
{ {0xA4A, PAL_NONE}, _tram_depot_SE },
{ {0xA4A, PAL_NONE}, _tram_depot_SW },
{ {0xA4A, PAL_NONE}, _tram_depot_NW }
};
/* Sprite layout for level crossings. The SpriteIDs are actually offsets
* from the base SpriteID returned from the NewGRF sprite resolver. */
static const DrawTileSeqStruct _crossing_layout_ALL[] = {
TILE_SEQ_LINE(2, PAL_NONE, 0, 0, 3, 3)
TILE_SEQ_LINE(4, PAL_NONE, 0, 13, 3, 3)
TILE_SEQ_LINE(6, PAL_NONE, 13, 0, 3, 3)
TILE_SEQ_LINE(8, PAL_NONE, 13, 13, 3, 3)
TILE_SEQ_END()
};
static const DrawTileSprites _crossing_layout = {
{0, PAL_NONE}, _crossing_layout_ALL
};
#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
};
static const SpriteID _road_frontwire_sprites_1[16] = {
0, 0x54, 0x55, 0x5B, 0x54, 0x54, 0x5E, 0x5A, 0x55, 0x5C, 0x55, 0x58, 0x5D, 0x57, 0x59, 0x56
};
static const SpriteID _road_backpole_sprites_1[16] = {
0, 0x38, 0x39, 0x40, 0x38, 0x38, 0x43, 0x3E, 0x39, 0x41, 0x39, 0x3C, 0x42, 0x3B, 0x3D, 0x3A
};
#define MAKELINE(a, b, c) { a, b, c },
#define ENDLINE { 0, 0, 0 }
static const DrawRoadTileStruct _roadside_nothing[] = {
ENDLINE
};
static const DrawRoadTileStruct _road_display_datas2_3[] = {
MAKELINE(0x57f, 1, 8)
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_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_19[] = {
MAKELINE(0x1212, 0, 2)
MAKELINE(0x1212, 3, 9)
MAKELINE(0x1212, 10, 12)
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_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
};
#undef MAKELINE
#undef ENDLINE
static const DrawRoadTileStruct * const _roadside_none[] = {
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing,
_roadside_nothing, _roadside_nothing
};
static const DrawRoadTileStruct * const _roadside_lamps[] = {
_roadside_nothing,
_roadside_nothing,
_roadside_nothing,
_road_display_datas2_3,
_roadside_nothing,
_road_display_datas2_5,
_road_display_datas2_6,
_road_display_datas2_7,
_roadside_nothing,
_road_display_datas2_9,
_road_display_datas2_10,
_road_display_datas2_11,
_road_display_datas2_12,
_road_display_datas2_13,
_road_display_datas2_14,
_roadside_nothing,
};
static const DrawRoadTileStruct * const _roadside_trees[] = {
_roadside_nothing,
_roadside_nothing,
_roadside_nothing,
_road_display_datas2_19,
_roadside_nothing,
_road_display_datas2_21,
_road_display_datas2_22,
_road_display_datas2_23,
_roadside_nothing,
_road_display_datas2_25,
_road_display_datas2_26,
_road_display_datas2_27,
_road_display_datas2_28,
_road_display_datas2_29,
_road_display_datas2_30,
_roadside_nothing,
};
static const DrawRoadTileStruct * const * const _road_display_table[] = {
_roadside_none,
_roadside_none,
_roadside_none,
_roadside_lamps,
_roadside_none,
_roadside_trees,
};

1486
src/table/roadveh_movement.h Normal file

File diff suppressed because it is too large Load Diff

View File

View File

@@ -0,0 +1,136 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file table/settings.h Settings to save in the savegame and config file. */
/* Callback function used in _settings[] as well as _company_settings[] */
static size_t ConvertLandscape(const char *value);
/****************************
* OTTD specific INI stuff
****************************/
/**
* Settings-macro usage:
* The list might look daunting at first, but is in general easy to understand.
* The macros can be grouped depending on where the config variable is
* stored:
* 1. SDTG_something
* These are for global variables, so this is the one you will use
* for a #SettingDescGlobVarList section. Here 'var' refers to a
* global variable.
* 2. SDTC_something
* These are for client-only variables. Here the 'var' refers to an
* entry inside _settings_client.
* 3. SDT_something
* Thse are for members in the struct described by the current
* #SettingDesc list / .ini file. Here, 'base' specifies type of the
* struct while 'var' points out the member of the struct (the actual
* struct to store it in is implicitely defined by the #SettingDesc
* list / .ini file preamble the entry is in).
*
* The something part defines the type of variable to store. There are a
* lot of types. Easy ones are:
* - VAR: any number type, 'type' field specifies what number. eg int8 or uint32
* - BOOL: a boolean number type
* - STR: a string or character. 'type' field specifies what string. Normal, string, or quoted
* A bit more difficult to use are MMANY (meaning ManyOfMany) and OMANY (OneOfMany)
* These are actually normal numbers, only bitmasked. In MMANY several bits can
* be set, in the other only one.
* If nothing fits you, you can use the GENERAL macros, but it exposes the
* internal structure somewhat so it needs a little looking. There are _NULL()
* macros as well, these fill up space so you can add more settings there (in
* place) and you DON'T have to increase the savegame version.
*
* While reading values from openttd.cfg, some values may not be converted
* properly, for any kind of reasons. In order to allow a process of self-cleaning
* mechanism, a callback procedure is made available. You will have to supply the function, which
* will work on a string, one function per setting. And of course, enable the callback param
* on the appropriate macro.
*/
#define NSD_GENERAL(name, def, cmd, guiflags, min, max, interval, many, str, strhelp, strval, proc, load, cat)\
{name, (const void*)(size_t)(def), {(byte)cmd}, {(uint16)guiflags}, min, max, interval, many, str, strhelp, strval, proc, load, cat}
/* Macros for various objects to go in the configuration file.
* This section is for global variables */
#define SDTG_GENERAL(name, sdt_cmd, sle_cmd, type, flags, guiflags, var, length, def, min, max, interval, full, str, strhelp, strval, proc, from, to, cat)\
{NSD_GENERAL(name, def, sdt_cmd, guiflags, min, max, interval, full, str, strhelp, strval, proc, NULL, cat), SLEG_GENERAL(sle_cmd, var, type | flags, length, from, to)}
#define SDTG_VAR(name, type, flags, guiflags, var, def, min, max, interval, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(name, SDT_NUMX, SL_VAR, type, flags, guiflags, var, 0, def, min, max, interval, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTG_BOOL(name, flags, guiflags, var, def, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(name, SDT_BOOLX, SL_VAR, SLE_BOOL, flags, guiflags, var, 0, def, 0, 1, 0, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTG_LIST(name, type, length, flags, guiflags, var, def, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(name, SDT_INTLIST, SL_ARR, type, flags, guiflags, var, length, def, 0, 0, 0, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTG_STR(name, type, flags, guiflags, var, def, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(name, SDT_STRING, SL_STR, type, flags, guiflags, var, sizeof(var), def, 0, 0, 0, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTG_OMANY(name, type, flags, guiflags, var, def, max, full, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(name, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, max, 0, full, str, strhelp, strval, proc, from, to, cat)
#define SDTG_MMANY(name, type, flags, guiflags, var, def, full, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(name, SDT_MANYOFMANY, SL_VAR, type, flags, guiflags, var, 0, def, 0, 0, 0, full, str, strhelp, strval, proc, from, to, cat)
#define SDTG_NULL(length, from, to)\
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLEG_NULL(length, from, to)}
#define SDTG_END() {{NULL, NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLEG_END()}
/* Macros for various objects to go in the configuration file.
* This section is for structures where their various members are saved */
#define SDT_GENERAL(name, sdt_cmd, sle_cmd, type, flags, guiflags, base, var, length, def, min, max, interval, full, str, strhelp, strval, proc, load, from, to, cat)\
{NSD_GENERAL(name, def, sdt_cmd, guiflags, min, max, interval, full, str, strhelp, strval, proc, load, cat), SLE_GENERAL(sle_cmd, base, var, type | flags, length, from, to)}
#define SDT_VAR(base, var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, proc, from, to, cat)\
SDT_GENERAL(#var, SDT_NUMX, SL_VAR, type, flags, guiflags, base, var, 1, def, min, max, interval, NULL, str, strhelp, strval, proc, NULL, from, to, cat)
#define SDT_BOOL(base, var, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDT_GENERAL(#var, SDT_BOOLX, SL_VAR, SLE_BOOL, flags, guiflags, base, var, 1, def, 0, 1, 0, NULL, str, strhelp, strval, proc, NULL, from, to, cat)
#define SDT_LIST(base, var, type, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDT_GENERAL(#var, SDT_INTLIST, SL_ARR, type, flags, guiflags, base, var, lengthof(((base*)8)->var), def, 0, 0, 0, NULL, str, strhelp, strval, proc, NULL, from, to, cat)
#define SDT_STR(base, var, type, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDT_GENERAL(#var, SDT_STRING, SL_STR, type, flags, guiflags, base, var, sizeof(((base*)8)->var), def, 0, 0, 0, NULL, str, strhelp, strval, proc, NULL, from, to, cat)
#define SDT_CHR(base, var, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDT_GENERAL(#var, SDT_STRING, SL_VAR, SLE_CHAR, flags, guiflags, base, var, 1, def, 0, 0, 0, NULL, str, strhelp, strval, proc, NULL, from, to, cat)
#define SDT_OMANY(base, var, type, flags, guiflags, def, max, full, str, strhelp, strval, proc, from, to, load, cat)\
SDT_GENERAL(#var, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, base, var, 1, def, 0, max, 0, full, str, strhelp, strval, proc, load, from, to, cat)
#define SDT_MMANY(base, var, type, flags, guiflags, def, full, str, proc, strhelp, strval, from, to, cat)\
SDT_GENERAL(#var, SDT_MANYOFMANY, SL_VAR, type, flags, guiflags, base, var, 1, def, 0, 0, 0, full, str, strhelp, strval, proc, NULL, from, to, cat)
#define SDT_NULL(length, from, to)\
{{"", NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_CONDNULL(length, from, to)}
#define SDTC_VAR(var, type, flags, guiflags, def, min, max, interval, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(#var, SDT_NUMX, SL_VAR, type, flags, guiflags, _settings_client.var, 1, def, min, max, interval, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTC_BOOL(var, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(#var, SDT_BOOLX, SL_VAR, SLE_BOOL, flags, guiflags, _settings_client.var, 1, def, 0, 1, 0, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTC_LIST(var, type, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(#var, SDT_INTLIST, SL_ARR, type, flags, guiflags, _settings_client.var, lengthof(_settings_client.var), def, 0, 0, 0, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTC_STR(var, type, flags, guiflags, def, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(#var, SDT_STRING, SL_STR, type, flags, guiflags, _settings_client.var, sizeof(_settings_client.var), def, 0, 0, 0, NULL, str, strhelp, strval, proc, from, to, cat)
#define SDTC_OMANY(var, type, flags, guiflags, def, max, full, str, strhelp, strval, proc, from, to, cat)\
SDTG_GENERAL(#var, SDT_ONEOFMANY, SL_VAR, type, flags, guiflags, _settings_client.var, 1, def, 0, max, 0, full, str, strhelp, strval, proc, from, to, cat)
#define SDT_END() {{NULL, NULL, {0}, {0}, 0, 0, 0, NULL, STR_NULL, STR_NULL, STR_NULL, NULL, NULL, SC_NONE}, SLE_END()}

3966
src/table/settings.ini Normal file

File diff suppressed because it is too large Load Diff

1588
src/table/sprites.h Normal file

File diff suppressed because it is too large Load Diff

1004
src/table/station_land.h Normal file

File diff suppressed because it is too large Load Diff

210
src/table/strgen_tables.h Normal file
View File

@@ -0,0 +1,210 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file table/strgen_tables.h Tables of commands for strgen */
#include "../core/enum_type.hpp"
enum CmdFlags {
C_NONE = 0x0, ///< Nothing special about this command
C_DONTCOUNT = 0x1, ///< These commands aren't counted for comparison
C_CASE = 0x2, ///< These commands support cases
C_GENDER = 0x4, ///< These commands support genders
};
DECLARE_ENUM_AS_BIT_SET(CmdFlags)
struct Buffer;
typedef void (*ParseCmdProc)(Buffer *buffer, char *buf, int value);
struct CmdStruct {
const char *cmd;
ParseCmdProc proc;
long value;
uint8 consumes;
int8 default_plural_offset;
CmdFlags flags;
};
extern void EmitSingleChar(Buffer *buffer, char *buf, int value);
extern void EmitPlural(Buffer *buffer, char *buf, int value);
extern void EmitGender(Buffer *buffer, char *buf, int value);
static const CmdStruct _cmd_structs[] = {
/* Font size */
{"NORMAL_FONT", EmitSingleChar, SCC_NORMALFONT, 0, -1, C_NONE},
{"TINY_FONT", EmitSingleChar, SCC_TINYFONT, 0, -1, C_NONE},
{"BIG_FONT", EmitSingleChar, SCC_BIGFONT, 0, -1, C_NONE},
{"MONO_FONT", EmitSingleChar, SCC_MONOFONT, 0, -1, C_NONE},
/* Colours */
{"BLUE", EmitSingleChar, SCC_BLUE, 0, -1, C_DONTCOUNT},
{"SILVER", EmitSingleChar, SCC_SILVER, 0, -1, C_DONTCOUNT},
{"GOLD", EmitSingleChar, SCC_GOLD, 0, -1, C_DONTCOUNT},
{"RED", EmitSingleChar, SCC_RED, 0, -1, C_DONTCOUNT},
{"PURPLE", EmitSingleChar, SCC_PURPLE, 0, -1, C_DONTCOUNT},
{"LTBROWN", EmitSingleChar, SCC_LTBROWN, 0, -1, C_DONTCOUNT},
{"ORANGE", EmitSingleChar, SCC_ORANGE, 0, -1, C_DONTCOUNT},
{"GREEN", EmitSingleChar, SCC_GREEN, 0, -1, C_DONTCOUNT},
{"YELLOW", EmitSingleChar, SCC_YELLOW, 0, -1, C_DONTCOUNT},
{"DKGREEN", EmitSingleChar, SCC_DKGREEN, 0, -1, C_DONTCOUNT},
{"CREAM", EmitSingleChar, SCC_CREAM, 0, -1, C_DONTCOUNT},
{"BROWN", EmitSingleChar, SCC_BROWN, 0, -1, C_DONTCOUNT},
{"WHITE", EmitSingleChar, SCC_WHITE, 0, -1, C_DONTCOUNT},
{"LTBLUE", EmitSingleChar, SCC_LTBLUE, 0, -1, C_DONTCOUNT},
{"GRAY", EmitSingleChar, SCC_GRAY, 0, -1, C_DONTCOUNT},
{"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, -1, C_DONTCOUNT},
{"BLACK", EmitSingleChar, SCC_BLACK, 0, -1, C_DONTCOUNT},
{"PUSH_COLOUR", EmitSingleChar, SCC_PUSH_COLOUR, 0, -1, C_DONTCOUNT},
{"POP_COLOUR", EmitSingleChar, SCC_POP_COLOUR, 0, -1, C_DONTCOUNT},
{"REV", EmitSingleChar, SCC_REVISION, 0, -1, C_NONE}, // openttd revision string
{"STRING1", EmitSingleChar, SCC_STRING1, 2, -1, C_CASE | C_GENDER}, // included string that consumes the string id and ONE argument
{"STRING2", EmitSingleChar, SCC_STRING2, 3, -1, C_CASE | C_GENDER}, // included string that consumes the string id and TWO arguments
{"STRING3", EmitSingleChar, SCC_STRING3, 4, -1, C_CASE | C_GENDER}, // included string that consumes the string id and THREE arguments
{"STRING4", EmitSingleChar, SCC_STRING4, 5, -1, C_CASE | C_GENDER}, // included string that consumes the string id and FOUR arguments
{"STRING5", EmitSingleChar, SCC_STRING5, 6, -1, C_CASE | C_GENDER}, // included string that consumes the string id and FIVE arguments
{"STRING6", EmitSingleChar, SCC_STRING6, 7, -1, C_CASE | C_GENDER}, // included string that consumes the string id and SIX arguments
{"STRING7", EmitSingleChar, SCC_STRING7, 8, -1, C_CASE | C_GENDER}, // included string that consumes the string id and SEVEN arguments
{"STATION_FEATURES", EmitSingleChar, SCC_STATION_FEATURES, 1, -1, C_NONE}, // station features string, icons of the features
{"INDUSTRY", EmitSingleChar, SCC_INDUSTRY_NAME, 1, -1, C_CASE | C_GENDER}, // industry, takes an industry #, can have cases
{"CARGO_LONG", EmitSingleChar, SCC_CARGO_LONG, 2, 1, C_NONE | C_GENDER},
{"CARGO_SHORT", EmitSingleChar, SCC_CARGO_SHORT, 2, 1, C_NONE}, // short cargo description, only ### tons, or ### litres
{"CARGO_TINY", EmitSingleChar, SCC_CARGO_TINY, 2, 1, C_NONE}, // tiny cargo description with only the amount, not a specifier for the amount or the actual cargo name
{"CARGO_LIST", EmitSingleChar, SCC_CARGO_LIST, 1, -1, C_CASE},
{"POWER", EmitSingleChar, SCC_POWER, 1, 0, C_NONE},
{"VOLUME_LONG", EmitSingleChar, SCC_VOLUME_LONG, 1, 0, C_NONE},
{"VOLUME_SHORT", EmitSingleChar, SCC_VOLUME_SHORT, 1, 0, C_NONE},
{"WEIGHT_LONG", EmitSingleChar, SCC_WEIGHT_LONG, 1, 0, C_NONE},
{"WEIGHT_SHORT", EmitSingleChar, SCC_WEIGHT_SHORT, 1, 0, C_NONE},
{"FORCE", EmitSingleChar, SCC_FORCE, 1, 0, C_NONE},
{"VELOCITY", EmitSingleChar, SCC_VELOCITY, 1, 0, C_NONE},
{"HEIGHT", EmitSingleChar, SCC_HEIGHT, 1, 0, C_NONE},
{"P", EmitPlural, 0, 0, -1, C_DONTCOUNT}, // plural specifier
{"G", EmitGender, 0, 0, -1, C_DONTCOUNT}, // gender specifier
{"DATE_TINY", EmitSingleChar, SCC_DATE_TINY, 1, -1, C_NONE},
{"DATE_SHORT", EmitSingleChar, SCC_DATE_SHORT, 1, -1, C_CASE},
{"DATE_LONG", EmitSingleChar, SCC_DATE_LONG, 1, -1, C_CASE},
{"DATE_ISO", EmitSingleChar, SCC_DATE_ISO, 1, -1, C_NONE},
{"STRING", EmitSingleChar, SCC_STRING, 1, -1, C_CASE | C_GENDER},
{"RAW_STRING", EmitSingleChar, SCC_RAW_STRING_POINTER, 1, -1, C_NONE | C_GENDER},
/* Numbers */
{"COMMA", EmitSingleChar, SCC_COMMA, 1, 0, C_NONE}, // Number with comma
{"DECIMAL", EmitSingleChar, SCC_DECIMAL, 2, 0, C_NONE}, // Number with comma and fractional part. Second parameter is number of fractional digits, first parameter is number times 10**(second parameter).
{"NUM", EmitSingleChar, SCC_NUM, 1, 0, C_NONE}, // Signed number
{"ZEROFILL_NUM", EmitSingleChar, SCC_ZEROFILL_NUM, 2, 0, C_NONE}, // Unsigned number with zero fill, e.g. "02". First parameter is number, second minimum length
{"BYTES", EmitSingleChar, SCC_BYTES, 1, 0, C_NONE}, // Unsigned number with "bytes", i.e. "1.02 MiB or 123 KiB"
{"HEX", EmitSingleChar, SCC_HEX, 1, 0, C_NONE}, // Hexadecimally printed number
{"CURRENCY_LONG", EmitSingleChar, SCC_CURRENCY_LONG, 1, 0, C_NONE},
{"CURRENCY_SHORT", EmitSingleChar, SCC_CURRENCY_SHORT, 1, 0, C_NONE}, // compact currency
{"WAYPOINT", EmitSingleChar, SCC_WAYPOINT_NAME, 1, -1, C_NONE | C_GENDER}, // waypoint name
{"STATION", EmitSingleChar, SCC_STATION_NAME, 1, -1, C_NONE | C_GENDER},
{"DEPOT", EmitSingleChar, SCC_DEPOT_NAME, 2, -1, C_NONE | C_GENDER},
{"TOWN", EmitSingleChar, SCC_TOWN_NAME, 1, -1, C_NONE | C_GENDER},
{"GROUP", EmitSingleChar, SCC_GROUP_NAME, 1, -1, C_NONE | C_GENDER},
{"SIGN", EmitSingleChar, SCC_SIGN_NAME, 1, -1, C_NONE | C_GENDER},
{"ENGINE", EmitSingleChar, SCC_ENGINE_NAME, 1, -1, C_NONE | C_GENDER},
{"VEHICLE", EmitSingleChar, SCC_VEHICLE_NAME, 1, -1, C_NONE | C_GENDER},
{"COMPANY", EmitSingleChar, SCC_COMPANY_NAME, 1, -1, C_NONE | C_GENDER},
{"COMPANY_NUM", EmitSingleChar, SCC_COMPANY_NUM, 1, -1, C_NONE},
{"PRESIDENT_NAME", EmitSingleChar, SCC_PRESIDENT_NAME, 1, -1, C_NONE | C_GENDER},
{"", EmitSingleChar, '\n', 0, -1, C_DONTCOUNT},
{"{", EmitSingleChar, '{', 0, -1, C_DONTCOUNT},
{"UP_ARROW", EmitSingleChar, SCC_UP_ARROW, 0, -1, C_DONTCOUNT},
{"SMALL_UP_ARROW", EmitSingleChar, SCC_SMALL_UP_ARROW, 0, -1, C_DONTCOUNT},
{"SMALL_DOWN_ARROW", EmitSingleChar, SCC_SMALL_DOWN_ARROW, 0, -1, C_DONTCOUNT},
{"TRAIN", EmitSingleChar, SCC_TRAIN, 0, -1, C_DONTCOUNT},
{"LORRY", EmitSingleChar, SCC_LORRY, 0, -1, C_DONTCOUNT},
{"BUS", EmitSingleChar, SCC_BUS, 0, -1, C_DONTCOUNT},
{"PLANE", EmitSingleChar, SCC_PLANE, 0, -1, C_DONTCOUNT},
{"SHIP", EmitSingleChar, SCC_SHIP, 0, -1, C_DONTCOUNT},
{"NBSP", EmitSingleChar, 0xA0, 0, -1, C_DONTCOUNT},
{"COPYRIGHT", EmitSingleChar, 0xA9, 0, -1, C_DONTCOUNT},
{"DOWN_ARROW", EmitSingleChar, SCC_DOWN_ARROW, 0, -1, C_DONTCOUNT},
{"CHECKMARK", EmitSingleChar, SCC_CHECKMARK, 0, -1, C_DONTCOUNT},
{"CROSS", EmitSingleChar, SCC_CROSS, 0, -1, C_DONTCOUNT},
{"RIGHT_ARROW", EmitSingleChar, SCC_RIGHT_ARROW, 0, -1, C_DONTCOUNT},
{"SMALL_LEFT_ARROW", EmitSingleChar, SCC_LESS_THAN, 0, -1, C_DONTCOUNT},
{"SMALL_RIGHT_ARROW", EmitSingleChar, SCC_GREATER_THAN, 0, -1, C_DONTCOUNT},
/* The following are directional formatting codes used to get the RTL strings right:
* http://www.unicode.org/unicode/reports/tr9/#Directional_Formatting_Codes */
{"LRM", EmitSingleChar, CHAR_TD_LRM, 0, -1, C_DONTCOUNT},
{"RLM", EmitSingleChar, CHAR_TD_RLM, 0, -1, C_DONTCOUNT},
{"LRE", EmitSingleChar, CHAR_TD_LRE, 0, -1, C_DONTCOUNT},
{"RLE", EmitSingleChar, CHAR_TD_RLE, 0, -1, C_DONTCOUNT},
{"LRO", EmitSingleChar, CHAR_TD_LRO, 0, -1, C_DONTCOUNT},
{"RLO", EmitSingleChar, CHAR_TD_RLO, 0, -1, C_DONTCOUNT},
{"PDF", EmitSingleChar, CHAR_TD_PDF, 0, -1, C_DONTCOUNT},
};
/** Description of a plural form */
struct PluralForm {
int plural_count; ///< The number of plural forms
const char *description; ///< Human readable description of the form
const char *names; ///< Plural names
};
/** The maximum number of plurals. */
static const int MAX_PLURALS = 5;
/** All plural forms used */
static const PluralForm _plural_forms[] = {
{ 2, "Two forms: special case for 1.", "\"1\" \"other\"" },
{ 1, "Only one form.", "\"other\"" },
{ 2, "Two forms: special case for 0 to 1.", "\"0..1\" \"other\"" },
{ 3, "Three forms: special cases for 0, and numbers ending in 1 except when ending in 11.", "\"1,21,31,...\" \"other\" \"0\"" },
{ 5, "Five forms: special cases for 1, 2, 3 to 6, and 7 to 10.", "\"1\" \"2\" \"3..6\" \"7..10\" \"other\"" },
{ 3, "Three forms: special cases for numbers ending in 1 except when ending in 11, and 2 to 9 except when ending in 12 to 19.", "\"1,21,31,...\" \"2..9,22..29,32..39,...\" \"other\"" },
{ 3, "Three forms: special cases for numbers ending in 1 except when ending in 11, and 2 to 4 except when ending in 12 to 14.", "\"1,21,31,...\" \"2..4,22..24,32..34,...\" \"other\"" },
{ 3, "Three forms: special cases for 1, and numbers ending in 2 to 4 except when ending in 12 to 14.", "\"1\" \"2..4,22..24,32..34,...\" \"other\"" },
{ 4, "Four forms: special cases for numbers ending in 01, 02, and 03 to 04.", "\"1,101,201,...\" \"2,102,202,...\" \"3..4,103..104,203..204,...\" \"other\"" },
{ 2, "Two forms: special case for numbers ending in 1 except when ending in 11.", "\"1,21,31,...\" \"other\"" },
{ 3, "Three forms: special cases for 1, and 2 to 4.", "\"1\" \"2..4\" \"other\"" },
{ 2, "Two forms: cases for numbers ending with a consonant, and with a vowel.", "\"yeong,il,sam,yuk,chil,pal\" \"i,sa,o,gu\"" },
{ 4, "Four forms: special cases for 1, 0 and numbers ending in 02 to 10, and numbers ending in 11 to 19.", "\"1\" \"0,2..10,102..110,202..210,...\" \"11..19,111..119,211..219,...\" \"other\"" },
{ 4, "Four forms: special cases for 1 and 11, 2 and 12, 3..10 and 13..19.", "\"1,11\" \"2,12\" \"3..10,13..19\" \"other\"" },
};
/* Flags:
* 0 = nothing
* t = translator editable
* l = ltr/rtl choice
* p = plural choice
* d = separator char (replace spaces with {NBSP})
* x1 = hexadecimal number of 1 byte
* x2 = hexadecimal number of 2 bytes
* g = gender
* c = cases
* a = array, i.e. list of strings
*/
/** All pragmas used */
static const char * const _pragmas[][4] = {
/* name flags default description */
{ "name", "0", "", "English name for the language" },
{ "ownname", "t", "", "Localised name for the language" },
{ "isocode", "0", "", "ISO code for the language" },
{ "plural", "tp", "0", "Plural form to use" },
{ "textdir", "tl", "ltr", "Text direction. Either ltr (left-to-right) or rtl (right-to-left)" },
{ "digitsep", "td", ",", "Digit grouping separator for non-currency numbers" },
{ "digitsepcur", "td", ",", "Digit grouping separator for currency numbers" },
{ "decimalsep", "td", ".", "Decimal separator" },
{ "winlangid", "x2", "0x0000", "Language ID for Windows" },
{ "grflangid", "x1", "0x00", "Language ID for NewGRFs" },
{ "gender", "tag", "", "List of genders" },
{ "case", "tac", "", "List of cases" },
};

View File

@@ -0,0 +1,31 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file string_colours.h The colour translation of GRF's strings. */
/** Colour mapping for #TextColour. */
static const byte _string_colourmap[17] = {
150, // TC_BLUE
12, // TC_SILVER
189, // TC_GOLD
184, // TC_RED
174, // TC_PURPLE
30, // TC_LIGHT_BROWN
195, // TC_ORANGE
209, // TC_GREEN
68, // TC_YELLOW
95, // TC_DARK_GREEN
79, // TC_CREAM
116, // TC_BROWN
15, // TC_WHITE
152, // TC_LIGHT_BLUE
6, // TC_GREY
133, // TC_DARK_BLUE
1, // TC_BLACK
};

2281
src/table/town_land.h Normal file

File diff suppressed because it is too large Load Diff

3317
src/table/townname.h Normal file

File diff suppressed because it is too large Load Diff

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

@@ -0,0 +1,54 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file track_land.h Sprites to use and how to display them for train depot tiles. */
#define TILE_SEQ_LINE(img, dx, dy, sx, sy) { dx, dy, 0, sx, sy, 23, {img, PAL_NONE} },
#define TILE_SEQ_END() { (int8)0x80, 0, 0, 0, 0, 0, {0, 0} }
static const DrawTileSeqStruct _depot_gfx_NE[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_NE | (1 << PALETTE_MODIFIER_COLOUR), 2, 13, 13, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _depot_gfx_SE[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SE_1 | (1 << PALETTE_MODIFIER_COLOUR), 2, 2, 1, 13)
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SE_2 | (1 << PALETTE_MODIFIER_COLOUR), 13, 2, 1, 13)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _depot_gfx_SW[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SW_1 | (1 << PALETTE_MODIFIER_COLOUR), 2, 2, 13, 1)
TILE_SEQ_LINE(SPR_RAIL_DEPOT_SW_2 | (1 << PALETTE_MODIFIER_COLOUR), 2, 13, 13, 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _depot_gfx_NW[] = {
TILE_SEQ_LINE(SPR_RAIL_DEPOT_NW | (1 << PALETTE_MODIFIER_COLOUR), 13, 2, 1, 13)
TILE_SEQ_END()
};
static const DrawTileSprites _depot_gfx_table[] = {
{ {SPR_FLAT_GRASS_TILE, PAL_NONE}, _depot_gfx_NE },
{ {SPR_RAIL_TRACK_Y, PAL_NONE}, _depot_gfx_SE },
{ {SPR_RAIL_TRACK_X, PAL_NONE}, _depot_gfx_SW },
{ {SPR_FLAT_GRASS_TILE, PAL_NONE}, _depot_gfx_NW }
};
static const DrawTileSprites _depot_invisible_gfx_table[] = {
{ {SPR_RAIL_TRACK_X, PAL_NONE}, _depot_gfx_NE },
{ {SPR_RAIL_TRACK_Y, PAL_NONE}, _depot_gfx_SE },
{ {SPR_RAIL_TRACK_X, PAL_NONE}, _depot_gfx_SW },
{ {SPR_RAIL_TRACK_Y, PAL_NONE}, _depot_gfx_NW }
};
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END

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

@@ -0,0 +1,70 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file train_cmd.h Sprites to use for trains. */
static const SpriteID _engine_sprite_base[] = {
0x0B59, 0x0B61, 0x0B69, 0x0BE1, 0x0B71, 0x0B75, 0x0B7D, 0x0B7D,
0x0B85, 0x0B85, 0x0B8D, 0x0B8D, 0x0BC9, 0x0BD1, 0x0BD9, 0x0BE9,
0x0BED, 0x0BED, 0x0BF5, 0x0BF9, 0x0B79, 0x0B9D, 0x0B9D, 0x0B95,
0x0B95, 0x0BA5, 0x0BA9, 0x0BA9, 0x0BC1, 0x0BC5, 0x0BB1, 0x0BB9,
0x0BB9, 0x0AAD, 0x0AB1, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC1, 0x0AC9,
0x0ACD, 0x0AD5, 0x0AD1, 0x0AD9, 0x0AC5, 0x0AD1, 0x0AD5, 0x0AF9,
0x0AFD, 0x0B05, 0x0AB9, 0x0AC1, 0x0AC9, 0x0AD1, 0x0AD9, 0x0AE1,
0x0AE5, 0x0AE9, 0x0AF1, 0x0AF9, 0x0B0D, 0x0B11, 0x0B15, 0x0B19,
0x0B1D, 0x0B21, 0x0B29, 0x0B2D, 0x0B35, 0x0B31, 0x0B39, 0x0B25,
0x0B31, 0x0B35,
};
/* For how many directions do we have sprites? (8 or 4; if 4, the other 4
* directions are symmetric. */
static const byte _engine_sprite_and[] = {
7, 7, 7, 7, 3, 3, 7, 7,
7, 7, 7, 7, 7, 7, 7, 3,
7, 7, 3, 7, 3, 7, 7, 7,
7, 3, 7, 7, 3, 3, 7, 7,
7, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3,
3, 3,
};
/* Non-zero for multihead trains. */
static const byte _engine_sprite_add[] = {
0, 0, 0, 0, 0, 0, 0, 4,
0, 4, 0, 4, 0, 0, 0, 0,
0, 4, 0, 0, 0, 0, 4, 0,
4, 0, 0, 4, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
};
static const byte _wagon_full_adder[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 44, 0, 0, 0, 0, 24,
24, 24, 24, 0, 0, 32, 32, 0,
4, 4, 4, 4, 4, 4, 4, 0,
0, 4, 4, 4, 0, 44, 0, 0,
0, 0, 24, 24, 24, 24, 0, 0,
32, 32
};
assert_compile(lengthof(_engine_sprite_base) == lengthof(_engine_sprite_and));
assert_compile(lengthof(_engine_sprite_base) == lengthof(_engine_sprite_add));
assert_compile(lengthof(_engine_sprite_base) == lengthof(_wagon_full_adder));

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

@@ -0,0 +1,230 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file tree_land.h Sprites to use and how to display them for tree tiles. */
#ifndef TREE_LAND_H
#define TREE_LAND_H
static const byte _tree_base_by_landscape[4] = {0, 12, 20, 32};
static const byte _tree_count_by_landscape[4] = {12, 8, 12, 9};
struct TreePos {
uint8 x;
uint8 y;
};
static const TreePos _tree_layout_xy[][4] = {
{ { 9, 3 }, { 1, 8 }, { 0, 0 }, { 8, 9 } },
{ { 4, 4 }, { 9, 1 }, { 6, 9 }, { 0, 9 } },
{ { 9, 1 }, { 0, 9 }, { 6, 6 }, { 3, 0 } },
{ { 3, 9 }, { 8, 2 }, { 9, 9 }, { 1, 5 } }
};
static const PalSpriteID _tree_layout_sprite[164 + (79 - 48 + 1)][4] = {
{ { 0x652, PAL_NONE }, { 0x659, PAL_NONE }, { 0x660, PAL_NONE }, { 0x667, PAL_NONE } }, // 0
{ { 0x652, PAL_NONE }, { 0x667, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x675, PAL_NONE } }, // 1
{ { 0x652, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x659, PAL_NONE }, { 0x675, PAL_NONE } }, // 2
{ { 0x652, PAL_NONE }, { 0x652, PAL_NONE }, { 0x660, PAL_NONE }, { 0x66e, PAL_NONE } }, // 3
{ { 0x660, PAL_NONE }, { 0x667, PAL_NONE }, { 0x659, PAL_NONE }, { 0x652, PAL_NONE } }, // 4
{ { 0x660, PAL_NONE }, { 0x675, PAL_NONE }, { 0x660, PAL_NONE }, { 0x660, PAL_NONE } }, // 5
{ { 0x660, PAL_NONE }, { 0x652, PAL_NONE }, { 0x652, PAL_NONE }, { 0x66e, PAL_NONE } }, // 6
{ { 0x660, PAL_NONE }, { 0x675, PAL_NONE }, { 0x667, PAL_NONE }, { 0x659, PAL_NONE } }, // 7
{ { 0x675, PAL_NONE }, { 0x660, PAL_NONE }, { 0x675, PAL_NONE }, { 0x675, PAL_NONE } }, // 8
{ { 0x675, PAL_NONE }, { 0x659, PAL_NONE }, { 0x652, PAL_NONE }, { 0x652, PAL_NONE } }, // 9
{ { 0x675, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x652, PAL_NONE }, { 0x652, PAL_NONE } }, // 10
{ { 0x675, PAL_NONE }, { 0x667, PAL_NONE }, { 0x659, PAL_NONE }, { 0x667, PAL_NONE } }, // 11
{ { 0x628, PAL_NONE }, { 0x652, PAL_NONE }, { 0x660, PAL_NONE }, { 0x62f, PAL_NONE } }, // 12
{ { 0x628, PAL_NONE }, { 0x636, PAL_NONE }, { 0x675, PAL_NONE }, { 0x644, PAL_NONE } }, // 13
{ { 0x628, PAL_NONE }, { 0x652, PAL_NONE }, { 0x63d, PAL_NONE }, { 0x66e, PAL_NONE } }, // 14
{ { 0x628, PAL_NONE }, { 0x667, PAL_NONE }, { 0x644, PAL_NONE }, { 0x652, PAL_NONE } }, // 15
{ { 0x644, PAL_NONE }, { 0x659, PAL_NONE }, { 0x660, PAL_NONE }, { 0x628, PAL_NONE } }, // 16
{ { 0x644, PAL_NONE }, { 0x64b, PAL_NONE }, { 0x659, PAL_NONE }, { 0x636, PAL_NONE } }, // 17
{ { 0x644, PAL_NONE }, { 0x675, PAL_NONE }, { 0x652, PAL_NONE }, { 0x63d, PAL_NONE } }, // 18
{ { 0x644, PAL_NONE }, { 0x63d, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x652, PAL_NONE } }, // 19
{ { 0x636, PAL_NONE }, { 0x636, PAL_NONE }, { 0x628, PAL_NONE }, { 0x636, PAL_NONE } }, // 20
{ { 0x636, PAL_NONE }, { 0x63d, PAL_NONE }, { 0x636, PAL_NONE }, { 0x636, PAL_NONE } }, // 21
{ { 0x636, PAL_NONE }, { 0x64b, PAL_NONE }, { 0x636, PAL_NONE }, { 0x636, PAL_NONE } }, // 22
{ { 0x636, PAL_NONE }, { 0x636, PAL_NONE }, { 0x636, PAL_NONE }, { 0x636, PAL_NONE } }, // 23
{ { 0x64b, PAL_NONE }, { 0x628, PAL_NONE }, { 0x62f, PAL_NONE }, { 0x636, PAL_NONE } }, // 24
{ { 0x64b, PAL_NONE }, { 0x63d, PAL_NONE }, { 0x644, PAL_NONE }, { 0x636, PAL_NONE } }, // 25
{ { 0x64b, PAL_NONE }, { 0x636, PAL_NONE }, { 0x63d, PAL_NONE }, { 0x628, PAL_NONE } }, // 26
{ { 0x64b, PAL_NONE }, { 0x64b, PAL_NONE }, { 0x636, PAL_NONE }, { 0x63d, PAL_NONE } }, // 27
{ { 0x62f, PAL_NONE }, { 0x644, PAL_NONE }, { 0x644, PAL_NONE }, { 0x636, PAL_NONE } }, // 28
{ { 0x62f, PAL_NONE }, { 0x62f, PAL_NONE }, { 0x636, PAL_NONE }, { 0x628, PAL_NONE } }, // 29
{ { 0x62f, PAL_NONE }, { 0x64b, PAL_NONE }, { 0x636, PAL_NONE }, { 0x636, PAL_NONE } }, // 30
{ { 0x62f, PAL_NONE }, { 0x636, PAL_NONE }, { 0x62f, PAL_NONE }, { 0x636, PAL_NONE } }, // 31
{ { 0x67c, PAL_NONE }, { 0x675, PAL_NONE }, { 0x683, PAL_NONE }, { 0x67c, PAL_NONE } }, // 32
{ { 0x67c, PAL_NONE }, { 0x69f, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x659, PAL_NONE } }, // 33
{ { 0x67c, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x6a6, PAL_NONE } }, // 34
{ { 0x67c, PAL_NONE }, { 0x691, PAL_NONE }, { 0x66e, PAL_NONE }, { 0x68a, PAL_NONE } }, // 35
{ { 0x68a, PAL_NONE }, { 0x68a, PAL_NONE }, { 0x698, PAL_NONE }, { 0x68a, PAL_NONE } }, // 36
{ { 0x68a, PAL_NONE }, { 0x698, PAL_NONE }, { 0x683, PAL_NONE }, { 0x68a, PAL_NONE } }, // 37
{ { 0x68a, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x691, PAL_NONE }, { 0x68a, PAL_NONE } }, // 38
{ { 0x68a, PAL_NONE }, { 0x683, PAL_NONE }, { 0x6a6, PAL_NONE }, { 0x69f, PAL_NONE } }, // 39
{ { 0x698, PAL_NONE }, { 0x68a, PAL_NONE }, { 0x698, PAL_NONE }, { 0x652, PAL_NONE } }, // 40
{ { 0x698, PAL_NONE }, { 0x698, PAL_NONE }, { 0x660, PAL_NONE }, { 0x667, PAL_NONE } }, // 41
{ { 0x698, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x6a6, PAL_NONE }, { 0x698, PAL_NONE } }, // 42
{ { 0x698, PAL_NONE }, { 0x698, PAL_NONE }, { 0x698, PAL_NONE }, { 0x691, PAL_NONE } }, // 43
{ { 0x6a6, PAL_NONE }, { 0x6a6, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x660, PAL_NONE } }, // 44
{ { 0x6a6, PAL_NONE }, { 0x69f, PAL_NONE }, { 0x6a6, PAL_NONE }, { 0x652, PAL_NONE } }, // 45
{ { 0x6a6, PAL_NONE }, { 0x67c, PAL_NONE }, { 0x6a6, PAL_NONE }, { 0x691, PAL_NONE } }, // 46
{ { 0x6a6, PAL_NONE }, { 0x691, PAL_NONE }, { 0x69f, PAL_NONE }, { 0x6a6, PAL_NONE } }, // 47
{ { 0x6ad, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 48
{ { 0x6ad, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6d0, PAL_NONE } }, // 49
{ { 0x6ad, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 50
{ { 0x6ad, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6c9, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 51
{ { 0x6d0, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 52
{ { 0x6d0, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6c9, PAL_NONE } }, // 53
{ { 0x6d0, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6c2, PAL_NONE } }, // 54
{ { 0x6d0, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 55
{ { 0x6d7, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6d7, PAL_NONE } }, // 56
{ { 0x6d7, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 57
{ { 0x6d7, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 58
{ { 0x6d7, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 59
{ { 0x6c2, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6c9, PAL_NONE }, { 0x6c2, PAL_NONE } }, // 60
{ { 0x6c2, PAL_NONE }, { 0x6c9, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 61
{ { 0x6c2, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 62
{ { 0x6c2, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6c9, PAL_NONE } }, // 63
{ { 0x6c9, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6b4, PAL_NONE }, { 0x6c2, PAL_NONE } }, // 64
{ { 0x6c9, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6d7, PAL_NONE } }, // 65
{ { 0x6c9, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6b4, PAL_NONE } }, // 66
{ { 0x6c9, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6de, PAL_NONE } }, // 67
{ { 0x6b4, PAL_NONE }, { 0x6b4, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6c9, PAL_NONE } }, // 68
{ { 0x6b4, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6ad, PAL_NONE } }, // 69
{ { 0x6b4, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6b4, PAL_NONE } }, // 70
{ { 0x6b4, PAL_NONE }, { 0x6ad, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6de, PAL_NONE } }, // 71
{ { 0x6bb, PAL_NONE }, { 0x6d0, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6c2, PAL_NONE } }, // 72
{ { 0x6bb, PAL_NONE }, { 0x6b4, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6d7, PAL_NONE } }, // 73
{ { 0x6bb, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6b4, PAL_NONE } }, // 74
{ { 0x6bb, PAL_NONE }, { 0x6c9, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6de, PAL_NONE } }, // 75
{ { 0x6de, PAL_NONE }, { 0x6d7, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6c2, PAL_NONE } }, // 76
{ { 0x6de, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6d0, PAL_NONE } }, // 77
{ { 0x6de, PAL_NONE }, { 0x6de, PAL_NONE }, { 0x6bb, PAL_NONE }, { 0x6b4, PAL_NONE } }, // 78
{ { 0x6de, PAL_NONE }, { 0x6c9, PAL_NONE }, { 0x6c2, PAL_NONE }, { 0x6de, PAL_NONE } }, // 79
{ { 0x72b, PAL_NONE }, { 0x732, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x739, PAL_NONE } }, // 80
{ { 0x72b, PAL_NONE }, { 0x747, PAL_NONE }, { 0x755, PAL_NONE }, { 0x72b, PAL_NONE } }, // 81
{ { 0x72b, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x76a, PAL_NONE }, { 0x786, PAL_NONE } }, // 82
{ { 0x72b, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x72b, PAL_NONE } }, // 83
{ { 0x732, PAL_NONE }, { 0x732, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x739, PAL_NONE } }, // 84
{ { 0x732, PAL_NONE }, { 0x747, PAL_NONE }, { 0x732, PAL_NONE }, { 0x732, PAL_NONE } }, // 85
{ { 0x732, PAL_NONE }, { 0x732, PAL_NONE }, { 0x755, PAL_NONE }, { 0x794, PAL_NONE } }, // 86
{ { 0x732, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x732, PAL_NONE }, { 0x78d, PAL_NONE } }, // 87
{ { 0x747, PAL_NONE }, { 0x732, PAL_NONE }, { 0x747, PAL_NONE }, { 0x740, PAL_NONE } }, // 88
{ { 0x747, PAL_NONE }, { 0x747, PAL_NONE }, { 0x732, PAL_NONE }, { 0x76a, PAL_NONE } }, // 89
{ { 0x747, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x755, PAL_NONE }, { 0x747, PAL_NONE } }, // 90
{ { 0x747, PAL_NONE }, { 0x786, PAL_NONE }, { 0x732, PAL_NONE }, { 0x747, PAL_NONE } }, // 91
{ { 0x74e, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x794, PAL_NONE } }, // 92
{ { 0x74e, PAL_NONE }, { 0x755, PAL_NONE }, { 0x732, PAL_NONE }, { 0x74e, PAL_NONE } }, // 93
{ { 0x74e, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x786, PAL_NONE }, { 0x747, PAL_NONE } }, // 94
{ { 0x74e, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x732, PAL_NONE }, { 0x794, PAL_NONE } }, // 95
{ { 0x76a, PAL_NONE }, { 0x76a, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x74e, PAL_NONE } }, // 96
{ { 0x76a, PAL_NONE }, { 0x794, PAL_NONE }, { 0x732, PAL_NONE }, { 0x76a, PAL_NONE } }, // 97
{ { 0x76a, PAL_NONE }, { 0x732, PAL_NONE }, { 0x786, PAL_NONE }, { 0x76a, PAL_NONE } }, // 98
{ { 0x76a, PAL_NONE }, { 0x786, PAL_NONE }, { 0x732, PAL_NONE }, { 0x78d, PAL_NONE } }, // 99
{ { 0x78d, PAL_NONE }, { 0x78d, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x794, PAL_NONE } }, // 100
{ { 0x78d, PAL_NONE }, { 0x732, PAL_NONE }, { 0x739, PAL_NONE }, { 0x747, PAL_NONE } }, // 101
{ { 0x78d, PAL_NONE }, { 0x732, PAL_NONE }, { 0x786, PAL_NONE }, { 0x76a, PAL_NONE } }, // 102
{ { 0x78d, PAL_NONE }, { 0x786, PAL_NONE }, { 0x78d, PAL_NONE }, { 0x794, PAL_NONE } }, // 103
{ { 0x786, PAL_NONE }, { 0x786, PAL_NONE }, { 0x740, PAL_NONE }, { 0x732, PAL_NONE } }, // 104
{ { 0x786, PAL_NONE }, { 0x786, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x732, PAL_NONE } }, // 105
{ { 0x786, PAL_NONE }, { 0x732, PAL_NONE }, { 0x786, PAL_NONE }, { 0x786, PAL_NONE } }, // 106
{ { 0x786, PAL_NONE }, { 0x786, PAL_NONE }, { 0x78d, PAL_NONE }, { 0x794, PAL_NONE } }, // 107
{ { 0x778, PAL_NONE }, { 0x778, PAL_NONE }, { 0x77f, PAL_NONE }, { 0x778, PAL_NONE } }, // 108
{ { 0x778, PAL_NONE }, { 0x77f, PAL_NONE }, { 0x778, PAL_NONE }, { 0x77f, PAL_NONE } }, // 109
{ { 0x778, PAL_NONE }, { 0x77f, PAL_NONE }, { 0x77f, PAL_NONE }, { 0x778, PAL_NONE } }, // 110
{ { 0x778, PAL_NONE }, { 0x778, PAL_NONE }, { 0x778, PAL_NONE }, { 0x77f, PAL_NONE } }, // 111
{ { 0x75c, PAL_NONE }, { 0x71d, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x724, PAL_NONE } }, // 112
{ { 0x75c, PAL_NONE }, { 0x72b, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x763, PAL_NONE } }, // 113
{ { 0x75c, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x771, PAL_NONE }, { 0x71d, PAL_NONE } }, // 114
{ { 0x75c, PAL_NONE }, { 0x771, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x75c, PAL_NONE } }, // 115
{ { 0x771, PAL_NONE }, { 0x771, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x71d, PAL_NONE } }, // 116
{ { 0x771, PAL_NONE }, { 0x747, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x771, PAL_NONE } }, // 117
{ { 0x771, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x771, PAL_NONE }, { 0x724, PAL_NONE } }, // 118
{ { 0x771, PAL_NONE }, { 0x771, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x763, PAL_NONE } }, // 119
{ { 0x71d, PAL_NONE }, { 0x71d, PAL_NONE }, { 0x771, PAL_NONE }, { 0x724, PAL_NONE } }, // 120
{ { 0x71d, PAL_NONE }, { 0x74e, PAL_NONE }, { 0x763, PAL_NONE }, { 0x71d, PAL_NONE } }, // 121
{ { 0x71d, PAL_NONE }, { 0x724, PAL_NONE }, { 0x794, PAL_NONE }, { 0x71d, PAL_NONE } }, // 122
{ { 0x71d, PAL_NONE }, { 0x71d, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x78d, PAL_NONE } }, // 123
{ { 0x794, PAL_NONE }, { 0x724, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x794, PAL_NONE } }, // 124
{ { 0x794, PAL_NONE }, { 0x794, PAL_NONE }, { 0x75c, PAL_NONE }, { 0x71d, PAL_NONE } }, // 125
{ { 0x794, PAL_NONE }, { 0x724, PAL_NONE }, { 0x794, PAL_NONE }, { 0x71d, PAL_NONE } }, // 126
{ { 0x794, PAL_NONE }, { 0x794, PAL_NONE }, { 0x771, PAL_NONE }, { 0x78d, PAL_NONE } }, // 127
{ { 0x79b, PALETTE_TO_RED }, { 0x79b, PALETTE_TO_PALE_GREEN }, { 0x79b, PALETTE_TO_MAUVE }, { 0x79b, PALETTE_TO_PURPLE } }, // 128
{ { 0x79b, PAL_NONE }, { 0x79b, PALETTE_TO_GREY }, { 0x79b, PALETTE_TO_GREEN }, { 0x79b, PALETTE_TO_WHITE } }, // 129
{ { 0x79b, PALETTE_TO_GREEN }, { 0x79b, PALETTE_TO_ORANGE }, { 0x79b, PALETTE_TO_PINK }, { 0x79b, PAL_NONE } }, // 130
{ { 0x79b, PALETTE_TO_YELLOW }, { 0x79b, PALETTE_TO_RED }, { 0x79b, PALETTE_TO_CREAM }, { 0x79b, PALETTE_TO_RED } }, // 131
{ { 0x7a2, PAL_NONE }, { 0x7a2, PALETTE_TO_RED }, { 0x7a2, PALETTE_TO_PINK }, { 0x7a2, PALETTE_TO_PURPLE } }, // 132
{ { 0x7a2, PALETTE_TO_MAUVE }, { 0x7a2, PALETTE_TO_GREEN }, { 0x7a2, PALETTE_TO_PINK }, { 0x7a2, PALETTE_TO_GREY } }, // 133
{ { 0x7a2, PALETTE_TO_RED }, { 0x7a2, PALETTE_TO_PALE_GREEN }, { 0x7a2, PALETTE_TO_YELLOW }, { 0x7a2, PALETTE_TO_WHITE } }, // 134
{ { 0x7a2, PALETTE_TO_ORANGE }, { 0x7a2, PALETTE_TO_MAUVE }, { 0x7a2, PALETTE_TO_CREAM }, { 0x7a2, PALETTE_TO_BROWN } }, // 135
{ { 0x7a9, PALETTE_TO_RED }, { 0x7a9, PAL_NONE }, { 0x7a9, PALETTE_TO_ORANGE }, { 0x7a9, PALETTE_TO_GREY } }, // 136
{ { 0x7a9, PALETTE_TO_ORANGE }, { 0x7a9, PALETTE_TO_GREEN }, { 0x7a9, PALETTE_TO_PALE_GREEN }, { 0x7a9, PALETTE_TO_MAUVE } }, // 137
{ { 0x7a9, PALETTE_TO_PINK }, { 0x7a9, PALETTE_TO_RED }, { 0x7a9, PALETTE_TO_GREEN }, { 0x7a9, PALETTE_TO_BROWN } }, // 138
{ { 0x7a9, PALETTE_TO_GREEN }, { 0x7a9, PAL_NONE }, { 0x7a9, PALETTE_TO_RED }, { 0x7a9, PALETTE_TO_CREAM } }, // 139
{ { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE } }, // 140
{ { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE } }, // 141
{ { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE } }, // 142
{ { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE }, { 0x7b0, PAL_NONE } }, // 143
{ { 0x7b7, PALETTE_TO_PINK }, { 0x7b7, PALETTE_TO_RED }, { 0x7b7, PALETTE_TO_ORANGE }, { 0x7b7, PALETTE_TO_MAUVE } }, // 144
{ { 0x7b7, PALETTE_TO_RED }, { 0x7b7, PAL_NONE }, { 0x7b7, PALETTE_TO_GREY }, { 0x7b7, PALETTE_TO_CREAM } }, // 145
{ { 0x7b7, PALETTE_TO_GREEN }, { 0x7b7, PALETTE_TO_BROWN }, { 0x7b7, PALETTE_TO_PINK }, { 0x7b7, PALETTE_TO_RED } }, // 146
{ { 0x7b7, PAL_NONE }, { 0x7b7, PALETTE_TO_PALE_GREEN }, { 0x7b7, PALETTE_TO_ORANGE }, { 0x7b7, PALETTE_TO_RED } }, // 147
{ { 0x7be, PALETTE_TO_RED }, { 0x7be, PALETTE_TO_PINK }, { 0x7be, PALETTE_TO_GREEN }, { 0x7be, PAL_NONE } }, // 148
{ { 0x7be, PALETTE_TO_GREEN }, { 0x7be, PALETTE_TO_BROWN }, { 0x7be, PALETTE_TO_PURPLE }, { 0x7be, PALETTE_TO_GREY } }, // 149
{ { 0x7be, PALETTE_TO_MAUVE }, { 0x7be, PALETTE_TO_CREAM }, { 0x7be, PALETTE_TO_ORANGE }, { 0x7be, PALETTE_TO_RED } }, // 150
{ { 0x7be, PAL_NONE }, { 0x7be, PALETTE_TO_RED }, { 0x7be, PALETTE_TO_PALE_GREEN }, { 0x7be, PALETTE_TO_PINK } }, // 151
{ { 0x7c5, PALETTE_TO_YELLOW }, { 0x7c5, PALETTE_TO_RED }, { 0x7c5, PALETTE_TO_WHITE }, { 0x7c5, PALETTE_TO_CREAM } }, // 152
{ { 0x7c5, PALETTE_TO_RED }, { 0x7c5, PALETTE_TO_PALE_GREEN }, { 0x7c5, PALETTE_TO_BROWN }, { 0x7c5, PALETTE_TO_YELLOW } }, // 153
{ { 0x7c5, PAL_NONE }, { 0x7c5, PALETTE_TO_PURPLE }, { 0x7c5, PALETTE_TO_GREEN }, { 0x7c5, PALETTE_TO_YELLOW } }, // 154
{ { 0x7c5, PALETTE_TO_PINK }, { 0x7c5, PALETTE_TO_CREAM }, { 0x7c5, PAL_NONE }, { 0x7c5, PALETTE_TO_GREY } }, // 155
{ { 0x7cc, PALETTE_TO_YELLOW }, { 0x7cc, PALETTE_TO_GREY }, { 0x7cc, PALETTE_TO_PURPLE }, { 0x7cc, PALETTE_TO_BROWN } }, // 156
{ { 0x7cc, PALETTE_TO_GREEN }, { 0x7cc, PAL_NONE }, { 0x7cc, PALETTE_TO_CREAM }, { 0x7cc, PALETTE_TO_WHITE } }, // 157
{ { 0x7cc, PALETTE_TO_RED }, { 0x7cc, PALETTE_TO_PALE_GREEN }, { 0x7cc, PALETTE_TO_MAUVE }, { 0x7cc, PALETTE_TO_RED } }, // 158
{ { 0x7cc, PALETTE_TO_PINK }, { 0x7cc, PALETTE_TO_ORANGE }, { 0x7cc, PALETTE_TO_GREEN }, { 0x7cc, PALETTE_TO_YELLOW } }, // 159
{ { 0x7d3, PALETTE_TO_RED }, { 0x7d3, PALETTE_TO_PINK }, { 0x7d3, PALETTE_TO_BROWN }, { 0x7d3, PALETTE_TO_WHITE } }, // 160
{ { 0x7d3, PALETTE_TO_GREEN }, { 0x7d3, PALETTE_TO_ORANGE }, { 0x7d3, PALETTE_TO_GREY }, { 0x7d3, PALETTE_TO_MAUVE } }, // 161
{ { 0x7d3, PALETTE_TO_YELLOW }, { 0x7d3, PALETTE_TO_PALE_GREEN }, { 0x7d3, PAL_NONE }, { 0x7d3, PALETTE_TO_CREAM } }, // 162
{ { 0x7d3, PALETTE_TO_GREY }, { 0x7d3, PALETTE_TO_RED }, { 0x7d3, PALETTE_TO_WHITE }, { 0x7d3, PAL_NONE } }, // 163
/* the extra things follow */
{ { 0x6e5, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 0
{ { 0x6e5, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x708, PAL_NONE } }, // 1
{ { 0x6e5, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 2
{ { 0x6e5, PAL_NONE }, { 0x708, PAL_NONE }, { 0x701, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 3
{ { 0x708, PAL_NONE }, { 0x708, PAL_NONE }, { 0x708, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 4
{ { 0x708, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x701, PAL_NONE } }, // 5
{ { 0x708, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x708, PAL_NONE }, { 0x6fa, PAL_NONE } }, // 6
{ { 0x708, PAL_NONE }, { 0x708, PAL_NONE }, { 0x708, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 7
{ { 0x70f, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x70f, PAL_NONE } }, // 8
{ { 0x70f, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 9
{ { 0x70f, PAL_NONE }, { 0x708, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 10
{ { 0x70f, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x708, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 11
{ { 0x6fa, PAL_NONE }, { 0x708, PAL_NONE }, { 0x701, PAL_NONE }, { 0x6fa, PAL_NONE } }, // 12
{ { 0x6fa, PAL_NONE }, { 0x701, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 13
{ { 0x6fa, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 14
{ { 0x6fa, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x701, PAL_NONE } }, // 15
{ { 0x701, PAL_NONE }, { 0x708, PAL_NONE }, { 0x6ec, PAL_NONE }, { 0x6fa, PAL_NONE } }, // 16
{ { 0x701, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x716, PAL_NONE }, { 0x70f, PAL_NONE } }, // 17
{ { 0x701, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6ec, PAL_NONE } }, // 18
{ { 0x701, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x716, PAL_NONE } }, // 19
{ { 0x6ec, PAL_NONE }, { 0x6ec, PAL_NONE }, { 0x716, PAL_NONE }, { 0x701, PAL_NONE } }, // 20
{ { 0x6ec, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6e5, PAL_NONE } }, // 21
{ { 0x6ec, PAL_NONE }, { 0x716, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6ec, PAL_NONE } }, // 22
{ { 0x6ec, PAL_NONE }, { 0x6e5, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x716, PAL_NONE } }, // 23
{ { 0x6f3, PAL_NONE }, { 0x708, PAL_NONE }, { 0x716, PAL_NONE }, { 0x6fa, PAL_NONE } }, // 24
{ { 0x6f3, PAL_NONE }, { 0x6ec, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x70f, PAL_NONE } }, // 25
{ { 0x6f3, PAL_NONE }, { 0x716, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6ec, PAL_NONE } }, // 26
{ { 0x6f3, PAL_NONE }, { 0x701, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x716, PAL_NONE } }, // 27
{ { 0x716, PAL_NONE }, { 0x70f, PAL_NONE }, { 0x716, PAL_NONE }, { 0x6fa, PAL_NONE } }, // 28
{ { 0x716, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x716, PAL_NONE }, { 0x708, PAL_NONE } }, // 29
{ { 0x716, PAL_NONE }, { 0x716, PAL_NONE }, { 0x6f3, PAL_NONE }, { 0x6ec, PAL_NONE } }, // 30
{ { 0x716, PAL_NONE }, { 0x701, PAL_NONE }, { 0x6fa, PAL_NONE }, { 0x716, PAL_NONE } }, // 31
};
#endif /* TREE_LAND_H */

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

@@ -0,0 +1,40 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file unicode.h Character mapping for using Unicode characters in OTTD. */
struct DefaultUnicodeMapping {
WChar code; ///< Unicode value
byte key; ///< Character index of sprite
};
static const byte CLRA = 0; ///< Identifier to clear all glyphs at this codepoint
/* Default unicode mapping table for sprite based glyphs.
* This table allows us use unicode characters even though the glyphs don't
* exist, or are in the wrong place, in the standard sprite fonts.
* This is not used for FreeType rendering */
static const DefaultUnicodeMapping _default_unicode_map[] = {
{ 0x00A0, 0x20 }, // Non-breaking space / Up arrow
{ 0x00AA, CLRA }, // Feminine ordinal indicator / Down arrow
{ 0x00AC, CLRA }, // Not sign / Tick mark
{ 0x00AD, 0x20 }, // Soft hyphen / X mark
{ 0x00AF, CLRA }, // Macron / Right arrow
{ 0x00B4, CLRA }, // Acute accent / Train symbol
{ 0x00B5, CLRA }, // Micro sign / Truck symbol
{ 0x00B6, CLRA }, // Pilcrow sign / Bus symbol
{ 0x00B7, CLRA }, // Middle dot / Aircraft symbol
{ 0x00B8, CLRA }, // Cedilla / Ship symbol
{ 0x00B9, CLRA }, // Superscript 1 / Superscript -1
{ 0x00BC, CLRA }, // One quarter / Small up arrow
{ 0x00BD, CLRA }, // One half / Small down arrow
{ 0x0178, 0x9F }, // Capital letter Y with diaeresis
{ 0x010D, 0x63 }, // Small letter c with caron
};

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

@@ -0,0 +1,164 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file water_land.h Sprites to use and how to display them for water tiles (depots/locks). */
/**
* Constructor macro for an image without a palette in a DrawTileSeqStruct array.
* @param dx Offset in x direction
* @param dy Offset in y direction
* @param dz Offset in z direction
* @param sx Size in x direction
* @param sy Size in y direction
* @param sz Size in z direction
* @param img Sprite to draw
*/
#define TILE_SEQ_LINE(dx, dy, dz, sx, sy, sz, img) { dx, dy, dz, sx, sy, sz, {img, PAL_NONE} },
/** Constructor macro for a terminating DrawTileSeqStruct entry in an array */
#define TILE_SEQ_END() { (int8)0x80, 0, 0, 0, 0, 0, {0, 0} }
/**
* Constructor macro of a DrawTileSprites structure
* @param img Ground sprite without palette of the tile
* @param dtss Sequence child sprites of the tile
*/
#define TILE_SPRITE_LINE(img, dtss) { {img, PAL_NONE}, dtss },
static const DrawTileSeqStruct _shipdepot_display_seq_1[] = {
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 0x14, 0xFE8 | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _shipdepot_display_seq_2[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 0x14, 0xFEA)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 0x14, 0xFE6 | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _shipdepot_display_seq_3[] = {
TILE_SEQ_LINE( 15, 0, 0, 1, 0x10, 0x14, 0xFE9 | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _shipdepot_display_seq_4[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 0x14, 0xFEB)
TILE_SEQ_LINE( 15, 0, 0, 1, 16, 0x14, 0xFE7 | (1 << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSprites _shipdepot_display_data[][DEPOT_PART_END] = {
{ // AXIS_X
TILE_SPRITE_LINE(0xFDD, _shipdepot_display_seq_1) // DEPOT_PART_NORTH
TILE_SPRITE_LINE(0xFDD, _shipdepot_display_seq_2) // DEPOT_PART_SOUTH
},
{ // AXIS_Y
TILE_SPRITE_LINE(0xFDD, _shipdepot_display_seq_3) // DEPOT_PART_NORTH
TILE_SPRITE_LINE(0xFDD, _shipdepot_display_seq_4) // DEPOT_PART_SOUTH
},
};
static const DrawTileSeqStruct _lock_display_seq_0[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x10, 1, 0x14, 0 + 1)
TILE_SEQ_LINE( 0, 0xF, 0, 0x10, 1, 0x14, 4 + 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_1[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 0x10, 0x14, 0)
TILE_SEQ_LINE( 0xF, 0, 0, 1, 0x10, 0x14, 4)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_2[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x10, 1, 0x14, 0 + 2)
TILE_SEQ_LINE( 0, 0xF, 0, 0x10, 1, 0x14, 4 + 2)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_3[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 0x10, 0x14, 0 + 3)
TILE_SEQ_LINE( 0xF, 0, 0, 1, 0x10, 0x14, 4 + 3)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_0b[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x10, 1, 0x14, 8 + 1)
TILE_SEQ_LINE( 0, 0xF, 0, 0x10, 1, 0x14, 12 + 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_1b[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x1, 0x10, 0x14, 8)
TILE_SEQ_LINE( 0xF, 0, 0, 0x1, 0x10, 0x14, 12)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_2b[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x10, 1, 0x14, 8 + 2)
TILE_SEQ_LINE( 0, 0xF, 0, 0x10, 1, 0x14, 12 + 2)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_3b[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 0x10, 0x14, 8 + 3)
TILE_SEQ_LINE( 0xF, 0, 0, 1, 0x10, 0x14, 12 + 3)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_0t[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x10, 1, 0x14, 16 + 1)
TILE_SEQ_LINE( 0, 0xF, 0, 0x10, 1, 0x14, 20 + 1)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_1t[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x1, 0x10, 0x14, 16)
TILE_SEQ_LINE( 0xF, 0, 0, 0x1, 0x10, 0x14, 20)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_2t[] = {
TILE_SEQ_LINE( 0, 0, 0, 0x10, 1, 0x14, 16 + 2)
TILE_SEQ_LINE( 0, 0xF, 0, 0x10, 1, 0x14, 20 + 2)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _lock_display_seq_3t[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 0x10, 0x14, 16 + 3)
TILE_SEQ_LINE( 0xF, 0, 0, 1, 0x10, 0x14, 20 + 3)
TILE_SEQ_END()
};
static const DrawTileSprites _lock_display_data[][DIAGDIR_END] = {
{ // LOCK_PART_MIDDLE
TILE_SPRITE_LINE(1, _lock_display_seq_0) // NE
TILE_SPRITE_LINE(0, _lock_display_seq_1) // SE
TILE_SPRITE_LINE(2, _lock_display_seq_2) // SW
TILE_SPRITE_LINE(3, _lock_display_seq_3) // NW
},
{ // LOCK_PART_LOWER
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_0b) // NE
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_1b) // SE
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_2b) // SW
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_3b) // NW
},
{ // LOCK_PART_UPPER
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_0t) // NE
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_1t) // SE
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_2t) // SW
TILE_SPRITE_LINE(0xFDD, _lock_display_seq_3t) // NW
},
};
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END
#undef TILE_SPRITE_LINE

View File

@@ -0,0 +1,61 @@
; $Id$
;
; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;
[pre-amble]
/* win32_v.cpp only settings */
#if defined(_WIN32) && !defined(DEDICATED)
extern bool _force_full_redraw, _window_maximize;
extern uint _display_hz;
static const SettingDescGlobVarList _win32_settings[] = {
[post-amble]
};
#endif /* _WIN32 */
[templates]
SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDTG_END = SDTG_END()
[defaults]
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
guiflags = 0
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
[SDTG_VAR]
name = ""display_hz""
type = SLE_UINT
var = _display_hz
def = 0
min = 0
max = 120
cat = SC_EXPERT
[SDTG_BOOL]
name = ""force_full_redraw""
var = _force_full_redraw
def = false
cat = SC_EXPERT
[SDTG_BOOL]
name = ""window_maximize""
var = _window_maximize
def = false
cat = SC_BASIC
[SDTG_END]

View File

@@ -0,0 +1,55 @@
; $Id$
;
; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;
[pre-amble]
static const SettingDesc _window_settings[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL($base, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_VAR = SDT_VAR($base, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat),
SDT_END = SDT_END()
[defaults]
base = WindowDesc
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
guiflags = 0
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval = STR_NULL
proc = NULL
load = NULL
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
[SDT_BOOL]
var = pref_sticky
def = false
[SDT_VAR]
var = pref_width
type = SLE_INT16
def = 0
min = 0
max = 32000
[SDT_VAR]
var = pref_height
type = SLE_INT16
def = 0
min = 0
max = 32000
[SDT_END]
};