Merge remote-tracking branch 'upstream/master'

This commit is contained in:
dP
2025-06-14 17:01:17 +05:00
1132 changed files with 59430 additions and 52889 deletions

View File

@@ -10,7 +10,7 @@
#ifndef AIRPORT_DEFAULTS_H
#define AIRPORT_DEFAULTS_H
#include "timer/timer_game_calendar.h"
#include "../timer/timer_game_calendar.h"
/**
* Definition of an airport tiles layout.
@@ -378,7 +378,7 @@ static const std::initializer_list<AirportTileLayout> _tile_table_helistation =
/** General AirportSpec definition. */
#define AS_GENERIC(fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled) \
{{class_id, 0}, fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, name, ttdpatch_type, preview, maint_cost, enabled, GRFFileProps(AT_INVALID)}
{{class_id, 0}, fsm, layouts, depots, size_x, size_y, noise, catchment, TimerGameCalendar::Year{min_year}, TimerGameCalendar::Year{max_year}, name, ttdpatch_type, 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) \

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@
#ifndef AIRPORTTILE_IDS_H
#define AIRPORTTILE_IDS_H
enum AirportTiles {
enum AirportTiles : uint8_t {
APT_APRON,
APT_APRON_FENCE_NW,
APT_APRON_FENCE_SW,

View File

@@ -11,9 +11,9 @@
#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)}
#define AT(num_frames, anim_speed) {{num_frames, ANIM_STATUS_LOOPING, anim_speed, 0}, STR_NULL, AirportTileCallbackMasks{}, 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)}
#define AT_NOANIM {{0, ANIM_STATUS_NO_ANIMATION, 2, 0}, STR_NULL, AirportTileCallbackMasks{}, 0, true, GRFFileProps(INVALID_AIRPORTTILE), {}}
/**
* All default airport tiles.

View File

@@ -579,7 +579,7 @@ static const PalSpriteID _bridge_sprite_table_12_2[] = {
{ 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[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_archgirder[] = {
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
_bridge_sprite_table_archgirder_middle,
@@ -589,7 +589,7 @@ static const PalSpriteID * const _bridge_sprite_table_archgirder[] = {
_bridge_sprite_table_archgirder_heads,
};
static const PalSpriteID * const _bridge_sprite_table_4[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_4[] = {
_bridge_sprite_table_4_0,
_bridge_sprite_table_4_1,
_bridge_sprite_table_4_2,
@@ -599,7 +599,7 @@ static const PalSpriteID * const _bridge_sprite_table_4[] = {
_bridge_sprite_table_4_6,
};
static const PalSpriteID * const _bridge_sprite_table_5[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_5[] = {
_bridge_sprite_table_5_0,
_bridge_sprite_table_5_1,
_bridge_sprite_table_5_2,
@@ -609,7 +609,7 @@ static const PalSpriteID * const _bridge_sprite_table_5[] = {
_bridge_sprite_table_5_6,
};
static const PalSpriteID * const _bridge_sprite_table_concrete_suspended[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_concrete_suspended[] = {
_bridge_sprite_table_concrete_suspended_A,
_bridge_sprite_table_concrete_suspended_B,
_bridge_sprite_table_concrete_suspended_C,
@@ -619,7 +619,7 @@ static const PalSpriteID * const _bridge_sprite_table_concrete_suspended[] = {
_bridge_sprite_table_concrete_suspended_heads,
};
static const PalSpriteID * const _bridge_sprite_table_6[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_6[] = {
_bridge_sprite_table_6_0,
_bridge_sprite_table_6_1,
_bridge_sprite_table_6_2,
@@ -629,7 +629,7 @@ static const PalSpriteID * const _bridge_sprite_table_6[] = {
_bridge_sprite_table_6_3,
};
static const PalSpriteID * const _bridge_sprite_table_7[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_7[] = {
_bridge_sprite_table_7_0,
_bridge_sprite_table_7_1,
_bridge_sprite_table_7_2,
@@ -639,7 +639,7 @@ static const PalSpriteID * const _bridge_sprite_table_7[] = {
_bridge_sprite_table_7_3,
};
static const PalSpriteID * const _bridge_sprite_table_8[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_8[] = {
_bridge_sprite_table_8_0,
_bridge_sprite_table_8_1,
_bridge_sprite_table_8_2,
@@ -649,7 +649,7 @@ static const PalSpriteID * const _bridge_sprite_table_8[] = {
_bridge_sprite_table_8_3,
};
static const PalSpriteID * const _bridge_sprite_table_wood[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_wood[] = {
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
_bridge_sprite_table_wood_middle,
@@ -659,7 +659,7 @@ static const PalSpriteID * const _bridge_sprite_table_wood[] = {
_bridge_sprite_table_wood_heads,
};
static const PalSpriteID * const _bridge_sprite_table_concrete[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_concrete[] = {
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
_bridge_sprite_table_concrete_middle,
@@ -669,7 +669,7 @@ static const PalSpriteID * const _bridge_sprite_table_concrete[] = {
_bridge_sprite_table_concrete_heads,
};
static const PalSpriteID * const _bridge_sprite_table_9[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_9[] = {
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
_bridge_sprite_table_9_0,
@@ -679,7 +679,7 @@ static const PalSpriteID * const _bridge_sprite_table_9[] = {
_bridge_sprite_table_4_6,
};
static const PalSpriteID * const _bridge_sprite_table_10[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_10[] = {
_bridge_sprite_table_10_0,
_bridge_sprite_table_10_1,
_bridge_sprite_table_10_2,
@@ -689,7 +689,7 @@ static const PalSpriteID * const _bridge_sprite_table_10[] = {
_bridge_sprite_table_4_6,
};
static const PalSpriteID * const _bridge_sprite_table_11[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_11[] = {
_bridge_sprite_table_11_0,
_bridge_sprite_table_11_1,
_bridge_sprite_table_11_2,
@@ -699,7 +699,7 @@ static const PalSpriteID * const _bridge_sprite_table_11[] = {
_bridge_sprite_table_5_6,
};
static const PalSpriteID * const _bridge_sprite_table_12[] = {
static const std::span<const PalSpriteID> _bridge_sprite_table_12[] = {
_bridge_sprite_table_12_0,
_bridge_sprite_table_12_1,
_bridge_sprite_table_12_2,
@@ -709,7 +709,7 @@ static const PalSpriteID * const _bridge_sprite_table_12[] = {
_bridge_sprite_table_concrete_suspended_heads,
};
static const PalSpriteID * const * const _bridge_sprite_table[MAX_BRIDGES] = {
static const std::span<const std::span<const PalSpriteID>> _bridge_sprite_table[MAX_BRIDGES] = {
_bridge_sprite_table_wood,
_bridge_sprite_table_concrete,
_bridge_sprite_table_archgirder,
@@ -739,7 +739,7 @@ static const PalSpriteID * const * const _bridge_sprite_table[MAX_BRIDGES] = {
* @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 }, nullptr, 0}
{TimerGameCalendar::Year{y}, mnl, mxl, p, mxs, spr, plt, dsc, { nrl, nrd }, {}, 0}
const BridgeSpec _orig_bridge[] = {
/*

View File

@@ -1043,7 +1043,7 @@ static const std::initializer_list<uint8_t> _farm_sounds = { SND_24_FARM_1, SND_
/** Array with... hem... a sound of toyland */
static const std::initializer_list<uint8_t> _plastic_mine_sounds = { SND_33_PLASTIC_MINE };
enum IndustryTypes {
enum IndustryTypes : uint8_t {
IT_COAL_MINE = 0,
IT_POWER_STATION = 1,
IT_SAWMILL = 2,
@@ -1133,7 +1133,7 @@ enum IndustryTypes {
{INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO}, \
{{im1, 0}, {im2, 0}, {im3, 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}}, \
pr, clim, bev, col, in, intx, s1, s2, s3, STR_UNDEFINED, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, \
0, true, GRFFileProps(INVALID_INDUSTRYTYPE), snd, \
IndustryCallbackMasks{}, true, GRFFileProps(IT_INVALID), snd, {}, \
{{p1, p2}}, {{a1, a2, a3}}}
/* Format:
tile table count and sounds table
@@ -1151,8 +1151,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_POWER_STATION, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_COAL, 15, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TEMPERATE | 1 << LT_ARCTIC,
INDUSTRYBEH_CAN_SUBSIDENCE,
IndustryLifeType::Extractive, LandscapeTypes({LandscapeType::Temperate, LandscapeType::Arctic}),
IndustryBehaviour::CanSubsidence,
STR_INDUSTRY_NAME_COAL_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1161,8 +1161,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_COAL_MINE, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_INVALID, 0, CT_INVALID, 0, 5,
CT_COAL, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_BLACK_HOLE, 1 << LT_TEMPERATE | 1 << LT_ARCTIC,
INDUSTRYBEH_NONE,
INDUSTRYLIFE_BLACK_HOLE, LandscapeTypes({LandscapeType::Temperate, LandscapeType::Arctic}),
{},
STR_INDUSTRY_NAME_POWER_STATION, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1171,8 +1171,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FOREST, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_GOODS, 0, CT_INVALID, 0, 5,
CT_WOOD, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TEMPERATE,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Temperate,
{},
STR_INDUSTRY_NAME_SAWMILL, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1181,8 +1181,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_SAWMILL, IT_PAPER_MILL, IT_INVALID, CHECK_FOREST,
CT_WOOD, 13, CT_INVALID, 0, 30,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TEMPERATE | 1 << LT_ARCTIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Organic, LandscapeTypes({LandscapeType::Temperate, LandscapeType::Arctic}),
{},
STR_INDUSTRY_NAME_FOREST, STR_NEWS_INDUSTRY_PLANTED,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM),
@@ -1191,8 +1191,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_OIL_RIG, IT_INVALID, IT_INVALID, CHECK_REFINERY,
CT_GOODS, 0, CT_INVALID, 0, 5,
CT_OIL, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC,
INDUSTRYBEH_AIRPLANE_ATTACKS,
IndustryLifeType::Processing, LandscapeTypes({LandscapeType::Temperate, LandscapeType::Arctic, LandscapeType::Tropic}),
IndustryBehaviour::AirplaneAttacks,
STR_INDUSTRY_NAME_OIL_REFINERY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1201,8 +1201,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_OIL_RIG,
CT_OIL, 15, CT_PASSENGERS, 2, 5,
CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TEMPERATE,
INDUSTRYBEH_BUILT_ONWATER | INDUSTRYBEH_AFTER_1960 | INDUSTRYBEH_AI_AIRSHIP_ROUTES,
IndustryLifeType::Extractive, LandscapeType::Temperate,
IndustryBehaviours({IndustryBehaviour::BuiltOnWater, IndustryBehaviour::After1960, IndustryBehaviour::AIAirShipRoutes}),
STR_INDUSTRY_NAME_OIL_RIG, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1211,8 +1211,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FARM, IT_STEEL_MILL, IT_INVALID, CHECK_NOTHING,
CT_GOODS, 0, CT_INVALID, 0, 5,
MCT_LIVESTOCK_FRUIT, 256, MCT_GRAIN_WHEAT_MAIZE, 256, CT_STEEL, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TEMPERATE,
INDUSTRYBEH_CHOPPER_ATTACKS,
IndustryLifeType::Processing, LandscapeType::Temperate,
IndustryBehaviour::ChopperAttacks,
STR_INDUSTRY_NAME_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1221,8 +1221,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_PAPER_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_GOODS, 0, CT_INVALID, 0, 5,
CT_PAPER, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_ARCTIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Arctic,
{},
STR_INDUSTRY_NAME_PRINTING_WORKS, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1231,8 +1231,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_IRON_MINE, IT_FACTORY, IT_INVALID, CHECK_NOTHING,
CT_STEEL, 0, CT_INVALID, 0, 5,
CT_IRON_ORE, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TEMPERATE,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Temperate,
{},
STR_INDUSTRY_NAME_STEEL_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1241,8 +1241,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FACTORY, IT_FOOD_PROCESS, IT_INVALID, CHECK_FARM,
MCT_GRAIN_WHEAT_MAIZE, 10, MCT_LIVESTOCK_FRUIT, 10, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TEMPERATE | 1 << LT_ARCTIC,
INDUSTRYBEH_PLANT_FIELDS | INDUSTRYBEH_PLANT_ON_BUILT,
IndustryLifeType::Organic, LandscapeTypes({LandscapeType::Temperate, LandscapeType::Arctic}),
IndustryBehaviours({IndustryBehaviour::PlantFields, IndustryBehaviour::PlantOnBuild}),
STR_INDUSTRY_NAME_FARM, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM),
@@ -1251,8 +1251,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_COPPER_ORE, 10, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Tropic,
{},
STR_INDUSTRY_NAME_COPPER_ORE_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1261,8 +1261,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_OIL, 12, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC,
INDUSTRYBEH_DONT_INCR_PROD | INDUSTRYBEH_BEFORE_1950,
IndustryLifeType::Extractive, LandscapeTypes({LandscapeType::Temperate, LandscapeType::Arctic, LandscapeType::Tropic}),
IndustryBehaviours({IndustryBehaviour::DontIncrProd, IndustryBehaviour::Before1950}),
STR_INDUSTRY_NAME_OIL_WELLS, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1271,8 +1271,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_BANK_TEMP, IT_INVALID, IT_INVALID, CHECK_NOTHING,
MCT_VALUABLES_GOLD_DIAMONDS, 6, CT_INVALID, 0, 5,
MCT_VALUABLES_GOLD_DIAMONDS, 0, CT_INVALID, 0, CT_INVALID, 0,
INDUSTRYLIFE_BLACK_HOLE, 1 << LT_TEMPERATE,
INDUSTRYBEH_TOWN1200_MORE,
INDUSTRYLIFE_BLACK_HOLE, LandscapeType::Temperate,
IndustryBehaviour::Town1200More,
STR_INDUSTRY_NAME_BANK, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1281,8 +1281,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FRUIT_PLANTATION, IT_FARM, IT_FARM_2, CHECK_NOTHING,
CT_FOOD, 0, CT_INVALID, 0, 5,
MCT_LIVESTOCK_FRUIT, 256, MCT_GRAIN_WHEAT_MAIZE, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_ARCTIC | 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeTypes({LandscapeType::Arctic, LandscapeType::Tropic}),
{},
STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1291,8 +1291,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FOREST, IT_PRINTING_WORKS, IT_INVALID, CHECK_NOTHING,
CT_PAPER, 0, CT_INVALID, 0, 5,
CT_WOOD, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_ARCTIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Arctic,
{},
STR_INDUSTRY_NAME_PAPER_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1301,8 +1301,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING,
MCT_VALUABLES_GOLD_DIAMONDS, 7, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_ARCTIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Arctic,
{},
STR_INDUSTRY_NAME_GOLD_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1311,8 +1311,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_GOLD_MINE, IT_DIAMOND_MINE, IT_INVALID, CHECK_NOTHING,
CT_INVALID, 0, CT_INVALID, 0, 5,
MCT_VALUABLES_GOLD_DIAMONDS, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_BLACK_HOLE, 1 << LT_ARCTIC | 1 << LT_TROPIC,
INDUSTRYBEH_ONLY_INTOWN,
INDUSTRYLIFE_BLACK_HOLE, LandscapeTypes({LandscapeType::Arctic, LandscapeType::Tropic}),
IndustryBehaviour::OnlyInTown,
STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1321,8 +1321,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING,
MCT_VALUABLES_GOLD_DIAMONDS, 7, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Tropic,
{},
STR_INDUSTRY_NAME_DIAMOND_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1331,8 +1331,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_STEEL_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_IRON_ORE, 10, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TEMPERATE,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Temperate,
{},
STR_INDUSTRY_NAME_IRON_ORE_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1341,8 +1341,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION,
MCT_LIVESTOCK_FRUIT, 10, CT_INVALID, 0, 15,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Organic, LandscapeType::Tropic,
{},
STR_INDUSTRY_NAME_FRUIT_PLANTATION, STR_NEWS_INDUSTRY_PLANTED,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM),
@@ -1351,8 +1351,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_PLANTATION,
CT_RUBBER, 10, CT_INVALID, 0, 15,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Organic, LandscapeType::Tropic,
{},
STR_INDUSTRY_NAME_RUBBER_PLANTATION, STR_NEWS_INDUSTRY_PLANTED,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM),
@@ -1361,8 +1361,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_WATER_TOWER, IT_INVALID, IT_INVALID, CHECK_WATER,
CT_WATER, 12, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Tropic,
{},
STR_INDUSTRY_NAME_WATER_SUPPLY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1371,8 +1371,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_WATER_SUPPLY, IT_INVALID, IT_INVALID, CHECK_WATER,
CT_INVALID, 0, CT_INVALID, 0, 5,
CT_WATER, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_BLACK_HOLE, 1 << LT_TROPIC,
INDUSTRYBEH_ONLY_INTOWN,
INDUSTRYLIFE_BLACK_HOLE, LandscapeType::Tropic,
IndustryBehaviour::OnlyInTown,
STR_INDUSTRY_NAME_WATER_TOWER, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1381,8 +1381,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_RUBBER_PLANTATION, IT_COPPER_MINE, IT_LUMBER_MILL, CHECK_PLANTATION,
CT_GOODS, 0, CT_INVALID, 0, 5,
CT_RUBBER, 256, CT_COPPER_ORE, 256, CT_WOOD, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TROPIC,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Tropic,
{},
STR_INDUSTRY_NAME_FACTORY_2, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1391,8 +1391,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION,
MCT_GRAIN_WHEAT_MAIZE, 11, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TROPIC,
INDUSTRYBEH_PLANT_FIELDS | INDUSTRYBEH_PLANT_ON_BUILT,
IndustryLifeType::Organic, LandscapeType::Tropic,
IndustryBehaviours({IndustryBehaviour::PlantFields, IndustryBehaviour::PlantOnBuild}),
STR_INDUSTRY_NAME_FARM_2, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM),
@@ -1401,8 +1401,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_LUMBERMILL,
CT_WOOD, 0, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TROPIC,
INDUSTRYBEH_CUT_TREES,
IndustryLifeType::Processing, LandscapeType::Tropic,
IndustryBehaviour::CutTrees,
STR_INDUSTRY_NAME_LUMBER_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1411,8 +1411,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_COTTON_CANDY, 13, CT_INVALID, 0, 30,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Organic, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_COTTON_CANDY_FOREST, STR_NEWS_INDUSTRY_PLANTED,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1421,8 +1421,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_COTTON_CANDY, IT_TOFFEE_QUARRY, IT_SUGAR_MINE, CHECK_NOTHING,
CT_CANDY, 0, CT_INVALID, 0, 5,
CT_SUGAR, 256, CT_TOFFEE, 256, CT_COTTON_CANDY, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_CANDY_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1431,8 +1431,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_BATTERIES, 11, CT_INVALID, 0, 30,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_ORGANIC, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Organic, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_BATTERY_FARM, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM),
@@ -1441,8 +1441,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_COLA, 12, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_COLA_WELLS, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1451,8 +1451,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_INVALID, 0, CT_INVALID, 0, 5,
CT_TOYS, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_BLACK_HOLE, 1 << LT_TOYLAND,
INDUSTRYBEH_ONLY_NEARTOWN,
INDUSTRYLIFE_BLACK_HOLE, LandscapeType::Toyland,
IndustryBehaviour::OnlyNearTown,
STR_INDUSTRY_NAME_TOY_SHOP, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1461,8 +1461,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM, IT_TOY_SHOP, CHECK_NOTHING,
CT_TOYS, 0, CT_INVALID, 0, 5,
CT_PLASTIC, 256, CT_BATTERIES, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_TOY_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1471,8 +1471,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_PLASTIC, 14, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1481,8 +1481,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_COLA_WELLS, IT_BUBBLE_GENERATOR, IT_INVALID, CHECK_NOTHING,
CT_FIZZY_DRINKS, 0, CT_INVALID, 0, 5,
CT_COLA, 256, CT_BUBBLES, 256, CT_INVALID, 256,
INDUSTRYLIFE_PROCESSING, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Processing, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1491,8 +1491,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_BUBBLEGEN,
CT_BUBBLES, 13, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_BUBBLE_GENERATOR, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1501,8 +1501,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_TOFFEE, 10, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_TOFFEE_QUARRY, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
@@ -1511,8 +1511,8 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING,
CT_SUGAR, 11, CT_INVALID, 0, 5,
CT_INVALID, 256, CT_INVALID, 256, CT_INVALID, 256,
INDUSTRYLIFE_EXTRACTIVE, 1 << LT_TOYLAND,
INDUSTRYBEH_NONE,
IndustryLifeType::Extractive, LandscapeType::Toyland,
{},
STR_INDUSTRY_NAME_SUGAR_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION,
STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL),
};
@@ -1533,7 +1533,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = {
*/
#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) { \
{INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO}, \
{ca1, ca2, ca3}, sl, a1, a2, a3, 0, {0, ANIM_STATUS_NO_ANIMATION, 2, 0}, INDTILE_SPECIAL_NONE, true, GRFFileProps(INVALID_INDUSTRYTILE), {c1, c2, c3} \
{ca1, ca2, ca3}, sl, a1, a2, a3, IndustryTileCallbackMasks{}, {0, ANIM_STATUS_NO_ANIMATION, 2, 0}, IndustryTileSpecialFlags{}, true, GRFFileProps(INVALID_INDUSTRYTILE), {}, {c1, c2, c3} \
}
static const IndustryTileSpec _origin_industry_tile_specs[NEW_INDUSTRYTILEOFFSET] = {
/* Coal Mine */

View File

@@ -44,54 +44,54 @@
* @param classes Classes of this cargo type. @see CargoClass
*/
#define MK(bt, label, colour, weight, mult, ip, td1, td2, freight, tae, str_plural, str_singular, str_volume, classes) \
{label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, INVALID_TPE, TOWN_PRODUCTION_DIVISOR, 0, \
{label, bt, colour, colour, weight, mult, classes, ip, {td1, td2}, freight, tae, INVALID_TPE, TOWN_PRODUCTION_DIVISOR, CargoCallbackMasks{}, \
MK_STR_CARGO_PLURAL(str_plural), MK_STR_CARGO_SINGULAR(str_singular), str_volume, MK_STR_QUANTITY(str_plural), MK_STR_ABBREV(str_plural), \
MK_SPRITE(str_plural), nullptr, nullptr, 0}
/** Cargo types available by default. */
static const CargoSpec _default_cargo[] = {
MK( 0, CT_PASSENGERS, 152, 1, 0x400, 3185, 0, 24, false, TAE_PASSENGERS, PASSENGERS, PASSENGER, STR_PASSENGERS, CC_PASSENGERS),
MK( 1, CT_COAL, 6, 16, 0x100, 5916, 7, 255, true, TAE_NONE, COAL, COAL, STR_TONS, CC_BULK | CC_NON_POTABLE),
MK( 2, CT_MAIL, 15, 4, 0x200, 4550, 20, 90, false, TAE_MAIL, MAIL, MAIL, STR_BAGS, CC_MAIL),
MK( 0, CT_PASSENGERS, 152, 1, 0x400, 3185, 0, 24, false, TAE_PASSENGERS, PASSENGERS, PASSENGER, STR_PASSENGERS, CargoClasses({CargoClass::Passengers})),
MK( 1, CT_COAL, 6, 16, 0x100, 5916, 7, 255, true, TAE_NONE, COAL, COAL, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::NonPotable})),
MK( 2, CT_MAIL, 15, 4, 0x200, 4550, 20, 90, false, TAE_MAIL, MAIL, MAIL, STR_BAGS, CargoClasses({CargoClass::Mail})),
/* Oil in temperate and arctic */
MK( 3, CT_OIL, 174, 16, 0x100, 4437, 25, 255, true, TAE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID | CC_NON_POTABLE),
MK( 3, CT_OIL, 174, 16, 0x100, 4437, 25, 255, true, TAE_NONE, OIL, OIL, STR_LITERS, CargoClasses({CargoClass::Liquid, CargoClass::NonPotable})),
/* Oil in subtropic */
MK( 3, CT_OIL, 174, 16, 0x100, 4892, 25, 255, true, TAE_NONE, OIL, OIL, STR_LITERS, CC_LIQUID | CC_NON_POTABLE),
MK( 4, CT_LIVESTOCK, 208, 3, 0x100, 4322, 4, 18, true, TAE_NONE, LIVESTOCK, LIVESTOCK, STR_ITEMS, CC_PIECE_GOODS | CC_NON_POTABLE),
MK( 5, CT_GOODS, 194, 8, 0x200, 6144, 5, 28, true, TAE_GOODS, GOODS, GOODS, STR_CRATES, CC_EXPRESS),
MK( 6, CT_GRAIN, 191, 16, 0x100, 4778, 4, 40, true, TAE_NONE, GRAIN, GRAIN, STR_TONS, CC_BULK | CC_POTABLE),
MK( 6, CT_WHEAT, 191, 16, 0x100, 4778, 4, 40, true, TAE_NONE, WHEAT, WHEAT, STR_TONS, CC_BULK | CC_POTABLE),
MK( 6, CT_MAIZE, 191, 16, 0x100, 4322, 4, 40, true, TAE_NONE, MAIZE, MAIZE, STR_TONS, CC_BULK | CC_POTABLE),
MK( 3, CT_OIL, 174, 16, 0x100, 4892, 25, 255, true, TAE_NONE, OIL, OIL, STR_LITERS, CargoClasses({CargoClass::Liquid, CargoClass::NonPotable})),
MK( 4, CT_LIVESTOCK, 208, 3, 0x100, 4322, 4, 18, true, TAE_NONE, LIVESTOCK, LIVESTOCK, STR_ITEMS, CargoClasses({CargoClass::PieceGoods, CargoClass::NonPotable})),
MK( 5, CT_GOODS, 194, 8, 0x200, 6144, 5, 28, true, TAE_GOODS, GOODS, GOODS, STR_CRATES, CargoClasses({CargoClass::Express})),
MK( 6, CT_GRAIN, 191, 16, 0x100, 4778, 4, 40, true, TAE_NONE, GRAIN, GRAIN, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::Potable})),
MK( 6, CT_WHEAT, 191, 16, 0x100, 4778, 4, 40, true, TAE_NONE, WHEAT, WHEAT, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::Potable})),
MK( 6, CT_MAIZE, 191, 16, 0x100, 4322, 4, 40, true, TAE_NONE, MAIZE, MAIZE, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::Potable})),
/* Wood in temperate and arctic */
MK( 7, CT_WOOD, 84, 16, 0x100, 5005, 15, 255, true, TAE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS),
MK( 7, CT_WOOD, 84, 16, 0x100, 5005, 15, 255, true, TAE_NONE, WOOD, WOOD, STR_TONS, CargoClasses({CargoClass::PieceGoods})),
/* Wood in subtropic */
MK( 7, CT_WOOD, 84, 16, 0x100, 7964, 15, 255, true, TAE_NONE, WOOD, WOOD, STR_TONS, CC_PIECE_GOODS),
MK( 8, CT_IRON_ORE, 184, 16, 0x100, 5120, 9, 255, true, TAE_NONE, IRON_ORE, IRON_ORE, STR_TONS, CC_BULK | CC_NON_POTABLE),
MK( 9, CT_STEEL, 10, 16, 0x100, 5688, 7, 255, true, TAE_NONE, STEEL, STEEL, STR_TONS, CC_PIECE_GOODS),
MK( 10, CT_VALUABLES, 202, 2, 0x100, 7509, 1, 32, true, TAE_NONE, VALUABLES, VALUABLES, STR_BAGS, CC_ARMOURED),
MK( 10, CT_GOLD, 202, 8, 0x100, 5802, 10, 40, true, TAE_NONE, GOLD, GOLD, STR_BAGS, CC_ARMOURED),
MK( 10, CT_DIAMONDS, 202, 2, 0x100, 5802, 10, 255, true, TAE_NONE, DIAMONDS, DIAMOND, STR_BAGS, CC_ARMOURED),
MK( 11, CT_PAPER, 10, 16, 0x100, 5461, 7, 60, true, TAE_NONE, PAPER, PAPER, STR_TONS, CC_PIECE_GOODS),
MK( 12, CT_FOOD, 48, 16, 0x100, 5688, 0, 30, true, TAE_FOOD, FOOD, FOOD, STR_TONS, CC_EXPRESS | CC_REFRIGERATED | CC_POTABLE),
MK( 13, CT_FRUIT, 208, 16, 0x100, 4209, 0, 15, true, TAE_NONE, FRUIT, FRUIT, STR_TONS, CC_BULK | CC_REFRIGERATED | CC_POTABLE),
MK( 14, CT_COPPER_ORE, 184, 16, 0x100, 4892, 12, 255, true, TAE_NONE, COPPER_ORE, COPPER_ORE, STR_TONS, CC_BULK | CC_NON_POTABLE),
MK( 15, CT_WATER, 10, 16, 0x100, 4664, 20, 80, true, TAE_WATER, WATER, WATER, STR_LITERS, CC_LIQUID | CC_POTABLE),
MK( 16, CT_RUBBER, 6, 16, 0x100, 4437, 2, 20, true, TAE_NONE, RUBBER, RUBBER, STR_LITERS, CC_LIQUID | CC_NON_POTABLE),
MK( 17, CT_SUGAR, 6, 16, 0x100, 4437, 20, 255, true, TAE_NONE, SUGAR, SUGAR, STR_TONS, CC_BULK | CC_POTABLE),
MK( 18, CT_TOYS, 174, 2, 0x100, 5574, 25, 255, true, TAE_NONE, TOYS, TOY, STR_ITEMS, CC_PIECE_GOODS),
MK( 19, CT_BATTERIES, 208, 4, 0x100, 4322, 2, 30, true, TAE_NONE, BATTERIES, BATTERY, STR_ITEMS, CC_PIECE_GOODS),
MK( 20, CT_CANDY, 194, 5, 0x200, 6144, 8, 40, true, TAE_GOODS, SWEETS, SWEETS, STR_BAGS, CC_EXPRESS),
MK( 21, CT_TOFFEE, 191, 16, 0x100, 4778, 14, 60, true, TAE_NONE, TOFFEE, TOFFEE, STR_TONS, CC_BULK),
MK( 22, CT_COLA, 84, 16, 0x100, 4892, 5, 75, true, TAE_NONE, COLA, COLA, STR_LITERS, CC_LIQUID),
MK( 23, CT_COTTON_CANDY, 184, 16, 0x100, 5005, 10, 25, true, TAE_NONE, CANDYFLOSS, CANDYFLOSS, STR_TONS, CC_BULK),
MK( 24, CT_BUBBLES, 10, 1, 0x100, 5077, 20, 80, true, TAE_NONE, BUBBLES, BUBBLE, STR_ITEMS, CC_PIECE_GOODS),
MK( 25, CT_PLASTIC, 202, 16, 0x100, 4664, 30, 255, true, TAE_NONE, PLASTIC, PLASTIC, STR_LITERS, CC_LIQUID),
MK( 26, CT_FIZZY_DRINKS, 48, 2, 0x100, 6250, 30, 50, true, TAE_FOOD, FIZZY_DRINKS, FIZZY_DRINK, STR_ITEMS, CC_PIECE_GOODS),
MK( 7, CT_WOOD, 84, 16, 0x100, 7964, 15, 255, true, TAE_NONE, WOOD, WOOD, STR_TONS, CargoClasses({CargoClass::PieceGoods})),
MK( 8, CT_IRON_ORE, 184, 16, 0x100, 5120, 9, 255, true, TAE_NONE, IRON_ORE, IRON_ORE, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::NonPotable})),
MK( 9, CT_STEEL, 10, 16, 0x100, 5688, 7, 255, true, TAE_NONE, STEEL, STEEL, STR_TONS, CargoClasses({CargoClass::PieceGoods})),
MK( 10, CT_VALUABLES, 202, 2, 0x100, 7509, 1, 32, true, TAE_NONE, VALUABLES, VALUABLES, STR_BAGS, CargoClasses({CargoClass::Armoured})),
MK( 10, CT_GOLD, 202, 8, 0x100, 5802, 10, 40, true, TAE_NONE, GOLD, GOLD, STR_BAGS, CargoClasses({CargoClass::Armoured})),
MK( 10, CT_DIAMONDS, 202, 2, 0x100, 5802, 10, 255, true, TAE_NONE, DIAMONDS, DIAMOND, STR_BAGS, CargoClasses({CargoClass::Armoured})),
MK( 11, CT_PAPER, 10, 16, 0x100, 5461, 7, 60, true, TAE_NONE, PAPER, PAPER, STR_TONS, CargoClasses({CargoClass::PieceGoods})),
MK( 12, CT_FOOD, 48, 16, 0x100, 5688, 0, 30, true, TAE_FOOD, FOOD, FOOD, STR_TONS, CargoClasses({CargoClass::Express, CargoClass::Refrigerated, CargoClass::Potable})),
MK( 13, CT_FRUIT, 208, 16, 0x100, 4209, 0, 15, true, TAE_NONE, FRUIT, FRUIT, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::Refrigerated, CargoClass::Potable})),
MK( 14, CT_COPPER_ORE, 184, 16, 0x100, 4892, 12, 255, true, TAE_NONE, COPPER_ORE, COPPER_ORE, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::NonPotable})),
MK( 15, CT_WATER, 10, 16, 0x100, 4664, 20, 80, true, TAE_WATER, WATER, WATER, STR_LITERS, CargoClasses({CargoClass::Liquid, CargoClass::Potable})),
MK( 16, CT_RUBBER, 6, 16, 0x100, 4437, 2, 20, true, TAE_NONE, RUBBER, RUBBER, STR_LITERS, CargoClasses({CargoClass::Liquid, CargoClass::NonPotable})),
MK( 17, CT_SUGAR, 6, 16, 0x100, 4437, 20, 255, true, TAE_NONE, SUGAR, SUGAR, STR_TONS, CargoClasses({CargoClass::Bulk, CargoClass::Potable})),
MK( 18, CT_TOYS, 174, 2, 0x100, 5574, 25, 255, true, TAE_NONE, TOYS, TOY, STR_ITEMS, CargoClasses({CargoClass::PieceGoods})),
MK( 19, CT_BATTERIES, 208, 4, 0x100, 4322, 2, 30, true, TAE_NONE, BATTERIES, BATTERY, STR_ITEMS, CargoClasses({CargoClass::PieceGoods})),
MK( 20, CT_CANDY, 194, 5, 0x200, 6144, 8, 40, true, TAE_GOODS, SWEETS, SWEETS, STR_BAGS, CargoClasses({CargoClass::Express})),
MK( 21, CT_TOFFEE, 191, 16, 0x100, 4778, 14, 60, true, TAE_NONE, TOFFEE, TOFFEE, STR_TONS, CargoClasses({CargoClass::Bulk})),
MK( 22, CT_COLA, 84, 16, 0x100, 4892, 5, 75, true, TAE_NONE, COLA, COLA, STR_LITERS, CargoClasses({CargoClass::Liquid})),
MK( 23, CT_COTTON_CANDY, 184, 16, 0x100, 5005, 10, 25, true, TAE_NONE, CANDYFLOSS, CANDYFLOSS, STR_TONS, CargoClasses({CargoClass::Bulk})),
MK( 24, CT_BUBBLES, 10, 1, 0x100, 5077, 20, 80, true, TAE_NONE, BUBBLES, BUBBLE, STR_ITEMS, CargoClasses({CargoClass::PieceGoods})),
MK( 25, CT_PLASTIC, 202, 16, 0x100, 4664, 30, 255, true, TAE_NONE, PLASTIC, PLASTIC, STR_LITERS, CargoClasses({CargoClass::Liquid})),
MK( 26, CT_FIZZY_DRINKS, 48, 2, 0x100, 6250, 30, 50, true, TAE_FOOD, FIZZY_DRINKS, FIZZY_DRINK, STR_ITEMS, CargoClasses({CargoClass::PieceGoods})),
/* Void slot in temperate */
MK(0xFF, CT_INVALID, 1, 0, 0x100, 5688, 0, 30, true, TAE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE),
MK(0xFF, CT_INVALID, 1, 0, 0x100, 5688, 0, 30, true, TAE_NONE, NOTHING, NOTHING, STR_TONS, CargoClasses({})),
/* Void slot in arctic */
MK(0xFF, CT_INVALID, 184, 0, 0x100, 5120, 9, 255, true, TAE_NONE, NOTHING, NOTHING, STR_TONS, CC_NOAVAILABLE),
MK(0xFF, CT_INVALID, 184, 0, 0x100, 5120, 9, 255, true, TAE_NONE, NOTHING, NOTHING, STR_TONS, CargoClasses({})),
};

View File

@@ -14,15 +14,20 @@
* List of string control codes used for string formatting, displaying, and
* by strgen to generate the language files.
*/
enum StringControlCode {
enum StringControlCode : uint16_t {
SCC_RECORD_SEPARATOR = 0x1E,
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,
/* All SCC_ENCODED* control codes must have stable ids are they are stored in strings that are saved in savegames. */
SCC_ENCODED = SCC_CONTROL_START, ///< Encoded string marker and sub-string parameter.
SCC_ENCODED_INTERNAL, ///< Encoded text from OpenTTD.
SCC_ENCODED_NUMERIC, ///< Encoded numeric parameter.
SCC_ENCODED_STRING, ///< Encoded string parameter.
/* Font selection codes, must be in same order as FontSize enum */
SCC_FIRST_FONT,

View File

@@ -17,7 +17,7 @@
* Tile Location group.
* This defines whether the X and or Y coordinate of a tile is even
*/
enum TLG {
enum TLG : uint8_t {
XEVEN_YEVEN = 0,
XEVEN_YODD = 1,
XODD_YEVEN = 2,
@@ -30,7 +30,7 @@ enum TLG {
* into account: the tile being drawn itself (the home tile, the one in
* ti->tile), and the neighbouring tile
*/
enum TileSource {
enum TileSource : uint8_t {
TS_HOME = 0,
TS_NEIGHBOUR = 1,
@@ -254,7 +254,7 @@ static const int8_t y_ppp_offsets[DIR_END] = {-2, 0, 2, 4, 2, 0, -2, -4};
/**
* Offset for pylon sprites from the base pylon sprite.
*/
enum PylonSpriteOffset {
enum PylonSpriteOffset : uint8_t {
PSO_Y_NE,
PSO_Y_SW,
PSO_X_NW,
@@ -280,7 +280,7 @@ static const uint8_t pylon_sprites[] = {
/**
* Offset for wire sprites from the base wire sprite.
*/
enum WireSpriteOffset {
enum WireSpriteOffset : uint8_t {
WSO_X_SHORT,
WSO_Y_SHORT,
WSO_EW_SHORT,
@@ -419,7 +419,7 @@ static const SortableSpriteStruct RailCatenarySpriteData_Tunnel[] = {
* <li>Position of the Pylon relative to the track</li>
* <li>Position of the Pylon inside the tile</li></ol>
*/
enum RailCatenarySprite {
enum RailCatenarySprite : uint8_t {
WIRE_X_FLAT_SW,
WIRE_X_FLAT_NE,
WIRE_X_FLAT_BOTH,

View File

@@ -24,7 +24,7 @@
* @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) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, INVALID_CARGO, e, 0, 8, 0, 0, 0, ExtraEngineFlags::None, STR_EMPTY, Ticks::CARGO_AGING_TICKS, INVALID_ENGINE }
#define MT(a, b, c, d, e, f) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, TimerGameCalendar::Year{c}, TimerGameCalendar::Year{d}, b, 5, f, INVALID_CARGO, e, 0, 8, EngineMiscFlags{}, VehicleCallbackMasks{}, 0, {}, STR_EMPTY, Ticks::CARGO_AGING_TICKS, EngineID::Invalid() }
/**
* Writes the properties of a multiple-unit train into the EngineInfo struct.
@@ -37,7 +37,7 @@
* @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) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, INVALID_CARGO, e, 0, 8, 1 << EF_RAIL_IS_MU, 0, 0, ExtraEngineFlags::None, STR_EMPTY, Ticks::CARGO_AGING_TICKS, INVALID_ENGINE }
#define MM(a, b, c, d, e, f) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, TimerGameCalendar::Year{c}, TimerGameCalendar::Year{d}, b, 5, f, INVALID_CARGO, e, 0, 8, EngineMiscFlags{EngineMiscFlag::RailIsMU}, VehicleCallbackMasks{}, 0, {}, STR_EMPTY, Ticks::CARGO_AGING_TICKS, EngineID::Invalid() }
/**
* Writes the properties of a train carriage into the EngineInfo struct.
@@ -50,7 +50,7 @@
* @see MT
* @note the 5 between b and f is the load amount
*/
#define MW(a, b, c, d, e, f) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, INVALID_CARGO, e, 0, 8, 0, 0, 0, ExtraEngineFlags::None, STR_EMPTY, Ticks::CARGO_AGING_TICKS, INVALID_ENGINE }
#define MW(a, b, c, d, e, f) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, TimerGameCalendar::Year{c}, TimerGameCalendar::Year{d}, b, 5, f, INVALID_CARGO, e, 0, 8, EngineMiscFlags{}, VehicleCallbackMasks{}, 0, {}, STR_EMPTY, Ticks::CARGO_AGING_TICKS, EngineID::Invalid() }
/**
* Writes the properties of a road vehicle into the EngineInfo struct.
@@ -63,7 +63,7 @@
* @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) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, INVALID_CARGO, e, 0, 8, 0, 0, 0, ExtraEngineFlags::None, STR_EMPTY, Ticks::CARGO_AGING_TICKS, INVALID_ENGINE }
#define MR(a, b, c, d, e, f) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, TimerGameCalendar::Year{c}, TimerGameCalendar::Year{d}, b, 5, f, INVALID_CARGO, e, 0, 8, EngineMiscFlags{}, VehicleCallbackMasks{}, 0, {}, STR_EMPTY, Ticks::CARGO_AGING_TICKS, EngineID::Invalid() }
/**
* Writes the properties of a ship into the EngineInfo struct.
@@ -75,7 +75,7 @@
* @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) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, f, INVALID_CARGO, e, 0, 8, 0, 0, 0, ExtraEngineFlags::None, STR_EMPTY, Ticks::CARGO_AGING_TICKS, INVALID_ENGINE }
#define MS(a, b, c, d, e, f) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, TimerGameCalendar::Year{c}, TimerGameCalendar::Year{d}, b, 10, f, INVALID_CARGO, e, 0, 8, EngineMiscFlags{}, VehicleCallbackMasks{}, 0, {}, STR_EMPTY, Ticks::CARGO_AGING_TICKS, EngineID::Invalid() }
/**
* Writes the properties of an aeroplane into the EngineInfo struct.
@@ -86,278 +86,278 @@
* @param e Bitmask of the climates
* @note the 20 between b and e is the load amount
*/
#define MA(a, b, c, d, e) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, INVALID_CARGO, CT_INVALID, 0, 8, 0, 0, 0, ExtraEngineFlags::None, STR_EMPTY, Ticks::CARGO_AGING_TICKS, INVALID_ENGINE }
#define MA(a, b, c, d, e) { CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR + a, TimerGameCalendar::Year{c}, TimerGameCalendar::Year{d}, b, 20, e, INVALID_CARGO, CT_INVALID, 0, 8, EngineMiscFlags{}, VehicleCallbackMasks{}, 0, {}, STR_EMPTY, Ticks::CARGO_AGING_TICKS, EngineID::Invalid() }
/* Climates
* T = Temperate
* A = Sub-Arctic
* S = Sub-Tropic
* Y = Toyland */
#define T 1
#define A 2
#define S 4
#define Y 8
#define T LandscapeType::Temperate
#define A LandscapeType::Arctic
#define S LandscapeType::Tropic
#define Y LandscapeType::Toyland
static constexpr EngineInfo _orig_engine_info[] = {
/* base_intro base_life
* | decay_speed cargo_type
* | | lifelength | climates
* | | | | | | */
MT( 1827, 20, 15, 30, CT_NONE , T ), // 0 Kirby Paul Tank (Steam)
MT( 12784, 20, 22, 30, CT_NONE , A|S ), // 1 MJS 250 (Diesel)
MT( 9497, 20, 20, 50, CT_NONE , Y), // 2 Ploddyphut Choo-Choo
MT( 11688, 20, 20, 30, CT_NONE , Y), // 3 Powernaut Choo-Choo
MT( 16802, 20, 20, 30, CT_NONE , Y), // 4 Mightymover Choo-Choo
MT( 18993, 20, 20, 30, CT_NONE , Y), // 5 Ploddyphut Diesel
MT( 20820, 20, 20, 30, CT_NONE , Y), // 6 Powernaut Diesel
MT( 8766, 20, 20, 30, CT_NONE , A|S ), // 7 Wills 2-8-0 (Steam)
MT( 5114, 20, 21, 30, CT_NONE , T ), // 8 Chaney 'Jubilee' (Steam)
MT( 5479, 20, 20, 30, CT_NONE , T ), // 9 Ginzu 'A4' (Steam)
MT( 12419, 20, 23, 25, CT_NONE , 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, CT_NONE , T ), // 13 SH/Hendry '25' (Diesel)
MT( 14245, 20, 20, 30, CT_NONE , T ), // 14 UU '37' (Diesel)
MT( 15341, 20, 22, 33, CT_NONE , T ), // 15 Floss '47' (Diesel)
MT( 14976, 20, 20, 25, CT_NONE , A|S ), // 16 CS 4000 (Diesel)
MT( 16437, 20, 20, 30, CT_NONE , A|S ), // 17 CS 2400 (Diesel)
MT( 18993, 20, 22, 30, CT_NONE , A|S ), // 18 Centennial (Diesel)
MT( 13880, 20, 22, 30, CT_NONE , A|S ), // 19 Kelling 3100 (Diesel)
MM( 20454, 20, 22, 30, CT_NONE , A|S ), // 20 Turner Turbo (Diesel)
MT( 16071, 20, 22, 30, CT_NONE , A|S ), // 21 MJS 1000 (Diesel)
MT( 20820, 20, 20, 25, CT_MAIL , T ), // 22 SH '125' (Diesel)
MT( 16437, 20, 23, 30, CT_NONE , T ), // 23 SH '30' (Electric)
MT( 19359, 20, 23, 80, CT_NONE , T ), // 24 SH '40' (Electric)
MM( 23376, 20, 25, 30, CT_NONE , T ), // 25 'T.I.M.' (Electric)
MM( 26298, 20, 25, 50, CT_NONE , 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, MCT_GRAIN_WHEAT_MAIZE, 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, MCT_VALUABLES_GOLD_DIAMONDS, 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, CT_NONE , 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, CT_NONE , 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, MCT_GRAIN_WHEAT_MAIZE, 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, MCT_VALUABLES_GOLD_DIAMONDS, 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, CT_NONE , T|A|S ), // 84 Lev1 'Leviathan' (Electric)
MT( 39447, 20, 20, 50, CT_NONE , T|A|S ), // 85 Lev2 'Cyclops' (Electric)
MT( 42004, 20, 20, 50, CT_NONE , T|A|S ), // 86 Lev3 'Pegasus' (Electric)
MT( 42735, 20, 20, 50, CT_NONE , T|A|S ), // 87 Lev4 'Chimaera' (Electric)
MT( 36891, 20, 20, 60, CT_NONE , 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, MCT_GRAIN_WHEAT_MAIZE, 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, MCT_VALUABLES_GOLD_DIAMONDS, 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, MCT_GRAIN_WHEAT_MAIZE, T|A|S ), // 141 Hereford Grain Truck
MR( 21185, 20, 15, 55, MCT_GRAIN_WHEAT_MAIZE, T|A|S ), // 142 Thomas Grain Truck
MR( 32873, 20, 15, 85, MCT_GRAIN_WHEAT_MAIZE, 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, MCT_VALUABLES_GOLD_DIAMONDS, T|A|S ), // 153 Balogh Armoured Truck
MR( 22281, 20, 15, 55, MCT_VALUABLES_GOLD_DIAMONDS, T|A|S ), // 154 Uhl Armoured Truck
MR( 33603, 20, 15, 85, MCT_VALUABLES_GOLD_DIAMONDS, 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
MT( 1827, 20, 15, 30, CT_NONE , LandscapeTypes({T })), // 0 Kirby Paul Tank (Steam)
MT( 12784, 20, 22, 30, CT_NONE , LandscapeTypes({ A,S })), // 1 MJS 250 (Diesel)
MT( 9497, 20, 20, 50, CT_NONE , LandscapeTypes({ Y})), // 2 Ploddyphut Choo-Choo
MT( 11688, 20, 20, 30, CT_NONE , LandscapeTypes({ Y})), // 3 Powernaut Choo-Choo
MT( 16802, 20, 20, 30, CT_NONE , LandscapeTypes({ Y})), // 4 Mightymover Choo-Choo
MT( 18993, 20, 20, 30, CT_NONE , LandscapeTypes({ Y})), // 5 Ploddyphut Diesel
MT( 20820, 20, 20, 30, CT_NONE , LandscapeTypes({ Y})), // 6 Powernaut Diesel
MT( 8766, 20, 20, 30, CT_NONE , LandscapeTypes({ A,S })), // 7 Wills 2-8-0 (Steam)
MT( 5114, 20, 21, 30, CT_NONE , LandscapeTypes({T })), // 8 Chaney 'Jubilee' (Steam)
MT( 5479, 20, 20, 30, CT_NONE , LandscapeTypes({T })), // 9 Ginzu 'A4' (Steam)
MT( 12419, 20, 23, 25, CT_NONE , LandscapeTypes({T })), // 10 SH '8P' (Steam)
MM( 13149, 20, 12, 30, CT_PASSENGERS , LandscapeTypes({T })), // 11 Manley-Morel DMU (Diesel)
MM( 23376, 20, 15, 35, CT_PASSENGERS , LandscapeTypes({T })), // 12 'Dash' (Diesel)
MT( 14976, 20, 18, 28, CT_NONE , LandscapeTypes({T })), // 13 SH/Hendry '25' (Diesel)
MT( 14245, 20, 20, 30, CT_NONE , LandscapeTypes({T })), // 14 UU '37' (Diesel)
MT( 15341, 20, 22, 33, CT_NONE , LandscapeTypes({T })), // 15 Floss '47' (Diesel)
MT( 14976, 20, 20, 25, CT_NONE , LandscapeTypes({ A,S })), // 16 CS 4000 (Diesel)
MT( 16437, 20, 20, 30, CT_NONE , LandscapeTypes({ A,S })), // 17 CS 2400 (Diesel)
MT( 18993, 20, 22, 30, CT_NONE , LandscapeTypes({ A,S })), // 18 Centennial (Diesel)
MT( 13880, 20, 22, 30, CT_NONE , LandscapeTypes({ A,S })), // 19 Kelling 3100 (Diesel)
MM( 20454, 20, 22, 30, CT_NONE , LandscapeTypes({ A,S })), // 20 Turner Turbo (Diesel)
MT( 16071, 20, 22, 30, CT_NONE , LandscapeTypes({ A,S })), // 21 MJS 1000 (Diesel)
MT( 20820, 20, 20, 25, CT_MAIL , LandscapeTypes({T })), // 22 SH '125' (Diesel)
MT( 16437, 20, 23, 30, CT_NONE , LandscapeTypes({T })), // 23 SH '30' (Electric)
MT( 19359, 20, 23, 80, CT_NONE , LandscapeTypes({T })), // 24 SH '40' (Electric)
MM( 23376, 20, 25, 30, CT_NONE , LandscapeTypes({T })), // 25 'T.I.M.' (Electric)
MM( 26298, 20, 25, 50, CT_NONE , LandscapeTypes({T })), // 26 'AsiaStar' (Electric)
MW( 1827, 20, 20, 50, CT_PASSENGERS , LandscapeTypes({T,A,S,Y})), // 27 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , LandscapeTypes({T,A,S,Y})), // 28 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , LandscapeTypes({T,A })), // 29 Coal Truck
MW( 1827, 20, 20, 50, CT_OIL , LandscapeTypes({T,A,S })), // 30 Oil Tanker
MW( 1827, 20, 20, 50, CT_LIVESTOCK , LandscapeTypes({T,A })), // 31 Livestock Van
MW( 1827, 20, 20, 50, CT_GOODS , LandscapeTypes({T,A,S })), // 32 Goods Van
MW( 1827, 20, 20, 50, MCT_GRAIN_WHEAT_MAIZE, LandscapeTypes({T,A,S })), // 33 Grain Hopper
MW( 1827, 20, 20, 50, CT_WOOD , LandscapeTypes({T,A,S })), // 34 Wood Truck
MW( 1827, 20, 20, 50, CT_IRON_ORE , LandscapeTypes({T })), // 35 Iron Ore Hopper
MW( 1827, 20, 20, 50, CT_STEEL , LandscapeTypes({T })), // 36 Steel Truck
MW( 1827, 20, 20, 50, MCT_VALUABLES_GOLD_DIAMONDS, LandscapeTypes({T,A,S })), // 37 Armoured Van
MW( 1827, 20, 20, 50, CT_FOOD , LandscapeTypes({ A,S })), // 38 Food Van
MW( 1827, 20, 20, 50, CT_PAPER , LandscapeTypes({ A })), // 39 Paper Truck
MW( 1827, 20, 20, 50, CT_COPPER_ORE , LandscapeTypes({ S })), // 40 Copper Ore Hopper
MW( 1827, 20, 20, 50, CT_WATER , LandscapeTypes({ S })), // 41 Water Tanker
MW( 1827, 20, 20, 50, CT_FRUIT , LandscapeTypes({ S })), // 42 Fruit Truck
MW( 1827, 20, 20, 50, CT_RUBBER , LandscapeTypes({ S })), // 43 Rubber Truck
MW( 1827, 20, 20, 50, CT_SUGAR , LandscapeTypes({ Y})), // 44 Sugar Truck
MW( 1827, 20, 20, 50, CT_COTTON_CANDY, LandscapeTypes({ Y})), // 45 Candyfloss Hopper
MW( 1827, 20, 20, 50, CT_TOFFEE , LandscapeTypes({ Y})), // 46 Toffee Hopper
MW( 1827, 20, 20, 50, CT_BUBBLES , LandscapeTypes({ Y})), // 47 Bubble Van
MW( 1827, 20, 20, 50, CT_COLA , LandscapeTypes({ Y})), // 48 Cola Tanker
MW( 1827, 20, 20, 50, CT_CANDY , LandscapeTypes({ Y})), // 49 Sweet Van
MW( 1827, 20, 20, 50, CT_TOYS , LandscapeTypes({ Y})), // 50 Toy Van
MW( 1827, 20, 20, 50, CT_BATTERIES , LandscapeTypes({ Y})), // 51 Battery Truck
MW( 1827, 20, 20, 50, CT_FIZZY_DRINKS, LandscapeTypes({ Y})), // 52 Fizzy Drink Truck
MW( 1827, 20, 20, 50, CT_PLASTIC , LandscapeTypes({ Y})), // 53 Plastic Truck
MT( 28490, 20, 20, 50, CT_NONE , LandscapeTypes({T,A,S })), // 54 'X2001' (Electric)
MT( 31047, 20, 20, 50, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 55 'Millennium Z1' (Electric)
MT( 28855, 20, 20, 50, CT_NONE , LandscapeTypes({ Y})), // 56 Wizzowow Z99
MW( 1827, 20, 20, 50, CT_PASSENGERS , LandscapeTypes({T,A,S,Y})), // 57 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , LandscapeTypes({T,A,S,Y})), // 58 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , LandscapeTypes({T,A })), // 59 Coal Truck
MW( 1827, 20, 20, 50, CT_OIL , LandscapeTypes({T,A,S })), // 60 Oil Tanker
MW( 1827, 20, 20, 50, CT_LIVESTOCK , LandscapeTypes({T,A })), // 61 Livestock Van
MW( 1827, 20, 20, 50, CT_GOODS , LandscapeTypes({T,A,S })), // 62 Goods Van
MW( 1827, 20, 20, 50, MCT_GRAIN_WHEAT_MAIZE, LandscapeTypes({T,A,S })), // 63 Grain Hopper
MW( 1827, 20, 20, 50, CT_WOOD , LandscapeTypes({T,A,S })), // 64 Wood Truck
MW( 1827, 20, 20, 50, CT_IRON_ORE , LandscapeTypes({T })), // 65 Iron Ore Hopper
MW( 1827, 20, 20, 50, CT_STEEL , LandscapeTypes({T })), // 66 Steel Truck
MW( 1827, 20, 20, 50, MCT_VALUABLES_GOLD_DIAMONDS, LandscapeTypes({T,A,S })), // 67 Armoured Van
MW( 1827, 20, 20, 50, CT_FOOD , LandscapeTypes({ A,S })), // 68 Food Van
MW( 1827, 20, 20, 50, CT_PAPER , LandscapeTypes({ A })), // 69 Paper Truck
MW( 1827, 20, 20, 50, CT_COPPER_ORE , LandscapeTypes({ S })), // 70 Copper Ore Hopper
MW( 1827, 20, 20, 50, CT_WATER , LandscapeTypes({ S })), // 71 Water Tanker
MW( 1827, 20, 20, 50, CT_FRUIT , LandscapeTypes({ S })), // 72 Fruit Truck
MW( 1827, 20, 20, 50, CT_RUBBER , LandscapeTypes({ S })), // 73 Rubber Truck
MW( 1827, 20, 20, 50, CT_SUGAR , LandscapeTypes({ Y})), // 74 Sugar Truck
MW( 1827, 20, 20, 50, CT_COTTON_CANDY, LandscapeTypes({ Y})), // 75 Candyfloss Hopper
MW( 1827, 20, 20, 50, CT_TOFFEE , LandscapeTypes({ Y})), // 76 Toffee Hopper
MW( 1827, 20, 20, 50, CT_BUBBLES , LandscapeTypes({ Y})), // 77 Bubble Van
MW( 1827, 20, 20, 50, CT_COLA , LandscapeTypes({ Y})), // 78 Cola Tanker
MW( 1827, 20, 20, 50, CT_CANDY , LandscapeTypes({ Y})), // 79 Sweet Van
MW( 1827, 20, 20, 50, CT_TOYS , LandscapeTypes({ Y})), // 80 Toy Van
MW( 1827, 20, 20, 50, CT_BATTERIES , LandscapeTypes({ Y})), // 81 Battery Truck
MW( 1827, 20, 20, 50, CT_FIZZY_DRINKS, LandscapeTypes({ Y})), // 82 Fizzy Drink Truck
MW( 1827, 20, 20, 50, CT_PLASTIC , LandscapeTypes({ Y})), // 83 Plastic Truck
MT( 36525, 20, 20, 50, CT_NONE , LandscapeTypes({T,A,S })), // 84 Lev1 'Leviathan' (Electric)
MT( 39447, 20, 20, 50, CT_NONE , LandscapeTypes({T,A,S })), // 85 Lev2 'Cyclops' (Electric)
MT( 42004, 20, 20, 50, CT_NONE , LandscapeTypes({T,A,S })), // 86 Lev3 'Pegasus' (Electric)
MT( 42735, 20, 20, 50, CT_NONE , LandscapeTypes({T,A,S })), // 87 Lev4 'Chimaera' (Electric)
MT( 36891, 20, 20, 60, CT_NONE , LandscapeTypes({ Y})), // 88 Wizzowow Rocketeer
MW( 1827, 20, 20, 50, CT_PASSENGERS , LandscapeTypes({T,A,S,Y})), // 89 Passenger Carriage
MW( 1827, 20, 20, 50, CT_MAIL , LandscapeTypes({T,A,S,Y})), // 90 Mail Van
MW( 1827, 20, 20, 50, CT_COAL , LandscapeTypes({T,A })), // 91 Coal Truck
MW( 1827, 20, 20, 50, CT_OIL , LandscapeTypes({T,A,S })), // 92 Oil Tanker
MW( 1827, 20, 20, 50, CT_LIVESTOCK , LandscapeTypes({T,A })), // 93 Livestock Van
MW( 1827, 20, 20, 50, CT_GOODS , LandscapeTypes({T,A,S })), // 94 Goods Van
MW( 1827, 20, 20, 50, MCT_GRAIN_WHEAT_MAIZE, LandscapeTypes({T,A,S })), // 95 Grain Hopper
MW( 1827, 20, 20, 50, CT_WOOD , LandscapeTypes({T,A,S })), // 96 Wood Truck
MW( 1827, 20, 20, 50, CT_IRON_ORE , LandscapeTypes({T })), // 97 Iron Ore Hopper
MW( 1827, 20, 20, 50, CT_STEEL , LandscapeTypes({T })), // 98 Steel Truck
MW( 1827, 20, 20, 50, MCT_VALUABLES_GOLD_DIAMONDS, LandscapeTypes({T,A,S })), // 99 Armoured Van
MW( 1827, 20, 20, 50, CT_FOOD , LandscapeTypes({ A,S })), // 100 Food Van
MW( 1827, 20, 20, 50, CT_PAPER , LandscapeTypes({ A })), // 101 Paper Truck
MW( 1827, 20, 20, 50, CT_COPPER_ORE , LandscapeTypes({ S })), // 102 Copper Ore Hopper
MW( 1827, 20, 20, 50, CT_WATER , LandscapeTypes({ S })), // 103 Water Tanker
MW( 1827, 20, 20, 50, CT_FRUIT , LandscapeTypes({ S })), // 104 Fruit Truck
MW( 1827, 20, 20, 50, CT_RUBBER , LandscapeTypes({ S })), // 105 Rubber Truck
MW( 1827, 20, 20, 50, CT_SUGAR , LandscapeTypes({ Y})), // 106 Sugar Truck
MW( 1827, 20, 20, 50, CT_COTTON_CANDY, LandscapeTypes({ Y})), // 107 Candyfloss Hopper
MW( 1827, 20, 20, 50, CT_TOFFEE , LandscapeTypes({ Y})), // 108 Toffee Hopper
MW( 1827, 20, 20, 50, CT_BUBBLES , LandscapeTypes({ Y})), // 109 Bubble Van
MW( 1827, 20, 20, 50, CT_COLA , LandscapeTypes({ Y})), // 110 Cola Tanker
MW( 1827, 20, 20, 50, CT_CANDY , LandscapeTypes({ Y})), // 111 Sweet Van
MW( 1827, 20, 20, 50, CT_TOYS , LandscapeTypes({ Y})), // 112 Toy Van
MW( 1827, 20, 20, 50, CT_BATTERIES , LandscapeTypes({ Y})), // 113 Battery Truck
MW( 1827, 20, 20, 50, CT_FIZZY_DRINKS, LandscapeTypes({ Y})), // 114 Fizzy Drink Truck
MW( 1827, 20, 20, 50, CT_PLASTIC , LandscapeTypes({ Y})), // 115 Plastic Truck
MR( 3378, 20, 12, 40, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 116 MPS Regal Bus
MR( 16071, 20, 15, 30, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 117 Hereford Leopard Bus
MR( 24107, 20, 15, 40, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 118 Foster Bus
MR( 32142, 20, 15, 80, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 119 Foster MkII Superbus
MR( 9132, 20, 15, 40, CT_PASSENGERS , LandscapeTypes({ Y})), // 120 Ploddyphut MkI Bus
MR( 18993, 20, 15, 40, CT_PASSENGERS , LandscapeTypes({ Y})), // 121 Ploddyphut MkII Bus
MR( 32873, 20, 15, 80, CT_PASSENGERS , LandscapeTypes({ Y})), // 122 Ploddyphut MkIII Bus
MR( 5479, 20, 15, 55, CT_COAL , LandscapeTypes({T,A })), // 123 Balogh Coal Truck
MR( 20089, 20, 15, 55, CT_COAL , LandscapeTypes({T,A })), // 124 Uhl Coal Truck
MR( 33969, 20, 15, 85, CT_COAL , LandscapeTypes({T,A })), // 125 DW Coal Truck
MR( 5479, 20, 15, 55, CT_MAIL , LandscapeTypes({T,A,S })), // 126 MPS Mail Truck
MR( 21550, 20, 15, 55, CT_MAIL , LandscapeTypes({T,A,S })), // 127 Reynard Mail Truck
MR( 35795, 20, 15, 85, CT_MAIL , LandscapeTypes({T,A,S })), // 128 Perry Mail Truck
MR( 5479, 20, 15, 55, CT_MAIL , LandscapeTypes({ Y})), // 129 MightyMover Mail Truck
MR( 21550, 20, 15, 55, CT_MAIL , LandscapeTypes({ Y})), // 130 Powernaught Mail Truck
MR( 35795, 20, 15, 85, CT_MAIL , LandscapeTypes({ Y})), // 131 Wizzowow Mail Truck
MR( 5479, 20, 15, 55, CT_OIL , LandscapeTypes({T,A,S })), // 132 Witcombe Oil Tanker
MR( 19359, 20, 15, 55, CT_OIL , LandscapeTypes({T,A,S })), // 133 Foster Oil Tanker
MR( 31047, 20, 15, 85, CT_OIL , LandscapeTypes({T,A,S })), // 134 Perry Oil Tanker
MR( 5479, 20, 15, 55, CT_LIVESTOCK , LandscapeTypes({T,A })), // 135 Talbott Livestock Van
MR( 21915, 20, 15, 55, CT_LIVESTOCK , LandscapeTypes({T,A })), // 136 Uhl Livestock Van
MR( 37256, 20, 15, 85, CT_LIVESTOCK , LandscapeTypes({T,A })), // 137 Foster Livestock Van
MR( 5479, 20, 15, 55, CT_GOODS , LandscapeTypes({T,A,S })), // 138 Balogh Goods Truck
MR( 19724, 20, 15, 55, CT_GOODS , LandscapeTypes({T,A,S })), // 139 Craighead Goods Truck
MR( 31047, 20, 15, 85, CT_GOODS , LandscapeTypes({T,A,S })), // 140 Goss Goods Truck
MR( 5479, 20, 15, 55, MCT_GRAIN_WHEAT_MAIZE, LandscapeTypes({T,A,S })), // 141 Hereford Grain Truck
MR( 21185, 20, 15, 55, MCT_GRAIN_WHEAT_MAIZE, LandscapeTypes({T,A,S })), // 142 Thomas Grain Truck
MR( 32873, 20, 15, 85, MCT_GRAIN_WHEAT_MAIZE, LandscapeTypes({T,A,S })), // 143 Goss Grain Truck
MR( 5479, 20, 15, 55, CT_WOOD , LandscapeTypes({T,A,S })), // 144 Witcombe Wood Truck
MR( 19724, 20, 15, 55, CT_WOOD , LandscapeTypes({T,A,S })), // 145 Foster Wood Truck
MR( 35430, 20, 15, 85, CT_WOOD , LandscapeTypes({T,A,S })), // 146 Moreland Wood Truck
MR( 5479, 20, 15, 55, CT_IRON_ORE , LandscapeTypes({T })), // 147 MPS Iron Ore Truck
MR( 20820, 20, 15, 55, CT_IRON_ORE , LandscapeTypes({T })), // 148 Uhl Iron Ore Truck
MR( 33238, 20, 15, 85, CT_IRON_ORE , LandscapeTypes({T })), // 149 Chippy Iron Ore Truck
MR( 5479, 20, 15, 55, CT_STEEL , LandscapeTypes({T })), // 150 Balogh Steel Truck
MR( 21185, 20, 15, 55, CT_STEEL , LandscapeTypes({T })), // 151 Uhl Steel Truck
MR( 31777, 20, 15, 85, CT_STEEL , LandscapeTypes({T })), // 152 Kelling Steel Truck
MR( 5479, 20, 15, 55, MCT_VALUABLES_GOLD_DIAMONDS, LandscapeTypes({T,A,S })), // 153 Balogh Armoured Truck
MR( 22281, 20, 15, 55, MCT_VALUABLES_GOLD_DIAMONDS, LandscapeTypes({T,A,S })), // 154 Uhl Armoured Truck
MR( 33603, 20, 15, 85, MCT_VALUABLES_GOLD_DIAMONDS, LandscapeTypes({T,A,S })), // 155 Foster Armoured Truck
MR( 5479, 20, 15, 55, CT_FOOD , LandscapeTypes({ A,S })), // 156 Foster Food Van
MR( 18628, 20, 15, 55, CT_FOOD , LandscapeTypes({ A,S })), // 157 Perry Food Van
MR( 30681, 20, 15, 85, CT_FOOD , LandscapeTypes({ A,S })), // 158 Chippy Food Van
MR( 5479, 20, 15, 55, CT_PAPER , LandscapeTypes({ A })), // 159 Uhl Paper Truck
MR( 21185, 20, 15, 55, CT_PAPER , LandscapeTypes({ A })), // 160 Balogh Paper Truck
MR( 31777, 20, 15, 85, CT_PAPER , LandscapeTypes({ A })), // 161 MPS Paper Truck
MR( 5479, 20, 15, 55, CT_COPPER_ORE , LandscapeTypes({ S })), // 162 MPS Copper Ore Truck
MR( 20820, 20, 15, 55, CT_COPPER_ORE , LandscapeTypes({ S })), // 163 Uhl Copper Ore Truck
MR( 33238, 20, 15, 85, CT_COPPER_ORE , LandscapeTypes({ S })), // 164 Goss Copper Ore Truck
MR( 5479, 20, 15, 55, CT_WATER , LandscapeTypes({ S })), // 165 Uhl Water Tanker
MR( 20970, 20, 15, 55, CT_WATER , LandscapeTypes({ S })), // 166 Balogh Water Tanker
MR( 33388, 20, 15, 85, CT_WATER , LandscapeTypes({ S })), // 167 MPS Water Tanker
MR( 5479, 20, 15, 55, CT_FRUIT , LandscapeTypes({ S })), // 168 Balogh Fruit Truck
MR( 21335, 20, 15, 55, CT_FRUIT , LandscapeTypes({ S })), // 169 Uhl Fruit Truck
MR( 33753, 20, 15, 85, CT_FRUIT , LandscapeTypes({ S })), // 170 Kelling Fruit Truck
MR( 5479, 20, 15, 55, CT_RUBBER , LandscapeTypes({ S })), // 171 Balogh Rubber Truck
MR( 20604, 20, 15, 55, CT_RUBBER , LandscapeTypes({ S })), // 172 Uhl Rubber Truck
MR( 33023, 20, 15, 85, CT_RUBBER , LandscapeTypes({ S })), // 173 RMT Rubber Truck
MR( 5479, 20, 15, 55, CT_SUGAR , LandscapeTypes({ Y})), // 174 MightyMover Sugar Truck
MR( 19724, 20, 15, 55, CT_SUGAR , LandscapeTypes({ Y})), // 175 Powernaught Sugar Truck
MR( 33238, 20, 15, 85, CT_SUGAR , LandscapeTypes({ Y})), // 176 Wizzowow Sugar Truck
MR( 5479, 20, 15, 55, CT_COLA , LandscapeTypes({ Y})), // 177 MightyMover Cola Truck
MR( 20089, 20, 15, 55, CT_COLA , LandscapeTypes({ Y})), // 178 Powernaught Cola Truck
MR( 33603, 20, 15, 85, CT_COLA , LandscapeTypes({ Y})), // 179 Wizzowow Cola Truck
MR( 5479, 20, 15, 55, CT_COTTON_CANDY, LandscapeTypes({ Y})), // 180 MightyMover Candyfloss Truck
MR( 20454, 20, 15, 55, CT_COTTON_CANDY, LandscapeTypes({ Y})), // 181 Powernaught Candyfloss Truck
MR( 33969, 20, 15, 85, CT_COTTON_CANDY, LandscapeTypes({ Y})), // 182 Wizzowow Candyfloss Truck
MR( 5479, 20, 15, 55, CT_TOFFEE , LandscapeTypes({ Y})), // 183 MightyMover Toffee Truck
MR( 20820, 20, 15, 55, CT_TOFFEE , LandscapeTypes({ Y})), // 184 Powernaught Toffee Truck
MR( 34334, 20, 15, 85, CT_TOFFEE , LandscapeTypes({ Y})), // 185 Wizzowow Toffee Truck
MR( 5479, 20, 15, 55, CT_TOYS , LandscapeTypes({ Y})), // 186 MightyMover Toy Van
MR( 21185, 20, 15, 55, CT_TOYS , LandscapeTypes({ Y})), // 187 Powernaught Toy Van
MR( 34699, 20, 15, 85, CT_TOYS , LandscapeTypes({ Y})), // 188 Wizzowow Toy Van
MR( 5479, 20, 15, 55, CT_CANDY , LandscapeTypes({ Y})), // 189 MightyMover Sweet Truck
MR( 21550, 20, 15, 55, CT_CANDY , LandscapeTypes({ Y})), // 190 Powernaught Sweet Truck
MR( 35064, 20, 15, 85, CT_CANDY , LandscapeTypes({ Y})), // 191 Wizzowow Sweet Truck
MR( 5479, 20, 15, 55, CT_BATTERIES , LandscapeTypes({ Y})), // 192 MightyMover Battery Truck
MR( 19874, 20, 15, 55, CT_BATTERIES , LandscapeTypes({ Y})), // 193 Powernaught Battery Truck
MR( 35430, 20, 15, 85, CT_BATTERIES , LandscapeTypes({ Y})), // 194 Wizzowow Battery Truck
MR( 5479, 20, 15, 55, CT_FIZZY_DRINKS, LandscapeTypes({ Y})), // 195 MightyMover Fizzy Drink Truck
MR( 20239, 20, 15, 55, CT_FIZZY_DRINKS, LandscapeTypes({ Y})), // 196 Powernaught Fizzy Drink Truck
MR( 35795, 20, 15, 85, CT_FIZZY_DRINKS, LandscapeTypes({ Y})), // 197 Wizzowow Fizzy Drink Truck
MR( 5479, 20, 15, 55, CT_PLASTIC , LandscapeTypes({ Y})), // 198 MightyMover Plastic Truck
MR( 20604, 20, 15, 55, CT_PLASTIC , LandscapeTypes({ Y})), // 199 Powernaught Plastic Truck
MR( 32873, 20, 15, 85, CT_PLASTIC , LandscapeTypes({ Y})), // 200 Wizzowow Plastic Truck
MR( 5479, 20, 15, 55, CT_BUBBLES , LandscapeTypes({ Y})), // 201 MightyMover Bubble Truck
MR( 20970, 20, 15, 55, CT_BUBBLES , LandscapeTypes({ Y})), // 202 Powernaught Bubble Truck
MR( 33023, 20, 15, 85, CT_BUBBLES , LandscapeTypes({ Y})), // 203 Wizzowow Bubble Truck
MS( 2922, 5, 30, 50, CT_OIL , LandscapeTypes({T,A,S })), // 204 MPS Oil Tanker
MS( 17167, 5, 30, 90, CT_OIL , LandscapeTypes({T,A,S })), // 205 CS-Inc. Oil Tanker
MS( 2192, 5, 30, 55, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 206 MPS Passenger Ferry
MS( 18628, 5, 30, 90, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 207 FFP Passenger Ferry
MS( 17257, 10, 25, 90, CT_PASSENGERS , LandscapeTypes({T,A,S })), // 208 Bakewell 300 Hovercraft
MS( 9587, 5, 30, 40, CT_PASSENGERS , LandscapeTypes({ Y})), // 209 Chugger-Chug Passenger Ferry
MS( 20544, 5, 30, 90, CT_PASSENGERS , LandscapeTypes({ Y})), // 210 Shivershake Passenger Ferry
MS( 2557, 5, 30, 55, CT_GOODS , LandscapeTypes({T,A,S })), // 211 Yate Cargo ship
MS( 19724, 5, 30, 98, CT_GOODS , LandscapeTypes({T,A,S })), // 212 Bakewell Cargo ship
MS( 9587, 5, 30, 45, CT_GOODS , LandscapeTypes({ Y})), // 213 Mightymover Cargo ship
MS( 22371, 5, 30, 90, CT_GOODS , LandscapeTypes({ Y})), // 214 Powernaut Cargo ship
MA( 2922, 20, 20, 20, LandscapeTypes({T,A,S })), // 215 Sampson U52
MA( 9922, 20, 24, 20, LandscapeTypes({T,A,S })), // 216 Coleman Count
MA( 12659, 20, 18, 20, LandscapeTypes({T,A,S })), // 217 FFP Dart
MA( 17652, 20, 25, 35, LandscapeTypes({T,A,S })), // 218 Yate Haugan
MA( 4929, 20, 30, 30, LandscapeTypes({T,A,S })), // 219 Bakewell Cotswald LB-3
MA( 13695, 20, 23, 25, LandscapeTypes({T,A,S })), // 220 Bakewell Luckett LB-8
MA( 16341, 20, 26, 30, LandscapeTypes({T,A,S })), // 221 Bakewell Luckett LB-9
MA( 21395, 20, 25, 30, LandscapeTypes({T,A,S })), // 222 Bakewell Luckett LB80
MA( 18263, 20, 20, 30, LandscapeTypes({T,A,S })), // 223 Bakewell Luckett LB-10
MA( 25233, 20, 25, 30, LandscapeTypes({T,A,S })), // 224 Bakewell Luckett LB-11
MA( 15371, 20, 22, 25, LandscapeTypes({T,A,S })), // 225 Yate Aerospace YAC 1-11
MA( 15461, 20, 25, 25, LandscapeTypes({T,A,S })), // 226 Darwin 100
MA( 16952, 20, 22, 25, LandscapeTypes({T,A,S })), // 227 Darwin 200
MA( 17227, 20, 25, 30, LandscapeTypes({T,A,S })), // 228 Darwin 300
MA( 22371, 20, 25, 35, LandscapeTypes({T,A,S })), // 229 Darwin 400
MA( 22341, 20, 25, 30, LandscapeTypes({T,A,S })), // 230 Darwin 500
MA( 27209, 20, 25, 30, LandscapeTypes({T,A,S })), // 231 Darwin 600
MA( 17988, 20, 20, 30, LandscapeTypes({T,A,S })), // 232 Guru Galaxy
MA( 18993, 20, 24, 35, LandscapeTypes({T,A,S })), // 233 Airtaxi A21
MA( 22401, 20, 24, 30, LandscapeTypes({T,A,S })), // 234 Airtaxi A31
MA( 24472, 20, 24, 30, LandscapeTypes({T,A,S })), // 235 Airtaxi A32
MA( 26724, 20, 24, 30, LandscapeTypes({T,A,S })), // 236 Airtaxi A33
MA( 22005, 20, 25, 30, LandscapeTypes({T,A,S })), // 237 Yate Aerospace YAe46
MA( 24107, 20, 20, 35, LandscapeTypes({T,A,S })), // 238 Dinger 100
MA( 29310, 20, 25, 60, LandscapeTypes({T,A,S })), // 239 AirTaxi A34-1000
MA( 35520, 20, 22, 30, LandscapeTypes({T,A,S })), // 240 Yate Z-Shuttle
MA( 36981, 20, 22, 30, LandscapeTypes({T,A,S })), // 241 Kelling K1
MA( 38807, 20, 22, 50, LandscapeTypes({T,A,S })), // 242 Kelling K6
MA( 42094, 20, 25, 30, LandscapeTypes({T,A,S })), // 243 Kelling K7
MA( 44651, 20, 23, 30, LandscapeTypes({T,A,S })), // 244 Darwin 700
MA( 40268, 20, 25, 30, LandscapeTypes({T,A,S })), // 245 FFP Hyperdart 2
MA( 33693, 20, 25, 50, LandscapeTypes({T,A,S })), // 246 Dinger 200
MA( 32963, 20, 20, 60, LandscapeTypes({T,A,S })), // 247 Dinger 1000
MA( 9222, 20, 20, 35, LandscapeTypes({ Y})), // 248 Ploddyphut 100
MA( 12874, 20, 20, 35, LandscapeTypes({ Y})), // 249 Ploddyphut 500
MA( 16892, 20, 20, 35, LandscapeTypes({ Y})), // 250 Flashbang X1
MA( 21275, 20, 20, 99, LandscapeTypes({ Y})), // 251 Juggerplane M1
MA( 23832, 20, 20, 99, LandscapeTypes({ Y})), // 252 Flashbang Wizzer
MA( 13575, 20, 20, 40, LandscapeTypes({T,A,S })), // 253 Tricario Helicopter
MA( 28215, 20, 20, 30, LandscapeTypes({T,A,S })), // 254 Guru X2 Helicopter
MA( 13575, 20, 20, 99, LandscapeTypes({ Y})), // 255 Powernaut Helicopter
};
#undef Y
#undef S

View File

@@ -5,7 +5,7 @@
* 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. */
/** @file genland.h Table used to generate deserts and/or rainforests. */
#define M(x, y) {x, y}

View File

@@ -14,37 +14,33 @@
/* Helper for filling property tables */
#define NIP(prop, base, variable, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->variable); }, cpp_sizeof(base, variable), prop, type }
#define NIP_END() { nullptr, 0, 0, 0, 0 }
/* Helper for filling callback tables */
#define NIC(cb_id, base, variable, bit) { #cb_id, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->variable); }, cpp_sizeof(base, variable), bit, cb_id }
#define NIC_END() { nullptr, 0, 0, 0, 0 }
/* Helper for filling variable tables */
#define NIV(var, name) { name, var }
#define NIV_END() { nullptr, 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),
NICV(CBID_VEHICLE_NAME, CBM_VEHICLE_NAME),
NIC_END()
NICV(CBID_VEHICLE_VISUAL_EFFECT, VehicleCallbackMask::VisualEffect),
NICV(CBID_VEHICLE_LENGTH, VehicleCallbackMask::Length),
NICV(CBID_VEHICLE_LOAD_AMOUNT, VehicleCallbackMask::LoadAmount),
NICV(CBID_VEHICLE_REFIT_CAPACITY, VehicleCallbackMask::RefitCapacity),
NICV(CBID_VEHICLE_ARTIC_ENGINE, VehicleCallbackMask::ArticEngine),
NICV(CBID_VEHICLE_CARGO_SUFFIX, VehicleCallbackMask::CargoSuffix),
NICV(CBID_TRAIN_ALLOW_WAGON_ATTACH, std::monostate{}),
NICV(CBID_VEHICLE_ADDITIONAL_TEXT, std::monostate{}),
NICV(CBID_VEHICLE_COLOUR_MAPPING, VehicleCallbackMask::ColourRemap),
NICV(CBID_VEHICLE_START_STOP_CHECK, std::monostate{}),
NICV(CBID_VEHICLE_32DAY_CALLBACK, std::monostate{}),
NICV(CBID_VEHICLE_SOUND_EFFECT, VehicleCallbackMask::SoundEffect),
NICV(CBID_VEHICLE_AUTOREPLACE_SELECTION, std::monostate{}),
NICV(CBID_VEHICLE_MODIFY_PROPERTY, std::monostate{}),
NICV(CBID_VEHICLE_NAME, VehicleCallbackMask::Name),
};
@@ -67,7 +63,6 @@ static const NIVariable _niv_vehicles[] = {
// 0x61 not useful, since it requires register 0x10F
NIV(0x62, "curvature/position difference to other vehicle"),
NIV(0x63, "tile compatibility wrt. track-type"),
NIV_END()
};
class NIHVehicle : public NIHelper {
@@ -75,8 +70,9 @@ class NIHVehicle : public NIHelper {
uint GetParent(uint index) const override { const Vehicle *first = Vehicle::Get(index)->First(); return GetInspectWindowNumber(GetGrfSpecFeature(first->type), first->index); }
const void *GetInstance(uint index)const override { return Vehicle::Get(index); }
const void *GetSpec(uint index) const override { return Vehicle::Get(index)->GetEngine(); }
void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_VEHICLE_NAME, index); }
std::string GetName(uint index) const override { return GetString(STR_VEHICLE_NAME, index); }
uint32_t GetGRFID(uint index) const override { return Vehicle::Get(index)->GetGRFID(); }
std::span<const BadgeID> GetBadges(uint index) const override { return Vehicle::Get(index)->GetEngine()->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
@@ -87,10 +83,10 @@ class NIHVehicle : public NIHelper {
};
static const NIFeature _nif_vehicle = {
nullptr,
{},
_nic_vehicles,
_niv_vehicles,
new NIHVehicle(),
std::make_unique<NIHVehicle>(),
};
@@ -98,14 +94,13 @@ static const NIFeature _nif_vehicle = {
#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_DRAW_TILE_LAYOUT, CBM_STATION_DRAW_TILE_LAYOUT),
NICS(CBID_STATION_BUILD_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()
NICS(CBID_STATION_AVAILABILITY, StationCallbackMask::Avail),
NICS(CBID_STATION_DRAW_TILE_LAYOUT, StationCallbackMask::DrawTileLayout),
NICS(CBID_STATION_BUILD_TILE_LAYOUT,std::monostate{}),
NICS(CBID_STATION_ANIM_START_STOP, std::monostate{}),
NICS(CBID_STATION_ANIM_NEXT_FRAME, StationCallbackMask::AnimationNextFrame),
NICS(CBID_STATION_ANIMATION_SPEED, StationCallbackMask::AnimationSpeed),
NICS(CBID_STATION_LAND_SLOPE_CHECK, StationCallbackMask::SlopeCheck),
};
static const NIVariable _niv_stations[] = {
@@ -132,29 +127,30 @@ static const NIVariable _niv_stations[] = {
NIV(0x69, "information about cargo accepted in the past"),
NIV(0x6A, "GRFID of nearby station tiles"),
NIV(0x6B, "station ID of nearby tiles"),
NIV_END()
};
class NIHStation : public NIHelper {
bool IsInspectable(uint index) const override { return GetStationSpec(index) != nullptr; }
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); }
bool IsInspectable(uint index) const override { return GetStationSpec(TileIndex{index}) != nullptr; }
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(TileIndex{index})->town->index); }
const void *GetInstance(uint ) const override { return nullptr; }
const void *GetSpec(uint index) const override { return GetStationSpec(index); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetStationSpec(index)->grf_prop.grfid : 0; }
const void *GetSpec(uint index) const override { return GetStationSpec(TileIndex{index}); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_STATION_NAME, GetStationIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetStationSpec(TileIndex{index})->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return this->IsInspectable(index) ? GetStationSpec(TileIndex{index})->badges : std::span<const BadgeID>{}; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
StationResolverObject ro(GetStationSpec(index), Station::GetByTile(index), index);
TileIndex tile{index};
StationResolverObject ro(GetStationSpec(tile), Station::GetByTile(tile), tile);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_station = {
nullptr,
{},
_nic_stations,
_niv_stations,
new NIHStation(),
std::make_unique<NIHStation>(),
};
@@ -162,22 +158,21 @@ static const NIFeature _nif_station = {
#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()
NICH(CBID_HOUSE_ALLOW_CONSTRUCTION, HouseCallbackMask::AllowConstruction),
NICH(CBID_HOUSE_ANIMATION_NEXT_FRAME, HouseCallbackMask::AnimationNextFrame),
NICH(CBID_HOUSE_ANIMATION_START_STOP, HouseCallbackMask::AnimationStartStop),
NICH(CBID_HOUSE_CONSTRUCTION_STATE_CHANGE, HouseCallbackMask::ConstructionStateChange),
NICH(CBID_HOUSE_COLOUR, HouseCallbackMask::Colour),
NICH(CBID_HOUSE_CARGO_ACCEPTANCE, HouseCallbackMask::CargoAcceptance),
NICH(CBID_HOUSE_ANIMATION_SPEED, HouseCallbackMask::AnimationSpeed),
NICH(CBID_HOUSE_DESTRUCTION, HouseCallbackMask::Destruction),
NICH(CBID_HOUSE_ACCEPT_CARGO, HouseCallbackMask::AcceptCargo),
NICH(CBID_HOUSE_PRODUCE_CARGO, HouseCallbackMask::ProduceCargo),
NICH(CBID_HOUSE_DENY_DESTRUCTION, HouseCallbackMask::DenyDestruction),
NICH(CBID_HOUSE_WATCHED_CARGO_ACCEPTED, std::monostate{}),
NICH(CBID_HOUSE_CUSTOM_NAME, std::monostate{}),
NICH(CBID_HOUSE_DRAW_FOUNDATIONS, HouseCallbackMask::DrawFoundations),
NICH(CBID_HOUSE_AUTOSLOPE, HouseCallbackMask::Autoslope),
};
static const NIVariable _niv_house[] = {
@@ -197,7 +192,6 @@ static const NIVariable _niv_house[] = {
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 {
@@ -205,21 +199,23 @@ class NIHHouse : public NIHelper {
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, GetTownIndex(index)); }
const void *GetInstance(uint)const override { return nullptr; }
const void *GetSpec(uint index) const override { return HouseSpec::Get(GetHouseType(index)); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_TOWN_NAME, GetTownIndex(index), index); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_TOWN_NAME, GetTownIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? HouseSpec::Get(GetHouseType(index))->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return HouseSpec::Get(GetHouseType(index))->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
HouseResolverObject ro(GetHouseType(index), index, Town::GetByTile(index));
TileIndex tile{index};
HouseResolverObject ro(GetHouseType(tile), tile, Town::GetByTile(tile));
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_house = {
nullptr,
{},
_nic_house,
_niv_house,
new NIHHouse(),
std::make_unique<NIHHouse>(),
};
@@ -227,15 +223,14 @@ static const NIFeature _nif_house = {
#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()
NICIT(CBID_INDTILE_ANIM_START_STOP, std::monostate{}),
NICIT(CBID_INDTILE_ANIM_NEXT_FRAME, IndustryTileCallbackMask::AnimationNextFrame),
NICIT(CBID_INDTILE_ANIMATION_SPEED, IndustryTileCallbackMask::AnimationSpeed),
NICIT(CBID_INDTILE_CARGO_ACCEPTANCE, IndustryTileCallbackMask::CargoAcceptance),
NICIT(CBID_INDTILE_ACCEPT_CARGO, IndustryTileCallbackMask::AcceptCargo),
NICIT(CBID_INDTILE_SHAPE_CHECK, IndustryTileCallbackMask::ShapeCheck),
NICIT(CBID_INDTILE_DRAW_FOUNDATIONS, IndustryTileCallbackMask::DrawFoundations),
NICIT(CBID_INDTILE_AUTOSLOPE, IndustryTileCallbackMask::Autoslope),
};
static const NIVariable _niv_industrytiles[] = {
@@ -247,7 +242,6 @@ static const NIVariable _niv_industrytiles[] = {
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 {
@@ -255,27 +249,29 @@ class NIHIndustryTile : public NIHelper {
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_INDUSTRIES, GetIndustryIndex(index)); }
const void *GetInstance(uint)const override { return nullptr; }
const void *GetSpec(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index)); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_INDUSTRY_NAME, GetIndustryIndex(index), index); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_INDUSTRY_NAME, GetIndustryIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index))->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
IndustryTileResolverObject ro(GetIndustryGfx(index), index, Industry::GetByTile(index));
TileIndex tile{index};
IndustryTileResolverObject ro(GetIndustryGfx(tile), tile, Industry::GetByTile(tile));
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_industrytile = {
nullptr,
{},
_nic_industrytiles,
_niv_industrytiles,
new NIHIndustryTile(),
std::make_unique<NIHIndustryTile>(),
};
/*** NewGRF industries ***/
#define NIP_PRODUCED_CARGO(prop, base, slot, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->GetProduced(slot).cargo); }, sizeof(CargoID), prop, type }
#define NIP_ACCEPTED_CARGO(prop, base, slot, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->GetAccepted(slot).cargo); }, sizeof(CargoID), prop, type }
#define NIP_PRODUCED_CARGO(prop, base, slot, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->GetProduced(slot).cargo); }, sizeof(CargoType), prop, type }
#define NIP_ACCEPTED_CARGO(prop, base, slot, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->GetAccepted(slot).cargo); }, sizeof(CargoType), prop, type }
static const NIProperty _nip_industries[] = {
NIP_PRODUCED_CARGO(0x25, Industry, 0, NIT_CARGO, "produced cargo 0"),
@@ -310,7 +306,6 @@ static const NIProperty _nip_industries[] = {
NIP_ACCEPTED_CARGO(0x26, Industry, 13, NIT_CARGO, "accepted cargo 13"),
NIP_ACCEPTED_CARGO(0x26, Industry, 14, NIT_CARGO, "accepted cargo 14"),
NIP_ACCEPTED_CARGO(0x26, Industry, 15, NIT_CARGO, "accepted cargo 15"),
NIP_END()
};
#undef NIP_PRODUCED_CARGO
@@ -318,20 +313,19 @@ static const NIProperty _nip_industries[] = {
#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()
NICI(CBID_INDUSTRY_PROBABILITY, IndustryCallbackMask::Probability),
NICI(CBID_INDUSTRY_LOCATION, IndustryCallbackMask::Location),
NICI(CBID_INDUSTRY_PRODUCTION_CHANGE, IndustryCallbackMask::ProductionChange),
NICI(CBID_INDUSTRY_MONTHLYPROD_CHANGE, IndustryCallbackMask::MonthlyProdChange),
NICI(CBID_INDUSTRY_CARGO_SUFFIX, IndustryCallbackMask::CargoSuffix),
NICI(CBID_INDUSTRY_FUND_MORE_TEXT, IndustryCallbackMask::FundMoreText),
NICI(CBID_INDUSTRY_WINDOW_MORE_TEXT, IndustryCallbackMask::WindowMoreText),
NICI(CBID_INDUSTRY_SPECIAL_EFFECT, IndustryCallbackMask::SpecialEffect),
NICI(CBID_INDUSTRY_REFUSE_CARGO, IndustryCallbackMask::RefuseCargo),
NICI(CBID_INDUSTRY_DECIDE_COLOUR, IndustryCallbackMask::DecideColour),
NICI(CBID_INDUSTRY_INPUT_CARGO_TYPES, IndustryCallbackMask::InputCargoTypes),
NICI(CBID_INDUSTRY_OUTPUT_CARGO_TYPES, IndustryCallbackMask::OutputCargoTypes),
NICI(CBID_INDUSTRY_PROD_CHANGE_BUILD, IndustryCallbackMask::ProdChangeBuild),
};
static const NIVariable _niv_industries[] = {
@@ -360,7 +354,6 @@ static const NIVariable _niv_industries[] = {
NIV(0x6F, "waiting input cargo"),
NIV(0x70, "production rate"),
NIV(0x71, "percentage of cargo transported last month"),
NIV_END()
};
class NIHIndustry : public NIHelper {
@@ -368,8 +361,9 @@ class NIHIndustry : public NIHelper {
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Industry::Get(index)->town->index); }
const void *GetInstance(uint index)const override { return Industry::Get(index); }
const void *GetSpec(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type); }
void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_INDUSTRY_NAME, index); }
std::string GetName(uint index) const override { return GetString(STR_INDUSTRY_NAME, index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type)->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
@@ -390,7 +384,7 @@ static const NIFeature _nif_industry = {
_nip_industries,
_nic_industries,
_niv_industries,
new NIHIndustry(),
std::make_unique<NIHIndustry>(),
};
@@ -398,14 +392,13 @@ static const NIFeature _nif_industry = {
#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()
NICO(CBID_OBJECT_LAND_SLOPE_CHECK, ObjectCallbackMask::SlopeCheck),
NICO(CBID_OBJECT_ANIMATION_NEXT_FRAME, ObjectCallbackMask::AnimationNextFrame),
NICO(CBID_OBJECT_ANIMATION_START_STOP, std::monostate{}),
NICO(CBID_OBJECT_ANIMATION_SPEED, ObjectCallbackMask::AnimationSpeed),
NICO(CBID_OBJECT_COLOUR, ObjectCallbackMask::Colour),
NICO(CBID_OBJECT_FUND_MORE_TEXT, ObjectCallbackMask::FundMoreText),
NICO(CBID_OBJECT_AUTOSLOPE, ObjectCallbackMask::Autoslope),
};
static const NIVariable _niv_objects[] = {
@@ -423,29 +416,30 @@ static const NIVariable _niv_objects[] = {
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 override { return ObjectSpec::GetByTile(index)->grf_prop.HasGrfFile(); }
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Object::GetByTile(index)->town->index); }
const void *GetInstance(uint index)const override { return Object::GetByTile(index); }
const void *GetSpec(uint index) const override { return ObjectSpec::GetByTile(index); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT, INVALID_STRING_ID, index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? ObjectSpec::GetByTile(index)->grf_prop.grfid : 0; }
bool IsInspectable(uint index) const override { return ObjectSpec::GetByTile(TileIndex{index})->grf_prop.HasGrfFile(); }
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Object::GetByTile(TileIndex{index})->town->index); }
const void *GetInstance(uint index)const override { return Object::GetByTile(TileIndex{index}); }
const void *GetSpec(uint index) const override { return ObjectSpec::GetByTile(TileIndex{index}); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT, INVALID_STRING_ID, index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? ObjectSpec::GetByTile(TileIndex{index})->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return ObjectSpec::GetByTile(TileIndex{index})->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
ObjectResolverObject ro(ObjectSpec::GetByTile(index), Object::GetByTile(index), index);
TileIndex tile{index};
ObjectResolverObject ro(ObjectSpec::GetByTile(tile), Object::GetByTile(tile), tile);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_object = {
nullptr,
{},
_nic_objects,
_niv_objects,
new NIHObject(),
std::make_unique<NIHObject>(),
};
@@ -457,7 +451,7 @@ static const NIVariable _niv_railtypes[] = {
NIV(0x42, "level crossing status"),
NIV(0x43, "construction date"),
NIV(0x44, "town zone"),
NIV_END()
NIV(0x45, "track types"),
};
class NIHRailType : public NIHelper {
@@ -465,23 +459,24 @@ class NIHRailType : public NIHelper {
uint GetParent(uint) const override { return UINT32_MAX; }
const void *GetInstance(uint) const override { return nullptr; }
const void *GetSpec(uint) const override { return nullptr; }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); }
uint32_t GetGRFID(uint) const override { return 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return GetRailTypeInfo(GetRailType(TileIndex{index}))->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
/* 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(nullptr, index, TCX_NORMAL, RTSG_END);
RailTypeResolverObject ro(nullptr, TileIndex{index}, TCX_NORMAL, RTSG_END);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_railtype = {
nullptr,
nullptr,
{},
{},
_niv_railtypes,
new NIHRailType(),
std::make_unique<NIHRailType>(),
};
@@ -489,11 +484,10 @@ static const NIFeature _nif_railtype = {
#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()
NICAT(CBID_AIRPTILE_DRAW_FOUNDATIONS, AirportTileCallbackMask::DrawFoundations),
NICAT(CBID_AIRPTILE_ANIM_START_STOP, std::monostate{}),
NICAT(CBID_AIRPTILE_ANIM_NEXT_FRAME, AirportTileCallbackMask::AnimationNextFrame),
NICAT(CBID_AIRPTILE_ANIMATION_SPEED, AirportTileCallbackMask::AnimationSpeed),
};
class NIHAirportTile : public NIHelper {
@@ -501,21 +495,23 @@ class NIHAirportTile : public NIHelper {
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_AIRPORTS, GetStationIndex(index)); }
const void *GetInstance(uint)const override { return nullptr; }
const void *GetSpec(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index)); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_STATION_NAME, GetStationIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index))->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
AirportTileResolverObject ro(AirportTileSpec::GetByTile(index), index, Station::GetByTile(index));
TileIndex tile{index};
AirportTileResolverObject ro(AirportTileSpec::GetByTile(tile), tile, Station::GetByTile(tile));
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_airporttile = {
nullptr,
{},
_nic_airporttiles,
_niv_industrytiles, // Yes, they share this (at least now)
new NIHAirportTile(),
std::make_unique<NIHAirportTile>(),
};
@@ -534,7 +530,6 @@ static const NIVariable _niv_airports[] = {
NIV(0xF1, "type of the airport"),
NIV(0xF6, "airport block status"),
NIV(0xFA, "built date"),
NIV_END()
};
class NIHAirport : public NIHelper {
@@ -542,8 +537,9 @@ class NIHAirport : public NIHelper {
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::Get(index)->town->index); }
const void *GetInstance(uint index)const override { return Station::Get(index); }
const void *GetSpec(uint index) const override { return AirportSpec::Get(Station::Get(index)->airport.type); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, index, Station::Get(index)->airport.tile); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_STATION_NAME, index, Station::Get(index)->airport.tile); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? AirportSpec::Get(Station::Get(index)->airport.type)->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return AirportSpec::Get(Station::Get(index)->airport.type)->badges; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
@@ -561,10 +557,10 @@ class NIHAirport : public NIHelper {
};
static const NIFeature _nif_airport = {
nullptr,
nullptr,
{},
{},
_niv_airports,
new NIHAirport(),
std::make_unique<NIHAirport>(),
};
@@ -580,7 +576,6 @@ static const NIVariable _niv_towns[] = {
NIV(0x9A, "zone radius 3"),
NIV(0x9C, "zone radius 4"),
NIV(0xB6, "number of buildings"),
NIV_END()
};
class NIHTown : public NIHelper {
@@ -588,9 +583,10 @@ class NIHTown : public NIHelper {
uint GetParent(uint) const override { return UINT32_MAX; }
const void *GetInstance(uint index)const override { return Town::Get(index); }
const void *GetSpec(uint) const override { return nullptr; }
void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_TOWN_NAME, index); }
std::string GetName(uint index) const override { return GetString(STR_TOWN_NAME, index); }
uint32_t GetGRFID(uint) const override { return 0; }
bool PSAWithParameter() const override { return true; }
std::span<const BadgeID> GetBadges(uint) const override { return {}; }
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
@@ -611,10 +607,10 @@ class NIHTown : public NIHelper {
};
static const NIFeature _nif_town = {
nullptr,
nullptr,
{},
{},
_niv_towns,
new NIHTown(),
std::make_unique<NIHTown>(),
};
/*** NewGRF road types ***/
@@ -625,47 +621,53 @@ static const NIVariable _niv_roadtypes[] = {
NIV(0x42, "level crossing status"),
NIV(0x43, "construction date"),
NIV(0x44, "town zone"),
NIV_END()
NIV(0x45, "track types"),
};
template <RoadTramType TRoadTramType>
class NIHRoadType : public NIHelper {
bool IsInspectable(uint) const override { return true; }
uint GetParent(uint) const override { return UINT32_MAX; }
const void *GetInstance(uint) const override { return nullptr; }
const void *GetSpec(uint) const override { return nullptr; }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE, INVALID_STRING_ID, index); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE, INVALID_STRING_ID, index); }
uint32_t GetGRFID(uint) const override { return 0; }
std::span<const BadgeID> GetBadges(uint index) const override
{
RoadType rt = GetRoadType(TileIndex{index}, TRoadTramType);
if (rt == INVALID_ROADTYPE) return {};
return GetRoadTypeInfo(rt)->badges;
}
uint Resolve(uint index, uint var, uint param, bool &avail) const override
{
/* 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. */
RoadTypeResolverObject ro(nullptr, index, TCX_NORMAL, ROTSG_END);
RoadTypeResolverObject ro(nullptr, TileIndex{index}, TCX_NORMAL, ROTSG_END);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_roadtype = {
nullptr,
nullptr,
{},
{},
_niv_roadtypes,
new NIHRoadType(),
std::make_unique<NIHRoadType<RoadTramType::RTT_ROAD>>(),
};
static const NIFeature _nif_tramtype = {
nullptr,
nullptr,
{},
{},
_niv_roadtypes,
new NIHRoadType(),
std::make_unique<NIHRoadType<RoadTramType::RTT_TRAM>>(),
};
#define NICRS(cb_id, bit) NIC(cb_id, RoadStopSpec, callback_mask, bit)
static const NICallback _nic_roadstops[] = {
NICRS(CBID_STATION_AVAILABILITY, CBM_ROAD_STOP_AVAIL),
NICRS(CBID_STATION_ANIM_START_STOP, CBM_NO_BIT),
NICRS(CBID_STATION_ANIM_NEXT_FRAME, CBM_ROAD_STOP_ANIMATION_NEXT_FRAME),
NICRS(CBID_STATION_ANIMATION_SPEED, CBM_ROAD_STOP_ANIMATION_SPEED),
NIC_END()
NICRS(CBID_STATION_AVAILABILITY, RoadStopCallbackMask::Avail),
NICRS(CBID_STATION_ANIM_START_STOP, std::monostate{}),
NICRS(CBID_STATION_ANIM_NEXT_FRAME, RoadStopCallbackMask::AnimationNextFrame),
NICRS(CBID_STATION_ANIMATION_SPEED, RoadStopCallbackMask::AnimationSpeed),
};
static const NIVariable _nif_roadstops[] = {
@@ -691,30 +693,31 @@ static const NIVariable _nif_roadstops[] = {
NIV(0x69, "information about cargo accepted in the past"),
NIV(0x6A, "GRFID of nearby road stop tiles"),
NIV(0x6B, "road stop ID of nearby tiles"),
NIV_END(),
};
class NIHRoadStop : public NIHelper {
bool IsInspectable(uint index) const override { return GetRoadStopSpec(index) != nullptr; }
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, BaseStation::GetByTile(index)->town->index); }
bool IsInspectable(uint index) const override { return GetRoadStopSpec(TileIndex{index}) != nullptr; }
uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, BaseStation::GetByTile(TileIndex{index})->town->index); }
const void *GetInstance(uint)const override { return nullptr; }
const void *GetSpec(uint index) const override { return GetRoadStopSpec(index); }
void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetRoadStopSpec(index)->grf_prop.grfid : 0; }
const void *GetSpec(uint index) const override { return GetRoadStopSpec(TileIndex{index}); }
std::string GetName(uint index) const override { return GetString(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT, STR_STATION_NAME, GetStationIndex(index), index); }
uint32_t GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetRoadStopSpec(TileIndex{index})->grf_prop.grfid : 0; }
std::span<const BadgeID> GetBadges(uint index) const override { return this->IsInspectable(index) ? GetRoadStopSpec(TileIndex{index})->badges : std::span<const BadgeID>{}; }
uint Resolve(uint index, uint var, uint32_t param, bool &avail) const override
{
StationGfx view = GetStationGfx(index);
RoadStopResolverObject ro(GetRoadStopSpec(index), BaseStation::GetByTile(index), index, INVALID_ROADTYPE, GetStationType(index), view);
TileIndex tile{index};
StationGfx view = GetStationGfx(tile);
RoadStopResolverObject ro(GetRoadStopSpec(tile), BaseStation::GetByTile(tile), tile, INVALID_ROADTYPE, GetStationType(tile), view);
return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail);
}
};
static const NIFeature _nif_roadstop = {
nullptr,
{},
_nic_roadstops,
_nif_roadstops,
new NIHRoadStop(),
std::make_unique<NIHRoadStop>(),
};
/** Table with all NIFeatures. */
@@ -741,5 +744,6 @@ static const NIFeature * const _nifeatures[] = {
&_nif_tramtype, // GSF_TRAMTYPES
&_nif_roadstop, // GSF_ROADSTOPS
&_nif_town, // GSF_FAKE_TOWNS
nullptr,
};
static_assert(lengthof(_nifeatures) == GSF_FAKE_END);

View File

@@ -8,33 +8,24 @@
/** @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_t)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[] = {
extern const DrawTileSpriteSpan _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 },
@@ -44,101 +35,93 @@ extern const DrawTileSprites _objects[] = {
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 },
#define TILE_SPRITE_LINE_NOTHING(img) { {img | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE} },
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)
static const DrawTileSpriteSpan _object_hq[] = {
TILE_SPRITE_LINE_NOTHING(SPR_TINYHQ_NORTH)
TILE_SPRITE_LINE_NOTHING(SPR_TINYHQ_WEST)
TILE_SPRITE_LINE_NOTHING(SPR_TINYHQ_EAST)
TILE_SPRITE_LINE_NOTHING(SPR_TINYHQ_SOUTH)
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_NOTHING(SPR_SMALLHQ_NORTH)
TILE_SPRITE_LINE_NOTHING(SPR_SMALLHQ_WEST)
TILE_SPRITE_LINE_NOTHING(SPR_SMALLHQ_EAST)
TILE_SPRITE_LINE_NOTHING(SPR_SMALLHQ_SOUTH)
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_NOTHING(SPR_MEDIUMHQ_SOUTH)
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_NOTHING(SPR_LARGEHQ_SOUTH)
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)
TILE_SPRITE_LINE_NOTHING(SPR_HUGEHQ_SOUTH)
};
#undef TILE_SPRITE_LINE
#undef TILE_SPRITE_LINE_NOTHING
#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) {{INVALID_OBJECT_CLASS, 0}, GRFFilePropsBase<2>(), {0, 0, 0, 0}, name, climate, size, build_cost_multiplier, clear_cost_multiplier, 0, CalendarTime::MAX_DATE + 1, flags, 0, height, 1, gen_amount}
#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) {{INVALID_OBJECT_CLASS, 0}, FixedGRFFileProps<2>{}, {0, 0, 0, 0}, name, climate, size, build_cost_multiplier, clear_cost_multiplier, TimerGameCalendar::Date{}, CalendarTime::MAX_DATE + 1, flags, ObjectCallbackMasks{}, height, 1, gen_amount, {}}
/* Climates
* T = Temperate
* A = Sub-Arctic
* S = Sub-Tropic
* Y = Toyland */
#define T 1
#define A 2
#define S 4
#define Y 8
#define T LandscapeType::Temperate
#define A LandscapeType::Arctic
#define S LandscapeType::Tropic
#define Y LandscapeType::Toyland
/** 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),
M(STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER, 0x11, 0, 0, 10, LandscapeTypes({T,A,S }), 15, ObjectFlags({ObjectFlag::CannotRemove, ObjectFlag::OnlyInScenedit})),
M(STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE, 0x11, 0, 0, 8, LandscapeTypes({T,A }), 8, ObjectFlags({ObjectFlag::CannotRemove, ObjectFlag::OnlyInScenedit, ObjectFlag::ScaleByWater})),
M(STR_TOWN_BUILDING_NAME_STATUE_1, 0x11, 0, 0, 5, LandscapeTypes({T,S,A,Y}), 0, ObjectFlags({ObjectFlag::CannotRemove, ObjectFlag::OnlyInGame, ObjectFlag::OnlyInScenedit})), // Yes, we disallow building this everywhere. Happens in "special" case!
M(STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND, 0x11, 10, 10, 0, LandscapeTypes({T,S,A,Y}), 0, ObjectFlags({ObjectFlag::Autoremove, ObjectFlag::OnlyInGame, ObjectFlag::ClearIncome, ObjectFlag::HasNoFoundation})), // 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, LandscapeTypes({T,S,A,Y}), 0, ObjectFlags({ObjectFlag::CannotRemove, ObjectFlag::OnlyInGame})),
};
#undef M

View File

@@ -7,8 +7,6 @@
/** @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) */

View File

@@ -60,10 +60,10 @@ static const RailTypeInfo _original_railtypes[] = {
SPR_RAIL_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_RAIL | RAILTYPES_ELECTRIC,
{RAILTYPE_RAIL, RAILTYPE_ELECTRIC},
/* Compatible railtypes */
RAILTYPES_RAIL | RAILTYPES_ELECTRIC,
{RAILTYPE_RAIL, RAILTYPE_ELECTRIC},
/* bridge offset */
0,
@@ -75,7 +75,7 @@ static const RailTypeInfo _original_railtypes[] = {
0,
/* flags */
RTFB_NONE,
{},
/* cost multiplier */
8,
@@ -102,16 +102,17 @@ static const RailTypeInfo _original_railtypes[] = {
CalendarTime::INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
{},
/* introduction rail types */
RAILTYPES_RAIL,
{RAILTYPE_RAIL},
/* sort order */
0 << 4 | 7,
{ nullptr },
{ nullptr },
{},
},
/** Electrified railway */
@@ -161,10 +162,10 @@ static const RailTypeInfo _original_railtypes[] = {
SPR_RAIL_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_ELECTRIC,
{RAILTYPE_ELECTRIC},
/* Compatible railtypes */
RAILTYPES_ELECTRIC | RAILTYPES_RAIL,
{RAILTYPE_RAIL, RAILTYPE_ELECTRIC},
/* bridge offset */
0,
@@ -176,7 +177,7 @@ static const RailTypeInfo _original_railtypes[] = {
0,
/* flags */
RTFB_CATENARY,
{RailTypeFlag::Catenary},
/* cost multiplier */
12,
@@ -203,16 +204,17 @@ static const RailTypeInfo _original_railtypes[] = {
CalendarTime::INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
{},
/* introduction rail types */
RAILTYPES_ELECTRIC,
{RAILTYPE_ELECTRIC},
/* sort order */
1 << 4 | 7,
{ nullptr },
{ nullptr },
{},
},
/** Monorail */
@@ -258,10 +260,10 @@ static const RailTypeInfo _original_railtypes[] = {
SPR_MONO_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_MONO,
{RAILTYPE_MONO},
/* Compatible Railtypes */
RAILTYPES_MONO,
{RAILTYPE_MONO},
/* bridge offset */
16,
@@ -273,7 +275,7 @@ static const RailTypeInfo _original_railtypes[] = {
1,
/* flags */
RTFB_NONE,
{},
/* cost multiplier */
16,
@@ -300,16 +302,17 @@ static const RailTypeInfo _original_railtypes[] = {
CalendarTime::INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
{},
/* introduction rail types */
RAILTYPES_MONO,
{RAILTYPE_MONO},
/* sort order */
2 << 4 | 7,
{ nullptr },
{ nullptr },
{},
},
/** Maglev */
@@ -355,10 +358,10 @@ static const RailTypeInfo _original_railtypes[] = {
SPR_MGLV_SNOW_OFFSET,
/* Powered railtypes */
RAILTYPES_MAGLEV,
{RAILTYPE_MAGLEV},
/* Compatible Railtypes */
RAILTYPES_MAGLEV,
{RAILTYPE_MAGLEV},
/* bridge offset */
24,
@@ -370,7 +373,7 @@ static const RailTypeInfo _original_railtypes[] = {
2,
/* flags */
RTFB_NONE,
{},
/* cost multiplier */
24,
@@ -397,16 +400,17 @@ static const RailTypeInfo _original_railtypes[] = {
CalendarTime::INVALID_DATE,
/* railtypes required for this to be introduced */
RAILTYPES_NONE,
{},
/* introduction rail types */
RAILTYPES_MAGLEV,
{RAILTYPE_MAGLEV},
/* sort order */
3 << 4 | 7,
{ nullptr },
{ nullptr },
{},
},
};

View File

@@ -8,31 +8,26 @@
/** @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_t)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[] = {
static const DrawTileSpriteSpan _road_depot[] = {
{ {0xA4A, PAL_NONE}, _road_depot_NE },
{ {0xA4A, PAL_NONE}, _road_depot_SE },
{ {0xA4A, PAL_NONE}, _road_depot_SW },
@@ -46,55 +41,49 @@ static const DrawTileSeqStruct _crossing_layout_ALL[] = {
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 = {
static const DrawTileSpriteSpan _crossing_layout = {
{0, PAL_NONE}, _crossing_layout_ALL
};
static const DrawTileSeqStruct _crossing_layout_SW_ALL[] = {
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_SW = {
static const DrawTileSpriteSpan _crossing_layout_SW = {
{0, PAL_NONE}, _crossing_layout_SW_ALL
};
static const DrawTileSeqStruct _crossing_layout_NW_ALL[] = {
TILE_SEQ_LINE(2, PAL_NONE, 0, 0, 3, 3)
TILE_SEQ_LINE(6, PAL_NONE, 13, 0, 3, 3)
TILE_SEQ_END()
};
static const DrawTileSprites _crossing_layout_NW = {
static const DrawTileSpriteSpan _crossing_layout_NW = {
{0, PAL_NONE}, _crossing_layout_NW_ALL
};
static const DrawTileSeqStruct _crossing_layout_NE_ALL[] = {
TILE_SEQ_LINE(2, PAL_NONE, 0, 0, 3, 3)
TILE_SEQ_LINE(4, PAL_NONE, 0, 13, 3, 3)
TILE_SEQ_END()
};
static const DrawTileSprites _crossing_layout_NE = {
static const DrawTileSpriteSpan _crossing_layout_NE = {
{0, PAL_NONE}, _crossing_layout_NE_ALL
};
static const DrawTileSeqStruct _crossing_layout_SE_ALL[] = {
TILE_SEQ_LINE(4, PAL_NONE, 0, 13, 3, 3)
TILE_SEQ_LINE(8, PAL_NONE, 13, 13, 3, 3)
TILE_SEQ_END()
};
static const DrawTileSprites _crossing_layout_SE = {
static const DrawTileSpriteSpan _crossing_layout_SE = {
{0, PAL_NONE}, _crossing_layout_SE_ALL
};
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END
static const SpriteID _road_tile_sprites_1[16] = {

View File

@@ -58,10 +58,10 @@ static const RoadTypeInfo _original_roadtypes[] = {
},
/* Powered roadtypes */
ROADTYPES_ROAD,
{ROADTYPE_ROAD},
/* flags */
ROTFB_TOWN_BUILD,
{RoadTypeFlag::TownBuild},
/* cost multiplier */
8,
@@ -85,16 +85,17 @@ static const RoadTypeInfo _original_roadtypes[] = {
CalendarTime::MIN_DATE,
/* roadtypes required for this to be introduced */
ROADTYPES_NONE,
{},
/* introduction road types */
ROADTYPES_ROAD,
{ROADTYPE_ROAD},
/* sort order */
0x07,
{ nullptr },
{ nullptr },
{},
},
/* Electrified Tram */
@@ -138,10 +139,10 @@ static const RoadTypeInfo _original_roadtypes[] = {
},
/* Powered roadtypes */
ROADTYPES_TRAM,
{ROADTYPE_TRAM},
/* flags */
ROTFB_CATENARY | ROTFB_NO_HOUSES,
{RoadTypeFlag::Catenary, RoadTypeFlag::NoHouses},
/* cost multiplier */
16,
@@ -165,16 +166,17 @@ static const RoadTypeInfo _original_roadtypes[] = {
CalendarTime::INVALID_DATE,
/* roadtypes required for this to be introduced */
ROADTYPES_NONE,
{},
/* introduction road types */
ROADTYPES_TRAM,
{ROADTYPE_TRAM},
/* sort order */
0x17,
{ nullptr },
{ nullptr },
{},
},
};

View File

@@ -58,8 +58,8 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd);
/* Macros for various objects to go in the configuration file.
* This section is for global variables */
#define SDTG_VAR(name, type, flags, var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\
NSD(Int, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook)
#define SDTG_VAR(name, type, flags, var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, get_range_hook, from, to, cat, extra, startup)\
NSD(Int, SLEG_GENERAL(name, SL_VAR, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, get_range_hook)
#define SDTG_BOOL(name, flags, var, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\
NSD(Bool, SLEG_GENERAL(name, SL_VAR, var, SLE_BOOL, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook)
@@ -78,8 +78,8 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd);
/* Macros for various objects to go in the configuration file.
* This section is for structures where their various members are saved */
#define SDT_VAR(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\
NSD(Int, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook)
#define SDT_VAR(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, get_range_hook, from, to, cat, extra, startup)\
NSD(Int, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, get_range_hook)
#define SDT_VAR_NAME(base, var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup, name)\
NSD(Int, SLE_GENERAL_NAME(SL_VAR, name, base, var, type, 1, from, to, extra), flags, startup, def, min, max, interval, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook)
@@ -100,8 +100,8 @@ static StringID SettingHelpWallclock(const IntSettingDesc &sd);
NSD(ManyOfMany, SLE_GENERAL(SL_VAR, base, var, type, 1, from, to, extra), flags, startup, def, str, strhelp, strval, cat, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, full, nullptr)
#define SDTC_VAR(var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\
SDTG_VAR(#var, type, flags, _settings_client.var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)
#define SDTC_VAR(var, type, flags, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, get_range_hook, from, to, cat, extra, startup)\
SDTG_VAR(#var, type, flags, _settings_client.var, def, min, max, interval, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, get_range_hook, from, to, cat, extra, startup)
#define SDTC_BOOL(var, flags, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)\
SDTG_BOOL(#var, flags, _settings_client.var, def, str, strhelp, strval, pre_check, post_callback, get_title_hook, get_help_hook, set_value_dparams_hook, get_def_hook, from, to, cat, extra, startup)

View File

@@ -11,22 +11,23 @@
static void UpdateAllServiceInterval(int32_t new_value);
static bool CanUpdateServiceInterval(VehicleType type, int32_t &new_value);
static void UpdateServiceInterval(VehicleType type, int32_t new_value);
static void SettingsValueAbsolute(const IntSettingDesc &sd, uint first_param, int32_t value);
static void ServiceIntervalSettingsValueText(const IntSettingDesc &sd, uint first_param, int32_t value);
static int32_t GetDefaultServiceInterval(VehicleType type);
static std::pair<StringParameter, StringParameter> SettingsValueAbsolute(const IntSettingDesc &sd, int32_t value);
static std::pair<StringParameter, StringParameter> ServiceIntervalSettingsValueText(const IntSettingDesc &sd, int32_t value);
static int32_t GetDefaultServiceInterval(const IntSettingDesc &sd, VehicleType type);
static std::tuple<int32_t, uint32_t> GetServiceIntervalRange(const IntSettingDesc &sd);
static const SettingVariant _company_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(CompanySettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(CompanySettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(CompanySettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(CompanySettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CompanySettings.$var exceeds storage size");
[defaults]
flags = SF_PER_COMPANY
flags = SettingFlag::PerCompany
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -37,6 +38,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -56,7 +58,7 @@ cat = SC_BASIC
[SDT_VAR]
var = engine_renew_months
type = SLE_INT16
flags = SF_PER_COMPANY
flags = SettingFlag::PerCompany
def = 6
min = -12
max = 12
@@ -68,7 +70,7 @@ val_cb = SettingsValueAbsolute
[SDT_VAR]
var = engine_renew_money
type = SLE_UINT
flags = SF_PER_COMPANY | SF_GUI_CURRENCY
flags = SettingFlag::PerCompany, SettingFlag::GuiCurrency
def = 100000
min = 0
max = 2000000
@@ -90,7 +92,7 @@ post_cb = UpdateAllServiceInterval
[SDT_VAR]
var = vehicle.servint_trains
type = SLE_UINT16
flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::PerCompany, SettingFlag::GuiZeroIsSpecial
def = DEF_SERVINT_DAYS_TRAINS
min = MIN_SERVINT_MINUTES
max = MAX_SERVINT_DAYS
@@ -100,13 +102,14 @@ strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS
pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); }
post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); }
def_cb = []() { return GetDefaultServiceInterval(VEH_TRAIN); }
def_cb = [](auto &sd) { return GetDefaultServiceInterval(sd, VEH_TRAIN); }
val_cb = ServiceIntervalSettingsValueText
range_cb = GetServiceIntervalRange
[SDT_VAR]
var = vehicle.servint_roadveh
type = SLE_UINT16
flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::PerCompany, SettingFlag::GuiZeroIsSpecial
def = DEF_SERVINT_DAYS_ROADVEH
min = MIN_SERVINT_MINUTES
max = MAX_SERVINT_DAYS
@@ -116,13 +119,14 @@ strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS
pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); }
post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); }
def_cb = []() { return GetDefaultServiceInterval(VEH_ROAD); }
def_cb = [](auto &sd) { return GetDefaultServiceInterval(sd, VEH_ROAD); }
val_cb = ServiceIntervalSettingsValueText
range_cb = GetServiceIntervalRange
[SDT_VAR]
var = vehicle.servint_ships
type = SLE_UINT16
flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::PerCompany, SettingFlag::GuiZeroIsSpecial
def = DEF_SERVINT_DAYS_SHIPS
min = MIN_SERVINT_MINUTES
max = MAX_SERVINT_DAYS
@@ -132,13 +136,14 @@ strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS
pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); }
post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); }
def_cb = []() { return GetDefaultServiceInterval(VEH_SHIP); }
def_cb = [](auto &sd) { return GetDefaultServiceInterval(sd, VEH_SHIP); }
val_cb = ServiceIntervalSettingsValueText
range_cb = GetServiceIntervalRange
[SDT_VAR]
var = vehicle.servint_aircraft
type = SLE_UINT16
flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::PerCompany, SettingFlag::GuiZeroIsSpecial
def = DEF_SERVINT_DAYS_AIRCRAFT
min = MIN_SERVINT_MINUTES
max = MAX_SERVINT_DAYS
@@ -148,5 +153,6 @@ strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT
strval = STR_CONFIG_SETTING_SERVINT_VALUE_DAYS
pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); }
post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); }
def_cb = []() { return GetDefaultServiceInterval(VEH_AIRCRAFT); }
def_cb = [](auto &sd) { return GetDefaultServiceInterval(sd, VEH_AIRCRAFT); }
val_cb = ServiceIntervalSettingsValueText
range_cb = GetServiceIntervalRange

View File

@@ -11,14 +11,14 @@ static const SettingVariant _currency_settings_table[] = {
[post-amble]
};
[templates]
SDT_VAR = SDT_VAR (CurrencySpec, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_SSTR = SDT_SSTR(CurrencySpec, $var, $type, $flags, $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR (CurrencySpec, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
SDT_SSTR = SDT_SSTR(CurrencySpec, $var, $type, SettingFlags({$flags}), $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CurrencySpec.$var exceeds storage size");
[defaults]
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -29,6 +29,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION

View File

@@ -20,16 +20,16 @@ static const SettingVariant _difficulty_settings_table[] = {
[post-amble]
};
[templates]
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR (GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, SettingFlags({$flags}), $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR (GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -40,6 +40,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -83,7 +84,7 @@ max = 3
var = difficulty.number_towns
type = SLE_UINT8
from = SLV_97
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = 2
min = 0
max = 4
@@ -95,7 +96,7 @@ cat = SC_BASIC
var = difficulty.industry_density
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = ID_NORMAL
min = 0
max = ID_END - 1
@@ -109,7 +110,7 @@ cat = SC_BASIC
var = difficulty.max_loan
type = SLE_UINT32
from = SLV_97
flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::NewgameOnly, SettingFlag::SceneditToo, SettingFlag::GuiCurrency, SettingFlag::GuiZeroIsSpecial
def = 300000
min = LOAN_INTERVAL
max = MAX_LOAN_LIMIT
@@ -124,7 +125,7 @@ cat = SC_BASIC
var = difficulty.initial_interest
type = SLE_UINT8
from = SLV_97
flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO
flags = SettingFlag::NewgameOnly, SettingFlag::SceneditToo
def = 2
min = 2
max = 4
@@ -137,7 +138,7 @@ strval = STR_CONFIG_SETTING_PERCENTAGE
var = difficulty.vehicle_costs
type = SLE_UINT8
from = SLV_97
flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN
flags = SettingFlag::NewgameOnly, SettingFlag::SceneditToo, SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -151,7 +152,7 @@ cat = SC_BASIC
var = difficulty.competitor_speed
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 2
min = 0
max = 4
@@ -174,7 +175,7 @@ max = 2
var = difficulty.vehicle_breakdowns
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 1
min = 0
max = 2
@@ -188,7 +189,7 @@ cat = SC_BASIC
var = difficulty.subsidy_multiplier
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 2
min = 0
max = 3
@@ -201,7 +202,7 @@ strval = STR_SUBSIDY_X1_5
var = difficulty.subsidy_duration
type = SLE_UINT16
from = SLV_CUSTOM_SUBSIDY_DURATION
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
def = 1
min = 0
max = 5000
@@ -215,7 +216,7 @@ strval = STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE
var = difficulty.construction_cost
type = SLE_UINT8
from = SLV_97
flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN
flags = SettingFlag::NewgameOnly, SettingFlag::SceneditToo, SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -229,7 +230,7 @@ cat = SC_BASIC
var = difficulty.terrain_type
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 1
min = 0
max = 5
@@ -243,7 +244,7 @@ cat = SC_BASIC
var = difficulty.quantity_sea_lakes
type = SLE_UINT8
from = SLV_97
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = 0
min = 0
max = 4
@@ -277,7 +278,7 @@ cat = SC_BASIC
var = difficulty.town_council_tolerance
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 0
min = 0
max = 3
@@ -291,7 +292,7 @@ post_cb = DifficultyNoiseChange
name = ""diff_level""
var = _old_diff_level
type = SLE_UINT8
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
from = SLV_97
to = SLV_178
def = 3
@@ -301,6 +302,7 @@ cat = SC_BASIC
[SDT_BOOL]
var = difficulty.infinite_money
flags = SettingFlag::Sandbox
def = false
str = STR_CONFIG_SETTING_INFINITE_MONEY
strhelp = STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT

View File

@@ -12,18 +12,20 @@ static void TownFoundingChanged(int32_t new_value);
static void ChangeTimekeepingUnits(int32_t new_value);
static void ChangeMinutesPerYear(int32_t new_value);
static constexpr std::initializer_list<const char*> _place_houses{"forbidden", "allowed", "fully constructed"};
static const SettingVariant _economy_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR (GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR (GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -34,6 +36,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -46,7 +49,7 @@ startup = false
var = economy.town_layout
type = SLE_UINT8
from = SLV_59
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = TL_ORIGINAL
min = TL_BEGIN
max = NUM_TLS - 1
@@ -59,7 +62,7 @@ post_cb = TownFoundingChanged
[SDT_BOOL]
var = economy.allow_town_roads
from = SLV_113
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
@@ -68,7 +71,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
var = economy.found_town
type = SLE_UINT8
from = SLV_128
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = TF_FORBIDDEN
min = TF_BEGIN
max = TF_END - 1
@@ -79,10 +82,23 @@ strval = STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN
post_cb = TownFoundingChanged
cat = SC_BASIC
[SDT_VAR]
var = economy.place_houses
type = SLE_UINT8
flags = SettingFlag::GuiDropdown
def = PH_FORBIDDEN
min = PH_FORBIDDEN
max = PH_ALLOWED_CONSTRUCTED
full = _place_houses
str = STR_CONFIG_SETTING_HOUSE_PLACER
strhelp = STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT
strval = STR_CONFIG_SETTING_HOUSE_PLACER_FORBIDDEN
cat = SC_ADVANCED
[SDT_BOOL]
var = economy.allow_town_level_crossings
from = SLV_143
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS
strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT
@@ -91,7 +107,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT
var = economy.town_cargogen_mode
type = SLE_UINT8
from = SLV_TOWN_CARGOGEN
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = TCGM_BITCOUNT
min = TCGM_BEGIN
max = TCGM_END - 1
@@ -104,7 +120,7 @@ cat = SC_ADVANCED
[SDT_BOOL]
var = economy.station_noise_level
from = SLV_96
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = false
str = STR_CONFIG_SETTING_NOISE_LEVEL
strhelp = STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT
@@ -112,7 +128,7 @@ post_cb = [](auto new_value) { InvalidateWindowClassesData(WC_TOWN_VIEW, new_va
[SDT_BOOL]
var = economy.inflation
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = false
str = STR_CONFIG_SETTING_INFLATION
strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT
@@ -172,12 +188,13 @@ cat = SC_BASIC
[SDT_VAR]
var = economy.type
type = SLE_UINT8
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = ET_SMOOTH
min = ET_BEGIN
max = ET_END - 1
str = STR_CONFIG_SETTING_ECONOMY_TYPE
strhelp = STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT
help_cb = SettingHelpWallclock
strval = STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL
post_cb = [](auto) { InvalidateWindowClassesData(WC_INDUSTRY_VIEW); }
cat = SC_BASIC
@@ -198,7 +215,7 @@ cat = SC_EXPERT
var = economy.town_growth_rate
type = SLE_UINT8
from = SLV_54
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 2
min = 0
max = 4
@@ -210,7 +227,7 @@ strval = STR_CONFIG_SETTING_TOWN_GROWTH_NONE
var = economy.larger_towns
type = SLE_UINT8
from = SLV_54
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
def = 4
min = 0
max = 255
@@ -292,7 +309,7 @@ cat = SC_BASIC
[SDT_VAR]
var = economy.timekeeping_units
type = SLE_UINT8
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_SCENEDIT_TOO
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly, SettingFlag::SceneditToo
def = TKU_CALENDAR
min = TKU_CALENDAR
max = TKU_WALLCLOCK
@@ -305,7 +322,7 @@ cat = SC_BASIC
[SDT_VAR]
var = economy.minutes_per_calendar_year
type = SLE_UINT16
flags = SF_GUI_0_IS_SPECIAL | SF_NO_NETWORK
flags = SettingFlag::GuiZeroIsSpecial, SettingFlag::NoNetwork
def = CalendarTime::DEF_MINUTES_PER_YEAR
min = CalendarTime::FROZEN_MINUTES_PER_YEAR
max = CalendarTime::MAX_MINUTES_PER_YEAR
@@ -320,7 +337,7 @@ cat = SC_BASIC
[SDT_VAR]
var = economy.town_cargo_scale
type = SLE_UINT16
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = DEF_CARGO_SCALE
min = MIN_CARGO_SCALE
max = MAX_CARGO_SCALE
@@ -333,7 +350,7 @@ cat = SC_BASIC
[SDT_VAR]
var = economy.industry_cargo_scale
type = SLE_UINT16
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = DEF_CARGO_SCALE
min = MIN_CARGO_SCALE
max = MAX_CARGO_SCALE

View File

@@ -26,12 +26,12 @@ static const SettingVariant _game_settings_table[] = {
[post-amble]
};
[templates]
SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_BOOL = SDTG_BOOL($name, SettingFlags({$flags}), $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, SettingFlags({$flags}), $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
@@ -39,7 +39,7 @@ SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$va
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -50,6 +50,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -66,7 +67,7 @@ strhelp = STR_CONFIG_SETTING_NOSERVICE_HELPTEXT
[SDT_BOOL]
var = order.improved_load
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
cat = SC_EXPERT
@@ -92,13 +93,13 @@ cat = SC_EXPERT
[SDT_BOOL]
var = order.gradual_loading
from = SLV_40
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
cat = SC_EXPERT
[SDT_BOOL]
var = station.never_expire_airports
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = false
str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT
@@ -143,7 +144,7 @@ post_cb = [](auto) { CloseWindowById(WC_SELECT_STATION, 0); }
var = vehicle.road_side
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN | SF_NO_NETWORK
flags = SettingFlag::GuiDropdown, SettingFlag::NoNetwork
def = 1
max = 1
full = _roadsides
@@ -156,7 +157,7 @@ cat = SC_BASIC
[SDT_VAR]
var = vehicle.train_acceleration_model
type = SLE_UINT8
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 1
min = 0
max = 1
@@ -170,7 +171,7 @@ post_cb = TrainAccelerationModelChanged
var = vehicle.roadveh_acceleration_model
type = SLE_UINT8
from = SLV_139
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 1
min = 0
max = 1
@@ -225,7 +226,7 @@ cat = SC_BASIC
var = vehicle.smoke_amount
type = SLE_UINT8
from = SLV_145
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 2
min = 0
max = 2
@@ -235,7 +236,7 @@ strval = STR_CONFIG_SETTING_NONE
[SDT_BOOL]
var = vehicle.never_expire_vehicles
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = false
str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT
@@ -290,7 +291,7 @@ cat = SC_BASIC
[SDT_BOOL]
var = vehicle.wagon_speed_limits
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS
strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT
@@ -299,7 +300,7 @@ post_cb = UpdateConsists
[SDT_BOOL]
var = vehicle.disable_elrails
from = SLV_38
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = false
str = STR_CONFIG_SETTING_DISABLE_ELRAILS
strhelp = STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT
@@ -310,7 +311,7 @@ cat = SC_EXPERT
var = vehicle.freight_trains
type = SLE_UINT8
from = SLV_39
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = 1
min = 1
max = 255
@@ -324,7 +325,7 @@ post_cb = UpdateConsists
var = vehicle.plane_speed
type = SLE_UINT8
from = SLV_90
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = 4
min = 1
max = 4
@@ -335,7 +336,7 @@ strval = STR_CONFIG_SETTING_PLANE_SPEED_VALUE
[SDT_BOOL]
var = vehicle.dynamic_engines
from = SLV_95
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
pre_cb = CheckDynamicEngines
cat = SC_EXPERT
@@ -344,7 +345,7 @@ cat = SC_EXPERT
var = vehicle.plane_crashes
type = SLE_UINT8
from = SLV_138
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 2
min = 0
max = 2
@@ -366,7 +367,7 @@ cat = SC_EXPERT
[SDTG_BOOL]
name = ""vehicle.servint_ispercent""
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
var = _old_vds.servint_ispercent
def = false
to = SLV_120
@@ -374,7 +375,7 @@ to = SLV_120
[SDTG_VAR]
name = ""vehicle.servint_trains""
type = SLE_UINT16
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
var = _old_vds.servint_trains
def = 150
min = 5
@@ -384,7 +385,7 @@ to = SLV_120
[SDTG_VAR]
name = ""vehicle.servint_roadveh""
type = SLE_UINT16
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
var = _old_vds.servint_roadveh
def = 150
min = 5
@@ -394,7 +395,7 @@ to = SLV_120
[SDTG_VAR]
name = ""vehicle.servint_ships""
type = SLE_UINT16
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
var = _old_vds.servint_ships
def = 360
min = 5
@@ -404,7 +405,7 @@ to = SLV_120
[SDTG_VAR]
name = ""vehicle.servint_aircraft""
type = SLE_UINT16
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
var = _old_vds.servint_aircraft
def = 150
min = 5

View File

@@ -25,16 +25,16 @@ static const SettingVariant _gui_settings_table[] = {
[post-amble]
};
[templates]
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_VAR = SDTC_VAR( $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -45,6 +45,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -56,21 +57,21 @@ startup = false
[SDTC_VAR]
var = gui.autosave_interval
type = SLE_UINT32
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 10
min = 0
max = 1440
[SDTC_BOOL]
var = gui.threaded_saves
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
cat = SC_EXPERT
[SDTC_OMANY]
var = gui.date_format_in_default_names
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _savegame_date
@@ -80,7 +81,7 @@ strval = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG
[SDTC_BOOL]
var = gui.show_finances
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SHOWFINANCES
str_cb = SettingTitleWallclock
@@ -91,7 +92,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.auto_scrolling
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 3
@@ -104,7 +105,7 @@ cat = SC_BASIC
ifdef = UNIX
var = gui.scroll_mode
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = VSM_MAP_RMB
min = VSM_VIEWPORT_RMB_FIXED
max = VSM_MAP_LMB
@@ -117,7 +118,7 @@ cat = SC_BASIC
ifndef = UNIX
var = gui.scroll_mode
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = VSM_VIEWPORT_RMB_FIXED
min = VSM_VIEWPORT_RMB_FIXED
max = VSM_MAP_LMB
@@ -128,7 +129,7 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.smooth_scroll
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SMOOTH_SCROLLING
strhelp = STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT
@@ -136,7 +137,7 @@ strhelp = STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT
[SDTC_OMANY]
var = gui.right_click_wnd_close
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = RCC_NO
min = RCC_NO
max = RCC_YES_EXCEPT_STICKY
@@ -151,7 +152,7 @@ cat = SC_BASIC
ifdef = __APPLE__
var = gui.right_mouse_btn_emulation
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -162,7 +163,7 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.measure_tooltip
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_MEASURE_TOOLTIP
strhelp = STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT
@@ -171,7 +172,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.errmsg_duration
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 5
min = 0
max = 20
@@ -182,7 +183,7 @@ strval = STR_CONFIG_SETTING_SECONDS_VALUE
[SDTC_VAR]
var = gui.hover_delay_ms
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial
def = 250
min = 50
max = 6000
@@ -194,7 +195,7 @@ strval = STR_CONFIG_SETTING_HOVER_DELAY_VALUE
[SDTC_OMANY]
var = gui.osk_activation
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
str = STR_CONFIG_SETTING_OSK_ACTIVATION
strhelp = STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT
strval = STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED
@@ -207,7 +208,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.toolbar_pos
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
min = 0
max = 2
@@ -220,7 +221,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.statusbar_pos
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
min = 0
max = 2
@@ -233,7 +234,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.window_snap_radius
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial
def = 10
min = 1
max = 32
@@ -245,7 +246,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.window_soft_limit
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial
def = 20
min = 5
max = 255
@@ -258,7 +259,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.zoom_min
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = ZOOM_LVL_MIN
min = ZOOM_LVL_MIN
max = ZOOM_LVL_NORMAL
@@ -271,7 +272,7 @@ startup = true
[SDTC_VAR]
var = gui.zoom_max
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = ZOOM_LVL_MAX
min = ZOOM_LVL_OUT_2X
max = ZOOM_LVL_MAX
@@ -284,7 +285,7 @@ startup = true
[SDTC_VAR]
var = gui.sprite_zoom_min
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = ZOOM_LVL_MIN
min = ZOOM_LVL_MIN
max = ZOOM_LVL_NORMAL
@@ -295,7 +296,7 @@ post_cb = SpriteZoomMinChanged
[SDTC_BOOL]
var = gui.population_in_label
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_POPULATION_IN_LABEL
strhelp = STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT
@@ -303,7 +304,7 @@ post_cb = [](auto) { UpdateAllTownVirtCoords(); }
[SDTC_BOOL]
var = gui.link_terraform_toolbar
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR
strhelp = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT
@@ -311,7 +312,7 @@ strhelp = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT
[SDTC_VAR]
var = gui.smallmap_land_colour
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -323,7 +324,7 @@ post_cb = RedrawSmallmap
[SDTC_VAR]
var = gui.linkgraph_colours
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 3
@@ -336,7 +337,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.liveries
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = LIT_ALL
min = LIT_NONE
max = LIT_ALL
@@ -348,7 +349,7 @@ post_cb = InvalidateCompanyLiveryWindow
[SDTC_VAR]
var = gui.starting_colour
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = COLOUR_END
min = 0
max = COLOUR_END
@@ -359,7 +360,7 @@ strval = STR_COLOUR_DARK_BLUE
[SDTC_VAR]
var = gui.starting_colour_secondary
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = COLOUR_END
min = 0
max = COLOUR_END
@@ -369,7 +370,7 @@ strval = STR_COLOUR_SECONDARY_DARK_BLUE
[SDTC_BOOL]
var = gui.auto_remove_signals
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS
strhelp = STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT
@@ -377,7 +378,7 @@ cat = SC_ADVANCED
[SDTC_BOOL]
var = gui.prefer_teamchat
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_PREFER_TEAMCHAT
strhelp = STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT
@@ -386,7 +387,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.scrollwheel_scrolling
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = SWS_ZOOM_MAP
min = SWS_ZOOM_MAP
max = SWS_OFF
@@ -398,7 +399,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.scrollwheel_multiplier
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 5
min = 1
max = 15
@@ -410,7 +411,7 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.pause_on_newgame
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME
strhelp = STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT
@@ -419,7 +420,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.advanced_vehicle_list
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
min = 0
max = 2
@@ -430,7 +431,7 @@ strval = STR_CONFIG_SETTING_COMPANIES_OFF
[SDTC_VAR]
var = gui.timetable_mode
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -443,7 +444,7 @@ cat = SC_ADVANCED
[SDTC_BOOL]
var = gui.timetable_arrival_departure
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE
strhelp = STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT
@@ -451,7 +452,7 @@ post_cb = [](auto) { InvalidateWindowClassesData(WC_VEHICLE_TIMETABLE, VIWD_MOD
[SDTC_BOOL]
var = gui.quick_goto
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_QUICKGOTO
strhelp = STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT
@@ -460,7 +461,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.loading_indicators
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
min = 0
max = 2
@@ -473,7 +474,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.default_rail_type
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -485,7 +486,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.signal_gui_mode
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 1
@@ -498,7 +499,7 @@ cat = SC_ADVANCED
[SDTC_VAR]
var = gui.default_signal_type
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 5
min = 0
max = 5
@@ -506,7 +507,7 @@ max = 5
[SDTC_VAR]
var = gui.coloured_news_year
type = SLE_INT32
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 2000
min = CalendarTime::MIN_YEAR
max = CalendarTime::MAX_YEAR
@@ -519,7 +520,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.cycle_signal_types
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = SIGNAL_CYCLE_GROUP
min = SIGNAL_CYCLE_GROUP
max = SIGNAL_CYCLE_ALL
@@ -532,7 +533,7 @@ cat = SC_ADVANCED
[SDTC_VAR]
var = gui.drag_signals_density
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 4
min = 1
max = 20
@@ -544,7 +545,7 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.drag_signals_fixed_distance
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE
strhelp = STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT
@@ -553,7 +554,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.semaphore_build_before
type = SLE_INT32
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 1950
min = CalendarTime::MIN_YEAR
max = CalendarTime::MAX_YEAR
@@ -565,7 +566,7 @@ post_cb = ResetSignalVariant
[SDTC_BOOL]
var = gui.vehicle_income_warn
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_WARN_INCOME_LESS
strhelp = STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT
@@ -575,7 +576,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.order_review_system
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
min = 0
max = 2
@@ -586,21 +587,21 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.lost_vehicle_warn
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_WARN_LOST_VEHICLE
strhelp = STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT
[SDTC_BOOL]
var = gui.old_vehicle_warn
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_WARN_OLD_VEHICLE
strhelp = STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT
[SDTC_BOOL]
var = gui.new_nonstop
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT
strhelp = STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT
@@ -609,7 +610,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.stop_location
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
min = 0
max = 2
@@ -622,45 +623,45 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.keep_all_autosave
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
[SDTC_BOOL]
var = gui.autosave_on_exit
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
cat = SC_BASIC
[SDTC_BOOL]
var = gui.autosave_on_network_disconnect
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
cat = SC_EXPERT
[SDTC_VAR]
var = gui.max_num_autosaves
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 16
min = 0
max = 255
[SDTC_BOOL]
var = gui.auto_euro
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
[SDTC_VAR]
var = gui.news_message_timeout
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 2
min = 1
max = 255
[SDTC_BOOL]
var = gui.show_track_reservation
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION
strhelp = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT
@@ -670,7 +671,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.station_numtracks
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 1
min = 1
max = 7
@@ -678,7 +679,7 @@ max = 7
[SDTC_VAR]
var = gui.station_platlength
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 5
min = 1
max = 7
@@ -686,19 +687,19 @@ cat = SC_BASIC
[SDTC_BOOL]
var = gui.station_dragdrop
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
cat = SC_BASIC
[SDTC_BOOL]
var = gui.station_show_coverage
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
cat = SC_BASIC
[SDTC_BOOL]
var = gui.persistent_buildingtools
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS
strhelp = STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT
@@ -707,7 +708,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.station_gui_group_order
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 3
min = 0
max = 5
@@ -716,7 +717,7 @@ interval = 1
[SDTC_VAR]
var = gui.station_gui_sort_by
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 0
min = 0
max = 3
@@ -725,7 +726,7 @@ interval = 1
[SDTC_VAR]
var = gui.station_gui_sort_order
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 0
min = 0
max = 1
@@ -734,7 +735,7 @@ interval = 1
[SDTC_VAR]
var = gui.missing_strings_threshold
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 25
min = 1
max = UINT8_MAX
@@ -743,7 +744,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.graph_line_thickness
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 3
min = 1
max = 5
@@ -754,7 +755,7 @@ post_cb = [](auto) { MarkWholeScreenDirty(); }
[SDTC_BOOL]
var = gui.show_newgrf_name
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME
strhelp = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT
@@ -763,7 +764,7 @@ cat = SC_ADVANCED
[SDTC_BOOL]
var = gui.show_cargo_in_vehicle_lists
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
str = STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS
strhelp = STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT
@@ -774,19 +775,19 @@ cat = SC_ADVANCED
[SDTC_BOOL]
ifdef = DEDICATED
var = gui.show_date_in_logs
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
[SDTC_BOOL]
ifndef = DEDICATED
var = gui.show_date_in_logs
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
[SDTC_VAR]
var = gui.settings_restriction_mode
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 0
min = 0
max = 2
@@ -794,7 +795,7 @@ max = 2
[SDTC_VAR]
var = gui.developer
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 1
min = 0
max = 2
@@ -803,34 +804,34 @@ post_cb = [](auto) { DebugReconsiderSendRemoteMessages(); }
[SDTC_BOOL]
var = gui.newgrf_developer_tools
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
post_cb = InvalidateNewGRFChangeWindows
cat = SC_EXPERT
[SDTC_BOOL]
var = gui.ai_developer_tools
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
post_cb = [](auto) { InvalidateWindowClassesData(WC_GAME_OPTIONS); InvalidateWindowClassesData(WC_SCRIPT_DEBUG); InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); }
cat = SC_EXPERT
[SDTC_BOOL]
var = gui.scenario_developer
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
post_cb = InvalidateNewGRFChangeWindows
[SDTC_BOOL]
var = gui.newgrf_show_old_versions
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
cat = SC_EXPERT
[SDTC_VAR]
var = gui.newgrf_default_palette
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
min = 0
max = 1
@@ -840,7 +841,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.console_backlog_timeout
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 100
min = 10
max = 65500
@@ -848,7 +849,7 @@ max = 65500
[SDTC_VAR]
var = gui.console_backlog_length
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 100
min = 10
max = 65500
@@ -856,7 +857,7 @@ max = 65500
[SDTC_VAR]
var = gui.refresh_rate
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 60
min = 10
max = 1000
@@ -866,7 +867,7 @@ startup = true
[SDTC_VAR]
var = gui.fast_forward_speed_limit
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NO_NETWORK
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial, SettingFlag::NoNetwork
def = 2500
min = 0
max = 50000
@@ -879,7 +880,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = gui.network_chat_box_width_pct
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 40
min = 10
max = 100
@@ -888,7 +889,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.network_chat_box_height
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 25
min = 5
max = 255
@@ -897,7 +898,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = gui.network_chat_timeout
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 20
min = 1
max = 65535
@@ -905,7 +906,7 @@ cat = SC_EXPERT
[SDTC_BOOL]
var = gui.scale_bevels
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
post_cb = [](auto) { SetupWidgetDimensions(); ReInitAllWindows(true); }
cat = SC_BASIC

View File

@@ -12,13 +12,13 @@ static const SettingVariant _linkgraph_settings_table[] = {
[post-amble]
};
[templates]
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -29,6 +29,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -67,7 +68,7 @@ extra = offsetof(LinkGraphSettings, recalc_time)
var = linkgraph.distribution_pax
type = SLE_UINT8
from = SLV_183
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = DT_MANUAL
min = DT_MIN
max = DT_MAX
@@ -81,7 +82,7 @@ extra = offsetof(LinkGraphSettings, distribution_pax)
var = linkgraph.distribution_mail
type = SLE_UINT8
from = SLV_183
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = DT_MANUAL
min = DT_MIN
max = DT_MAX
@@ -95,7 +96,7 @@ extra = offsetof(LinkGraphSettings, distribution_mail)
var = linkgraph.distribution_armoured
type = SLE_UINT8
from = SLV_183
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = DT_MANUAL
min = DT_MIN
max = DT_MAX
@@ -109,7 +110,7 @@ extra = offsetof(LinkGraphSettings, distribution_armoured)
var = linkgraph.distribution_default
type = SLE_UINT8
from = SLV_183
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = DT_MANUAL
min = DT_BEGIN
max = DT_MAX_NONSYMMETRIC

View File

@@ -8,11 +8,11 @@
; in the savegame PATS chunk. These settings are not sync'd over the network.
[pre-amble]
static void SettingsValueVelocityUnit(const IntSettingDesc &sd, uint first_param, int32_t value);
static std::pair<StringParameter, StringParameter> SettingsValueVelocityUnit(const IntSettingDesc &sd, int32_t value);
uint8_t _old_units; ///< Old units from old savegames
static constexpr std::initializer_list<const char*> _locale_currencies{"GBP", "USD", "EUR", "JPY", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "TRY", "SKK", "BRL", "EEK", "LTL", "KRW", "ZAR", "custom", "GEL", "IRR", "RUB", "MXN", "NTD", "CNY", "HKD", "INR", "IDR", "MYR", "LVL", "PTE"};
static constexpr std::initializer_list<const char*> _locale_currencies{"GBP", "USD", "EUR", "JPY", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "TRY", "SKK", "BRL", "EEK", "LTL", "KRW", "ZAR", "custom", "GEL", "IRR", "RUB", "MXN", "NTD", "CNY", "HKD", "INR", "IDR", "MYR", "LVL", "PTE", "UAH"};
static constexpr std::initializer_list<const char*> _locale_units{"imperial", "metric", "si", "gameunits", "knots"};
static_assert(_locale_currencies.size() == CURRENCY_END);
@@ -21,16 +21,16 @@ static const SettingVariant _locale_settings_table[] = {
[post-amble]
};
[templates]
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_SSTR = SDT_SSTR(GameSettings, $var, $type, $flags, $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, SettingFlags({$flags}), $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_SSTR = SDT_SSTR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -53,7 +53,7 @@ startup = false
var = locale.currency
type = SLE_UINT8
from = SLV_97
flags = SF_NO_NETWORK_SYNC
flags = SettingFlag::NoNetworkSync
def = 0
max = CURRENCY_END - 1
full = _locale_currencies
@@ -66,7 +66,7 @@ var = _old_units
type = SLE_UINT8
from = SLV_97
to = SLV_184
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
def = 1
max = 2
full = _locale_units
@@ -77,7 +77,7 @@ cat = SC_BASIC
var = locale.units_velocity
type = SLE_UINT8
from = SLV_184
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 4
full = _locale_units
@@ -91,7 +91,7 @@ val_cb = SettingsValueVelocityUnit
var = locale.units_velocity_nautical
type = SLE_UINT8
from = SLV_VELOCITY_NAUTICAL
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 4
full = _locale_units
@@ -105,7 +105,7 @@ val_cb = SettingsValueVelocityUnit
var = locale.units_power
type = SLE_UINT8
from = SLV_184
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _locale_units
@@ -119,7 +119,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL
var = locale.units_weight
type = SLE_UINT8
from = SLV_184
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _locale_units
@@ -133,7 +133,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL
var = locale.units_volume
type = SLE_UINT8
from = SLV_184
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _locale_units
@@ -147,7 +147,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL
var = locale.units_force
type = SLE_UINT8
from = SLV_184
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _locale_units
@@ -161,7 +161,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL
var = locale.units_height
type = SLE_UINT8
from = SLV_184
flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _locale_units
@@ -175,7 +175,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL
var = locale.digit_group_separator
type = SLE_STRQ
from = SLV_118
flags = SF_NO_NETWORK_SYNC
flags = SettingFlag::NoNetworkSync
def = nullptr
post_cb = [](auto) { MarkWholeScreenDirty(); }
cat = SC_BASIC
@@ -184,7 +184,7 @@ cat = SC_BASIC
var = locale.digit_group_separator_currency
type = SLE_STRQ
from = SLV_118
flags = SF_NO_NETWORK_SYNC
flags = SettingFlag::NoNetworkSync
def = nullptr
post_cb = [](auto) { MarkWholeScreenDirty(); }
cat = SC_BASIC
@@ -193,7 +193,7 @@ cat = SC_BASIC
var = locale.digit_decimal_separator
type = SLE_STRQ
from = SLV_126
flags = SF_NO_NETWORK_SYNC
flags = SettingFlag::NoNetworkSync
def = nullptr
post_cb = [](auto) { MarkWholeScreenDirty(); }
cat = SC_BASIC

View File

@@ -12,6 +12,7 @@ extern std::string _config_language_file;
static constexpr std::initializer_list<const char*> _support8bppmodes{"no", "system", "hardware"};
static constexpr std::initializer_list<const char*> _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"};
static constexpr std::initializer_list<const char*> _facility_display_opt_modes{"TRAIN", "TRUCK_STOP", "BUS_STOP", "AIRPORT", "DOCK", "", "GHOST"};
#ifdef WITH_COCOA
extern bool _allow_hidpi_window;
@@ -24,19 +25,19 @@ static const SettingVariant _misc_settings_table[] = {
[post-amble]
};
[templates]
SDTG_LIST = SDTG_LIST($name, $type, $flags, $var, $def, $length, $from, $to, $cat, $extra, $startup),
SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $var, $def, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_SSTR = SDTG_SSTR($name, $type, $flags, $var, $def, 0, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_LIST = SDTG_LIST($name, $type, SettingFlags({$flags}), $var, $def, $length, $from, $to, $cat, $extra, $startup),
SDTG_MMANY = SDTG_MMANY($name, $type, SettingFlags({$flags}), $var, $def, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, SettingFlags({$flags}), $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_SSTR = SDTG_SSTR($name, $type, SettingFlags({$flags}), $var, $def, 0, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_BOOL = SDTG_BOOL($name, SettingFlags({$flags}), $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, SettingFlags({$flags}), $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -47,6 +48,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -63,6 +65,13 @@ 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 = _display_opt_modes
[SDTG_MMANY]
name = ""facility_display_opt""
type = SLE_UINT8
var = _facility_display_opt
def = StationFacilities({StationFacility::Train, StationFacility::TruckStop, StationFacility::BusStop, StationFacility::Airport, StationFacility::Dock, STATION_FACILITY_GHOST})
full = _facility_display_opt_modes
[SDTG_BOOL]
name = ""fullscreen""
var = _fullscreen

View File

@@ -12,15 +12,15 @@ static const SettingVariant _multimedia_settings_table[] = {
[post-amble]
};
[templates]
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_LIST = SDTC_LIST( $var, $type, $flags, $def, $from, $to, $cat, $extra, $startup),
SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_LIST = SDTC_LIST( $var, $type, SettingFlags({$flags}), $def, $from, $to, $cat, $extra, $startup),
SDTC_VAR = SDTC_VAR( $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -31,6 +31,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -41,21 +42,21 @@ startup = false
[SDTC_BOOL]
var = sound.news_ticker
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_TICKER
strhelp = STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT
[SDTC_BOOL]
var = sound.news_full
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_NEWS
strhelp = STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT
[SDTC_BOOL]
var = sound.new_year
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_NEW_YEAR
str_cb = SettingTitleWallclock
@@ -64,35 +65,35 @@ help_cb = SettingHelpWallclock
[SDTC_BOOL]
var = sound.confirm
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_CONFIRM
strhelp = STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT
[SDTC_BOOL]
var = sound.click_beep
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_CLICK
strhelp = STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT
[SDTC_BOOL]
var = sound.disaster
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_DISASTER
strhelp = STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT
[SDTC_BOOL]
var = sound.vehicle
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_VEHICLE
strhelp = STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT
[SDTC_BOOL]
var = sound.ambient
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
str = STR_CONFIG_SETTING_SOUND_AMBIENT
strhelp = STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT
@@ -100,7 +101,7 @@ strhelp = STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT
[SDTC_VAR]
var = music.playlist
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 0
min = 0
max = 5
@@ -110,7 +111,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = music.music_vol
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 50
min = 0
max = 127
@@ -120,7 +121,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = music.effect_vol
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 100
min = 0
max = 127
@@ -130,25 +131,25 @@ cat = SC_BASIC
[SDTC_LIST]
var = music.custom_1
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = nullptr
cat = SC_BASIC
[SDTC_LIST]
var = music.custom_2
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = nullptr
cat = SC_BASIC
[SDTC_BOOL]
var = music.playing
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = true
cat = SC_BASIC
[SDTC_BOOL]
var = music.shuffle
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = false
cat = SC_BASIC

View File

@@ -14,15 +14,15 @@ static const SettingVariant _network_private_settings_table[] = {
[post-amble]
};
[templates]
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_SSTR = SDTC_SSTR( $var, $type, SettingFlags({$flags}), $def, $length, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -46,7 +46,7 @@ startup = false
var = network.client_name
type = SLE_STR
length = NETWORK_CLIENT_NAME_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = nullptr
pre_cb = NetworkValidateClientName
post_cb = NetworkUpdateClientName
@@ -56,7 +56,7 @@ cat = SC_BASIC
var = network.server_name
type = SLE_STR
length = NETWORK_NAME_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = nullptr
pre_cb = NetworkValidateServerName
post_cb = [](auto) { UpdateClientConfigValues(); }
@@ -66,21 +66,21 @@ cat = SC_BASIC
var = network.connect_to_ip
type = SLE_STR
length = 0
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = nullptr
[SDTC_SSTR]
var = network.last_joined
type = SLE_STR
length = 0
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = """"
cat = SC_EXPERT
[SDTC_OMANY]
var = network.use_relay_service
type = SLE_UINT8
flags = SF_GUI_DROPDOWN | SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::GuiDropdown, SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = URS_ASK
min = URS_NO
max = URS_ALLOW
@@ -93,7 +93,7 @@ cat = SC_BASIC
[SDTC_OMANY]
var = network.participate_survey
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = PS_ASK
min = PS_ASK
max = PS_YES

View File

@@ -13,12 +13,12 @@ static const SettingVariant _network_secrets_settings_table[] = {
[post-amble]
};
[templates]
SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTC_SSTR = SDTC_SSTR( $var, $type, SettingFlags({$flags}), $def, $length, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
[validation]
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -38,7 +38,7 @@ startup = false
var = network.server_password
type = SLE_STR
length = NETWORK_PASSWORD_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = nullptr
pre_cb = ReplaceAsteriskWithEmptyPassword
post_cb = [](auto) { NetworkServerUpdateGameInfo(); }
@@ -48,7 +48,7 @@ cat = SC_BASIC
var = network.rcon_password
type = SLE_STR
length = NETWORK_PASSWORD_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = nullptr
pre_cb = ReplaceAsteriskWithEmptyPassword
cat = SC_BASIC
@@ -57,7 +57,7 @@ cat = SC_BASIC
var = network.admin_password
type = SLE_STR
length = NETWORK_PASSWORD_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = nullptr
cat = SC_BASIC
@@ -65,7 +65,7 @@ cat = SC_BASIC
var = network.client_secret_key
type = SLE_STR
length = NETWORK_SECRET_KEY_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = nullptr
; Prevent the user from setting the secret key from the console using 'setting'
pre_cb = [](auto) { return false; }
@@ -74,7 +74,7 @@ pre_cb = [](auto) { return false; }
var = network.client_public_key
type = SLE_STR
length = NETWORK_SECRET_KEY_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = nullptr
; Prevent the user from setting the public key from the console using 'setting'
pre_cb = [](auto) { return false; }
@@ -83,12 +83,12 @@ pre_cb = [](auto) { return false; }
var = network.server_invite_code
type = SLE_STR
length = NETWORK_INVITE_CODE_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = nullptr
[SDTC_SSTR]
var = network.server_invite_code_secret
type = SLE_STR
length = NETWORK_INVITE_CODE_SECRET_LENGTH
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = nullptr

View File

@@ -16,16 +16,16 @@ static const SettingVariant _network_settings_table[] = {
[post-amble]
};
[templates]
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_VAR = SDTC_VAR( $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -36,6 +36,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -47,7 +48,7 @@ startup = false
[SDTC_VAR]
var = network.sync_freq
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NOT_IN_CONFIG | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NotInConfig, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 100
min = 0
max = 100
@@ -56,7 +57,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.frame_freq
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NOT_IN_CONFIG | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NotInConfig, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 0
min = 0
max = 100
@@ -65,7 +66,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.commands_per_frame
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 2
min = 1
max = 65535
@@ -74,7 +75,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.commands_per_frame_server
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 16
min = 1
max = 65535
@@ -83,7 +84,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.max_commands_in_queue
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 16
min = 1
max = 65535
@@ -92,7 +93,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.bytes_per_frame
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 8
min = 1
max = 65535
@@ -101,7 +102,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.bytes_per_frame_burst
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 256
min = 1
max = 65535
@@ -110,7 +111,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.max_init_time
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 100
min = 0
max = 32000
@@ -119,7 +120,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.max_join_time
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 500
min = 0
max = 32000
@@ -127,7 +128,7 @@ max = 32000
[SDTC_VAR]
var = network.max_download_time
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 1000
min = 0
max = 32000
@@ -135,7 +136,7 @@ max = 32000
[SDTC_VAR]
var = network.max_password_time
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 2000
min = 0
max = 32000
@@ -143,20 +144,20 @@ max = 32000
[SDTC_VAR]
var = network.max_lag_time
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 500
min = 0
max = 32000
[SDTC_BOOL]
var = network.pause_on_join
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = true
[SDTC_VAR]
var = network.server_port
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = NETWORK_DEFAULT_PORT
min = 0
max = 65535
@@ -165,7 +166,7 @@ cat = SC_EXPERT
[SDTC_VAR]
var = network.server_admin_port
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = NETWORK_ADMIN_PORT
min = 0
max = 65535
@@ -173,20 +174,20 @@ cat = SC_EXPERT
[SDTC_BOOL]
var = network.server_admin_chat
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = true
cat = SC_EXPERT
[SDTC_BOOL]
var = network.allow_insecure_admin_login
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = false
cat = SC_EXPERT
[SDTC_OMANY]
var = network.server_game_type
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = SERVER_GAME_TYPE_LOCAL
min = SERVER_GAME_TYPE_LOCAL
max = SERVER_GAME_TYPE_INVITE_ONLY
@@ -196,13 +197,13 @@ cat = SC_BASIC
[SDTC_BOOL]
var = network.autoclean_companies
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = false
[SDTC_VAR]
var = network.autoclean_protected
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial, SettingFlag::NetworkOnly
def = 36
min = 0
max = 240
@@ -210,7 +211,7 @@ max = 240
[SDTC_VAR]
var = network.autoclean_novehicles
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial, SettingFlag::NetworkOnly
def = 0
min = 0
max = 240
@@ -218,7 +219,7 @@ max = 240
[SDTC_VAR]
var = network.max_companies
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 15
min = 1
max = MAX_COMPANIES
@@ -228,7 +229,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = network.max_clients
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 25
min = 2
max = MAX_CLIENTS
@@ -238,7 +239,7 @@ cat = SC_BASIC
[SDTC_VAR]
var = network.restart_game_year
type = SLE_INT32
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial, SettingFlag::NetworkOnly
def = 0
min = CalendarTime::MIN_YEAR
max = CalendarTime::MAX_YEAR
@@ -247,7 +248,7 @@ interval = 1
[SDTC_VAR]
var = network.restart_hours
type = SLE_UINT16
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiZeroIsSpecial, SettingFlag::NetworkOnly
def = 0
min = 0
max = UINT16_MAX
@@ -257,13 +258,13 @@ post_cb = [](auto) { ChangeNetworkRestartTime(false); }
[SDTC_VAR]
var = network.min_active_clients
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = 0
min = 0
max = MAX_CLIENTS
[SDTC_BOOL]
var = network.reload_cfg
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::NetworkOnly
def = false
cat = SC_EXPERT

View File

@@ -13,13 +13,13 @@ static const SettingVariant _news_display_settings_table[] = {
[post-amble]
};
[templates]
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -41,7 +41,7 @@ startup = false
[SDTC_OMANY]
var = news_display.arrival_player
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -52,7 +52,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.arrival_other
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _news_display
@@ -63,7 +63,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.accident
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -74,7 +74,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.accident_other
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -85,7 +85,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.company_info
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -96,7 +96,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.open
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _news_display
@@ -107,7 +107,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.close
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _news_display
@@ -118,7 +118,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.economy
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -129,7 +129,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.production_player
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _news_display
@@ -140,7 +140,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.production_other
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
max = 2
full = _news_display
@@ -151,7 +151,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.production_nobody
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
max = 2
full = _news_display
@@ -162,7 +162,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.advice
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -173,7 +173,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.new_vehicles
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -184,7 +184,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.acceptance
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display
@@ -195,7 +195,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.subsidies
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 1
max = 2
full = _news_display
@@ -206,7 +206,7 @@ strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
[SDTC_OMANY]
var = news_display.general
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 2
max = 2
full = _news_display

View File

@@ -8,7 +8,7 @@
; under "gameopts" in the configuration file, but no longer are. Most of these
; are now moved to other places.
;
; For backwards compatability, this file dictates how both were saved. When
; For backwards compatibility, this file dictates how both were saved. When
; a configuration files contains these entries, they are read once, and removed
; from the configuration file afterwards. Those that are still supported will
; be saved in their new place.
@@ -30,13 +30,13 @@ static const SettingVariant _old_gameopt_settings_table[] = {
[post-amble]
};
[templates]
SDTG_LIST = SDTG_LIST($name, $type, $flags, $var, $def, $length, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_LIST = SDTG_LIST($name, $type, SettingFlags({$flags}), $var, $def, $length, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, SettingFlags({$flags}), $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
SDT_NULL = SDT_NULL( $length, $from, $to),
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTC_OMANY = SDTC_OMANY( $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, SettingFlags({$flags}), $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
@@ -46,7 +46,7 @@ SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$va
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -57,6 +57,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -71,7 +72,7 @@ name = ""diff_custom""
sdt_cmd = SDT_INTLIST
sle_cmd = SL_ARR
type = SLE_FILE_I16 | SLE_VAR_U16
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
var = _old_diff_custom
length = 17
def = nullptr
@@ -82,7 +83,7 @@ name = ""diff_custom""
sdt_cmd = SDT_INTLIST
sle_cmd = SL_ARR
type = SLE_UINT16
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
var = _old_diff_custom
length = 18
def = nullptr
@@ -93,7 +94,7 @@ from = SLV_4
name = ""diff_level""
var = _old_diff_level
type = SLE_UINT8
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
def = SP_CUSTOM
min = SP_EASY
max = SP_CUSTOM
@@ -102,7 +103,7 @@ cat = SC_BASIC
[SDT_OMANY]
var = locale.currency
type = SLE_UINT8
flags = SF_NO_NETWORK_SYNC
flags = SettingFlag::NoNetworkSync
def = 0
max = CURRENCY_END - 1
full = _locale_currencies
@@ -112,7 +113,7 @@ cat = SC_BASIC
name = ""units""
var = _old_units
type = SLE_UINT8
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
def = 1
max = 2
full = _locale_units

View File

@@ -12,14 +12,14 @@ static const SettingVariant _pathfinding_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -30,6 +30,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION

View File

@@ -13,16 +13,16 @@ static const SettingVariant _script_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -33,6 +33,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -45,7 +46,7 @@ startup = false
var = script.script_max_opcode_till_suspend
type = SLE_UINT32
from = SLV_107
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = 10000
min = 500
max = 250000
@@ -59,7 +60,7 @@ cat = SC_EXPERT
var = script.script_max_memory_megabytes
type = SLE_UINT32
from = SLV_SCRIPT_MEMLIMIT
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = 1024
min = 8
max = 8192

View File

@@ -17,14 +17,14 @@ static const SettingVariant _win32_settings_table[] = {
};
#endif /* _WIN32 */
[templates]
SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_BOOL = SDTG_BOOL($name, SettingFlags({$flags}), $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, SettingFlags({$flags}), $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
[defaults]
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -35,6 +35,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION

View File

@@ -13,14 +13,14 @@ static const SettingVariant _window_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(WindowDesc, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(WindowDesc, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(WindowDesc, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(WindowDesc, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for WindowDesc.$var exceeds storage size");
[defaults]
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -31,6 +31,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION

View File

@@ -18,16 +18,16 @@ static const SettingVariant _world_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, SettingFlags({$flags}), $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, SettingFlags({$flags}), $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $from, $to, $load, $cat, $extra, $startup),
SDT_VAR = SDT_VAR(GameSettings, $var, $type, SettingFlags({$flags}), $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $def_cb, $range_cb, $from, $to, $cat, $extra, $startup),
[validation]
SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
[defaults]
flags = SF_NONE
flags =
interval = 0
str = STR_NULL
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
@@ -38,6 +38,7 @@ str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
def_cb = nullptr
range_cb = nullptr
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
@@ -52,7 +53,7 @@ startup = false
var = game_creation.town_name
type = SLE_UINT8
from = SLV_97
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = 0
max = 255
full = _town_names
@@ -62,7 +63,7 @@ cat = SC_BASIC
var = game_creation.landscape
type = SLE_UINT8
from = SLV_97
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 0
max = 3
full = _climates
@@ -76,7 +77,7 @@ cat = SC_BASIC
var = game_creation.heightmap_height
type = SLE_UINT8
from = SLV_MAPGEN_SETTINGS_REVAMP
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM
min = MIN_HEIGHTMAP_HEIGHT
max = MAX_MAP_HEIGHT_LIMIT
@@ -85,7 +86,7 @@ interval = 1
[SDT_VAR]
var = game_creation.snow_line_height
type = SLE_UINT8
flags = SF_SCENEDIT_ONLY
flags = SettingFlag::SceneditOnly
def = DEF_SNOWLINE_HEIGHT
min = MIN_SNOWLINE_HEIGHT
max = MAX_SNOWLINE_HEIGHT
@@ -99,7 +100,7 @@ cat = SC_BASIC
var = game_creation.snow_coverage
type = SLE_UINT8
from = SLV_MAPGEN_SETTINGS_REVAMP
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = DEF_SNOW_COVERAGE
min = 0
max = 100
@@ -113,7 +114,7 @@ cat = SC_BASIC
var = game_creation.desert_coverage
type = SLE_UINT8
from = SLV_MAPGEN_SETTINGS_REVAMP
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = DEF_DESERT_COVERAGE
min = 0
max = 100
@@ -138,7 +139,7 @@ cat = SC_BASIC
var = game_creation.ending_year
type = SLE_INT32
from = SLV_ENDING_YEAR
flags = SF_GUI_0_IS_SPECIAL
flags = SettingFlag::GuiZeroIsSpecial
def = CalendarTime::DEF_END_YEAR
min = CalendarTime::MIN_YEAR
max = CalendarTime::MAX_YEAR - 1
@@ -152,7 +153,7 @@ cat = SC_ADVANCED
var = game_creation.land_generator
type = SLE_UINT8
from = SLV_30
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 1
min = 0
max = 1
@@ -175,7 +176,7 @@ strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT
var = game_creation.tgen_smoothness
type = SLE_UINT8
from = SLV_30
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 1
min = TGEN_SMOOTHNESS_BEGIN
max = TGEN_SMOOTHNESS_END - 1
@@ -188,7 +189,7 @@ cat = SC_BASIC
var = game_creation.variety
type = SLE_UINT8
from = SLV_197
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 0
min = 0
max = 5
@@ -200,7 +201,7 @@ strval = STR_VARIETY_NONE
var = game_creation.generation_seed
type = SLE_UINT32
from = SLV_30
flags = SF_NOT_IN_CONFIG
flags = SettingFlag::NotInConfig
def = GENERATE_NEW_SEED
min = 0
max = UINT32_MAX
@@ -210,7 +211,7 @@ cat = SC_EXPERT
var = game_creation.tree_placer
type = SLE_UINT8
from = SLV_30
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_SCENEDIT_TOO
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly, SettingFlag::SceneditToo
def = 2
min = 0
max = 2
@@ -222,7 +223,7 @@ cat = SC_BASIC
[SDT_VAR]
var = game_creation.heightmap_rotation
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = 0
min = 0
max = 1
@@ -233,7 +234,7 @@ cat = SC_BASIC
[SDT_VAR]
var = game_creation.se_flat_world_height
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 1
min = 0
max = 15
@@ -244,7 +245,7 @@ cat = SC_BASIC
[SDT_VAR]
var = game_creation.map_x
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 8
min = MIN_MAP_SIZE_BITS
max = MAX_MAP_SIZE_BITS
@@ -253,7 +254,7 @@ cat = SC_BASIC
[SDT_VAR]
var = game_creation.map_y
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync
def = 8
min = MIN_MAP_SIZE_BITS
max = MAX_MAP_SIZE_BITS
@@ -287,7 +288,7 @@ max = 64000
var = game_creation.custom_terrain_type
type = SLE_UINT8
from = SLV_MAPGEN_SETTINGS_REVAMP
flags = SF_NEWGAME_ONLY
flags = SettingFlag::NewgameOnly
def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM
min = MIN_CUSTOM_TERRAIN_TYPE
max = MAX_MAP_HEIGHT_LIMIT
@@ -324,7 +325,7 @@ cat = SC_EXPERT
var = game_creation.amount_of_rivers
type = SLE_UINT8
from = SLV_163
flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY
flags = SettingFlag::GuiDropdown, SettingFlag::NewgameOnly
def = 2
min = 0
max = 3
@@ -336,7 +337,7 @@ strval = STR_RIVERS_NONE
var = construction.map_height_limit
type = SLE_UINT8
from = SLV_194
flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL
flags = SettingFlag::NewgameOnly, SettingFlag::SceneditToo, SettingFlag::GuiZeroIsSpecial
def = 0
min = MIN_MAP_HEIGHT_LIMIT
max = MAX_MAP_HEIGHT_LIMIT
@@ -350,7 +351,7 @@ cat = SC_ADVANCED
[SDT_BOOL]
var = construction.build_on_slopes
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = true
cat = SC_EXPERT
@@ -358,7 +359,7 @@ cat = SC_EXPERT
var = construction.command_pause_level
type = SLE_UINT8
from = SLV_154
flags = SF_GUI_DROPDOWN | SF_NO_NETWORK
flags = SettingFlag::GuiDropdown, SettingFlag::NoNetwork
def = 1
min = 0
max = 3
@@ -463,7 +464,7 @@ strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT
var = construction.max_bridge_length
type = SLE_UINT16
from = SLV_159
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = 64
min = 1
max = MAX_MAP_SIZE
@@ -476,7 +477,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH
var = construction.max_bridge_height
type = SLE_UINT8
from = SLV_194
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = 12
min = 1
max = MAX_TILE_HEIGHT
@@ -490,7 +491,7 @@ cat = SC_EXPERT
var = construction.max_tunnel_length
type = SLE_UINT16
from = SLV_159
flags = SF_NO_NETWORK
flags = SettingFlag::NoNetwork
def = 64
min = 1
max = MAX_MAP_SIZE
@@ -502,7 +503,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH
[SDT_VAR]
var = construction.train_signal_side
type = SLE_UINT8
flags = SF_GUI_DROPDOWN | SF_NO_NETWORK
flags = SettingFlag::GuiDropdown, SettingFlag::NoNetwork
def = 1
min = 0
max = 2
@@ -538,7 +539,7 @@ cat = SC_BASIC
[SDT_VAR]
var = construction.raw_industry_construction
type = SLE_UINT8
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 0
min = 0
max = 2
@@ -572,7 +573,7 @@ cat = SC_EXPERT
var = construction.extra_tree_placement
type = SLE_UINT8
from = SLV_132
flags = SF_GUI_DROPDOWN
flags = SettingFlag::GuiDropdown
def = 2
min = 0
max = 3

View File

@@ -202,13 +202,13 @@ static const SpriteID SPR_TRACKS_FOR_SLOPES_MAGLEV_BASE = SPR_TRACKS_FOR_SLOPES_
static const uint16_t TRACKS_FOR_SLOPES_SPRITE_COUNT = 12;
static const SpriteID SPR_SLOPES_BASE = SPR_TRACKS_FOR_SLOPES_BASE + TRACKS_FOR_SLOPES_SPRITE_COUNT;
static const SpriteID SPR_SLOPES_INCLINED_OFFSET = 15;
static const SpriteID SPR_SLOPES_VIRTUAL_BASE = SPR_SLOPES_BASE - SPR_SLOPES_INCLINED_OFFSET; // The original foundations (see SPR_FOUNDATION_BASE below) are mapped before the additional foundations.
static const SpriteID SPR_TRKFOUND_BLOCK_SIZE = 22; // The normal track foundation sprites are organized in blocks of 22.
static const uint16_t SLOPES_INCLINED_OFFSET = 15;
static const SpriteID SPR_SLOPES_VIRTUAL_BASE = SPR_SLOPES_BASE - SLOPES_INCLINED_OFFSET; // The original foundations (see SPR_FOUNDATION_BASE below) are mapped before the additional foundations.
static const uint16_t TRKFOUND_BLOCK_SIZE = 22; // The normal track foundation sprites are organized in blocks of 22.
static const uint16_t NORMAL_FOUNDATION_SPRITE_COUNT = 74;
/** Halftile foundations */
static const SpriteID SPR_HALFTILE_FOUNDATION_BASE = SPR_SLOPES_BASE + NORMAL_FOUNDATION_SPRITE_COUNT;
static const SpriteID SPR_HALFTILE_BLOCK_SIZE = 4; // The half tile foundation sprites are organized in blocks of 4.
static const uint16_t HALFTILE_BLOCK_SIZE = 4; // The half tile foundation sprites are organized in blocks of 4.
static const uint16_t NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT = 90;
static const SpriteID SPR_AUTORAIL_BASE = SPR_HALFTILE_FOUNDATION_BASE + NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT;
@@ -222,11 +222,11 @@ static const uint16_t TWOCCMAP_SPRITE_COUNT = 256;
/** shore tiles - action 05-0D */
static const SpriteID SPR_SHORE_BASE = SPR_2CCMAP_BASE + TWOCCMAP_SPRITE_COUNT;
static const SpriteID SPR_SHORE_SPRITE_COUNT = 18;
static const uint16_t SHORE_SPRITE_COUNT = 18;
static const SpriteID SPR_ORIGINALSHORE_START = 4062;
static const SpriteID SPR_ORIGINALSHORE_END = 4069;
static const SpriteID SPR_AIRPORTX_BASE = SPR_SHORE_BASE + SPR_SHORE_SPRITE_COUNT; // The sprites used for other airport angles
static const SpriteID SPR_AIRPORTX_BASE = SPR_SHORE_BASE + SHORE_SPRITE_COUNT; // The sprites used for other airport angles
static const SpriteID SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE;
static const SpriteID SPR_NSRUNWAY1 = SPR_AIRPORTX_BASE + 1;
static const SpriteID SPR_NSRUNWAY2 = SPR_AIRPORTX_BASE + 2;
@@ -255,9 +255,9 @@ static const SpriteID SPR_AIRPORT_PREVIEW_COMMUTER = SPR_AIRPORT_PREVIEW
static const SpriteID SPR_AIRPORT_PREVIEW_HELIDEPOT = SPR_AIRPORT_PREVIEW_BASE + 6;
static const SpriteID SPR_AIRPORT_PREVIEW_INTERCONTINENTAL = SPR_AIRPORT_PREVIEW_BASE + 7;
static const SpriteID SPR_AIRPORT_PREVIEW_HELISTATION = SPR_AIRPORT_PREVIEW_BASE + 8;
static const SpriteID SPR_AIRPORT_PREVIEW_COUNT = 9;
static const uint16_t AIRPORT_PREVIEW_SPRITE_COUNT = 9;
static const SpriteID SPR_ROADSTOP_BASE = SPR_AIRPORT_PREVIEW_BASE + SPR_AIRPORT_PREVIEW_COUNT; // The sprites used for drive-through road stops
static const SpriteID SPR_ROADSTOP_BASE = SPR_AIRPORT_PREVIEW_BASE + AIRPORT_PREVIEW_SPRITE_COUNT; // The sprites used for drive-through road stops
static const SpriteID SPR_BUS_STOP_DT_Y_W = SPR_ROADSTOP_BASE;
static const SpriteID SPR_BUS_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 1;
static const SpriteID SPR_BUS_STOP_DT_X_W = SPR_ROADSTOP_BASE + 2;
@@ -272,7 +272,7 @@ static const uint16_t ROADSTOP_SPRITE_COUNT = 8;
static const SpriteID SPR_TRAMWAY_BASE = SPR_ROADSTOP_BASE + ROADSTOP_SPRITE_COUNT;
static const SpriteID SPR_TRAMWAY_OVERLAY = SPR_TRAMWAY_BASE + 4;
static const SpriteID SPR_TRAMWAY_TRAM = SPR_TRAMWAY_BASE + 27;
static const SpriteID SPR_TRAMWAY_SLOPED_OFFSET = 11;
static const uint16_t TRAMWAY_SLOPED_OFFSET = 11;
static const SpriteID SPR_TRAMWAY_BUS_STOP_DT_Y_W = SPR_TRAMWAY_BASE + 25;
static const SpriteID SPR_TRAMWAY_BUS_STOP_DT_Y_E = SPR_TRAMWAY_BASE + 23;
static const SpriteID SPR_TRAMWAY_BUS_STOP_DT_X_W = SPR_TRAMWAY_BASE + 24;
@@ -291,8 +291,8 @@ static const uint16_t TRAMWAY_SPRITE_COUNT = 119;
/** One way road sprites */
static const SpriteID SPR_ONEWAY_BASE = SPR_TRAMWAY_BASE + TRAMWAY_SPRITE_COUNT;
static const SpriteID SPR_ONEWAY_SLOPE_N_OFFSET = 6;
static const SpriteID SPR_ONEWAY_SLOPE_S_OFFSET = 12;
static const uint16_t ONEWAY_SLOPE_N_OFFSET = 6;
static const uint16_t ONEWAY_SLOPE_S_OFFSET = 12;
static const uint16_t ONEWAY_SPRITE_COUNT = 18;
/** Tunnel sprites with grass only for custom railtype tunnel. */
@@ -315,8 +315,12 @@ static const SpriteID SPR_ROAD_WAYPOINT_X_W = SPR_ROAD_WAYPOINTS_BASE + 2;
static const SpriteID SPR_ROAD_WAYPOINT_X_E = SPR_ROAD_WAYPOINTS_BASE + 3;
static const uint16_t ROAD_WAYPOINTS_SPRITE_COUNT = 4;
/** Overlay rocks sprites. */
static constexpr SpriteID SPR_OVERLAY_ROCKS_BASE = SPR_ROAD_WAYPOINTS_BASE + ROAD_WAYPOINTS_SPRITE_COUNT;
static constexpr uint16_t OVERLAY_ROCKS_SPRITE_COUNT = 19 * 5; /* Rock overlays: plain, snow 1, snow 2, snow 3 and full snow. */
/* CityMania extra sprites */
static const SpriteID CM_SPR_CITYMANIA_BASE = SPR_ROAD_WAYPOINTS_BASE + ROAD_WAYPOINTS_SPRITE_COUNT;
static const SpriteID CM_SPR_CITYMANIA_BASE = SPR_OVERLAY_ROCKS_BASE + OVERLAY_ROCKS_SPRITE_COUNT;
static const SpriteID CM_SPR_RAIL_COPY_PASTE = CM_SPR_CITYMANIA_BASE + 2;
static const SpriteID CM_SPR_HQ = CM_SPR_CITYMANIA_BASE + 3;
static const SpriteID CM_SPR_WATCH = CM_SPR_CITYMANIA_BASE + 4;
@@ -421,9 +425,9 @@ static const SpriteID SPR_STATUE_COMPANY = 2632;
static const SpriteID SPR_BOUGHT_LAND = 4790;
/* sprites for rail and rail stations*/
static const SpriteID SPR_RAIL_SNOW_OFFSET = 26;
static const SpriteID SPR_MONO_SNOW_OFFSET = 26;
static const SpriteID SPR_MGLV_SNOW_OFFSET = 26;
static const uint16_t SPR_RAIL_SNOW_OFFSET = 26;
static const uint16_t SPR_MONO_SNOW_OFFSET = 26;
static const uint16_t SPR_MGLV_SNOW_OFFSET = 26;
static const SpriteID SPR_ORIGINAL_SIGNALS_BASE = 1275;

View File

@@ -51,35 +51,24 @@
*/
#define TILE_SEQ_GROUND(dx, dy, dz, img) TILE_SEQ_CHILD(2 * (dy - dx), dx + dy - dz, img, PAL_NONE)
/** Constructor macro for a terminating DrawTileSeqStruct entry in an array */
#define TILE_SEQ_END() { (int8_t)0x80, 0, 0, 0, 0, 0, {0, 0} }
static const DrawTileSeqStruct _station_display_nothing[] = {
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_0[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 5, 2, SPR_RAIL_PLATFORM_X_REAR | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 11, 0, 16, 5, 2, SPR_RAIL_PLATFORM_X_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_1[] = {
TILE_SEQ_LINE( 0, 0, 0, 5, 16, 2, SPR_RAIL_PLATFORM_Y_REAR | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(11, 0, 0, 5, 16, 2, SPR_RAIL_PLATFORM_Y_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_2[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 5, 15, SPR_RAIL_PLATFORM_BUILDING_X | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 11, 0, 16, 5, 2, SPR_RAIL_PLATFORM_X_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_3[] = {
TILE_SEQ_LINE( 0, 0, 0, 5, 16, 15, SPR_RAIL_PLATFORM_BUILDING_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(11, 0, 0, 5, 16, 2, SPR_RAIL_PLATFORM_Y_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_4[] = {
@@ -87,7 +76,6 @@ static const DrawTileSeqStruct _station_display_datas_4[] = {
TILE_SEQ_LINE( 0, 11, 0, 16, 5, 2, SPR_RAIL_PLATFORM_X_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_X_TILE_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_CHILD( 0, 0, SPR_RAIL_ROOF_GLASS_X_TILE_A | (1U << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_5[] = {
@@ -95,7 +83,6 @@ static const DrawTileSeqStruct _station_display_datas_5[] = {
TILE_SEQ_LINE(11, 0, 0, 5, 16, 2, SPR_RAIL_PLATFORM_Y_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_Y_TILE_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_CHILD( 0, 0, SPR_RAIL_ROOF_GLASS_Y_TILE_A | (1U << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_6[] = {
@@ -103,7 +90,6 @@ static const DrawTileSeqStruct _station_display_datas_6[] = {
TILE_SEQ_LINE( 0, 11, 0, 16, 5, 2, SPR_RAIL_PLATFORM_PILLARS_X_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_X_TILE_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_CHILD( 0, 0, SPR_RAIL_ROOF_GLASS_X_TILE_B | (1U << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_7[] = {
@@ -111,296 +97,245 @@ static const DrawTileSeqStruct _station_display_datas_7[] = {
TILE_SEQ_LINE(11, 0, 0, 5, 16, 2, SPR_RAIL_PLATFORM_PILLARS_Y_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 16, 16, 16, 10, SPR_RAIL_ROOF_STRUCTURE_Y_TILE_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_CHILD( 0, 0, SPR_RAIL_ROOF_GLASS_Y_TILE_B | (1U << PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT)
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_fence_nw[] = {
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_fence_ne[] = {
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_fence_sw[] = {
TILE_SEQ_GROUND(15, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_fence_se[] = {
TILE_SEQ_GROUND( 0, 15, 0, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_terminal_a[] = {
TILE_SEQ_LINE( 2, 0, 0, 11, 16, 40, SPR_AIRPORT_TERMINAL_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_tower_fence_sw[] = {
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_TOWER | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_concourse[] = {
TILE_SEQ_LINE( 0, 1, 0, 14, 14, 30, SPR_AIRPORT_CONCOURSE | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_terminal_b[] = {
TILE_SEQ_LINE( 3, 3, 0, 10, 11, 35, SPR_AIRPORT_TERMINAL_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_terminal_c[] = {
TILE_SEQ_LINE( 0, 3, 0, 16, 11, 40, SPR_AIRPORT_TERMINAL_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_hangar_se[] = {
TILE_SEQ_LINE(14, 0, 0, 2, 17, 28, SPR_AIRPORT_HANGAR_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 2, 17, 28, SPR_AIRPORT_HANGAR_REAR | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_jetway_1[] = {
TILE_SEQ_LINE( 7, 11, 0, 3, 3, 14, SPR_AIRPORT_JETWAY_1 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_jetway_2[] = {
TILE_SEQ_LINE( 2, 7, 0, 3, 3, 14, SPR_AIRPORT_JETWAY_2 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_jetway_3[] = {
TILE_SEQ_LINE( 3, 2, 0, 3, 3, 14, SPR_AIRPORT_JETWAY_3 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_passenger_tunnel[] = {
TILE_SEQ_LINE( 0, 8, 0, 14, 3, 14, SPR_AIRPORT_PASSENGER_TUNNEL | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_1_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_1)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_2_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_2)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_3_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_3)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_4_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_4)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_5_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_5)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_6_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_6)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_7_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_7)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_8_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_8)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_9_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_9)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_10_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_A)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_11_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_B)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_12_fence_sw[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_C)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_transmitter_fence_ne[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 70, SPR_TRANSMITTER)
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_terminal_c_2[] = {
TILE_SEQ_LINE( 0, 0, 0, 15, 15, 30, SPR_AIRFIELD_TERM_C_BUILD | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_flag_1_fence_ne[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 4, 11, 0, 1, 1, 20, SPR_AIRFIELD_WIND_1 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_flag_2_fence_ne[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 4, 11, 0, 1, 1, 20, SPR_AIRFIELD_WIND_2 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_flag_3_fence_ne[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 4, 11, 0, 1, 1, 20, SPR_AIRFIELD_WIND_3 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_flag_4_fence_ne[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 4, 11, 0, 1, 1, 20, SPR_AIRFIELD_WIND_4 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_small_depot_se[] = {
TILE_SEQ_LINE(14, 0, 0, 2, 17, 28, SPR_AIRFIELD_HANGAR_FRONT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 2, 17, 28, SPR_AIRFIELD_HANGAR_REAR | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_heliport[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 16, 60, SPR_HELIPORT | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_67[] = {
TILE_SEQ_LINE( 0, 15, 0, 13, 1, 10, SPR_TRUCK_STOP_NE_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(13, 0, 0, 3, 16, 10, SPR_TRUCK_STOP_NE_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 2, 0, 0, 11, 1, 10, SPR_TRUCK_STOP_NE_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_68[] = {
TILE_SEQ_LINE(15, 3, 0, 1, 13, 10, SPR_TRUCK_STOP_SE_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 16, 3, 10, SPR_TRUCK_STOP_SE_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 3, 0, 1, 11, 10, SPR_TRUCK_STOP_SE_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_69[] = {
TILE_SEQ_LINE( 3, 0, 0, 13, 1, 10, SPR_TRUCK_STOP_SW_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 3, 16, 10, SPR_TRUCK_STOP_SW_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 3, 15, 0, 11, 1, 10, SPR_TRUCK_STOP_SW_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_70[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 13, 10, SPR_TRUCK_STOP_NW_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 13, 0, 16, 3, 10, SPR_TRUCK_STOP_NW_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(15, 2, 0, 1, 11, 10, SPR_TRUCK_STOP_NW_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_71[] = {
TILE_SEQ_LINE( 2, 0, 0, 11, 1, 10, SPR_BUS_STOP_NE_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(13, 0, 0, 3, 16, 10, SPR_BUS_STOP_NE_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 13, 0, 13, 3, 10, SPR_BUS_STOP_NE_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_72[] = {
TILE_SEQ_LINE( 0, 3, 0, 1, 11, 10, SPR_BUS_STOP_SE_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 16, 3, 10, SPR_BUS_STOP_SE_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(13, 3, 0, 3, 13, 10, SPR_BUS_STOP_SE_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_73[] = {
TILE_SEQ_LINE( 3, 15, 0, 11, 1, 10, SPR_BUS_STOP_SW_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 3, 16, 10, SPR_BUS_STOP_SW_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 3, 0, 0, 13, 3, 10, SPR_BUS_STOP_SW_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_74[] = {
TILE_SEQ_LINE(15, 2, 0, 1, 11, 10, SPR_BUS_STOP_NW_BUILD_A | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 13, 0, 16, 3, 10, SPR_BUS_STOP_NW_BUILD_B | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 3, 13, 10, SPR_BUS_STOP_NW_BUILD_C | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_76[] = {
TILE_SEQ_LINE( 0, 4, 0, 16, 8, 8, SPR_DOCK_SLOPE_NE | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_77[] = {
TILE_SEQ_LINE( 4, 0, 0, 8, 16, 8, SPR_DOCK_SLOPE_SE | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_78[] = {
TILE_SEQ_LINE( 0, 4, 0, 16, 8, 8, SPR_DOCK_SLOPE_SW | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_79[] = {
TILE_SEQ_LINE( 4, 0, 0, 8, 16, 8, SPR_DOCK_SLOPE_NW | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_80[] = {
TILE_SEQ_LINE( 0, 4, 0, 16, 8, 8, SPR_DOCK_FLAT_X | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_81[] = {
TILE_SEQ_LINE( 4, 0, 0, 8, 16, 8, SPR_DOCK_FLAT_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* Buoy, which will _always_ drown under the ship */
static const DrawTileSeqStruct _station_display_datas_82[] = {
TILE_SEQ_LINE( 4, -1, 0, 0, 0, 0, SPR_IMG_BUOY)
TILE_SEQ_END()
};
/* control tower without fence */
static const DrawTileSeqStruct _station_display_tower[] = {
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_TOWER | (1U << PALETTE_MODIFIER_COLOUR)) // control tower
TILE_SEQ_END()
};
/* turning radar with fences on north -- needs 12 tiles
@@ -408,73 +343,61 @@ static const DrawTileSeqStruct _station_display_tower[] = {
static const DrawTileSeqStruct _station_display_radar_1_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_1) // turning radar
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_2_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_2)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_3_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_3)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_4_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_4)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_5_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_5)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_6_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_6)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_7_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_7)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_8_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_8)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_9_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_9)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_10_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_A)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_11_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_B)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_12_fence_ne[] = {
TILE_SEQ_LINE(7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_C)
TILE_SEQ_LINE(0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* END */
@@ -482,55 +405,47 @@ static const DrawTileSeqStruct _station_display_radar_12_fence_ne[] = {
static const DrawTileSeqStruct _station_display_helipad_fence_sw[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences bottom
TILE_SEQ_END()
};
/* helipad for commuter airport */
static const DrawTileSeqStruct _station_display_helipad_fence_nw[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences left
TILE_SEQ_END()
};
/* helipad for continental airport */
static const DrawTileSeqStruct _station_display_helipad[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_END()
};
/* asphalt tile with fences in north and south */
static const DrawTileSeqStruct _station_display_fence_ne_sw[] = {
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_GROUND(15, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* runway tiles with 2 corner fences */
static const DrawTileSeqStruct _station_display_fence_nw_sw[] = {
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_GROUND(15, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_END()
};
/* runway tiles with 2 corner fences */
static const DrawTileSeqStruct _station_display_fence_se_sw[] = {
TILE_SEQ_GROUND(15, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_GROUND( 0, 15, 0, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
/* runway tiles with 2 corner fences */
static const DrawTileSeqStruct _station_display_fence_ne_nw[] = {
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences east
TILE_SEQ_END()
};
/* runway tiles with 2 corner fences */
static const DrawTileSeqStruct _station_display_fence_ne_se[] = {
TILE_SEQ_GROUND( 0, 0, 0, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences east
TILE_SEQ_GROUND( 0, 15, 0, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
/* helipad tiles with 2 corner fences top+right */
@@ -538,7 +453,6 @@ static const DrawTileSeqStruct _station_display_helipad_fence_NE_SE[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences east
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
/* helidepot office with fences top + left */
@@ -546,26 +460,22 @@ static const DrawTileSeqStruct _station_display_low_building_fence_ne_nw[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences left
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences east
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | (1U << PALETTE_MODIFIER_COLOUR)) // helidepot office
TILE_SEQ_END()
};
/* West facing hangar */
static const DrawTileSeqStruct _station_display_hangar_sw[] = {
TILE_SEQ_LINE(14, 0, 0, 2, 17, 28, SPR_NEWHANGAR_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 2, 17, 28, SPR_NEWHANGAR_W_WALL | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* North facing hangar */
static const DrawTileSeqStruct _station_display_hangar_nw[] = {
TILE_SEQ_LINE(14, 0, 0, 2, 16, 28, SPR_NEWHANGAR_N | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* East facing hangar */
static const DrawTileSeqStruct _station_display_hangar_ne[] = {
TILE_SEQ_LINE(14, 0, 0, 2, 16, 28, SPR_NEWHANGAR_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* helipad for district airport NS */
@@ -573,42 +483,36 @@ static const DrawTileSeqStruct _station_display_helipad_fence_se_sw[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences bottom
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences right
TILE_SEQ_END()
};
/* helipad for district airport NS */
static const DrawTileSeqStruct _station_display_helipad_fence_se[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
/* helidepot office with fence north */
static const DrawTileSeqStruct _station_display_low_building_fence_nw[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | (1U << PALETTE_MODIFIER_COLOUR)) // helidepot office
TILE_SEQ_END()
};
/* helidepot office with fence east */
static const DrawTileSeqStruct _station_display_low_building_fence_ne[] = {
TILE_SEQ_LINE( 0, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences east
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | (1U << PALETTE_MODIFIER_COLOUR)) // helidepot office
TILE_SEQ_END()
};
/* helidepot office with fence west */
static const DrawTileSeqStruct _station_display_low_building_fence_sw[] = {
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | (1U << PALETTE_MODIFIER_COLOUR)) // helidepot office
TILE_SEQ_END()
};
/* helidepot office with fence south */
static const DrawTileSeqStruct _station_display_low_building_fence_se[] = {
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | (1U << PALETTE_MODIFIER_COLOUR)) // helidepot office
TILE_SEQ_END()
};
/* helipad for district airport EW*/
@@ -616,7 +520,6 @@ static const DrawTileSeqStruct _station_display_helipad_fence_nw_sw[] = {
TILE_SEQ_LINE(10, 6, 0, 0, 0, 0, SPR_AIRPORT_HELIPAD)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_END()
};
/* turning radar with fences on south -- needs 12 tiles
@@ -624,73 +527,61 @@ static const DrawTileSeqStruct _station_display_helipad_fence_nw_sw[] = {
static const DrawTileSeqStruct _station_display_radar_1_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_1) // turning radar
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_2_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_2)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_3_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_3)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_4_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_4)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_5_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_5)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_6_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_6)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_7_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_7)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_8_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_8)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_9_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_9)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_10_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_A)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_11_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_B)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_radar_12_fence_se[] = {
TILE_SEQ_LINE( 7, 7, 0, 2, 2, 8, SPR_AIRPORT_RADAR_C)
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
/* END */
@@ -699,7 +590,6 @@ static const DrawTileSeqStruct _station_display_newhelipad_fence_se_sw[] = {
TILE_SEQ_LINE( 0, 1, 2, 0, 0, 0, SPR_NEWHELIPAD)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_LINE( 0, 15, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences south
TILE_SEQ_END()
};
/* helipad for helistation */
@@ -707,103 +597,90 @@ static const DrawTileSeqStruct _station_display_newhelipad_fence_nw_sw[] = {
TILE_SEQ_LINE( 0, 1, 2, 0, 0, 0, SPR_NEWHELIPAD)
TILE_SEQ_LINE(15, 0, 0, 1, 16, 6, SPR_AIRPORT_FENCE_Y | (1U << PALETTE_MODIFIER_COLOUR)) // fences west
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_END()
};
/* helipad for helistation */
static const DrawTileSeqStruct _station_display_newhelipad_fence_nw[] = {
TILE_SEQ_LINE( 0, 1, 2, 0, 0, 0, SPR_NEWHELIPAD)
TILE_SEQ_LINE( 0, 0, 0, 16, 1, 6, SPR_AIRPORT_FENCE_X | (1U << PALETTE_MODIFIER_COLOUR)) // fences north
TILE_SEQ_END()
};
/* helidepot office without fence */
static const DrawTileSeqStruct _station_display_low_building[] = {
TILE_SEQ_LINE( 3, 3, 0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | (1U << PALETTE_MODIFIER_COLOUR)) // helidepot office
TILE_SEQ_END()
};
/* half grass half SPR_AIRPORT_APRON */
static const DrawTileSeqStruct _station_display_grass_west[] = {
TILE_SEQ_LINE(0, 0, 0, 0, 0, 0, SPR_GRASS_LEFT)
TILE_SEQ_END()
};
/* half grass half SPR_AIRPORT_APRON */
static const DrawTileSeqStruct _station_display_grass_east[] = {
TILE_SEQ_LINE(0, 0, 0, 0, 0, 0, SPR_GRASS_RIGHT)
TILE_SEQ_END()
};
/* drive-through truck stop X */
static const DrawTileSeqStruct _station_display_datas_0168[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 3, 16, SPR_TRUCK_STOP_DT_X_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 13, 0, 16, 3, 16, SPR_TRUCK_STOP_DT_X_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* drive-through truck stop Y */
static const DrawTileSeqStruct _station_display_datas_0169[] = {
TILE_SEQ_LINE(13, 0, 0, 3, 16, 16, SPR_TRUCK_STOP_DT_Y_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 3, 16, 16, SPR_TRUCK_STOP_DT_Y_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* drive-through bus stop X */
static const DrawTileSeqStruct _station_display_datas_0170[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 3, 16, SPR_BUS_STOP_DT_X_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 13, 0, 16, 3, 16, SPR_BUS_STOP_DT_X_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* drive-through bus stop Y */
static const DrawTileSeqStruct _station_display_datas_0171[] = {
TILE_SEQ_LINE(13, 0, 0, 3, 16, 16, SPR_BUS_STOP_DT_Y_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 3, 16, 16, SPR_BUS_STOP_DT_Y_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* road waypoint X */
static const DrawTileSeqStruct _station_display_datas_road_waypoint_X[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 3, 16, SPR_ROAD_WAYPOINT_X_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 13, 0, 16, 3, 16, SPR_ROAD_WAYPOINT_X_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
/* road waypoint Y */
static const DrawTileSeqStruct _station_display_datas_road_waypoint_Y[] = {
TILE_SEQ_LINE(13, 0, 0, 3, 16, 16, SPR_ROAD_WAYPOINT_Y_W | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 0, 0, 3, 16, 16, SPR_ROAD_WAYPOINT_Y_E | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_waypoint_X[] = {
TILE_SEQ_LINE( 0, 0, 0, 16, 5, 23, SPR_WAYPOINT_X_1 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE( 0, 11, 0, 16, 5, 23, SPR_WAYPOINT_X_2 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
static const DrawTileSeqStruct _station_display_datas_waypoint_Y[] = {
TILE_SEQ_LINE( 0, 0, 0, 5, 16, 23, SPR_WAYPOINT_Y_1 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_LINE(11, 0, 0, 5, 16, 23, SPR_WAYPOINT_Y_2 | (1U << PALETTE_MODIFIER_COLOUR))
TILE_SEQ_END()
};
#undef TILE_SEQ_END
#undef TILE_SEQ_LINE
#undef TILE_SEQ_LINE_PAL
#undef TILE_SEQ_CHILD
#undef TILE_SEQ_GROUND
/**
* Constructor macro of a DrawTileSprites structure
* Constructor macro of a DrawTileSpriteSpan 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 },
#define TILE_SPRITE_NULL() { {0, 0}, nullptr },
#define TILE_SPRITE_LINE_NOTHING(img) { {img, PAL_NONE} },
#define TILE_SPRITE_NULL() { {0, 0} },
extern const DrawTileSprites _station_display_datas_rail[] = {
extern const DrawTileSpriteSpan _station_display_datas_rail[] = {
TILE_SPRITE_LINE(SPR_RAIL_TRACK_X, _station_display_datas_0)
TILE_SPRITE_LINE(SPR_RAIL_TRACK_Y, _station_display_datas_1)
TILE_SPRITE_LINE(SPR_RAIL_TRACK_X, _station_display_datas_2)
@@ -814,20 +691,20 @@ extern const DrawTileSprites _station_display_datas_rail[] = {
TILE_SPRITE_LINE(SPR_RAIL_TRACK_Y, _station_display_datas_7)
};
static const DrawTileSprites _station_display_datas_airport[] = {
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_nothing) // APT_APRON
static const DrawTileSpriteSpan _station_display_datas_airport[] = {
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_APRON) // APT_APRON
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_fence_nw) // APT_APRON_FENCE_NW
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_fence_sw) // APT_APRON_FENCE_SW
TILE_SPRITE_LINE(SPR_AIRPORT_AIRCRAFT_STAND, _station_display_nothing) // APT_STAND
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_NS_WEST, _station_display_nothing) // APT_APRON_W
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_EW_SOUTH, _station_display_nothing) // APT_APRON_S
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_XING_SOUTH, _station_display_nothing) // APT_APRON_VER_CROSSING_S
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_XING_WEST, _station_display_nothing) // APT_APRON_HOR_CROSSING_W
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_NS_CTR, _station_display_nothing) // APT_APRON_VER_CROSSING_N
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_XING_EAST, _station_display_nothing) // APT_APRON_HOR_CROSSING_E
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_NS_EAST, _station_display_nothing) // APT_APRON_E
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_EW_NORTH, _station_display_nothing) // APT_ARPON_N
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_EW_CTR, _station_display_nothing) // APT_APRON_HOR
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_AIRCRAFT_STAND) // APT_STAND
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_NS_WEST) // APT_APRON_W
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_EW_SOUTH) // APT_APRON_S
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_XING_SOUTH) // APT_APRON_VER_CROSSING_S
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_XING_WEST) // APT_APRON_HOR_CROSSING_W
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_NS_CTR) // APT_APRON_VER_CROSSING_N
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_XING_EAST) // APT_APRON_HOR_CROSSING_E
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_NS_EAST) // APT_APRON_E
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_EW_NORTH) // APT_ARPON_N
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_TAXIWAY_EW_CTR) // APT_APRON_HOR
TILE_SPRITE_LINE(SPR_AIRPORT_TAXIWAY_EW_NORTH, _station_display_fence_sw) // APT_APRON_N_FENCE_SW
TILE_SPRITE_LINE(SPR_AIRPORT_RUNWAY_EXIT_A, _station_display_fence_se) // APT_RUNWAY_1
TILE_SPRITE_LINE(SPR_AIRPORT_RUNWAY_EXIT_B, _station_display_fence_se) // APT_RUNWAY_2
@@ -844,24 +721,24 @@ static const DrawTileSprites _station_display_datas_airport[] = {
TILE_SPRITE_LINE(SPR_AIRPORT_AIRCRAFT_STAND, _station_display_jetway_2) // APT_STAND_PIER_NE
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_jetway_3) // APT_PIER_NW_NE
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_passenger_tunnel) // APT_PIER
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_nothing) // APT_EMPTY
TILE_SPRITE_LINE_NOTHING(SPR_FLAT_GRASS_TILE) // APT_EMPTY
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_fence_ne) // APT_EMPTY_FENCE_NE
TILE_SPRITE_NULL() // APT_RADAR_GRASS_FENCE_SW
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_transmitter_fence_ne) // APT_RADIO_TOWER_FENCE_NE
TILE_SPRITE_LINE(SPR_AIRFIELD_TERM_A, _station_display_nothing) // APT_SMALL_BUILDING_3
TILE_SPRITE_LINE(SPR_AIRFIELD_TERM_B, _station_display_nothing) // APT_SMALL_BUILDING_2
TILE_SPRITE_LINE_NOTHING(SPR_AIRFIELD_TERM_A) // APT_SMALL_BUILDING_3
TILE_SPRITE_LINE_NOTHING(SPR_AIRFIELD_TERM_B) // APT_SMALL_BUILDING_2
TILE_SPRITE_LINE(SPR_AIRFIELD_TERM_C_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_terminal_c_2) // APT_SMALL_BUILDING_1
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_A, _station_display_fence_sw) // APT_GRASS_FENCE_SW
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_B, _station_display_nothing) // APT_GRASS_2
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_C, _station_display_nothing) // APT_GRASS_1
TILE_SPRITE_LINE_NOTHING(SPR_AIRFIELD_APRON_B) // APT_GRASS_2
TILE_SPRITE_LINE_NOTHING(SPR_AIRFIELD_APRON_C) // APT_GRASS_1
TILE_SPRITE_NULL() // APT_GRASS_FENCE_NE_FLAG
TILE_SPRITE_LINE(SPR_AIRFIELD_RUNWAY_NEAR_END, _station_display_fence_se) // APT_RUNWAY_SMALL_NEAR_END
TILE_SPRITE_LINE(SPR_AIRFIELD_RUNWAY_MIDDLE, _station_display_fence_se) // APT_RUNWAY_SMALL_MIDDLE
TILE_SPRITE_LINE(SPR_AIRFIELD_RUNWAY_FAR_END, _station_display_fence_se) // APT_RUNWAY_SMALL_FAR_END
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_small_depot_se) // APT_SMALL_DEPOT_SE
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_heliport) // APT_HELIPORT
TILE_SPRITE_LINE(SPR_AIRPORT_RUNWAY_END, _station_display_nothing) // APT_RUNWAY_END
TILE_SPRITE_LINE(SPR_AIRPORT_RUNWAY_EXIT_B, _station_display_nothing) // APT_RUNWAY_5
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_RUNWAY_END) // APT_RUNWAY_END
TILE_SPRITE_LINE_NOTHING(SPR_AIRPORT_RUNWAY_EXIT_B) // APT_RUNWAY_5
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_tower) // APT_TOWER
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_fence_ne) // APT_APRON_FENCE_NE
TILE_SPRITE_LINE(SPR_AIRPORT_RUNWAY_END, _station_display_fence_nw) // APT_RUNWAY_END_FENCE_NW
@@ -891,7 +768,7 @@ static const DrawTileSprites _station_display_datas_airport[] = {
TILE_SPRITE_NULL() // APT_GRASS_FENCE_NE_FLAG_2
};
static const DrawTileSprites _station_display_datas_airport_radar_grass_fence_sw[] = {
static const DrawTileSpriteSpan _station_display_datas_airport_radar_grass_fence_sw[] = {
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_radar_1_fence_sw) // APT_RADAR_GRASS_FENCE_SW
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_radar_2_fence_sw)
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_radar_3_fence_sw)
@@ -906,14 +783,14 @@ static const DrawTileSprites _station_display_datas_airport_radar_grass_fence_sw
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_radar_12_fence_sw)
};
static const DrawTileSprites _station_display_datas_airport_flag_grass_fence_ne[] = {
static const DrawTileSpriteSpan _station_display_datas_airport_flag_grass_fence_ne[] = {
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_D, _station_display_flag_1_fence_ne) // APT_GRASS_FENCE_NE_FLAG
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_D, _station_display_flag_2_fence_ne)
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_D, _station_display_flag_3_fence_ne)
TILE_SPRITE_LINE(SPR_AIRFIELD_APRON_D, _station_display_flag_4_fence_ne)
};
static const DrawTileSprites _station_display_datas_airport_radar_fence_sw[] = {
static const DrawTileSpriteSpan _station_display_datas_airport_radar_fence_sw[] = {
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_1_fence_sw) // APT_RADAR_FENCE_SW
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_2_fence_sw)
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_3_fence_sw)
@@ -928,7 +805,7 @@ static const DrawTileSprites _station_display_datas_airport_radar_fence_sw[] = {
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_12_fence_sw)
};
static const DrawTileSprites _station_display_datas_airport_radar_fence_ne[] = {
static const DrawTileSpriteSpan _station_display_datas_airport_radar_fence_ne[] = {
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_1_fence_ne) // APT_RADAR_FENCE_NE
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_2_fence_ne)
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_3_fence_ne)
@@ -943,7 +820,7 @@ static const DrawTileSprites _station_display_datas_airport_radar_fence_ne[] = {
TILE_SPRITE_LINE(SPR_AIRPORT_APRON, _station_display_radar_12_fence_ne)
};
static const DrawTileSprites _station_display_datas_airport_flag_grass_fence_ne_2[] = {
static const DrawTileSpriteSpan _station_display_datas_airport_flag_grass_fence_ne_2[] = {
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_flag_1_fence_ne) // APT_GRASS_FENCE_NE_FLAG_2
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_flag_2_fence_ne)
TILE_SPRITE_LINE(SPR_FLAT_GRASS_TILE, _station_display_flag_3_fence_ne)
@@ -951,7 +828,7 @@ static const DrawTileSprites _station_display_datas_airport_flag_grass_fence_ne_
};
static const DrawTileSprites _station_display_datas_truck[] = {
static const DrawTileSpriteSpan _station_display_datas_truck[] = {
TILE_SPRITE_LINE(SPR_TRUCK_STOP_NE_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_67)
TILE_SPRITE_LINE(SPR_TRUCK_STOP_SE_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_68)
TILE_SPRITE_LINE(SPR_TRUCK_STOP_SW_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_69)
@@ -960,7 +837,7 @@ static const DrawTileSprites _station_display_datas_truck[] = {
TILE_SPRITE_LINE(SPR_ROAD_PAVED_STRAIGHT_Y, _station_display_datas_0169)
};
static const DrawTileSprites _station_display_datas_bus[] = {
static const DrawTileSpriteSpan _station_display_datas_bus[] = {
TILE_SPRITE_LINE(SPR_BUS_STOP_NE_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_71)
TILE_SPRITE_LINE(SPR_BUS_STOP_SE_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_72)
TILE_SPRITE_LINE(SPR_BUS_STOP_SW_GROUND | (1U << PALETTE_MODIFIER_COLOUR), _station_display_datas_73)
@@ -969,20 +846,20 @@ static const DrawTileSprites _station_display_datas_bus[] = {
TILE_SPRITE_LINE(SPR_ROAD_PAVED_STRAIGHT_Y, _station_display_datas_0171)
};
static const DrawTileSprites _station_display_datas_road_waypoint[] = {
TILE_SPRITE_LINE(0, nullptr)
TILE_SPRITE_LINE(0, nullptr)
TILE_SPRITE_LINE(0, nullptr)
TILE_SPRITE_LINE(0, nullptr)
static const DrawTileSpriteSpan _station_display_datas_road_waypoint[] = {
TILE_SPRITE_NULL()
TILE_SPRITE_NULL()
TILE_SPRITE_NULL()
TILE_SPRITE_NULL()
TILE_SPRITE_LINE(SPR_ROAD_PAVED_STRAIGHT_X, _station_display_datas_road_waypoint_X)
TILE_SPRITE_LINE(SPR_ROAD_PAVED_STRAIGHT_Y, _station_display_datas_road_waypoint_Y)
};
static const DrawTileSprites _station_display_datas_oilrig[] = {
TILE_SPRITE_LINE(SPR_FLAT_WATER_TILE, _station_display_nothing)
static const DrawTileSpriteSpan _station_display_datas_oilrig[] = {
TILE_SPRITE_LINE_NOTHING(SPR_FLAT_WATER_TILE)
};
static const DrawTileSprites _station_display_datas_dock[] = {
static const DrawTileSpriteSpan _station_display_datas_dock[] = {
TILE_SPRITE_LINE(SPR_SHORE_BASE + SLOPE_SW, _station_display_datas_76)
TILE_SPRITE_LINE(SPR_SHORE_BASE + SLOPE_NW, _station_display_datas_77)
TILE_SPRITE_LINE(SPR_SHORE_BASE + SLOPE_NE, _station_display_datas_78)
@@ -991,11 +868,11 @@ static const DrawTileSprites _station_display_datas_dock[] = {
TILE_SPRITE_LINE(SPR_FLAT_WATER_TILE, _station_display_datas_81)
};
static const DrawTileSprites _station_display_datas_buoy[] = {
static const DrawTileSpriteSpan _station_display_datas_buoy[] = {
TILE_SPRITE_LINE(SPR_FLAT_WATER_TILE, _station_display_datas_82)
};
static const DrawTileSprites _station_display_datas_waypoint[] = {
static const DrawTileSpriteSpan _station_display_datas_waypoint[] = {
TILE_SPRITE_LINE(SPR_RAIL_TRACK_X, _station_display_datas_waypoint_X)
TILE_SPRITE_LINE(SPR_RAIL_TRACK_Y, _station_display_datas_waypoint_Y)
TILE_SPRITE_LINE(SPR_RAIL_TRACK_X, _station_display_datas_waypoint_X)
@@ -1007,13 +884,14 @@ static const DrawTileSprites _station_display_datas_waypoint[] = {
};
#undef TILE_SPRITE_LINE
#undef TILE_SPRITE_LINE_NOTHING
#undef TILE_SPRITE_NULL
/* Default waypoint is also drawn as fallback for NewGRF waypoints.
* As these are drawn/build like stations, they may use the same number of layouts. */
static_assert(lengthof(_station_display_datas_rail) == lengthof(_station_display_datas_waypoint));
static const std::array<std::span<const DrawTileSprites>, STATION_END> _station_display_datas = {{
static const std::array<std::span<const DrawTileSpriteSpan>, to_underlying(StationType::End)> _station_display_datas = {{
_station_display_datas_rail,
_station_display_datas_airport,
_station_display_datas_truck,

View File

@@ -9,164 +9,163 @@
#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
enum class CmdFlag : uint8_t {
DontCount, ///< These commands aren't counted for comparison
Case, ///< These commands support cases
Gender, ///< These commands support genders
};
DECLARE_ENUM_AS_BIT_SET(CmdFlags)
using CmdFlags = EnumBitSet<CmdFlag, uint8_t>;
struct Buffer;
typedef void (*ParseCmdProc)(Buffer *buffer, char *buf, int value);
class StringBuilder;
typedef void (*ParseCmdProc)(StringBuilder &builder, const char *buf, char32_t value);
struct CmdStruct {
const char *cmd;
std::string_view cmd;
ParseCmdProc proc;
long value;
char32_t value;
uint8_t consumes;
int8_t default_plural_offset;
std::optional<size_t> 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);
extern void EmitSingleChar(StringBuilder &builder, const char *buf, char32_t value);
extern void EmitPlural(StringBuilder &builder, const char *buf, char32_t value);
extern void EmitGender(StringBuilder &builder, const char *buf, char32_t 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},
{"NORMAL_FONT", EmitSingleChar, SCC_NORMALFONT, 0, std::nullopt, {}},
{"TINY_FONT", EmitSingleChar, SCC_TINYFONT, 0, std::nullopt, {}},
{"BIG_FONT", EmitSingleChar, SCC_BIGFONT, 0, std::nullopt, {}},
{"MONO_FONT", EmitSingleChar, SCC_MONOFONT, 0, std::nullopt, {}},
/* 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},
{"COLOUR", EmitSingleChar, SCC_COLOUR, 1, -1, C_NONE},
{"PUSH_COLOUR", EmitSingleChar, SCC_PUSH_COLOUR, 0, -1, C_DONTCOUNT},
{"POP_COLOUR", EmitSingleChar, SCC_POP_COLOUR, 0, -1, C_DONTCOUNT},
{"BLUE", EmitSingleChar, SCC_BLUE, 0, std::nullopt, {CmdFlag::DontCount}},
{"SILVER", EmitSingleChar, SCC_SILVER, 0, std::nullopt, {CmdFlag::DontCount}},
{"GOLD", EmitSingleChar, SCC_GOLD, 0, std::nullopt, {CmdFlag::DontCount}},
{"RED", EmitSingleChar, SCC_RED, 0, std::nullopt, {CmdFlag::DontCount}},
{"PURPLE", EmitSingleChar, SCC_PURPLE, 0, std::nullopt, {CmdFlag::DontCount}},
{"LTBROWN", EmitSingleChar, SCC_LTBROWN, 0, std::nullopt, {CmdFlag::DontCount}},
{"ORANGE", EmitSingleChar, SCC_ORANGE, 0, std::nullopt, {CmdFlag::DontCount}},
{"GREEN", EmitSingleChar, SCC_GREEN, 0, std::nullopt, {CmdFlag::DontCount}},
{"YELLOW", EmitSingleChar, SCC_YELLOW, 0, std::nullopt, {CmdFlag::DontCount}},
{"DKGREEN", EmitSingleChar, SCC_DKGREEN, 0, std::nullopt, {CmdFlag::DontCount}},
{"CREAM", EmitSingleChar, SCC_CREAM, 0, std::nullopt, {CmdFlag::DontCount}},
{"BROWN", EmitSingleChar, SCC_BROWN, 0, std::nullopt, {CmdFlag::DontCount}},
{"WHITE", EmitSingleChar, SCC_WHITE, 0, std::nullopt, {CmdFlag::DontCount}},
{"LTBLUE", EmitSingleChar, SCC_LTBLUE, 0, std::nullopt, {CmdFlag::DontCount}},
{"GRAY", EmitSingleChar, SCC_GRAY, 0, std::nullopt, {CmdFlag::DontCount}},
{"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, std::nullopt, {CmdFlag::DontCount}},
{"BLACK", EmitSingleChar, SCC_BLACK, 0, std::nullopt, {CmdFlag::DontCount}},
{"COLOUR", EmitSingleChar, SCC_COLOUR, 1, std::nullopt, {}},
{"PUSH_COLOUR", EmitSingleChar, SCC_PUSH_COLOUR, 0, std::nullopt, {CmdFlag::DontCount}},
{"POP_COLOUR", EmitSingleChar, SCC_POP_COLOUR, 0, std::nullopt, {CmdFlag::DontCount}},
{"REV", EmitSingleChar, SCC_REVISION, 0, -1, C_NONE}, // openttd revision string
{"REV", EmitSingleChar, SCC_REVISION, 0, std::nullopt, {}}, // 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
{"STRING1", EmitSingleChar, SCC_STRING1, 2, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // included string that consumes the string id and ONE argument
{"STRING2", EmitSingleChar, SCC_STRING2, 3, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // included string that consumes the string id and TWO arguments
{"STRING3", EmitSingleChar, SCC_STRING3, 4, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // included string that consumes the string id and THREE arguments
{"STRING4", EmitSingleChar, SCC_STRING4, 5, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // included string that consumes the string id and FOUR arguments
{"STRING5", EmitSingleChar, SCC_STRING5, 6, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // included string that consumes the string id and FIVE arguments
{"STRING6", EmitSingleChar, SCC_STRING6, 7, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // included string that consumes the string id and SIX arguments
{"STRING7", EmitSingleChar, SCC_STRING7, 8, std::nullopt, {CmdFlag::Case, CmdFlag::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 | C_GENDER}, // 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},
{"POWER_TO_WEIGHT", EmitSingleChar, SCC_POWER_TO_WEIGHT, 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},
{"STATION_FEATURES", EmitSingleChar, SCC_STATION_FEATURES, 1, std::nullopt, {}}, // station features string, icons of the features
{"INDUSTRY", EmitSingleChar, SCC_INDUSTRY_NAME, 1, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}}, // industry, takes an industry #, can have cases
{"CARGO_LONG", EmitSingleChar, SCC_CARGO_LONG, 2, 1, {CmdFlag::Gender}},
{"CARGO_SHORT", EmitSingleChar, SCC_CARGO_SHORT, 2, 1, {CmdFlag::Gender}}, // short cargo description, only ### tons, or ### litres
{"CARGO_TINY", EmitSingleChar, SCC_CARGO_TINY, 2, 1, {}}, // 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, std::nullopt, {CmdFlag::Case}},
{"POWER", EmitSingleChar, SCC_POWER, 1, 0, {}},
{"POWER_TO_WEIGHT", EmitSingleChar, SCC_POWER_TO_WEIGHT, 1, 0, {}},
{"VOLUME_LONG", EmitSingleChar, SCC_VOLUME_LONG, 1, 0, {}},
{"VOLUME_SHORT", EmitSingleChar, SCC_VOLUME_SHORT, 1, 0, {}},
{"WEIGHT_LONG", EmitSingleChar, SCC_WEIGHT_LONG, 1, 0, {}},
{"WEIGHT_SHORT", EmitSingleChar, SCC_WEIGHT_SHORT, 1, 0, {}},
{"FORCE", EmitSingleChar, SCC_FORCE, 1, 0, {}},
{"VELOCITY", EmitSingleChar, SCC_VELOCITY, 1, 0, {}},
{"HEIGHT", EmitSingleChar, SCC_HEIGHT, 1, 0, {}},
{"UNITS_DAYS_OR_SECONDS", EmitSingleChar, SCC_UNITS_DAYS_OR_SECONDS, 1, 0, C_GENDER},
{"UNITS_MONTHS_OR_MINUTES", EmitSingleChar, SCC_UNITS_MONTHS_OR_MINUTES, 1, 0, C_GENDER},
{"UNITS_YEARS_OR_PERIODS", EmitSingleChar, SCC_UNITS_YEARS_OR_PERIODS, 1, 0, C_GENDER},
{"UNITS_YEARS_OR_MINUTES", EmitSingleChar, SCC_UNITS_YEARS_OR_MINUTES, 1, 0, C_GENDER},
{"UNITS_DAYS_OR_SECONDS", EmitSingleChar, SCC_UNITS_DAYS_OR_SECONDS, 1, 0, {CmdFlag::Gender}},
{"UNITS_MONTHS_OR_MINUTES", EmitSingleChar, SCC_UNITS_MONTHS_OR_MINUTES, 1, 0, {CmdFlag::Gender}},
{"UNITS_YEARS_OR_PERIODS", EmitSingleChar, SCC_UNITS_YEARS_OR_PERIODS, 1, 0, {CmdFlag::Gender}},
{"UNITS_YEARS_OR_MINUTES", EmitSingleChar, SCC_UNITS_YEARS_OR_MINUTES, 1, 0, {CmdFlag::Gender}},
{"P", EmitPlural, 0, 0, -1, C_DONTCOUNT}, // plural specifier
{"G", EmitGender, 0, 0, -1, C_DONTCOUNT}, // gender specifier
{"P", EmitPlural, 0, 0, std::nullopt, {CmdFlag::DontCount}}, // plural specifier
{"G", EmitGender, 0, 0, std::nullopt, {CmdFlag::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},
{"DATE_TINY", EmitSingleChar, SCC_DATE_TINY, 1, std::nullopt, {}},
{"DATE_SHORT", EmitSingleChar, SCC_DATE_SHORT, 1, std::nullopt, {CmdFlag::Case}},
{"DATE_LONG", EmitSingleChar, SCC_DATE_LONG, 1, std::nullopt, {CmdFlag::Case}},
{"DATE_ISO", EmitSingleChar, SCC_DATE_ISO, 1, std::nullopt, {}},
{"STRING", EmitSingleChar, SCC_STRING, 1, -1, C_CASE | C_GENDER},
{"RAW_STRING", EmitSingleChar, SCC_RAW_STRING_POINTER, 1, -1, C_NONE | C_GENDER},
{"STRING", EmitSingleChar, SCC_STRING, 1, std::nullopt, {CmdFlag::Case, CmdFlag::Gender}},
{"RAW_STRING", EmitSingleChar, SCC_RAW_STRING_POINTER, 1, std::nullopt, {CmdFlag::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
{"COMMA", EmitSingleChar, SCC_COMMA, 1, 0, {}}, // Number with comma
{"DECIMAL", EmitSingleChar, SCC_DECIMAL, 2, 0, {}}, // 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, {}}, // Signed number
{"ZEROFILL_NUM", EmitSingleChar, SCC_ZEROFILL_NUM, 2, 0, {}}, // Unsigned number with zero fill, e.g. "02". First parameter is number, second minimum length
{"BYTES", EmitSingleChar, SCC_BYTES, 1, 0, {}}, // Unsigned number with "bytes", i.e. "1.02 MiB or 123 KiB"
{"HEX", EmitSingleChar, SCC_HEX, 1, 0, {}}, // 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
{"CURRENCY_LONG", EmitSingleChar, SCC_CURRENCY_LONG, 1, 0, {}},
{"CURRENCY_SHORT", EmitSingleChar, SCC_CURRENCY_SHORT, 1, 0, {}}, // 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},
{"WAYPOINT", EmitSingleChar, SCC_WAYPOINT_NAME, 1, std::nullopt, {CmdFlag::Gender}}, // waypoint name
{"STATION", EmitSingleChar, SCC_STATION_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"DEPOT", EmitSingleChar, SCC_DEPOT_NAME, 2, std::nullopt, {CmdFlag::Gender}},
{"TOWN", EmitSingleChar, SCC_TOWN_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"GROUP", EmitSingleChar, SCC_GROUP_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"SIGN", EmitSingleChar, SCC_SIGN_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"ENGINE", EmitSingleChar, SCC_ENGINE_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"VEHICLE", EmitSingleChar, SCC_VEHICLE_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"COMPANY", EmitSingleChar, SCC_COMPANY_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"COMPANY_NUM", EmitSingleChar, SCC_COMPANY_NUM, 1, std::nullopt, {}},
{"PRESIDENT_NAME", EmitSingleChar, SCC_PRESIDENT_NAME, 1, std::nullopt, {CmdFlag::Gender}},
{"SPACE", EmitSingleChar, ' ', 0, -1, C_DONTCOUNT},
{"", 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},
{"SPACE", EmitSingleChar, ' ', 0, std::nullopt, {CmdFlag::DontCount}},
{"", EmitSingleChar, '\n', 0, std::nullopt, {CmdFlag::DontCount}},
{"{", EmitSingleChar, '{', 0, std::nullopt, {CmdFlag::DontCount}},
{"UP_ARROW", EmitSingleChar, SCC_UP_ARROW, 0, std::nullopt, {CmdFlag::DontCount}},
{"SMALL_UP_ARROW", EmitSingleChar, SCC_SMALL_UP_ARROW, 0, std::nullopt, {CmdFlag::DontCount}},
{"SMALL_DOWN_ARROW", EmitSingleChar, SCC_SMALL_DOWN_ARROW, 0, std::nullopt, {CmdFlag::DontCount}},
{"TRAIN", EmitSingleChar, SCC_TRAIN, 0, std::nullopt, {CmdFlag::DontCount}},
{"LORRY", EmitSingleChar, SCC_LORRY, 0, std::nullopt, {CmdFlag::DontCount}},
{"BUS", EmitSingleChar, SCC_BUS, 0, std::nullopt, {CmdFlag::DontCount}},
{"PLANE", EmitSingleChar, SCC_PLANE, 0, std::nullopt, {CmdFlag::DontCount}},
{"SHIP", EmitSingleChar, SCC_SHIP, 0, std::nullopt, {CmdFlag::DontCount}},
{"NBSP", EmitSingleChar, 0xA0, 0, std::nullopt, {CmdFlag::DontCount}},
{"COPYRIGHT", EmitSingleChar, 0xA9, 0, std::nullopt, {CmdFlag::DontCount}},
{"DOWN_ARROW", EmitSingleChar, SCC_DOWN_ARROW, 0, std::nullopt, {CmdFlag::DontCount}},
{"CHECKMARK", EmitSingleChar, SCC_CHECKMARK, 0, std::nullopt, {CmdFlag::DontCount}},
{"CROSS", EmitSingleChar, SCC_CROSS, 0, std::nullopt, {CmdFlag::DontCount}},
{"RIGHT_ARROW", EmitSingleChar, SCC_RIGHT_ARROW, 0, std::nullopt, {CmdFlag::DontCount}},
{"SMALL_LEFT_ARROW", EmitSingleChar, SCC_LESS_THAN, 0, std::nullopt, {CmdFlag::DontCount}},
{"SMALL_RIGHT_ARROW", EmitSingleChar, SCC_GREATER_THAN, 0, std::nullopt, {CmdFlag::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},
{"LRM", EmitSingleChar, CHAR_TD_LRM, 0, std::nullopt, {CmdFlag::DontCount}},
{"RLM", EmitSingleChar, CHAR_TD_RLM, 0, std::nullopt, {CmdFlag::DontCount}},
{"LRE", EmitSingleChar, CHAR_TD_LRE, 0, std::nullopt, {CmdFlag::DontCount}},
{"RLE", EmitSingleChar, CHAR_TD_RLE, 0, std::nullopt, {CmdFlag::DontCount}},
{"LRO", EmitSingleChar, CHAR_TD_LRO, 0, std::nullopt, {CmdFlag::DontCount}},
{"RLO", EmitSingleChar, CHAR_TD_RLO, 0, std::nullopt, {CmdFlag::DontCount}},
{"PDF", EmitSingleChar, CHAR_TD_PDF, 0, std::nullopt, {CmdFlag::DontCount}},
};
/** Description of a plural form */
struct PluralForm {
int plural_count; ///< The number of plural forms
size_t 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;
static const size_t MAX_PLURALS = 5;
/** All plural forms used */
static const PluralForm _plural_forms[] = {

View File

@@ -1799,477 +1799,477 @@ static_assert(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4);
* @param bn building name
* @param rr rating decrease if removed
* @param mg mail generation multiplier
* @param ca1 acceptance for 1st CargoID
* @param ca2 acceptance for 2nd CargoID
* @param ca3 acceptance for 3rd CargoID
* @param ca1 acceptance for 1st CargoType
* @param ca2 acceptance for 2nd CargoType
* @param ca3 acceptance for 3rd CargoType
* @param bf building flags (size, stadium etc...)
* @param ba building availability (zone, climate...)
* @param cg1 1st CargoID available
* @param cg2 2nd CargoID available
* @param cg3 3rd CargoID available
* @param cg1 1st CargoType available
* @param cg2 2nd CargoType available
* @param cg3 3rd CargoType available
* @see HouseSpec
*/
#define MS(mnd, mxd, p, rc, bn, rr, mg, ca1, ca2, ca3, bf, ba, cg1, cg2, cg3) \
{mnd, mxd, p, rc, bn, rr, mg, \
{TimerGameCalendar::Year{mnd}, TimerGameCalendar::Year{mxd}, p, rc, bn, rr, mg, \
{ca1, ca2, ca3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
{INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO, INVALID_CARGO}, \
bf, ba, true, GRFFileProps(INVALID_HOUSE_ID), 0, {COLOUR_BEGIN, COLOUR_BEGIN, COLOUR_BEGIN, COLOUR_BEGIN}, \
16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0, {cg1, cg2, cg3}, }
bf, ba, true, GRFFileProps(INVALID_HOUSE_ID), HouseCallbackMasks{}, {COLOUR_BEGIN, COLOUR_BEGIN, COLOUR_BEGIN, COLOUR_BEGIN}, \
16, HouseExtraFlags{}, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0, {}, {cg1, cg2, cg3}, }
/** House specifications from original data */
extern const HouseSpec _original_house_specs[NEW_HOUSE_OFFSET] = {
/**
* remove_rating_decrease
* | mail_generation
* min_year | | 1st CargoID acceptance
* | CalendarTime::MAX_YEAR | | | 2nd CargoID acceptance
* | | population | | | | 3th CargoID acceptance
* min_year | | 1st CargoType acceptance
* | CalendarTime::MAX_YEAR | | | 2nd CargoType acceptance
* | | population | | | | 3th CargoType acceptance
* | | | removal_cost | | | | |
* | | | | building_name | | | | |
* | | | | | | | | | |
* | | | | | | | | | |
* +-building_flags | | | | | | | |
* +-building_availability | | | | | | |
* +-cargoID accepted | | | | | | | |
* +-cargo type accepted | | | | | | |
* | | | | | | | | | | |
*/
MS(1963, CalendarTime::MAX_YEAR, 187, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 70, 8, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 00
MS(1957, CalendarTime::MAX_YEAR, 85, 140, STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1, 130, 55, 8, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 01
MS(1968, CalendarTime::MAX_YEAR, 40, 100, STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1, 90, 20, 8, 3, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 02
MS( 0, CalendarTime::MAX_YEAR, 5, 90, STR_TOWN_BUILDING_NAME_CHURCH_1, 230, 2, 2, 0, 0,
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 03
MS(1975, CalendarTime::MAX_YEAR, 220, 160, STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1, 160, 85, 10, 4, 6,
BUILDING_IS_ANIMATED | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsAnimated, BuildingFlag::Size1x1}),
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 04
MS(1975, CalendarTime::MAX_YEAR, 220, 160, STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1, 160, 85, 10, 4, 6,
BUILDING_IS_ANIMATED | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsAnimated, BuildingFlag::Size1x1}),
HZ_SUBARTC_ABOVE | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 05
MS( 0, CalendarTime::MAX_YEAR, 30, 80, STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1, 80, 12, 4, 1, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 06
MS(1959, CalendarTime::MAX_YEAR, 140, 180, STR_TOWN_BUILDING_NAME_HOTEL_1, 150, 22, 6, 1, 2,
TILE_SIZE_1x2,
BuildingFlag::Size1x2,
HZ_TEMP | HZ_ZON5 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 07
MS(1959, CalendarTime::MAX_YEAR, 0, 180, STR_TOWN_BUILDING_NAME_HOTEL_1, 150, 22, 6, 1, 2,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 08
MS(1945, CalendarTime::MAX_YEAR, 0, 65, STR_TOWN_BUILDING_NAME_STATUE_1, 40, 0, 2, 0, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 09
MS(1945, CalendarTime::MAX_YEAR, 0, 65, STR_TOWN_BUILDING_NAME_FOUNTAIN_1, 40, 0, 2, 0, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0A
MS( 0, CalendarTime::MAX_YEAR, 0, 60, STR_TOWN_BUILDING_NAME_PARK_1, 75, 0, 2, 0, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0B
MS(1935, CalendarTime::MAX_YEAR, 0, 60, STR_TOWN_BUILDING_NAME_PARK_1, 75, 0, 2, 0, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0C
MS(1951, CalendarTime::MAX_YEAR, 150, 130, STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2, 110, 65, 8, 2, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0D
MS(1930, 1960, 95, 110, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 100, 48, 6, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0E
MS(1930, 1960, 95, 105, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 100, 48, 6, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0F
MS(1930, 1960, 95, 107, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 100, 48, 6, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 10
MS(1977, CalendarTime::MAX_YEAR, 130, 200, STR_TOWN_BUILDING_NAME_MODERN_OFFICE_BUILDING_1, 150, 50, 10, 3, 6,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 11
MS(1983, CalendarTime::MAX_YEAR, 6, 145, STR_TOWN_BUILDING_NAME_WAREHOUSE_1, 110, 10, 6, 3, 8,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 12
MS(1985, CalendarTime::MAX_YEAR, 110, 155, STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_3, 110, 55, 6, 2, 6,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 13
MS( 0, CalendarTime::MAX_YEAR, 65, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
BUILDING_IS_STADIUM | TILE_SIZE_2x2,
BuildingFlags({BuildingFlag::IsStadium, BuildingFlag::Size2x2}),
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 14
MS( 0, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 15
MS( 0, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 16
MS( 0, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 17
MS( 0, 1951, 15, 70, STR_TOWN_BUILDING_NAME_OLD_HOUSES_1, 75, 6, 3, 1, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 18
MS( 0, 1952, 12, 75, STR_TOWN_BUILDING_NAME_COTTAGES_1, 75, 7, 3, 1, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 19
MS(1931, CalendarTime::MAX_YEAR, 13, 71, STR_TOWN_BUILDING_NAME_HOUSES_1, 75, 8, 3, 1, 0,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1A
MS(1935, CalendarTime::MAX_YEAR, 100, 135, STR_TOWN_BUILDING_NAME_FLATS_1, 100, 35, 7, 2, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1B
MS(1963, CalendarTime::MAX_YEAR, 170, 145, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_2, 170, 50, 8, 3, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1C
MS( 0, 1955, 100, 132, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_2, 135, 40, 6, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1D
MS(1973, CalendarTime::MAX_YEAR, 180, 155, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_3, 180, 64, 8, 3, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1E
MS( 0, CalendarTime::MAX_YEAR, 35, 220, STR_TOWN_BUILDING_NAME_THEATER_1, 230, 23, 8, 2, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1F
MS(1958, CalendarTime::MAX_YEAR, 65, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
BUILDING_IS_STADIUM | TILE_SIZE_2x2,
BuildingFlags({BuildingFlag::IsStadium, BuildingFlag::Size2x2}),
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 20
MS(1958, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 21
MS(1958, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 22
MS(1958, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 23
MS(2000, CalendarTime::MAX_YEAR, 140, 170, STR_TOWN_BUILDING_NAME_OFFICES_1, 250, 65, 8, 3, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 24
MS( 0, 1960, 15, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 25
MS( 0, 1960, 15, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 26
MS(1945, CalendarTime::MAX_YEAR, 35, 210, STR_TOWN_BUILDING_NAME_CINEMA_1, 230, 23, 8, 2, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 27
MS(1983, CalendarTime::MAX_YEAR, 180, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
TILE_SIZE_2x2,
BuildingFlag::Size2x2,
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 |HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 28
MS(1983, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 29
MS(1983, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 2A
MS(1983, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 2B
MS( 0, CalendarTime::MAX_YEAR, 80, 100, STR_TOWN_BUILDING_NAME_FLATS_1, 90, 20, 5, 2, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2C
MS( 0, CalendarTime::MAX_YEAR, 80, 100, STR_TOWN_BUILDING_NAME_FLATS_1, 90, 20, 5, 2, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2D
MS( 0, CalendarTime::MAX_YEAR, 16, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2E
MS( 0, CalendarTime::MAX_YEAR, 16, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2F
MS( 0, 1963, 14, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 30
MS( 0, 1963, 14, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 31
MS(1966, CalendarTime::MAX_YEAR, 135, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 120, 60, 8, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 32
MS(1966, CalendarTime::MAX_YEAR, 135, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 120, 60, 8, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 33
MS(1970, CalendarTime::MAX_YEAR, 170, 170, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 70, 9, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 34
MS(1970, CalendarTime::MAX_YEAR, 170, 170, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 70, 9, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 35
MS(1974, CalendarTime::MAX_YEAR, 210, 200, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 10, 3, 5,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 36
MS(1974, CalendarTime::MAX_YEAR, 210, 200, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 10, 3, 5,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 37
MS( 0, CalendarTime::MAX_YEAR, 10, 60, STR_TOWN_BUILDING_NAME_HOUSES_2, 60, 5, 2, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 38
MS( 0, CalendarTime::MAX_YEAR, 10, 60, STR_TOWN_BUILDING_NAME_HOUSES_2, 60, 5, 2, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 39
MS( 0, CalendarTime::MAX_YEAR, 25, 100, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 80, 20, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3A
MS( 0, CalendarTime::MAX_YEAR, 25, 100, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 80, 20, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3B
MS( 0, CalendarTime::MAX_YEAR, 6, 85, STR_TOWN_BUILDING_NAME_CHURCH_1, 230, 2, 2, 0, 0,
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
HZ_SUBARTC_BELOW | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 3C
MS( 0, CalendarTime::MAX_YEAR, 6, 85, STR_TOWN_BUILDING_NAME_CHURCH_1, 230, 2, 2, 0, 0,
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
HZ_SUBARTC_ABOVE | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 3D
MS( 0, CalendarTime::MAX_YEAR, 17, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 7, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3E
MS( 0, CalendarTime::MAX_YEAR, 17, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 7, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3F
MS( 0, 1960, 90, 140, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 110, 45, 6, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 40
MS( 0, 1960, 90, 140, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 110, 45, 6, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 41
MS(1972, CalendarTime::MAX_YEAR, 140, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 3,
TILE_SIZE_1x2,
BuildingFlag::Size1x2,
HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 42
MS(1972, CalendarTime::MAX_YEAR, 0, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 2,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 43
MS(1972, CalendarTime::MAX_YEAR, 140, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 3,
TILE_SIZE_1x2,
BuildingFlag::Size1x2,
HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 44
MS(1972, CalendarTime::MAX_YEAR, 0, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 2,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 45
MS(1963, CalendarTime::MAX_YEAR, 105, 130, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 105, 50, 7, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 46
MS(1963, CalendarTime::MAX_YEAR, 105, 130, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 105, 50, 7, 2, 3,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 47
MS(1978, CalendarTime::MAX_YEAR, 190, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 135, 75, 9, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 48
MS(1978, CalendarTime::MAX_YEAR, 190, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 135, 75, 9, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 49
MS(1967, CalendarTime::MAX_YEAR, 250, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
TILE_SIZE_2x1,
BuildingFlag::Size2x1,
HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4A
MS(1967, CalendarTime::MAX_YEAR, 0, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4B
MS(1967, CalendarTime::MAX_YEAR, 250, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
TILE_SIZE_2x1,
BuildingFlag::Size2x1,
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4C
MS(1967, CalendarTime::MAX_YEAR, 0, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4D
MS( 0, CalendarTime::MAX_YEAR, 16, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 4E
MS( 0, CalendarTime::MAX_YEAR, 16, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 4F
MS( 0, CalendarTime::MAX_YEAR, 16, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 5, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 50
MS( 0, CalendarTime::MAX_YEAR, 7, 30, STR_TOWN_BUILDING_NAME_HOUSES_2, 30, 4, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 51
MS( 0, CalendarTime::MAX_YEAR, 45, 130, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 15, 6, 2, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 52
MS( 0, CalendarTime::MAX_YEAR, 8, 90, STR_TOWN_BUILDING_NAME_CHURCH_1, 200, 3, 2, 0, 0,
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
HZ_SUBTROPIC | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 53
MS( 0, CalendarTime::MAX_YEAR, 18, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 7, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 54
MS(1973, CalendarTime::MAX_YEAR, 90, 110, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 24, 6, 2, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 55
MS(1962, CalendarTime::MAX_YEAR, 120, 120, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 25, 6, 2, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 56
MS(1984, CalendarTime::MAX_YEAR, 250, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 8, 3, 4,
TILE_SIZE_2x1,
BuildingFlag::Size2x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 57
MS(1984, CalendarTime::MAX_YEAR, 0, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 8, 3, 4,
TILE_NO_FLAG,
{},
HZ_SUBTROPIC,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 58
MS( 0, CalendarTime::MAX_YEAR, 80, 110, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 23, 6, 2, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 59
MS(1993, CalendarTime::MAX_YEAR, 180, 180, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 150, 90, 8, 3, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 5A
MS( 0, CalendarTime::MAX_YEAR, 8, 90, STR_TOWN_BUILDING_NAME_CHURCH_1, 200, 3, 2, 0, 0,
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5B
MS( 0, CalendarTime::MAX_YEAR, 18, 90, STR_TOWN_BUILDING_NAME_HOUSES_2, 90, 5, 6, 2, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5C
MS( 0, CalendarTime::MAX_YEAR, 7, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 50, 3, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5D
MS( 0, CalendarTime::MAX_YEAR, 15, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5E
MS( 0, CalendarTime::MAX_YEAR, 17, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5F
MS( 0, CalendarTime::MAX_YEAR, 19, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 60
MS( 0, CalendarTime::MAX_YEAR, 21, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 61
MS( 0, CalendarTime::MAX_YEAR, 75, 160, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 20, 8, 4, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 62
MS( 0, CalendarTime::MAX_YEAR, 35, 90, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 9, 4, 1, 2,
TILE_SIZE_1x2,
BuildingFlag::Size1x2,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 63
MS( 0, CalendarTime::MAX_YEAR, 0, 90, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 0, 4, 1, 2,
TILE_NO_FLAG,
{},
HZ_NOZNS,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 64
MS( 0, CalendarTime::MAX_YEAR, 85, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 18, 8, 4, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 65
MS( 0, CalendarTime::MAX_YEAR, 11, 60, STR_TOWN_BUILDING_NAME_IGLOO_1, 45, 3, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 66
MS( 0, CalendarTime::MAX_YEAR, 10, 60, STR_TOWN_BUILDING_NAME_TEPEES_1, 45, 3, 3, 1, 1,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 67
MS( 0, CalendarTime::MAX_YEAR, 67, 140, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 130, 22, 8, 4, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), // 68
MS( 0, CalendarTime::MAX_YEAR, 86, 145, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 130, 23, 8, 4, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), // 69
MS( 0, CalendarTime::MAX_YEAR, 95, 165, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 28, 8, 4, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 6A
MS( 0, CalendarTime::MAX_YEAR, 30, 90, STR_TOWN_BUILDING_NAME_STATUE_1, 70, 10, 4, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 6B
MS( 0, CalendarTime::MAX_YEAR, 25, 75, STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1, 65, 8, 3, 1, 2,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 6C
MS( 0, CalendarTime::MAX_YEAR, 18, 85, STR_TOWN_BUILDING_NAME_PIGGY_BANK_1, 95, 7, 3, 2, 4,
TILE_SIZE_1x1,
BuildingFlag::Size1x1,
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), // 6D
};

View File

@@ -1696,7 +1696,7 @@ static const char * const _name_czech_real[] = {
* with cloning this for your own language. */
/* Sing., pl. */
enum CzechGender {
enum CzechGender : uint8_t {
CZG_SMASC,
CZG_SFEM,
CZG_SNEUT,
@@ -1709,42 +1709,40 @@ enum CzechGender {
CZG_NFREE
};
enum CzechPattern {
enum CzechPattern : uint8_t {
CZP_JARNI,
CZP_MLADY,
CZP_PRIVL
};
/* [CzechGender][CzechPattern] - replaces the last character of the adjective
* by this.
* XXX: [CZG_SMASC][CZP_PRIVL] needs special handling: -ovX -> -uv. */
/* [CzechGender][CzechPattern] - suffixes for adjectives */
static const char * const _name_czech_patmod[][3] = {
/* CZG_SMASC */ { "\u00ed", "\u00fd", "X" },
/* CZG_SFEM */ { "\u00ed", "\u00e1", "a" },
/* CZG_SNEUT */ { "\u00ed", "\u00e9", "o" },
/* CZG_PMASC */ { "\u00ed", "\u00e9", "y" },
/* CZG_PFEM */ { "\u00ed", "\u00e9", "y" },
/* CZG_PNEUT */ { "\u00ed", "\u00e1", "a" }
/* CZG_SMASC */ { "\u00ed", "\u00fd", "uv" },
/* CZG_SFEM */ { "\u00ed", "\u00e1", "ova" },
/* CZG_SNEUT */ { "\u00ed", "\u00e9", "ovo" },
/* CZG_PMASC */ { "\u00ed", "\u00e9", "ovy" },
/* CZG_PFEM */ { "\u00ed", "\u00e9", "ovy" },
/* CZG_PNEUT */ { "\u00ed", "\u00e1", "ova" }
};
/* This way the substantive can choose only some adjectives/endings:
* At least one of these flags must be satisfied: */
enum CzechAllow {
enum CzechAllow : uint8_t {
CZA_SHORT = 1,
CZA_MIDDLE = 2,
CZA_LONG = 4,
CZA_ALL = ~0
CZA_ALL = CZA_SHORT | CZA_MIDDLE | CZA_LONG,
};
DECLARE_ENUM_AS_BIT_SET(CzechAllow)
/* All these flags must be satisfied (in the stem->others direction): */
enum CzechChoose {
enum CzechChoose : uint8_t {
CZC_NONE = 0, // No requirements.
CZC_COLOR = 1,
CZC_POSTFIX = 2, // Matched if postfix was inserted.
CZC_NOPOSTFIX = 4, // Matched if no postfix was inserted.
CZC_ANY = ~0
CZC_ANY = CZC_COLOR | CZC_POSTFIX | CZC_NOPOSTFIX,
};
DECLARE_ENUM_AS_BIT_SET(CzechChoose)
@@ -1764,54 +1762,54 @@ struct CzechNameAdj {
/* Some of items which should be common are doubled. */
static const CzechNameAdj _name_czech_adj[] = {
{ CZP_JARNI, CZC_ANY, "Horn\u00ed" },
{ CZP_JARNI, CZC_ANY, "Horn\u00ed" },
{ CZP_JARNI, CZC_ANY, "Doln\u00ed" },
{ CZP_JARNI, CZC_ANY, "Doln\u00ed" },
{ CZP_JARNI, CZC_ANY, "P\u0159edn\u00ed" },
{ CZP_JARNI, CZC_ANY, "Zadn\u00ed" },
{ CZP_JARNI, CZC_ANY, "Kosteln\u00ed" },
{ CZP_JARNI, CZC_ANY, "Havran\u00ed" },
{ CZP_JARNI, CZC_ANY, "\u0158\u00ed\u010dn\u00ed" },
{ CZP_JARNI, CZC_ANY, "Jezern\u00ed" },
{ CZP_MLADY, CZC_ANY, "Velk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Velk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Mal\u00fd" },
{ CZP_MLADY, CZC_ANY, "Mal\u00fd" },
{ CZP_MLADY, CZC_ANY, "Vysok\u00fd" },
{ CZP_MLADY, CZC_ANY, "\u010cesk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Moravsk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Slov\u00e1ck\u00fd" },
{ CZP_MLADY, CZC_ANY, "Slezsk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Uhersk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Star\u00fd" },
{ CZP_MLADY, CZC_ANY, "Star\u00fd" },
{ CZP_MLADY, CZC_ANY, "Nov\u00fd" },
{ CZP_MLADY, CZC_ANY, "Nov\u00fd" },
{ CZP_MLADY, CZC_ANY, "Mlad\u00fd" },
{ CZP_MLADY, CZC_ANY, "Kr\u00e1lovsk\u00fd" },
{ CZP_MLADY, CZC_ANY, "Kamenn\u00fd" },
{ CZP_MLADY, CZC_ANY, "Cihlov\u00fd" },
{ CZP_MLADY, CZC_ANY, "Divn\u00fd" },
{ CZP_MLADY, CZC_COLOR, "\u010cerven\u00e1" },
{ CZP_MLADY, CZC_COLOR, "\u010cerven\u00e1" },
{ CZP_MLADY, CZC_COLOR, "\u010cerven\u00e1" },
{ CZP_MLADY, CZC_COLOR, "Zelen\u00e1" },
{ CZP_MLADY, CZC_COLOR, "\u017dlut\u00e1" },
{ CZP_MLADY, CZC_COLOR, "Siv\u00e1" },
{ CZP_MLADY, CZC_COLOR, "\u0160ed\u00e1" },
{ CZP_MLADY, CZC_COLOR, "B\u00edl\u00e1" },
{ CZP_MLADY, CZC_COLOR, "B\u00edl\u00e1" },
{ CZP_MLADY, CZC_COLOR, "Modr\u00e1" },
{ CZP_MLADY, CZC_COLOR, "R\u016f\u017eov\u00e1" },
{ CZP_MLADY, CZC_COLOR, "\u010cern\u00e1" },
{ CZP_PRIVL, CZC_ANY, "Kr\u00e1lova" },
{ CZP_PRIVL, CZC_ANY, "Janova" },
{ CZP_PRIVL, CZC_ANY, "Karlova" },
{ CZP_PRIVL, CZC_ANY, "Kry\u0161tofova" },
{ CZP_PRIVL, CZC_ANY, "Ji\u0159\u00edkova" },
{ CZP_PRIVL, CZC_ANY, "Petrova" },
{ CZP_PRIVL, CZC_ANY, "Sudovo" },
{ CZP_JARNI, CZC_ANY, "Horn" },
{ CZP_JARNI, CZC_ANY, "Horn" },
{ CZP_JARNI, CZC_ANY, "Doln" },
{ CZP_JARNI, CZC_ANY, "Doln" },
{ CZP_JARNI, CZC_ANY, "P\u0159edn" },
{ CZP_JARNI, CZC_ANY, "Zadn" },
{ CZP_JARNI, CZC_ANY, "Kosteln" },
{ CZP_JARNI, CZC_ANY, "Havran" },
{ CZP_JARNI, CZC_ANY, "\u0158\u00ed\u010dn" },
{ CZP_JARNI, CZC_ANY, "Jezern" },
{ CZP_MLADY, CZC_ANY, "Velk" },
{ CZP_MLADY, CZC_ANY, "Velk" },
{ CZP_MLADY, CZC_ANY, "Mal" },
{ CZP_MLADY, CZC_ANY, "Mal" },
{ CZP_MLADY, CZC_ANY, "Vysok" },
{ CZP_MLADY, CZC_ANY, "\u010cesk" },
{ CZP_MLADY, CZC_ANY, "Moravsk" },
{ CZP_MLADY, CZC_ANY, "Slov\u00e1ck" },
{ CZP_MLADY, CZC_ANY, "Slezsk" },
{ CZP_MLADY, CZC_ANY, "Uhersk" },
{ CZP_MLADY, CZC_ANY, "Star" },
{ CZP_MLADY, CZC_ANY, "Star" },
{ CZP_MLADY, CZC_ANY, "Nov" },
{ CZP_MLADY, CZC_ANY, "Nov" },
{ CZP_MLADY, CZC_ANY, "Mlad" },
{ CZP_MLADY, CZC_ANY, "Kr\u00e1lovsk" },
{ CZP_MLADY, CZC_ANY, "Kamenn" },
{ CZP_MLADY, CZC_ANY, "Cihlov" },
{ CZP_MLADY, CZC_ANY, "Divn" },
{ CZP_MLADY, CZC_COLOR, "\u010cerven" },
{ CZP_MLADY, CZC_COLOR, "\u010cerven" },
{ CZP_MLADY, CZC_COLOR, "\u010cerven" },
{ CZP_MLADY, CZC_COLOR, "Zelen" },
{ CZP_MLADY, CZC_COLOR, "\u017dlut" },
{ CZP_MLADY, CZC_COLOR, "Siv" },
{ CZP_MLADY, CZC_COLOR, "\u0160ed" },
{ CZP_MLADY, CZC_COLOR, "B\u00edl" },
{ CZP_MLADY, CZC_COLOR, "B\u00edl" },
{ CZP_MLADY, CZC_COLOR, "Modr" },
{ CZP_MLADY, CZC_COLOR, "R\u016f\u017eov" },
{ CZP_MLADY, CZC_COLOR, "\u010cern" },
{ CZP_PRIVL, CZC_ANY, "Kr\u00e1l" },
{ CZP_PRIVL, CZC_ANY, "Jan" },
{ CZP_PRIVL, CZC_ANY, "Karl" },
{ CZP_PRIVL, CZC_ANY, "Kry\u0161tof" },
{ CZP_PRIVL, CZC_ANY, "Ji\u0159\u00edk" },
{ CZP_PRIVL, CZC_ANY, "Petr" },
{ CZP_PRIVL, CZC_ANY, "Sud" },
};
/* Considered a stem for choose/allow matching purposes. */

View File

@@ -8,39 +8,34 @@
/** @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_t)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[] = {
static const DrawTileSpriteSpan _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[] = {
static const DrawTileSpriteSpan _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 },
@@ -48,5 +43,3 @@ static const DrawTileSprites _depot_invisible_gfx_table[] = {
};
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END

View File

@@ -19,11 +19,8 @@
*/
#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_t)0x80, 0, 0, 0, 0, 0, {0, 0} }
/**
* Constructor macro of a DrawTileSprites structure
* Constructor macro of a DrawTileSpriteSpan structure
* @param img Ground sprite without palette of the tile
* @param dtss Sequence child sprites of the tile
*/
@@ -31,27 +28,23 @@
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] = {
static const DrawTileSpriteSpan _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
@@ -65,76 +58,64 @@ static const DrawTileSprites _shipdepot_display_data[][DEPOT_PART_END] = {
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] = {
static const DrawTileSpriteSpan _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
@@ -158,5 +139,4 @@ static const DrawTileSprites _lock_display_data[][DIAGDIR_END] = {
};
#undef TILE_SEQ_LINE
#undef TILE_SEQ_END
#undef TILE_SPRITE_LINE