def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="growler", base_numeric_id=2240, name="Growler", role="freight", role_child_branch_num=1, power=1750, random_reverse=True, gen=4, alternative_cc_livery="RAILFREIGHT_RED_STRIPE", default_livery_extra_docs_examples=[ ("COLOUR_PALE_GREEN", "COLOUR_GREY"), ("COLOUR_PINK", "COLOUR_WHITE"), ], sprites_complete=True, ) consist.add_unit(type=DieselEngineUnit, weight=100, vehicle_length=8, spriterow_num=0) consist.description = """Sounds like a tractor, pulls like a train.""" consist.foamer_facts = """BR Class 37, original TTD UU '37'""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="merrylegs", base_numeric_id=500, name="2-6-2 Merrylegs", role="branch_express", role_child_branch_num=1, power=650, tractive_effort_coefficient=0.2, fixed_run_cost_points=120, # substantial cost bonus so it can make money random_reverse=True, gen=2, sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=49, vehicle_length=6, spriterow_num=0) consist.description = ( """Larks were getting a bit past it. These are right well balanced.""" ) consist.foamer_facts = """GWR 4500 Class <i>Prairie Tank</i>""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="merlion", base_numeric_id=6380, name="Merlion", role="freight", role_child_branch_num=-1, power=1750, tractive_effort_coefficient=0.26, fixed_run_cost_points=42, # give a bonus so this can be a genuine mixed-traffic engine random_reverse=True, gen=4, intro_date_offset=-2, # let's be a littler earlier for this one alternative_cc_livery="RAILFREIGHT_RED_STRIPE", sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=105, vehicle_length=8, effect_offsets=[(2, 0)], spriterow_num=0, ) consist.description = ( """I don't like the looks of it right much, but I suppose it will do.""" ) consist.foamer_facts = """BR Class 31, uprated EE 12CSVT prime mover""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="swift", base_numeric_id=230, name="4-4-2 Swift", role="heavy_express", role_child_branch_num=1, power=1550, tractive_effort_coefficient=0.18, gen=2, sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=80, vehicle_length=6, spriterow_num=0) consist.add_unit(type=SteamEngineTenderUnit, weight=35, vehicle_length=4, spriterow_num=1) consist.description = """Eh it's the right big engine I said they needed. Mr. Raven helped me out a treat with this one.""" consist.foamer_facts = """GNR Class C1, Class C2 <i>Klondike</i>""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="strongbow", base_numeric_id=4320, name="4-6-0 Strongbow", role="heavy_express", role_child_branch_num=1, power=1900, # not an exact linear progression in this tree tractive_effort_coefficient=0.18, gen=3, fixed_run_cost_points= 140, # give a bonus so this can be a genuine mixed-traffic engine sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=96, vehicle_length=6, spriterow_num=0) consist.add_unit(type=SteamEngineTenderUnit, weight=34, vehicle_length=4, spriterow_num=1) consist.description = """Got this one off Mr. Stanier. It'll go anywhere, do anything, for not too much brass.""" consist.foamer_facts = """LMS Jubilee Class, original TTD Chaney 'Jubilee'""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="withershins", base_numeric_id=6390, name="Withershins", role="heavy_freight", role_child_branch_num=-2, power=2900, random_reverse=True, gen=4, fixed_run_cost_points= 118, # minor run cost bonus as default algorithm makes run cost too high #alternative_cc_livery="RAILFREIGHT_RED_STRIPE", default_livery_extra_docs_examples=[ ("COLOUR_PALE_GREEN", "COLOUR_GREY"), ("COLOUR_BLUE", "COLOUR_GREY"), ], sprites_complete=False, ) consist.add_unit(type=DieselEngineUnit, weight=85, vehicle_length=6, spriterow_num=0, repeat=2) consist.description = """.""" consist.foamer_facts = """BR Class 24, BR Class 25""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="chinook", base_numeric_id=120, name="Chinook", role="heavy_freight", role_child_branch_num= 2, # child branch 1 empty, for tech tree drawing reasons (blackthorn and quietus in branch -1) power=2900, gen=4, fixed_run_cost_points= 118, # minor run cost bonus as default algorithm makes run cost too high alternative_cc_livery="RAILFREIGHT_RED_STRIPE", default_livery_extra_docs_examples=[ ("COLOUR_PALE_GREEN", "COLOUR_GREY"), ("COLOUR_BLUE", "COLOUR_GREY"), ], sprites_complete=True, ) consist.add_unit(type=DieselEngineUnit, weight=80, vehicle_length=6, spriterow_num=0) consist.add_unit(type=DieselEngineUnit, weight=80, vehicle_length=6, spriterow_num=1) consist.description = """I send these out in twos.""" consist.foamer_facts = """BR Class 20, uprated EE 8CSVT prime mover""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="blackthorn", base_numeric_id=3470, name="Blackthorn", role="heavy_freight", role_child_branch_num=2, # child branch 1 empty, for tech tree drawing reasons (blackthorn and quietus in branch -1) power=3650, random_reverse=True, gen=6, default_livery_extra_docs_examples=[("COLOUR_MAUVE", "COLOUR_CREAM")], sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=124, vehicle_length=8, spriterow_num=0 ) consist.description = ( """I've fitted a bigger engine into the Grid. Still not bad at all.""" ) consist.foamer_facts = """GBRF Class 69 (re-engineered BR Class 56)""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="thor", base_numeric_id=2030, name="0-4-4-0 Thor", role="universal", role_child_branch_num=2, base_track_type="NG", power=600, tractive_effort_coefficient=0.3, gen=1, intro_date_offset=15, random_reverse=True, sprites_complete=True, ) consist.add_unit( type=SteamEngineUnit, weight=30, vehicle_length=6, effect_offsets=[(-3, 0), (1, 0)], # double the smoke eh? effect_z_offset=10, # reduce smoke z position to suit NG engine height spriterow_num=0, ) consist.description = ( """You could say it's twice the train. A god amongst engines.""") consist.foamer_facts = """Fairlie locomotives""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="zebedee", base_numeric_id=4950, name="Zebedee", role="heavy_express", role_child_branch_num= -3, # it's a joker, tried it as heavy express 4, the power progression and dates are all wrong for that power= 4000, # bit unsure about power on this one, a larger electric is wanted, but don't want to power creep gen 4 too much random_reverse=True, gen=4, pantograph_type="z-shaped-double", intro_date_offset=9, # introduce much later than gen epoch by design default_livery_extra_docs_examples=[("COLOUR_BLUE", "COLOUR_WHITE")], sprites_complete=True, ) consist.add_unit(type=ElectricEngineUnit, weight=82, vehicle_length=8, spriterow_num=0) consist.description = """These were heavy on the track, but we had em back and fitted extra springs.""" consist.foamer_facts = """BR Class 87, Class 86""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="defiant", base_numeric_id=5070, name="Defiant", role="heavy_freight", role_child_branch_num= -2, # child branch 1 empty, for tech tree drawing reasons (blackthorn and quietus in branch -1) power=3650, # dibble for game balance, assume super-slip control tractive_effort_coefficient=0.355, random_reverse=True, gen=6, intro_date_offset=-4, # let's be a little bit earlier for this one fixed_run_cost_points= 280, # run cost nerf as light weight throws the cost too cheap sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=100, # notably low weight vehicle_length=8, spriterow_num=0, ) consist.description = """Amazing what they can do these days isn't it?""" consist.foamer_facts = """Vossloh Eurolight (DRS Class 68)""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="screamer", base_numeric_id=450, name="Screamer", role="heavy_express", role_child_branch_num=-3, power=4800, random_reverse=True, gen=5, pantograph_type="z-shaped-double", intro_date_offset=2, # introduce later than gen epoch by design alternative_cc_livery="FREIGHTLINER_GBRF", default_livery_extra_docs_examples=[ ("COLOUR_WHITE", "COLOUR_BLUE"), ("COLOUR_BLUE", "COLOUR_WHITE"), ("COLOUR_PINK", "COLOUR_DARK_BLUE"), ("COLOUR_WHITE", "COLOUR_RED"), ], sprites_complete=True, ) consist.add_unit( type=ElectricEngineUnit, weight=85, vehicle_length=8, spriterow_num=0 ) consist.description = """We're knocking these out cheap enough. Look after them, they might last longer.""" consist.foamer_facts = """BR Class 90""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="reliance", base_numeric_id=4890, name="2-4-0 Reliance", role="express", role_child_branch_num=-1, replacement_consist_id="carrack", # this Joker ends with Carrack power=950, tractive_effort_coefficient=0.12, fixed_run_cost_points=140, # minor cost bonus so it can make money gen=1, sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=56, vehicle_length=5, spriterow_num=0) consist.add_unit(type=SteamEngineTenderUnit, weight=30, vehicle_length=3, spriterow_num=1) consist.description = """Lots of these about, but ours are best uns.""" consist.foamer_facts = """GWR 3201 <i>Stella</i> Class, generic 2-4-0 locomotives""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="daring", base_numeric_id=4920, name="Daring", role="express", role_child_branch_num=1, power=1750, tractive_effort_coefficient=0.26, fixed_run_cost_points=42, # give a bonus so this can be a genuine mixed-traffic engine random_reverse=True, gen=4, intro_date_offset=1, # let's be a littler later for this one default_livery_extra_docs_examples=[("COLOUR_GREEN", "COLOUR_WHITE")], sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=75, vehicle_length=8, effect_offsets=[(2, 0)], spriterow_num=0, ) consist.description = ( """.""" ) consist.foamer_facts = """BR Class 35 <i>Hymek</i>""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="moor_gallop", base_numeric_id=170, name="Moor Gallop", role="heavy_express", role_child_branch_num=3, power=2400, tractive_effort_coefficient=0.25, random_reverse=True, gen=3, pantograph_type="diamond-double", intro_date_offset=5, # introduce later than gen epoch by design default_livery_extra_docs_examples=[ ("COLOUR_LIGHT_BLUE", "COLOUR_WHITE"), ("COLOUR_PALE_GREEN", "COLOUR_WHITE"), ("COLOUR_DARK_GREEN", "COLOUR_WHITE"), ("COLOUR_BLUE", "COLOUR_BLUE"), ], sprites_complete=True, ) consist.add_unit(type=ElectricEngineUnit, weight=105, vehicle_length=8, spriterow_num=0) consist.description = ( """It's not so hurly-burly, but it's a nice new electric engine for you.""" ) consist.foamer_facts = """LNER EM2 (BR Class 77)""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="flanders_storm", base_numeric_id=1740, name="Flanders Storm", role="heavy_freight", role_child_branch_num=4, power=5800, # big jump from previous, IRL matches class 89 not 92 # dibble for game balance, assume super-slip control tractive_effort_coefficient=0.4, random_reverse=True, gen=5, pantograph_type="z-shaped-double", intro_date_offset=-3, # introduce earlier than gen epoch by design alternative_cc_livery="RAILFREIGHT_TRIPLE_GREY", sprites_complete=True, ) consist.add_unit(type=ElectricEngineUnit, weight=120, vehicle_length=8, spriterow_num=0) consist.description = ( """This is a right proper engine. Does work enough for two.""") consist.foamer_facts = """BR Class 92""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="slug", base_numeric_id=1000, name="Slug", role="freight", role_child_branch_num=1, power= 1950, # progression calculated to maintain hp/speed ratio from previous gen random_reverse=True, gen=5, alternative_cc_livery="RAILFREIGHT_TRIPLE_GREY", default_livery_extra_docs_examples=[ ("COLOUR_GREY", "COLOUR_YELLOW"), ("COLOUR_WHITE", "COLOUR_GREY"), ("COLOUR_GREY", "COLOUR_GREY"), ("COLOUR_PALE_GREEN", "COLOUR_PALE_GREEN"), ("COLOUR_LIGHT_BLUE", "COLOUR_WHITE"), ("COLOUR_YELLOW", "COLOUR_YELLOW"), ], sprites_complete=True, ) consist.add_unit(type=DieselEngineUnit, weight=110, vehicle_length=8, spriterow_num=0) consist.description = """We made these by uprating the Growler engine. New paint too, don't spoil it.""" consist.foamer_facts = """refurbished BR Class 37, with new alternator and uprated engine (per 2,000hp 37292)""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="relentless", base_numeric_id=4400, name="Relentless", role="heavy_express", role_child_branch_num=2, power= 3950, # slightly more than standard progression, to enable higher speed to be reach quickly random_reverse=True, gen=6, intro_date_offset= -7, # let's be earlier on this to keep the mail up with the HSTs etc fixed_run_cost_points= 300, # give a small malus to this one (balancing eh?) sprites_complete=True, ) consist.add_unit(type=DieselEngineUnit, weight=95, vehicle_length=8, spriterow_num=0) consist.description = """Solid piece of kit these.""" consist.foamer_facts = ( """Newag Griffin, Bombardier Traxx 2, Stadler Euro 4001, Siemens EuroRunner""" ) return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="proper_job", base_numeric_id=1300, name="2-6-2 Proper Job", role="branch_express", role_child_branch_num=1, power=800, gen=3, tractive_effort_coefficient=0.2, fixed_run_cost_points=120, # substantial cost bonus so it can make money random_reverse=True, sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=57, vehicle_length=6, spriterow_num=0) consist.description = ( """For when you need proper engine at proper price. Proper Job.""") consist.foamer_facts = """BR Standard Class 3, LMS Ivatt Class 2 and GWR 5101/6100 Class <i>Prairie Tanks</i>""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="gronk", base_numeric_id=3970, name="Gronk", role="gronk!", role_child_branch_num=-1, power=400, speed=35, # dibble TE up for game balance, assume low gearing or something tractive_effort_coefficient=0.375, fixed_run_cost_points=100, # substantial cost bonus so it can make money random_reverse=True, gen=4, intro_date_offset=-9, # introduce much earlier than gen epoch by design vehicle_life=60, # extended vehicle life for all gronks eh sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=55, vehicle_length=4, spriterow_num=0 ) consist.description = """The universal shunter. Goes everywhere…slowly.""" consist.foamer_facts = """BR Class 08/09""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="haar", base_numeric_id=1880, name="0-8-0 Haar", role="freight", role_child_branch_num=1, power=1500, tractive_effort_coefficient=0.24, gen=3, sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=70, vehicle_length=5, spriterow_num=0) consist.add_unit(type=SteamEngineTenderUnit, weight=40, vehicle_length=3, spriterow_num=1) consist.description = ( """This is right ugly, but the shed likes them. Easy to maintain. They'll do.""" ) consist.foamer_facts = """SR Q1 Class, LMS Class 7F""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="avenger", base_numeric_id=4860, name="Avenger", role="heavy_express", role_child_branch_num=4, power=5800, random_reverse=True, gen=5, pantograph_type="z-shaped-single", intro_date_offset= -2, # introduce slightly earlier than gen epoch by design sprites_complete=True, ) consist.add_unit(type=ElectricEngineUnit, weight=100, vehicle_length=8, spriterow_num=0) consist.description = """Daft as a brush if you ask me. Or mad as a badger. Goes like stink off a shovel though.""" consist.foamer_facts = """BR Class 89""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="resilient", base_numeric_id=4940, name="Resilient", role="heavy_express", role_child_branch_num=-1, power=2550, random_reverse=True, gen=5, intro_date_offset=-4, # let's not have everything turn up in 1990 fixed_run_cost_points= 65, # give a bonus so this can be a genuine mixed-traffic engine alternative_cc_livery="PLAIN_NOT_INTERCITY", default_livery_extra_docs_examples=[("COLOUR_BLUE", "COLOUR_WHITE")], sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=112, vehicle_length=8, effect_offsets=[(2, 0)], spriterow_num=0, ) consist.description = """I've completely rebuilt some Intrepids.""" consist.foamer_facts = """BR Class 47, Brush Class 57, original TTD UU '47'""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="saxon", base_numeric_id=1330, name="0-8-0 Saxon", role="branch_freight", role_child_branch_num=1, power=1000, # dibble TE up for game balance, assume low gearing or something tractive_effort_coefficient=0.375, random_reverse=True, gen=3, intro_date_offset=-8, # introduce earlier than gen epoch by design sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=65, vehicle_length=6, spriterow_num=0) consist.description = """I didn't do these, we've shipped them in. On ships like. On the sea. They pull well mind you.""" consist.foamer_facts = """SR Z class, SR USA class (USATC S100 Class)""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="bean_feast", base_numeric_id=240, name="2-6-4 Bean Feast", role="universal", role_child_branch_num=1, base_track_type="NG", power=400, tractive_effort_coefficient=0.2, gen=2, random_reverse=True, sprites_complete=True, ) consist.add_unit( type=SteamEngineUnit, weight=22, vehicle_length=4, effect_z_offset=10, # reduce smoke z position to suit NG engine height spriterow_num=0, ) consist.description = """Great power and small size. We tested it in the field.""" consist.foamer_facts = """generic narrow-gauge steam locomotives""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="vanguard", base_numeric_id=3090, name="Vanguard", role="heavy_express", role_child_branch_num=1, power=2550, # dibble, assume super-slip control, intent is to give higher TE as a non-significant variation from Resilient tractive_effort_coefficient=0.4, random_reverse=True, gen=5, intro_date_offset=2, # let's not have everything turn up in 1990 fixed_run_cost_points= 55, # give a bonus so this can be a genuine mixed-traffic engine alternative_cc_livery="RAILFREIGHT_TRIPLE_GREY", sprites_complete=True, ) consist.add_unit(type=DieselEngineUnit, weight=115, vehicle_length=8, spriterow_num=0) consist.description = """They said they wanted these for a freight engine. No I said. We need a general purpose engine I said. We talked about it for twenty minutes then we decided I was right.""" consist.foamer_facts = """proposed BR Class 38/41/48""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="thunderer", base_numeric_id=4830, name="4-6-0 Thunderer", # shorter 2-6-0 version was tried, but doesn't fit a power band gap in the mixed traffic roster role="heavy_express", role_child_branch_num=-1, replacement_consist_id="wyvern", # this Joker ends with Wyvern, long-lived power=1500, # slightly less than the Swift (and lighter engine) tractive_effort_coefficient=0.2, fixed_run_cost_points=140, # give a bonus so this can be a genuine mixed-traffic engine gen=2, intro_date_offset=10, # introduce later than gen epoch by design sprites_complete=True, ) consist.add_unit(type=SteamEngineUnit, weight=82, vehicle_length=6, spriterow_num=0) consist.add_unit( type=SteamEngineTenderUnit, weight=30, vehicle_length=4, spriterow_num=1 ) consist.description = """Bit of an odd beast this one. It's quite happy on passengers and mail or you can put it on freight. Right long-lived too.""" consist.foamer_facts = """GWR 2900 <i>Saint</i> Class, GWR 4000 <i>Star</i> Class""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="cheese_bug", base_numeric_id=490, name="2-6-2 Cheese Bug", role="universal", role_child_branch_num=1, base_track_type="NG", power=350, tractive_effort_coefficient=0.2, gen=1, random_reverse=True, sprites_complete=True, ) consist.add_unit( type=SteamEngineUnit, weight=16, vehicle_length=4, effect_z_offset=10, # reduce smoke z position to suit NG engine height spriterow_num=0, ) consist.description = """I present you this trusty little engine.""" consist.foamer_facts = """generic narrow-gauge steam locomotives""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="magnum_70", base_numeric_id=4960, name="Magnum 70", role="gronk!", role_child_branch_num=-2, power=500, speed=35, # dibble TE up for game balance, assume low gearing or something tractive_effort_coefficient=0.375, fixed_run_cost_points=100, # substantial cost bonus so it can make money random_reverse=True, gen=6, intro_date_offset=-6, # introduce earlier than gen epoch by design vehicle_life=60, # extended vehicle life for all gronks eh sprites_complete=True, ) consist.add_unit(type=DieselEngineUnit, weight=70, vehicle_length=4, spriterow_num=0) consist.description = """Even Gronks don't last forever.""" consist.foamer_facts = """Clayton CB40/CBD80/CBD90""" return consist
def main(roster_id): consist = EngineConsist( roster_id=roster_id, id="maximillian", base_numeric_id=5910, name="Maximillian", role="universal", role_child_branch_num=2, power=900, random_reverse=True, base_track_type="NG", gen=4, intro_date_offset=10, sprites_complete=True, ) consist.add_unit( type=DieselEngineUnit, weight=31, vehicle_length=6, effect_z_offset=9, # reduce smoke z position to suit NG engine height spriterow_num=0, ) consist.description = """The ultimate narrow gauge diesel.""" consist.foamer_facts = ( """CFD Locotracteur BB-400, South African 'Funkey' diesels, FAUR L45H B-B""" ) return consist