// Thanks to Andy for letting me steal a chunk of his NRT NML, and thanks to Wolf and Frosch as well for their work on making NRT happen. // ISR, CHIPS, various New Object sets, have tried to approximate visually interesting industrial yards, harbours, and similar areas where vehicles move about doing work rather than travelling from A to B // In this set I aim to provide a proof of concept of how NRT might bring these constructions to life grf { grfid: "DE\06\01"; name: string(STR_GRF_NAME); desc: string(STR_GRF_DESCRIPTION); version: 0; min_compatible_version: 0; } // Type Tables // ----------- roadtypetable { DIRT, GRAV, EGRV, ROAD, ESTN, ASPT, ELRD, HWAY, } // tram is light rail so copy existing railtype labels where appropriate (for ease, no new thinking required) // as per https://newgrf-specs.tt-wiki.net/wiki/RailtypeLabels tramtypetable { RLOW, ELOW, RAIL, ELRL, MLRL, EMLR, } // Type Definitions // ---------------- //roadtypes item(FEAT_ROADTYPES, dirt_road, 0) { property { name: string(STR_NAME_DIRT); label: "DIRT"; speed_limit: 50 km/h; introduction_date: date(0000,01,01); construction_cost: 4; maintenance_cost: 6; powered_roadtype_list: ["GRAV", "EGRV", "ROAD", "ESTN", "ASPT", "ELRD", "HWAY"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_DIRT); menu_text: string(STR_MENU_TEXT_DIRT); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_DIRT); autoreplace_text: string(STR_AUTOREPLACE_TEXT_DIRT); new_engine_text: string(STR_NEW_ENGINE_TEXT_DIRT); } graphics { underlay: dirt_road_underlay; track_overlay: dirt_road_overlay; depots: dirt_road_depots; bridge_surfaces: dirt_road_bridge_surfaces; roadstops: dirt_road_roadstops; } } item(FEAT_ROADTYPES, gravel_road, 1) { property { name: string(STR_NAME_GRAV); label: "GRAV"; speed_limit: 70 km/h; introduction_date: date(1800,01,01); construction_cost: 8; maintenance_cost: 12; powered_roadtype_list: ["DIRT", "EGRV", "ROAD", "ESTN", "ASPT", "ELRD", "HWAY"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_GRAV); menu_text: string(STR_MENU_TEXT_GRAV); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_GRAV); autoreplace_text: string(STR_AUTOREPLACE_TEXT_GRAV); new_engine_text: string(STR_NEW_ENGINE_TEXT_GRAV); } graphics { underlay: gravel_road_underlay; track_overlay: gravel_road_overlay; depots: gravel_road_depots; bridge_surfaces: gravel_road_bridge_surfaces; roadstops: gravel_road_roadstops; } } item(FEAT_ROADTYPES, electric_gravel_road, 2) { property { name: string(STR_NAME_EGRV); label: "EGRV"; speed_limit: 70 km/h; introduction_date: construction_cost: 14; maintenance_cost: 18; powered_roadtype_list: ["ELRD", "ESTN"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_EGRV); menu_text: string(STR_MENU_TEXT_EGRV); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_EGRV); autoreplace_text: string(STR_AUTOREPLACE_TEXT_EGRV); new_engine_text: string(STR_NEW_ENGINE_TEXT_EGRV); } graphics { underlay: gravel_road_underlay; track_overlay: gravel_road_overlay; depots: gravel_road_depots; bridge_surfaces: gravel_road_bridge_surfaces; roadstops: gravel_road_roadstops; catenary_back: rear_bus_wood; catenary_front: front_bus_wood; } } item(FEAT_ROADTYPES, stone_road, 3) { property { name: string(STR_NAME_ROAD); label: "ROAD"; speed_limit: 80 km/h; introduction_date: date(0000,01,01); construction_cost: 20; maintenance_cost: 24; powered_roadtype_list: ["DIRT", "EGRV", "ROAD", "ESTN", "ASPT", "ELRD", "HWAY"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_ROAD); menu_text: string(STR_MENU_TEXT_ROAD); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_ROAD); autoreplace_text: string(STR_AUTOREPLACE_TEXT_ROAD); new_engine_text: string(STR_NEW_ENGINE_TEXT_ROAD); } graphics { underlay: stone_road_underlay; track_overlay: stone_road_overlay; depots: stone_road_depots; bridge_surfaces: stone_road_bridge_surfaces; roadstops: stone_road_roadstops; } } item(FEAT_ROADTYPES, electric_stone_road, 4) { property { name: string(STR_NAME_ESTN); label: "ESTN"; speed_limit: 80 km/h; construction_cost: 26; maintenance_cost: 30; powered_roadtype_list: ["ELRD", "EGRV"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_ESTN); menu_text: string(STR_MENU_TEXT_ESTN); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_ESTN); autoreplace_text: string(STR_AUTOREPLACE_TEXT_ESTN); new_engine_text: string(STR_NEW_ENGINE_TEXT_ESTN); } graphics { underlay: stone_road_underlay; track_overlay: stone_road_overlay; depots: stone_road_depots; bridge_surfaces: stone_road_bridge_surfaces; roadstops: stone_road_roadstops; catenary_back: rear_bus_galv; catenary_front: front_bus_galv; } } item(FEAT_ROADTYPES, asphalt_road, 5) { property { name: string(STR_NAME_ASPT); label: "ROAD"; speed_limit: 100 km/h; introduction_date: date(1910,01,01); construction_cost: 16; maintenance_cost: 24; powered_roadtype_list: ["DIRT", "GRAV", "EGRV", "ROAD", "ESTN", "ELRD", "HWAY"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_ASPT); menu_text: string(STR_MENU_TEXT_ASPT); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_ASPT); autoreplace_text: string(STR_AUTOREPLACE_TEXT_ASPT); new_engine_text: string(STR_NEW_ENGINE_TEXT_ASPT); } graphics { underlay: asphalt_road_underlay; track_overlay: asphalt_road_overlay; depots: asphalt_road_depots; bridge_surfaces: asphalt_road_bridge_surfaces; roadstops: asphalt_road_roadstops; } } item(FEAT_ROADTYPES, electric_asphalt_road, 6) { property { name: string(STR_NAME_ELRD); label: "ELRD"; speed_limit: 100 km/h; construction_cost: 24; maintenance_cost: 30; powered_roadtype_list: ["EGRV", "ESTN"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_ELRD); menu_text: string(STR_MENU_TEXT_ELRD); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_ELRD); autoreplace_text: string(STR_AUTOREPLACE_TEXT_ELRD); new_engine_text: string(STR_NEW_ENGINE_TEXT_ELRD); } graphics { underlay: asphalt_road_underlay; track_overlay: asphalt_road_overlay; depots: asphalt_road_depots; bridge_surfaces: asphalt_road_bridge_surfaces; roadstops: asphalt_road_roadstops; catenary_back: rear_bus_galv; catenary_front: front_bus_galv; } } item(FEAT_ROADTYPES, highway_road, 7) { property { name: string(STR_NAME_HWAY); label: "HWAY"; introduction_date: date(1950,01,01); construction_cost: 40; maintenance_cost: 40; powered_roadtype_list: ["DIRT", "GRAV", "EGRV", "ROAD", "ESTN", "ASPT", "ELRD"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_HWAY); menu_text: string(STR_MENU_TEXT_HWAY); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_HWAY); autoreplace_text: string(STR_AUTOREPLACE_TEXT_HWAY); new_engine_text: string(STR_NEW_ENGINE_TEXT_HWAY); } graphics { underlay: highway_road_underlay; track_overlay: highway_road_overlay; depots: highway_road_depots; bridge_surfaces: highway_road_bridge_surfaces; roadstops: highway_road_roadstops; } } //tramtypes item(FEAT_TRAMTYPES, rough_tramway, 0) { property { name: string(STR_NAME_RLOW); label: "RLOW"; construction_cost: 8; maintenance_cost: 10; speed_limit: 50 km/h; powered_tramtype_list: ["ELOW", "RAIL", "ELRL", "MLRL", "EMLR"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_RLOW); menu_text: string(STR_MENU_TEXT_RLOW); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_RLOW); autoreplace_text: string(STR_AUTOREPLACE_TEXT_RLOW); new_engine_text: string(STR_NEW_ENGINE_TEXT_RLOW); } graphics { underlay: rough_tram_underlay; track_overlay: univ_tram_overlay; depots: rough_tram_depots; bridge_surfaces: rough_tram_bridge_surfaces; } } item(FEAT_TRAMTYPES, electric_rough_tramway, 1) { property { name: string(STR_NAME_ELOW); label: "ELOW"; introduction_date: date(1870,01,01); construction_cost: 14; maintenance_cost: 16; speed_limit: 50 km/h; powered_tramtype_list: ["ELRL", "EMLR"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_ELOW); menu_text: string(STR_MENU_TEXT_ELOW); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_ELOW); autoreplace_text: string(STR_AUTOREPLACE_TEXT_ELOW); new_engine_text: string(STR_NEW_ENGINE_TEXT_ELOW); tramtype_flags: bitmask(TRAMTYPE_FLAG_CATENARY); } graphics { underlay: rough_tram_underlay; track_overlay: univ_tram_overlay; depots: rough_tram_depots; bridge_surfaces: rough_tram_bridge_surfaces; catenary_back: rear_tram_wood; catenary_front: front_tram_wood; } } item(FEAT_TRAMTYPES, basic_tramway, 2) { property { name: string(STR_NAME_RAIL); label: "RAIL"; speed_limit: 80 km/h; introduction_date: date(1880,01,01); construction_cost: 14; maintenance_cost: 22; powered_tramtype_list: ["RLOW", "ELOW", "ELRL", "MLRL", "EMLR"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_RAIL); menu_text: string(STR_MENU_TEXT_RAIL); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_RAIL); autoreplace_text: string(STR_AUTOREPLACE_TEXT_RAIL); new_engine_text: string(STR_NEW_ENGINE_TEXT_RAIL); } graphics { underlay: basic_tram_underlay; track_overlay: univ_tram_overlay; depots: basic_tram_depots; bridge_surfaces: basic_tram_bridge_surfaces; } } item(FEAT_TRAMTYPES, electric_basic_tramway, 3) { property { name: string(STR_NAME_ELRL); label: "ELRL"; speed_limit: 80 km/h; introduction_date: date(1880,01,01); construction_cost: 24; maintenance_cost: 28; powered_tramtype_list: ["ELOW", "EMLR"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_ELRL); menu_text: string(STR_MENU_TEXT_ELRL); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_ELRL); autoreplace_text: string(STR_AUTOREPLACE_TEXT_ELRL); new_engine_text: string(STR_NEW_ENGINE_TEXT_ELRL); tramtype_flags: bitmask(TRAMTYPE_FLAG_CATENARY); } graphics { underlay: basic_tram_underlay; track_overlay: univ_tram_overlay; depots: basic_tram_depots; bridge_surfaces: basic_tram_bridge_surfaces; catenary_back: rear_tram_wood; catenary_front: front_tram_wood; } } item(FEAT_TRAMTYPES, modern_tramway, 4) { property { name: string(STR_NAME_MLRL); label: "MLRL"; introduction_date: date(1980,01,01); construction_cost: 30; maintenance_cost: 28; powered_tramtype_list: ["RLOW", "ELOW", "RAIL", "ELRL", "EMLR"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_MLRL); menu_text: string(STR_MENU_TEXT_MLRL); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_MLRL); autoreplace_text: string(STR_AUTOREPLACE_TEXT_MLRL); new_engine_text: string(STR_NEW_ENGINE_TEXT_MLRL); } graphics { underlay: modern_tram_underlay; track_overlay: univ_tram_overlay; depots: modern_tram_depots; bridge_surfaces: modern_tram_bridge_surfaces; } } item(FEAT_TRAMTYPES, electric_modern_tramway, 5) { property { name: string(STR_NAME_EMLR); label: "EMLR"; introduction_date: date(1980,01,01); construction_cost: 30; maintenance_cost: 34; powered_tramtype_list: ["ELOW", "ELRL"]; toolbar_caption: string(STR_TOOLBAR_CAPTION_EMLR); menu_text: string(STR_MENU_TEXT_EMLR); build_window_caption: string(STR_BUILD_WINDOW_CAPTION_EMLR); autoreplace_text: string(STR_AUTOREPLACE_TEXT_EMLR); new_engine_text: string(STR_NEW_ENGINE_TEXT_EMLR); tramtype_flags: bitmask(TRAMTYPE_FLAG_CATENARY); } graphics { underlay: modern_tram_underlay; track_overlay: univ_tram_overlay; depots: modern_tram_depots; bridge_surfaces: modern_tram_bridge_surfaces; catenary_back: rear_tram_wood; catenary_front: front_tram_wood; } } // Sprites // ------- /* // Default ground tile template (re-use as needed) template ground_tile(x, y) { [x, y, 64, 31, -31, 0] } // Template for underlays; 2x straight road, 5x junctions, 4x corners, 4x slope, 4x half-tile road // Used for bridge surfaces also, therefore the template is split template tmpl_underlay_straight() { ground_tile( 10, 10) ground_tile( 80, 10) } template tmpl_underlay_junctions() { ground_tile(150, 10) ground_tile(220, 10) ground_tile(290, 10) ground_tile(360, 10) ground_tile( 10, 50) } template tmpl_underlay_corners() { ground_tile( 80, 50) ground_tile(150, 50) ground_tile(220, 50) ground_tile(290, 50) } template tmpl_underlay_slope() { [150, 170, 64, 39, -31, -8] [220, 170, 64, 23, -31, 0] [290, 170, 64, 23, -31, 0] [360, 170, 64, 39, -31, -8] } template tmpl_underlay_half_tiles() { ground_tile(360, 50) ground_tile( 10, 90) ground_tile( 80, 90) ground_tile(150, 90) } template tmpl_underlay_roadtypes() { tmpl_underlay_straight() tmpl_underlay_junctions() tmpl_underlay_corners() tmpl_underlay_slope() tmpl_underlay_half_tiles() /* X-crossing */ ground_tile(0, 120) /* underlay for crossings w/o tracks */ ground_tile( 0, 130) ground_tile(225, 130) ground_tile(150, 130) ground_tile( 75, 130) } spriteset(dirt_road_underlay, "gfx/road_dirt_over.png") { tmpl_underlay_roadtypes() } spriteset(gravel_road_underlay, "gfx/road_gravel_over.png") { tmpl_underlay_roadtypes() } spriteset(stone_road_underlay, "gfx/road_stone_over.png") { tmpl_underlay_roadtypes() } spriteset(asphalt_road_underlay, "gfx/road_asphalt_over.png") { tmpl_underlay_roadtypes() } spriteset(highway_road_underlay, "gfx/road_hway_over.png") { tmpl_underlay_roadtypes() } spriteset(rough_tram_underlay, "gfx/tram_rough_under.png") { tmpl_underlay_roadtypes() } spriteset(basic_tram_underlay, "gfx/tram_basic_under.png") { tmpl_underlay_roadtypes() } spriteset(modern_tram_underlay, "gfx/tram_modern_under.png") { tmpl_underlay_roadtypes() } // overlays template tmpl_overlay_roadtypes() { [ 10, 10, 64, 31, -31, 0] [ 80, 10, 64, 31, -31, 0] [150, 10, 64, 31, -31, 0] [220, 10, 64, 31, -31, 0] [290, 10, 64, 31, -31, 0] [360, 10, 64, 31, -31, 0] [ 10, 50, 64, 31, -31, 0] [ 80, 50, 64, 31, -31, 0] [150, 50, 64, 31, -31, 0] [220, 50, 64, 31, -31, 0] [290, 50, 64, 31, -31, 0] [150, 170, 64, 39, -31, -8] [220, 170, 64, 21, -31, 0] [290, 170, 64, 21, -31, 0] [360, 170, 64, 39, -31, -8] [360, 50, 64, 31, -31, 0] [ 10, 90, 64, 31, -31, 0] [ 80, 90, 64, 31, -31, 0] [150, 90, 64, 31, -31, 0] } spriteset(dirt_road_overlay, "gfx/road_dirt_over.png") { tmpl_overlay_roadtypes() } spriteset(gravel_road_overlay, "gfx/road_gravel_over.png") { tmpl_overlay_roadtypes() } spriteset(stone_road_overlay, "gfx/road_stone_over.png") { tmpl_overlay_roadtypes() } spriteset(asphalt_road_overlay, "gfx/road_asphalt_over.png") { tmpl_overlay_roadtypes() } spriteset(highway_road_overlay, "gfx/road_hway_over.png") { tmpl_overlay_roadtypes() } spriteset(rough_tram_overlay, "gfx/tram_rough_over.png") { tmpl_overlay_roadtypes() } spriteset(basic_tram_overlay, "gfx/tram_basic_over.png") { tmpl_overlay_roadtypes() } spriteset(modern_tram_overlay, "gfx/tram_modern_over.png") { tmpl_overlay_roadtypes() } // Template for depot sprites template tmpl_depot() { [150, 218, 64, 61, -31, -30] [220, 218, 64, 61, -1, -45] [ 10, 218, 64, 61, -31, -30] [ 80, 218, 64, 61, -61, -45] [290, 218, 64, 61, -61, -45] [360, 218, 64, 61, -1, -45] } spriteset(dirt_road_depots, "gfx/road_dirt_over.png") { tmpl_depot() } spriteset(gravel_road_depots, "gfx/road_gravel_over.png") { tmpl_depot() } spriteset(stone_road_depots, "gfx/road_stone_over.png") { tmpl_depot() } spriteset(asphalt_road_depots, "gfx/road_asphalt_over.png") { tmpl_depot() } spriteset(highway_road_depots, "gfx/road_hway_over.png") { tmpl_depot() } spriteset(rough_tram_depots, "gfx/tram_rough_over.png") { tmpl_depot() } spriteset(basic_tram_depots, "gfx/tram_basic_over.png") { tmpl_depot() } spriteset(modern_tram_depots, "gfx/tram_modern_over.png") { tmpl_depot() } // Bridge surface, uses the same sprites as track underlays, but in a different order template tmpl_bridge_straight() { ground_tile( 10, 288) ground_tile( 80, 288) } template tmpl_bridge_slope() { [150, 288, 64, 39, -31, -8] [220, 288, 64, 23, -31, 0] [290, 288, 64, 23, -31, 0] [360, 288, 64, 39, -31, -8] } template tmpl_bridge_surfaces() { tmpl_bridge_straight() tmpl_bridge_slope() } spriteset(dirt_road_bridge_surfaces, "gfx/road_dirt_over.png") { tmpl_bridge_surfaces() } spriteset(gravel_road_bridge_surfaces, "gfx/road_gravel_over.png") { tmpl_bridge_surfaces() } spriteset(stone_road_bridge_surfaces, "gfx/road_stone_over.png") { tmpl_bridge_surfaces() } spriteset(asphalt_road_bridge_surfaces, "gfx/road_asphalt_over.png") { tmpl_bridge_surfaces() } spriteset(highway_road_bridge_surfaces, "gfx/road_hway_over.png") { tmpl_bridge_surfaces() } spriteset(rough_tram_bridge_surfaces, "gfx/tram_rough_over.png") { tmpl_bridge_surfaces() } spriteset(basic_tram_bridge_surfaces, "gfx/tram_basic_over.png") { tmpl_bridge_surfaces() } spriteset(modern_tram_bridge_surfaces, "gfx/tram_modern_over.png") { tmpl_bridge_surfaces() } // Roadstop sprites: template tmpl_underlay_roadstop() { ground_tile(220, 90) ground_tile(290, 90) ground_tile(360, 90) ground_tile(10, 130) } spriteset(mud_road_roadstops, "gfx/Chips_Mud_Road.png") { tmpl_underlay_roadstop() } spriteset(dirt_road_roadstops, "gfx/road_dirt_over.png") { tmpl_underlay_roadstop() } spriteset(gravel_road_roadstops, "gfx/road_gravel_over.png") { tmpl_underlay_roadstop() } spriteset(stone_road_roadstops, "gfx/road_stone_over.png") { tmpl_underlay_roadstop() } spriteset(asphalt_road_roadstops, "gfx/road_asphalt_over.png") { tmpl_underlay_roadstop() } spriteset(highway_road_roadstops, "gfx/road_hway_over.png") { tmpl_underlay_roadstop() } */ //Trolley Wires template tmpl_wire_roadtypes() { [ 10, 10, 64, 31, -31, 0] [ 80, 10, 64, 31, -31, 0] [150, 10, 64, 31, -31, 0] [220, 10, 64, 31, -31, 0] [290, 10, 64, 31, -31, 0] [360, 10, 64, 31, -31, 0] [ 10, 50, 64, 31, -31, 0] [ 80, 50, 64, 31, -31, 0] [150, 50, 64, 31, -31, 0] [220, 50, 64, 31, -31, 0] [290, 50, 64, 31, -31, 0] [150, 170, 64, 39, -31, -8] [220, 170, 64, 21, -31, 0] [290, 170, 64, 21, -31, 0] [360, 170, 64, 39, -31, -8] [360, 50, 64, 31, -31, 0] [ 10, 90, 64, 31, -31, 0] [ 80, 90, 64, 31, -31, 0] [150, 90, 64, 31, -31, 0] } spriteset(rear_bus_wood, "gfx/wires/rear_wood.png") { tmpl_wire_roadtypes() } spriteset(rear_bus_galv, "gfx/wires/rear_galv.png") { tmpl_wire_roadtypes() } spriteset(rear_bus_cat, "gfx/wires/rear_cat.png") { tmpl_wire_roadtypes() } spriteset(front_bus_wood, "gfx/wires/front_bus_wood.png") { tmpl_wire_roadtypes() } spriteset(front_bus_galv, "gfx/wires/front_bus_galv.png") { tmpl_wire_roadtypes() } spriteset(front_bus_cat, "gfx/wires/front_bus_cat.png") { tmpl_wire_roadtypes() } spriteset(rear_tram_wood, "gfx/wires/rear_wood.png") { tmpl_wire_roadtypes() } spriteset(rear_tram_galv, "gfx/wires/rear_galv.png") { tmpl_wire_roadtypes() } spriteset(rear_tram_cat, "gfx/wires/rear_cat.png") { tmpl_wire_roadtypes() } spriteset(front_tram_wood, "gfx/wires/front_tram_wood.png") { tmpl_wire_roadtypes() } spriteset(front_tram_galv, "gfx/wires/front_tram_galv.png") { tmpl_wire_roadtypes() } spriteset(front_tram_cat, "gfx/wires/front_tram_cat.png") { tmpl_wire_roadtypes() }