// xussr /// header grf { grfid: "AKA\08"; name: string(STR_GRF_NAME); desc: string(STR_GRF_DESC); url: string(STR_GRF_URL); version: 1281; min_compatible_version: 496; param 0 { enable_our_own_tracks { name: string(STR_PARAM_NAME_ENABLE_OUR_OWN_TRACKS); desc: string(STR_PARAM_DESC_ENABLE_OUR_OWN_TRACKS); type: bool; bit: 4; def_value: 1; } enable_icons { name: string(STR_PARAM_NAME_ENABLE_ICONS); desc: string(STR_PARAM_DESC_ENABLE_ICONS); type: bool; bit: 6; def_value: 1; } enable_long_names { name: string(STR_PARAM_NAME_ENABLE_LONG_NAMES); desc: string(STR_PARAM_DESC_ENABLE_LONG_NAMES); type: bool; bit: 7; def_value: 1; } enable_override_cargo { name: string(STR_PARAM_NAME_ENABLE_OVERRIDE_CARGO); desc: string(STR_PARAM_DESC_ENABLE_OVERRIDE_CARGO); type: bool; bit: 3; def_value: 1; } enable_standard_engine { name: string(STR_PARAM_NAME_ENABLE_STANDARD_ENGINE); desc: string(STR_PARAM_DESC_ENABLE_STANDARD_ENGINE); type: bool; bit: 0; def_value: 0; } enable_standard_car { name: string(STR_PARAM_NAME_ENABLE_STANDARD_CAR); desc: string(STR_PARAM_DESC_ENABLE_STANDARD_CAR); type: bool; bit: 1; def_value: 0; } enable_debug_car { name: string(STR_PARAM_NAME_ENABLE_DEBUG_CAR); desc: string(STR_PARAM_DESC_ENABLE_DEBUG_CAR); type: bool; bit: 2; def_value: 0; } enable_debug_cost { name: string(STR_PARAM_NAME_ENABLE_DEBUG_COST); desc: string(STR_PARAM_DESC_ENABLE_DEBUG_COST); type: bool; bit: 5; def_value: 0; } } param 1 { speed_penalty_percent { type: int; name: string(STR_PARAM_NAME_SPEED_PENALTY_PERCENT); desc: string(STR_PARAM_DESC_SPEED_PENALTY_PERCENT); min_value: 10; max_value: 50; def_value: 15; } } /* param 2 { start_year_for_cost { type: int; name: string(STR_PARAM_NAME_START_YEAR); desc: string(STR_PARAM_DESC_START_YEAR); min_value: 0; max_value: 2050; def_value: 0; } } param 3 { inflation_for_cost { type: int; name: string(STR_PARAM_NAME_INFLATION); desc: string(STR_PARAM_DESC_INFLATION); min_value: 0; max_value: 4; def_value: 2; } } */ } /// check // version check // only for OpenTTD >= r23744 // (возможно совместное использование транспорта GRF7 и GRF8 без исключения) if (ttd_platform != PLATFORM_OPENTTD || openttd_version < version_openttd(1, 2, 0, 23744)) { error(ERROR, REQUIRES_OPENTTD, string(STR_MIN_OPENTTD_VERSION)); } // Check for engine pool if (!dynamic_engines) { error(ERROR, USED_WITH, string(STR_USE_ENGINE_POOL)); } /// basecost // Задаём к-ты к стоимостям // 15 PR_BUILD_VEHICLE_TRAIN PR_BUILD_VEHICLE 400000 // 16 PR_BUILD_VEHICLE_WAGON PR_BUILD_VEHICLE 2000 // .. // 42 PR_RUNNING_TRAIN_STEAM PR_RUNNING 5600 // 43 PR_RUNNING_TRAIN_DIESEL PR_RUNNING 5200 // 44 PR_RUNNING_TRAIN_ELECTRIC PR_RUNNING 4800 if (enable_debug_cost) { basecost // отладка, всё по минимуму { PR_BUILD_VEHICLE_TRAIN: -6; PR_BUILD_VEHICLE_WAGON: -2; PR_RUNNING_TRAIN_STEAM: -3; PR_RUNNING_TRAIN_DIESEL: -3; PR_RUNNING_TRAIN_ELECTRIC: -3; } } else { basecost { PR_BUILD_VEHICLE_TRAIN: 1; PR_BUILD_VEHICLE_WAGON: 7; PR_RUNNING_TRAIN_STEAM: 0; PR_RUNNING_TRAIN_DIESEL: 0; PR_RUNNING_TRAIN_ELECTRIC: 0; } } /// disable_origin // debug: disable all original trains // 0..26 engines // 27..53 vagons if (!enable_standard_engine) { disable_item(FEAT_TRAINS, 0, 26); // ж/д disable_item(FEAT_TRAINS, 54, 56); // монорельс disable_item(FEAT_TRAINS, 84, 88); // маглев } if (!enable_standard_car) { disable_item(FEAT_TRAINS, 27, 53); // ж/д disable_item(FEAT_TRAINS, 57, 83); // монорельс disable_item(FEAT_TRAINS, 89, 115); // маглев } // cargotable // Список меток грузов, включая стандартные, тойлэнд, ECS, FIRS // по алфавиту cargotable { AORE, BATT, BDMT, BEER, BRCK, BUBL, CERA, CERE, CLAY, CMNT, COAL, COLA, COPR, CORE, CTCD, DIAM, DYES, ENSP, FERT, FICR, FISH, FMSP, FOOD, FRUT, FRVG, FZDR, GEAR, GLAS, GOLD, GOOD, GRAI, GRVL, IORE, LIME, LVST, MAIL, MAIZ, MILK, MNSP, OIL_, OLSD, PAPR, PASS, PETR, PLST, PLAS, POTA, RCYC, RFPR, RUBR, SAND, SCMT, SGBT, SGCN, STEL, SUGR, SULP, SWET, TOFF, TOUR, TOYS, VALU, VEHI, WATR, WDPR, WHEA, WOOD, WOOL } /// ecs_cargoicons.pnml // АГР, БАС, ХИМ, МАШ, ГОР, ЛЕС spriteset (cargoicon_fish, "src/override/ecs-cargoicon.png") { // [left_x, upper_y, width, height, offset_x, offset_y] [33, 43, 16, 16, 0, -3] } spriteset (cargoicon_wool, "src/override/ecs-cargoicon.png") { [113, 43, 10, 10, 0, 0] } spriteset (cargoicon_fertilizer, "src/override/ecs-cargoicon.png") { [177, 43, 12, 6, 0, 3] } spriteset (cargoicon_oil_seeds, "src/override/ecs-cargoicon.png") { [257, 43, 11, 11, 0, 0] } spriteset (cargoicon_fibre_crops, "src/override/ecs-cargoicon.png") { [321, 43, 11, 10, 0, 0] } spriteset (cargoicon_sand, "src/override/ecs-cargoicon.png") { [58, 93, 12, 6, 0, 3] } spriteset (cargoicon_glass, "src/override/ecs-cargoicon.png") { [138, 93, 10, 9, 0, 1] } spriteset (cargoicon_building_materials, "src/override/ecs-cargoicon.png") { [202, 93, 11, 11, 0, 2] } spriteset (cargoicon_dyes, "src/override/ecs-cargoicon.png") { [54, 135, 10, 10, 0, 0] } spriteset (cargoicon_refined_products, "src/override/ecs-cargoicon.png") { [118, 135, 10, 12, -1, -2] } spriteset (cargoicon_petrol, "src/override/ecs-cargoicon.png") { [182, 135, 10, 12, -1, -2] } spriteset (cargoicon_vehicles, "src/override/ecs-cargoicon.png") { [50, 190, 14, 12, 0, 1] } spriteset (cargoicon_tourists, "src/override/ecs-cargoicon.png") { [46, 227, 10, 12, -1, -2] } spriteset (cargoicon_wood_products, "src/override/ecs-cargoicon.png") { [50, 262, 14, 8, 0, 1] } /* ==agr== Livestock (ID 04) has the weight multiplied by four about default and defined equal to 750 Kg per item. Food (ID 0B) Fruit (ID 0D) New cargoes Cereals (ID 06) unites grain, wheat and maize Fish (ID 0E) Wool (ID 0F) has a weight of 250 Kg per bale. Fertilizer (ID 15) Oil seeds (ID 16) Fibre crops (ID 1D) ==basic== Default cargoes Coal (ID 01) New cargoes Sand (ID 11) Glass (ID 12) New cargoes planned Building materials (ID 1C) ==himical== Default cargoes Oil (ID 03) New cargoes Dyes (ID 14) Refined products (ID 17) Petrol (ID 19) Planned cargoes Potash (ID 10) ==machinary== Default cargoes Iron ore (ID 08) Steel (ID 09) New cargoes Vehicles or machinery (ID 18) New cargoes planned Bauxite (ID 1A) ==town== Default cargoes Passengers (ID 00) Mail (ID 02) Goods (ID 05) Valuables (ID 0A) Water (ID 1B) New cargoes Tourists (ID 1F). Tourists has a weight of 125 Kg per tourist. ==wood== Default cargoes Wood (ID 07) Paper (ID 0C) New cargoes Wood products (ID 13) === /* ECS * / if (grf_future_status("\4D\65\6F\91") || // ECS town vector grf_future_status("\4D\65\6F\92") || // ECS basic vector grf_future_status("\4D\65\6F\94") || // ECS machinery vector grf_future_status("\4D\65\6F\95") || // ECS wood vector grf_future_status("\4D\65\6F\96") || // ECS construction vector grf_future_status("\4D\65\6F\97") || // ECS agricultural vector grf_future_status("\4D\65\6F\98") || // ECS basic vector for arctic grf_future_status("\4D\65\6F\9B") || // ECS construction vector by Pikka grf_future_status("\4D\65\6F\9C") || // ECS chemical vector II grf_future_status("\4D\65\6F\9F")) { // ECS basic vector II error(FATAL, string(STR_ERR_INCOMPATIBLE_NEWGRF), "ECS"); } */ // enable_override_cargo = 1; if (enable_override_cargo) { // ECS agricultural vector if (grf_future_status("\4D\65\6F\97")) { // Livestock (ID 04) item(FEAT_CARGOS, cargo_livestock, 0x04) { property { number: 0x04; type_name: TTD_STR_CARGO_PLURAL_LIVESTOCK; unit_name: TTD_STR_CARGO_SINGULAR_LIVESTOCK; type_abbreviation: TTD_STR_ABBREV_LIVESTOCK; sprite: 0x10CD; weight: 12.0/16; // x.0/16 penalty_lowerbound: 0x04; single_penalty_length: 0x12; price_factor: 4322.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xC3; cargo_payment_list_colour: 0xC3; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS); cargo_label: "LVST"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_LIVESTOCK; items_of_cargo: TTD_STR_QUANTITY_LIVESTOCK; capacity_multiplier: 1; } } // Food (ID 0B) item(FEAT_CARGOS, cargo_food, 0x0B) { property { number: 0x0B; type_name: TTD_STR_CARGO_PLURAL_FOOD; unit_name: TTD_STR_CARGO_SINGULAR_FOOD; type_abbreviation: TTD_STR_ABBREV_FOOD; sprite: 0x10D8; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x00; single_penalty_length: 0x1E; price_factor: 6168.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x44; cargo_payment_list_colour: 0x44; is_freight: 1; cargo_classes: bitmask(CC_EXPRESS, CC_REFRIGERATED); cargo_label: "FOOD"; town_growth_effect: TOWNGROWTH_FOOD; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_FOOD; items_of_cargo: TTD_STR_QUANTITY_FOOD; capacity_multiplier: 1; } } // Fruit (ID 0D) item(FEAT_CARGOS, cargo_fruit, 0x0D) { property { number: 0x0D; type_name: TTD_STR_CARGO_PLURAL_FRUIT; unit_name: TTD_STR_CARGO_SINGULAR_FRUIT; type_abbreviation: TTD_STR_ABBREV_FRUIT; sprite: 0x10D4; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x00; single_penalty_length: 0x0F; price_factor: 4812.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x42; cargo_payment_list_colour: 0x42; is_freight: 1; cargo_classes: bitmask(CC_BULK, CC_REFRIGERATED); cargo_label: "FRUT"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_FRUIT; items_of_cargo: TTD_STR_QUANTITY_FRUIT; capacity_multiplier: 1; } } // Cereals (ID 06) item(FEAT_CARGOS, cargo_cereals, 0x06) { property { number: 0x06; type_name: string(STR_CARGO_NAME_CEREALS); unit_name: string(STR_CARGO_NAME_CEREALS); type_abbreviation: string(STR_CID_CEREALS); sprite: 0x10CF; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x04; single_penalty_length: 0x28; price_factor: 4728.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xC1; cargo_payment_list_colour: 0xC1; is_freight: 1; cargo_classes: bitmask(CC_BULK, CC_COVERED); cargo_label: "CERE"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_CEREALS); items_of_cargo: string(STR_CARGO_UNIT_CEREALS); capacity_multiplier: 1; } } // Fish (ID 0E) item(FEAT_CARGOS, cargo_fish, 0x0E) { property { number: 0x0E; type_name: string(STR_CARGO_NAME_FISH); unit_name: string(STR_CARGO_NAME_FISH); type_abbreviation: string(STR_CID_FISH); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x05; single_penalty_length: 0x14; price_factor: 4816.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x43; cargo_payment_list_colour: 0x43; is_freight: 1; cargo_classes: bitmask(CC_EXPRESS, CC_REFRIGERATED); cargo_label: "FISH"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_FISH); items_of_cargo: string(STR_CARGO_UNIT_FISH); capacity_multiplier: 1; } graphics { cargoicon_fish; } } // Wool (ID 0F) item(FEAT_CARGOS, cargo_wool, 0x0F) { property { number: 0x0F; type_name: string(STR_CARGO_NAME_WOOL); unit_name: string(STR_CARGO_NAME_WOOL); type_abbreviation: string(STR_CID_WOOL); sprite: NEW_CARGO_SPRITE; weight: 4.0/16; // x.0/16 penalty_lowerbound: 0x04; single_penalty_length: 0x48; price_factor: 3688.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xC5; cargo_payment_list_colour: 0xC5; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS, CC_COVERED); cargo_label: "WOOL"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_WOOL); items_of_cargo: string(STR_CARGO_UNIT_WOOL); capacity_multiplier: 1; } graphics { cargoicon_wool; } } // Fertilizer (ID 15) item(FEAT_CARGOS, cargo_fertilizer, 0x15) { property { number: 0x15; type_name: string(STR_CARGO_NAME_FERTILIZER); unit_name: string(STR_CARGO_NAME_FERTILIZER); type_abbreviation: string(STR_CID_FERTILIZER); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x05; single_penalty_length: 0x30; price_factor: 5588.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x85; cargo_payment_list_colour: 0x85; is_freight: 1; cargo_classes: bitmask(CC_BULK, CC_PIECE_GOODS); cargo_label: "FERT"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_FERTILIZER); items_of_cargo: string(STR_CARGO_UNIT_FERTILIZER); capacity_multiplier: 1; } graphics { cargoicon_fertilizer; } } // Oil seeds (ID 16) item(FEAT_CARGOS, cargo_oil_seeds, 0x16) { property { number: 0x16; type_name: string(STR_CARGO_NAME_OIL_SEEDS); unit_name: string(STR_CARGO_NAME_OIL_SEEDS); type_abbreviation: string(STR_CID_OIL_SEEDS); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x04; single_penalty_length: 0x18; price_factor: 5624.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x41; cargo_payment_list_colour: 0x41; is_freight: 1; cargo_classes: bitmask(CC_BULK, CC_COVERED); cargo_label: "OLSD"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_OIL_SEEDS); items_of_cargo: string(STR_CARGO_UNIT_OIL_SEEDS); capacity_multiplier: 1; } graphics { cargoicon_oil_seeds; } } // Fibre crops (ID 1D) item(FEAT_CARGOS, cargo_fibre_crops, 0x1D) { property { number: 0x1D; type_name: string(STR_CARGO_NAME_FIBRE_CROPS); unit_name: string(STR_CARGO_NAME_FIBRE_CROPS); type_abbreviation: string(STR_CID_FIBRE_CROPS); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x04; single_penalty_length: 0x10; price_factor: 4568.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xC2; cargo_payment_list_colour: 0xC2; is_freight: 1; cargo_classes: bitmask(CC_BULK, CC_PIECE_GOODS); cargo_label: "FICR"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_FIBRE_CROPS); items_of_cargo: string(STR_CARGO_UNIT_FIBRE_CROPS); capacity_multiplier: 1; } graphics { cargoicon_fibre_crops; } } } // ECS basic vector II if (grf_future_status("\4D\65\6F\9F")) { // Coal (ID 01) item(FEAT_CARGOS, cargo_coal, 0x01) { property { number: 0x01; type_name: TTD_STR_CARGO_PLURAL_COAL; unit_name: TTD_STR_CARGO_SINGULAR_COAL; type_abbreviation: TTD_STR_ABBREV_COAL; sprite: 0x10CA; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x07; single_penalty_length: 0xFF; price_factor: 5916.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x91; cargo_payment_list_colour: 0x91; is_freight: 1; cargo_classes: bitmask(CC_BULK); cargo_label: "COAL"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_COAL; items_of_cargo: TTD_STR_QUANTITY_COAL; capacity_multiplier: 1; } } // Sand (ID 11) item(FEAT_CARGOS, cargo_sand, 0x11) { property { number: 0x11; type_name: string(STR_CARGO_NAME_SAND); unit_name: string(STR_CARGO_NAME_SAND); type_abbreviation: string(STR_CID_SAND); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x07; single_penalty_length: 0xFF; price_factor: 4128.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x9D; cargo_payment_list_colour: 0x9D; is_freight: 1; cargo_classes: bitmask(CC_BULK); cargo_label: "SAND"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_SAND); items_of_cargo: string(STR_CARGO_UNIT_SAND); capacity_multiplier: 1; } graphics { cargoicon_sand; } } // Glass (ID 12) item(FEAT_CARGOS, cargo_glass, 0x12) { property { number: 0x12; type_name: string(STR_CARGO_NAME_GLASS); unit_name: string(STR_CARGO_NAME_GLASS); type_abbreviation: string(STR_CID_GLASS); sprite: NEW_CARGO_SPRITE; weight: 6.0/16; // x.0/16 penalty_lowerbound: 0x20; single_penalty_length: 0xFF; price_factor: 4345.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xA0; cargo_payment_list_colour: 0xA0; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS, CC_OVERSIZED); cargo_label: "GLAS"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_GLASS); items_of_cargo: string(STR_CARGO_UNIT_GLASS); capacity_multiplier: 1; } graphics { cargoicon_glass; } } // Building materials (ID 1C) item(FEAT_CARGOS, cargo_building_materials, 0x1C) { property { number: 0x1C; type_name: string(STR_CARGO_NAME_BUILDING_MATERIALS); unit_name: string(STR_CARGO_NAME_BUILDING_MATERIALS); type_abbreviation: string(STR_CID_BUILDING_MATERIALS); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x18; single_penalty_length: 0xD0; price_factor: 4268.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x99; cargo_payment_list_colour: 0x99; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS, CC_COVERED); cargo_label: "BDMT"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_BUILDING_MATERIALS); items_of_cargo: string(STR_CARGO_UNIT_BUILDING_MATERIALS); capacity_multiplier: 1; } graphics { cargoicon_building_materials; } } } // ECS chemical vector II if (grf_future_status("\4D\65\6F\9C")) { // Oil (ID 03) item(FEAT_CARGOS, cargo_oil, 0x03) { property { number: 0x03; type_name: TTD_STR_CARGO_PLURAL_OIL; unit_name: TTD_STR_CARGO_SINGULAR_OIL; type_abbreviation: TTD_STR_ABBREV_OIL; sprite: 0x10CC; weight: 15.0/16; // x.0/16 penalty_lowerbound: 0x19; single_penalty_length: 0xFF; price_factor: 4437.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x8A; cargo_payment_list_colour: 0x8A; is_freight: 1; cargo_classes: bitmask(CC_LIQUID); cargo_label: "OIL_"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_OIL; items_of_cargo: TTD_STR_QUANTITY_OIL; capacity_multiplier: 1; } } // Dyes (ID 14) item(FEAT_CARGOS, cargo_dyes, 0x14) { property { number: 0x14; type_name: string(STR_CARGO_NAME_DYES); unit_name: string(STR_CARGO_NAME_DYES); type_abbreviation: string(STR_CID_DYES); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x10; single_penalty_length: 0x80; price_factor: 5840.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xB0; cargo_payment_list_colour: 0xB0; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS, CC_LIQUID); cargo_label: "DYES"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_DYES); items_of_cargo: string(STR_CARGO_UNIT_DYES); capacity_multiplier: 1; } graphics { cargoicon_dyes; } } // Refined products (ID 17) item(FEAT_CARGOS, cargo_refined_products, 0x17) { property { number: 0x17; type_name: string(STR_CARGO_NAME_REFINED_PRODUCTS); unit_name: string(STR_CARGO_NAME_REFINED_PRODUCTS); type_abbreviation: string(STR_CID_REFINED_PRODUCTS); sprite: NEW_CARGO_SPRITE; weight: 15.0/16; // x.0/16 penalty_lowerbound: 0x1C; single_penalty_length: 0xA0; price_factor: 4688.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x8C; cargo_payment_list_colour: 0x8C; is_freight: 1; cargo_classes: bitmask(CC_LIQUID); cargo_label: "RFPR"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_REFINED_PRODUCTS); items_of_cargo: string(STR_CARGO_UNIT_REFINED_PRODUCTS); capacity_multiplier: 1; } graphics { cargoicon_refined_products; } } // Petrol (ID 19) item(FEAT_CARGOS, cargo_petrol, 0x19) { property { number: 0x19; type_name: string(STR_CARGO_NAME_PETROL); unit_name: string(STR_CARGO_NAME_PETROL); type_abbreviation: string(STR_CID_PETROL); sprite: NEW_CARGO_SPRITE; weight: 13.0/16; // x.0/16 penalty_lowerbound: 0x04; single_penalty_length: 0x14; price_factor: 5280.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x8E; cargo_payment_list_colour: 0x8E; is_freight: 1; cargo_classes: bitmask(CC_LIQUID); cargo_label: "PETR"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_PETROL); items_of_cargo: string(STR_CARGO_UNIT_PETROL); capacity_multiplier: 1; } graphics { cargoicon_petrol; } } // Potash (ID 10) } // ECS machinery vector if (grf_future_status("\4D\65\6F\94")) { // Iron ore (ID 08) item(FEAT_CARGOS, cargo_iron_ore, 0x08) { property { number: 0x08; type_name: TTD_STR_CARGO_PLURAL_IRON_ORE; unit_name: TTD_STR_CARGO_SINGULAR_IRON_ORE; type_abbreviation: string(STR_CID_IRON_ORE); sprite: 0x10D1; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x09; single_penalty_length: 0xFF; price_factor: 5120.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xA2; cargo_payment_list_colour: 0xA2; is_freight: 1; cargo_classes: bitmask(CC_BULK); cargo_label: "IORE"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_IRON_ORE; items_of_cargo: TTD_STR_QUANTITY_IRON_ORE; capacity_multiplier: 1; } } // Steel (ID 09) item(FEAT_CARGOS, cargo_steel, 0x09) { property { number: 0x09; type_name: TTD_STR_CARGO_PLURAL_STEEL; unit_name: TTD_STR_CARGO_SINGULAR_STEEL; type_abbreviation: TTD_STR_ABBREV_STEEL; sprite: 0x10D2; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x07; single_penalty_length: 0xFF; price_factor: 5688.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xB7; cargo_payment_list_colour: 0xB7; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS); cargo_label: "STEL"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_STEEL; items_of_cargo: TTD_STR_QUANTITY_STEEL; capacity_multiplier: 1; } } // Vehicles or machinery (ID 18) item(FEAT_CARGOS, cargo_vehicles, 0x18) { property { number: 0x18; type_name: string(STR_CARGO_NAME_VEHICLES); unit_name: string(STR_CARGO_NAME_VEHICLES); type_abbreviation: string(STR_CID_VEHICLES); sprite: NEW_CARGO_SPRITE; weight: 40.0/16; // x.0/16 penalty_lowerbound: 0x20; single_penalty_length: 0xA0; price_factor: 14898.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xA7; cargo_payment_list_colour: 0xA7; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS, CC_OVERSIZED); cargo_label: "VEHI"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_VEHICLES); items_of_cargo: string(STR_CARGO_UNIT_VEHICLES); capacity_multiplier: 1; } graphics { cargoicon_vehicles; } } // Bauxite (ID 1A) item(FEAT_CARGOS, cargo_bauxite, 0x1A) { property { number: 0x1A; type_name: string(STR_CARGO_NAME_BAUXITE); unit_name: string(STR_CARGO_NAME_BAUXITE); type_abbreviation: string(STR_CID_BAUXITE); sprite: 0x10D1; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x0A; single_penalty_length: 0xFF; price_factor: 4992.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xA3; cargo_payment_list_colour: 0xA3; is_freight: 1; cargo_classes: bitmask(CC_BULK); cargo_label: "AORE"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_BAUXITE); items_of_cargo: string(STR_CARGO_UNIT_BAUXITE); capacity_multiplier: 1; } } } // ECS town vector if (grf_future_status("\4D\65\6F\91")) { // Passengers (ID 00) item(FEAT_CARGOS, cargo_passengers, 0x00) { property { number: 0x00; type_name: TTD_STR_CARGO_PLURAL_PASSENGERS; unit_name: TTD_STR_CARGO_SINGULAR_PASSENGER; type_abbreviation: TTD_STR_ABBREV_PASSENGERS; sprite: 0x10C9; weight: 1.0/16; // x.0/16 penalty_lowerbound: 0x00; single_penalty_length: 0x18; price_factor: 3185.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x0B; cargo_payment_list_colour: 0x0B; is_freight: 0; cargo_classes: bitmask(CC_PASSENGERS); cargo_label: "PASS"; town_growth_effect: TOWNGROWTH_PASSENGERS; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_PASSENGERS; items_of_cargo: TTD_STR_QUANTITY_PASSENGERS; capacity_multiplier: 4; } } // Mail (ID 02) item(FEAT_CARGOS, cargo_mail, 0x02) { property { number: 0x02; type_name: TTD_STR_CARGO_PLURAL_MAIL; unit_name: TTD_STR_CARGO_SINGULAR_MAIL; type_abbreviation: TTD_STR_ABBREV_MAIL; sprite: 0x10CB; weight: 4.0/16; // x.0/16 penalty_lowerbound: 0x14; single_penalty_length: 0x46; price_factor: 4550.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x0F; cargo_payment_list_colour: 0x0F; is_freight: 1; cargo_classes: bitmask(CC_MAIL); cargo_label: "MAIL"; town_growth_effect: TOWNGROWTH_MAIL; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_MAIL; items_of_cargo: TTD_STR_QUANTITY_MAIL; capacity_multiplier: 2; } } // Goods (ID 05) item(FEAT_CARGOS, cargo_goods, 0x05) { property { number: 0x05; type_name: TTD_STR_CARGO_PLURAL_GOODS; unit_name: TTD_STR_CARGO_SINGULAR_GOODS; type_abbreviation: TTD_STR_ABBREV_GOODS; sprite: 0x10CE; weight: 8.0/16; // x.0/16 penalty_lowerbound: 0x05; single_penalty_length: 0x1C; price_factor: 6144.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x06; cargo_payment_list_colour: 0x06; is_freight: 1; cargo_classes: bitmask(CC_EXPRESS); cargo_label: "GOOD"; town_growth_effect: TOWNGROWTH_GOODS; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_GOODS; items_of_cargo: TTD_STR_QUANTITY_GOODS; capacity_multiplier: 2; } } // Valuables (ID 0A) item(FEAT_CARGOS, cargo_valuables, 0x0A) { property { number: 0x0A; type_name: TTD_STR_CARGO_PLURAL_VALUABLES; unit_name: TTD_STR_CARGO_SINGULAR_VALUABLES; type_abbreviation: TTD_STR_ABBREV_VALUABLES; sprite: 0x10D3; weight: 2.0/16; // x.0/16 penalty_lowerbound: 0x01; single_penalty_length: 0x20; price_factor: 7509.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x0D; cargo_payment_list_colour: 0x0D; is_freight: 1; cargo_classes: bitmask(CC_ARMOURED); cargo_label: "VALU"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_VALUABLES; items_of_cargo: TTD_STR_QUANTITY_VALUABLES; capacity_multiplier: 1; } } // skip Gold definition if param 4 is 1 or 2 if (param["\4D\65\6F\91", 4] == 0) { // Gold (ID 0A) item(FEAT_CARGOS, cargo_gold, 0x0A) { property { number: 0x0A; type_name: TTD_STR_CARGO_PLURAL_GOLD; unit_name: TTD_STR_CARGO_SINGULAR_GOLD; type_abbreviation: TTD_STR_ABBREV_GOLD; sprite: 0x10D3; weight: 2.0/16; // x.0/16 penalty_lowerbound: 0x0A; single_penalty_length: 0x28; price_factor: 5802.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x96; cargo_payment_list_colour: 0x96; is_freight: 1; cargo_classes: bitmask(CC_ARMOURED); cargo_label: "GOLD"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_GOLD; items_of_cargo: TTD_STR_QUANTITY_GOLD; capacity_multiplier: 1; } } } // Water (ID 1B) item(FEAT_CARGOS, cargo_water, 0x1B) { property { number: 0x1B; type_name: TTD_STR_CARGO_PLURAL_WATER; unit_name: TTD_STR_CARGO_SINGULAR_WATER; type_abbreviation: TTD_STR_ABBREV_WATER; sprite: 0x10D6; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x14; single_penalty_length: 0x50; price_factor: 4664.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x92; cargo_payment_list_colour: 0x92; is_freight: 1; cargo_classes: bitmask(CC_LIQUID); cargo_label: "WATR"; town_growth_effect: TOWNGROWTH_WATER; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_WATER; items_of_cargo: TTD_STR_QUANTITY_WATER; capacity_multiplier: 1; } } // Tourists (ID 1F) item(FEAT_CARGOS, cargo_tourists, 0x1F) { property { number: 0x1F; type_name: string(STR_CARGO_NAME_TOURISTS); unit_name: string(STR_CARGO_NAME_TOURISTS); type_abbreviation: string(STR_CID_TOURISTS); sprite: NEW_CARGO_SPRITE; weight: 2.0/16; // x.0/16 penalty_lowerbound: 0x00; single_penalty_length: 0x10; price_factor: 8902.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x03; cargo_payment_list_colour: 0x03; is_freight: 0; cargo_classes: bitmask(CC_PASSENGERS, CC_EXPRESS); cargo_label: "TOUR"; town_growth_effect: TOWNGROWTH_PASSENGERS; town_growth_multiplier: 1.5; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_TOURISTS); items_of_cargo: string(STR_CARGO_UNIT_TOURISTS); capacity_multiplier: 4; } graphics { cargoicon_tourists; } } } // ECS wood vector if (grf_future_status("\4D\65\6F\95")) { // Wood (ID 07) item(FEAT_CARGOS, cargo_wood, 0x07) { property { number: 0x07; type_name: TTD_STR_CARGO_PLURAL_WOOD; unit_name: TTD_STR_CARGO_SINGULAR_WOOD; type_abbreviation: TTD_STR_ABBREV_WOOD; sprite: 0x10D0; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x0F; single_penalty_length: 0xFF; price_factor: 5005.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0x53; cargo_payment_list_colour: 0x53; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS); cargo_label: "WOOD"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_WOOD; items_of_cargo: TTD_STR_QUANTITY_WOOD; capacity_multiplier: 1; } } // Paper (ID 0C) item(FEAT_CARGOS, cargo_paper, 0x0C) { property { number: 0x0C; type_name: TTD_STR_CARGO_PLURAL_PAPER; unit_name: TTD_STR_CARGO_SINGULAR_PAPER; type_abbreviation: TTD_STR_ABBREV_PAPER; sprite: 0x10D9; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x07; single_penalty_length: 0x3C; price_factor: 5461.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xD0; cargo_payment_list_colour: 0xD0; is_freight: 1; cargo_classes: bitmask(CC_PIECE_GOODS); cargo_label: "PAPR"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: TTD_STR_QUANTITY_PAPER; items_of_cargo: TTD_STR_QUANTITY_PAPER; capacity_multiplier: 1; } } // Wood products (ID 13) item(FEAT_CARGOS, cargo_wood_products, 0x13) { property { number: 0x13; type_name: string(STR_CARGO_NAME_WOOD_PRODUCTS); unit_name: string(STR_CARGO_NAME_WOOD_PRODUCTS); type_abbreviation: string(STR_CID_WOOD_PRODUCTS); sprite: NEW_CARGO_SPRITE; weight: 16.0/16; // x.0/16 penalty_lowerbound: 0x05; single_penalty_length: 0x40; price_factor: 6104.0*51000/2097152; // x.0*51000/2097152 station_list_colour: 0xD0; cargo_payment_list_colour: 0xD0; is_freight: 1; cargo_classes: bitmask(CC_BULK, CC_PIECE_GOODS); cargo_label: "WDPR"; town_growth_effect: TOWNGROWTH_NONE; town_growth_multiplier: 1.0; // 0x100 units_of_cargo: string(STR_CARGO_UNIT_WOOD_PRODUCTS); items_of_cargo: string(STR_CARGO_UNIT_WOOD_PRODUCTS); capacity_multiplier: 1; } graphics { cargoicon_wood_products; } } } } /// railtypetable // Список меток типов рельсов /* railtypetable { // автономная RLA1: [BAEN, SAEN, RAIL], RLA2: [BBEN, SBEN, RAIL], RLA3: [BCEN, SCEN, RAIL], // переменного тока ERA1: [BAEA, SAEA, ELRL], ERA2: [BBEA, SBEA, ELRL], ERA3: [BCEA, SCEA, ELRL], // постоянного тока ERD1: [BAED, SAED, ELRL], ERD2: [BBED, SBED, ELRL], ERD3: [BCED, SCED, ELRL], // двусистемная ER2S: [BBEE, SBEE, ELRL], RAIL, ELRL, BAEN, SAEN, BBEN, SBEN, BCEN, SCEN, BAEA, SAEA, BBEA, SBEA, BCEA, SCEA, BAED, SAED, BBED, SBED, BCED, SCED, BBEE, SBEE } */ /* railtypetable { // автономная RLA1: [BAEN, SAEN, RAIL], // переменного тока ERA1: [BAEA, BAEE, SAEA, SAEE, ELRL], // постоянного тока ERD1: [BAED, BAEE, SAED, DAEE, ELRL], // двусистемная ER2S: [BAEE, SAEE, ELRL] } */ railtypetable { RAIL, ELRL, // автономная RLA1, RLA2, RLA3, // переменного тока ERA1, ERA2, ERA3, // постоянного тока ERD1, ERD2, ERD3, // двусистемная ER2S } /// railsprite // Шаблоны template catenary_wire_template(x, y) { [x, y, 32, 26, -29, -11] [x+48, y, 32, 26, -1, -12] [x+96, y, 32, 11, -1, -12] [x+144, y, 1, 26, 1, -13] [x+160, y, 32, 34, -29, -11] [x+208, y, 32, 19, -1, -4] [x+256, y, 32, 19, -29, -4] [x+302, y, 32, 34, -1, -12] [x, y+43, 32, 26, -29, -11] [x+48, y+43, 32, 26, -1, -12] [x+96, y+43, 32, 11, -1, -12] [x+144, y+43, 1, 25, 1, -13] [x+160, y+43, 32, 34, -29, -11] [x+208, y+43, 32, 19, -1, -4] [x+256, y+43, 32, 19, -29, -4] [x+302, y+43, 32, 34, -1, -12] [x, y+86, 32, 26, -29, -11] [x+48, y+86, 32, 26, -1, -12] [x+96, y+86, 32, 11, -1, -12] [x+144, y+86, 1, 26, 1, -13] [x+160, y+86, 32, 34, -29, -11] [x+208, y+86, 32, 19, -1, -4] [x+256, y+86, 32, 19, -29, -4] [x+302, y+86, 32, 34, -1, -12] [x, y+129, 16, 18, -29, -3] [x+32, y+129, 16, 18, -1, -12] [x+64, y+129, 16, 18, -13, -11] [x+96, y+129, 16, 18, 15, -4] } template pylons_template(x, y) { [x, y, 12, 28, -9, -25] [x+32, y, 12, 30, 0, -28] [x+64, y, 12, 30, -1, -25] [x+96, y, 12, 30, -9, -27] [x+115, y, 6, 28, -2, -26] [x+131, y, 6, 30, -2, -27] [x+147, y, 14, 28, -3, -26] [x+179, y, 14, 28, -10, -26] } spriteset(erac_catenary_wire, "src/railtype/erac_catenary_wire_pylons.png") { catenary_wire_template(5, 27) } spriteset(erac_catenary_pylons, "src/railtype/erac_catenary_wire_pylons.png") { pylons_template(5, 191) } spriteset(erdc_catenary_wire, "src/railtype/erdc_catenary_wire_pylons.png") { catenary_wire_template(5, 27) } spriteset(erdc_catenary_pylons, "src/railtype/erdc_catenary_wire_pylons.png") { pylons_template(5, 191) } spriteset(erds_catenary_wire, "src/railtype/erds_catenary_wire_pylons.png") { catenary_wire_template(5, 230) } spriteset(erds_catenary_pylons, "src/railtype/erds_catenary_wire_pylons.png") { pylons_template(5, 394) } // Шаблоны рельсов template rail_gui_template(x, y) { // иконки [ x, y, 20, 20, 0, 0] [ x+32, y, 20, 20, 0, 0] [ x+64, y, 20, 20, 0, 0] [ x+96, y, 20, 20, 0, 0] [x+128, y, 20, 20, 0, 0] [x+334, y, 20, 20, 0, 0] [x+382, y, 20, 20, 0, 0] [x+430, y, 20, 20, 0, 0] // курсоры [ x, y+42, 38, 30, -4, -14] [ x+48, y+42, 72, 44, -16, -8] [x+128, y+42, 44, 34, -21, -2] [x+180, y+42, 72, 44, -16, -35] [x+260, y+42, 56, 36, 0, 0] [x+324, y+42, 32, 32, 0, 0] [x+372, y+42, 32, 32, 0, 0] [x+420, y+42, 32, 32, 0, 0] } template rail_track_overlay_template(x, y) { [ x, y, 64, 31, -31, 0] [ x+80, y, 64, 31, -31, 0] [x+160, y, 64, 16, -31, 0] [x+240, y, 64, 16, -31, 15] [x+320, y, 32, 31, 1, 0] [x+368, y, 32, 31, -31, 0] [x+416, y, 64, 39, -31, -8] [x+496, y, 64, 23, -31, 0] [x+576, y, 64, 23, -31, 0] [x+656, y, 64, 39, -31, -8] } template rail_underlay_template(x, y) { [ x, y, 64, 31, -31, 0] [ x+80, y, 64, 31, -31, 0] [x+160, y, 64, 16, -31, 0] [x+240, y, 64, 16, -31, 15] [x+320, y, 32, 31, 1, 0] [x+368, y, 32, 31, -31, 0] [x+416, y, 64, 39, -31, -8] [x+496, y, 64, 23, -31, 0] [x+576, y, 64, 23, -31, 0] [x+656, y, 64, 39, -31, -8] [x+736, y, 64, 31, -31, 0] [x+160, y+164, 64, 31, -31, 0] [x+240, y+164, 64, 31, -31, 0] [x+320, y+164, 64, 31, -31, 0] [x+400, y+164, 64, 31, -31, 0] [x+480, y+164, 64, 31, -31, 0] } template rail_tunnels_template(x, y) { [ x, y, 64, 31, -31, 1] [ x+80, y, 64, 31, -31, 1] [x+160, y, 64, 31, -31, 1] [x+240, y, 64, 31, -31, 1] } template rail_bridge_surfaces_template(x, y) { [ x, y, 64, 32, -31, 0] [ x+80, y, 64, 32, -31, 0] [x+416, y, 64, 39, -31, -8] [x+496, y, 64, 23, -31, 0] [x+576, y, 64, 23, -31, 0] [x+656, y, 64, 39, -31, -8] } template rail_depot_template(x, y) { [ x+40, y+61, 24, 25, 9, -2] [ x, y, 64, 53, -9, -37] [ x+80, y+61, 24, 25, -31, -2] [ x+80, y, 64, 53, -53, -37] [x+240, y, 64, 53, -53, -37] [x+160, y, 64, 53, -9, -37] } template rail_depot_snow_template(x, y) { [ x+40, y+61, 24, 25, 9, -2] [ x, y, 64, 53, -9, -37] [ x+80, y+61, 24, 25, -31, -2] [ x+80, y, 64, 53, -53, -37] [x+240, y, 64, 53, -53, -37] [x+160, y, 64, 53, -9, -37] } spriteset(rail_gui, "src/railtype/rail1.png") { rail_gui_template(2, 22) } spriteset(rail_track_overlay, "src/railtype/rail1.png") { rail_track_overlay_template(2, 131) } spriteset(rail_underlay, "src/railtype/rail1.png") { rail_underlay_template(2, 185) } spriteset(rail_tunnels, "src/railtype/rail1.png") { rail_tunnels_template(2, 291) } spriteset(rail_bridge_surfaces, "src/railtype/rail1.png") { rail_bridge_surfaces_template(2, 239) } spriteset(rail2_gui, "src/railtype/rail2.png") { rail_gui_template(2, 22) } spriteset(rail2_track_overlay, "src/railtype/rail2.png") { rail_track_overlay_template(2, 131) } spriteset(rail2_underlay, "src/railtype/rail2.png") { rail_underlay_template(2, 185) } spriteset(rail2_tunnels, "src/railtype/rail2.png") { rail_tunnels_template(2, 291) } spriteset(rail2_bridge_surfaces, "src/railtype/rail2.png") { rail_bridge_surfaces_template(2, 239) } spriteset(rail3_gui, "src/railtype/rail3.png") { rail_gui_template(2, 22) } spriteset(rail3_track_overlay, "src/railtype/rail3.png") { rail_track_overlay_template(2, 131) } spriteset(rail3_underlay, "src/railtype/rail3.png") { rail_underlay_template(2, 185) } spriteset(rail3_tunnels, "src/railtype/rail3.png") { rail_tunnels_template(2, 291) } spriteset(rail3_bridge_surfaces, "src/railtype/rail3.png") { rail_bridge_surfaces_template(2, 239) } spriteset(raila_track_overlay, "src/railtype/rails-all-in-snow.png") { rail_track_overlay_template(2, 131) } spriteset(raila_underlay, "src/railtype/rails-all-in-snow.png") { rail_underlay_template(2, 185) } spriteset(raila_tunnels, "src/railtype/rails-all-in-snow.png") { rail_tunnels_template(2, 291) } spriteset(raila_bridge_surfaces, "src/railtype/rails-all-in-snow.png") { rail_bridge_surfaces_template(2, 239) } // Депо spriteset(rail_depot, "src/railtype/depot.png") { rail_depot_template(2, 24) } spriteset(rail_depot_snow, "src/railtype/depot.png") { rail_depot_snow_template(2, 117) } // Шаблоны для переездов template level_crossings_railway_template(x, y, filename) { [ x, y, 64, 31, -31, 0, filename] [ x+80, y, 64, 31, -31, 0, filename] } // A open level crossing with warning lights and signs template level_crossings_1_template(x, y, filename) { [ x, y, 7, 13, 0, 0, filename] [ x+50, y, 7, 13, -3, -9, filename] [x+100, y, 7, 13, -6, -10, filename] [x+150, y, 7, 13, 0, 0, filename] [x+200, y, 7, 13, -1, -9, filename] [x+250, y, 7, 13, 0, 0, filename] [x+300, y, 7, 13, 0, 0, filename] [x+350, y, 7, 13, -2, -11, filename] } // A half barrier level crossing template level_crossings_2_open_template(x, y, filename) { [ x, y, 7, 20, 0, 0, filename] [ x+48, y, 9, 20, -9, -13, filename] [x+100, y, 9, 20, -8, -18, filename] [x+150, y, 7, 20, 0, 0, filename] [x+198, y, 9, 20, 1, -14, filename] [x+250, y, 7, 20, 0, 0, filename] [x+300, y, 7, 20, 0, 0, filename] [x+350, y, 9, 20, 2, -19, filename] } template level_crossings_2_closed_template(x, y, filename) { [ x, y, 7, 20, 0, 0, filename] [ x+48, y, 22, 25, -9, -13, filename] [ x+87, y, 22, 25, -21, -18, filename] [x+150, y, 7, 20, 0, 0, filename] [x+198, y, 22, 20, 1, -14, filename] [x+250, y, 7, 20, 0, 0, filename] [x+300, y, 7, 20, 0, 0, filename] [x+337, y, 22, 20, -11, -19, filename] } spriteset(rail_1_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rail1.png") level_crossings_1_template(10, 133, "src/railtype/crossing1.png") } spriteset(rail_1_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rail1.png") level_crossings_1_template(10, 170, "src/railtype/crossing1.png") } spriteset(rail_1_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rail1.png") level_crossings_1_template(10, 207, "src/railtype/crossing1.png") } spriteset(rail_2_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rail1.png") level_crossings_2_open_template(10, 133, "src/railtype/crossing2.png") } spriteset(rail_2_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rail1.png") level_crossings_2_closed_template(10, 170, "src/railtype/crossing2.png") } spriteset(rail_2_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rail1.png") level_crossings_2_closed_template(10, 217, "src/railtype/crossing2.png") } spriteset(rail2_1_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rail2.png") level_crossings_1_template(10, 133, "src/railtype/crossing1.png") } spriteset(rail2_1_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rail2.png") level_crossings_1_template(10, 170, "src/railtype/crossing1.png") } spriteset(rail2_1_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rail2.png") level_crossings_1_template(10, 207, "src/railtype/crossing1.png") } spriteset(rail2_2_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rail2.png") level_crossings_2_open_template(10, 133, "src/railtype/crossing2.png") } spriteset(rail2_2_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rail2.png") level_crossings_2_closed_template(10, 170, "src/railtype/crossing2.png") } spriteset(rail2_2_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rail2.png") level_crossings_2_closed_template(10, 217, "src/railtype/crossing2.png") } spriteset(rail3_1_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rail3.png") level_crossings_1_template(10, 133, "src/railtype/crossing1.png") } spriteset(rail3_1_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rail3.png") level_crossings_1_template(10, 170, "src/railtype/crossing1.png") } spriteset(rail3_1_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rail3.png") level_crossings_1_template(10, 207, "src/railtype/crossing1.png") } spriteset(rail3_2_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rail3.png") level_crossings_2_open_template(10, 133, "src/railtype/crossing2.png") } spriteset(rail3_2_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rail3.png") level_crossings_2_closed_template(10, 170, "src/railtype/crossing2.png") } spriteset(rail3_2_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rail3.png") level_crossings_2_closed_template(10, 217, "src/railtype/crossing2.png") } spriteset(raila_1_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rails-all-in-snow.png") level_crossings_1_template(10, 133, "src/railtype/crossing1.png") } spriteset(raila_1_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rails-all-in-snow.png") level_crossings_1_template(10, 170, "src/railtype/crossing1.png") } spriteset(raila_1_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rails-all-in-snow.png") level_crossings_1_template(10, 207, "src/railtype/crossing1.png") } spriteset(raila_2_level_crossings_open) { level_crossings_railway_template(2, 349, "src/railtype/rails-all-in-snow.png") level_crossings_2_open_template(10, 133, "src/railtype/crossing2.png") } spriteset(raila_2_level_crossings_closed) { level_crossings_railway_template(2, 349, "src/railtype/rails-all-in-snow.png") level_crossings_2_closed_template(10, 170, "src/railtype/crossing2.png") } spriteset(raila_2_level_crossings_closed_big) { level_crossings_railway_template(2, 349, "src/railtype/rails-all-in-snow.png") level_crossings_2_closed_template(10, 217, "src/railtype/crossing2.png") } // забор template fences_none_template(x, y) { [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] [ x, y, 1, 1, 0, 0] } template fences_template(x, y) { [ x, y, 34, 22, -31+2, -5+1] [ x+48, y, 34, 22, 0-1, -5] [ x+96, y, 4, 35, 0, -18] [ x+112, y, 66, 8, -31, -5] [ x+192, y, 34, 14, -31+2, -5+1] [ x+240, y, 34, 14, 0-1, -5] [ x+288, y, 34, 30, -31+2, -13+1] [ x+336, y, 34, 30, 0-1, -13] } spriteset(fences, "src/railtype/fence.png") { fences_template(1, 1) } spriteset(fences_none, "src/railtype/fence.png") { fences_none_template(1, 1) } /// railaction // Переезды // Учитываем level_crossing_status, town_zone, terrain_type switch (FEAT_RAILTYPES, SELF, get_rail_level_crossings, (terrain_type == TILETYPE_SNOW) + (town_zone == TOWNZONE_EDGE) * 2 + (level_crossing_status == LEVEL_CROSSING_CLOSED) * 4) { 0: rail_2_level_crossings_open; // нет снега, город, открыто 1: raila_2_level_crossings_open; // снег, город, открыто 2: rail_1_level_crossings_open; // нет снега, за городом, открыто 3: raila_1_level_crossings_open; // снег, за городом, открыто 4: rail_2_level_crossings_closed_big; // нет снега, город, закрыто 5: raila_2_level_crossings_closed_big; // снег, город, закрыто 6: rail_1_level_crossings_closed_big; // нет снега, за городом, закрыто raila_1_level_crossings_closed_big; // снег, за городом, закрыто } switch (FEAT_RAILTYPES, SELF, get_rail2_level_crossings, (terrain_type == TILETYPE_SNOW) + (town_zone == TOWNZONE_EDGE) * 2 + (level_crossing_status == LEVEL_CROSSING_CLOSED) * 4) { 0: rail2_2_level_crossings_open; // нет снега, город, открыто 1: raila_2_level_crossings_open; // снег, город, открыто 2: rail2_1_level_crossings_open; // нет снега, за городом, открыто 3: raila_1_level_crossings_open; // снег, за городом, открыто 4: rail2_2_level_crossings_closed_big; // нет снега, город, закрыто 5: raila_2_level_crossings_closed_big; // снег, город, закрыто 6: rail2_1_level_crossings_closed_big; // нет снега, за городом, закрыто raila_1_level_crossings_closed_big; // снег, за городом, закрыто } switch (FEAT_RAILTYPES, SELF, get_rail3_level_crossings, (terrain_type == TILETYPE_SNOW) + (town_zone == TOWNZONE_EDGE) * 2 + (level_crossing_status == LEVEL_CROSSING_CLOSED) * 4) { 0: rail3_2_level_crossings_open; // нет снега, город, открыто 1: raila_2_level_crossings_open; // снег, город, открыто 2: rail3_1_level_crossings_open; // нет снега, за городом, открыто 3: raila_1_level_crossings_open; // снег, за городом, открыто 4: rail3_2_level_crossings_closed_big; // нет снега, город, закрыто 5: raila_2_level_crossings_closed_big; // снег, город, закрыто 6: rail3_1_level_crossings_closed_big; // нет снега, за городом, закрыто raila_1_level_crossings_closed_big; // снег, за городом, закрыто } switch (FEAT_RAILTYPES, SELF, get_rail_track_overlay, terrain_type) { TILETYPE_SNOW: raila_track_overlay; rail_track_overlay; } switch (FEAT_RAILTYPES, SELF, get_rail2_track_overlay, terrain_type) { TILETYPE_SNOW: raila_track_overlay; rail2_track_overlay; } switch (FEAT_RAILTYPES, SELF, get_rail3_track_overlay, terrain_type) { TILETYPE_SNOW: raila_track_overlay; rail3_track_overlay; } switch (FEAT_RAILTYPES, SELF, get_rail_underlay, terrain_type) { TILETYPE_SNOW: raila_underlay; rail_underlay; } switch (FEAT_RAILTYPES, SELF, get_rail2_underlay, terrain_type) { TILETYPE_SNOW: raila_underlay; rail2_underlay; } switch (FEAT_RAILTYPES, SELF, get_rail3_underlay, terrain_type) { TILETYPE_SNOW: raila_underlay; rail3_underlay; } switch (FEAT_RAILTYPES, SELF, get_rail_tunnels, terrain_type) { TILETYPE_SNOW: raila_tunnels; rail_tunnels; } switch (FEAT_RAILTYPES, SELF, get_rail2_tunnels, terrain_type) { TILETYPE_SNOW: raila_tunnels; rail2_tunnels; } switch (FEAT_RAILTYPES, SELF, get_rail3_tunnels, terrain_type) { TILETYPE_SNOW: raila_tunnels; rail3_tunnels; } switch (FEAT_RAILTYPES, SELF, get_rail_bridge_surfaces, terrain_type) { TILETYPE_SNOW: raila_bridge_surfaces; rail_bridge_surfaces; } switch (FEAT_RAILTYPES, SELF, get_rail2_bridge_surfaces, terrain_type) { TILETYPE_SNOW: raila_bridge_surfaces; rail2_bridge_surfaces; } switch (FEAT_RAILTYPES, SELF, get_rail3_bridge_surfaces, terrain_type) { TILETYPE_SNOW: raila_bridge_surfaces; rail3_bridge_surfaces; } // Депо switch (FEAT_RAILTYPES, SELF, rail_depots, terrain_type ) { TILETYPE_SNOW: rail_depot_snow; rail_depot; } /// railtracks if (enable_our_own_tracks) { /// Пути эпохи индустриализации, пути промпредприятий /// с испокон веков (в XLS с 1880?) // Автономная железная дорога item (FEAT_RAILTYPES, rla1) { property { label: "RLA1"; introduction_date: date(0, 1, 1); name: string(STR_RAIL_NAME); toolbar_caption: string(STR_RAIL_TOOLBAR); menu_text: string(STR_RAIL_MENU); build_window_caption: string(STR_RAIL_BUILD_CAPTION); autoreplace_text: string(STR_RAIL_AUTOREPLACE); new_engine_text: string(STR_RAIL_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 64; speed_limit: 62.5 mph; // 100 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 8; sort_order: 0x08; alternative_railtype_list: ["RAIL"]; } graphics { gui: rail_gui; track_overlay: get_rail_track_overlay; underlay: get_rail_underlay; tunnels: get_rail_tunnels; bridge_surfaces: get_rail_bridge_surfaces; level_crossings: get_rail_level_crossings; fences: fences_none; depots: rail_depots; } } // электрифицированная железная дорога переменного тока // electrified railway AC (alternate current) item (FEAT_RAILTYPES, era1) { property { label: "ERA1"; introduction_date: date(1954, 1, 1); name: string(STR_ERAC_NAME); toolbar_caption: string(STR_ERAC_TOOLBAR); menu_text: string(STR_ERAC_MENU); build_window_caption: string(STR_ERAC_BUILD_CAPTION); autoreplace_text: string(STR_ERAC_AUTOREPLACE); new_engine_text: string(STR_ERAC_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERA1", "ERA2", "ERA3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 256; speed_limit: 62.5 mph; // 100 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 149; sort_order: 0x18; alternative_railtype_list: ["ELRL"]; } graphics { gui: rail_gui; track_overlay: get_rail_track_overlay; underlay: get_rail_underlay; tunnels: get_rail_tunnels; bridge_surfaces: get_rail_bridge_surfaces; level_crossings: get_rail_level_crossings; fences: fences_none; depots: rail_depots; catenary_wire: erac_catenary_wire; catenary_pylons: erac_catenary_pylons; } } // электрифицированная железная дорога постоянного тока // electrified railway DC (direct current) item (FEAT_RAILTYPES, erd1) { property { label: "ERD1"; introduction_date: date(1932, 1, 1); name: string(STR_ERDC_NAME); toolbar_caption: string(STR_ERDC_TOOLBAR); menu_text: string(STR_ERDC_MENU); build_window_caption: string(STR_ERDC_BUILD_CAPTION); autoreplace_text: string(STR_ERDC_AUTOREPLACE); new_engine_text: string(STR_ERDC_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERD1", "ERD2", "ERD3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 512; speed_limit: 62.5 mph; // 100 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 117; sort_order: 0x1C; alternative_railtype_list: ["ELRL"]; } graphics { gui: rail_gui; track_overlay: get_rail_track_overlay; underlay: get_rail_underlay; tunnels: get_rail_tunnels; bridge_surfaces: get_rail_bridge_surfaces; level_crossings: get_rail_level_crossings; fences: fences_none; depots: rail_depots; catenary_wire: erdc_catenary_wire; catenary_pylons: erdc_catenary_pylons; } } /// Магистральная линия (в XLS с 1920?) // Автономная железная дорога item (FEAT_RAILTYPES, rla2) { property { label: "RLA2"; introduction_date: date(1920, 1, 1); name: string(STR_RLA2_NAME); toolbar_caption: string(STR_RLA2_TOOLBAR); menu_text: string(STR_RLA2_MENU); build_window_caption: string(STR_RAIL_BUILD_CAPTION); autoreplace_text: string(STR_RAIL_AUTOREPLACE); new_engine_text: string(STR_RAIL_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 64; speed_limit: 87.5 mph; //140 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 10; sort_order: 0x09; alternative_railtype_list: ["RAIL"]; } graphics { gui: rail2_gui; track_overlay: get_rail2_track_overlay; underlay: get_rail2_underlay; tunnels: get_rail2_tunnels; bridge_surfaces: get_rail2_bridge_surfaces; level_crossings: get_rail2_level_crossings; fences: fences_none; depots: rail_depots; } } // электрифицированная железная дорога переменного тока item (FEAT_RAILTYPES, era2) { property { label: "ERA2"; introduction_date: date(1954, 1, 1); name: string(STR_ERA2_NAME); toolbar_caption: string(STR_ERA2_TOOLBAR); menu_text: string(STR_ERA2_MENU); build_window_caption: string(STR_ERAC_BUILD_CAPTION); autoreplace_text: string(STR_ERAC_AUTOREPLACE); new_engine_text: string(STR_ERAC_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERA1", "ERA2", "ERA3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 256; speed_limit: 87.5 mph; //140 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 151; sort_order: 0x19; alternative_railtype_list: ["ELRL"]; } graphics { gui: rail2_gui; track_overlay: get_rail2_track_overlay; underlay: get_rail2_underlay; tunnels: get_rail2_tunnels; bridge_surfaces: get_rail2_bridge_surfaces; level_crossings: get_rail2_level_crossings; fences: fences_none; depots: rail_depots; catenary_wire: erac_catenary_wire; catenary_pylons: erac_catenary_pylons; } } // электрифицированная железная дорога постоянного тока item (FEAT_RAILTYPES, erd2) { property { label: "ERD2"; introduction_date: date(1932, 1, 1); name: string(STR_ERD2_NAME); toolbar_caption: string(STR_ERD2_TOOLBAR); menu_text: string(STR_ERD2_MENU); build_window_caption: string(STR_ERDC_BUILD_CAPTION); autoreplace_text: string(STR_ERDC_AUTOREPLACE); new_engine_text: string(STR_ERDC_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERD1", "ERD2", "ERD3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 512; speed_limit: 87.5 mph; //140 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 119; sort_order: 0x1D; alternative_railtype_list: ["ELRL"]; } graphics { gui: rail2_gui; track_overlay: get_rail2_track_overlay; underlay: get_rail2_underlay; tunnels: get_rail2_tunnels; bridge_surfaces: get_rail2_bridge_surfaces; level_crossings: get_rail2_level_crossings; fences: fences_none; depots: rail_depots; catenary_wire: erdc_catenary_wire; catenary_pylons: erdc_catenary_pylons; } } // Двусистемная ж/д (double-system) item (FEAT_RAILTYPES, er2s) { property { label: "ER2S"; introduction_date: date(1954, 1, 1); name: string(STR_ERDS_NAME); toolbar_caption: string(STR_ERDS_TOOLBAR); menu_text: string(STR_ERDS_MENU); build_window_caption: string(STR_ERDS_BUILD_CAPTION); autoreplace_text: string(STR_ERDS_AUTOREPLACE); new_engine_text: string(STR_ERDS_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); construction_cost: 1024; speed_limit: 75 mph; //120 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 23; sort_order: 0x20; } graphics { gui: rail2_gui; track_overlay: get_rail2_track_overlay; underlay: get_rail2_underlay; tunnels: get_rail2_tunnels; bridge_surfaces: get_rail2_bridge_surfaces; level_crossings: get_rail2_level_crossings; fences: fences_none; depots: rail_depots; catenary_wire: erds_catenary_wire; catenary_pylons: erds_catenary_pylons; } } /// Высокоскоростная пассажирская магистраль (в XLS с 1960?) // Автономная железная дорога item (FEAT_RAILTYPES, rla3) { property { label: "RLA3"; introduction_date: date(1960, 1, 1); name: string(STR_RLA3_NAME); toolbar_caption: string(STR_RLA3_TOOLBAR); menu_text: string(STR_RLA3_MENU); build_window_caption: string(STR_RAIL_BUILD_CAPTION); autoreplace_text: string(STR_RAIL_AUTOREPLACE); new_engine_text: string(STR_RAIL_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 64; speed_limit: 0 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 12; sort_order: 0x0A; alternative_railtype_list: ["RAIL"]; } graphics { gui: rail3_gui; track_overlay: get_rail3_track_overlay; underlay: get_rail3_underlay; tunnels: get_rail3_tunnels; bridge_surfaces: get_rail3_bridge_surfaces; level_crossings: get_rail3_level_crossings; fences: fences; depots: rail_depots; } } // электрифицированная железная дорога переменного тока item (FEAT_RAILTYPES, era3) { property { label: "ERA3"; introduction_date: date(1960, 1, 1); name: string(STR_ERA3_NAME); toolbar_caption: string(STR_ERA3_TOOLBAR); menu_text: string(STR_ERA3_MENU); build_window_caption: string(STR_ERAC_BUILD_CAPTION); autoreplace_text: string(STR_ERAC_AUTOREPLACE); new_engine_text: string(STR_ERAC_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERA1", "ERA2", "ERA3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 256; speed_limit: 0 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 153; sort_order: 0x1A; alternative_railtype_list: ["ELRL"]; } graphics { gui: rail3_gui; track_overlay: get_rail3_track_overlay; underlay: get_rail3_underlay; tunnels: get_rail3_tunnels; bridge_surfaces: get_rail3_bridge_surfaces; level_crossings: get_rail3_level_crossings; fences: fences; depots: rail_depots; catenary_wire: erac_catenary_wire; catenary_pylons: erac_catenary_pylons; } } // электрифицированная железная дорога постоянного тока item (FEAT_RAILTYPES, erd3) { property { label: "ERD3"; introduction_date: date(1960, 1, 1); name: string(STR_ERD3_NAME); toolbar_caption: string(STR_ERD3_TOOLBAR); menu_text: string(STR_ERD3_MENU); build_window_caption: string(STR_ERDC_BUILD_CAPTION); autoreplace_text: string(STR_ERDC_AUTOREPLACE); new_engine_text: string(STR_ERDC_NEW_ENGINE); compatible_railtype_list: ["RAIL", "ELRL", "RLA1", "RLA2", "RLA3", "ERA1", "ERA2", "ERA3", "ERD1", "ERD2", "ERD3", "ER2S"]; powered_railtype_list: ["ELRL", "ERD1", "ERD2", "ERD3", "ER2S"]; railtype_flags: bitmask(RAILTYPE_FLAG_CATENARY); curve_speed_multiplier: 1; station_graphics: RAILTYPE_STATION_NORMAL; construction_cost: 512; speed_limit: 0 km/h; acceleration_model: ACC_MODEL_RAIL; map_colour: 121; sort_order: 0x1E; alternative_railtype_list: ["ELRL"]; } graphics { gui: rail3_gui; track_overlay: get_rail3_track_overlay; underlay: get_rail3_underlay; tunnels: get_rail3_tunnels; bridge_surfaces: get_rail3_bridge_surfaces; level_crossings: get_rail3_level_crossings; fences: fences; depots: rail_depots; catenary_wire: erdc_catenary_wire; catenary_pylons: erdc_catenary_pylons; } } } /// definition // Используем полноразмерные поезда в депо train_width_32_px = 1; // Вертикаль поезда в депо traininfo_y_offset = 3; // Ровый поезд new_train_age = 5; // Истечение срока retire_early_default = -8; // RE // модель // максимальная скорость // вычитаем 2 года из года ввода ТС, для прицепных и немоторных вагонов // вычитаем 2 года из года ввода ТС, для головных вагонов и локомотивов // рисуем [не] на карте? // рисуем в депо // Не построен // Построен // ТС по [-]смещению в цепочке [не] скрыто? // Для получения характеристик предыдущего ПС в цепочке // для записи смещения в регистр (работа с переменной 0x61) // Для краткой записи списка климатов ПС // Для выбора правильного набора спрайтов в случае флага TRAIN_FLAG_FLIP // или CB_RESULT_REVERSED_VEHICLE // Порог скорости электровозов // x км/ч * 0.2778 == value // 50 км/ч --> 13 (13.89) // 62 км/ч --> 17 (17.2236) //threshold of speed // обобщение свойств для категорий ПС // сокращение для отключения визуальных эффектов тяги и тяги вагонов // визуальные эффекты для электротяги // визуальные эффекты для дизельной тяги // визуальные эффекты для паровой тяги // поправка для функции мощности (power cb) // задаваемое в свойстве отличается от возвращаемого функцией // Получаем оштрафованную величину скорости, 15% // Флаг штрафа поезда по скорости // обычные рельсы в зависимости от настроек // рельсы для постоянного и переменного тока в зависимости от настроек // для двусистемных // Штрафуем ли по скорости // Вычисляем ТУ по формуле (табличное_значение/масса/9.8) // ТУ для cb tractive_effort_coefficient /// graphics definition // Определение спрайта меню покупки // 2-хсекционный электровоз с 2 пантографами // 2-хсекционный электровоз с 1 пантографом // 2-хсекционный электровоз без пантографа // ЭМВПС 3 головных // если голова неверная, то тяги нет по определению // если голова неверная, то тяги нет по определению /// code definition // Выбор ориентации кабины секции для СМЕ (схема без альтернатив в СМЕ) // Выбор ориентации кабины секции для СМЕ (схема с 1 альтернативой) // Выбор ориентации кабины секции для СМЕ (схема с 1 альтернативой и средней секцией) // Определение пенальти на скорость (схема без СМЕ) // Определение пенальти на скорость (схема без альтернатив в СМЕ) // Определение пенальти на скорость (схема c 1 альтернативой в СМЕ) // Определение пенальти на скорость (схема c 2 альтернативами в СМЕ) // Определение пенальти на скорость (схема c 3 альтернативами в СМЕ) // Определение пенальти на скорость (схема c 4 альтернативами в СМЕ) // Определение пенальти на скорость (схема c 5 альтернативами в СМЕ) // Определение пенальти на скорость (схема c 6 альтернативами в СМЕ) // Определение скорости без вариантов // Определение скорости с изменением в заданный год // Определение скорости с изменением по году постройки // Определение скорости с изменением по году постройки и в заданном году // Определение скорости с изменением в 2 заданных года // Определение скорости со снижением для старых // Определение скорости со снижением для старых и изменением скорости по году постройки // Определение скорости со снижением для старых и с предсерийной моделью // не выпускать новые тройники без средней секции // не выпускать новые двойки с средней секцией // Если рисуем на карте и следующий в цепочке вагон скрыт, то отдаём пустышку // пляски с 0x9C и 0x9A для паровозов, чтобы клёса крутились в зависимости от положения, а не от времени. // long vehicle template // short vehicle template // special vehicle template /// template // покупка template new_purchase_template(x, y) { [x, y, 100, 18, -40, -11] } template new_purchase_template_noico(x, y) { [x+18, y, 82, 18, -40, -11] } // невидимка template dummy_template(x, y) { [x, y, 1, 1, 0, 0] } // Шаблон 3 (size 3) ** // обычный template s3_template(x, y, shift) { [x, y, 7, 30, -2, -30-2*shift] [x+16, y, 11, 27, -4+2*shift, -22-shift] [x+32, y, 12, 20, 4+4*shift, -16] //dy-1 [x+64, y, 11, 27, 5+2*shift, -18+shift] [x+80, y, 7, 30, -2, -22+2*shift] [x+96, y, 11, 27, -14-2*shift, -17+shift] [x+112, y, 12, 20, -16-4*shift, -16] //dy-1 [x+144, y, 11, 27, -5-2*shift, -23-shift] } template s3_r_template(x, y, shift) { [x+80, y, 7, 30, -2, -30-2*shift] [x+96, y, 11, 27, -4+2*shift, -22-shift] [x+112, y, 12, 20, 4+4*shift, -16] //dy-1 [x+144, y, 11, 27, 5+2*shift, -18+shift] [x, y, 7, 30, -2, -22+2*shift] [x+16, y, 11, 27, -14-2*shift, -17+shift] [x+32, y, 12, 20, -16-4*shift, -16] //dy-1 [x+64, y, 11, 27, -5-2*shift, -23-shift] } // покупка (вид 7) template s3_purchase_template(x, y, shift) { [x+112, y, 12, 20, -16+shift, -16] } // Шаблон 4 (size 4) ** // обычный template s4_template(x, y, shift) { [x, y, 7, 32, -2, -30-2*shift] [x+16, y, 13, 28, -6+2*shift, -22-shift] [x+48, y, 16, 20, 0+4*shift, -16] //dy-1 [x+80, y, 13, 28, 3+2*shift, -19+shift] [x+112, y, 7, 32, -2, -24+2*shift] [x+128, y, 13, 28, -14-2*shift, -18+shift] [x+160, y, 16, 20, -16-4*shift, -16] //dy-1 [x+192, y, 13, 28, -5-2*shift, -23-shift] } template s4_r_template(x, y, shift) { [x+112, y, 7, 32, -2, -30-2*shift] [x+128, y, 13, 28, -6+2*shift, -22-shift] [x+160, y, 16, 20, 0+4*shift, -16] //dy-1 [x+192, y, 13, 28, 3+2*shift, -19+shift] [x, y, 7, 32, -2, -24+2*shift] [x+16, y, 13, 28, -14-2*shift, -18+shift] [x+48, y, 16, 20, -16-4*shift, -16] //dy-1 [x+80, y, 13, 28, -5-2*shift, -23-shift] } // покупка (вид 7) template s4_purchase_template(x, y, shift) { [x+160, y, 16, 20, -16+shift, -16] } // Шаблон 5 (size 5) ** // обычный template s5_template(x, y, shift) { [x, y, 7, 34, -2, -30-2*shift] [x+16, y, 15, 29, -8+2*shift, -22-shift] [x+48, y, 20, 20, -4+4*shift, -16] //dy-1 14-->15 [x+80, y, 15, 29, 1+2*shift, -20+shift] [x+112, y, 7, 34, -2, -24+2*shift] [x+128, y, 15, 29, -14-2*shift, -19+shift] [x+160, y, 20, 20, -16-4*shift, -16] //dy-1 14-->15 [x+192, y, 15, 29, -5-2*shift, -23-shift] } template s5_r_template(x, y, shift) { [x+112, y, 7, 34, -2, -30-2*shift] [x+128, y, 15, 29, -8+2*shift, -22-shift] [x+160, y, 20, 20, -4+4*shift, -16] //dy-1 14-->15 [x+192, y, 15, 29, 1+2*shift, -20+shift] [x, y, 7, 34, -2, -24+2*shift] [x+16, y, 15, 29, -14-2*shift, -19+shift] [x+48, y, 20, 20, -16-4*shift, -16] //dy-1 14-->15 [x+80, y, 15, 29, -5-2*shift, -23-shift] } // покупка (вид 7) template s5_purchase_template(x, y, shift) { [x+160, y, 20, 20, -16+shift, -16] } // Шаблон 6 (size 6) ** // обычный template s6_template(x, y, shift) { [x, y, 7, 38, -2, -32-2*shift] [x+16, y, 17, 30, -10+2*shift, -22-shift] [x+48, y, 24, 20, -8+4*shift, -16] //dy-1 14-->15 [x+80, y, 17, 30, -1+2*shift, -21+shift] [x+112, y, 7, 38, -2, -28+2*shift] [x+128, y, 17, 30, -14-2*shift, -20+shift] [x+160, y, 24, 20, -16-4*shift, -16] //dy-1 14-->15 [x+192, y, 17, 30, -5-2*shift, -23-shift] } template s6_r_template(x, y, shift) { [x+112, y, 7, 38, -2, -32-2*shift] [x+128, y, 17, 30, -10+2*shift, -22-shift] [x+160, y, 24, 20, -8+4*shift, -16] //dy-1 14-->15 [x+192, y, 17, 30, -1+2*shift, -21+shift] [x, y, 7, 38, -2, -28+2*shift] [x+16, y, 17, 30, -14-2*shift, -20+shift] [x+48, y, 24, 20, -16-4*shift, -16] //dy-1 14-->15 [x+80, y, 17, 30, -5-2*shift, -23-shift] } // покупка (вид 7) template s6_purchase_template(x, y, shift) { [x+160, y, 24, 20, -16+shift, -16] } // Шаблон 7 (size 7) ** // обычный template s7_template(x, y, shift) { [x, y, 7, 39, -2, -31-2*shift] [x+16, y, 19, 31, -12+2*shift, -22-shift] [x+48, y, 28, 20, -12+4*shift, -16] //dy-1 14-->15 [x+96, y, 19, 31, -3+2*shift, -22+shift] [x+128, y, 7, 39, -2, -29+2*shift] [x+144, y, 19, 31, -14-2*shift, -21+shift] [x+176, y, 28, 20, -16-4*shift, -16] //dy-1 14-->15 [x+224, y, 19, 31, -5-2*shift, -23-shift] } template s7_r_template(x, y, shift) { [x+128, y, 7, 39, -2, -31-2*shift] [x+144, y, 19, 31, -12+2*shift, -22-shift] [x+176, y, 28, 20, -12+4*shift, -16] //dy-1 14-->15 [x+224, y, 19, 31, -3+2*shift, -22+shift] [x, y, 7, 39, -2, -29+2*shift] [x+16, y, 19, 31, -14-2*shift, -21+shift] [x+48, y, 28, 20, -16-4*shift, -16] //dy-1 14-->15 [x+96, y, 19, 31, -5-2*shift, -23-shift] } // покупка (вид 7) template s7_purchase_template(x, y, shift) { [x+176, y, 28, 20, -16+shift, -16] } // Шаблон 8 (size 8) ** // обычный template s8_template(x, y, shift) { [x, y, 12, 31, -5, -18] [x+32, y, 22, 23, -14, -13] [x+64, y, 32, 17, -16, -13] [x+112, y, 22, 23, -6, -14] [x+144, y, 12, 31, -5, -18] [x+176, y, 22, 23, -14, -13] [x+208, y, 32, 17, -16, -13] [x+256, y, 22, 23, -6, -14] } template s8_r_template(x, y, shift) { [x+144, y, 12, 31, -5, -18] [x+176, y, 22, 23, -14, -13] [x+208, y, 32, 17, -16, -13] [x+256, y, 22, 23, -6, -14] [x, y, 12, 31, -5, -18] [x+32, y, 22, 23, -14, -13] [x+64, y, 32, 17, -16, -13] [x+112, y, 22, 23, -6, -14] } // покупка (вид 7) template s8_purchase_template(x, y, shift) { [x+208, y, 32, 17, -16+shift, -13] } // Шаблон 9 (size 9) ** // обычный template s9_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } // специальный template s9vl11_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 43, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+239, y, 43, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } // покупка (вид 7) template s9_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } template s9_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+2] [x+240, y, 42, 43, -14-2, -33+1] [x+288, y, 64, 17, -16-4, -13 ] [x+368, y, 42, 42, -6-2, -14-1] [x, y, 12, 62, -5 , -18-2] [x+32, y, 42, 42, -34+2, -13-1] [x+80, y, 64, 17, -48+4, -13 ] [x+160, y, 42, 43, -26+2, -34+1] } // Шаблон 10 (size 10) ** // обычный template s10_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s10_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+4] [x+240, y, 42, 43, -14-4, -33+2] [x+288, y, 64, 17, -16-8, -13 ] [x+368, y, 42, 42, -6-4, -14-2] [x, y, 12, 62, -5 , -18-4] [x+32, y, 42, 42, -34+4, -13-2] [x+80, y, 64, 17, -48+8, -13 ] [x+160, y, 42, 43, -26+4, -34+2] } // покупка (вид 7) template s10_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // Шаблон 11 (size 11) ** // обычный template s11_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s11_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+6] [x+240, y, 42, 43, -14 -6, -33+3] [x+288, y, 64, 17, -16-12, -13 ] [x+368, y, 42, 42, -6 -6, -14-3] [x, y, 12, 62, -5 , -18-6] [x+32, y, 42, 42, -34 +6, -13-3] [x+80, y, 64, 17, -48+12, -13 ] [x+160, y, 42, 43, -26 +6, -34+3] } // покупка (вид 7) template s11_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // для ЧС2т template s11ch_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 43, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+239, y, 43, 43, -16, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } // Шаблон 12 (size 12) ** // обычный template s12_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s12_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+8] [x+240, y, 42, 43, -14 -8, -33+4] [x+288, y, 64, 17, -16-16, -13 ] [x+368, y, 42, 42, -6 -8, -14-4] [x, y, 12, 62, -5 , -18-8] [x+32, y, 42, 42, -34 +8, -13-4] [x+80, y, 64, 17, -48+16, -13 ] [x+160, y, 42, 43, -26 +8, -34+4] } // версия для UI в депо (только вид 7) template s12ui1_template(x, y, shift) { [x, y, 64, 17, -16-4*shift, -13] } // покупка (вид 7) template s12_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // для ЧС4т template s12ch_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 43, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+239, y, 43, 43, -16, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } // Шаблон 13 (size 13) ** // обычный template s13_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s13_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+10] [x+240, y, 42, 43, -14-10, -33 +5] [x+288, y, 64, 17, -16-20, -13 ] [x+368, y, 42, 42, -6-10, -14 -5] [x, y, 12, 62, -5 , -18-10] [x+32, y, 42, 42, -34+10, -13 -5] [x+80, y, 64, 17, -48+20, -13 ] [x+160, y, 42, 43, -26+10, -34 +5] } // покупка (вид 7) template s13_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // версия для UI в депо (только вид 7) template s13ui1_template(x, y, shift) { [x, y, 64, 17, -16-4*shift, -13] } // Шаблон 14 (size 14) ** // обычный template s14_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s14_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+12] [x+240, y, 42, 43, -14-12, -33 +6] [x+288, y, 64, 17, -16-24, -13 ] [x+368, y, 42, 42, -6-12, -14 -6] [x, y, 12, 62, -5 , -18-12] [x+32, y, 42, 42, -34+12, -13 -6] [x+80, y, 64, 17, -48+24, -13 ] [x+160, y, 42, 43, -26+12, -34 +6] } // покупка (вид 7) template s14_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // Шаблон 15 (size 15) ** // обычный template s15_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s15_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+14] [x+240, y, 42, 43, -14-14, -33 +7] [x+288, y, 64, 17, -16-28, -13 ] [x+368, y, 42, 42, -6-14, -14 -7] [x, y, 12, 62, -5 , -18-14] [x+32, y, 42, 42, -34+14, -13 -7] [x+80, y, 64, 17, -48+28, -13 ] [x+160, y, 42, 43, -26+14, -34 +7] } // покупка (вид 7) template s15_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // версия для UI в депо (только вид 7) template s15ui1_template(x, y, shift) { [x, y, 64, 17, -16-4*shift, -13] } // Шаблон 16 (size 16) ** // обычный template s16_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 64, 17, -48, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 64, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s16_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+16] [x+240, y, 42, 43, -14-16, -33 +8] [x+288, y, 64, 17, -16-32, -13 ] [x+368, y, 42, 42, -6-16, -14 -8] [x, y, 12, 62, -5 , -18-16] [x+32, y, 42, 42, -34+16, -13 -8] [x+80, y, 64, 17, -48+32, -13 ] [x+160, y, 42, 43, -26+16, -34 +8] } // покупка (вид 7) template s16_purchase_template(x, y, shift) { [x+288, y, 64, 17, -16+shift, -13] } // Шаблон 17 (size 17) ** // обычный template s17_template(x, y, shift) { [x, y, 12, 62, -5, -18] [x+32, y, 42, 42, -34, -13] [x+80, y, 68, 17, -52, -13] [x+160, y, 42, 43, -26, -34] [x+208, y, 12, 62, -5, -49] [x+240, y, 42, 43, -14, -33] [x+288, y, 68, 17, -16, -13] [x+368, y, 42, 42, -6, -14] } template s17_r_template(x, y, shift) { [x+208, y, 12, 62, -5 , -49+18] [x+240, y, 42, 43, -14-18, -33 +9] [x+288, y, 68, 17, -16-36, -13 ] [x+368, y, 42, 42, -6-18, -14 -9] [x, y, 12, 62, -5 , -18-18] [x+32, y, 42, 42, -34+18, -13 -9] [x+80, y, 68, 17, -52+36, -13 ] [x+160, y, 42, 43, -26+18, -34 +9] } // покупка (вид 7) template s17_purchase_template(x, y, shift) { [x+288, y, 68, 17, -16+shift, -13] } /// action // --- ограничение скорости по окончанию установленного срока службы --- // ограничиваем скорость через 20 лет работы 120 --> 110 switch (FEAT_TRAINS, SELF, speed_after20_120to110, age_in_days >= (20*365+5)) { 1: return 110; return 120; } // ограничиваем скорость через 20 лет работы 120 --> 100 switch (FEAT_TRAINS, SELF, speed_after20_120to100, age_in_days >= (20*365+5)) { 1: return 100; return 120; } // ограничиваем скорость через 30 лет работы 130 --> 110 switch (FEAT_TRAINS, SELF, speed_after30_130to110, age_in_days >= (30*365+8)) { 1: return 110; return 130; } // ограничиваем скорость через 30 лет работы 130 --> 100 switch (FEAT_TRAINS, SELF, speed_after30_130to100, age_in_days >= (30*365+8)) { 1: return 100; return 130; } // невидимый вагон размером 1 switch (FEAT_TRAINS, SELF, articulated_part_dummy1, extra_callback_info1) { 1: return dummy1; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 2 switch (FEAT_TRAINS, SELF, articulated_part_dummy2, extra_callback_info1) { 1: return dummy2; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 3 switch (FEAT_TRAINS, SELF, articulated_part_dummy3, extra_callback_info1) { 1: return dummy3; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 4 switch (FEAT_TRAINS, SELF, articulated_part_dummy4, extra_callback_info1) { 1: return dummy4; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 5 switch (FEAT_TRAINS, SELF, articulated_part_dummy5, extra_callback_info1) { 1: return dummy5; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 6 switch (FEAT_TRAINS, SELF, articulated_part_dummy6, extra_callback_info1) { 1: return dummy6; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 7 switch (FEAT_TRAINS, SELF, articulated_part_dummy7, extra_callback_info1) { 1: return dummy7; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // невидимый вагон размером 8 switch (FEAT_TRAINS, SELF, articulated_part_dummy8, extra_callback_info1) { 1: return dummy8; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // тендер switch (FEAT_TRAINS, SELF, articulated_part_tender, extra_callback_info1) { 1: return unitb; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } /// recolour // Шаблон задания спрайтов перекрашивания на базе CC // C6-CD, 8 элементов ttdall_cc = reserve_sprites(215); replace(ttdall_cc) { // 0x00 Transperent recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x00; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // 0x01 Grey recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x01; 0xC9: 0x01; 0xCA: 0x02; 0xCB: 0x03; 0xCC: 0x04; 0xCD: 0x05; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x01; 0xC9: 0x02; 0xCA: 0x03; 0xCB: 0x04; 0xCC: 0x05; 0xCD: 0x06; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x02; 0xC9: 0x03; 0xCA: 0x04; 0xCB: 0x05; 0xCC: 0x06; 0xCD: 0x07; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x02; 0xC8: 0x03; 0xC9: 0x04; 0xCA: 0x05; 0xCB: 0x06; 0xCC: 0x07; 0xCD: 0x08; } recolour_sprite { 0xC6: 0x02; 0xC7: 0x03; 0xC8: 0x04; 0xC9: 0x05; 0xCA: 0x06; 0xCB: 0x07; 0xCC: 0x08; 0xCD: 0x09; } recolour_sprite { 0xC6: 0x03; 0xC7: 0x04; 0xC8: 0x05; 0xC9: 0x06; 0xCA: 0x07; 0xCB: 0x08; 0xCC: 0x09; 0xCD: 0x0A; } recolour_sprite { 0xC6: 0x04; 0xC7: 0x05; 0xC8: 0x06; 0xC9: 0x07; 0xCA: 0x08; 0xCB: 0x09; 0xCC: 0x0A; 0xCD: 0x0B; } recolour_sprite { 0xC6: 0x05; 0xC7: 0x06; 0xC8: 0x07; 0xC9: 0x08; 0xCA: 0x09; 0xCB: 0x0A; 0xCC: 0x0B; 0xCD: 0x0C; } recolour_sprite { 0xC6: 0x06; 0xC7: 0x07; 0xC8: 0x08; 0xC9: 0x09; 0xCA: 0x0A; 0xCB: 0x0B; 0xCC: 0x0C; 0xCD: 0x0D; } recolour_sprite { 0xC6: 0x07; 0xC7: 0x08; 0xC8: 0x09; 0xC9: 0x0A; 0xCA: 0x0B; 0xCB: 0x0C; 0xCC: 0x0D; 0xCD: 0x0E; } recolour_sprite { 0xC6: 0x08; 0xC7: 0x09; 0xC8: 0x0A; 0xC9: 0x0B; 0xCA: 0x0C; 0xCB: 0x0D; 0xCC: 0x0E; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x09; 0xC7: 0x0A; 0xC8: 0x0B; 0xC9: 0x0C; 0xCA: 0x0D; 0xCB: 0x0E; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x0A; 0xC7: 0x0B; 0xC8: 0x0C; 0xC9: 0x0D; 0xCA: 0x0E; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x0B; 0xC7: 0x0C; 0xC8: 0x0D; 0xC9: 0x0E; 0xCA: 0x0F; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x0C; 0xC7: 0x0D; 0xC8: 0x0E; 0xC9: 0x0F; 0xCA: 0x0F; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x10 grey metallic recolour_sprite { 0xC6: 0x01; 0xC7: 0x02; 0xC8: 0x03; 0xC9: 0x10; 0xCA: 0x11; 0xCB: 0x12; 0xCC: 0x13; 0xCD: 0x14; } recolour_sprite { 0xC6: 0x02; 0xC7: 0x03; 0xC8: 0x10; 0xC9: 0x11; 0xCA: 0x12; 0xCB: 0x13; 0xCC: 0x14; 0xCD: 0x15; } recolour_sprite { 0xC6: 0x03; 0xC7: 0x10; 0xC8: 0x11; 0xC9: 0x12; 0xCA: 0x13; 0xCB: 0x14; 0xCC: 0x15; 0xCD: 0x16; } recolour_sprite { 0xC6: 0x10; 0xC7: 0x11; 0xC8: 0x12; 0xC9: 0x13; 0xCA: 0x14; 0xCB: 0x15; 0xCC: 0x16; 0xCD: 0x17; } recolour_sprite { 0xC6: 0x11; 0xC7: 0x12; 0xC8: 0x13; 0xC9: 0x14; 0xCA: 0x15; 0xCB: 0x16; 0xCC: 0x17; 0xCD: 0x0D; } recolour_sprite { 0xC6: 0x12; 0xC7: 0x13; 0xC8: 0x14; 0xC9: 0x15; 0xCA: 0x16; 0xCB: 0x17; 0xCC: 0x0D; 0xCD: 0x0E; } recolour_sprite { 0xC6: 0x13; 0xC7: 0x14; 0xC8: 0x15; 0xC9: 0x16; 0xCA: 0x17; 0xCB: 0x0D; 0xCC: 0x0E; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x14; 0xC7: 0x15; 0xC8: 0x16; 0xC9: 0x17; 0xCA: 0x0D; 0xCB: 0x0E; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x18 Olive brown recolour_sprite { 0xC6: 0x01; 0xC7: 0x68; 0xC8: 0x69; 0xC9: 0x18; 0xCA: 0x1A; 0xCB: 0x1B; 0xCC: 0x1C; 0xCD: 0x1D; } recolour_sprite { 0xC6: 0x68; 0xC7: 0x69; 0xC8: 0x18; 0xC9: 0x19; 0xCA: 0x1A; 0xCB: 0x1B; 0xCC: 0x1C; 0xCD: 0x1D; } recolour_sprite { 0xC6: 0x69; 0xC7: 0x18; 0xC8: 0x19; 0xC9: 0x1A; 0xCA: 0x1B; 0xCB: 0x1C; 0xCC: 0x1D; 0xCD: 0x1E; } recolour_sprite { 0xC6: 0x18; 0xC7: 0x19; 0xC8: 0x1A; 0xC9: 0x1B; 0xCA: 0x1C; 0xCB: 0x1D; 0xCC: 0x1E; 0xCD: 0x1F; } recolour_sprite { 0xC6: 0x19; 0xC7: 0x1A; 0xC8: 0x1B; 0xC9: 0x1C; 0xCA: 0x1D; 0xCB: 0x1E; 0xCC: 0x1F; 0xCD: 0x27; } recolour_sprite { 0xC6: 0x1A; 0xC7: 0x1B; 0xC8: 0x1C; 0xC9: 0x1D; 0xCA: 0x1E; 0xCB: 0x1F; 0xCC: 0x27; 0xCD: 0xA9; } recolour_sprite { 0xC6: 0x1B; 0xC7: 0x1C; 0xC8: 0x1D; 0xC9: 0x1E; 0xCA: 0x1F; 0xCB: 0x27; 0xCC: 0xA9; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x1C; 0xC7: 0x1D; 0xC8: 0x1E; 0xC9: 0x1F; 0xCA: 0x27; 0xCB: 0xA9; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x20 Beige recolour_sprite { 0xC6: 0x68; 0xC7: 0x69; 0xC8: 0x6A; 0xC9: 0x20; 0xCA: 0x21; 0xCB: 0x22; 0xCC: 0x23; 0xCD: 0x24; } recolour_sprite { 0xC6: 0x69; 0xC7: 0x6A; 0xC8: 0x20; 0xC9: 0x21; 0xCA: 0x22; 0xCB: 0x23; 0xCC: 0x24; 0xCD: 0x25; } recolour_sprite { 0xC6: 0x6A; 0xC7: 0x20; 0xC8: 0x21; 0xC9: 0x22; 0xCA: 0x23; 0xCB: 0x24; 0xCC: 0x25; 0xCD: 0x26; } recolour_sprite { 0xC6: 0x20; 0xC7: 0x21; 0xC8: 0x22; 0xC9: 0x23; 0xCA: 0x24; 0xCB: 0x25; 0xCC: 0x26; 0xCD: 0x27; } recolour_sprite { 0xC6: 0x21; 0xC7: 0x22; 0xC8: 0x23; 0xC9: 0x24; 0xCA: 0x25; 0xCB: 0x26; 0xCC: 0x27; 0xCD: 0x45; } recolour_sprite { 0xC6: 0x22; 0xC7: 0x23; 0xC8: 0x24; 0xC9: 0x25; 0xCA: 0x26; 0xCB: 0x27; 0xCC: 0x45; 0xCD: 0xA9; } recolour_sprite { 0xC6: 0x23; 0xC7: 0x24; 0xC8: 0x25; 0xC9: 0x26; 0xCA: 0x27; 0xCB: 0x45; 0xCC: 0xA9; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x24; 0xC7: 0x25; 0xC8: 0x26; 0xC9: 0x27; 0xCA: 0x45; 0xCB: 0xA9; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x28 Satin recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x28; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x29; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x2A; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x28; 0xC7: 0x29; 0xC8: 0x2A; 0xC9: 0x2B; 0xCA: 0x2C; 0xCB: 0x2D; 0xCC: 0x2E; 0xCD: 0x2F; } recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x2C; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x2D; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x2E; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x2F; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x30; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x31; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x32 Light yellow recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x32; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x33; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x34; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x35 Brown recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x35; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x36; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x37; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x35; 0xC7: 0x36; 0xC8: 0x37; 0xC9: 0x38; 0xCA: 0x39; 0xCB: 0x3A; 0xCC: 0x3B; 0xCD: 0x26; } recolour_sprite { 0xC6: 0x36; 0xC7: 0x37; 0xC8: 0x38; 0xC9: 0x39; 0xCA: 0x3A; 0xCB: 0x3B; 0xCC: 0x26; 0xCD: 0x27; } recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x3A; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x3B; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x3C Yellow recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x3C; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x3D; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x3E; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x3C; 0xC7: 0x3D; 0xC8: 0x3E; 0xC9: 0x3F; 0xCA: 0x40; 0xCB: 0x41; 0xCC: 0x42; 0xCD: 0x43; } recolour_sprite { 0xC6: 0x3D; 0xC7: 0x3E; 0xC8: 0x3F; 0xC9: 0x40; 0xCA: 0x41; 0xCB: 0x42; 0xCC: 0x43; 0xCD: 0x33; } recolour_sprite { 0xC6: 0x3E; 0xC7: 0x3F; 0xC8: 0x40; 0xC9: 0x41; 0xCA: 0x42; 0xCB: 0x43; 0xCC: 0x33; 0xCD: 0x34; } recolour_sprite { 0xC6: 0x3F; 0xC7: 0x40; 0xC8: 0x41; 0xC9: 0x42; 0xCA: 0x43; 0xCB: 0x33; 0xCC: 0x34; 0xCD: 0x45; } recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x43; 0xCA: 0x33; 0xCB: 0x34; 0xCC: 0x45; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x44; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x45; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x46 Red recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x46; 0xCA: 0x47; 0xCB: 0x48; 0xCC: 0x49; 0xCD: 0x4A; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x46; 0xC9: 0x47; 0xCA: 0x48; 0xCB: 0x49; 0xCC: 0x4A; 0xCD: 0x4B; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x46; 0xC8: 0x47; 0xC9: 0x48; 0xCA: 0x49; 0xCB: 0x4A; 0xCC: 0x4B; 0xCD: 0x4C; } // TODO recolour_sprite { 0xC6: 0x46; 0xC7: 0x47; 0xC8: 0x48; 0xC9: 0x49; 0xCA: 0x4A; 0xCB: 0x4B; 0xCC: 0x4C; 0xCD: 0x4D; } recolour_sprite { 0xC6: 0x47; 0xC7: 0x48; 0xC8: 0x49; 0xC9: 0x4A; 0xCA: 0x4B; 0xCB: 0x4C; 0xCC: 0x4D; 0xCD: 0x4E; } recolour_sprite { 0xC6: 0x48; 0xC7: 0x49; 0xC8: 0x4A; 0xC9: 0x4B; 0xCA: 0x4C; 0xCB: 0x4D; 0xCC: 0x4E; 0xCD: 0x4F; } recolour_sprite { 0xC6: 0x49; 0xC7: 0x4A; 0xC8: 0x4B; 0xC9: 0x4C; 0xCA: 0x4D; 0xCB: 0x4E; 0xCC: 0x4F; 0xCD: 0x78; } recolour_sprite { 0xC6: 0x4A; 0xC7: 0x4B; 0xC8: 0x4C; 0xC9: 0x4D; 0xCA: 0x4E; 0xCB: 0x4F; 0xCC: 0x78; 0xCD: 0x79; } recolour_sprite { 0xC6: 0x4B; 0xC7: 0x4C; 0xC8: 0x4D; 0xC9: 0x4E; 0xCA: 0x4E; 0xCB: 0x78; 0xCC: 0x79; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x4C; 0xC7: 0x4D; 0xC8: 0x4E; 0xC9: 0x4F; 0xCA: 0x78; 0xCB: 0x79; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x50 Grass green recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x50; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x51; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x52; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x50; 0xC7: 0x51; 0xC8: 0x52; 0xC9: 0x53; 0xCA: 0x54; 0xCB: 0x55; 0xCC: 0x56; 0xCD: 0x57; } recolour_sprite { 0xC6: 0x51; 0xC7: 0x52; 0xC8: 0x53; 0xC9: 0x54; 0xCA: 0x55; 0xCB: 0x56; 0xCC: 0x57; 0xCD: 0xD0; } recolour_sprite { 0xC6: 0x52; 0xC7: 0x53; 0xC8: 0x54; 0xC9: 0x55; 0xCA: 0x56; 0xCB: 0x57; 0xCC: 0xD0; 0xCD: 0xD1; } recolour_sprite { 0xC6: 0x53; 0xC7: 0x54; 0xC8: 0x55; 0xC9: 0x56; 0xCA: 0x00; 0xCB: 0xD0; 0xCC: 0xD1; 0xCD: 0x67; } recolour_sprite { 0xC6: 0x54; 0xC7: 0x55; 0xC8: 0x56; 0xC9: 0x57; 0xCA: 0xD0; 0xCB: 0xD1; 0xCC: 0x67; 0xCD: 0x0E; } // 0x58 Fern green recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x58; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x59; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x68; 0xC7: 0x58; 0xC8: 0x59; 0xC9: 0x5A; 0xCA: 0x5B; 0xCB: 0x5C; 0xCC: 0x5D; 0xCD: 0x5E; } recolour_sprite { 0xC6: 0x58; 0xC7: 0x59; 0xC8: 0x5A; 0xC9: 0x5B; 0xCA: 0x5C; 0xCB: 0x5D; 0xCC: 0x5E; 0xCD: 0x5F; } recolour_sprite { 0xC6: 0x59; 0xC7: 0x5A; 0xC8: 0x5B; 0xC9: 0x5C; 0xCA: 0x5D; 0xCB: 0x5E; 0xCC: 0x5F; 0xCD: 0x67; } recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x5D; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x5E; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x5F; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x60 Reseda green recolour_sprite { 0xC6: 0x01; 0xC7: 0x68; 0xC8: 0x18; 0xC9: 0x60; 0xCA: 0x61; 0xCB: 0x62; 0xCC: 0x63; 0xCD: 0x64; } recolour_sprite { 0xC6: 0x68; 0xC7: 0x18; 0xC8: 0x60; 0xC9: 0x61; 0xCA: 0x62; 0xCB: 0x63; 0xCC: 0x64; 0xCD: 0x65; } recolour_sprite { 0xC6: 0x18; 0xC7: 0x60; 0xC8: 0x61; 0xC9: 0x62; 0xCA: 0x63; 0xCB: 0x64; 0xCC: 0x65; 0xCD: 0x66; } recolour_sprite { 0xC6: 0x60; 0xC7: 0x61; 0xC8: 0x62; 0xC9: 0x63; 0xCA: 0x64; 0xCB: 0x65; 0xCC: 0x66; 0xCD: 0x67; } recolour_sprite { 0xC6: 0x61; 0xC7: 0x62; 0xC8: 0x63; 0xC9: 0x64; 0xCA: 0x65; 0xCB: 0x66; 0xCC: 0x67; 0xCD: 0x0D; } recolour_sprite { 0xC6: 0x62; 0xC7: 0x63; 0xC8: 0x64; 0xC9: 0x65; 0xCA: 0x66; 0xCB: 0x67; 0xCC: 0x0D; 0xCD: 0x0E; } recolour_sprite { 0xC6: 0x63; 0xC7: 0x64; 0xC8: 0x65; 0xC9: 0x66; 0xCA: 0x67; 0xCB: 0x0D; 0xCC: 0x0E; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x64; 0xC7: 0x65; 0xC8: 0x66; 0xC9: 0x67; 0xCA: 0x0D; 0xCB: 0x0E; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x68 Clay brown recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x01; 0xC9: 0x68; 0xCA: 0x69; 0xCB: 0x6A; 0xCC: 0x6B; 0xCD: 0x6C; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x68; 0xC9: 0x69; 0xCA: 0x6A; 0xCB: 0x6B; 0xCC: 0x6C; 0xCD: 0x6D; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x68; 0xC8: 0x69; 0xC9: 0x6A; 0xCA: 0x6B; 0xCB: 0x6C; 0xCC: 0x6D; 0xCD: 0x6E; } recolour_sprite { 0xC6: 0x68; 0xC7: 0x69; 0xC8: 0x6A; 0xC9: 0x6B; 0xCA: 0x6C; 0xCB: 0x6D; 0xCC: 0x6E; 0xCD: 0x6F; } recolour_sprite { 0xC6: 0x69; 0xC7: 0x6A; 0xC8: 0x6B; 0xC9: 0x6C; 0xCA: 0x6D; 0xCB: 0x6E; 0xCC: 0x6F; 0xCD: 0x25; } recolour_sprite { 0xC6: 0x6A; 0xC7: 0x6B; 0xC8: 0x6C; 0xC9: 0x6D; 0xCA: 0x6E; 0xCB: 0x6F; 0xCC: 0x25; 0xCD: 0x26; } recolour_sprite { 0xC6: 0x6B; 0xC7: 0x6C; 0xC8: 0x6D; 0xC9: 0x6E; 0xCA: 0x6F; 0xCB: 0x25; 0xCC: 0x26; 0xCD: 0x27; } recolour_sprite { 0xC6: 0x6C; 0xC7: 0x6D; 0xC8: 0x6E; 0xC9: 0x6F; 0xCA: 0x25; 0xCB: 0x26; 0xCC: 0x27; 0xCD: 0x45; } // 0x70 Orange brown recolour_sprite { 0xC6: 0x01; 0xC7: 0x68; 0xC8: 0x69; 0xC9: 0x70; 0xCA: 0x71; 0xCB: 0x72; 0xCC: 0x73; 0xCD: 0x74; } recolour_sprite { 0xC6: 0x68; 0xC7: 0x69; 0xC8: 0x70; 0xC9: 0x71; 0xCA: 0x72; 0xCB: 0x73; 0xCC: 0x74; 0xCD: 0x75; } recolour_sprite { 0xC6: 0x69; 0xC7: 0x70; 0xC8: 0x71; 0xC9: 0x72; 0xCA: 0x73; 0xCB: 0x74; 0xCC: 0x75; 0xCD: 0x76; } recolour_sprite { 0xC6: 0x70; 0xC7: 0x71; 0xC8: 0x72; 0xC9: 0x73; 0xCA: 0x74; 0xCB: 0x75; 0xCC: 0x76; 0xCD: 0x77; } recolour_sprite { 0xC6: 0x71; 0xC7: 0x72; 0xC8: 0x73; 0xC9: 0x74; 0xCA: 0x75; 0xCB: 0x76; 0xCC: 0x77; 0xCD: 0x78; } recolour_sprite { 0xC6: 0x72; 0xC7: 0x73; 0xC8: 0x74; 0xC9: 0x75; 0xCA: 0x76; 0xCB: 0x77; 0xCC: 0x78; 0xCD: 0x79; } recolour_sprite { 0xC6: 0x73; 0xC7: 0x74; 0xC8: 0x75; 0xC9: 0x76; 0xCA: 0x77; 0xCB: 0x78; 0xCC: 0x79; 0xCD: 0xA8; } recolour_sprite { 0xC6: 0x74; 0xC7: 0x75; 0xC8: 0x76; 0xC9: 0x77; 0xCA: 0x78; 0xCB: 0x79; 0xCC: 0xA8; 0xCD: 0xA9; } recolour_sprite { 0xC6: 0x75; 0xC7: 0x76; 0xC8: 0x77; 0xC9: 0x78; 0xCA: 0x79; 0xCB: 0xA8; 0xCC: 0xA9; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x76; 0xC7: 0x77; 0xC8: 0x78; 0xC9: 0x79; 0xCA: 0xA8; 0xCB: 0xA9; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x7A Oxide red recolour_sprite { 0xC6: 0x01; 0xC7: 0x46; 0xC8: 0x47; 0xC9: 0x7A; 0xCA: 0x7A; 0xCB: 0x7B; 0xCC: 0x7C; 0xCD: 0x7D; } recolour_sprite { 0xC6: 0x46; 0xC7: 0x47; 0xC8: 0x7A; 0xC9: 0x7B; 0xCA: 0x7C; 0xCB: 0x7D; 0xCC: 0x7E; 0xCD: 0x7F; } recolour_sprite { 0xC6: 0x47; 0xC7: 0x7A; 0xC8: 0x7B; 0xC9: 0x7C; 0xCA: 0x7D; 0xCB: 0x7E; 0xCC: 0x7F; 0xCD: 0x4F; } recolour_sprite { 0xC6: 0x7A; 0xC7: 0x7B; 0xC8: 0x7C; 0xC9: 0x7D; 0xCA: 0x7E; 0xCB: 0x7F; 0xCC: 0x4F; 0xCD: 0x78; } recolour_sprite { 0xC6: 0x7B; 0xC7: 0x7C; 0xC8: 0x7D; 0xC9: 0x7E; 0xCA: 0x7F; 0xCB: 0x4F; 0xCC: 0x78; 0xCD: 0x79; } recolour_sprite { 0xC6: 0x7C; 0xC7: 0x7D; 0xC8: 0x7E; 0xC9: 0x7F; 0xCA: 0x4F; 0xCB: 0x78; 0xCC: 0x79; 0xCD: 0x27; } // 0x80 Distant blue recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x80; 0xCA: 0x81; 0xCB: 0x82; 0xCC: 0x83; 0xCD: 0x84; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x80; 0xC9: 0x81; 0xCA: 0x82; 0xCB: 0x83; 0xCC: 0x84; 0xCD: 0x85; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x80; 0xC8: 0x81; 0xC9: 0x82; 0xCA: 0x83; 0xCB: 0x84; 0xCC: 0x85; 0xCD: 0x86; } // TODO recolour_sprite { 0xC6: 0x80; 0xC7: 0x81; 0xC8: 0x82; 0xC9: 0x83; 0xCA: 0x84; 0xCB: 0x85; 0xCC: 0x86; 0xCD: 0x87; } recolour_sprite { 0xC6: 0x81; 0xC7: 0x82; 0xC8: 0x83; 0xC9: 0x84; 0xCA: 0x85; 0xCB: 0x86; 0xCC: 0x87; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x82; 0xC7: 0x83; 0xC8: 0x84; 0xC9: 0x85; 0xCA: 0x86; 0xCB: 0x87; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x83; 0xC7: 0x84; 0xC8: 0x85; 0xC9: 0x86; 0xCA: 0x87; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x84; 0xC7: 0x85; 0xC8: 0x86; 0xC9: 0x87; 0xCA: 0x0F; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x88 Violet recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x88; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x89; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x8A; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x88; 0xC7: 0x89; 0xC8: 0x8A; 0xC9: 0x8B; 0xCA: 0x8C; 0xCB: 0x8D; 0xCC: 0x8E; 0xCD: 0x8F; } recolour_sprite { 0xC6: 0x89; 0xC7: 0x8A; 0xC8: 0x8B; 0xC9: 0x8C; 0xCA: 0x8D; 0xCB: 0x8E; 0xCC: 0x8F; 0xCD: 0xB0; } recolour_sprite { 0xC6: 0x8A; 0xC7: 0x8B; 0xC8: 0x8C; 0xC9: 0x8D; 0xCA: 0x8E; 0xCB: 0x8F; 0xCC: 0xB0; 0xCD: 0xB1; } recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x8E; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0x8F; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0x90 Blue recolour_sprite { 0xC6: 0x01; 0xC7: 0x02; 0xC8: 0xC6; 0xC9: 0x90; 0xCA: 0x91; 0xCB: 0x92; 0xCC: 0x93; 0xCD: 0x94; } recolour_sprite { 0xC6: 0x02; 0xC7: 0xC6; 0xC8: 0x90; 0xC9: 0x91; 0xCA: 0x92; 0xCB: 0x93; 0xCC: 0x94; 0xCD: 0x95; } recolour_sprite { 0xC6: 0xC6; 0xC7: 0x90; 0xC8: 0x91; 0xC9: 0x92; 0xCA: 0x93; 0xCB: 0x94; 0xCC: 0x95; 0xCD: 0x96; } recolour_sprite { 0xC6: 0x90; 0xC7: 0x91; 0xC8: 0x92; 0xC9: 0x93; 0xCA: 0x94; 0xCB: 0x95; 0xCC: 0x96; 0xCD: 0x97; } recolour_sprite { 0xC6: 0x91; 0xC7: 0x92; 0xC8: 0x93; 0xC9: 0x94; 0xCA: 0x95; 0xCB: 0x96; 0xCC: 0x97; 0xCD: 0x98; } recolour_sprite { 0xC6: 0x92; 0xC7: 0x93; 0xC8: 0x94; 0xC9: 0x95; 0xCA: 0x96; 0xCB: 0x97; 0xCC: 0x98; 0xCD: 0x99; } recolour_sprite { 0xC6: 0x93; 0xC7: 0x94; 0xC8: 0x95; 0xC9: 0x96; 0xCA: 0x97; 0xCB: 0x98; 0xCC: 0x99; 0xCD: 0xA1; } recolour_sprite { 0xC6: 0x94; 0xC7: 0x95; 0xC8: 0x96; 0xC9: 0x97; 0xCA: 0x98; 0xCB: 0x99; 0xCC: 0xA1; 0xCD: 0xD2; } recolour_sprite { 0xC6: 0x95; 0xC7: 0x96; 0xC8: 0x97; 0xC9: 0x98; 0xCA: 0x99; 0xCB: 0xA1; 0xCC: 0xD2; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x96; 0xC7: 0x97; 0xC8: 0x98; 0xC9: 0x99; 0xCA: 0xA1; 0xCB: 0xD2; 0xCC: 0x0F; 0xCD: 0x0F; } // 0x9A Azure blue recolour_sprite { 0xC6: 0x02; 0xC7: 0x80; 0xC8: 0x81; 0xC9: 0x9A; 0xCA: 0x9B; 0xCB: 0x9C; 0xCC: 0x9D; 0xCD: 0x9E; } recolour_sprite { 0xC6: 0x80; 0xC7: 0x81; 0xC8: 0x9A; 0xC9: 0x9B; 0xCA: 0x9C; 0xCB: 0x9D; 0xCC: 0x9E; 0xCD: 0x9F; } recolour_sprite { 0xC6: 0x81; 0xC7: 0x9A; 0xC8: 0x9B; 0xC9: 0x9C; 0xCA: 0x9D; 0xCB: 0x9E; 0xCC: 0x9F; 0xCD: 0xA0; } recolour_sprite { 0xC6: 0x9A; 0xC7: 0x9B; 0xC8: 0x9C; 0xC9: 0x9D; 0xCA: 0x9E; 0xCB: 0x9F; 0xCC: 0xA0; 0xCD: 0xA1; } recolour_sprite { 0xC6: 0x9B; 0xC7: 0x9C; 0xC8: 0x9D; 0xC9: 0x9E; 0xCA: 0x9F; 0xCB: 0xA0; 0xCC: 0xA1; 0xCD: 0xD2; } recolour_sprite { 0xC6: 0x9C; 0xC7: 0x9D; 0xC8: 0x9E; 0xC9: 0x9F; 0xCA: 0xA0; 0xCB: 0xA1; 0xCC: 0xD2; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x9D; 0xC7: 0x9E; 0xC8: 0x9F; 0xC9: 0xA0; 0xCA: 0xA1; 0xCB: 0xD2; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x9E; 0xC7: 0x9F; 0xC8: 0xA0; 0xC9: 0xA1; 0xCA: 0xD2; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } // 0xA2 Salmon range recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xA2; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xA3; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xA4; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0xA2; 0xC7: 0xA3; 0xC8: 0xA4; 0xC9: 0xA5; 0xCA: 0xA6; 0xCB: 0xA7; 0xCC: 0xA8; 0xCD: 0xA9; } recolour_sprite { 0xC6: 0xA3; 0xC7: 0xA4; 0xC8: 0xA5; 0xC9: 0xA6; 0xCA: 0xA7; 0xCB: 0xA8; 0xCC: 0xA9; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xA7; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xA8; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xA9; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO // 0xAA Pastel violet recolour_sprite { 0xC6: 0xC6; 0xC7: 0x90; 0xC8: 0x88; 0xC9: 0xAA; 0xCA: 0xAB; 0xCB: 0xAC; 0xCC: 0xAD; 0xCD: 0xAE; } recolour_sprite { 0xC6: 0x90; 0xC7: 0x88; 0xC8: 0xAA; 0xC9: 0xAB; 0xCA: 0xAC; 0xCB: 0xAD; 0xCC: 0xAE; 0xCD: 0xAF; } recolour_sprite { 0xC6: 0x88; 0xC7: 0xAA; 0xC8: 0xAB; 0xC9: 0xAC; 0xCA: 0xAD; 0xCB: 0xAE; 0xCC: 0xAF; 0xCD: 0xB0; } recolour_sprite { 0xC6: 0xAA; 0xC7: 0xAB; 0xC8: 0xAC; 0xC9: 0xAD; 0xCA: 0xAE; 0xCB: 0xAF; 0xCC: 0xB0; 0xCD: 0xB1; } recolour_sprite { 0xC6: 0xAB; 0xC7: 0xAC; 0xC8: 0xAD; 0xC9: 0xAE; 0xCA: 0xAF; 0xCB: 0xB0; 0xCC: 0xB1; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0xAC; 0xC7: 0xAD; 0xC8: 0xAE; 0xC9: 0xAF; 0xCA: 0xB0; 0xCB: 0xB1; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0xAD; 0xC7: 0xAE; 0xC8: 0xAF; 0xC9: 0xB0; 0xCA: 0xB1; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0xAE; 0xC7: 0xAF; 0xC8: 0xB0; 0xC9: 0xB1; 0xCA: 0x0F; 0xCB: 0x0F; 0xCC: 0x0F; 0xCD: 0x0F; } // 0xB2 Red-orange recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x46; 0xC9: 0xB2; 0xCA: 0xB3; 0xCB: 0xB4; 0xCC: 0xB5; 0xCD: 0xB6; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x46; 0xC8: 0xB2; 0xC9: 0xB3; 0xCA: 0xB4; 0xCB: 0xB5; 0xCC: 0xB6; 0xCD: 0xB7; } recolour_sprite { 0xC6: 0x46; 0xC7: 0xB2; 0xC8: 0xB3; 0xC9: 0xB4; 0xCA: 0xB5; 0xCB: 0xB6; 0xCC: 0xB7; 0xCD: 0xA4; } recolour_sprite { 0xC6: 0xB2; 0xC7: 0xB3; 0xC8: 0xB4; 0xC9: 0xB5; 0xCA: 0xB6; 0xCB: 0xB7; 0xCC: 0xA4; 0xCD: 0xA5; } recolour_sprite { 0xC6: 0xB3; 0xC7: 0xB4; 0xC8: 0xB5; 0xC9: 0xB6; 0xCA: 0xB7; 0xCB: 0xA4; 0xCC: 0xA5; 0xCD: 0xA6; } recolour_sprite { 0xC6: 0xB4; 0xC7: 0xB5; 0xC8: 0xB6; 0xC9: 0xB7; 0xCA: 0xA4; 0xCB: 0xA5; 0xCC: 0xA6; 0xCD: 0xA7; } recolour_sprite { 0xC6: 0xB5; 0xC7: 0xB6; 0xC8: 0xB7; 0xC9: 0xB8; 0xCA: 0xB9; 0xCB: 0xBA; 0xCC: 0xBB; 0xCD: 0xBC; } recolour_sprite { 0xC6: 0xB6; 0xC7: 0xB7; 0xC8: 0xB8; 0xC9: 0xB9; 0xCA: 0xBA; 0xCB: 0xBB; 0xCC: 0xBC; 0xCD: 0xBD; } recolour_sprite { 0xC6: 0xB7; 0xC7: 0xB8; 0xC8: 0xB9; 0xC9: 0xBA; 0xCA: 0xBB; 0xCB: 0xBC; 0xCC: 0xBD; 0xCD: 0xBE; } recolour_sprite { 0xC6: 0xB8; 0xC7: 0xB9; 0xC8: 0xBA; 0xC9: 0xBB; 0xCA: 0xBC; 0xCB: 0xBD; 0xCC: 0xBE; 0xCD: 0xBF; } recolour_sprite { 0xC6: 0xB9; 0xC7: 0xBA; 0xC8: 0xBB; 0xC9: 0xBC; 0xCA: 0xBD; 0xCB: 0xBE; 0xCC: 0xBF; 0xCD: 0x34; } recolour_sprite { 0xC6: 0xBA; 0xC7: 0xBB; 0xC8: 0xBC; 0xC9: 0xBD; 0xCA: 0xBE; 0xCB: 0xBF; 0xCC: 0x34; 0xCD: 0x45; } recolour_sprite { 0xC6: 0xBB; 0xC7: 0xBC; 0xC8: 0xBD; 0xC9: 0xBE; 0xCA: 0xBF; 0xCB: 0x34; 0xCC: 0x45; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0xBC; 0xC7: 0xBD; 0xC8: 0xBE; 0xC9: 0xBF; 0xCA: 0x34; 0xCB: 0x45; 0xCC: 0x0F; 0xCD: 0x0F; } // 0xC0 Melon yellow recolour_sprite { 0xC6: 0x3E; 0xC7: 0x3F; 0xC8: 0x40; 0xC9: 0xC0; 0xCA: 0xC1; 0xCB: 0xC2; 0xCC: 0xC3; 0xCD: 0xC4; } recolour_sprite { 0xC6: 0x3F; 0xC7: 0x40; 0xC8: 0xC0; 0xC9: 0xC1; 0xCA: 0xC2; 0xCB: 0xC3; 0xCC: 0xC4; 0xCD: 0xC5; } recolour_sprite { 0xC6: 0x40; 0xC7: 0xC0; 0xC8: 0xC1; 0xC9: 0xC2; 0xCA: 0xC3; 0xCB: 0xC4; 0xCC: 0xC5; 0xCD: 0x27; } recolour_sprite { 0xC6: 0xC0; 0xC7: 0xC1; 0xC8: 0xC2; 0xC9: 0xC3; 0xCA: 0xC4; 0xCB: 0xC5; 0xCC: 0x27; 0xCD: 0x45; } recolour_sprite { 0xC6: 0xC1; 0xC7: 0xC2; 0xC8: 0xC3; 0xC9: 0xC4; 0xCA: 0xC5; 0xCB: 0x27; 0xCC: 0x45; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0xC2; 0xC7: 0xC3; 0xC8: 0xC4; 0xC9: 0xC5; 0xCA: 0x27; 0xCB: 0x45; 0xCC: 0x0F; 0xCD: 0x0F; } // 0xC6 Company colours recolour_sprite { 0xC6: 0x01; 0xC7: 0x01; 0xC8: 0x02; 0xC9: 0xC6; 0xCA: 0xC7; 0xCB: 0xC8; 0xCC: 0xC9; 0xCD: 0xCA; } recolour_sprite { 0xC6: 0x01; 0xC7: 0x02; 0xC8: 0xC6; 0xC9: 0xC7; 0xCA: 0xC8; 0xCB: 0xC9; 0xCC: 0xCA; 0xCD: 0xCB; } recolour_sprite { 0xC6: 0x02; 0xC7: 0xC6; 0xC8: 0xC7; 0xC9: 0xC8; 0xCA: 0xC9; 0xCB: 0xCA; 0xCC: 0xCB; 0xCD: 0xCC; } recolour_sprite { 0xC6: 0xC6; 0xC7: 0xC7; 0xC8: 0xC8; 0xC9: 0xC9; 0xCA: 0xCA; 0xCB: 0xCB; 0xCC: 0xCC; 0xCD: 0xCD; } recolour_sprite { 0xC6: 0xC7; 0xC7: 0xC8; 0xC8: 0xC9; 0xC9: 0xCA; 0xCA: 0xCB; 0xCB: 0xCC; 0xCC: 0xCD; 0xCD: 0x98; } recolour_sprite { 0xC6: 0xC8; 0xC7: 0xC9; 0xC8: 0xCA; 0xC9: 0xCB; 0xCA: 0xCC; 0xCB: 0xCD; 0xCC: 0x98; 0xCD: 0x99; } recolour_sprite { 0xC6: 0xC9; 0xC7: 0xCA; 0xC8: 0xCB; 0xC9: 0xCC; 0xCA: 0xCD; 0xCB: 0x98; 0xCC: 0x99; 0xCD: 0xA1; } recolour_sprite { 0xC6: 0xCA; 0xC7: 0xCB; 0xC8: 0xCC; 0xC9: 0xCD; 0xCA: 0x98; 0xCB: 0x99; 0xCC: 0xA1; 0xCD: 0xD2; } // 0xCE Yellow green recolour_sprite { 0xC6: 0x53; 0xC7: 0x54; 0xC8: 0x55; 0xC9: 0xCE; 0xCA: 0xCF; 0xCB: 0xD0; 0xCC: 0xD1; 0xCD: 0x67; } recolour_sprite { 0xC6: 0x54; 0xC7: 0x55; 0xC8: 0xCE; 0xC9: 0xCF; 0xCA: 0xD0; 0xCB: 0xD1; 0xCC: 0x67; 0xCD: 0x0E; } recolour_sprite { 0xC6: 0x55; 0xC7: 0xCE; 0xC8: 0xCF; 0xC9: 0xD0; 0xCA: 0xD1; 0xCB: 0x67; 0xCC: 0x0E; 0xCD: 0x0F; } recolour_sprite { 0xC6: 0xCE; 0xC7: 0xCF; 0xC8: 0xD0; 0xC9: 0xD1; 0xCA: 0x67; 0xCB: 0x0E; 0xCC: 0x0F; 0xCD: 0x0F; } // 0xD2 recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xD2; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xD3; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xD4; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xD5; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO recolour_sprite { 0xC6: 0x00; 0xC7: 0x00; 0xC8: 0x00; 0xC9: 0xD6; 0xCA: 0x00; 0xCB: 0x00; 0xCC: 0x00; 0xCD: 0x00; } // TODO } dir_cc = reserve_sprites(16); replace(dir_cc) { recolour_sprite { 0xEF: 0x0A; 0xF0: 0x0A; 0xF1: 0x4A; 0xF2: 0x4A; 0xF3: 0x0A; 0xF4: 0x0A; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0x0B; 0xF1: 0x4B; 0xF2: 0x4B; 0xF3: 0x0B; 0xF4: 0x0B; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0x0B; 0xF1: 0x4B; 0xF2: 0x4B; 0xF3: 0x0B; 0xF4: 0x0B; } recolour_sprite { 0xEF: 0x09; 0xF0: 0x09; 0xF1: 0x49; 0xF2: 0x49; 0xF3: 0x09; 0xF4: 0x09; } recolour_sprite { 0xEF: 0x0A; 0xF0: 0x0A; 0xF1: 0x4A; 0xF2: 0x4A; 0xF3: 0x0A; 0xF4: 0x0A; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0x0B; 0xF1: 0x4B; 0xF2: 0x4B; 0xF3: 0x0B; 0xF4: 0x0B; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0x0B; 0xF1: 0x4B; 0xF2: 0x4B; 0xF3: 0x0B; 0xF4: 0x0B; } recolour_sprite { 0xEF: 0x09; 0xF0: 0x09; 0xF1: 0x49; 0xF2: 0x49; 0xF3: 0x09; 0xF4: 0x09; } recolour_sprite { 0xEF: 0x0A; 0xF0: 0xB4; 0xF1: 0x4A; 0xF2: 0x33; 0xF3: 0x0A; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0xB4; 0xF1: 0x4B; 0xF2: 0x33; 0xF3: 0x0B; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0xB4; 0xF1: 0x4B; 0xF2: 0x33; 0xF3: 0x0B; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x09; 0xF0: 0xB4; 0xF1: 0x49; 0xF2: 0x33; 0xF3: 0x09; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x0A; 0xF0: 0xB4; 0xF1: 0x4A; 0xF2: 0x33; 0xF3: 0x0A; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0xB4; 0xF1: 0x4B; 0xF2: 0x33; 0xF3: 0x0B; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x0B; 0xF0: 0xB4; 0xF1: 0x4B; 0xF2: 0x33; 0xF3: 0x0B; 0xF4: 0x44; } recolour_sprite { 0xEF: 0x09; 0xF0: 0xB4; 0xF1: 0x49; 0xF2: 0x33; 0xF3: 0x09; 0xF4: 0x44; } } vl11_cc = reserve_sprites(7); replace(vl11_cc) { recolour_sprite { 0x51: 0x51; 0x52: 0x52; 0x53: 0x53; 0x54: 0x54; 0x55: 0x55; 0x56: 0x56; 0x18: 0x18; 0x58: 0x58; 0x59: 0x59; 0x5A: 0x5A; 0x5B: 0x5B; 0x3F: 0x3F; 0x40: 0x40; 0xC0: 0xC0; 0xB9: 0xB9; 0xBA: 0xBA; 0xBB: 0xBB; } recolour_sprite { 0x51: 0x51; 0x52: 0x52; 0x53: 0x53; 0x54: 0x54; 0x55: 0x55; 0x56: 0x56; 0x18: 0x51; 0x58: 0x52; 0x59: 0x53; 0x5A: 0x54; 0x5B: 0x55; 0x3F: 0x3F; 0x40: 0x40; 0xC0: 0xC0; 0xB9: 0xB9; 0xBA: 0xBA; 0xBB: 0xBB; } recolour_sprite { 0x51: 0x18; 0x52: 0x58; 0x53: 0x59; 0x54: 0x5A; 0x55: 0x5B; 0x56: 0x5C; 0x18: 0x18; 0x58: 0x58; 0x59: 0x59; 0x5A: 0x5A; 0x5B: 0x5B; 0x3F: 0x3F; 0x40: 0x40; 0xC0: 0xC0; 0xB9: 0xB9; 0xBA: 0xBA; 0xBB: 0xBB; } recolour_sprite { 0x51: 0x9B; 0x52: 0x9C; 0x53: 0x9D; 0x54: 0x9E; 0x55: 0x9F; 0x56: 0xA0; 0x18: 0x9B; 0x58: 0x9C; 0x59: 0x9D; 0x5A: 0x9E; 0x5B: 0x9F; 0x3F: 0x3F; 0x40: 0x40; 0xC0: 0xC0; 0xB9: 0xB9; 0xBA: 0xBA; 0xBB: 0xBB; } recolour_sprite { 0x51: 0x9B; 0x52: 0x9C; 0x53: 0x9D; 0x54: 0x9E; 0x55: 0x9F; 0x56: 0xA0; 0x18: 0x9B; 0x58: 0x9C; 0x59: 0x9D; 0x5A: 0x9E; 0x5B: 0x9F; 0x3F: 0xA2; 0x40: 0xA3; 0xC0: 0xA4; 0xB9: 0xB5; 0xBA: 0xB6; 0xBB: 0xB7; } recolour_sprite { 0x51: 0x60; 0x52: 0x61; 0x53: 0x62; 0x54: 0x63; 0x55: 0x64; 0x56: 0x65; 0x18: 0x60; 0x58: 0x61; 0x59: 0x62; 0x5A: 0x63; 0x5B: 0x64; 0x3F: 0x3F; 0x40: 0x40; 0xC0: 0xC0; 0xB9: 0xB9; 0xBA: 0xBA; 0xBB: 0xBB; } recolour_sprite { 0x51: 0x60; 0x52: 0x61; 0x53: 0x62; 0x54: 0x63; 0x55: 0x64; 0x56: 0x65; 0x18: 0x60; 0x58: 0x61; 0x59: 0x62; 0x5A: 0x63; 0x5B: 0x64; 0x3F: 0xA2; 0x40: 0xA3; 0xC0: 0xA4; 0xB9: 0xB5; 0xBA: 0xB6; 0xBB: 0xB7; } } ttd_cc2 = reserve_sprites(24); replace(ttd_cc2) { recolour_sprite { 0xC6: 0x01; 0xC7: 0x02; 0xC8: 0x03; 0xC9: 0x04; 0xCA: 0x05; 0xCB: 0x06; 0xCC: 0x07; 0xCD: 0x08; 0x50: 0x07; 0x51: 0x08; 0x52: 0x09; 0x53: 0x0A; 0x54: 0x0B; 0x55: 0x0C; 0x56: 0x0D; 0x57: 0x0E; } // 6006 9006 // 04 0A recolour_sprite { 0xC6: 0x03; 0xC7: 0x04; 0xC8: 0x05; 0xC9: 0x06; 0xCA: 0x07; 0xCB: 0x08; 0xCC: 0x09; 0xCD: 0x0A; 0x50: 0x03; 0x51: 0x04; 0x52: 0x05; 0x53: 0x06; 0x54: 0x07; 0x55: 0x08; 0x56: 0x09; 0x57: 0x0A; } // 7012 7012 // 06 06 recolour_sprite { 0xC6: 0x01; 0xC7: 0x02; 0xC8: 0x03; 0xC9: 0x10; 0xCA: 0x11; 0xCB: 0x12; 0xCC: 0x13; 0xCD: 0x14; 0x50: 0x23; 0x51: 0x24; 0x52: 0x25; 0x53: 0x26; 0x54: 0x27; 0x55: 0x45; 0x56: 0xA9; 0x57: 0x0F; } // 5008 1001 // 10 26 recolour_sprite { 0xC6: 0x50; 0xC7: 0x51; 0xC8: 0x52; 0xC9: 0x53; 0xCA: 0x54; 0xCB: 0x55; 0xCC: 0x56; 0xCD: 0x57; 0x50: 0x01; 0x51: 0x02; 0x52: 0x03; 0x53: 0x04; 0x54: 0x05; 0x55: 0x06; 0x56: 0x07; 0x57: 0x08; } // 6002 6006 // 53 04 recolour_sprite { 0xC6: 0x18; 0xC7: 0x60; 0xC8: 0x61; 0xC9: 0x62; 0xCA: 0x63; 0xCB: 0x64; 0xCC: 0x65; 0xCD: 0x66; 0x50: 0x23; 0x51: 0x24; 0x52: 0x25; 0x53: 0x26; 0x54: 0x27; 0x55: 0x45; 0x56: 0xA9; 0x57: 0x0F; } // 6028 1001 // 62 26 recolour_sprite { 0xC6: 0x60; 0xC7: 0x61; 0xC8: 0x62; 0xC9: 0x63; 0xCA: 0x64; 0xCB: 0x65; 0xCC: 0x66; 0xCD: 0x67; 0x50: 0x60; 0x51: 0x61; 0x52: 0x62; 0x53: 0x63; 0x54: 0x64; 0x55: 0x65; 0x56: 0x66; 0x57: 0x67; } // 7009 7009 // 63 63 recolour_sprite { 0xC6: 0x61; 0xC7: 0x62; 0xC8: 0x63; 0xC9: 0x64; 0xCA: 0x65; 0xCB: 0x66; 0xCC: 0x67; 0xCD: 0x0D; 0x50: 0x01; 0x51: 0x02; 0x52: 0x03; 0x53: 0x04; 0x54: 0x05; 0x55: 0x06; 0x56: 0x07; 0x57: 0x08; } // 6011 6006 // 64 04 recolour_sprite { 0xC6: 0x90; 0xC7: 0x91; 0xC8: 0x92; 0xC9: 0x93; 0xCA: 0x94; 0xCB: 0x95; 0xCC: 0x96; 0xCD: 0x97; 0x50: 0x12; 0x51: 0x13; 0x52: 0x14; 0x53: 0x15; 0x54: 0x16; 0x55: 0x17; 0x56: 0x0D; 0x57: 0x0E; } // 5017 7040 // 93 15 recolour_sprite { 0xC6: 0x93; 0xC7: 0x94; 0xC8: 0x95; 0xC9: 0x96; 0xCA: 0x97; 0xCB: 0x98; 0xCC: 0x99; 0xCD: 0xD3; 0x50: 0x01; 0x51: 0x02; 0x52: 0x03; 0x53: 0x04; 0x54: 0x05; 0x55: 0x06; 0x56: 0x07; 0x57: 0x08; } // 5012 6006 // 96 04 recolour_sprite { 0xC6: 0x80; 0xC7: 0x9A; 0xC8: 0x9B; 0xC9: 0x9C; 0xCA: 0x9D; 0xCB: 0x9E; 0xCC: 0x9F; 0xCD: 0xA0; 0x50: 0x80; 0x51: 0x9A; 0x52: 0x9B; 0x53: 0x9C; 0x54: 0x9D; 0x55: 0x9E; 0x56: 0x9F; 0x57: 0xA0; } // 5009 5009 // 9C 9C recolour_sprite { 0xC6: 0x9A; 0xC7: 0x9B; 0xC8: 0x9C; 0xC9: 0x9D; 0xCA: 0x9E; 0xCB: 0x9F; 0xCC: 0xA0; 0xCD: 0xA1; 0x50: 0x01; 0x51: 0x02; 0x52: 0x03; 0x53: 0x10; 0x54: 0x11; 0x55: 0x12; 0x56: 0x13; 0x57: 0x14; } // 5007 5008 // 9D 10 recolour_sprite { 0xC6: 0x46; 0xC7: 0xB2; 0xC8: 0xB3; 0xC9: 0xB4; 0xCA: 0xB5; 0xCB: 0xB6; 0xCC: 0xB7; 0xCD: 0xA4; 0x50: 0x23; 0x51: 0x24; 0x52: 0x25; 0x53: 0x26; 0x54: 0x27; 0x55: 0x45; 0x56: 0xA9; 0x57: 0x0F; } // 3005 1001 // B3 26 recolour_sprite { 0xC6: 0xB5; 0xC7: 0xB6; 0xC8: 0xB7; 0xC9: 0xB8; 0xCA: 0xB9; 0xCB: 0xBA; 0xCC: 0xBB; 0xCD: 0xBC; 0x50: 0x01; 0x51: 0x02; 0x52: 0x03; 0x53: 0x04; 0x54: 0x05; 0x55: 0x06; 0x56: 0x07; 0x57: 0x08; } // 2009 6006 // B9 04 recolour_sprite { 0xC6: 0xB9; 0xC7: 0xBA; 0xC8: 0xBB; 0xC9: 0xBC; 0xCA: 0xBD; 0xCB: 0xBE; 0xCC: 0xBF; 0xCD: 0x34; 0x50: 0x04; 0x51: 0x05; 0x52: 0x06; 0x53: 0x07; 0x54: 0x08; 0x55: 0x09; 0x56: 0x0A; 0x57: 0x0B; } // 1003 7005 // BD 07 recolour_sprite { 0xC6: 0x68; 0xC7: 0x69; 0xC8: 0x18; 0xC9: 0x19; 0xCA: 0x1A; 0xCB: 0x1B; 0xCC: 0x1C; 0xCD: 0x1D; 0x50: 0x68; 0x51: 0x69; 0x52: 0x18; 0x53: 0x19; 0x54: 0x1A; 0x55: 0x1B; 0x56: 0x1C; 0x57: 0x1D; } // 6022 6022 // 19 19 recolour_sprite { 0xC6: 0x68; 0xC7: 0x58; 0xC8: 0x59; 0xC9: 0x5A; 0xCA: 0x5B; 0xCB: 0x5C; 0xCC: 0x5D; 0xCD: 0x5E; 0x50: 0x68; 0x51: 0x58; 0x52: 0x59; 0x53: 0x5A; 0x54: 0x5B; 0x55: 0x5C; 0x56: 0x5D; 0x57: 0x5E; } // 6020 6020 // 5A 5A recolour_sprite { 0xC6: 0x69; 0xC7: 0x18; 0xC8: 0x19; 0xC9: 0x1A; 0xCA: 0x1B; 0xCB: 0x1C; 0xCC: 0x1D; 0xCD: 0x1E; 0x50: 0x12; 0x51: 0x13; 0x52: 0x14; 0x53: 0x15; 0x54: 0x16; 0x55: 0x17; 0x56: 0x0D; 0x57: 0x0E; } // 8028 7040 // 1A 15 - recolour_sprite { 0xC6: 0x21; 0xC7: 0x22; 0xC8: 0x23; 0xC9: 0x24; 0xCA: 0x25; 0xCB: 0x26; 0xCC: 0x27; 0xCD: 0x45; 0x50: 0x21; 0x51: 0x22; 0x52: 0x23; 0x53: 0x24; 0x54: 0x25; 0x55: 0x26; 0x56: 0x27; 0x57: 0x45; } // 1020 1020 // 24 24 - recolour_sprite { 0xC6: 0x02; 0xC7: 0x03; 0xC8: 0x10; 0xC9: 0x11; 0xCA: 0x12; 0xCB: 0x13; 0xCC: 0x14; 0xCD: 0x15; 0x50: 0x02; 0x51: 0x03; 0x52: 0x10; 0x53: 0x11; 0x54: 0x12; 0x55: 0x13; 0x56: 0x14; 0x57: 0x15; } // 7024 7024 // 11 11 - recolour_sprite { 0xC6: 0x18; 0xC7: 0x19; 0xC8: 0x1A; 0xC9: 0x1B; 0xCA: 0x1C; 0xCB: 0x1D; 0xCC: 0x1E; 0xCD: 0x1F; 0x50: 0x18; 0x51: 0x19; 0x52: 0x1A; 0x53: 0x1B; 0x54: 0x1C; 0x55: 0x1D; 0x56: 0x1E; 0x57: 0x1F; } // 8008 8008 // 1B 1B - recolour_sprite { 0xC6: 0x51; 0xC7: 0x52; 0xC8: 0x53; 0xC9: 0x54; 0xCA: 0x55; 0xCB: 0x56; 0xCC: 0x57; 0xCD: 0xD0; 0x50: 0x51; 0x51: 0x52; 0x52: 0x53; 0x53: 0x54; 0x54: 0x55; 0x55: 0x56; 0x56: 0x57; 0x57: 0xD0; } // 6010 6010 // 54 54 - recolour_sprite { 0xC6: 0x58; 0xC7: 0x59; 0xC8: 0x5A; 0xC9: 0x5B; 0xCA: 0x5C; 0xCB: 0x5D; 0xCC: 0x5E; 0xCD: 0x5F; 0x50: 0x06; 0x51: 0x07; 0x52: 0x08; 0x53: 0x09; 0x54: 0x0A; 0x55: 0x0B; 0x56: 0x0C; 0x57: 0x0D; } // 6025 7042 // 5B 09 - recolour_sprite { 0xC6: 0x92; 0xC7: 0x93; 0xC8: 0x94; 0xC9: 0x95; 0xCA: 0x96; 0xCB: 0x97; 0xCC: 0x98; 0xCD: 0x99; 0x50: 0x90; 0x51: 0x91; 0x52: 0x92; 0x53: 0x93; 0x54: 0x94; 0x55: 0x95; 0x56: 0x96; 0x57: 0x97; } // 5015 5017 // 95 93 - recolour_sprite { 0xC6: 0x46; 0xC7: 0xB2; 0xC8: 0xB3; 0xC9: 0xB4; 0xCA: 0xB5; 0xCB: 0xB6; 0xCC: 0xB7; 0xCD: 0xA4; 0x50: 0x46; 0x51: 0xB2; 0x52: 0xB3; 0x53: 0xB4; 0x54: 0xB5; 0x55: 0xB6; 0x56: 0xB7; 0x57: 0xA4; } // 3003 3003 // B4 B4 - } // модельки /// dummy // Спрайт из одного прозрачного пикселя spriteset (dummy_sprites, "src/dummy/empty.png") { dummy_template(0, 0) } // Шаблон для dummy, задаём разный length // Определение dummy item (FEAT_TRAINS, dummy1) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 1; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy2) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 2; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy3) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 3; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy4) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 4; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy5) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 5; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy6) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 6; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy7) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 7; } graphics { default: dummy_sprites; } } item (FEAT_TRAINS, dummy8) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 8; } graphics { default: dummy_sprites; } } /// unit // Шаблон для индивидуализации элементов многоэлементных локомотивов: // тендеров паровозов, вагонов в составе секций emu/dmu, // там, где можно использовать livery_override. // Буква в имени определяет положение элемента по порядку от локомотива (a). /// Определение элементов // Первая позиция: паровозы, emu, dmu item (FEAT_TRAINS, unitb) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 8; } graphics { default: dummy_sprites; } } // Вторая позиция: emu, dmu item (FEAT_TRAINS, unitc) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 8; } graphics { default: dummy_sprites; } } // Третья позиция: emu, dmu item (FEAT_TRAINS, unitd) { property { climates_available: NO_CLIMATE; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); track_type: enable_our_own_tracks ? RLA1 : RAIL; length: 8; } graphics { default: dummy_sprites; } } /// align spriteset (align_3_purchase_sprites, "src/align/s3.png") { s3_purchase_template(0, 0, 10) } spriteset (align_3_sprites, "src/align/s3.png") { s3_template(0, 0, 0) } spriteset (align_3_flipped_sprites, "src/align/s3.png") { s3_template(0, 0, -5) } spriteset (align_4_purchase_sprites, "src/align/s4.png") { s4_purchase_template(0, 0, 8) } spriteset (align_4_sprites, "src/align/s4.png") { s4_template(0, 0, 0) } spriteset (align_4_flipped_sprites, "src/align/s4.png") { s4_template(0, 0, -4) } spriteset (align_5_purchase_sprites, "src/align/s5.png") { s5_purchase_template(0, 0, 6) } spriteset (align_5_sprites, "src/align/s5.png") { s5_template(0, 0, 0) } spriteset (align_5_flipped_sprites, "src/align/s5.png") { s5_template(0, 0, -3) } spriteset (align_6_purchase_sprites, "src/align/s6.png") { s6_purchase_template(0, 0, 4) } spriteset (align_6_sprites, "src/align/s6.png") { s6_template(0, 0, 0) } spriteset (align_6_flipped_sprites, "src/align/s6.png") { s6_template(0, 0, -2) } spriteset (align_7_purchase_sprites, "src/align/s7.png") { s7_purchase_template(0, 0, 2) } spriteset (align_7_sprites, "src/align/s7.png") { s7_template(0, 0, 0) } spriteset (align_7_flipped_sprites, "src/align/s7.png") { s7_template(0, 0, -1) } spriteset (align_8_purchase_sprites, "src/align/s8.png") { s8_purchase_template(0, 0, 0) } spriteset (align_8_sprites, "src/align/s8.png") { s8_template(0, 0, 0) } // no flip spriteset, use the same spriteset (align_8_flipped_sprites, "src/align/s8.png") { s8_template(0, 0, 0) } spriteset (align_9_purchase_sprites, "src/align/s9.png") { s9_purchase_template(0, 0, -2) } spriteset (align_9_sprites, "src/align/s9.png") { s9_template(0, 0, 0) } spriteset (align_9_flipped_sprites, "src/align/s9.png") { s9_template(0, 0, 1) } spriteset (align_10_purchase_sprites, "src/align/s10.png") { s10_purchase_template(0, 0, -4) } spriteset (align_10_sprites, "src/align/s10.png") { s10_template(0, 0, 0) } spriteset (align_10_flipped_sprites, "src/align/s10.png") { s10_template(0, 0, 2) } spriteset (align_11_purchase_sprites, "src/align/s11.png") { s11_purchase_template(0, 0, -6) } spriteset (align_11_sprites, "src/align/s11.png") { s11_template(0, 0, 0) } spriteset (align_11_flipped_sprites, "src/align/s11.png") { s11_template(0, 0, 3) } spriteset (align_12_purchase_sprites, "src/align/s12.png") { s12_purchase_template(0, 0, -8) } spriteset (align_12_sprites, "src/align/s12.png") { s12_template(0, 0, 0) } spriteset (align_12_flipped_sprites, "src/align/s12.png") { s12_template(0, 0, 4) } spriteset (align_13_purchase_sprites, "src/align/s13.png") { s13_purchase_template(0, 0, -10) } spriteset (align_13_sprites, "src/align/s13.png") { s13_template(0, 0, 0) } spriteset (align_13_flipped_sprites, "src/align/s13.png") { s13_template(0, 0, 5) } spriteset (align_14_purchase_sprites, "src/align/s14.png") { s14_purchase_template(0, 0, -12) } spriteset (align_14_sprites, "src/align/s14.png") { s14_template(0, 0, 0) } spriteset (align_14_flipped_sprites, "src/align/s14.png") { s14_template(0, 0, 6) } spriteset (align_15_purchase_sprites, "src/align/s15.png") { s15_purchase_template(0, 0, -14) } spriteset (align_15_sprites, "src/align/s15.png") { s15_template(0, 0, 0) } spriteset (align_15_flipped_sprites, "src/align/s15.png") { s15_template(0, 0, 7) } spriteset (align_16_purchase_sprites, "src/align/s16.png") { s16_purchase_template(0, 0, -16) } spriteset (align_16_sprites, "src/align/s16.png") { s16_template(0, 0, 0) } spriteset (align_16_flipped_sprites, "src/align/s16.png") { s16_template(0, 0, 8) } spriteset (align_17_purchase_sprites, "src/align/s17.png") { s17_purchase_template(0, 0, -18) } spriteset (align_17_sprites, "src/align/s17.png") { s17_template(0, 0, 0) } spriteset (align_17_flipped_sprites, "src/align/s17.png") { s17_template(0, 0, 9) } // Одинаковые свойства для всех размеров // Для размера 3-8 switch (FEAT_TRAINS, SELF, align3_sprites, (var[0xC8, 0, 0xFF] != 0xFD)) { 1: align_3_flipped_sprites; align_3_sprites; } item (FEAT_TRAINS, align3) { property { name: string(STR_ALIGN3_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_FLIP); length: 3; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align3_sprites; purchase: align_3_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); } } switch (FEAT_TRAINS, SELF, align4_sprites, (var[0xC8, 0, 0xFF] != 0xFD)) { 1: align_4_flipped_sprites; align_4_sprites; } item (FEAT_TRAINS, align4) { property { name: string(STR_ALIGN4_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_FLIP); length: 4; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align4_sprites; purchase: align_4_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); } } switch (FEAT_TRAINS, SELF, align5_sprites, (var[0xC8, 0, 0xFF] != 0xFD)) { 1: align_5_flipped_sprites; align_5_sprites; } item (FEAT_TRAINS, align5) { property { name: string(STR_ALIGN5_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_FLIP); length: 5; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align5_sprites; purchase: align_5_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); } } switch (FEAT_TRAINS, SELF, align6_sprites, (var[0xC8, 0, 0xFF] != 0xFD)) { 1: align_6_flipped_sprites; align_6_sprites; } item (FEAT_TRAINS, align6) { property { name: string(STR_ALIGN6_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_FLIP); length: 6; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align6_sprites; purchase: align_6_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); } } switch (FEAT_TRAINS, SELF, align7_sprites, (var[0xC8, 0, 0xFF] != 0xFD)) { 1: align_7_flipped_sprites; align_7_sprites; } item (FEAT_TRAINS, align7) { property { name: string(STR_ALIGN7_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_FLIP); length: 7; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align7_sprites; purchase: align_7_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); } } switch (FEAT_TRAINS, SELF, align8_sprites, (var[0xC8, 0, 0xFF] != 0xFD)) { 1: align_8_flipped_sprites; align_8_sprites; } item (FEAT_TRAINS, align8) { property { name: string(STR_ALIGN8_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_FLIP); length: 8; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align8_sprites; purchase: align_8_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); } } // Для размера 9-16 switch (FEAT_TRAINS, SELF, align9_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_9_sprites; } item (FEAT_TRAINS, align9) { property { name: string(STR_ALIGN9_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 1; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align9_sprites; purchase: align_9_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align10_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_10_sprites; } item (FEAT_TRAINS, align10) { property { name: string(STR_ALIGN10_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 2; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align10_sprites; purchase: align_10_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align11_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_11_sprites; } item (FEAT_TRAINS, align11) { property { name: string(STR_ALIGN11_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 3; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align11_sprites; purchase: align_11_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align12_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_12_sprites; } item (FEAT_TRAINS, align12) { property { name: string(STR_ALIGN12_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 4; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align12_sprites; purchase: align_12_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align13_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_13_sprites; } item (FEAT_TRAINS, align13) { property { name: string(STR_ALIGN13_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 5; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align13_sprites; purchase: align_13_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align14_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_14_sprites; } item (FEAT_TRAINS, align14) { property { name: string(STR_ALIGN14_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 6; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align14_sprites; purchase: align_14_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align15_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_15_sprites; } item (FEAT_TRAINS, align15) { property { name: string(STR_ALIGN15_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 7; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align15_sprites; purchase: align_15_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } switch (FEAT_TRAINS, SELF, align16_sprites, ((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) { 1: dummy_sprites; align_16_sprites; } item (FEAT_TRAINS, align16) { property { name: string(STR_ALIGN16_NAME); misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); length: 8; climates_available: enable_debug_car ? bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND) : NO_CLIMATE; introduction_date: date(0, 1, 1); vehicle_life: 255; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT); model_life: VEHICLE_NEVER_EXPIRES; loading_speed: 10; cost_factor: 1; running_cost_factor: 1; speed: 1 km/h; track_type: enable_our_own_tracks ? RLA1 : RAIL; power: 500 hpM; running_cost_base: RUNNING_COST_DIESEL; cargo_capacity: 10; weight: 25 ton; engine_class: ENGINE_CLASS_DIESEL; tractive_effort_coefficient: 0.11; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: align16_sprites; purchase: align_16_purchase_sprites; additional_text: return string(STR_ALIGN_PURCHASE_HINT); articulated_part: articulated_part_tender; } } // ПС // er200 // Спрайты spriteset (er200_h_purchase_graphics_ico, "src/emu/er200.png") { [0, 0, 100, 18, -40, -13] } spriteset (er200_h_purchase_graphics_noico, "src/emu/er200.png") { [0 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er200_h_purchase_sprites, enable_icons) { 1: er200_h_purchase_graphics_ico; er200_h_purchase_graphics_noico;} spriteset (er200_m_purchase_graphics_ico, "src/emu/er200.png") { [120, 0, 100, 18, -40, -13] } spriteset (er200_m_purchase_graphics_noico, "src/emu/er200.png") { [120 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er200_m_purchase_sprites, enable_icons) { 1: er200_m_purchase_graphics_ico; er200_m_purchase_graphics_noico;} spriteset (er200_c_purchase_graphics_ico, "src/emu/er200.png") { [240, 0, 100, 18, -40, -13] } spriteset (er200_c_purchase_graphics_noico, "src/emu/er200.png") { [240 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er200_c_purchase_sprites, enable_icons) { 1: er200_c_purchase_graphics_ico; er200_c_purchase_graphics_noico;} spriteset (er200_v1_h_notpowered_sprites_left, "src/emu/er200.png") { s15_template(60, 40, 0) } spriteset (er200_v1_h_loading_sprites, "src/emu/er200.png") { s15_template(60, 40 +67, 0) } spriteset (er200_v1_h_traveling_sprites, "src/emu/er200.png") { s15_template(60, 40 +134, 0) } spritegroup er200_v1_h_normal_sprites { loading: er200_v1_h_loading_sprites; loaded: er200_v1_h_traveling_sprites; } spriteset (er200_v1_h_notpowered_sprites_right, "src/emu/er200.png") { s15_template(60 +440, 40, 0) } spriteset (er200_v1_h_r_loading_sprites, "src/emu/er200.png") { s15_template(60 +440, 40 +67, 0) } spriteset (er200_v1_h_r_traveling_sprites, "src/emu/er200.png") { s15_template(60 +440, 40 +134, 0) } spritegroup er200_v1_h_r_normal_sprites { loading: er200_v1_h_r_loading_sprites; loaded: er200_v1_h_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, er200_v1_h_sprites_left, (position_in_consist > 0) || vehicle_is_not_powered || vehicle_is_in_depot) { 0: er200_v1_h_normal_sprites; er200_v1_h_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er200_v1_h_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er200_v1_h_r_normal_sprites; er200_v1_h_notpowered_sprites_right; } spriteset (er200_v1_m_notpowered_sprites_left, "src/emu/er200.png") { s15_template(60 +880, 40, 0) } spriteset (er200_v1_m_loading_sprites, "src/emu/er200.png") { s15_template(60 +880, 40 +67, 0) } spriteset (er200_v1_m_traveling_sprites, "src/emu/er200.png") { s15_template(60 +880, 40 +134, 0) } spritegroup er200_v1_m_normal_sprites { loading: er200_v1_m_loading_sprites; loaded: er200_v1_m_traveling_sprites; } spriteset (er200_v1_m_notpowered_sprites_right, "src/emu/er200.png") { s15_template(60 +1320, 40, 0) } spriteset (er200_v1_m_r_loading_sprites, "src/emu/er200.png") { s15_template(60 +1320, 40 +67, 0) } spriteset (er200_v1_m_r_traveling_sprites, "src/emu/er200.png") { s15_template(60 +1320, 40 +134, 0) } spritegroup er200_v1_m_r_normal_sprites { loading: er200_v1_m_r_loading_sprites; loaded: er200_v1_m_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, er200_v1_m_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er200_v1_m_normal_sprites; er200_v1_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er200_v1_m_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er200_v1_m_r_normal_sprites; er200_v1_m_notpowered_sprites_right; } spriteset (er200_v1_c_notpowered_sprites_left, "src/emu/er200.png") { s15_template(60 +1760, 40, 0) } spriteset (er200_v1_c_loading_sprites, "src/emu/er200.png") { s15_template(60 +1760, 40 +67, 0) } spritegroup er200_v1_c_normal_sprites { loading: er200_v1_c_loading_sprites; loaded: er200_v1_c_notpowered_sprites_left; } spriteset (er200_v1_c_notpowered_sprites_right, "src/emu/er200.png") { s15_template(60 +2200, 40, 0) } spriteset (er200_v1_c_r_loading_sprites, "src/emu/er200.png") { s15_template(60 +2200, 40 +67, 0) } spritegroup er200_v1_c_r_normal_sprites { loading: er200_v1_c_r_loading_sprites; loaded: er200_v1_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, er200_v1_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er200_v1_c_normal_sprites; er200_v1_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er200_v1_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er200_v1_c_r_normal_sprites; er200_v1_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, er200_h_sprites_2, ((LOAD_TEMP(0) - count_veh_id(er200_h)) % 2) + ((LOAD_TEMP(4) != er200_h) * 100) ) { 0: er200_v1_h_sprites_left; 1: er200_v1_h_sprites_right; 100: er200_v1_h_notpowered_sprites_left; 101: er200_v1_h_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er200_h_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er200_h_sprites_2; } switch (FEAT_TRAINS, PARENT, er200_h_sprites_parent, [ STORE_TEMP(count_veh_id(er200_h), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er200_h_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er200_h_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er200_h_sprites_parent; } switch (FEAT_TRAINS, SELF, er200_m_sprites_3, ((LOAD_TEMP(0) - count_veh_id(er200_m)) >= (LOAD_TEMP(5) - count_veh_id(er200_c))) + ((LOAD_TEMP(4) != er200_h) * 100) ) { 0: er200_v1_m_sprites_left; 1: er200_v1_m_sprites_right; 100: er200_v1_m_notpowered_sprites_left; 101: er200_v1_m_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, PARENT, er200_m_sprites_2, [ STORE_TEMP(count_veh_id(er200_c), 5) ]) { er200_m_sprites_3; } switch (FEAT_TRAINS, SELF, er200_m_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er200_m_sprites_2; } switch (FEAT_TRAINS, PARENT, er200_m_sprites_parent, [ STORE_TEMP(count_veh_id(er200_m), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er200_m_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er200_m_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er200_m_sprites_parent; } switch (FEAT_TRAINS, SELF, er200_c_sprites_3, ((LOAD_TEMP(0) - count_veh_id(er200_m)) >= (LOAD_TEMP(5) - count_veh_id(er200_c))) + ((LOAD_TEMP(4) != er200_h) * 100) ) { 0: er200_v1_c_sprites_left; 1: er200_v1_c_sprites_right; 100: er200_v1_c_notpowered_sprites_left; 101: er200_v1_c_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, PARENT, er200_c_sprites_2, [ STORE_TEMP(count_veh_id(er200_m), 5) ]) { er200_c_sprites_3; } switch (FEAT_TRAINS, SELF, er200_c_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er200_c_sprites_2; } switch (FEAT_TRAINS, PARENT, er200_c_sprites_parent, [ STORE_TEMP(count_veh_id(er200_c), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er200_c_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er200_c_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er200_c_sprites_parent; } switch (FEAT_TRAINS, PARENT, er200_h_can_attach_wagon_2, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er200_h: return string(STR_CAN_ATTACH_CAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er200_h_can_attach_wagon, (count_veh_id(er200_h) > 1) ? 0 : (((count_veh_id(er200_h) + count_veh_id(er200_m) + count_veh_id(er200_c)) < 5) || ((count_veh_id(er200_h) + count_veh_id(er200_m) + count_veh_id(er200_c)) % 2 == 0 ) ) ? 1 : 2) { 0: return string(STR_CAN_ATTACH_NO_MORE_THAN_2_HEAD); 1: return string(STR_CAN_ATTACH_CAR_ONLY); er200_h_can_attach_wagon_2; } switch (FEAT_TRAINS, PARENT, er200_m_can_attach_wagon, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er200_m: return string(STR_CAN_ATTACH_OTHERCAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er200_c_can_attach_wagon, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er200_c: return string(STR_CAN_ATTACH_OTHERCAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, SELF, er200_can_attach_wagon2, vehicle_type_id) { er200_h: er200_h_can_attach_wagon; er200_m: er200_m_can_attach_wagon; er200_c: er200_c_can_attach_wagon; return string(STR_CAN_ATTACH_SAME_MU_ONLY); } switch (FEAT_TRAINS, PARENT, er200_can_attach_wagon1, (count_veh_id(er200_h) > 1) ? 0 : (((count_veh_id(er200_h) + count_veh_id(er200_m) + count_veh_id(er200_c)) >= 9) && (LOAD_TEMP(0) != er200_h)) ? 1 : 2) { 0: return string(STR_CAN_ATTACH_NO_AFTER_REAR_HEAD); 1: return string(STR_CAN_ATTACH_HEAD_ONLY); er200_can_attach_wagon2; } switch (FEAT_TRAINS, SELF, er200_can_attach_wagon, STORE_TEMP(vehicle_type_id, 0)) { er200_can_attach_wagon1; } switch (FEAT_TRAINS, PARENT, er200_h_start_stop, count_veh_id(er200_h)) { 2: return CB_RESULT_NO_TEXT; return string(STR_START_STOP_NUMBER_OF_HEAD_CAR_MUST_BE_EVEN); } // Моторный самостоятельно выпускать из депо нельзя switch (FEAT_TRAINS, SELF, er200_m_start_stop, 0) { return string(STR_START_STOP_MOTORIZED_CAR_CANNOT_LEAVE_DEPOT); } // Визуализируем эффекты тяги у er200_m, только если локомотив - er200_h switch (FEAT_TRAINS, SELF, er200_m_visual_effect_and_powered1, position_in_consist % 4 == 0 ) { 0: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, PARENT, er200_m_visual_effect_and_powered, vehicle_type_id == er200_h) { 1: er200_m_visual_effect_and_powered1; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } // Даём тягу, только если локомотив - er200_h switch (FEAT_TRAINS, PARENT, er200_m_power, vehicle_type_id == er200_h) { 1: return int (1146 * 0.9865); return 0; } // Допускается эксплуатация с пассажирами только если голова - er200_h switch (FEAT_TRAINS, PARENT, er200_h_cargo_capacity, (vehicle_type_id == er200_h) ) { 1: return 16; return 0; } switch (FEAT_TRAINS, PARENT, er200_m_cargo_capacity, (vehicle_type_id == er200_h) ) { 1: return 64; return 0; } switch (FEAT_TRAINS, PARENT, er200_c_cargo_capacity, (vehicle_type_id == er200_h) ) { 1: return 64; return 0; } item (FEAT_TRAINS, er200_h) { property { name: string(STR_ER200_H_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1979 - 2, 1, 1); model_life: 1992 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1979 -1992 -2 < retire_early_default ? 1992 -1979 +2 : -retire_early_default); retire_early: 1979 -1992 -2 < retire_early_default ? retire_early_default+1 : 1979 -1992 -1; vehicle_life: 30; // срок службы reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERD1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 16; weight: 48.7 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er200_h_sprites; purchase: er200_h_purchase_sprites; articulated_part: articulated_part_dummy7; can_attach_wagon: er200_can_attach_wagon; start_stop: er200_h_start_stop; speed: return 200; purchase_speed: return 200; additional_text: return string(STR_ER200_H_PURCHASE_HINT, string(STR_SECTIONS_EMU_AM6_8_10)); power: return 0; cargo_capacity: er200_h_cargo_capacity; } } item (FEAT_TRAINS, er200_m) { property { name: string(STR_ER200_M_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1979 - 2, 1, 1); model_life: 1992 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1979 -1992 -2 < retire_early_default ? 1992 -1979 +2 : -retire_early_default); retire_early: 1979 -1992 -2 < retire_early_default ? retire_early_default+1 : 1979 -1992 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERD1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1146 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 64; weight: 58.5 ton; engine_class: ENGINE_CLASS_ELECTRIC; tractive_effort_coefficient: (36.0/(58.5)/9.8); length: 8; } graphics { default: er200_m_sprites; purchase: er200_m_purchase_sprites; articulated_part: articulated_part_dummy7; can_attach_wagon: er200_can_attach_wagon; start_stop: er200_m_start_stop; speed: return 200; purchase_speed: return 200; additional_text: return string(STR_ER200_M_PURCHASE_HINT, string(STR_SECTIONS_EMU_AM6_8_10)); visual_effect_and_powered: er200_m_visual_effect_and_powered; power: er200_m_power; cargo_capacity: er200_m_cargo_capacity; } } item (FEAT_TRAINS, er200_c) { property { name: string(STR_ER200_C_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1979 - 2, 1, 1); model_life: 1992 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1979 -1992 -2 < retire_early_default ? 1992 -1979 +2 : -retire_early_default); retire_early: 1979 -1992 -2 < retire_early_default ? retire_early_default+1 : 1979 -1992 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERD1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1146 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 64; weight: 56.5 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; tractive_effort_coefficient: (36.0/(56.5)/9.8); visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er200_c_sprites; purchase: er200_c_purchase_sprites; articulated_part: articulated_part_dummy7; additional_text: return string(STR_ER200_C_PURCHASE_HINT, string(STR_SECTIONS_EMU_AM6_8_10)); speed: return 200; purchase_speed: return 200; can_attach_wagon: er200_can_attach_wagon; start_stop: er200_m_start_stop; power: er200_m_power; cargo_capacity: er200_c_cargo_capacity; } } if (enable_long_names) { item (FEAT_TRAINS, er200_h) { property { name: string(STR_ER200_H_NAME_LONG); } } item (FEAT_TRAINS, er200_m) { property { name: string(STR_ER200_M_NAME_LONG); } } item (FEAT_TRAINS, er200_c) { property { name: string(STR_ER200_C_NAME_LONG); } } } // er9p // Спрайты /// Головной spriteset (er9p_h_v1_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [0, 0, 100, 18, -40, -13] } spriteset (er9p_h_v1_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [0 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_h_v1_purchase_sprites, enable_icons) { 1: er9p_h_v1_purchase_graphics_ico; er9p_h_v1_purchase_graphics_noico;} spriteset (er9p_h_v3_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [100, 0, 100, 18, -40, -13] } spriteset (er9p_h_v3_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [100 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_h_v3_purchase_sprites, enable_icons) { 1: er9p_h_v3_purchase_graphics_ico; er9p_h_v3_purchase_graphics_noico;} spriteset (er9p_h_v8_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [200, 0, 100, 18, -40, -13] } spriteset (er9p_h_v8_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [200 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_h_v8_purchase_sprites, enable_icons) { 1: er9p_h_v8_purchase_graphics_ico; er9p_h_v8_purchase_graphics_noico;} // вариант 1, погрузка/перемещение spriteset (er9p_h_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 275, 0) } spriteset (er9p_h_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 275, 0) } spritegroup er9p_h_spritegroup { loading: er9p_h_loading_spriteset; loaded: er9p_h_traveling_spriteset; } // вариант 2: погрузка/перемещение spriteset (er9p_h_v2_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 344, 0) } spriteset (er9p_h_v2_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 344, 0) } spritegroup er9p_h_v2_spritegroup { loading: er9p_h_v2_loading_spriteset; loaded: er9p_h_v2_traveling_spriteset; } // вариант 3: погрузка/перемещение spriteset (er9p_h_v3_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 413, 0) } spriteset (er9p_h_v3_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 413, 0) } spritegroup er9p_h_v3_spritegroup { loading: er9p_h_v3_loading_spriteset; loaded: er9p_h_v3_traveling_spriteset; } // вариант 4: погрузка/перемещение spriteset (er9p_h_v4_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 482, 0) } spriteset (er9p_h_v4_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 482, 0) } spritegroup er9p_h_v4_spritegroup { loading: er9p_h_v4_loading_spriteset; loaded: er9p_h_v4_traveling_spriteset; } // вариант 6: погрузка/перемещение spriteset (er9p_h_v6_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 620, 0) } spriteset (er9p_h_v6_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 620, 0) } spritegroup er9p_h_v6_spritegroup { loading: er9p_h_v6_loading_spriteset; loaded: er9p_h_v6_traveling_spriteset; } // вариант 8: погрузка/перемещение spriteset (er9p_h_v8_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 758, 0) } spriteset (er9p_h_v8_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 758, 0) } spritegroup er9p_h_v8_spritegroup { loading: er9p_h_v8_loading_spriteset; loaded: er9p_h_v8_traveling_spriteset; } // вариант 9: погрузка/перемещение spriteset (er9p_h_v9_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 827, 0) } spriteset (er9p_h_v9_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 827, 0) } spritegroup er9p_h_v9_spritegroup { loading: er9p_h_v9_loading_spriteset; loaded: er9p_h_v9_traveling_spriteset; } // вариант 11: погрузка/перемещение spriteset (er9p_h_v11_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 965, 0) } spriteset (er9p_h_v11_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 965, 0) } spritegroup er9p_h_v11_spritegroup { loading: er9p_h_v11_loading_spriteset; loaded: er9p_h_v11_traveling_spriteset; } // вариант 13: погрузка/перемещение spriteset (er9p_h_v13_loading_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1103, 0) } spriteset (er9p_h_v13_traveling_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(1059, 1103, 0) } spritegroup er9p_h_v13_spritegroup { loading: er9p_h_v13_loading_spriteset; loaded: er9p_h_v13_traveling_spriteset; } /// Головной развёрнутый spriteset (er9p_hr_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1244, 0) } spriteset (er9p_hr_v2_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1313, 0) } spriteset (er9p_hr_v3_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1382, 0) } spriteset (er9p_hr_v4_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1451, 0) } spriteset (er9p_hr_v6_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1589, 0) } spriteset (er9p_hr_v8_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1727, 0) } spriteset (er9p_hr_v9_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1796, 0) } spriteset (er9p_hr_v11_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 1934, 0) } spriteset (er9p_hr_v13_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2072, 0) } /// Моторный // покупка spriteset (er9p_m_v1_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [0, 20, 100, 18, -40, -13] } spriteset (er9p_m_v1_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [0 +18, 20, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_m_v1_purchase_sprites, enable_icons) { 1: er9p_m_v1_purchase_graphics_ico; er9p_m_v1_purchase_graphics_noico;} spriteset (er9p_m_v3_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [100, 20, 100, 18, -40, -13] } spriteset (er9p_m_v3_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [100 +18, 20, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_m_v3_purchase_sprites, enable_icons) { 1: er9p_m_v3_purchase_graphics_ico; er9p_m_v3_purchase_graphics_noico;} spriteset (er9p_m_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2210, 0) } spriteset (er9p_m_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2210, 0) } spriteset (er9p_m_v2_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2279, 0) } spriteset (er9p_m_v2_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2279, 0) } spriteset (er9p_m_v3_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2348, 0) } spriteset (er9p_m_v3_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2348, 0) } spriteset (er9p_m_v4_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2417, 0) } spriteset (er9p_m_v4_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2417, 0) } spriteset (er9p_m_v6_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2555, 0) } spriteset (er9p_m_v6_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2555, 0) } spriteset (er9p_m_v8_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2693, 0) } spriteset (er9p_m_v8_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2693, 0) } /// моторный развёрнутый spriteset (er9p_mr_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2831, 0) } spriteset (er9p_mr_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2831, 0) } spriteset (er9p_mr_v2_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2900, 0) } spriteset (er9p_mr_v2_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2900, 0) } spriteset (er9p_mr_v3_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 2969, 0) } spriteset (er9p_mr_v3_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 2969, 0) } spriteset (er9p_mr_v4_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3038, 0) } spriteset (er9p_mr_v4_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 3038, 0) } spriteset (er9p_mr_v6_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3176, 0) } spriteset (er9p_mr_v6_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 3176, 0) } spriteset (er9p_mr_v8_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3314, 0) } spriteset (er9p_mr_v8_notpowered_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(157, 3314, 0) } /// прицепной spriteset (er9p_c_v1_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [0, 40, 100, 18, -40, -13] } spriteset (er9p_c_v1_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [0 +18, 40, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_c_v1_purchase_sprites, enable_icons) { 1: er9p_c_v1_purchase_graphics_ico; er9p_c_v1_purchase_graphics_noico;} spriteset (er9p_c_v3_purchase_graphics_ico, "src/emu/er9p-1964-1976.png") { [100, 40, 100, 18, -40, -13] } spriteset (er9p_c_v3_purchase_graphics_noico, "src/emu/er9p-1964-1976.png") { [100 +18, 40, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9p_c_v3_purchase_sprites, enable_icons) { 1: er9p_c_v3_purchase_graphics_ico; er9p_c_v3_purchase_graphics_noico;} spriteset (er9p_c_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3452, 0) } spriteset (er9p_c_v2_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3521, 0) } spriteset (er9p_c_v4_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3659, 0) } spriteset (er9p_c_v6_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3797, 0) } spriteset (er9p_cr_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 3935, 0) } spriteset (er9p_cr_v2_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 4004, 0) } spriteset (er9p_cr_v4_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 4142, 0) } spriteset (er9p_cr_v6_spriteset, "src/emu/er9p-1964-1976.png") { s12_template(608, 4280, 0) } /// паззл // головной spriteset (er9p_h_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 275, 0) } spriteset (er9p_h_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 275, 0) } spriteset (er9p_h_v2_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 344, 0) } spriteset (er9p_h_v2_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 344, 0) } spriteset (er9p_h_v3_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 413, 0) } spriteset (er9p_h_v3_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 413, 0) } spriteset (er9p_h_v4_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 482, 0) } spriteset (er9p_h_v4_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 482, 0) } spriteset (er9p_h_v6_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 620, 0) } spriteset (er9p_h_v6_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 620, 0) } spriteset (er9p_h_v8_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 758, 0) } spriteset (er9p_h_v8_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 758, 0) } spriteset (er9p_h_v9_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 827, 0) } spriteset (er9p_h_v9_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 827, 0) } spriteset (er9p_h_v11_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 965, 0) } spriteset (er9p_h_v11_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 965, 0) } spriteset (er9p_h_v13_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 1103, 0) } spriteset (er9p_h_v13_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1103, 0) } // головной развёрнутый spriteset (er9p_hr_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1244, 0) } spriteset (er9p_hr_v2_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1313, 0) } spriteset (er9p_hr_v3_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1382, 0) } spriteset (er9p_hr_v4_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1451, 0) } spriteset (er9p_hr_v6_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1589, 0) } spriteset (er9p_hr_v8_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1727, 0) } spriteset (er9p_hr_v9_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1796, 0) } spriteset (er9p_hr_v11_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 1934, 0) } spriteset (er9p_hr_v13_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2072, 0) } // моторный spriteset (er9p_m_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 2210, 0) } spriteset (er9p_m_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2210, 0) } spriteset (er9p_m_v2_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 2279, 0) } spriteset (er9p_m_v2_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2279, 0) } spriteset (er9p_m_v3_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 2348, 0) } spriteset (er9p_m_v3_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2348, 0) } spriteset (er9p_m_v4_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 2417, 0) } spriteset (er9p_m_v4_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2417, 0) } spriteset (er9p_m_v6_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 2555, 0) } spriteset (er9p_m_v6_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2555, 0) } spriteset (er9p_m_v8_cannot_start_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1701, 2693, 0) } spriteset (er9p_m_v8_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2693, 0) } // моторный развёрнутый spriteset (er9p_mr_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2831, 0) } spriteset (er9p_mr_v2_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2900, 0) } spriteset (er9p_mr_v3_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 2969, 0) } spriteset (er9p_mr_v4_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3038, 0) } spriteset (er9p_mr_v6_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3176, 0) } spriteset (er9p_mr_v8_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3314, 0) } // прицепной spriteset (er9p_c_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3452, 0) } spriteset (er9p_c_v2_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3521, 0) } spriteset (er9p_c_v4_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3659, 0) } spriteset (er9p_c_v6_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3797, 0) } // прицепной развёрнутый spriteset (er9p_cr_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 3935, 0) } spriteset (er9p_cr_v2_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 4004, 0) } spriteset (er9p_cr_v4_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 4142, 0) } spriteset (er9p_cr_v6_wrong_place_spriteset, "src/emu/er9p-1964-1976.png") { s12ui1_template(1775, 4280, 0) } // покупка switch (FEAT_TRAINS, SELF, er9p_h_purchase_sprites, (current_year >= 1968) + (current_year >= 1974)) { 0: er9p_h_v1_purchase_sprites; 1: er9p_h_v3_purchase_sprites; er9p_h_v8_purchase_sprites; } switch (FEAT_TRAINS, SELF, er9p_c_purchase_sprites, (current_year >= 1968)) { 0: er9p_c_v1_purchase_sprites; er9p_c_v3_purchase_sprites; } switch (FEAT_TRAINS, SELF, er9p_m_purchase_sprites, (current_year >= 1968)) { 0: er9p_m_v1_purchase_sprites; er9p_m_v3_purchase_sprites; } // Рисуем вариант в депо // R0 - длина состава, R1 - позиция вагона в составе // R2 - кол-во элементов Г в составе --> позиция среди элементов Г в составе switch (FEAT_TRAINS, SELF, er9p_h_sprites_depot2, [ STORE_TEMP(LOAD_TEMP(0) - count_veh_id(er9p_h) - count_veh_id(er9p_m) - count_veh_id(er9p_c), 1), STORE_TEMP(LOAD_TEMP(2) - count_veh_id(er9p_h), 2), ((LOAD_TEMP(1) == 0) || ( LOAD_TEMP(1) == 3 ? LOAD_TEMP(0) <= 4 : LOAD_TEMP(1) == 5 ? LOAD_TEMP(0) <= 6 : LOAD_TEMP(1) == 7 ? LOAD_TEMP(0) <= 8 : LOAD_TEMP(1) == 9 ? LOAD_TEMP(0) <= 10 : LOAD_TEMP(1) == 11 ? LOAD_TEMP(0) <= 12 : 0) * (LOAD_TEMP(2) < 2)) + ((LOAD_TEMP(2) % 2) * 2) + (cargo_subtype * 4) + (((LOAD_TEMP(3) >= date(1972,1,1)) * 8) && (build_year < 1974))+ ((build_year >= 1974) * 20) ]) { 0: er9p_h_wrong_place_spriteset; 1: er9p_h_spritegroup; 2: er9p_hr_wrong_place_spriteset; 3: er9p_hr_spriteset; 4: er9p_h_v2_wrong_place_spriteset; 5: er9p_h_v2_spritegroup; 6: er9p_hr_v2_wrong_place_spriteset; 7: er9p_hr_v2_spriteset; 8: er9p_h_v3_wrong_place_spriteset; 9: er9p_h_v3_spritegroup; 10: er9p_hr_v3_wrong_place_spriteset; 11: er9p_hr_v3_spriteset; 12: er9p_h_v4_wrong_place_spriteset; 13: er9p_h_v4_spritegroup; 14: er9p_hr_v4_wrong_place_spriteset; 15: er9p_hr_v4_spriteset; 16: er9p_h_v6_wrong_place_spriteset; 17: er9p_h_v6_spritegroup; 18: er9p_hr_v6_wrong_place_spriteset; 19: er9p_hr_v6_spriteset; // квадратные морды 20: er9p_h_v8_wrong_place_spriteset; 21: er9p_h_v8_spritegroup; 22: er9p_hr_v8_wrong_place_spriteset; 23: er9p_hr_v8_spriteset; 24: er9p_h_v9_wrong_place_spriteset; 25: er9p_h_v9_spritegroup; 26: er9p_hr_v9_wrong_place_spriteset; 27: er9p_hr_v9_spriteset; 28: er9p_h_v11_wrong_place_spriteset; 29: er9p_h_v11_spritegroup; 30: er9p_hr_v11_wrong_place_spriteset; 31: er9p_hr_v11_spriteset; 32: er9p_h_v13_wrong_place_spriteset; 33: er9p_h_v13_spritegroup; 34: er9p_hr_v13_wrong_place_spriteset; 35: er9p_hr_v13_spriteset; align_12_sprites; } switch (FEAT_TRAINS, PARENT, er9p_h_sprites_depot, [ STORE_TEMP(count_veh_id(er9p_h) + count_veh_id(er9p_m) + count_veh_id(er9p_c), 0), // длина поезда в элементах ЭР9 STORE_TEMP(count_veh_id(er9p_h), 2), // для определения реверса STORE_TEMP(date_of_last_service, 3) ]) { er9p_h_sprites_depot2; } // Рисуем вариант не в депо, разворачиваем каждый второй switch (FEAT_TRAINS, SELF, er9p_h_sprites_2, [ ((LOAD_TEMP(0) - count_veh_id(er9p_h)) % 2) + (cargo_subtype * 2) + (((LOAD_TEMP(2) >= date(1972,1,1)) && (build_year < 1974)) * 4) + ((build_year >= 1974) * 10) ]) { 0: er9p_h_spritegroup; 1: er9p_hr_spriteset; 2: er9p_h_v2_spritegroup; 3: er9p_hr_v2_spriteset; 4: er9p_h_v3_spritegroup; 5: er9p_hr_v3_spriteset; 6: er9p_h_v4_spritegroup; 7: er9p_hr_v4_spriteset; 8: er9p_h_v6_spritegroup; 9: er9p_hr_v6_spriteset; 10: er9p_h_v8_spritegroup; 11: er9p_hr_v8_spriteset; 12: er9p_h_v9_spritegroup; 13: er9p_hr_v9_spriteset; 14: er9p_h_v11_spritegroup; 15: er9p_hr_v11_spriteset; 16: er9p_h_v13_spritegroup; 17: er9p_hr_v13_spriteset; align_12_sprites; } switch (FEAT_TRAINS, SELF, er9p_h_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9p_h_sprites_2; } switch (FEAT_TRAINS, PARENT, er9p_h_sprites_parent, [ STORE_TEMP(count_veh_id(er9p_h), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9p_h_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9p_h_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9p_h_sprites_parent; } // рисуем в депо? switch (FEAT_TRAINS, SELF, er9p_h_sprites_0, ((extra_callback_info1 & 0xFF) == 0x10)) { 1: er9p_h_sprites_depot; er9p_h_sprites; } // Рисуем вариант в депо // R0 - длина поезда, R1 - позиция вагона // R2 - кол-во элементов М в составе switch (FEAT_TRAINS, SELF, er9p_m_sprites_depot2, [ STORE_TEMP(LOAD_TEMP(0) - count_veh_id(er9p_h) - count_veh_id(er9p_m) - count_veh_id(er9p_c), 1), STORE_TEMP(LOAD_TEMP(2) - count_veh_id(er9p_m), 3), (((LOAD_TEMP(1) == 1) || ( LOAD_TEMP(1) == 2 ? LOAD_TEMP(0) <= 4 : LOAD_TEMP(1) == 3 ? LOAD_TEMP(0) > 4 : LOAD_TEMP(1) == 4 ? (LOAD_TEMP(0) > 4) && (LOAD_TEMP(0) <= 8) : LOAD_TEMP(1) == 5 ? LOAD_TEMP(0) > 8 : LOAD_TEMP(1) == 6 ? LOAD_TEMP(0) > 6 : LOAD_TEMP(1) == 8 ? LOAD_TEMP(0) > 8 : LOAD_TEMP(1) == 10 ? LOAD_TEMP(0) > 10 : 0)) * ((!(vehicle_is_not_powered || vehicle_is_in_depot || LOAD_TEMP(4))) + 1) * (LOAD_TEMP(3) < 6)) + ((LOAD_TEMP(3) >= ((LOAD_TEMP(2) / 2) + (LOAD_TEMP(2) % 2))) * 3) + (cargo_subtype * 6) + ((build_year >= 1968) * 12) ]) { 0: er9p_m_wrong_place_spriteset; 1: er9p_m_notpowered_spriteset; 2: er9p_m_spriteset; 3: er9p_mr_wrong_place_spriteset; 4: er9p_mr_notpowered_spriteset; 5: er9p_mr_spriteset; 6: er9p_m_v2_wrong_place_spriteset; 7: er9p_m_v2_notpowered_spriteset; 8: er9p_m_v2_spriteset; 9: er9p_mr_v2_wrong_place_spriteset; 10: er9p_mr_v2_notpowered_spriteset; 11: er9p_mr_v2_spriteset; 12: er9p_m_v3_wrong_place_spriteset; 13: er9p_m_v3_notpowered_spriteset; 14: er9p_m_v3_spriteset; 15: er9p_mr_v3_wrong_place_spriteset; 16: er9p_mr_v3_notpowered_spriteset; 17: er9p_mr_v3_spriteset; 18: er9p_m_v4_wrong_place_spriteset; 19: er9p_m_v4_notpowered_spriteset; 20: er9p_m_v4_spriteset; 21: er9p_mr_v4_wrong_place_spriteset; 22: er9p_mr_v4_notpowered_spriteset; 23: er9p_mr_v4_spriteset; 24: er9p_m_v6_wrong_place_spriteset; 25: er9p_m_v6_notpowered_spriteset; 26: er9p_m_v6_spriteset; 27: er9p_mr_v6_wrong_place_spriteset; 28: er9p_mr_v6_notpowered_spriteset; 29: er9p_mr_v6_spriteset; 30: er9p_m_v8_wrong_place_spriteset; 31: er9p_m_v8_notpowered_spriteset; 32: er9p_m_v8_spriteset; 33: er9p_mr_v8_wrong_place_spriteset; 34: er9p_mr_v8_notpowered_spriteset; 35: er9p_mr_v8_spriteset; align_12_sprites; } switch (FEAT_TRAINS, PARENT, er9p_m_sprites_depot, [ STORE_TEMP(count_veh_id(er9p_h) + count_veh_id(er9p_m) + count_veh_id(er9p_c), 0), // длина поезда в элементах ЭР9 STORE_TEMP(count_veh_id(er9p_m), 2), // для определения реверса STORE_TEMP(vehicle_type_id != er9p_h, 4) // локомотив не er9p_h ]) { er9p_m_sprites_depot2; } // Рисуем вариант не в депо // R2 - кол-во элементов Г в составе // R3 - наличие тяги (локомотив er9p_h) switch (FEAT_TRAINS, SELF, er9p_m_sprites3, [ ((!(vehicle_is_not_powered || vehicle_is_in_depot)) && LOAD_TEMP(3)) + (((LOAD_TEMP(0) - count_veh_id(er9p_m)) >= ((LOAD_TEMP(0) / 2) + (LOAD_TEMP(0) % 2))) * 2) + (cargo_subtype * 4) + ((build_year >= 1968) * 8) ]) { 0: er9p_m_notpowered_spriteset; 1: er9p_m_spriteset; 2: er9p_mr_notpowered_spriteset; 3: er9p_mr_spriteset; 4: er9p_m_v2_notpowered_spriteset; 5: er9p_m_v2_spriteset; 6: er9p_mr_v2_notpowered_spriteset; 7: er9p_mr_v2_spriteset; 8: er9p_m_v3_notpowered_spriteset; 9: er9p_m_v3_spriteset; 10: er9p_mr_v3_notpowered_spriteset; 11: er9p_mr_v3_spriteset; 12: er9p_m_v4_notpowered_spriteset; 13: er9p_m_v4_spriteset; 14: er9p_mr_v4_notpowered_spriteset; 15: er9p_mr_v4_spriteset; 16: er9p_m_v6_notpowered_spriteset; 17: er9p_m_v6_spriteset; 18: er9p_mr_v6_notpowered_spriteset; 19: er9p_mr_v6_spriteset; 20: er9p_m_v8_notpowered_spriteset; 21: er9p_m_v8_spriteset; 22: er9p_mr_v8_notpowered_spriteset; 23: er9p_mr_v8_spriteset; align_12_sprites; } switch (FEAT_TRAINS, PARENT, er9p_m_sprites_2, [ STORE_TEMP(vehicle_type_id == er9p_h, 3) // для определения наличия тяги ]) { er9p_m_sprites3; } switch (FEAT_TRAINS, SELF, er9p_m_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9p_m_sprites_2; } switch (FEAT_TRAINS, PARENT, er9p_m_sprites_parent, [ STORE_TEMP(count_veh_id(er9p_m), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9p_m_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9p_m_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9p_m_sprites_parent; } // рисуем в депо? switch (FEAT_TRAINS, SELF, er9p_m_sprites_0, ((extra_callback_info1 & 0xFF) == 0x10)) { 1: er9p_m_sprites_depot; er9p_m_sprites; } // Рисуем вариант в депо // R0 - длина поезда, R1 - позиция вагона // R2 - кол-во элементов М в составе switch (FEAT_TRAINS, SELF, er9p_c_sprites_depot2, [ STORE_TEMP(LOAD_TEMP(0) - count_veh_id(er9p_h) - count_veh_id(er9p_m) - count_veh_id(er9p_c), 1), STORE_TEMP(LOAD_TEMP(2) - count_veh_id(er9p_c), 3), ((LOAD_TEMP(1) == 2 ? (LOAD_TEMP(0) > 4) : LOAD_TEMP(1) == 4 ? LOAD_TEMP(0) > 8 : LOAD_TEMP(1) == 5 ? (LOAD_TEMP(0) > 6) && (LOAD_TEMP(0) <= 8) : LOAD_TEMP(1) == 7 ? LOAD_TEMP(0) > 8 : LOAD_TEMP(1) == 9 ? LOAD_TEMP(0) > 10 : 0) * (LOAD_TEMP(3) < 4)) + ((LOAD_TEMP(3) > ((LOAD_TEMP(2) / 2) + (LOAD_TEMP(2) % 2))) * 2) + (cargo_subtype * 4) ]) { 0: er9p_c_wrong_place_spriteset; 1: er9p_c_spriteset; 2: er9p_cr_wrong_place_spriteset; 3: er9p_cr_spriteset; 4: er9p_c_v2_wrong_place_spriteset; 5: er9p_c_v2_spriteset; 6: er9p_cr_v2_wrong_place_spriteset; 7: er9p_cr_v2_spriteset; 8: er9p_c_v4_wrong_place_spriteset; 9: er9p_c_v4_spriteset; 10: er9p_cr_v4_wrong_place_spriteset; 11: er9p_cr_v4_spriteset; 12: er9p_c_v6_wrong_place_spriteset; 13: er9p_c_v6_spriteset; 14: er9p_cr_v6_wrong_place_spriteset; 15: er9p_cr_v6_spriteset; align_12_sprites; } switch (FEAT_TRAINS, PARENT, er9p_c_sprites_depot, [ STORE_TEMP(count_veh_id(er9p_h) + count_veh_id(er9p_m) + count_veh_id(er9p_c), 0), // длина поезда в элементах ЭР9 STORE_TEMP(count_veh_id(er9p_c), 2) // для определения реверса ]) { er9p_c_sprites_depot2; } // Рисуем вариант не в депо // R0 - кол-во элементов Г в составе switch (FEAT_TRAINS, SELF, er9p_c_sprites_2, [ ((LOAD_TEMP(0) - count_veh_id(er9p_c)) > ((LOAD_TEMP(0) / 2) + (LOAD_TEMP(0) % 2))) + (cargo_subtype * 2) ]) { 0: er9p_c_spriteset; 1: er9p_cr_spriteset; 2: er9p_c_v2_spriteset; 3: er9p_cr_v2_spriteset; 4: er9p_c_v4_spriteset; 5: er9p_cr_v4_spriteset; 6: er9p_c_v6_spriteset; 7: er9p_cr_v6_spriteset; align_12_sprites; } switch (FEAT_TRAINS, SELF, er9p_c_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9p_c_sprites_2; } switch (FEAT_TRAINS, PARENT, er9p_c_sprites_parent, [ STORE_TEMP(count_veh_id(er9p_c), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9p_c_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9p_c_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9p_c_sprites_parent; } // рисуем в депо? switch (FEAT_TRAINS, SELF, er9p_c_sprites_0, ((extra_callback_info1 & 0xFF) == 0x10)) { 1: er9p_c_sprites_depot; er9p_c_sprites; } // Более 2-х головных вагонов нельзя // После головного присоединять нельзя // Более 12 вагонов в составе нельзя switch (FEAT_TRAINS, PARENT, er9p_h_can_attach_wagon1, (count_veh_id(er9p_h) > 1) ? (LOAD_TEMP(0) == er9p_h ? 0 : 1) : (num_vehs_in_consist >= 12 * 2) ? 2 : 3 ) { 0: return string(STR_CAN_ATTACH_NO_MORE_THAN_2_HEAD); 1: return string(STR_CAN_ATTACH_NO_AFTER_REAR_HEAD); 2: return string(STR_CAN_ATTACH_NO_MORE_THAN_12_UNITS); return CB_RESULT_ATTACH_ALLOW; } // Можно присоединять только компоненты ЭР1 switch (FEAT_TRAINS, SELF, er9p_h_can_attach_wagon, STORE_TEMP(vehicle_type_id, 0)) { er9p_h: er9p_h_can_attach_wagon1; er9p_m: er9p_h_can_attach_wagon1; er9p_c: er9p_h_can_attach_wagon1; return string(STR_CAN_ATTACH_SAME_MU_ONLY); } // Можно присоединять только компоненты ЭР1 switch (FEAT_TRAINS, SELF, er9p_m_can_attach_wagon, vehicle_type_id) { er9p_h: return CB_RESULT_ATTACH_ALLOW; er9p_m: return CB_RESULT_ATTACH_ALLOW; er9p_c: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_SAME_MU_ONLY); } // TL == 12 switch (FEAT_TRAINS, PARENT, er9p_h_start_stop5, [ STORE_TEMP(2, 0x10F), STORE_TEMP(var[0x61, 0, 0xFFFF, 0xC6] == er9p_m, 0), STORE_TEMP(4, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(6, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(8, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(10, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(12, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(14, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(16, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(18, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(20, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(22, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_h), 0), LOAD_TEMP(0) ]) { 1: return CB_RESULT_NO_TEXT; return string(STR_WRONG_STRUCTURE_OF_TRAIN_12); } // TL == 10 switch (FEAT_TRAINS, PARENT, er9p_h_start_stop4, [ STORE_TEMP(2, 0x10F), STORE_TEMP(var[0x61, 0, 0xFFFF, 0xC6] == er9p_m, 0), STORE_TEMP(4, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(6, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(8, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(10, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(12, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(14, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(16, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(18, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_h), 0), LOAD_TEMP(0) ]) { 1: return CB_RESULT_NO_TEXT; return string(STR_WRONG_STRUCTURE_OF_TRAIN_10); } // TL == 8 switch (FEAT_TRAINS, PARENT, er9p_h_start_stop3, [ STORE_TEMP(2, 0x10F), STORE_TEMP(var[0x61, 0, 0xFFFF, 0xC6] == er9p_m, 0), STORE_TEMP(4, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(6, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(8, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(10, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(12, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(14, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_h), 0), LOAD_TEMP(0) ]) { 1: return CB_RESULT_NO_TEXT; return string(STR_WRONG_STRUCTURE_OF_TRAIN_8); } // TL == 6 switch (FEAT_TRAINS, PARENT, er9p_h_start_stop2, [ STORE_TEMP(2, 0x10F), STORE_TEMP(var[0x61, 0, 0xFFFF, 0xC6] == er9p_m, 0), STORE_TEMP(4, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_c), 0), STORE_TEMP(6, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(8, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(10, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_h), 0), LOAD_TEMP(0) ]) { 1: return CB_RESULT_NO_TEXT; return string(STR_WRONG_STRUCTURE_OF_TRAIN_6); } // TL == 4 switch (FEAT_TRAINS, PARENT, er9p_h_start_stop1, [ STORE_TEMP(2, 0x10F), STORE_TEMP(var[0x61, 0, 0xFFFF, 0xC6] == er9p_m, 0), STORE_TEMP(4, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_m), 0), STORE_TEMP(6, 0x10F), STORE_TEMP(LOAD_TEMP(0) && (var[0x61, 0, 0xFFFF, 0xC6] == er9p_h), 0), LOAD_TEMP(0) ]) { 1: return CB_RESULT_NO_TEXT; return string(STR_WRONG_STRUCTURE_OF_TRAIN_4); } switch (FEAT_TRAINS, PARENT, er9p_h_start_stop, // длина состава в элементах ЭР9 count_veh_id(er9p_h) + count_veh_id(er9p_m) + count_veh_id(er9p_c)) { 4: er9p_h_start_stop1; 6: er9p_h_start_stop2; 8: er9p_h_start_stop3; 10: er9p_h_start_stop4; 12: er9p_h_start_stop5; return string(STR_START_STOP_WRONG_TRAIN_LENGTH_SHOULD_BE_4_6_8_10_12); } // Моторный самостоятельно выпускать из депо нельзя switch (FEAT_TRAINS, SELF, er9p_m_start_stop, 0) { return string(STR_START_STOP_MOTORIZED_CAR_CANNOT_LEAVE_DEPOT); } // Визуализируем эффекты тяги у er9p_m, только если локомотив - er9p_h switch (FEAT_TRAINS, PARENT, er9p_m_visual_effect_and_powered, vehicle_type_id == er9p_h) { 1: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 0, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } // Даём тягу, только если локомотив - er9p_h switch (FEAT_TRAINS, PARENT, er9p_m_power, vehicle_type_id == er9p_h) { 1: return int (826 * 0.9865); return 0; } // Допускается эксплуатация с пассажирами только если голова - er9p_h switch (FEAT_TRAINS, PARENT, er9p_h_cargo_capacity, (vehicle_type_id == er9p_h) ) { 1: return 88; return 0; } switch (FEAT_TRAINS, PARENT, er9p_m_cargo_capacity, (vehicle_type_id == er9p_h) ) { 1: return 110; return 0; } switch (FEAT_TRAINS, PARENT, er9p_c_cargo_capacity, (vehicle_type_id == er9p_h) ) { 1: return 108; return 0; } switch (FEAT_TRAINS, SELF, er9p_cargo_subtype_text4, cargo_subtype) { 0: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_TTD_53)); 1: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_TTD_5A)); return CB_RESULT_NO_TEXT; } switch (FEAT_TRAINS, SELF, er9p_cargo_subtype_text3, cargo_subtype) { 0: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_TTD_53)); 1: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_TTD_5A)); 2: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_GORKOV_RAILWAY)); return CB_RESULT_NO_TEXT; } switch (FEAT_TRAINS, SELF, er9p_cargo_subtype_text2, cargo_subtype) { 0: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_TTD_53)); 1: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_TTD_5A)); 2: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_GORKOV_RAILWAY)); 3: string(STR_REFIT_FACTORY_62101, string(STR_REFIT_UKRAINIAN_RAILWAY)); return CB_RESULT_NO_TEXT; } switch (FEAT_TRAINS, SELF, er9p_cargo_subtype_text, (build_year >= 1972) + (build_year >= 1990) ) { 0: er9p_cargo_subtype_text4; 1: er9p_cargo_subtype_text3; er9p_cargo_subtype_text2; } item (FEAT_TRAINS, er9p_h) { property { name: string(STR_ER9P_H_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1964 - 2, 1, 1); model_life: 1976 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1964 -1976 -2 < retire_early_default ? 1976 -1964 +2 : -retire_early_default); retire_early: 1964 -1976 -2 < retire_early_default ? retire_early_default+1 : 1964 -1976 -1; vehicle_life: 30; // срок службы reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; speed: 130 km/h; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 88; weight: 39 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er9p_h_sprites_0; purchase: er9p_h_purchase_sprites; articulated_part: articulated_part_dummy4; can_attach_wagon: er9p_h_can_attach_wagon; start_stop: er9p_h_start_stop; speed: speed_after30_130to110; purchase_speed: return 130; additional_text: return string(STR_ER9P_H_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); cargo_subtype_text: er9p_cargo_subtype_text; power: return 0; cargo_capacity: er9p_h_cargo_capacity; } } item (FEAT_TRAINS, er9p_m) { property { name: string(STR_ER9P_M_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1964 - 2, 1, 1); model_life: 1976 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1964 -1976 -2 < retire_early_default ? 1976 -1964 +2 : -retire_early_default); retire_early: 1964 -1976 -2 < retire_early_default ? retire_early_default+1 : 1964 -1976 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 826 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 110; weight: 59 ton; engine_class: ENGINE_CLASS_ELECTRIC; tractive_effort_coefficient: (47.0/(59)/9.8); length: 8; } graphics { default: er9p_m_sprites_0; purchase: er9p_m_purchase_sprites; articulated_part: articulated_part_dummy4; can_attach_wagon: er9p_m_can_attach_wagon; start_stop: er9p_m_start_stop; speed: speed_after30_130to110; purchase_speed: return 130; additional_text: return string(STR_ER9P_M_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); cargo_subtype_text: er9p_cargo_subtype_text; visual_effect_and_powered: er9p_m_visual_effect_and_powered; power: er9p_m_power; cargo_capacity: er9p_m_cargo_capacity; } } item (FEAT_TRAINS, er9p_c) { property { name: string(STR_ER9P_C_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1964 - 2, 1, 1); model_life: 1976 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1964 -1976 -2 < retire_early_default ? 1976 -1964 +2 : -retire_early_default); retire_early: 1964 -1976 -2 < retire_early_default ? retire_early_default+1 : 1964 -1976 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 108; weight: 37 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er9p_c_sprites_0; purchase: er9p_c_purchase_sprites; articulated_part: articulated_part_dummy4; additional_text: return string(STR_ER9P_C_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); cargo_subtype_text: er9p_cargo_subtype_text; speed: speed_after30_130to110; purchase_speed: return 130; power: return 0; can_attach_wagon: er9p_m_can_attach_wagon; start_stop: return string(STR_START_STOP_HEAD_REQUIRED); cargo_capacity: er9p_c_cargo_capacity; } } if (enable_long_names) { item (FEAT_TRAINS, er9p_h) { property { name: string(STR_ER9P_H_NAME_LONG); } } item (FEAT_TRAINS, er9p_m) { property { name: string(STR_ER9P_M_NAME_LONG); } } item (FEAT_TRAINS, er9p_c) { property { name: string(STR_ER9P_C_NAME_LONG); } } } // er9m // Спрайты spriteset (er9m_h_purchase_graphics_ico, "src/emu/er9m.png") { [0, 0, 100, 18, -40, -13] } spriteset (er9m_h_purchase_graphics_noico, "src/emu/er9m.png") { [0 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9m_h_purchase_sprites, enable_icons) { 1: er9m_h_purchase_graphics_ico; er9m_h_purchase_graphics_noico;} spriteset (er9m_m_purchase_graphics_ico, "src/emu/er9m.png") { [120, 0, 100, 18, -40, -13] } spriteset (er9m_m_purchase_graphics_noico, "src/emu/er9m.png") { [120 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9m_m_purchase_sprites, enable_icons) { 1: er9m_m_purchase_graphics_ico; er9m_m_purchase_graphics_noico;} spriteset (er9m_c_purchase_graphics_ico, "src/emu/er9m.png") { [240, 0, 100, 18, -40, -13] } spriteset (er9m_c_purchase_graphics_noico, "src/emu/er9m.png") { [240 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, er9m_c_purchase_sprites, enable_icons) { 1: er9m_c_purchase_graphics_ico; er9m_c_purchase_graphics_noico;} spriteset (er9m_v1_h_notpowered_sprites_left, "src/emu/er9m.png") { s12_template(60, 40, 0) } spriteset (er9m_v1_h_loading_sprites, "src/emu/er9m.png") { s12_template(60, 40 +67, 0) } spriteset (er9m_v1_h_traveling_sprites, "src/emu/er9m.png") { s12_template(60, 40 +134, 0) } spritegroup er9m_v1_h_normal_sprites { loading: er9m_v1_h_loading_sprites; loaded: er9m_v1_h_traveling_sprites; } spriteset (er9m_v1_h_notpowered_sprites_right, "src/emu/er9m.png") { s12_template(60 +440, 40, 0) } spriteset (er9m_v1_h_r_loading_sprites, "src/emu/er9m.png") { s12_template(60 +440, 40 +67, 0) } spriteset (er9m_v1_h_r_traveling_sprites, "src/emu/er9m.png") { s12_template(60 +440, 40 +134, 0) } spritegroup er9m_v1_h_r_normal_sprites { loading: er9m_v1_h_r_loading_sprites; loaded: er9m_v1_h_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, er9m_v1_h_sprites_left, (position_in_consist > 0) || vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v1_h_normal_sprites; er9m_v1_h_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er9m_v1_h_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v1_h_r_normal_sprites; er9m_v1_h_notpowered_sprites_right; } spriteset (er9m_v1_m_notpowered_sprites_left, "src/emu/er9m.png") { s12_template(60 +880, 40, 0) } spriteset (er9m_v1_m_loading_sprites, "src/emu/er9m.png") { s12_template(60 +880, 40 +67, 0) } spriteset (er9m_v1_m_traveling_sprites, "src/emu/er9m.png") { s12_template(60 +880, 40 +134, 0) } spritegroup er9m_v1_m_normal_sprites { loading: er9m_v1_m_loading_sprites; loaded: er9m_v1_m_traveling_sprites; } spriteset (er9m_v1_m_notpowered_sprites_right, "src/emu/er9m.png") { s12_template(60 +1320, 40, 0) } spriteset (er9m_v1_m_r_loading_sprites, "src/emu/er9m.png") { s12_template(60 +1320, 40 +67, 0) } spriteset (er9m_v1_m_r_traveling_sprites, "src/emu/er9m.png") { s12_template(60 +1320, 40 +134, 0) } spritegroup er9m_v1_m_r_normal_sprites { loading: er9m_v1_m_r_loading_sprites; loaded: er9m_v1_m_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, er9m_v1_m_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v1_m_normal_sprites; er9m_v1_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er9m_v1_m_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v1_m_r_normal_sprites; er9m_v1_m_notpowered_sprites_right; } spriteset (er9m_v1_c_notpowered_sprites_left, "src/emu/er9m.png") { s12_template(60 +1760, 40, 0) } spriteset (er9m_v1_c_loading_sprites, "src/emu/er9m.png") { s12_template(60 +1760, 40 +67, 0) } spritegroup er9m_v1_c_normal_sprites { loading: er9m_v1_c_loading_sprites; loaded: er9m_v1_c_notpowered_sprites_left; } spriteset (er9m_v1_c_notpowered_sprites_right, "src/emu/er9m.png") { s12_template(60 +2200, 40, 0) } spriteset (er9m_v1_c_r_loading_sprites, "src/emu/er9m.png") { s12_template(60 +2200, 40 +67, 0) } spritegroup er9m_v1_c_r_normal_sprites { loading: er9m_v1_c_r_loading_sprites; loaded: er9m_v1_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, er9m_v1_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v1_c_normal_sprites; er9m_v1_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er9m_v1_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v1_c_r_normal_sprites; er9m_v1_c_notpowered_sprites_right; } spriteset (er9m_v2_h_notpowered_sprites_left, "src/emu/er9m.png") { s12_template(60, 40, 0) } spriteset (er9m_v2_h_loading_sprites, "src/emu/er9m.png") { s12_template(60, 40 +67, 0) } spriteset (er9m_v2_h_traveling_sprites, "src/emu/er9m.png") { s12_template(60, 40 +134, 0) } spritegroup er9m_v2_h_normal_sprites { loading: er9m_v2_h_loading_sprites; loaded: er9m_v2_h_traveling_sprites; } spriteset (er9m_v2_h_notpowered_sprites_right, "src/emu/er9m.png") { s12_template(60 +440, 40, 0) } spriteset (er9m_v2_h_r_loading_sprites, "src/emu/er9m.png") { s12_template(60 +440, 40 +67, 0) } spriteset (er9m_v2_h_r_traveling_sprites, "src/emu/er9m.png") { s12_template(60 +440, 40 +134, 0) } spritegroup er9m_v2_h_r_normal_sprites { loading: er9m_v2_h_r_loading_sprites; loaded: er9m_v2_h_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, er9m_v2_h_sprites_left, (position_in_consist > 0) || vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v2_h_normal_sprites; er9m_v2_h_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er9m_v2_h_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v2_h_r_normal_sprites; er9m_v2_h_notpowered_sprites_right; } spriteset (er9m_v2_m_notpowered_sprites_left, "src/emu/er9m.png") { s12_template(60 +880, 40, 0) } spriteset (er9m_v2_m_loading_sprites, "src/emu/er9m.png") { s12_template(60 +880, 40 +67, 0) } spriteset (er9m_v2_m_traveling_sprites, "src/emu/er9m.png") { s12_template(60 +880, 40 +134, 0) } spritegroup er9m_v2_m_normal_sprites { loading: er9m_v2_m_loading_sprites; loaded: er9m_v2_m_traveling_sprites; } spriteset (er9m_v2_m_notpowered_sprites_right, "src/emu/er9m.png") { s12_template(60 +1320, 40, 0) } spriteset (er9m_v2_m_r_loading_sprites, "src/emu/er9m.png") { s12_template(60 +1320, 40 +67, 0) } spriteset (er9m_v2_m_r_traveling_sprites, "src/emu/er9m.png") { s12_template(60 +1320, 40 +134, 0) } spritegroup er9m_v2_m_r_normal_sprites { loading: er9m_v2_m_r_loading_sprites; loaded: er9m_v2_m_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, er9m_v2_m_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v2_m_normal_sprites; er9m_v2_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er9m_v2_m_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v2_m_r_normal_sprites; er9m_v2_m_notpowered_sprites_right; } spriteset (er9m_v2_c_notpowered_sprites_left, "src/emu/er9m.png") { s12_template(60 +1760, 40, 0) } spriteset (er9m_v2_c_loading_sprites, "src/emu/er9m.png") { s12_template(60 +1760, 40 +67, 0) } spritegroup er9m_v2_c_normal_sprites { loading: er9m_v2_c_loading_sprites; loaded: er9m_v2_c_notpowered_sprites_left; } spriteset (er9m_v2_c_notpowered_sprites_right, "src/emu/er9m.png") { s12_template(60 +2200, 40, 0) } spriteset (er9m_v2_c_r_loading_sprites, "src/emu/er9m.png") { s12_template(60 +2200, 40 +67, 0) } spritegroup er9m_v2_c_r_normal_sprites { loading: er9m_v2_c_r_loading_sprites; loaded: er9m_v2_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, er9m_v2_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v2_c_normal_sprites; er9m_v2_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, er9m_v2_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: er9m_v2_c_r_normal_sprites; er9m_v2_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, er9m_h_sprites_2, ((LOAD_TEMP(0) - count_veh_id(er9m_h)) % 2) + (cargo_subtype * 2) + ((LOAD_TEMP(4) != er9m_h) * 100) ) { 0: er9m_v1_h_sprites_left; 1: er9m_v1_h_sprites_right; 2: er9m_v2_h_sprites_left; 3: er9m_v2_h_sprites_right; 100: er9m_v1_h_notpowered_sprites_left; 101: er9m_v1_h_notpowered_sprites_right; 102: er9m_v2_h_notpowered_sprites_left; 103: er9m_v2_h_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er9m_h_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9m_h_sprites_2; } switch (FEAT_TRAINS, PARENT, er9m_h_sprites_parent, [ STORE_TEMP(count_veh_id(er9m_h), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9m_h_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9m_h_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9m_h_sprites_parent; } switch (FEAT_TRAINS, SELF, er9m_m_sprites_2, ((count_veh_id(er9m_m) * 2) <= LOAD_TEMP(0)) + (cargo_subtype * 2) + ((LOAD_TEMP(4) != er9m_h) * 100) ) { 0: er9m_v1_m_sprites_left; 1: er9m_v1_m_sprites_right; 2: er9m_v2_m_sprites_left; 3: er9m_v2_m_sprites_right; 100: er9m_v1_m_notpowered_sprites_left; 101: er9m_v1_m_notpowered_sprites_right; 102: er9m_v2_m_notpowered_sprites_left; 103: er9m_v2_m_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er9m_m_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9m_m_sprites_2; } switch (FEAT_TRAINS, PARENT, er9m_m_sprites_parent, [ STORE_TEMP(count_veh_id(er9m_m), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9m_m_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9m_m_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9m_m_sprites_parent; } switch (FEAT_TRAINS, SELF, er9m_c_sprites_2, ((count_veh_id(er9m_c) * 2) <= LOAD_TEMP(0)) + (cargo_subtype * 2) + ((LOAD_TEMP(4) != er9m_h) * 100) ) { 0: er9m_v1_c_sprites_left; 1: er9m_v1_c_sprites_right; 2: er9m_v2_c_sprites_left; 3: er9m_v2_c_sprites_right; 100: er9m_v1_c_notpowered_sprites_left; 101: er9m_v1_c_notpowered_sprites_right; 102: er9m_v2_c_notpowered_sprites_left; 103: er9m_v2_c_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er9m_c_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9m_c_sprites_2; } switch (FEAT_TRAINS, PARENT, er9m_c_sprites_parent, [ STORE_TEMP(count_veh_id(er9m_c), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9m_c_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9m_c_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9m_c_sprites_parent; } switch (FEAT_TRAINS, PARENT, er9m_h_can_attach_wagon3, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_c: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_CAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_h_can_attach_wagon2, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_h: return string(STR_CAN_ATTACH_CAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er9m_h_can_attach_wagon, (count_veh_id(er9m_h) > 1) ? 0 : (((count_veh_id(er9m_h) + count_veh_id(er9m_m) + count_veh_id(er9m_c)) < 3) || ((count_veh_id(er9m_h) + count_veh_id(er9m_m) + count_veh_id(er9m_c)) % 2 == 0 ) ) ? 1 : (2 + count_veh_id(er9m_m)) ) { 0: return string(STR_CAN_ATTACH_NO_MORE_THAN_2_HEAD); 1: return string(STR_CAN_ATTACH_CAR_ONLY); 2: er9m_h_can_attach_wagon2; 6..8: er9m_h_can_attach_wagon3; return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er9m_m_can_attach_wagon, ((count_veh_id(er9m_m) - count_veh_id(er9m_c) - count_veh_id(er9m_h)) < 1 ) * (1 + count_veh_id(er9m_m))) { 0: return string(STR_CAN_ATTACH_OTHERCAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er9m_c_can_attach_wagon4, [ STORE_TEMP(num_vehs_in_consist-8, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_m: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_c_can_attach_wagon3, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_m: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_c_can_attach_wagon2, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_m: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_c_can_attach_wagon1, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_c: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_HEAD_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_c_can_attach_wagon0, ((count_veh_id(er9m_m) - count_veh_id(er9m_c) - count_veh_id(er9m_h)) >= 0 ) * (count_veh_id(er9m_m))) { 0: return string(STR_CAN_ATTACH_OTHERCAR_ONLY); 1: return CB_RESULT_ATTACH_ALLOW; 2: er9m_c_can_attach_wagon1; 3: er9m_c_can_attach_wagon2; 4: er9m_c_can_attach_wagon3; 5: er9m_c_can_attach_wagon4; return string(STR_CAN_ATTACH_HEAD_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_c_can_attach_wagon, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9m_m: er9m_c_can_attach_wagon0; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, SELF, er9m_can_attach_wagon2, vehicle_type_id) { er9m_h: er9m_h_can_attach_wagon; er9m_m: er9m_m_can_attach_wagon; er9m_c: er9m_c_can_attach_wagon; return string(STR_CAN_ATTACH_SAME_MU_ONLY); } switch (FEAT_TRAINS, PARENT, er9m_can_attach_wagon1, (count_veh_id(er9m_h) > 1) ? 0 : (((count_veh_id(er9m_h) + count_veh_id(er9m_m) + count_veh_id(er9m_c)) >= 11) && (LOAD_TEMP(0) != er9m_h)) ? 1 : 2) { 0: return string(STR_CAN_ATTACH_NO_AFTER_REAR_HEAD); 1: return string(STR_CAN_ATTACH_HEAD_ONLY); er9m_can_attach_wagon2; } switch (FEAT_TRAINS, SELF, er9m_can_attach_wagon, STORE_TEMP(vehicle_type_id, 0)) { er9m_can_attach_wagon1; } switch (FEAT_TRAINS, PARENT, er9m_h_start_stop, count_veh_id(er9m_h)) { 2: return CB_RESULT_NO_TEXT; return string(STR_START_STOP_NUMBER_OF_HEAD_CAR_MUST_BE_EVEN); } // Моторный самостоятельно выпускать из депо нельзя switch (FEAT_TRAINS, SELF, er9m_m_start_stop, 0) { return string(STR_START_STOP_MOTORIZED_CAR_CANNOT_LEAVE_DEPOT); } // Визуализируем эффекты тяги у er9m_m, только если локомотив - er9m_h switch (FEAT_TRAINS, SELF, er9m_m_visual_effect_and_powered2, (count_veh_id(er9m_m) * 2) <= LOAD_TEMP(0) ) { 0: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, PARENT, er9m_m_visual_effect_and_powered1, [ STORE_TEMP(count_veh_id(er9m_m), 0) ]) { er9m_m_visual_effect_and_powered2; } switch (FEAT_TRAINS, PARENT, er9m_m_visual_effect_and_powered, vehicle_type_id == er9m_h) { 1: er9m_m_visual_effect_and_powered1; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } // Даём тягу, только если локомотив - er9m_h switch (FEAT_TRAINS, PARENT, er9m_m_power, vehicle_type_id == er9m_h) { 1: return int (826 * 0.9865); return 0; } // Допускается эксплуатация с пассажирами только если голова - er9m_h switch (FEAT_TRAINS, PARENT, er9m_h_cargo_capacity, (vehicle_type_id == er9m_h) ) { 1: return 88; return 0; } switch (FEAT_TRAINS, PARENT, er9m_m_cargo_capacity, (vehicle_type_id == er9m_h) ) { 1: return 107; return 0; } switch (FEAT_TRAINS, PARENT, er9m_c_cargo_capacity, (vehicle_type_id == er9m_h) ) { 1: return 108; return 0; } switch (FEAT_TRAINS, SELF, er9m_cargo_subtype_text1, cargo_subtype) { 0: string(STR_REFIT_FACTORY_62255, string(STR_REFIT_TTD_53)); 1: string(STR_REFIT_FACTORY_62255, string(STR_REFIT_UKRAINIAN_RAILWAY)); return CB_RESULT_NO_TEXT; } switch (FEAT_TRAINS, SELF, er9m_cargo_subtype_text, (current_year >= 1990) ) { 0: string(STR_REFIT_FACTORY_62255, string(STR_REFIT_TTD_53)); er9m_cargo_subtype_text1; } item (FEAT_TRAINS, er9m_h) { property { name: string(STR_ER9M_H_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1976 - 2, 1, 1); model_life: 1983 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1976 -1983 -2 < retire_early_default ? 1983 -1976 +2 : -retire_early_default); retire_early: 1976 -1983 -2 < retire_early_default ? retire_early_default+1 : 1976 -1983 -1; vehicle_life: 30; // срок службы reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; speed: 130 km/h; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 88; weight: 39 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er9m_h_sprites; purchase: er9m_h_purchase_sprites; articulated_part: articulated_part_dummy4; can_attach_wagon: er9m_can_attach_wagon; start_stop: er9m_h_start_stop; speed: speed_after30_130to110; purchase_speed: return 130; additional_text: return string(STR_ER9M_H_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); power: return 0; cargo_capacity: er9m_h_cargo_capacity; cargo_subtype_text: er9m_cargo_subtype_text; } } item (FEAT_TRAINS, er9m_m) { property { name: string(STR_ER9M_M_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1976 - 2, 1, 1); model_life: 1983 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1976 -1983 -2 < retire_early_default ? 1983 -1976 +2 : -retire_early_default); retire_early: 1976 -1983 -2 < retire_early_default ? retire_early_default+1 : 1976 -1983 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 826 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 107; weight: 57 ton; engine_class: ENGINE_CLASS_ELECTRIC; tractive_effort_coefficient: (47.0/(57)/9.8); length: 8; } graphics { default: er9m_m_sprites; purchase: er9m_m_purchase_sprites; articulated_part: articulated_part_dummy4; can_attach_wagon: er9m_can_attach_wagon; start_stop: er9m_m_start_stop; speed: speed_after30_130to110; purchase_speed: return 130; additional_text: return string(STR_ER9M_M_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); visual_effect_and_powered: er9m_m_visual_effect_and_powered; power: er9m_m_power; cargo_capacity: er9m_m_cargo_capacity; cargo_subtype_text: er9m_cargo_subtype_text; } } item (FEAT_TRAINS, er9m_c) { property { name: string(STR_ER9M_C_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1976 - 2, 1, 1); model_life: 1983 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1976 -1983 -2 < retire_early_default ? 1983 -1976 +2 : -retire_early_default); retire_early: 1976 -1983 -2 < retire_early_default ? retire_early_default+1 : 1976 -1983 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 108; weight: 37 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er9m_c_sprites; purchase: er9m_c_purchase_sprites; articulated_part: articulated_part_dummy4; additional_text: return string(STR_ER9M_C_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); speed: speed_after30_130to110; purchase_speed: return 130; can_attach_wagon: er9m_can_attach_wagon; start_stop: er9m_m_start_stop; power: return 0; cargo_capacity: er9m_c_cargo_capacity; cargo_subtype_text: er9m_cargo_subtype_text; } } if (enable_long_names) { item (FEAT_TRAINS, er9m_h) { property { name: string(STR_ER9M_H_NAME_LONG); } } item (FEAT_TRAINS, er9m_m) { property { name: string(STR_ER9M_M_NAME_LONG); } } item (FEAT_TRAINS, er9m_c) { property { name: string(STR_ER9M_C_NAME_LONG); } } } // er9e switch (FEAT_TRAINS, SELF, er9e_h_sprites_2, ((LOAD_TEMP(0) - count_veh_id(er9e_h)) % 2) + (cargo_subtype * 2) + ((LOAD_TEMP(4) != er9e_h) * 100) ) { 0: er9m_v1_h_sprites_left; 1: er9m_v1_h_sprites_right; 2: er9m_v2_h_sprites_left; 3: er9m_v2_h_sprites_right; 100: er9m_v1_h_notpowered_sprites_left; 101: er9m_v1_h_notpowered_sprites_right; 102: er9m_v2_h_notpowered_sprites_left; 103: er9m_v2_h_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er9e_h_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9e_h_sprites_2; } switch (FEAT_TRAINS, PARENT, er9e_h_sprites_parent, [ STORE_TEMP(count_veh_id(er9e_h), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9e_h_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9e_h_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9e_h_sprites_parent; } switch (FEAT_TRAINS, SELF, er9e_m_sprites_2, ((count_veh_id(er9e_m) * 2) <= LOAD_TEMP(0)) + (cargo_subtype * 2) + ((LOAD_TEMP(4) != er9e_h) * 100) ) { 0: er9m_v1_m_sprites_left; 1: er9m_v1_m_sprites_right; 2: er9m_v2_m_sprites_left; 3: er9m_v2_m_sprites_right; 100: er9m_v1_m_notpowered_sprites_left; 101: er9m_v1_m_notpowered_sprites_right; 102: er9m_v2_m_notpowered_sprites_left; 103: er9m_v2_m_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er9e_m_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9e_m_sprites_2; } switch (FEAT_TRAINS, PARENT, er9e_m_sprites_parent, [ STORE_TEMP(count_veh_id(er9e_m), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9e_m_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9e_m_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9e_m_sprites_parent; } switch (FEAT_TRAINS, SELF, er9e_c_sprites_2, ((count_veh_id(er9e_c) * 2) <= LOAD_TEMP(0)) + (cargo_subtype * 2) + ((LOAD_TEMP(4) != er9e_h) * 100) ) { 0: er9m_v1_c_sprites_left; 1: er9m_v1_c_sprites_right; 2: er9m_v2_c_sprites_left; 3: er9m_v2_c_sprites_right; 100: er9m_v1_c_notpowered_sprites_left; 101: er9m_v1_c_notpowered_sprites_right; 102: er9m_v2_c_notpowered_sprites_left; 103: er9m_v2_c_notpowered_sprites_right; align_15_sprites; } switch (FEAT_TRAINS, SELF, er9e_c_sprites_selfpos, [ STORE_TEMP(((var[0x9F, 0, 0x07] & 3) == 3) ? var[0x9C, 0, 0x0F] & 3 : var[0x9A, 0, 0x0F] & 3, 3) ]) { er9e_c_sprites_2; } switch (FEAT_TRAINS, PARENT, er9e_c_sprites_parent, [ STORE_TEMP(count_veh_id(er9e_c), 0), STORE_TEMP(current_speed, 1), STORE_TEMP(date_of_last_service, 2), STORE_TEMP(vehicle_type_id, 4) ]) { er9e_c_sprites_selfpos; } switch (FEAT_TRAINS, SELF, er9e_c_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; er9e_c_sprites_parent; } switch (FEAT_TRAINS, PARENT, er9e_h_can_attach_wagon3, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_c: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_CAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_h_can_attach_wagon2, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_h: return string(STR_CAN_ATTACH_CAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er9e_h_can_attach_wagon, (count_veh_id(er9e_h) > 1) ? 0 : (((count_veh_id(er9e_h) + count_veh_id(er9e_m) + count_veh_id(er9e_c)) < 3) || ((count_veh_id(er9e_h) + count_veh_id(er9e_m) + count_veh_id(er9e_c)) % 2 == 0 ) ) ? 1 : (2 + count_veh_id(er9e_m)) ) { 0: return string(STR_CAN_ATTACH_NO_MORE_THAN_2_HEAD); 1: return string(STR_CAN_ATTACH_CAR_ONLY); 2: er9e_h_can_attach_wagon2; 6..8: er9e_h_can_attach_wagon3; return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er9e_m_can_attach_wagon, ((count_veh_id(er9e_m) - count_veh_id(er9e_c) - count_veh_id(er9e_h)) < 1 ) * (1 + count_veh_id(er9e_m))) { 0: return string(STR_CAN_ATTACH_OTHERCAR_ONLY); return CB_RESULT_ATTACH_ALLOW; } switch (FEAT_TRAINS, PARENT, er9e_c_can_attach_wagon4, [ STORE_TEMP(num_vehs_in_consist-8, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_m: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_c_can_attach_wagon3, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_m: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_c_can_attach_wagon2, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_m: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_c_can_attach_wagon1, [ STORE_TEMP(num_vehs_in_consist-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_c: return CB_RESULT_ATTACH_ALLOW; return string(STR_CAN_ATTACH_HEAD_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_c_can_attach_wagon0, ((count_veh_id(er9e_m) - count_veh_id(er9e_c) - count_veh_id(er9e_h)) >= 0 ) * (count_veh_id(er9e_m))) { 0: return string(STR_CAN_ATTACH_OTHERCAR_ONLY); 1: return CB_RESULT_ATTACH_ALLOW; 2: er9e_c_can_attach_wagon1; 3: er9e_c_can_attach_wagon2; 4: er9e_c_can_attach_wagon3; 5: er9e_c_can_attach_wagon4; return string(STR_CAN_ATTACH_HEAD_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_c_can_attach_wagon, [ STORE_TEMP(num_vehs_in_consist-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { er9e_m: er9e_c_can_attach_wagon0; return string(STR_CAN_ATTACH_OTHERCAR_ONLY); } switch (FEAT_TRAINS, SELF, er9e_can_attach_wagon2, vehicle_type_id) { er9e_h: er9e_h_can_attach_wagon; er9e_m: er9e_m_can_attach_wagon; er9e_c: er9e_c_can_attach_wagon; return string(STR_CAN_ATTACH_SAME_MU_ONLY); } switch (FEAT_TRAINS, PARENT, er9e_can_attach_wagon1, (count_veh_id(er9e_h) > 1) ? 0 : (((count_veh_id(er9e_h) + count_veh_id(er9e_m) + count_veh_id(er9e_c)) >= 11) && (LOAD_TEMP(0) != er9e_h)) ? 1 : 2) { 0: return string(STR_CAN_ATTACH_NO_AFTER_REAR_HEAD); 1: return string(STR_CAN_ATTACH_HEAD_ONLY); er9e_can_attach_wagon2; } switch (FEAT_TRAINS, SELF, er9e_can_attach_wagon, STORE_TEMP(vehicle_type_id, 0)) { er9e_can_attach_wagon1; } switch (FEAT_TRAINS, PARENT, er9e_h_start_stop, count_veh_id(er9e_h)) { 2: return CB_RESULT_NO_TEXT; return string(STR_START_STOP_NUMBER_OF_HEAD_CAR_MUST_BE_EVEN); } // Моторный самостоятельно выпускать из депо нельзя switch (FEAT_TRAINS, SELF, er9e_m_start_stop, 0) { return string(STR_START_STOP_MOTORIZED_CAR_CANNOT_LEAVE_DEPOT); } // Визуализируем эффекты тяги у er9e_m, только если локомотив - er9e_h switch (FEAT_TRAINS, SELF, er9e_m_visual_effect_and_powered2, (count_veh_id(er9e_m) * 2) <= LOAD_TEMP(0) ) { 0: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, PARENT, er9e_m_visual_effect_and_powered1, [ STORE_TEMP(count_veh_id(er9e_m), 0) ]) { er9e_m_visual_effect_and_powered2; } switch (FEAT_TRAINS, PARENT, er9e_m_visual_effect_and_powered, vehicle_type_id == er9e_h) { 1: er9e_m_visual_effect_and_powered1; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } // Даём тягу, только если локомотив - er9e_h switch (FEAT_TRAINS, PARENT, er9e_m_power, vehicle_type_id == er9e_h) { 1: return int (826 * 0.9865); return 0; } // Допускается эксплуатация с пассажирами только если голова - er9e_h switch (FEAT_TRAINS, PARENT, er9e_h_cargo_capacity, (vehicle_type_id == er9e_h) ) { 1: return 88; return 0; } switch (FEAT_TRAINS, PARENT, er9e_m_cargo_capacity, (vehicle_type_id == er9e_h) ) { 1: return 107; return 0; } switch (FEAT_TRAINS, PARENT, er9e_c_cargo_capacity, (vehicle_type_id == er9e_h) ) { 1: return 108; return 0; } switch (FEAT_TRAINS, SELF, er9e_cargo_subtype_text1, cargo_subtype) { 0: string(STR_REFIT_FACTORY_62255, string(STR_REFIT_TTD_53)); 1: string(STR_REFIT_FACTORY_62255, string(STR_REFIT_UKRAINIAN_RAILWAY)); return CB_RESULT_NO_TEXT; } switch (FEAT_TRAINS, SELF, er9e_cargo_subtype_text, (current_year >= 1990) ) { 0: string(STR_REFIT_FACTORY_62255, string(STR_REFIT_TTD_53)); er9e_cargo_subtype_text1; } item (FEAT_TRAINS, er9e_h) { property { name: string(STR_ER9E_H_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1982 - 2, 1, 1); model_life: 1988 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1982 -1988 -2 < retire_early_default ? 1988 -1982 +2 : -retire_early_default); retire_early: 1982 -1988 -2 < retire_early_default ? retire_early_default+1 : 1982 -1988 -1; vehicle_life: 30; // срок службы reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; speed: 130 km/h; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 88; weight: 39 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er9e_h_sprites; purchase: er9m_h_purchase_sprites; articulated_part: articulated_part_dummy4; can_attach_wagon: er9e_can_attach_wagon; start_stop: er9e_h_start_stop; speed: speed_after30_130to110; purchase_speed: return 130; additional_text: return string(STR_ER9E_H_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); power: return 0; cargo_capacity: er9e_h_cargo_capacity; cargo_subtype_text: er9e_cargo_subtype_text; } } item (FEAT_TRAINS, er9e_m) { property { name: string(STR_ER9E_M_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1982 - 2, 1, 1); model_life: 1988 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1982 -1988 -2 < retire_early_default ? 1988 -1982 +2 : -retire_early_default); retire_early: 1982 -1988 -2 < retire_early_default ? retire_early_default+1 : 1982 -1988 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 826 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 107; weight: 57 ton; engine_class: ENGINE_CLASS_ELECTRIC; tractive_effort_coefficient: (47.0/(57)/9.8); length: 8; } graphics { default: er9e_m_sprites; purchase: er9m_m_purchase_sprites; articulated_part: articulated_part_dummy4; can_attach_wagon: er9e_can_attach_wagon; start_stop: er9e_m_start_stop; speed: speed_after30_130to110; purchase_speed: return 130; additional_text: return string(STR_ER9E_M_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); visual_effect_and_powered: er9e_m_visual_effect_and_powered; power: er9e_m_power; cargo_capacity: er9e_m_cargo_capacity; cargo_subtype_text: er9e_cargo_subtype_text; } } item (FEAT_TRAINS, er9e_c) { property { name: string(STR_ER9E_C_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(1982 - 2, 1, 1); model_life: 1988 >= 2050 ? VEHICLE_NEVER_EXPIRES : (1982 -1988 -2 < retire_early_default ? 1988 -1982 +2 : -retire_early_default); retire_early: 1982 -1988 -2 < retire_early_default ? retire_early_default+1 : 1982 -1988 -1; vehicle_life: 30; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; loading_speed: 12; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); refit_cost: 0; track_type: enable_our_own_tracks ? ERA1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 1 hpM; running_cost_base: RUNNING_COST_ELECTRIC; cargo_capacity: 108; weight: 37 ton; engine_class: ENGINE_CLASS_ELECTRIC; length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: er9e_c_sprites; purchase: er9m_c_purchase_sprites; articulated_part: articulated_part_dummy4; additional_text: return string(STR_ER9E_C_PURCHASE_HINT, string(STR_SECTIONS_EMU_4_6_8_10_12)); speed: speed_after30_130to110; purchase_speed: return 130; can_attach_wagon: er9e_can_attach_wagon; start_stop: er9e_m_start_stop; power: return 0; cargo_capacity: er9e_c_cargo_capacity; cargo_subtype_text: er9e_cargo_subtype_text; } } if (enable_long_names) { item (FEAT_TRAINS, er9e_h) { property { name: string(STR_ER9E_H_NAME_LONG); } } item (FEAT_TRAINS, er9e_m) { property { name: string(STR_ER9E_M_NAME_LONG); } } item (FEAT_TRAINS, er9e_c) { property { name: string(STR_ER9E_C_NAME_LONG); } } } // evs1 // Спрайты spriteset (evs1_purchase_graphics_ico, "src/emu/evs.png") { [0, 0, 100, 18, -40, -13] } spriteset (evs1_purchase_graphics_noico, "src/emu/evs.png") { [0 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, evs1_purchase_sprites, enable_icons) { 1: evs1_purchase_graphics_ico; evs1_purchase_graphics_noico;} spriteset (evs1_gbt_h_notpowered_sprites_left, "src/emu/evs.png") { s14_template(60, 40, 0) } spriteset (evs1_gbt_h_loading_sprites, "src/emu/evs.png") { s14_template(60, 40 +67, 0) } spriteset (evs1_gbt_h_traveling_sprites, "src/emu/evs.png") { s14_template(60, 40 +134, 0) } spritegroup evs1_gbt_h_normal_sprites { loading: evs1_gbt_h_loading_sprites; loaded: evs1_gbt_h_traveling_sprites; } spriteset (evs1_gbt_h_notpowered_sprites_right, "src/emu/evs.png") { s14_template(60 +440, 40, 0) } spriteset (evs1_gbt_h_r_loading_sprites, "src/emu/evs.png") { s14_template(60 +440, 40 +67, 0) } spriteset (evs1_gbt_h_r_traveling_sprites, "src/emu/evs.png") { s14_template(60 +440, 40 +134, 0) } spritegroup evs1_gbt_h_r_normal_sprites { loading: evs1_gbt_h_r_loading_sprites; loaded: evs1_gbt_h_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, evs1_gbt_h_sprites_left, (position_in_consist > 0) || vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_gbt_h_normal_sprites; evs1_gbt_h_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_gbt_h_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_gbt_h_r_normal_sprites; evs1_gbt_h_notpowered_sprites_right; } spriteset (evs1_dt_m_notpowered_sprites_left, "src/emu/evs.png") { s15_template(60 +880, 40, 0) } spriteset (evs1_dt_m_loading_sprites, "src/emu/evs.png") { s15_template(60 +880, 40 +67, 0) } spriteset (evs1_dt_m_traveling_sprites, "src/emu/evs.png") { s15_template(60 +880, 40 +134, 0) } spritegroup evs1_dt_m_normal_sprites { loading: evs1_dt_m_loading_sprites; loaded: evs1_dt_m_traveling_sprites; } spriteset (evs1_dt_m_notpowered_sprites_right, "src/emu/evs.png") { s15_template(60 +1320, 40, 0) } spriteset (evs1_dt_m_r_loading_sprites, "src/emu/evs.png") { s15_template(60 +1320, 40 +67, 0) } spriteset (evs1_dt_m_r_traveling_sprites, "src/emu/evs.png") { s15_template(60 +1320, 40 +134, 0) } spritegroup evs1_dt_m_r_normal_sprites { loading: evs1_dt_m_r_loading_sprites; loaded: evs1_dt_m_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, evs1_dt_m_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_dt_m_normal_sprites; evs1_dt_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_dt_m_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_dt_m_r_normal_sprites; evs1_dt_m_notpowered_sprites_right; } spriteset (evs1_t_c_notpowered_sprites_left, "src/emu/evs.png") { s15_template(60 +1760, 40, 0) } spriteset (evs1_t_c_loading_sprites, "src/emu/evs.png") { s15_template(60 +1760, 40 +67, 0) } spritegroup evs1_t_c_normal_sprites { loading: evs1_t_c_loading_sprites; loaded: evs1_t_c_notpowered_sprites_left; } spriteset (evs1_t_c_notpowered_sprites_right, "src/emu/evs.png") { s15_template(60 +2200, 40, 0) } spriteset (evs1_t_c_r_loading_sprites, "src/emu/evs.png") { s15_template(60 +2200, 40 +67, 0) } spritegroup evs1_t_c_r_normal_sprites { loading: evs1_t_c_r_loading_sprites; loaded: evs1_t_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_t_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_t_c_normal_sprites; evs1_t_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_t_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_t_c_r_normal_sprites; evs1_t_c_notpowered_sprites_right; } spriteset (evs1_ttr_m_notpowered_sprites_left, "src/emu/evs.png") { s15_template(60 +880, 241, 0) } spriteset (evs1_ttr_m_loading_sprites, "src/emu/evs.png") { s15_template(60 +880, 241 +67, 0) } spriteset (evs1_ttr_m_traveling_sprites, "src/emu/evs.png") { s15_template(60 +880, 241 +134, 0) } spritegroup evs1_ttr_m_normal_sprites { loading: evs1_ttr_m_loading_sprites; loaded: evs1_ttr_m_traveling_sprites; } spriteset (evs1_ttr_m_notpowered_sprites_right, "src/emu/evs.png") { s15_template(60 +1320, 241, 0) } spriteset (evs1_ttr_m_r_loading_sprites, "src/emu/evs.png") { s15_template(60 +1320, 241 +67, 0) } spriteset (evs1_ttr_m_r_traveling_sprites, "src/emu/evs.png") { s15_template(60 +1320, 241 +134, 0) } spritegroup evs1_ttr_m_r_normal_sprites { loading: evs1_ttr_m_r_loading_sprites; loaded: evs1_ttr_m_r_traveling_sprites; } switch (FEAT_TRAINS, SELF, evs1_ttr_m_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_ttr_m_normal_sprites; evs1_ttr_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_ttr_m_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_ttr_m_r_normal_sprites; evs1_ttr_m_notpowered_sprites_right; } spriteset (evs1_tt_c_notpowered_sprites_left, "src/emu/evs.png") { s15_template(60 +1760, 241, 0) } spriteset (evs1_tt_c_loading_sprites, "src/emu/evs.png") { s15_template(60 +1760, 241 +67, 0) } spritegroup evs1_tt_c_normal_sprites { loading: evs1_tt_c_loading_sprites; loaded: evs1_tt_c_notpowered_sprites_left; } spriteset (evs1_tt_c_notpowered_sprites_right, "src/emu/evs.png") { s15_template(60 +2200, 241, 0) } spriteset (evs1_tt_c_r_loading_sprites, "src/emu/evs.png") { s15_template(60 +2200, 241 +67, 0) } spritegroup evs1_tt_c_r_normal_sprites { loading: evs1_tt_c_r_loading_sprites; loaded: evs1_tt_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_tt_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_tt_c_normal_sprites; evs1_tt_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_tt_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_tt_c_r_normal_sprites; evs1_tt_c_notpowered_sprites_right; } spriteset (evs1_ta_c_notpowered_sprites_left, "src/emu/evs.png") { s15_template(60 +1760, 442, 0) } spriteset (evs1_ta_c_loading_sprites, "src/emu/evs.png") { s15_template(60 +1760, 442 +67, 0) } spritegroup evs1_ta_c_normal_sprites { loading: evs1_ta_c_loading_sprites; loaded: evs1_ta_c_notpowered_sprites_left; } spriteset (evs1_ta_c_notpowered_sprites_right, "src/emu/evs.png") { s15_template(60 +2200, 442, 0) } spriteset (evs1_ta_c_r_loading_sprites, "src/emu/evs.png") { s15_template(60 +2200, 442 +67, 0) } spritegroup evs1_ta_c_r_normal_sprites { loading: evs1_ta_c_r_loading_sprites; loaded: evs1_ta_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_ta_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_ta_c_normal_sprites; evs1_ta_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_ta_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_ta_c_r_normal_sprites; evs1_ta_c_notpowered_sprites_right; } spriteset (evs1_tab_c_notpowered_sprites_left, "src/emu/evs.png") { s15_template(60 +1760, 643, 0) } spriteset (evs1_tab_c_loading_sprites, "src/emu/evs.png") { s15_template(60 +1760, 643 +67, 0) } spritegroup evs1_tab_c_normal_sprites { loading: evs1_tab_c_loading_sprites; loaded: evs1_tab_c_notpowered_sprites_left; } spriteset (evs1_tab_c_notpowered_sprites_right, "src/emu/evs.png") { s15_template(60 +2200, 643, 0) } spriteset (evs1_tab_c_r_loading_sprites, "src/emu/evs.png") { s15_template(60 +2200, 643 +67, 0) } spritegroup evs1_tab_c_r_normal_sprites { loading: evs1_tab_c_r_loading_sprites; loaded: evs1_tab_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_tab_c_sprites_left, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_tab_c_normal_sprites; evs1_tab_c_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_tab_c_sprites_right, vehicle_is_not_powered || vehicle_is_in_depot) { 0: evs1_tab_c_r_normal_sprites; evs1_tab_c_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_sprites_2, 0) { evs1_gbt_h_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; evs1_sprites_2; } switch (FEAT_TRAINS, SELF, evs1_b_sprites7, [ STORE_TEMP(-16, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: align_15_sprites; evs1_dt_m_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_b_sprites6, [ STORE_TEMP(-14, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites7; evs1_t_c_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_b_sprites5, [ STORE_TEMP(-12, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites6; evs1_tt_c_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_b_sprites4, [ STORE_TEMP(-10, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites5; evs1_tab_c_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_b_sprites3, [ STORE_TEMP(-8, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites4; evs1_ta_c_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_b_sprites2, [ STORE_TEMP(-6, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites3; evs1_tt_c_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_b_sprites1, [ STORE_TEMP(-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites2; evs1_t_c_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_b_sprites_2, [ STORE_TEMP(-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_sprites1; evs1_dt_m_sprites_left; } switch (FEAT_TRAINS, SELF, evs1_b_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; evs1_b_sprites_2; } switch (FEAT_TRAINS, SELF, evs1_c_sprites_2, 0) { evs1_gbt_h_sprites_right; } switch (FEAT_TRAINS, SELF, evs1_c_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; evs1_c_sprites_2; } switch (FEAT_TRAINS, SELF, evs1_articulated_part, extra_callback_info1) { 1: return dummy7; 2: return unitb; 3: return dummy7; 4: return unitb; 5: return dummy7; 6: return unitb; 7: return dummy7; 8: return unitb; 9: return dummy7; 10: return unitb; 11: return dummy7; 12: return unitb; 13: return dummy7; 14: return unitb; 15: return dummy7; 16: return unitb; 17: return dummy7; 18: return unitc; 19: return dummy6; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // даём тягу, если локомотив evs1 switch (FEAT_TRAINS, PARENT, evs1_power, vehicle_type_id == evs1) { 1: return int (10876 * 0.9865); return 0; } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered7, [ STORE_TEMP(-16, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: align_15_sprites; return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered6, [ STORE_TEMP(-14, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered7; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered5, [ STORE_TEMP(-12, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered6; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered4, [ STORE_TEMP(-10, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered5; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered3, [ STORE_TEMP(-8, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered4; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered2, [ STORE_TEMP(-6, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered3; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered1, [ STORE_TEMP(-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered2; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs1_b_visual_effect_and_powered_2, [ STORE_TEMP(-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs1_b_visual_effect_and_powered1; return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); // показываем визуальные эффекты, если локомотив evs1 switch (FEAT_TRAINS, PARENT, evs1_b_visual_effect_and_powered, vehicle_type_id == evs1) { 1: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 0, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } // Допускается эксплуатация с пассажирами только если голова - evs1 switch (FEAT_TRAINS, PARENT, evs1_cargo_capacity, (vehicle_type_id == evs1) ) { 1: return 604; return 0; } item (FEAT_TRAINS, evs1) { property { name: string(STR_EVS1_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(2009 - 2, 1, 1); vehicle_life: 30; // срок службы model_life: 2050 >= 2050 ? VEHICLE_NEVER_EXPIRES : (2009 -2050 -2 < retire_early_default ? 2050 -2009 +2 : -retire_early_default); retire_early: 2009 -2050 -2 < retire_early_default ? retire_early_default+1 : 2009 -2050 -1; // VEHICLE_NEVER_EXPIRES; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; speed: 156 mph; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); track_type: enable_our_own_tracks ? ERD1 : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 10876 hpM; running_cost_base: RUNNING_COST_ELECTRIC; loading_speed: (260/8); cargo_capacity: 255; // 260 weight: 651 ton; engine_class: ENGINE_CLASS_ELECTRIC; tractive_effort_coefficient: (380.0/(651)/9.8); length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: evs1_sprites; purchase: evs1_purchase_sprites; articulated_part: evs1_articulated_part; can_attach_wagon: string(STR_CAN_ATTACH_NO_MORE); additional_text: return string(STR_EVS1_PURCHASE_HINT); power: evs1_power; cargo_capacity: evs1_cargo_capacity; cost_factor: return 1344; } livery_override(unitb) { length: return 8; visual_effect_and_powered: evs1_b_visual_effect_and_powered; evs1_b_sprites; } livery_override(unitc) { length: return 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); evs1_c_sprites; } } if (enable_long_names) { item (FEAT_TRAINS, evs1) { property { name: string(STR_EVS1_NAME_LONG); } } } // evs1 // Спрайты spriteset (evs2_purchase_graphics_ico, "src/emu/evs.png") { [120, 0, 100, 18, -40, -13] } spriteset (evs2_purchase_graphics_noico, "src/emu/evs.png") { [120 +18, 0, 82, 18, -40, -13] } switch (FEAT_TRAINS, SELF, evs2_purchase_sprites, enable_icons) { 1: evs2_purchase_graphics_ico; evs2_purchase_graphics_noico;} switch (FEAT_TRAINS, SELF, evs2_sprites_2, 0) { evs1_gbt_h_sprites_left; } switch (FEAT_TRAINS, SELF, evs2_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; evs2_sprites_2; } switch (FEAT_TRAINS, SELF, evs2_b_sprites8, current_railtype) { ERD1: evs1_dt_m_sprites_right; ERD2: evs1_dt_m_sprites_right; ERD3: evs1_dt_m_sprites_right; evs1_dt_m_notpowered_sprites_right; } switch (FEAT_TRAINS, SELF, evs2_b_sprites7, [ STORE_TEMP(-16, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: align_15_sprites; evs2_b_sprites8; } switch (FEAT_TRAINS, SELF, evs2_b_sprites6b, current_railtype) { ERD1: evs1_ttr_m_notpowered_sprites_right; ERD2: evs1_ttr_m_notpowered_sprites_right; ERD3: evs1_ttr_m_notpowered_sprites_right; evs1_ttr_m_sprites_right; } switch (FEAT_TRAINS, SELF, evs2_b_sprites6, [ STORE_TEMP(-14, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites7; evs2_b_sprites6b; } switch (FEAT_TRAINS, SELF, evs2_b_sprites5, [ STORE_TEMP(-12, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites6; evs1_tt_c_sprites_right; } switch (FEAT_TRAINS, SELF, evs2_b_sprites4, [ STORE_TEMP(-10, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites5; evs1_tab_c_sprites_right; } switch (FEAT_TRAINS, SELF, evs2_b_sprites3, [ STORE_TEMP(-8, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites4; evs1_ta_c_sprites_left; } switch (FEAT_TRAINS, SELF, evs2_b_sprites2, [ STORE_TEMP(-6, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites3; evs1_tt_c_sprites_left; } switch (FEAT_TRAINS, SELF, evs2_b_sprites1, [ STORE_TEMP(-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites2; evs1_ttr_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs2_b_sprites0, current_railtype) { ERD1: evs1_dt_m_sprites_left; ERD2: evs1_dt_m_sprites_left; ERD3: evs1_dt_m_sprites_left; evs1_dt_m_notpowered_sprites_left; } switch (FEAT_TRAINS, SELF, evs2_b_sprites_2, [ STORE_TEMP(-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_sprites1; evs2_b_sprites0; } switch (FEAT_TRAINS, SELF, evs2_b_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; evs2_b_sprites_2; } switch (FEAT_TRAINS, SELF, evs2_c_sprites_2, 0) { evs1_gbt_h_sprites_right; } switch (FEAT_TRAINS, SELF, evs2_c_sprites, ((extra_callback_info1 & 0xFF) >= 0x20) || (((extra_callback_info1 & 0xFF) == 0) && (var[0x62, 7, 1, 1] != 0)) ) { 1: dummy_sprites; evs2_c_sprites_2; } switch (FEAT_TRAINS, SELF, evs2_articulated_part, extra_callback_info1) { 1: return dummy7; 2: return unitb; 3: return dummy7; 4: return unitb; 5: return dummy7; 6: return unitb; 7: return dummy7; 8: return unitb; 9: return dummy7; 10: return unitb; 11: return dummy7; 12: return unitb; 13: return dummy7; 14: return unitb; 15: return dummy7; 16: return unitb; 17: return dummy7; 18: return unitc; 19: return dummy6; return CB_RESULT_NO_MORE_ARTICULATED_PARTS; } // даём тягу, если локомотив evs2 switch (FEAT_TRAINS, PARENT, evs2_power, vehicle_type_id == evs2) { 1: return int (10876 * 0.9865); return 0; } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered8, current_railtype) { ERD1: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); ERD2: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); ERD3: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered7, [ STORE_TEMP(-16, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); evs2_b_visual_effect_and_powered8; } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered6b, current_railtype) { ERD1: return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); ERD2: return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); ERD3: return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, -3, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered6, [ STORE_TEMP(-14, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered7; evs2_b_visual_effect_and_powered6b; } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered5, [ STORE_TEMP(-12, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered6; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered4, [ STORE_TEMP(-10, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered5; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered3, [ STORE_TEMP(-8, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered4; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered2, [ STORE_TEMP(-6, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered3; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered1, [ STORE_TEMP(-4, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered2; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered0, current_railtype) { ERD1: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); ERD2: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); ERD3: return visual_effect_and_powered(VISUAL_EFFECT_ELECTRIC, 7, DISABLE_WAGON_POWER); return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } switch (FEAT_TRAINS, SELF, evs2_b_visual_effect_and_powered_2, [ STORE_TEMP(-2, 0x10F), var[0x61, 0, 0xFFFF, 0xC6]]) { unitb: evs2_b_visual_effect_and_powered1; evs2_b_visual_effect_and_powered0; } // показываем визуальные эффекты, если локомотив evs2 switch (FEAT_TRAINS, PARENT, evs2_b_visual_effect_and_powered, vehicle_type_id == evs2) { 1: evs2_b_visual_effect_and_powered_2; return visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } // Допускается эксплуатация с пассажирами только если голова - evs2 switch (FEAT_TRAINS, PARENT, evs2_cargo_capacity, (vehicle_type_id == evs2) ) { 1: return 604; return 0; } item (FEAT_TRAINS, evs2) { property { name: string(STR_EVS2_NAME); climates_available: bitmask(CLIMATE_TEMPERATE, CLIMATE_ARCTIC, CLIMATE_TROPICAL, CLIMATE_TOYLAND); introduction_date: date(2009 - 2, 1, 1); vehicle_life: 30; // срок службы model_life: 2050 >= 2050 ? VEHICLE_NEVER_EXPIRES : (2009 -2050 -2 < retire_early_default ? 2050 -2009 +2 : -retire_early_default); retire_early: 2009 -2050 -2 < retire_early_default ? retire_early_default+1 : 2009 -2050 -1; // VEHICLE_NEVER_EXPIRES; reliability_decay: 20; cargo_allow_refit: [PASS]; default_cargo_type: PASS; cost_factor: 2; running_cost_factor: 4; sprite_id: SPRITE_ID_NEW_TRAIN; speed: 156 mph; misc_flags: bitmask(TRAIN_FLAG_TILT, TRAIN_FLAG_MU); track_type: enable_our_own_tracks ? ER2S : ELRL; ai_special_flag: AI_FLAG_PASSENGER; power: 10876 hpM; running_cost_base: RUNNING_COST_ELECTRIC; loading_speed: (260/8); cargo_capacity: 255; // 260 weight: 667 ton; engine_class: ENGINE_CLASS_ELECTRIC; tractive_effort_coefficient: (380.0/(667)/9.8); length: 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); } graphics { default: evs2_sprites; purchase: evs2_purchase_sprites; articulated_part: evs2_articulated_part; can_attach_wagon: string(STR_CAN_ATTACH_NO_MORE); additional_text: return string(STR_EVS2_PURCHASE_HINT); power: evs2_power; cargo_capacity: evs2_cargo_capacity; cost_factor: return 1344; } livery_override(unitb) { length: return 8; visual_effect_and_powered: evs2_b_visual_effect_and_powered; evs2_b_sprites; } livery_override(unitc) { length: return 8; visual_effect_and_powered: visual_effect_and_powered(VISUAL_EFFECT_DISABLE, 0, DISABLE_WAGON_POWER); evs2_c_sprites; } } if (enable_long_names) { item (FEAT_TRAINS, evs2) { property { name: string(STR_EVS2_NAME_LONG); } } }