Script symbols
The index lists top-level functions, properties, signals, constants, and named enums from the simulation and mod-related classes. Signatures and source comments are in English. Mod defines the scripting hooks. Other classes and underscore-prefixed members can change between releases.
Results
No matching symbols.
Mod
Mod.infovarMetadata for the loaded mod.Link to this entryvar info := {}Common keys are
Declared inid,name,version,author,description, andpath. Use this to inspect which copy was loaded.scripts/core/mod.gd:21Mod._on_loadfuncRuns after Fourways reapplies enabled mods, including after a rescan.Link to this entryfunc _on_load() -> voidRead mod files or initialize settings here. Use
_on_new_gameor_on_game_loadedfor work that needs a simulation.- Returns
void
scripts/core/mod.gd:25Mod._on_new_gamefuncA new game has been created (world generated, companies founded), before the first day.Link to this entryfunc _on_new_game(_sim: Sim) -> void- Parameters
_sim: Sim
- Returns
void
scripts/core/mod.gd:30Mod._on_game_loadedfuncA saved game has been loaded.Link to this entryfunc _on_game_loaded(_sim: Sim) -> void- Parameters
_sim: Sim
- Returns
void
scripts/core/mod.gd:35Mod._on_dayfuncRuns once for each simulated calendar day after daily town, competitor and vehicle updates, and before the daily goal checks and month-end bookkeeping.Link to this entryfunc _on_day(_sim: Sim) -> voidRead
sim.day_intfor the day that has just started.- Parameters
_sim: Sim
- Returns
void
scripts/core/mod.gd:40Mod._on_monthfuncRuns at the month boundary after Fourways closes the previous month’s accounts.Link to this entryfunc _on_month(_sim: Sim) -> voidMoney credited here is recorded in the new month.
- Parameters
_sim: Sim
- Returns
void
Example
Declared infunc _on_month(sim: Sim) -> void: sim.company.earn(500) news(sim, L.t("Monthly transport grant"), "good")scripts/core/mod.gd:45Mod._on_yearfuncAt the start of every year;yearis the one that has just ended.Link to this entryfunc _on_year(_sim: Sim, _year: int) -> void- Parameters
_sim: Sim_year: int
- Returns
void
scripts/core/mod.gd:50Mod._on_deliveryfuncRuns after a vehicle earns a fare by delivering cargo.Link to this entryfunc _on_delivery(_sim: Sim, _vehicle: Vehicle, _station: Station, _amount: int) -> voidamountis the total payment for that unload, in game dollars. It is not the number of units delivered or a per-cargo breakdown.- Parameters
_sim: Sim_vehicle: Vehicle_station: Station_amount: int
- Returns
void
scripts/core/mod.gd:55Mod._on_vehicle_boughtfuncA vehicle has been bought.Link to this entryfunc _on_vehicle_bought(_sim: Sim, _vehicle: Vehicle) -> void- Parameters
_sim: Sim_vehicle: Vehicle
- Returns
void
scripts/core/mod.gd:60Mod._on_station_builtfuncA station has been built (or extended).Link to this entryfunc _on_station_built(_sim: Sim, _station: Station) -> void- Parameters
_sim: Sim_station: Station
- Returns
void
scripts/core/mod.gd:65Mod._on_newsfuncRuns before a news item is posted.Link to this entryfunc _on_news(_sim: Sim, _item: Dictionary) -> boolReturn
falseto suppress it ortrueto let it proceed through the other active mods. The item includestext,kind,pos, andday. Posting news from this hook calls the hook again.- Parameters
_sim: Sim_item: Dictionary
- Returns
bool
scripts/core/mod.gd:70Mod._savefuncReturns the mod’s persistent state as a dictionary of plain values.Link to this entryfunc _save(_sim: Sim) -> DictionaryAn empty dictionary is omitted, so
_loadwill not run for that save. Return the data rather than writing a separate file.- Parameters
_sim: Sim
- Returns
Dictionary
scripts/core/mod.gd:76Mod._loadfuncRestores this mod’s data before_on_game_loaded.Link to this entryfunc _load(_sim: Sim, _data: Dictionary) -> voidCalled only if the save contains a dictionary for this mod’s ID. Use
data.get("key", default)so older saves can omit keys added by a later mod version.- Parameters
_sim: Sim_data: Dictionary
- Returns
void
scripts/core/mod.gd:80Mod.newsfuncPost a news item ("good", "info", "warn" or "bad").Link to this entryfunc news(sim: Sim, text: String, kind: String = "info", at: Vector2 = Vector2(-1, -1)) -> voidatis a tile to jump to when it's clicked.- Parameters
sim: Simtext: Stringkind: String = "info"at: Vector2 = Vector2(-1, -1)
- Returns
void
scripts/core/mod.gd:87Mod.notefuncWrite a line to the game's log, tagged with the mod's id.Link to this entryfunc note(text: String) -> void- Parameters
text: String
- Returns
void
scripts/core/mod.gd:92Mod.pathfuncA file inside the mod's folder, e.g.Link to this entryfunc path(file: String) -> Stringpath("data/extra.json").
- Parameters
file: String
- Returns
String
scripts/core/mod.gd:97
Sim
Sim.news_postedsignal{"text", "kind": good|info|warn|bad, "pos": Vector2, "day"[, "veh"][, "urgent"][, "world"]}Link to this entrysignal news_posted(item: Dictionary)- Parameters
item: Dictionary
- Returns
signal news_posted(item: Dictionary)
scripts/sim/sim.gd:6Sim.incomesignalLink to this entrysignal income(vehicle: Vehicle, station: Station, amount: int)- Parameters
vehicle: Vehiclestation: Stationamount: int
- Returns
signal income(vehicle: Vehicle, station: Station, amount: int)
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:7Sim.vehicles_changedsignalLink to this entrysignal vehicles_changed- Returns
signal vehicles_changed
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:8Sim.company_bankruptsignalLink to this entrysignal company_bankrupt(c: Company)- Parameters
c: Company
- Returns
signal company_bankrupt(c: Company)
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:9Sim.SPEEDSconstLink to this entryconst SPEEDS := [0, 1, 2, 4, 8]This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:11Sim.mapvarThe live world map.Link to this entryvar map: WorldMapUse it to read towns, industries, stations, and terrain. Use simulation construction methods when changing infrastructure.
Declared inscripts/sim/sim.gd:13Sim.companiesvarThe companies in the current simulation, including the player.Link to this entryvar companies: Array[Company] = []Compare a vehicle or station’s owner with a company object to filter its assets.
Declared inscripts/sim/sim.gd:14Sim.companyvarThe player’s company.Link to this entryvar company: CompanyUse its
Declared inidfor council ratings and itsearn()andspend()methods to record changes in the accounts.scripts/sim/sim.gd:15Sim.vehiclesvarThe vehicles active in the current simulation.Link to this entryvar vehicles: Array[Vehicle] = []Use buying and selling methods to manage ownership and accounting.
Declared inscripts/sim/sim.gd:16Sim.next_vehicle_idvarLink to this entryvar next_vehicle_id := 1This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:17Sim.seed_valuevarLink to this entryvar seed_value := 0This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:18Sim.rngvarThe simulation’s seeded random-number generator.Link to this entryvar rng := RandomNumberGenerator.new()Calls advance the same random stream the simulation uses.
Declared inscripts/sim/sim.gd:19Sim.dayvarLink to this entryvar day := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:20Sim.day_intvarLink to this entryvar day_int := 0This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:21Sim.speedvarLink to this entryvar speed := 1This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:22Sim.newsvarLink to this entryvar news: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:23Sim.aisvarAI controllers (see ai.gd)Sim.optionsvarGame rules chosen at setup: "cost" construction cost multiplier, "blocking" (trains wait for each other at signals, and crash into each other where there are none), "ai_level" 0..2, "max_loan".Link to this entryvar options := {"cost": 1.0, "blocking": false, "ai_level": 1, "max_loan": Data.MAX_LOAN, "depots": false, "breakdowns": 0, "goal": "none"}"depots": road vehicles and trains are bought at (and serviced in) depots; "breakdowns" 0..2; "goal": the company goal (one of Goals.GOAL_IDS).
Declared inscripts/sim/sim.gd:29Sim.occupiedvarsignal block id -> Vehicle (realistic blocking only)Sim.CRASH_RconstTrain crashes (see _check_crashes).Link to this entryconst CRASH_R := 0.25Not saved: after loading, trains that already overlap are let go until they part. how close a train's nose may come to another train before they touch
Declared inscripts/sim/sim.gd:33Sim.CRASH_STEPconstthe most a train moves between two crash checksSim.CRASH_CELLconstmap cells (in tiles) for finding trains near each otherSim._touchingvar"id:id" -> true: trains overlapping at the last check that didn't crashSim._checkedvarvehicle id -> true: trains taking part in the last checkSim.WRECK_DAYSconstCrashed trains lying on the line until it is cleared, WRECK_DAYS later: [{"pos": Vector2 (where they met), "day": float, "trains": [Vehicle, Vehicle] (as they were, for the view), "tiles": {Vector2i: true}}].Link to this entryconst WRECK_DAYS := 20.0Trains stop short of a wreck's tiles (see wreck_tiles). Not saved.
Declared inscripts/sim/sim.gd:41Sim.wrecksvarLink to this entryvar wrecks: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:42Sim.wreck_tilesvarVector2i -> true: track blocked by a wreckSim.road_atvarQueues (RAIL-26): who is where, worked out afresh at the start of every advance (_index_queues) and kept up to date as vehicles take a berth or a stand.Link to this entryvar road_at := PackedInt32Array()Road vehicles by the tile their front is in, as lists threaded through
Declared inroad_next, so each one only looks at the few near it. tile index -> index in road_list of a road vehicle there (-1: none)scripts/sim/sim.gd:47Sim.road_listvarLink to this entryvar road_list: Array[Vehicle] = []This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:48Sim.road_nextvarindex in road_list -> the next one in the same tile (-1: none)Sim._road_tilesvarthe tiles set in road_at, to clear againSim.ships_atvartile -> a ship whose front is in itSim.standsvarStation -> aircraft on the ground there or coming in to landSim.holding_overvarStation -> aircraft holding over itSim.missing_modsvarAfter loading: mods this game was saved with that aren't switched on now, and vehicles left out because their model came from one of them.Sim.dropped_vehiclesvarLink to this entryvar dropped_vehicles := 0This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:57Sim.undovarThe player's last construction actions, for Ctrl+Z (see undo.gd).Sim.goalsvarfirst steps, achievements and the company goal (RAIL-25)Sim.opportunitiesvarsubsidies and town requests (RAIL-24)Sim.linesvarThe player's lines: vehicles sharing one order list (see line.gd).Sim.next_line_idvarLink to this entryvar next_line_id := 1This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:64Sim.next_industry_idvarIndustries open and close during the game (RAIL-23, IndustryLife).Link to this entryvar next_industry_id := 0Ids are never used twice, so nothing that remembers a closed industry's id mistakes a new one for it (see new_industry_id).
Declared inscripts/sim/sim.gd:67Sim.industry_targetvarHow many industries the map started with (counted at the first month end): openings and closures lean back toward it.Sim.industry_roomvarThe room the map has for industries (WorldGen.industry_room), worked out when first needed.Link to this entryvar industry_room := Vector2i(-1, -1)Not saved: the coast hardly moves in a game.
Declared inscripts/sim/sim.gd:73Sim.introduce_waitvarA new era's kinds of industry that found no site (IndustryLife._introduce): type -> the game day before which they are not tried again.Sim.createstatic funcA brand-new game from setup parameters (see the new-game screen for the keys).Link to this entrystatic func create(params: Dictionary) -> Sim- Parameters
params: Dictionary
- Returns
Sim
scripts/sim/sim.gd:80Sim._initfuncLink to this entryfunc _init(p_seed: int, size: int = Const.MAP_SIZE, generate: bool = true, size_h: int = -1) -> void- Parameters
p_seed: intsize: int = Const.MAP_SIZEgenerate: bool = truesize_h: int = -1
- Returns
void
- Calls
WorldGen.generate,L.t
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:110Sim.date_textfuncFormats the current simulation day for display using the active language.Link to this entryfunc date_text() -> StringFor date calculations use
day_intoryear().- Returns
String
- Calls
Calendar.format
scripts/sim/sim.gd:121Sim.yearfuncReturns the calendar year ofday_int.Link to this entryfunc year() -> intUse it for year-based rules instead of dividing the elapsed day count by 365.
- Returns
int
- Calls
Calendar.from_day
scripts/sim/sim.gd:125Sim.tickfuncAdvance by real seconds at the current game speed.Link to this entryfunc tick(real_dt: float) -> void- Parameters
real_dt: float
- Returns
void
scripts/sim/sim.gd:132Sim.advancefuncAdvance byddgame days.Link to this entryfunc advance(dd: float) -> void- Parameters
dd: float
- Returns
void
scripts/sim/sim.gd:139Sim._update_occupancyfuncWhich track blocks trains are standing in (only matters with realistic blocking).Link to this entryfunc _update_occupancy() -> voidSince RAIL-80 junctions are blocks too, so this runs without signals as well.
- Returns
void
scripts/sim/sim.gd:162Sim._index_queuesfuncWhere road vehicles, ships and aircraft are, for the queues (RAIL-26).Link to this entryfunc _index_queues() -> voidOne pass over the vehicles, with nothing allocated for each road vehicle: those out of a depot go into road_at by the tile of their front.
- Returns
void
scripts/sim/sim.gd:206Sim.claim_standfuncWhether a plane may land at airportstnow (RAIL-26), and if so it is counted in: fewer than Vehicle.STANDS aircraft are on the ground there or coming in to land.Link to this entryfunc claim_stand(st: Station, holding: bool) -> boolOne already holding goes before one only just arriving.
- Parameters
st: Stationholding: bool
- Returns
bool
scripts/sim/sim.gd:252Sim._rail_stepsfuncHow many steps to move the trains in this frame, so none goes further than CRASH_STEP in one.Link to this entryfunc _rail_steps(dd: float) -> intOnly where two trains could meet within the frame: everywhere else one step does (most frames, since trains mostly run apart, and stepping every train many times a frame is what costs).
- Parameters
dd: float
- Returns
int
scripts/sim/sim.gd:263Sim._check_crashesfuncTrains on the same track crash (with realistic blocking): when a train's nose runs into another train, both are wrecked.Link to this entryfunc _check_crashes() -> voidSignals are what keeps them apart. Trains in a depot shed or being serviced there are out of the way. Two trains that already overlapped at the last check, or where one has only just appeared (bought onto a busy platform, out of the depot together with another, a game just loaded), are let go until they part: only running into each other counts.
- Returns
void
scripts/sim/sim.gd:298Sim._contactfuncWhere the nose of trainatouches the body of trainbon the same level (not one on a bridge over the other), or null.Link to this entryfunc _contact(a: Dictionary, b: Dictionary) -> Variantaandbare entries of _check_crashes' list.- Parameters
a: Dictionaryb: Dictionary
- Returns
Variant
scripts/sim/sim.gd:346Sim._crashfuncTwo trains have run into each other atat: both are wrecked, with all they carried.Link to this entryfunc _crash(a: Vehicle, b: Vehicle, at: Vector2) -> void- Parameters
a: Vehicleb: Vehicleat: Vector2
- Returns
void
- Calls
Station.nearest_town,L.t
scripts/sim/sim.gd:374Sim._dir_indexstatic funcLink to this entrystatic func _dir_index(v: Vector2) -> int- Parameters
v: Vector2
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:403Sim._on_dayfuncLink to this entryfunc _on_day() -> void- Returns
void
- Calls
Economy.produce,IndustryLife.near_wind_farm,Calendar.from_day,Mods.hook,Economy.monthly,IndustryLife.monthly,Data.intros,Data.model,L.t,L.lower
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:409Sim._growth_contextfuncWhat a town's land values depend on: stations with recent passenger service and nearby industry.Link to this entryfunc _growth_context(t: Town) -> Dictionary- Parameters
t: Town
- Returns
Dictionary
scripts/sim/sim.gd:471Sim._new_erafuncA new age: industry modernises (more output from the same mines, fields and plants, except those on their way out), and the chains change (RAIL-29: Sim.sync_era has moved the map to it already).Link to this entryfunc _new_era(era: Dictionary) -> void- Parameters
era: Dictionary
- Returns
void
- Calls
Data.retiring,L.t,Data.era_changes
scripts/sim/sim.gd:492Sim.sync_erafuncMove the industry chains to the era of the date (RAIL-29): at the start of a game, after loading and at every month end, so a game that crosses into a new era (or was saved before the chains changed) takes it on.Link to this entryfunc sync_era() -> voidStations look again at what they accept and supply.
- Returns
void
- Calls
Data.era_index
scripts/sim/sim.gd:504Sim._match_daysfuncStadiums hold a match once a month, each on its own day (see match_offset).Link to this entryfunc _match_days() -> voidThe crowd of fans is one per stadium: the stations that reach it share it the way they share ordinary passengers (Economy.shares: the best two by rating), so a second station next to a stadium doesn't double it.
- Returns
void
- Calls
Economy.shares,L.t
scripts/sim/sim.gd:516Sim.match_offsetstatic funcThe day in each 30 a stadium standing att(its north-west tile) holds its match: the match is on the days where (day + this) is a multiple of 30.Link to this entrystatic func match_offset(t: Vector2i) -> intTownLife shows the fans walking to it then.
- Parameters
t: Vector2i
- Returns
int
scripts/sim/sim.gd:546Sim._update_town_servicefuncLink to this entryfunc _update_town_service(t: Town) -> void- Parameters
t: Town
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:550Sim._yearlyfuncLink to this entryfunc _yearly(old_year: int) -> void- Parameters
old_year: int
- Returns
void
- Calls
IndustryLife.yearly,L.t,Fmt.money
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:559Sim._check_bankruptcyfuncMonth end: companies in the red are warned, draw on their credit (rivals), and after Data.BANKRUPT_MONTHS months go bankrupt.Link to this entryfunc _check_bankruptcy() -> void- Returns
void
- Calls
L.t
scripts/sim/sim.gd:578Sim._go_bankruptfuncLink to this entryfunc _go_bankrupt(c: Company) -> void- Parameters
c: Company
- Returns
void
- Calls
L.t,WorldMap.crossing_tiles
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:606Sim.post_newsfuncveh: the id of the vehicle the news is about, if any (clicking the news opens it).Link to this entryfunc post_news(text: String, kind: String, pos: Vector2, veh: int = 0, about: String = "", urgent: bool = false, world: bool = false) -> voidabout: the screen clicking it opens instead ("goals").urgent: news the player mustn't miss (a crash of their trains: the HUD shows it on a card in the middle of the screen, see Hud.show_crash).world: see post_world_news.- Parameters
text: Stringkind: Stringpos: Vector2veh: int = 0about: String = ""urgent: bool = falseworld: bool = false
- Returns
void
- Calls
Mods.allow_news
scripts/sim/sim.gd:671Sim.post_world_newsfuncNews about the world rather than the player's company: rivals' new lines, other towns' requests coming and going, industries opening and closing.Link to this entryfunc post_world_news(text: String, kind: String, pos: Vector2, about: String = "") -> voidIt goes in the News window (under All news), without a note popping up on screen, so the player's own news isn't lost among it.
- Parameters
text: Stringkind: Stringpos: Vector2about: String = ""
- Returns
void
scripts/sim/sim.gd:692Sim.new_industry_idfuncAn id for an industry opening now: never one an industry has had before, whether it is still on the map (one placed by hand, as test maps do, counts too) or has closed.Sim.vehicle_by_idfuncThe vehicle with this id, or null.Link to this entryfunc vehicle_by_id(id: int) -> Vehicle- Parameters
id: int
- Returns
Vehicle
scripts/sim/sim.gd:706Sim.on_incomefuncLink to this entryfunc on_income(v: Vehicle, st: Station, amount: int) -> void- Parameters
v: Vehiclest: Stationamount: int
- Returns
void
- Calls
Mods.hook
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:713Sim._with_moneyfuncMarks a plan as unaffordable if the company can't pay for it.Link to this entryfunc _with_money(p: Dictionary, who: Company) -> Dictionary- Parameters
p: Dictionarywho: Company
- Returns
Dictionary
scripts/sim/sim.gd:721Sim._ownershipfuncTrack and stations belonging to other companies can't be touched.Link to this entryfunc _ownership(p: Dictionary, who: Company, tiles: Array) -> Dictionary- Parameters
p: Dictionarywho: Companytiles: Array
- Returns
Dictionary
- Calls
L.t
scripts/sim/sim.gd:734Sim.preview_linefuncChecks a path of adjacent road or rail tiles for construction, ownership, and affordability.Link to this entryfunc preview_line(kind: String, pts: Array[Vector2i], who: Company = null) -> DictionaryReturns a plan with
ok,reasonandcostwithout laying track or spending money.- Parameters
kind: Stringpts: Array[Vector2i]who: Company = null
- Returns
Dictionary
- Calls
BuildOps.plan_line
scripts/sim/sim.gd:754Sim.build_linefuncLays road or track along consecutive adjacent tiles and debits construction costs on success.Link to this entryfunc build_line(kind: String, pts: Array[Vector2i], who: Company = null) -> DictionaryPass at least two tiles as
Array[Vector2i]. The return value is a construction plan, so checkokbefore using it.- Parameters
kind: Stringpts: Array[Vector2i]who: Company = null
- Returns
Dictionary
- Calls
BuildOps.apply_line
Example
Declared invar tiles: Array[Vector2i] = [Vector2i(5, 6), Vector2i(6, 6)] var plan := sim.build_line("road", tiles) if not plan.ok: note(plan.reason)scripts/sim/sim.gd:762Sim.plan_routefuncA line alongpts(each tile next to the one before) with bridges and tunnels on it (crossings, as RouteBuilder.last_crossings gives them, RAIL-52): the stretches of land between them as build_line lays them and each crossing as build_crossing builds it.Link to this entryfunc plan_route(kind: String, pts: Array[Vector2i], crossings: Array, who: Company = null) -> DictionaryWithout the money check (see preview_route). Keys as plan_line's - "add" every piece, "cost" the total - plus "tiles" (every bridge span and tunnel tile), "spans" (bridge spans only) and "parts" (each stretch's and crossing's own plan, in order).
- Parameters
kind: Stringpts: Array[Vector2i]crossings: Arraywho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:785Sim._join_planfuncAdd a stretch's or crossing's plan to a route's (plan_route).Link to this entryfunc _join_plan(p: Dictionary, part: Dictionary) -> void- Parameters
p: Dictionarypart: Dictionary
- Returns
void
scripts/sim/sim.gd:835Sim.preview_routefuncReturns the cost and validity of a road or rail route that can include bridges or tunnels.Link to this entryfunc preview_route(kind: String, pts: Array[Vector2i], crossings: Array, who: Company = null) -> DictionaryIt runs the route planner and checks funds without building the route.
- Parameters
kind: Stringpts: Array[Vector2i]crossings: Arraywho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:853Sim.build_routefuncBuild a route planned by preview_route: every stretch and crossing exactly as previewed, paid for at once, and taken back by one undo.Link to this entryfunc build_route(kind: String, pts: Array[Vector2i], crossings: Array, who: Company = null) -> Dictionary- Parameters
kind: Stringpts: Array[Vector2i]crossings: Arraywho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:860Sim.preview_stationfuncChecks placement, ownership, council permission, and affordability for a new station or extension.Link to this entryfunc preview_station(kind: String, pts: Array[Vector2i], axis: int, who: Company = null) -> DictionaryReturns a plan without building the station.
- Parameters
kind: Stringpts: Array[Vector2i]axis: intwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:886Sim.build_stationfuncBuilds or extends a station, charges the company, and firesMod._on_station_built.Link to this entryfunc build_station(kind: String, pts: Array[Vector2i], axis: int, who: Company = null) -> DictionaryPass
rail,road,dock, orair, a typed tile array, and an orientation. On success the plan includes the resultingstation; on failure usereason.- Parameters
kind: Stringpts: Array[Vector2i]axis: intwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:904Sim.preview_bulldozefuncChecks which objects in the tile rectangle can be cleared by the company, and estimates the cost.Link to this entryfunc preview_bulldoze(rect: Rect2i, who: Company = null) -> DictionaryRead the plan before calling
build_bulldoze.- Parameters
rect: Rect2iwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:924Sim.build_bulldozefuncClears the allowed parts of a tile rectangle, updates track ownership counts, and charges the company.Link to this entryfunc build_bulldoze(rect: Rect2i, who: Company = null) -> DictionaryRemoving scenery and buildings can affect town council ratings.
- Parameters
rect: Rect2iwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:957Sim.preview_crossingfuncBridges (bis the far ramp) and tunnels (from hillside tilea).Link to this entryfunc preview_crossing(kind: String, type: String, a: Vector2i, b: Vector2i, who: Company = null, style: String = "") -> Dictionary- Parameters
kind: Stringtype: Stringa: Vector2ib: Vector2iwho: Company = nullstyle: String = ""
- Returns
Dictionary
scripts/sim/sim.gd:981Sim.build_crossingfuncBuilds a bridge between the ramp tiles or a tunnel from the hillside tile.Link to this entryfunc build_crossing(kind: String, type: String, a: Vector2i, b: Vector2i, who: Company = null, style: String = "") -> DictionaryPass
bridgeortunnelfortype. A successful plan contains the newcrossing.- Parameters
kind: Stringtype: Stringa: Vector2ib: Vector2iwho: Company = nullstyle: String = ""
- Returns
Dictionary
scripts/sim/sim.gd:992Sim.preview_signalfuncChecks placement, ownership, and cost for the signal action on a rail tile.Link to this entryfunc preview_signal(t: Vector2i, who: Company = null) -> DictionaryReturns the plan without applying it.
- Parameters
t: Vector2iwho: Company = null
- Returns
Dictionary
- Calls
BuildOps.plan_signal
scripts/sim/sim.gd:1012Sim.build_signalfuncApplies the signal action to the rail tile after validating ownership and cost, and records the operation for undo.Link to this entryfunc build_signal(t: Vector2i, who: Company = null) -> Dictionary- Parameters
t: Vector2iwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:1019Sim.preview_terraformfuncChecks the cost and rules for raising or lowering a map corner.Link to this entryfunc preview_terraform(corner: Vector2i, delta: int, who: Company = null) -> DictionaryIt also rejects a plan if a vehicle occupies any affected tile.
- Parameters
corner: Vector2idelta: intwho: Company = null
- Returns
Dictionary
- Calls
BuildOps.plan_terraform,L.t
scripts/sim/sim.gd:1030Sim.build_terraformfuncApplies an affordable height change to a map corner.Link to this entryfunc build_terraform(corner: Vector2i, delta: int, who: Company = null) -> DictionaryA positive
deltaraises it and a negative one lowers it.- Parameters
corner: Vector2idelta: intwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:1042Sim.preview_levelfuncLevel the tiles inrectto corner heightheightas far as the rules allow (see BuildOps.plan_level): tiles under vehicles or belonging to other companies are left alone too.Link to this entryfunc preview_level(rect: Rect2i, height: int, who: Company = null) -> Dictionary- Parameters
rect: Rect2iheight: intwho: Company = null
- Returns
Dictionary
- Calls
L.t,BuildOps.plan_level
scripts/sim/sim.gd:1057Sim.build_levelfuncLevels the eligible tiles in a rectangle to a target corner height, charges the construction cost, and records the change for undo.Link to this entryfunc build_level(rect: Rect2i, height: int, who: Company = null) -> DictionaryCheck the returned plan for skipped tiles.
- Parameters
rect: Rect2iheight: intwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:1073Sim._level_upsets_townsfuncLevelling clears the trees on the tiles it reshapes, which the nearby councils mind the way they mind bulldozing them (see _bulldoze_upsets_towns).Link to this entryfunc _level_upsets_towns(tiles: Array, who: Company) -> void- Parameters
tiles: Arraywho: Company
- Returns
void
- Calls
Station.nearest_town,L.t
scripts/sim/sim.gd:1090Sim._bulldoze_upsets_townsfuncKnocking down houses, tearing up town streets and clearing trees near a town hurts the company's standing with its council.Link to this entryfunc _bulldoze_upsets_towns(r: Rect2i, who: Company) -> voidOnly what belongs to the town counts: houses, streets inside its built-up area, and trees in and just around it. Roads and woods out in the country are the company's own business.
- Parameters
r: Rect2iwho: Company
- Returns
void
scripts/sim/sim.gd:1109Sim.council_newsfuncTell the player the moment a council turns against them (or comes round).Link to this entryfunc council_news(t: Town, who: Company, was: float) -> void- Parameters
t: Townwho: Companywas: float
- Returns
void
- Calls
L.t,Town.rating_name
scripts/sim/sim.gd:1141Sim.council_refusalfuncWhy a council refuseswhoneart, in words a player can act on.Link to this entryfunc council_refusal(t: Town, who: Company) -> String- Parameters
t: Townwho: Company
- Returns
String
- Calls
L.t,Town.rating_name,L.lower
scripts/sim/sim.gd:1153Sim.town_actionfuncTown actions from the town window: "advertise", "trees" or "fund".Link to this entryfunc town_action(t: Town, action: String, who: Company = null) -> DictionaryReturns {ok, reason, cost}.
- Parameters
t: Townaction: Stringwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:1168Sim.renew_vehiclefuncCharges the owner the renewal price and resets the vehicle’s age, reliability, and last-service date.Link to this entryfunc renew_vehicle(v: Vehicle, who: Company = null) -> DictionaryCheck
okbefore reading the successful result’scost.- Parameters
v: Vehiclewho: Company = null
- Returns
Dictionary
- Calls
L.t,Fmt.money,Data.reliability
scripts/sim/sim.gd:1215Sim.renew_pricefuncWhat renew_vehicle would charge forvright now.Link to this entryfunc renew_price(v: Vehicle) -> int- Parameters
v: Vehicle
- Returns
int
scripts/sim/sim.gd:1231Sim.same_routestatic funcWhether two vehicles run the same route: the same company and kind of transport, calling at the same stations in the same order, wherever in the round each of them starts.Link to this entrystatic func same_route(a: Vehicle, b: Vehicle) -> bool- Parameters
a: Vehicleb: Vehicle
- Returns
bool
scripts/sim/sim.gd:1239Sim.vehicles_on_stopsfuncHow many ofwho's vehicles ofkindcall at exactlystops, in that order (wherever in the round each one starts), as same_route counts them.Link to this entryfunc vehicles_on_stops(kind: String, stops: Array, who: Company) -> int- Parameters
kind: Stringstops: Arraywho: Company
- Returns
int
scripts/sim/sim.gd:1258Sim.route_vehiclesfuncEvery vehicle onv's route (see same_route),vincluded; for a vehicle on a line, every vehicle on that line.Link to this entryfunc route_vehicles(v: Vehicle) -> Array- Parameters
v: Vehicle
- Returns
Array
scripts/sim/sim.gd:1280Sim.make_linefuncTurnv's route into a line:vand every other vehicle of its company on the same route (see same_route) that isn't on a line yet join it.Link to this entryfunc make_line(v: Vehicle, line_name: String = "") -> LineReturns the line.
- Parameters
v: Vehicleline_name: String = ""
- Returns
Line
scripts/sim/sim.gd:1290Sim.line_problemfuncWhyvcan't runln's stops ("" when it can).Link to this entryfunc line_problem(v: Vehicle, ln: Line) -> String- Parameters
v: Vehicleln: Line
- Returns
String
- Calls
L.t
scripts/sim/sim.gd:1305Sim.join_linefuncPutvon lineln(it takes the line's stops).Link to this entryfunc join_line(v: Vehicle, ln: Line) -> DictionaryReturns {"ok", "reason"}.
- Parameters
v: Vehicleln: Line
- Returns
Dictionary
scripts/sim/sim.gd:1314Sim._put_on_linefuncThe vehicle shares the line's order list and keeps heading for the stop it was heading for, when the line calls there too.Link to this entryfunc _put_on_line(v: Vehicle, ln: Line) -> void- Parameters
v: Vehicleln: Line
- Returns
void
scripts/sim/sim.gd:1327Sim.leave_linefuncTakevoff its line: it keeps the stops as its own.Link to this entryfunc leave_line(v: Vehicle) -> void- Parameters
v: Vehicle
- Returns
void
scripts/sim/sim.gd:1340Sim.set_line_ordersfuncGive linelnnew stops (validated for every model running on it).Link to this entryfunc set_line_orders(ln: Line, new_orders: Array) -> DictionaryThe vehicles keep heading for the stop they were heading for where it is still on the line. Returns {"ok", "reason"}.
- Parameters
ln: Linenew_orders: Array
- Returns
Dictionary
scripts/sim/sim.gd:1350Sim.set_vehicle_ordersfuncGive a vehicle new stops: its own, or (on a line) the whole line's.Link to this entryfunc set_vehicle_orders(v: Vehicle, new_orders: Array, idx: int = -1) -> DictionaryReturns {"ok", "reason"}.
- Parameters
v: Vehiclenew_orders: Arrayidx: int = -1
- Returns
Dictionary
scripts/sim/sim.gd:1381Sim._stops_problemfuncA line with no vehicles can still be checked for its stops: what check_orders asks of every model, without the model.Link to this entryfunc _stops_problem(kind: String, stops: Array, who: Company) -> String- Parameters
kind: Stringstops: Arraywho: Company
- Returns
String
- Calls
L.t
scripts/sim/sim.gd:1402Sim.delete_linefuncDelete a line: its vehicles keep running its stops, each on its own.Link to this entryfunc delete_line(ln: Line) -> void- Parameters
ln: Line
- Returns
void
scripts/sim/sim.gd:1419Sim.buy_for_linefuncBuy one more vehicle for lineln, liketemplate(the same model, cargo and wagons).Link to this entryfunc buy_for_line(ln: Line, template: Vehicle) -> DictionaryReturns buy_vehicle's answer.
- Parameters
ln: Linetemplate: Vehicle
- Returns
Dictionary
scripts/sim/sim.gd:1429Sim.stop_linefuncStop (or start again) every vehicle on a line.Link to this entryfunc stop_line(ln: Line, stop: bool) -> void- Parameters
ln: Linestop: bool
- Returns
void
scripts/sim/sim.gd:1445Sim.renew_linefuncRenew every vehicle on a line that is past its working life.Link to this entryfunc renew_line(ln: Line) -> DictionaryReturns {"n", "cost", "reason"}.
- Parameters
ln: Line
- Returns
Dictionary
scripts/sim/sim.gd:1454Sim.line_by_idfuncLooks for a line with the given ID in the simulation and returnsnullif no line matches.Link to this entryfunc line_by_id(line_id: int) -> Line- Parameters
line_id: int
- Returns
Line
scripts/sim/sim.gd:1470Sim._index_ofstatic funcLink to this entrystatic func _index_of(list: Array, st: Station, fallback: int) -> int- Parameters
list: Arrayst: Stationfallback: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:1477Sim._mark_servedfuncLink to this entryfunc _mark_served(v: Vehicle) -> void- Parameters
v: Vehicle
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:1487Sim.route_textstatic funcA vehicle's route in a few words: "Ashford → Millbury".Link to this entrystatic func route_text(v: Vehicle) -> String- Parameters
v: Vehicle
- Returns
String
scripts/sim/sim.gd:1496Sim.replace_planfuncWhat swappingvfor a newmodel_idwould take: the model must be of the same kind, on sale, able to carry whatvcarries and able to run its orders (wires for an electric train, a depot where depots are needed).Link to this entryfunc replace_plan(v: Vehicle, model_id: String, checked: Dictionary = {}) -> DictionaryA train keeps its wagons, as many as the new engine pulls. Returns {"ok", "reason"} and, when it can be done, "price" (the new one, with its wagons), "trade_in" (what the old one is worth, as when it is sold), "cost" (the difference: negative when the old one is worth more) and "wagons".
checkedremembers the route checks between calls for vehicles of one route.- Parameters
v: Vehiclemodel_id: Stringchecked: Dictionary = {}
- Returns
Dictionary
scripts/sim/sim.gd:1513Sim.replace_vehiclefuncSwap a vehicle for a new one of another model, where it stands, as renew_vehicle does for the same model: it keeps its number, name, orders, cargo and history, and is new again.Link to this entryfunc replace_vehicle(v: Vehicle, model_id: String, who: Company = null) -> DictionaryCharges the new price less what the old one is worth (see replace_plan, whose answer this returns).
- Parameters
v: Vehiclemodel_id: Stringwho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:1540Sim.replace_route_planfuncWhat replace_route would do: {"ok", "reason", "cost" (for all of them together), "vehicles" (the ones that would change), "costs" (for each of those), "skipped" (how many on the route can't take the model, say for their cargo; ones that already are that model aren't counted)}.Link to this entryfunc replace_route_plan(v: Vehicle, model_id: String, checked: Dictionary = {}) -> Dictionary- Parameters
v: Vehiclemodel_id: Stringchecked: Dictionary = {}
- Returns
Dictionary
scripts/sim/sim.gd:1559Sim.replace_routefuncreplace_vehicle for every vehicle onv's route that can take the model (see same_route and replace_route_plan, whose answer this returns): all of them or, when the money isn't there, none.Link to this entryfunc replace_route(v: Vehicle, model_id: String, who: Company = null) -> DictionaryThe player is told in one news item.
- Parameters
v: Vehiclemodel_id: Stringwho: Company = null
- Returns
Dictionary
- Calls
L.t,Fmt.money,Data.model
scripts/sim/sim.gd:1577Sim._pay_vehiclesfuncPay for vehicles, or be paid whencostis negative (trading in for something cheaper).Link to this entryfunc _pay_vehicles(who: Company, cost: int) -> void- Parameters
who: Companycost: int
- Returns
void
scripts/sim/sim.gd:1608Sim._becomefuncThe swap itself:vbecomes a brand-newmodel_id(what renew_vehicle resets, on a new model).Link to this entryfunc _become(v: Vehicle, model_id: String) -> void- Parameters
v: Vehiclemodel_id: String
- Returns
void
- Calls
Data.reliability
scripts/sim/sim.gd:1617Sim.AUTO_RENEW_MAXconstMonth end, for the player's company when it has asked for it: renew vehicles past their working life (the ones the news warns about), oldest first, exactly as the Renew button would, while the cash left afterwards stays at or above the company's threshold.Link to this entryconst AUTO_RENEW_MAX := 3At most AUTO_RENEW_MAX a month, so a fleet bought together doesn't empty the bank at once. Returns how many were renewed.
Declared inscripts/sim/sim.gd:1629Sim._auto_renewfuncLink to this entryfunc _auto_renew() -> int- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:1630Sim.refit_costfuncWhat changing a vehicle's cargo would cost.Link to this entryfunc refit_cost(v: Vehicle, consist: Array) -> Dictionaryconsist: the cargo of each wagon for a train (front to back, so wagons can be added, dropped or mixed), one cargo for anything else. Returns {"ok", "reason", "cost"}:costis negative when dropping wagons pays more than the rest costs.- Parameters
v: Vehicleconsist: Array
- Returns
Dictionary
- Calls
L.t
scripts/sim/sim.gd:1664Sim.refit_placefuncWhere a change of cargo ordered now would be done: "now" (it is standing in one of its depots), "depot" (it goes to one after its next stop), "station" (at its next stop: ships, aircraft, and companies playing without depots that have none on the route) or "" (it needs a depot first).Link to this entryfunc refit_place(v: Vehicle) -> String- Parameters
v: Vehicle
- Returns
String
scripts/sim/sim.gd:1701Sim.refit_planfuncrefit_cost plus "at", where the change would be done (see refit_place); refused when the vehicle needs a depot and none is linked to its route.Link to this entryfunc refit_plan(v: Vehicle, consist: Array) -> Dictionary- Parameters
v: Vehicleconsist: Array
- Returns
Dictionary
- Calls
L.t
scripts/sim/sim.gd:1714Sim.refit_vehiclefuncOrder a change of what a vehicle carries (see refit_cost) and pay for it.Link to this entryfunc refit_vehicle(v: Vehicle, consist: Array, who: Company = null) -> DictionaryThe vehicle delivers what it has at its next stop, takes nothing on and goes to a depot, where finish_refit does the work; its orders, age and history stay. An earlier order still waiting is replaced. Returns refit_plan's answer.
- Parameters
v: Vehicleconsist: Arraywho: Company = null
- Returns
Dictionary
scripts/sim/sim.gd:1729Sim.cancel_refitfuncCall off a change of cargo that hasn't been done yet; returns the money given back.Link to this entryfunc cancel_refit(v: Vehicle, who: Company = null) -> int- Parameters
v: Vehiclewho: Company = null
- Returns
int
scripts/sim/sim.gd:1752Sim.finish_refitfuncDo the change of cargo a vehicle is waiting for (it has reached the depot).Link to this entryfunc finish_refit(v: Vehicle) -> void- Parameters
v: Vehicle
- Returns
void
scripts/sim/sim.gd:1765Sim._occupied_tilesfuncLink to this entryfunc _occupied_tiles() -> Dictionary- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:1779Sim.check_ordersfuncCheck a vehicle order list: returns "" if fine, else why not.Link to this entryfunc check_orders(model_id: String, cargo: String, stops: Array, who: Company) -> String- Parameters
model_id: Stringcargo: Stringstops: Arraywho: Company
- Returns
String
- Calls
Data.model,L.t
scripts/sim/sim.gd:1796Sim.vehicle_pricefuncReturns the model purchase price plus the cost of the specified number of rail wagons.Link to this entryfunc vehicle_price(model_id: String, wagons: int) -> intNon-rail models ignore the wagon count. It does not check funds, routes, or sale year.
- Parameters
model_id: Stringwagons: int
- Returns
int
- Calls
Data.model
scripts/sim/sim.gd:1832Sim.buy_vehiclefuncBuys a model for a route of existing stations.Link to this entryfunc buy_vehicle(model_id: String, cargo: String, wagons: int, stops: Array, full_load_first: bool, who: Company = null, consist: Array = [], transfer_at: Array = []) -> Dictionaryfull_load_firstsets the first order’s load flag.consistis one cargo ID per wagon, from front to back; a nonempty rail consist replacescargoandwagons.transfer_atis a list of zero-based stop indices. Checkokand readreasonon failure. A successful purchase returns the newvehicle.- Parameters
model_id: Stringcargo: Stringwagons: intstops: Arrayfull_load_first: boolwho: Company = nullconsist: Array = []transfer_at: Array = []
- Returns
Dictionary
- Calls
Data.model,L.t,Data.available,Data.intro_year,Fmt.money,Data.reliability,Mods.hook,BuildOps.dir_between
scripts/sim/sim.gd:1840Sim.depots_requiredfuncLink to this entryfunc depots_required(who: Company) -> bool- Parameters
who: Company
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:1932Sim.depot_tilesfuncwho's depots for vehicles ofkind(road or rail), as a set of tiles.Link to this entryfunc depot_tiles(kind: String, who: Company) -> Dictionary- Parameters
kind: Stringwho: Company
- Returns
Dictionary
scripts/sim/sim.gd:1937Sim.find_depotfuncThe nearest ofwho's depots that's linked to stationst, or (-1, -1): the one a vehicle leavingstwould drive to.Link to this entryfunc find_depot(kind: String, st: Station, who: Company, wired: bool = false) -> Vector2iFor the one a new vehicle drives out of, see depot_out.
- Parameters
kind: Stringst: Stationwho: Companywired: bool = false
- Returns
Vector2i
scripts/sim/sim.gd:1948Sim.depot_outfuncThe nearest ofwho's depots that a new vehicle can drive out of to stationst, or (-1, -1).Link to this entryfunc depot_out(kind: String, st: Station, who: Company, wired: bool = false, obey_signals: bool = true) -> Vector2iSearched from the depot's door to the station, not the other way: one-way signals can let trains from a depot into a station and not back.
- Parameters
kind: Stringst: Stationwho: Companywired: bool = falseobey_signals: bool = true
- Returns
Vector2i
- Calls
Pathfinder.find
scripts/sim/sim.gd:1958Sim.route_fromfuncThe shortest route from stationstto any of thegoalstiles, as Pathfinder.find returns it ({} when there is none).Link to this entryfunc route_from(kind: String, st: Station, goals: Dictionary, wired: bool = false, obey_signals: bool = true) -> DictionaryA station's platforms (or stops) needn't be joined to each other, so every separate one is tried: the route may leave from any of them.
- Parameters
kind: Stringst: Stationgoals: Dictionarywired: bool = falseobey_signals: bool = true
- Returns
Dictionary
- Calls
Pathfinder.find
scripts/sim/sim.gd:1973Sim.preview_electrifyfuncLink to this entryfunc preview_electrify(pts: Array[Vector2i], who: Company = null) -> Dictionary- Parameters
pts: Array[Vector2i]who: Company = null
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:1996Sim.build_electrifyfuncLink to this entryfunc build_electrify(pts: Array[Vector2i], who: Company = null) -> Dictionary- Parameters
pts: Array[Vector2i]who: Company = null
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:2003Sim.preview_depotfuncLink to this entryfunc preview_depot(kind: String, t: Vector2i, facing: int, who: Company = null) -> Dictionary- Parameters
kind: Stringt: Vector2ifacing: intwho: Company = null
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:2014Sim.build_depotfuncLink to this entryfunc build_depot(kind: String, t: Vector2i, facing: int, who: Company = null) -> Dictionary- Parameters
kind: Stringt: Vector2ifacing: intwho: Company = null
- Returns
Dictionary
- Calls
BuildOps.apply_depot
This entry has no behavior notes yet.
Declared inscripts/sim/sim.gd:2031Sim.sell_vehiclefuncSell a vehicle.Link to this entryfunc sell_vehicle(v: Vehicle, who: Company = null) -> intwhomust own it (defaults to the player); returns the refund, or -1 if refused.- Parameters
v: Vehiclewho: Company = null
- Returns
int
scripts/sim/sim.gd:2048Sim.company_vehiclesfuncReturns the vehicles owned by the suppliedCompany.Link to this entryfunc company_vehicles(who: Company) -> ArrayThe returned array can be filtered or reordered independently, but its vehicle objects are live.
- Parameters
who: Company
- Returns
Array
scripts/sim/sim.gd:2061Sim.company_valuefuncCalculates cash minus loans plus vehicle resale value, station tile value, and owned track value.Link to this entryfunc company_value(who: Company) -> intThis is the value used for company comparisons.
- Parameters
who: Company
- Returns
int
scripts/sim/sim.gd:2065
Company
Company.COLORSconstLink to this entryconst COLORSThis entry has no behavior notes yet.
Declared inscripts/sim/company.gd:5Company.CATEGORIESconstLink to this entryconst CATEGORIES := ["construction", "vehicles", "running", "property", "infrastructure", "interest", "income"]This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:8Company.idvarLink to this entryvar id := 0This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:10Company.namevarLink to this entryvar name := "Fourways Transport Co."This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:11Company.colorvarLink to this entryvar color := Color(0.18, 0.45, 0.85)This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:12Company.is_aivarLink to this entryvar is_ai := falseThis entry has no behavior notes yet.
Declared inscripts/sim/company.gd:13Company.moneyvarThe company’s current cash balance in game dollars.Link to this entryvar money: int = Data.START_LOANUse the accounting methods to change it when the transaction should appear in the ledger.
Declared inscripts/sim/company.gd:14Company.loanvarThe company’s outstanding debt in game dollars.Link to this entryvar loan: int = Data.START_LOANUse
Declared inborrowandrepayto adjust cash and debt together.scripts/sim/company.gd:15Company.ledgervarLink to this entryvar ledger := {}This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:16Company.ledger_lastvarLink to this entryvar ledger_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:17Company.founded_dayvarLink to this entryvar founded_day := 0This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:18Company.max_loanvarLink to this entryvar max_loan: int = Data.MAX_LOANThis entry has no behavior notes yet.
Declared inscripts/sim/company.gd:19Company.rail_tilesvartiles of track owned (counted in company value)Company.historyvarmonthly company value, oldest first (last 120 months)Company.months_in_redvarconsecutive month-ends with a negative balanceCompany.bankruptvarLink to this entryvar bankrupt := falseThis entry has no behavior notes yet.
Declared inscripts/sim/company.gd:23Company.monthvarthis month so far: "income", "spend" (all), "invest" (building and buying), "cargo": {c: [units, $]}Company.monthsvarclosed months, oldest first (last 24): {"income", "spend", "value", "cargo"}Company.cargo_yearvarcargo -> [units, $] delivered this yearCompany.cargo_lastvarLink to this entryvar cargo_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:28Company.kind_yearvarvehicle kind -> $ earned this yearCompany.kind_lastvarLink to this entryvar kind_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:30Company.yearsvarclosed years, oldest first (last 60): see_year_rowCompany.auto_renewvarLink to this entryvar auto_renew := falseThis entry has no behavior notes yet.
Declared inscripts/sim/company.gd:33Company.auto_renew_keepvaronly renew while this much cash is left afterwardsCompany.auto_renew_remindedvarthe year of the last "can't afford to renew" reminderCompany.record_monthfuncLink to this entryfunc record_month(value: int) -> void- Parameters
value: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:38Company.note_deliveryfuncA delivery:unitsof cargocpaidpay, carried by a vehicle ofkind.Link to this entryfunc note_delivery(c: String, units: int, pay: int, kind: String) -> void- Parameters
c: Stringunits: intpay: intkind: String
- Returns
void
scripts/sim/company.gd:50Company._initfuncLink to this entryfunc _init(p_id: int = 0, p_name: String = "Fourways Transport Co.") -> void- Parameters
p_id: int = 0p_name: String = "Fourways Transport Co."
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/company.gd:61Company.can_affordfuncChecks whether the company’s current cash coverscost.Link to this entryfunc can_afford(cost: int) -> boolIt does not borrow money or change its balance.
- Parameters
cost: int
- Returns
bool
scripts/sim/company.gd:70Company.spendfuncDeducts the cost from cash and records it in the category and monthly accounts.Link to this entryfunc spend(cost: int, category: String) -> boolReturns
falseand leaves the accounts untouched if cash is insufficient. Typical categories includeconstructionandvehicles.- Parameters
cost: intcategory: String
- Returns
bool
scripts/sim/company.gd:74Company.chargefuncCosts that are paid whether or not there is cash (running costs, interest).Link to this entryfunc charge(cost: int, category: String) -> void- Parameters
cost: intcategory: String
- Returns
void
scripts/sim/company.gd:86Company.earnfuncAdds game dollars to cash and records the amount as income in the ledger and current month’s accounts.Link to this entryfunc earn(amount: int) -> void- Parameters
amount: int
- Returns
void
scripts/sim/company.gd:92Company.borrowfuncAdds up toamountto cash and debt, limited by the company’s remaining loan allowance.Link to this entryfunc borrow(amount: int) -> boolReturns whether any money was borrowed.
- Parameters
amount: int
- Returns
bool
scripts/sim/company.gd:98Company.repayfuncRepays up toamount, limited by cash and outstanding debt.Link to this entryfunc repay(amount: int) -> boolReturns whether a payment was made.
- Parameters
amount: int
- Returns
bool
scripts/sim/company.gd:107Company.roll_yearfuncClose the books onyear;valueis the company value at its end.Link to this entryfunc roll_year(year: int = 0, value: int = 0) -> void- Parameters
year: int = 0value: int = 0
- Returns
void
scripts/sim/company.gd:117Company.profitfuncCalculates net profit from a ledger dictionary by subtracting recorded expense categories from income.Link to this entryfunc profit(l: Dictionary) -> int- Parameters
l: Dictionary
- Returns
int
scripts/sim/company.gd:130Company._year_rowfuncA ledger boiled down to one line of the yearly summary.Link to this entryfunc _year_row(l: Dictionary, year: int, value: int) -> Dictionary- Parameters
l: Dictionaryyear: intvalue: int
- Returns
Dictionary
scripts/sim/company.gd:139Company.year_rowsfuncThe yearly summary, oldest first: every closed year, then the year in progress ("open": true).Link to this entryfunc year_rows(year: int, month: int, value: int) -> Arrayyearandmonth(0 = January) are today's,valuethe company value now. Saves from before the yearly records were kept still get last year's line, from last year's ledger.- Parameters
year: intmonth: intvalue: int
- Returns
Array
- Calls
Calendar.from_day
scripts/sim/company.gd:149
Town
Town.idvarTown.namevarLink to this entryvar name := ""This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:6Town.cxvarTown.cyvarTown.gridvarroad spacing; houses fill the blocks between grid linesTown.popvarLink to this entryvar pop := 0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:10Town.house_countvarLink to this entryvar house_count := 0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:11Town.grow_timervarLink to this entryvar grow_timer := 30This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:12Town.paxvarpassengers generated this monthTown.pax_movedvar...and picked up by stationsTown.pax_lastvarLink to this entryvar pax_last := 0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:15Town.pax_moved_lastvarLink to this entryvar pax_moved_last := 0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:16Town.suppliedvargoods and food delivered this monthTown.supplied_lastvarLink to this entryvar supplied_last := 0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:18Town.served_untilvargame day until which the town counts as servedTown.dirtyvartiles changed by growth since the view last redrew themTown.ratingsvarLocal authority: how the council sees each company (company id -> 0..100), and town actions.Town.advertvarcompany id -> game day the advertising campaign endsTown.fund_untilvargame day funded building endsTown.exclusivevarRewards for meeting the council's requests (RAIL-24, Opportunities): the company with exclusive transport rights here (-1: none) and the day they end, and company id -> the day its half-price stations and depots end.Town.exclusive_untilvarLink to this entryvar exclusive_until := -1This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:29Town.cheapvarLink to this entryvar cheap := {}This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:30Town.rating_logvarWhy each company's rating moved lately: company id -> [{"day", "delta", "why"}], newest last.Town.RATING_STARTconstLink to this entryconst RATING_START := 60.0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:35Town.RATING_REFUSEconstLink to this entryconst RATING_REFUSE := 30.0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:36Town.COUNCIL_RADIUSconstLink to this entryconst COUNCIL_RADIUS := 18This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:37Town.RATING_CRASHconstLink to this entryconst RATING_CRASH := -20.0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:38Town.RATING_NEGLECT_FLOORconstNeglect alone never costs a company its building permission: it stops lowering the rating here.Town.RATING_HOUSEconstWhat demolition costs, per tile.Link to this entryconst RATING_HOUSE := -8.0Tree clearing in one bulldoze action never costs more than RATING_TREES_MAX, so cutting a strip for a railway is a nuisance, not a ban.
Declared inscripts/sim/town.gd:43Town.RATING_STREETconstLink to this entryconst RATING_STREET := -3.0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:44Town.RATING_TREEconstLink to this entryconst RATING_TREE := -0.5This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:45Town.RATING_TREES_MAXconstLink to this entryconst RATING_TREES_MAX := -6.0This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:46Town.BUSY_NOISEconstHow far the noise of a busy industry lowers land values (Industry.BUSY, land_value).Town.LOG_SIZEconstLink to this entryconst LOG_SIZE := 8This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:49Town.ratingfuncReturns the council’s current rating for a company ID on the 0–100 scale.Link to this entryfunc rating(cid: int) -> floatCompanies without a recorded rating receive the starting value.
- Parameters
cid: int
- Returns
float
scripts/sim/town.gd:52Town.change_ratingfuncwhy(a short phrase such as "Demolished buildings") anddayrecord the change in the rating log, so the town window can explain where a rating came from.Link to this entryfunc change_rating(cid: int, delta: float, why: String = "", day: int = -1) -> void- Parameters
cid: intdelta: floatwhy: String = ""day: int = -1
- Returns
void
scripts/sim/town.gd:58Town.is_streetfuncA town's own streets: roads inside the built-up area.Link to this entryfunc is_street(x: int, y: int) -> boolRoads a company lays in open country aren't.
- Parameters
x: inty: int
- Returns
bool
scripts/sim/town.gd:77Town.rating_namestatic funcLink to this entrystatic func rating_name(r: float) -> String- Parameters
r: float
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:81Town._markfuncLink to this entryfunc _mark(x: int, y: int) -> void- Parameters
x: inty: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:91Town._initfuncLink to this entryfunc _init(p_id: int, p_name: String, x: int, y: int, p_grid: int) -> void- Parameters
p_id: intp_name: Stringx: inty: intp_grid: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:96Town.roll_monthfuncLink to this entryfunc roll_month() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:104Town.growth_intervalfuncDays between growth spurts: faster when served by stations and supplied with goods / food.Link to this entryfunc growth_interval(day: int) -> int- Parameters
day: int
- Returns
int
scripts/sim/town.gd:117Town.boundsfuncTile rectangle the town's buildings occupy (used for redraws after growth).Town.on_grid_xfuncLink to this entryfunc on_grid_x(x: int) -> bool- Parameters
x: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:136Town.on_grid_yfuncLink to this entryfunc on_grid_y(y: int) -> bool- Parameters
y: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:140Town.seed_roadsfuncThe initial crossroads at the town centre.Link to this entryfunc seed_roads(m: WorldMap, rng: RandomNumberGenerator) -> void- Parameters
m: WorldMaprng: RandomNumberGenerator
- Returns
void
scripts/sim/town.gd:145Town.zone_popvarPeople by zone (kept up to date as buildings come and go), the street layout, and what this town needs most right now.Link to this entryvar zone_pop := {"R": 0, "C": 0, "I": 0, "L": 0, "A": 0}Declared inscripts/sim/town.gd:159Town.layoutvargrid | organicTown.stylevarbuilding style: classic | tudor | mediterranean | nordic | brickTown.landmarksvarbuilding type -> true once builtTown.pop_historyvarpopulation at each month end (last 36)Town.demandfuncResidential / commercial / industrial demand, each -1..1 (SimCity's RCI meter).Link to this entryfunc demand(day: int = -1) -> Vector3Homes follow jobs, shops follow residents and deliveries, workshops follow residents.
- Parameters
day: int = -1
- Returns
Vector3
scripts/sim/town.gd:168Town._pick_zonefuncLink to this entryfunc _pick_zone(rng: RandomNumberGenerator, day: int) -> String- Parameters
rng: RandomNumberGeneratorday: int
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:180Town.land_valuefuncLand value of a plot (roughly 0..100): the centre, busy stations, water, trees and landmarks raise it; industry and railway noise lower it.Link to this entryfunc land_value(m: WorldMap, x: int, y: int, ctx: Dictionary) -> floatctxmay carry "stations" (served station positions), "industries" and "busy" (positions of well-staffed industries, heard up to BUSY_NOISE tiles away: RAIL-28) from the sim.- Parameters
m: WorldMapx: inty: intctx: Dictionary
- Returns
float
scripts/sim/town.gd:195Town._type_forfuncThe building a zone gets on a plot of this land value, in this year's style.Link to this entryfunc _type_for(zone: String, lv: float, rng: RandomNumberGenerator, year: int = 1950) -> String- Parameters
zone: Stringlv: floatrng: RandomNumberGeneratoryear: int = 1950
- Returns
String
- Calls
Data.can_build
scripts/sim/town.gd:240Town.growfuncOne growth step: maybe a landmark, else a building for the zone in demand, a new street, or a rebuild into something denser where land has become valuable.Link to this entryfunc grow(m: WorldMap, rng: RandomNumberGenerator, ctx: Dictionary = {}) -> bool- Parameters
m: WorldMaprng: RandomNumberGeneratorctx: Dictionary = {}
- Returns
bool
scripts/sim/town.gd:267Town._try_housefuncLink to this entryfunc _try_house(m: WorldMap, x: int, y: int, rng: RandomNumberGenerator, zone: String = "R", ctx: Dictionary = {}) -> bool- Parameters
m: WorldMapx: inty: intrng: RandomNumberGeneratorzone: String = "R"ctx: Dictionary = {}
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:290Town._try_roadfuncLink to this entryfunc _try_road(m: WorldMap, x: int, y: int, rng: RandomNumberGenerator) -> bool- Parameters
m: WorldMapx: inty: intrng: RandomNumberGenerator
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:306Town._organic_okfuncOrganic streets wander, but never run right alongside another street (which would leave no room for buildings).Link to this entryfunc _organic_ok(m: WorldMap, x: int, y: int, d: int) -> bool- Parameters
m: WorldMapx: inty: intd: int
- Returns
bool
scripts/sim/town.gd:345Town._try_upgradefuncLink to this entryfunc _try_upgrade(m: WorldMap, rng: RandomNumberGenerator, ctx: Dictionary = {}) -> bool- Parameters
m: WorldMaprng: RandomNumberGeneratorctx: Dictionary = {}
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:358Town._try_landmarkfuncLandmarks arrive as the town grows: a church, then a park, then a town hall.Link to this entryfunc _try_landmark(m: WorldMap, rng: RandomNumberGenerator) -> boolAttractions (cinema, museum, funfair, stadium, and a resort by the sea) follow as it gets bigger.
- Parameters
m: WorldMaprng: RandomNumberGenerator
- Returns
bool
scripts/sim/town.gd:392Town._place_landmarkfuncLink to this entryfunc _place_landmark(m: WorldMap, rng: RandomNumberGenerator, want: String) -> bool- Parameters
m: WorldMaprng: RandomNumberGeneratorwant: String
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:418Town._redevelopfuncNo free plot: rebuild a modest building near the centre as the new landmark or attraction.Link to this entryfunc _redevelop(m: WorldMap, rng: RandomNumberGenerator, want: String, r: int) -> bool- Parameters
m: WorldMaprng: RandomNumberGeneratorwant: Stringr: int
- Returns
bool
scripts/sim/town.gd:432Town.pick_stylestatic funcA town's building style, from where it stands: seaside towns lean Mediterranean, hill towns Nordic, the rest a mix.Link to this entrystatic func pick_style(m: WorldMap, t: Town) -> StringDerived from the name so it doesn't disturb world generation.
- Parameters
m: WorldMapt: Town
- Returns
String
scripts/sim/town.gd:462Town._near_seafuncLink to this entryfunc _near_sea(m: WorldMap) -> bool- Parameters
m: WorldMap
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:478Town._place_attractionfuncAttractions go on a free plot by a road: the stadium and funfair towards the edge of town, the resort by the water, the rest near the centre.Link to this entryfunc _place_attraction(m: WorldMap, rng: RandomNumberGenerator, want: String) -> bool- Parameters
m: WorldMaprng: RandomNumberGeneratorwant: String
- Returns
bool
scripts/sim/town.gd:489Town._water_distancefuncLink to this entryfunc _water_distance(m: WorldMap, x: int, y: int) -> float- Parameters
m: WorldMapx: inty: int
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:525Town._set_buildingfuncLink to this entryfunc _set_building(o: Dictionary, type: String, rng: RandomNumberGenerator) -> void- Parameters
o: Dictionarytype: Stringrng: RandomNumberGenerator
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:534Town._countfuncLink to this entryfunc _count(type: String, people: int) -> void- Parameters
type: Stringpeople: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:544Town.remove_buildingfuncRemove a building's people (it was demolished).Link to this entryfunc remove_building(o: Dictionary) -> void- Parameters
o: Dictionary
- Returns
void
scripts/sim/town.gd:551Town.restore_buildingfuncPut back a building's people (its demolition was undone): the opposite of remove_building.Link to this entryfunc restore_building(o: Dictionary) -> void- Parameters
o: Dictionary
- Returns
void
scripts/sim/town.gd:559Town.recountfuncRebuild the zone tallies from the map (after loading).Link to this entryfunc recount(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/town.gd:567Town.recount_allstatic funcrecountfor every town of the map in one pass over its tiles.Link to this entrystatic func recount_all(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/town.gd:578Town.place_housefuncPlace a house facing directionfacing(towards its road).Link to this entryfunc place_house(m: WorldMap, x: int, y: int, facing: int, type: String, rng: RandomNumberGenerator) -> void- Parameters
m: WorldMapx: inty: intfacing: inttype: Stringrng: RandomNumberGenerator
- Returns
void
scripts/sim/town.gd:592Town.MODESTconstLink to this entryconst MODEST := ["cottage", "house", "shop", "modern", "workshop"]This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:619Town.size_ofstatic funcHow many tiles along each side a building oftypetakes.Link to this entrystatic func size_of(type: String) -> int- Parameters
type: String
- Returns
int
scripts/sim/town.gd:623Town.building_atstatic funcThe town building on tilet, whichever of its tiles that is; null where there is none.Link to this entrystatic func building_at(m: WorldMap, t: Vector2i) -> Variant- Parameters
m: WorldMapt: Vector2i
- Returns
Variant
scripts/sim/town.gd:628Town.anchor_ofstatic funcThe north-west tile of the building ont(titself for a one-tile building).Link to this entrystatic func anchor_of(m: WorldMap, t: Vector2i) -> Vector2i- Parameters
m: WorldMapt: Vector2i
- Returns
Vector2i
scripts/sim/town.gd:638Town.footprintstatic funcEvery tile of the building whose north-west tile isanchor.Link to this entrystatic func footprint(m: WorldMap, anchor: Vector2i) -> Array[Vector2i]- Parameters
m: WorldMapanchor: Vector2i
- Returns
Array[Vector2i]
scripts/sim/town.gd:644Town.big_plotfuncThe 2 x 2 plot for a big building whose front tile (x, y) faces a road in directionfacing: it reaches one tile back from the road and one to either side, whichever is free.Link to this entryfunc big_plot(m: WorldMap, x: int, y: int, facing: int, rebuild: bool = false) -> Rect2iWith
rebuild, a tile holding a modest building of this town counts as free (the building makes way). An empty rect where there is no room.- Parameters
m: WorldMapx: inty: intfacing: intrebuild: bool = false
- Returns
Rect2i
scripts/sim/town.gd:658Town._plot_freefuncLink to this entryfunc _plot_free(m: WorldMap, t: Vector2i, rebuild: bool) -> bool- Parameters
m: WorldMapt: Vector2irebuild: bool
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/town.gd:673Town._place_bigfuncPut a big building onplot(see big_plot), facingfacing.Link to this entryfunc _place_big(m: WorldMap, plot: Rect2i, facing: int, type: String, rng: RandomNumberGenerator) -> void- Parameters
m: WorldMapplot: Rect2ifacing: inttype: Stringrng: RandomNumberGenerator
- Returns
void
scripts/sim/town.gd:683Town.restore_annexesstatic funcMark the other tiles of every big building (after loading: only its own tile is saved).Link to this entrystatic func restore_annexes(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/town.gd:705Town.enlarge_old_buildingsstatic funcA game saved before big buildings has its stadium on a single tile.Link to this entrystatic func enlarge_old_buildings(m: WorldMap) -> voidGive each one its full plot where there is room behind it - modest buildings next door make way, as they do when a town builds a new one - and leave it small where roads or bigger buildings hem it in.
- Parameters
m: WorldMap
- Returns
void
scripts/sim/town.gd:720
Station
Station.CATCH_RAILconstLink to this entryconst CATCH_RAIL := 4This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:5Station.CATCH_ROADconstLink to this entryconst CATCH_ROAD := 3This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:6Station.CATCH_DOCKconstLink to this entryconst CATCH_DOCK := 4This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:7Station.CATCH_AIRconstLink to this entryconst CATCH_AIR := 5This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:8Station.TRANSFER_DISTANCEconstLink to this entryconst TRANSFER_DISTANCE := 3This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:9Station.SUFFIXESconstLink to this entryconst SUFFIXESThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:10Station.idvarLink to this entryvar id := 0This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:13Station.namevarLink to this entryvar name := ""This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:14Station.tilesvarLink to this entryvar tiles: Array[Vector2i] = []This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:15Station.has_railvarLink to this entryvar has_rail := falseThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:16Station.has_roadvarLink to this entryvar has_road := falseThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:17Station.has_dockvarLink to this entryvar has_dock := falseThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:18Station.has_airvarLink to this entryvar has_air := falseThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:19Station.catchmentvartile index -> trueStation.acceptsvarCargo IDs that can be delivered in this station’s catchment.Link to this entryvar accepts: Array = []A vehicle can unload and earn a fare here for a supported cargo.
Declared inscripts/sim/station.gd:21Station.suppliesvarCargo IDs supplied by towns or industries in the station’s catchment.Link to this entryvar supplies: Array = []Read
Declared inwaitingfor the amount currently available to load.scripts/sim/station.gd:22Station.deletedvarLink to this entryvar deleted := falseThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:23Station.ownervarThe company that owns the station.Link to this entryvar owner: Company = nullCan be
Declared innull, for example at an oil rig dock. Useusable_by(company)to check access.scripts/sim/station.gd:24Station.rigvarThe industry out at sea this dock is built into (an oil rig), or null.Link to this entryvar rig: Industry = nullSuch a dock belongs to nobody: every company's ships may call there, and it is never built or removed by hand.
Declared inscripts/sim/station.gd:27Station.townvarthe town whose council looks after this station's areaStation.attractionsvarattraction types inside the catchment (tourist fares)Station.workersvaran industry in reach employs passengers who come here (RAIL-28)Station.waitingvaramount waiting (float)Station.transfersvarCargo left here by vehicles with a transfer order, for another vehicle to carry on (RAIL-20): [{"amt", "c", "from", "pos", "day", "credit"}], oldest first.Link to this entryvar transfers: Array = []It is part of
Declared inwaitingtoo; these packets remember where and when it was first loaded, so the last leg is paid for the whole trip.scripts/sim/station.gd:37Station.ratingvar0..1, share of nearby production this station receivesStation.servedvartrue once a vehicle with this cargo has orders hereStation.last_pickupvargame day of the last loading attemptStation.last_speedvarspeed of the last vehicle that loaded here (tiles/day)Station.last_agevarage in years of the last vehicle that loaded hereStation.first_arrivalvarLink to this entryvar first_arrival := trueThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:43Station.match_toldvarthe player has had the news of this station's first match dayStation.last_visitvargame day a vehicle last called hereStation.pickedvarcargo -> units loaded this monthStation.picked_lastvarLink to this entryvar picked_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:47Station.deliveredvarcargo -> units unloaded (and paid for) this monthStation.delivered_lastvarLink to this entryvar delivered_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:49Station.earnedvarfares paid for deliveries here this monthStation.earned_lastvarLink to this entryvar earned_last := 0This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:51Station.inflowvarHow much of each cargo comes here in a month, as a running estimate (Economy._update_ratings): what waits beyond this slowly gives up (RAIL-56).Link to this entryvar inflow := {}Production and transfers count; a match-day crowd doesn't, so the fans who can't get away go home over the following weeks.
Declared inscripts/sim/station.gd:55Station.arrivedvarcargo -> units come since the last production runStation.catch_rectvarLink to this entryvar catch_rect := Rect2i()This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:59Station.house_okvarLink to this entryvar house_ok := falseThis entry has no behavior notes yet.
Declared inscripts/sim/station.gd:60Station._housesvarLink to this entryvar _houses := PackedInt32Array()This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:61Station.roll_monthfuncLink to this entryfunc roll_month() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:64Station._initfuncLink to this entryfunc _init(p_id: int, p_name: String) -> void- Parameters
p_id: intp_name: String
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:73Station.tiles_offuncTiles vehicles ofkindstop on: platforms, road stops, the water in front of a dock, the airfield.Link to this entryfunc tiles_of(m: WorldMap, kind: String) -> Dictionary- Parameters
m: WorldMapkind: String
- Returns
Dictionary
scripts/sim/station.gd:79Station.usable_byfuncWhetherwho's vehicles may have orders here: its own stations and the open docks of oil rigs.Link to this entryfunc usable_by(who: Company) -> bool- Parameters
who: Company
- Returns
bool
scripts/sim/station.gd:100Station.has_kindfuncTests whether the station supportsrail,road,water, orair.Link to this entryfunc has_kind(kind: String) -> boolFor ships use
water, even though the construction kind for a dock isdock.- Parameters
kind: String
- Returns
bool
scripts/sim/station.gd:104Station.transfer_neighborsfuncOther stations of the same company within TRANSFER_DISTANCE steps of any of our tiles.Link to this entryfunc transfer_neighbors(m: WorldMap) -> Array[Station]- Parameters
m: WorldMap
- Returns
Array[Station]
scripts/sim/station.gd:114Station.transfer_amountfuncUnits ofcleft here by transfers and still waiting.Link to this entryfunc transfer_amount(c: String) -> int- Parameters
c: String
- Returns
int
scripts/sim/station.gd:132Station.add_transferfuncLeave cargo from a vehicle here for another to pick up (see Economy.unload).Link to this entryfunc add_transfer(p: Dictionary) -> void- Parameters
p: Dictionary
- Returns
void
scripts/sim/station.gd:141Station.add_waitingfuncCargoccomes here to wait: counted inwaitingand in what arrives (seeinflow).Link to this entryfunc add_waiting(c: String, amt: float) -> void- Parameters
c: Stringamt: float
- Returns
void
scripts/sim/station.gd:147Station.take_transfersfuncTake up tonunits of transferredc(oldest first), as packets to put on board.Link to this entryfunc take_transfers(c: String, n: int) -> ArrayWaiting cargo that went away (a poor rating, the cap) takes the transferred share with it first.
- Parameters
c: Stringn: int
- Returns
Array
scripts/sim/station.gd:154Station.platform_lenfuncLength in tiles of the platformtis part of: the straight row of this station's rail tiles along the track throught(0 iftisn't one of them).Link to this entryfunc platform_len(m: WorldMap, t: Vector2i) -> int- Parameters
m: WorldMapt: Vector2i
- Returns
int
scripts/sim/station.gd:185Station.longest_platformfuncThe longest of this station's platforms, in tiles (0 without any).Link to this entryfunc longest_platform(m: WorldMap) -> int- Parameters
m: WorldMap
- Returns
int
scripts/sim/station.gd:205Station.air_posfuncWhere aircraft park: the middle of the runway.Link to this entryfunc air_pos(m: WorldMap) -> Vector2- Parameters
m: WorldMap
- Returns
Vector2
scripts/sim/station.gd:215Station.is_runwaystatic funcAirfields are 3 x 2 tiles: the runway is the first row (axis 0) or first column (axis 1).Link to this entrystatic func is_runway(o: Dictionary) -> bool- Parameters
o: Dictionary
- Returns
bool
scripts/sim/station.gd:227Station.total_waitingfuncSums the station’s waiting quantities across all cargo IDs and converts the result to a whole number.Link to this entryfunc total_waiting() -> intFor a single cargo read that key in
waiting.- Returns
int
scripts/sim/station.gd:232Station.sign_posfuncReturns the average position of the station’s tile centers, in world tile coordinates.Link to this entryfunc sign_pos() -> Vector2Useful for locating a news item on the map.
- Returns
Vector2
scripts/sim/station.gd:239Station.stop_posfuncFor a road vehicle, point to the roadside stop even when it shares a station with other modes.Link to this entryfunc stop_pos(m: WorldMap, kind: String) -> Vector2- Parameters
m: WorldMapkind: String
- Returns
Vector2
scripts/sim/station.gd:247Station.refreshfuncRecompute station type flags, catchment and what it accepts / supplies.Link to this entryfunc refresh(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/station.gd:257Station.refresh_coveragefuncRecheck what reaches this station after its surroundings change.Link to this entryfunc refresh_coverage(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/station.gd:300Station.house_tilesfuncThe tiles of the catchment with a house on them, in catchment order.Link to this entryfunc house_tiles(m: WorldMap) -> PackedInt32Array- Parameters
m: WorldMap
- Returns
PackedInt32Array
scripts/sim/station.gd:309Station.add_catchmentstatic funcLink to this entrystatic func add_catchment(m: WorldMap, catch: Dictionary, t: Vector2i, r: int) -> void- Parameters
m: WorldMapcatch: Dictionaryt: Vector2ir: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:335Station.coveragestatic funcWhat a catchment area accepts and supplies.Link to this entrystatic func coverage(m: WorldMap, catch: Dictionary) -> DictionaryTowns accept passengers from 12 residents and goods / food from 60; houses supply passengers and mail (waste too, from the Late century). Some buildings take more in later eras, and so does every house of a big enough town (Data.TOWN_TAKES: electronics, cars). An industry that employs people takes passengers as workers and sends some home again ("workers": true).
- Parameters
m: WorldMapcatch: Dictionary
- Returns
Dictionary
scripts/sim/station.gd:346Station.nearest_townstatic funcLink to this entrystatic func nearest_town(m: WorldMap, p: Vector2, within: float) -> Town- Parameters
m: WorldMapp: Vector2within: float
- Returns
Town
This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:409Station.make_namestatic funcLink to this entrystatic func make_name(m: WorldMap, at: Vector2i) -> String- Parameters
m: WorldMapat: Vector2i
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/station.gd:420
Vehicle
Vehicle.LOCO_LENconstLink to this entryconst LOCO_LEN := 0.56This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:8Vehicle.CAR_LENconstLink to this entryconst CAR_LEN := 0.5This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:9Vehicle.RV_LENconstLink to this entryconst RV_LEN := 0.46This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:10Vehicle.SHIP_LENconstLink to this entryconst SHIP_LEN := 0.9This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:11Vehicle.PLANE_LENconstLink to this entryconst PLANE_LEN := 0.7This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:12Vehicle.CRUISEconstflight altitude above the groundVehicle.LOAD_RATEconstunits moved per day while loadingVehicle.LANEconstroad vehicles keep right by this muchVehicle.ROAD_GAPconstQueues (RAIL-26).Link to this entryconst ROAD_GAP := 0.12A road vehicle keeps ROAD_GAP behind the one ahead in its lane and, stuck for ROAD_GIVE_UP days, drives through, so a jam always clears (as trains do at signals). A ship waits for a free berth and a plane holds for a free stand at most QUEUE_GIVE_UP days, then goes in anyway.
Declared inscripts/sim/vehicle.gd:19Vehicle.ROAD_GIVE_UPconstLink to this entryconst ROAD_GIVE_UP := 3.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:20Vehicle.QUEUE_GIVE_UPconstLink to this entryconst QUEUE_GIVE_UP := 15.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:21Vehicle.STANDSconstaircraft an airport takes at a timeVehicle.HOLD_ATconsthow far out a plane asks for a stand: where it would start to descendVehicle.HOLD_Rconstradius of the circle a plane holds on, at cruising height...Vehicle.HOLD_STEPconst...or that much wider, or twice that (see _hold_r)Vehicle.HOLD_BANKconsthow far it leans into that circle (radians)Vehicle.ORDER_FLAGSconstWhat an order can say besides "full": leave unaccepted cargo for another vehicle (RAIL-20); unload everything and take nothing on; deliver but take nothing on; call at a depot before the next stop (RAIL-36).Link to this entryconst ORDER_FLAGS := ["transfer", "unload", "no_load", "depot"]Saved in this order (see SaveGame).
Declared inscripts/sim/vehicle.gd:30Vehicle.idvarLink to this entryvar id := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:32Vehicle.namevarLink to this entryvar name := ""This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:33Vehicle.model_idvarLink to this entryvar model_id := ""This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:34Vehicle.modelvarLink to this entryvar model: DictionaryThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:35Vehicle.kindvarLink to this entryvar kind := "road"This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:36Vehicle.cargovarLink to this entryvar cargo := "pax"This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:37Vehicle.wagonsvarLink to this entryvar wagons := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:38Vehicle.ownervarLink to this entryvar owner: CompanyThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:39Vehicle.ordersvar[{"st": Station, "full": bool, and any of ORDER_FLAGS: bool (missing: false)}]Vehicle.order_idxvarLink to this entryvar order_idx := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:41Vehicle.statevarloading | moving | lost | stopped | servicing | wrecked (see Sim.wrecks)Vehicle.statusvarLink to this entryvar status := ""This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:44Vehicle.timervarLink to this entryvar timer := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:45Vehicle.segsvarpath history; the last one is the one the head is onVehicle.tvarprogress along the last segment (0..1)Vehicle.routevarLink to this entryvar route: Array[Vector2i] = []This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:48Vehicle.rpvarindex inrouteof the tile the head is inVehicle.speedvarcurrent speed, tiles per dayVehicle.at_stationvarLink to this entryvar at_station: Station = nullThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:51Vehicle.lost_ctxvarLink to this entryvar lost_ctx := {}This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:52Vehicle.lost_triesvarLink to this entryvar lost_tries := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:53Vehicle.capvarLink to this entryvar cap := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:55Vehicle.packetsvar[{"amt": int, "from": Station, "day": float}]Vehicle.profit_thisvarLink to this entryvar profit_this := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:57Vehicle.profit_lastvarLink to this entryvar profit_last := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:58Vehicle.income_totalvarLink to this entryvar income_total := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:59Vehicle.age_daysvarLink to this entryvar age_days := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:60Vehicle.costvarLink to this entryvar cost := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:61Vehicle.tripsvarLink to this entryvar trips := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:62Vehicle.stopped_by_playervarLink to this entryvar stopped_by_player := falseThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:63Vehicle.sig_waitvardays spent waiting at a red signal or in front of a junctionVehicle.held_atvarWhat the train waited at when it last moved: 0 nothing, 1 a signal, 2 a junction (RAIL-80).Vehicle.GIVE_UP_DAYSconsta train held this long at a signal or junction is deadlockedVehicle._backoff_tryvarwhen it last tried turning round out of a deadlockVehicle._backed_off_atvarwhen it last didVehicle._forced_atvarwhen it last went on anyway, unable to turn roundVehicle._turnedvar_held_up turned it round just now (see _advance)Vehicle._detour_dayvarwhen it last looked for a way round a busy stretch (see _detour)Vehicle.queue_waitvardays held up in a queue: in traffic, for a berth, or holding (RAIL-26)Vehicle.hold_avaraircraft holding over a full airport: its angle round the circle, -1 when notVehicle.old_warnedvarLink to this entryvar old_warned := falseThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:75Vehicle.electricvarneeds overhead wires (set from the model)Vehicle.wagon_cargosvartrains: the cargo of each wagon, front to back (mixed trains)Vehicle.reliabilityvar0..1; wears down day by day, restored by servicingVehicle.last_servicevargame day of the last serviceVehicle.breakdownsvarLink to this entryvar breakdowns := 0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:80Vehicle.brokenvardays left standing broken downVehicle.service_tovarthe depot it's heading to for servicingVehicle.load_avgvarrunning average of how full it leaves stations (0..1), -1 until knownVehicle.last_tripvarlast paid delivery: {"pay", "units", "day", "st"}Vehicle.look_revvargoes up when a refit changes how it looks (the view redraws it)Vehicle.refit_tovara change of cargo ordered and paid for, done at the depot (see refit)Vehicle.refit_paidvarwhat ordering it cost (given back if it is cancelled)Vehicle.stuck_cargovara cargo on board that no stop in the orders accepts (see _check_stuck)Vehicle.stuck_stopsvarstops it has called at with that cargo on board, undeliveredVehicle.stuck_newsvargame day the player was last told about it (-1: never)Vehicle.linevarthe line it runs on (itsordersare then the line's), or nullVehicle.lap_startvargame day it last left its line's first stop (-1: not yet)Vehicle.heldvardays held at the first stop this round to keep the line evenly spacedVehicle.air_fromvarLink to this entryvar air_from := Vector2.ZEROThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:95Vehicle.air_tovarLink to this entryvar air_to := Vector2.ZEROThis entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:96Vehicle.air_dvarLink to this entryvar air_d := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:97Vehicle.air_y0varLink to this entryvar air_y0 := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:98Vehicle.air_y1varLink to this entryvar air_y1 := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:99Vehicle._accelvaracceleration as a multiple of the top speed, by kindVehicle._lenvarlength of a road vehicle, ship or aircraft (of model_len_of)Vehicle._len_ofvarLink to this entryvar _len_of := ""This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:103Vehicle._back_uvarsecond result of _back_iVehicle._routesvarroutes found before, by order (see _find)Vehicle._fitvartrains: the share of the train alongside the platform it stands atVehicle._coursevarships: the straight courseroutefollows (see water_course), {} for noneVehicle._queuedvarheld up in a queue this step (counts towardsqueue_wait)Vehicle._blocked_byvarroad vehicles: id of the one it is keeping behind (0: none)Vehicle.route_cachestatic varSwitch for the tests: with it off every departure searches for its route again.Vehicle._seg_cachestatic varmake_seg results by tile, sides and shapeVehicle.SEG_CACHE_MAXconstLink to this entryconst SEG_CACHE_MAX := 200000This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:113Vehicle._initfuncLink to this entryfunc _init(p_id: int, p_model: String, p_cargo: String, p_wagons: int, p_owner: Company) -> void- Parameters
p_id: intp_model: Stringp_cargo: Stringp_wagons: intp_owner: Company
- Returns
void
- Calls
Data.model,Data.wagon_cap
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:116Vehicle._default_namefuncThe name a vehicle gets when bought: what it is and its number.Link to this entryfunc _default_name() -> String- Returns
String
- Calls
L.t
scripts/sim/vehicle.gd:135Vehicle.load_amountfuncLink to this entryfunc load_amount() -> int- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:145Vehicle.set_consistfuncA train's wagons, one cargo each (front to back).Link to this entryfunc set_consist(list: Array) -> voidcargobecomes the first wagon's.- Parameters
list: Array
- Returns
void
- Calls
Data.wagon_cap
scripts/sim/vehicle.gd:153Vehicle.refitfuncChange what the vehicle carries: a train's wagons (one cargo each, front to back) or the one cargo of anything else.Link to this entryfunc refit(list: Array, m: WorldMap = null) -> voidCargo on board that no longer has room is lost. Sim.refit_vehicle orders it and Sim.finish_refit calls this once the vehicle is at a depot.
- Parameters
list: Arraym: WorldMap = null
- Returns
void
scripts/sim/vehicle.gd:168Vehicle._trim_loadfuncDrop what no longer fits on board (was: the cargo of packets from before they were labelled).Link to this entryfunc _trim_load(was: String) -> void- Parameters
was: String
- Returns
void
scripts/sim/vehicle.gd:187Vehicle.change_modelfuncBecome another model of the same kind, where it stands (see Sim.replace_vehicle, which checks that the model can carry its cargo and run its route).Link to this entryfunc change_model(p_model: String) -> voidA train keeps its wagons, as many as the new engine pulls; anything else gets the new model's capacity. Cargo without room is lost.
- Parameters
p_model: String
- Returns
void
- Calls
Data.model,Data.wagon_cap
scripts/sim/vehicle.gd:205Vehicle._grow_tailfuncLay more history behind the tail, following the track, so a train that just got longer has somewhere to stand (the same walkspawndoes).Link to this entryfunc _grow_tail(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
- Calls
Const.opp
scripts/sim/vehicle.gd:228Vehicle.cargosfuncThe cargos this vehicle carries (several for a mixed train).Vehicle.is_mixedfuncLink to this entryfunc is_mixed() -> bool- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:273Vehicle.cap_offuncReturns the capacity for one cargo ID.Link to this entryfunc cap_of(c: String) -> intFor mixed trains, it counts only wagons assigned to that cargo. A cargo the vehicle cannot currently carry has capacity zero.
- Parameters
c: String
- Returns
int
- Calls
Data.wagon_cap
scripts/sim/vehicle.gd:277Vehicle.load_offuncAdds up the units in the vehicle’s cargo packets for one cargo ID.Link to this entryfunc load_of(c: String) -> intThis is the current load, rather than available room.
- Parameters
c: String
- Returns
int
scripts/sim/vehicle.gd:287Vehicle.running_costfuncReturns the annual running cost of the model plus its wagons.Vehicle.life_yearsfuncReturns the usual service life in years for the vehicle’s transport kind.Vehicle.is_oldfuncChecks whether the vehicle’s age in days exceeds its service life in years, using 365 days per year.Vehicle.valuefuncReturns the current resale value in dollars.Link to this entryfunc value() -> intThe value falls with age and bottoms out at 15 percent of purchase cost.
- Returns
int
scripts/sim/vehicle.gd:307Vehicle.max_speedfuncReturns the model’s maximum speed in tiles per game day.Link to this entryfunc max_speed() -> floatSteam trains lose three percent of model speed per wagon in this calculation.
- Returns
float
scripts/sim/vehicle.gd:311Vehicle.train_lengthfuncLink to this entryfunc train_length() -> float- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:318Vehicle.tiles_longstatic funcHow many platform tiles a train withn_wagonswagons needs to stand alongside in full.Link to this entrystatic func tiles_long(n_wagons: int) -> intA buffer's worth of overhang (
OVERHANG_OK) doesn't count: two wagons a tile, less one for the engine, so 3 tiles take 5 wagons.- Parameters
n_wagons: int
- Returns
int
scripts/sim/vehicle.gd:330Vehicle.OVERHANG_OKconstLink to this entryconst OVERHANG_OK := 0.1This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:334Vehicle.platform_fitstatic funcThe share of a train oflengthtiles that is alongside a platform ofplatformtiles.Link to this entrystatic func platform_fit(length: float, platform: int) -> floatOnly those wagons load and unload at a time, so loading a train longer than the platform takes longer (the rest are drawn up in turns) while its back wagons stick out onto the line behind (RAIL-18).
- Parameters
length: floatplatform: int
- Returns
float
scripts/sim/vehicle.gd:340Vehicle.body_lenstatic funcLength of a road vehicle, ship or aircraft of this model (see Data.LENGTH).Link to this entrystatic func body_len(id: String) -> float- Parameters
id: String
- Returns
float
- Calls
Data.model,Data.look
scripts/sim/vehicle.gd:347Vehicle.destfuncLink to this entryfunc dest() -> Station- Returns
Station
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:356Vehicle._edgestatic funcLink to this entrystatic func _edge(t: Vector2i, d: int) -> Vector2- Parameters
t: Vector2id: int
- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:362Vehicle._centerstatic funcLink to this entrystatic func _center(t: Vector2i) -> Vector2- Parameters
t: Vector2i
- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:366Vehicle.make_segstatic funcA segment crossing tilet, entering through sideaand leaving through sideb(-1 means starting or stopping at the tile centre).Link to this entrystatic func make_seg(t: Vector2i, a: int, b: int, chord: int = 0) -> Dictionarychord: the piece's shape (see WorldMap.piece_shape) when it is part of a diagonal run or eases into one; the piece is then a cubic curve.- Parameters
t: Vector2ia: intb: intchord: int = 0
- Returns
Dictionary
scripts/sim/vehicle.gd:374Vehicle._seg_lenstatic funcLink to this entrystatic func _seg_len(s: Dictionary) -> float- Parameters
s: Dictionary
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:404Vehicle.seg_posstatic funcLink to this entrystatic func seg_pos(s: Dictionary, u: float) -> Vector2- Parameters
s: Dictionaryu: float
- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:414Vehicle.seg_dirstatic funcThe way along segmentsatu(not normalised; zero only half-way round a U-turn).Link to this entrystatic func seg_dir(s: Dictionary, u: float) -> Vector2- Parameters
s: Dictionaryu: float
- Returns
Vector2
scripts/sim/vehicle.gd:426Vehicle.rev_segstatic funcLink to this entrystatic func rev_seg(s: Dictionary) -> Dictionary- Parameters
s: Dictionary
- Returns
Dictionary
- Calls
WorldMap.flip_shape
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:437Vehicle._segfuncA segment through tiletthat knows whether it's part of a diagonal run.Link to this entryfunc _seg(m: WorldMap, t: Vector2i, a: int, b: int) -> Dictionary- Parameters
m: WorldMapt: Vector2ia: intb: int
- Returns
Dictionary
scripts/sim/vehicle.gd:442Vehicle.SEA_ROOMconstHow far a ship's straight leg keeps from land on either side (tiles).Vehicle.water_coursestatic funcShips aren't held to the grid: they sail straight legs across open water, which bend only where something is in the way.Link to this entrystatic func water_course(m: WorldMap, tiles: Array) -> Dictionarytilesis a route of neighbouring sailable tiles (a Pathfinder answer); the course runs between its ends along the shortest way by water (Pathfinder.find_sea), pulled tight. Returns {"tiles": the tiles the legs pass through, neighbours again, "cross": where the course enters each of them (the first: its centre), "turn": 1 at each tile where two legs meet}.- Parameters
m: WorldMaptiles: Array
- Returns
Dictionary
- Calls
Pathfinder.find_sea
scripts/sim/vehicle.gd:457Vehicle._sea_clearstatic funcWhether a ship can sail straight from the centre of tileato the centre of tileb, keeping SEA_ROOM clear of anything that isn't open water.Link to this entrystatic func _sea_clear(m: WorldMap, a: Vector2i, b: Vector2i) -> bool- Parameters
m: WorldMapa: Vector2ib: Vector2i
- Returns
bool
scripts/sim/vehicle.gd:498Vehicle._walk_linestatic funcThe tiles a straight line fromptoqpasses through after the first, in order and each the neighbour of the one before (through a corner it goes across first), appended totiles, and where it enters each one appended tocross.Link to this entrystatic func _walk_line(p: Vector2, q: Vector2, tiles: Array[Vector2i], cross: PackedVector2Array) -> void- Parameters
p: Vector2q: Vector2tiles: Array[Vector2i]cross: PackedVector2Array
- Returns
void
scripts/sim/vehicle.gd:515Vehicle.course_segstatic funcThe piece of a ship's course (see water_course) in itskth tile.Link to this entrystatic func course_seg(c: Dictionary, k: int, a: int = -2, from: Variant = null) -> Dictionarya: the side it comes in by (-2: from the course, -1: from the tile centre);from: where it starts instead of the course's own entry point (a ship turning onto a new course mid-tile).- Parameters
c: Dictionaryk: inta: int = -2from: Variant = null
- Returns
Dictionary
scripts/sim/vehicle.gd:552Vehicle.free_segstatic funcA segment through tilet(sidesatob) along any curve: fromp0top2, pulled towardsc.Link to this entrystatic func free_seg(t: Vector2i, a: int, b: int, p0: Vector2, c: Vector2, p2: Vector2) -> Dictionary- Parameters
t: Vector2ia: intb: intp0: Vector2c: Vector2p2: Vector2
- Returns
Dictionary
scripts/sim/vehicle.gd:569Vehicle.course_segsstatic funcEvery piece of a ship's course, first to last.Link to this entrystatic func course_segs(c: Dictionary) -> Array- Parameters
c: Dictionary
- Returns
Array
scripts/sim/vehicle.gd:576Vehicle._set_routefuncSet off alongtiles(from the head's tile): a ship's course is pulled straight first.Link to this entryfunc _set_route(m: WorldMap, tiles: Array[Vector2i]) -> void- Parameters
m: WorldMaptiles: Array[Vector2i]
- Returns
void
scripts/sim/vehicle.gd:584Vehicle._first_segfuncThe first piece of a new route, from where the head is now.Link to this entryfunc _first_seg(m: WorldMap, a: int) -> Dictionary- Parameters
m: WorldMapa: int
- Returns
Dictionary
- Calls
BuildOps.dir_between
scripts/sim/vehicle.gd:594Vehicle._pos_backfuncWalkdback from the head along the history: {"i": segment index, "u": position in it}.Link to this entryfunc _pos_back(d: float) -> Dictionary- Parameters
d: float
- Returns
Dictionary
scripts/sim/vehicle.gd:605Vehicle._back_ifuncThe same walk as _pos_back without building a Dictionary: returns the segment index and leaves the position in it in_back_u.Link to this entryfunc _back_i(d: float) -> int- Parameters
d: float
- Returns
int
scripts/sim/vehicle.gd:623Vehicle.pos_atfuncPositiondbehind the nose, or Vector2.INF for a hidden segment when it is excluded.Link to this entryfunc pos_at(d: float, include_hidden: bool = true) -> Vector2- Parameters
d: floatinclude_hidden: bool = true
- Returns
Vector2
scripts/sim/vehicle.gd:642Vehicle.body_pointsfuncPoints everystepalong the train from the nose to the tail (both included), leaving out the part still inside a depot shed.Link to this entryfunc body_points(step: float) -> PackedVector2ArrayFor crash checks (see Sim._check_crashes).
- Parameters
step: float
- Returns
PackedVector2Array
scripts/sim/vehicle.gd:651Vehicle.headingfuncDirection of travel in the current tile (0..3).Link to this entryfunc heading() -> int- Returns
int
- Calls
Const.opp
scripts/sim/vehicle.gd:663Vehicle.head_tilefuncLink to this entryfunc head_tile() -> Vector2i- Returns
Vector2i
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:674Vehicle.spawnfuncPlace the vehicle stopped at the centre of station tiletile, facing directionfacing.Link to this entryfunc spawn(tile: Vector2i, facing: int, m: WorldMap = null, hide_behind: bool = false) -> voidA train's wagons are laid back along the actual track where there is some.
- Parameters
tile: Vector2ifacing: intm: WorldMap = nullhide_behind: bool = false
- Returns
void
- Calls
Const.opp
scripts/sim/vehicle.gd:684Vehicle.updatefuncLink to this entryfunc update(sim: Sim, dt: float) -> void- Parameters
sim: Simdt: float
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:724Vehicle._remainingfuncLink to this entryfunc _remaining() -> float- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:763Vehicle._on_coursefuncWhether the ship is following a course worked out for its route (not one from an older save).Vehicle._movefuncLink to this entryfunc _move(sim: Sim, dt: float) -> void- Parameters
sim: Simdt: float
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:784Vehicle._trimfuncDrop the history further back than the tail needs (the walk of _pos_back, stopping as soon as it is clear nothing can go).Vehicle._advancefuncStep the head into the next tile of the route.Link to this entryfunc _advance(sim: Sim) -> boolReturns false if movement must stop.
- Parameters
sim: Sim
- Returns
bool
- Calls
BuildOps.dir_between,L.t,Const.opp
scripts/sim/vehicle.gd:852Vehicle._gatefuncRealistic blocking: whether the train must stop before it enters route[k], coming from route[k - 1]: 1 where a signal there faces it, 2 where route[k] is the first tile of a junction (RAIL-80: a junction is guarded as if signals stood round it), else 0.Link to this entryfunc _gate(m: WorldMap, k: int) -> int- Parameters
m: WorldMapk: int
- Returns
int
- Calls
BuildOps.dir_between
scripts/sim/vehicle.gd:908Vehicle.way_aheadfuncThe blocks the train must have to itself before it may pass the gate in front of route[k] (see _gate): past a signal, the track beyond it; at a junction, the junction itself and the stretch it leaves it by.Link to this entryfunc way_ahead(m: WorldMap, blocks: Dictionary, k: int, gate: int) -> ArrayA train never stops on a junction: where the stretch past a junction is too short to hold the whole train before the next signal or junction, the way goes on past that one too, to the first place the train can wait clear of every junction. So a train is never let onto a junction it would then have to block while it waits for the track beyond.
- Parameters
m: WorldMapblocks: Dictionaryk: intgate: int
- Returns
Array
- Calls
BuildOps.dir_between
scripts/sim/vehicle.gd:927Vehicle._dir_infuncThe way the head entered the tile it is in, or -1.Link to this entryfunc _dir_in() -> int- Returns
int
- Calls
Const.opp
scripts/sim/vehicle.gd:973Vehicle.claims_aheadfuncThe blocks ahead the train has been let into but not reached yet, for Sim._update_occupancy: standing on a signal, the way past it; inside a junction, the stretch it leaves it by.Link to this entryfunc claims_ahead(m: WorldMap, blocks: Dictionary) -> Array- Parameters
m: WorldMapblocks: Dictionary
- Returns
Array
- Calls
BuildOps.dir_between
scripts/sim/vehicle.gd:981Vehicle._held_upfuncWhether another train holds any of the way past the gate in front of route[k] (see _gate).Link to this entryfunc _held_up(sim: Sim, k: int, gate: int) -> boolWhen it doesn't, the way is claimed at once, so a second train at the same junction waits. Held at a junction, the train looks for another way round once a day: the other side of a passing loop. After waiting GIVE_UP_DAYS (a deadlock) it turns round if it can (see _deadlocked).
- Parameters
sim: Simk: intgate: int
- Returns
bool
scripts/sim/vehicle.gd:998Vehicle._deadlockedfuncA train that has waited GIVE_UP_DAYS for the way ahead.Link to this entryfunc _deadlocked(sim: Sim, need: Array) -> boolIt turns round and finds another way if there is one; only when there is none does it go on anyway. Of the trains that hold each other up, one acts at a time: they never all drive off at once into each other. Returns whether it still waits (or has just turned round: see _turned).
- Parameters
sim: Simneed: Array
- Returns
bool
scripts/sim/vehicle.gd:1022Vehicle._busyfuncLink to this entryfunc _busy(sim: Sim, need: Array) -> bool- Parameters
sim: Simneed: Array
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1051Vehicle._detourfuncAnother way to where the route goes that keeps off the blocks other trains hold, from the tile the head is in through the same next tile (the junction ahead): the free side of a passing loop.Link to this entryfunc _detour(sim: Sim, blocks: Dictionary, need: Array) -> boolTaken only when it isn't much longer. Returns whether the route changed.
- Parameters
sim: Simblocks: Dictionaryneed: Array
- Returns
bool
- Calls
Pathfinder.find
scripts/sim/vehicle.gd:1062Vehicle._red_signal_distfuncDistance to a red signal or a busy junction (or a wreck on the line) ahead within the next couple of tiles, or -1.Link to this entryfunc _red_signal_dist(sim: Sim) -> float- Parameters
sim: Sim
- Returns
float
scripts/sim/vehicle.gd:1087Vehicle._traffic_gapfuncRoad traffic (RAIL-26): how far the front may go before it comes ROAD_GAP short of the back of the vehicle ahead in its lane, or -1 when nothing is in the way.Link to this entryfunc _traffic_gap(sim: Sim) -> floatOnly the vehicles whose front is in its own tile or the next three on its route are looked at (Sim.road_at); one is in its lane when it heads the way this one will cross that tile, so traffic the other way and across a junction passes. Held up for ROAD_GIVE_UP days on end, it drives through until the way is clear, so a jam always clears.
- Parameters
sim: Sim
- Returns
float
- Calls
L.t
scripts/sim/vehicle.gd:1109Vehicle._berth_distfuncShips (RAIL-26): each water tile in front of a dock is a berth for one ship.Link to this entryfunc _berth_dist(sim: Sim) -> floatWhile another ship lies at the berth this one is heading for, it stops short of it: returns how far it may still go, or -1 when it may go in. After QUEUE_GIVE_UP days waiting it goes in anyway.
- Parameters
sim: Sim
- Returns
float
- Calls
L.t
scripts/sim/vehicle.gd:1180Vehicle._end_queuefuncOut of a queue: the wait is over, and the status says where it is going again.Vehicle._heading_statusfuncLink to this entryfunc _heading_status() -> String- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1204Vehicle._free_stopsfuncThe stop tiles no other vehicle of its kind stands at or is on its way to (all of them when every one is): buses and trucks spread over a stop's tiles and ships over a dock's berths, as trains pick a free platform (RAIL-26).Link to this entryfunc _free_stops(sim: Sim, tiles: Dictionary) -> Dictionary- Parameters
sim: Simtiles: Dictionary
- Returns
Dictionary
scripts/sim/vehicle.gd:1215Vehicle._usablefuncA stop the vehicle can actually use: still exists and has tiles of this vehicle's kind.Link to this entryfunc _usable(sim: Sim, st: Station) -> bool- Parameters
sim: Simst: Station
- Returns
bool
scripts/sim/vehicle.gd:1226Vehicle._skip_to_usablefuncMoveorder_idxforward (starting at the current order) to the first usable stop.Link to this entryfunc _skip_to_usable(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
scripts/sim/vehicle.gd:1231Vehicle._go_lostfuncNo route right now: wait and retry, backing off, and after a few failures try the next stop.Link to this entryfunc _go_lost(target: Station, ctx: Dictionary) -> void- Parameters
target: Stationctx: Dictionary
- Returns
void
- Calls
L.t
scripts/sim/vehicle.gd:1240Vehicle._reroutefuncThe way ahead disappeared: find a new route from tiletile, where the head sits on edgeside.Link to this entryfunc _reroute(sim: Sim, tile: Vector2i, side: int) -> bool- Parameters
sim: Simtile: Vector2iside: int
- Returns
bool
- Calls
Pathfinder.find,Const.opp,L.t
scripts/sim/vehicle.gd:1252Vehicle._extend_platformfuncLink to this entryfunc _extend_platform(sim: Sim, tiles: Array[Vector2i]) -> Array[Vector2i]- Parameters
sim: Simtiles: Array[Vector2i]
- Returns
Array[Vector2i]
- Calls
BuildOps.dir_between
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1273Vehicle._arrivefuncLink to this entryfunc _arrive(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
L.t,Economy.unload
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1296Vehicle._loadfuncLink to this entryfunc _load(sim: Sim, st: Station) -> int- Parameters
sim: Simst: Station
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1337Vehicle._load_transfersfuncLink to this entryfunc _load_transfers(source: Station, pickup: Station, c: String, room: int) -> int- Parameters
source: Stationpickup: Stationc: Stringroom: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1371Vehicle._note_pickupfuncLink to this entryfunc _note_pickup(st: Station, c: String, day: float) -> void- Parameters
st: Stationc: Stringday: float
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1384Vehicle._nearby_transfer_sourcesfuncA feeder can't take transfers from its own drop-off orders, even from a nearby pickup stop.Link to this entryfunc _nearby_transfer_sources(sim: Sim, st: Station) -> Array[Station]- Parameters
sim: Simst: Station
- Returns
Array[Station]
scripts/sim/vehicle.gd:1392Vehicle.order_flagfuncWhether the order this vehicle is carrying out atsthas flagkey(see ORDER_FLAGS).Link to this entryfunc order_flag(st: Station, key: String) -> bool- Parameters
st: Stationkey: String
- Returns
bool
scripts/sim/vehicle.gd:1403Vehicle.transfers_atfuncWhether this vehicle's orders say to leave cargostdoesn't accept there, for another vehicle (see Economy.unload): a transfer stop (RAIL-20) or an unload-only one (RAIL-36).Link to this entryfunc transfers_at(st: Station) -> bool- Parameters
st: Station
- Returns
bool
scripts/sim/vehicle.gd:1412Vehicle.loads_atfuncWhether this vehicle may take cargo on atst: not at an unload-only or don't-load stop.Link to this entryfunc loads_at(st: Station) -> bool- Parameters
st: Station
- Returns
bool
scripts/sim/vehicle.gd:1417Vehicle.dropsstatic funcWhether orderoleaves the cargo its stop doesn't accept there: transfer and unload-only stops.Link to this entrystatic func drops(o: Dictionary) -> bool- Parameters
o: Dictionary
- Returns
bool
scripts/sim/vehicle.gd:1422Vehicle.transfer_stopsstatic funcThe stations inorderswhere cargo is left for another vehicle (see drops).Link to this entrystatic func transfer_stops(p_orders: Array) -> Array- Parameters
p_orders: Array
- Returns
Array
scripts/sim/vehicle.gd:1427Vehicle.strandedstatic funcCargo that would be left on board for good: for each ofcargosthat a vehicle calling atstopscould never deliver, [cargo, Station it is picked up at (null when no stop accepts it at all)].Link to this entrystatic func stranded(cargos: Array, stops: Array, transfers: Array = []) -> ArrayA stop never takes back what was loaded there (see Economy.unload), so cargo a stop supplies needs another stop that accepts it. A stop in
transferstakes any cargo (to pass it on).- Parameters
cargos: Arraystops: Arraytransfers: Array = []
- Returns
Array
scripts/sim/vehicle.gd:1439Vehicle._check_stuckfuncCalled on arriving atst, after unloading: note cargo still on board that no stop in the orders accepts.Link to this entryfunc _check_stuck(sim: Sim, st: Station) -> voidIt stays there unpaid, filling the vehicle, until the orders change; the player is told (the vehicle window, the "needs attention" lists and, at most once a year, the news).
- Parameters
sim: Simst: Station
- Returns
void
scripts/sim/vehicle.gd:1459Vehicle.clear_stuckfuncForget the undeliverable cargo (it was delivered, or the orders or the cargo changed).Vehicle.problemfuncWhat is wrong with the vehicle's route, for the player ("" when nothing is).Vehicle._wants_morefuncWhether a full-load order should keep waiting: some wagon still has room for a cargo this station supplies, or that another of the company's vehicles brings here to transfer (a feeder's drop-off point that produces nothing itself); a mixed train doesn't wait for cargo that never comes here.Link to this entryfunc _wants_more(sim: Sim, st: Station) -> boolNever at a stop where it takes nothing on.
- Parameters
sim: Simst: Station
- Returns
bool
scripts/sim/vehicle.gd:1511Vehicle._fed_herefuncWhether another vehicle of the same company can leave cargochere or at a nearby station.Link to this entryfunc _fed_here(sim: Sim, st: Station, nearby: Array[Station], c: String) -> bool- Parameters
sim: Simst: Stationnearby: Array[Station]c: String
- Returns
bool
scripts/sim/vehicle.gd:1531Vehicle._pickup_fillfuncHow full (0..1) the vehicle leavesst, counting only the cargos it can pick up here: ones the station supplies, or ones it actually took on (a transfer).Link to this entryfunc _pickup_fill(st: Station) -> float-1 at a pure drop-off, so leaving the far end of a one-way freight run empty doesn't halve the average load.
- Parameters
st: Station
- Returns
float
scripts/sim/vehicle.gd:1546Vehicle._update_loadingfuncLink to this entryfunc _update_loading(sim: Sim, dt: float) -> void- Parameters
sim: Simdt: float
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1562Vehicle._spacing_waitfuncDays still to wait at the line's first stop to keep an even gap behind the vehicle that left before (0: go now).Link to this entryfunc _spacing_wait(sim: Sim) -> floatNever longer than one gap all told, so a slow round can't hold a line up.
- Parameters
sim: Sim
- Returns
float
scripts/sim/vehicle.gd:1611Vehicle.dailyfuncOnce a day: wear, and perhaps a breakdown.Link to this entryfunc daily(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/vehicle.gd:1629Vehicle.service_duefuncLink to this entryfunc service_due(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1638Vehicle._break_downfuncLink to this entryfunc _break_down(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1642Vehicle._servicedfuncLink to this entryfunc _serviced(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
Data.reliability
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1652Vehicle._try_servicefuncHead for the nearest depot if one is close (any_distance: however far).Link to this entryfunc _try_service(sim: Sim, any_distance := false) -> boolShips, aircraft and rivals' fleets are looked after at their stations instead. Returns true if the vehicle is now on its way to a depot.
- Parameters
sim: Simany_distance := false
- Returns
bool
- Calls
Pathfinder.find
scripts/sim/vehicle.gd:1660Vehicle._try_refitfuncA change of cargo is waiting (see Sim.refit_vehicle): head for the nearest depot, however far, where it is done.Link to this entryfunc _try_refit(sim: Sim) -> boolShips, aircraft and rivals have it done where they stand, and so does a company playing without depots when none can be reached. Returns true if now on its way to a depot.
- Parameters
sim: Sim
- Returns
bool
- Calls
Pathfinder.find
scripts/sim/vehicle.gd:1679Vehicle._depot_statusfuncLink to this entryfunc _depot_status() -> String- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1694Vehicle._go_to_depotfuncLeave for the depot at the end ofres(a Pathfinder route from the head's tile).Link to this entryfunc _go_to_depot(sim: Sim, res: Dictionary, goals: Dictionary) -> void- Parameters
sim: Simres: Dictionarygoals: Dictionary
- Returns
void
scripts/sim/vehicle.gd:1699Vehicle._stop_no_ordersfuncHalt because no stop can be used.Link to this entryfunc _stop_no_orders(ctx: Dictionary = {}) -> voidctxremembers where the head is if it stopped mid-route, so starting again resumes from there instead of jumping to the tile centre.- Parameters
ctx: Dictionary = {}
- Returns
void
- Calls
L.t
scripts/sim/vehicle.gd:1720Vehicle.resumefuncRestart a stopped vehicle (from the vehicle window).Vehicle._route_to_orderfuncLeave the current tile for the current order's station.Link to this entryfunc _route_to_order(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
L.t,BuildOps.dir_between,Const.opp
scripts/sim/vehicle.gd:1736Vehicle._findfuncPathfinder.find for this vehicle, remembering the answer underslot(-1: don't).Link to this entryfunc _find(sim: Sim, slot: int, start: Vector2i, h: int, goals: Dictionary, reverse_start: bool, uturn: bool) -> DictionaryThe search depends only on the network, where it starts, the heading and the goal tiles, so the route found last time is still the one it would find as long as those are the same and the network hasn't changed anywhere the search looked (WorldMap.net_changed_in). Every departure asks again, and a remembered route is walked once more before it is used: never a route over track that has gone.
- Parameters
sim: Simslot: intstart: Vector2ih: intgoals: Dictionaryreverse_start: booluturn: bool
- Returns
Dictionary
- Calls
Pathfinder.find
scripts/sim/vehicle.gd:1781Vehicle._route_standsfuncWhether every step oftilescan still be driven (the checks _advance makes on the way).Link to this entryfunc _route_stands(m: WorldMap, tiles: Array[Vector2i]) -> bool- Parameters
m: WorldMaptiles: Array[Vector2i]
- Returns
bool
scripts/sim/vehicle.gd:1801Vehicle._free_platformsfuncThe platforms of a station no other train is standing at (all of them if every one is taken).Link to this entryfunc _free_platforms(sim: Sim, tiles: Dictionary) -> DictionaryA platform is a straight row of station tiles.
- Parameters
sim: Simtiles: Dictionary
- Returns
Dictionary
scripts/sim/vehicle.gd:1831Vehicle._platform_rowstatic funcLink to this entrystatic func _platform_row(m: WorldMap, t: Vector2i) -> Vector2i- Parameters
m: WorldMapt: Vector2i
- Returns
Vector2i
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:1859Vehicle._turnfuncTurn the train round where it stands (RAIL-80) and route it on, keeping off the blocks inavoid.Link to this entryfunc _turn(sim: Sim, avoid: Dictionary = {}, skip_depot: bool = false) -> boolIt heads for the depot it is on its way to, or else its next stop, or else another of its stops (taking that order up from there), or else any of the company's depots. With
skip_depot(the player's Turn around) a trip to a depot for a service is dropped first. Returns whether it turned.- Parameters
sim: Simavoid: Dictionary = {}skip_depot: bool = false
- Returns
bool
- Calls
L.t
scripts/sim/vehicle.gd:1870Vehicle.turn_aroundfuncThe player's Turn around (vehicle window): reverse a train out on the line and send it on to its next stop, the way it came if need be.Link to this entryfunc turn_around(sim: Sim) -> StringA trip to a depot for a service is dropped. Returns "" or why it can't.
- Parameters
sim: Sim
- Returns
String
- Calls
L.t
scripts/sim/vehicle.gd:1910Vehicle._flipfuncReverse a train in place: the last wagon becomes the front, then route onward from there, keeping off the blocks inavoid(see _turn).Link to this entryfunc _flip(sim: Sim, goals: Dictionary, slot: int = -1, avoid: Dictionary = {}) -> bool- Parameters
sim: Simgoals: Dictionaryslot: int = -1avoid: Dictionary = {}
- Returns
bool
- Calls
Pathfinder.find
scripts/sim/vehicle.gd:1924Vehicle.car_posesfuncWorld transforms of each car: [{"pos": Vector3, "dir": Vector3}] front to back.Link to this entryfunc car_poses(m: WorldMap) -> Array- Parameters
m: WorldMap
- Returns
Array
scripts/sim/vehicle.gd:1959Vehicle.place_at_airportfuncPark at an airport (start of service).Link to this entryfunc place_at_airport(st: Station, m: WorldMap) -> void- Parameters
st: Stationm: WorldMap
- Returns
void
scripts/sim/vehicle.gd:1999Vehicle.head_tile_airfuncLink to this entryfunc head_tile_air() -> Vector2i- Returns
Vector2i
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:2007Vehicle._air_lenfuncLink to this entryfunc _air_len() -> float- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:2012Vehicle._air_xyfuncLink to this entryfunc _air_xy() -> Vector2- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:2016Vehicle._hold_entryfuncWhere the plane broke off its approach: HOLD_AT short of the airport.Link to this entryfunc _hold_entry() -> Vector2- Returns
Vector2
scripts/sim/vehicle.gd:2029Vehicle._hold_centrefuncLink to this entryfunc _hold_centre() -> Vector2- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:2033Vehicle._hold_rfuncThe circle's radius: one of three sizes (by the plane's number), so planes that arrive together hold apart.Vehicle._hold_startfuncThe angle round the circle of the point where the plane broke off.Vehicle._take_offfuncStart a flight totarget's airport.Link to this entryfunc _take_off(sim: Sim, target: Station) -> void- Parameters
sim: Simtarget: Station
- Returns
void
- Calls
L.t
scripts/sim/vehicle.gd:2051Vehicle._move_airfuncLink to this entryfunc _move_air(sim: Sim, dt: float) -> void- Parameters
sim: Simdt: float
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:2082Vehicle._holdfuncOnce round the holding circle, the plane is back where it broke off its approach: it carries on with it if a stand has come free (or it has held for QUEUE_GIVE_UP days), else it goes round again.Link to this entryfunc _hold(sim: Sim, st: Station, vmax: float, dt: float) -> void- Parameters
sim: Simst: Stationvmax: floatdt: float
- Returns
void
scripts/sim/vehicle.gd:2120Vehicle._air_altfuncAltitude profile: taxi, climb out, cruise, descend and land.Vehicle._air_posefuncLink to this entryfunc _air_pose(m: WorldMap) -> Dictionary- Parameters
m: WorldMap
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/vehicle.gd:2143
WorldMap
WorldMap.TerrainenumLink to this entryenum Terrain { GRASS, SAND, ROCK, SNOW, WATER }This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:6WorldMap.changedsignalEmitted after construction changes a rectangle of tiles.Link to this entrysignal changed(rect: Rect2i, what: int)whatis a mask of CH_* flags.- Parameters
rect: Rect2iwhat: int
- Returns
signal changed(rect: Rect2i, what: int)
scripts/sim/world_map.gd:9WorldMap.CH_TERRAINconstLink to this entryconst CH_TERRAIN := 1This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:10WorldMap.CH_NETWORKconstLink to this entryconst CH_NETWORK := 2This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:11WorldMap.CH_OBJECTSconstLink to this entryconst CH_OBJECTS := 4This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:12WorldMap.CH_TREESconstLink to this entryconst CH_TREES := 8This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:13WorldMap.CH_ALLconstLink to this entryconst CH_ALL := 15This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:14WorldMap.wvarLink to this entryvar w: intThis entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:16WorldMap.hvarLink to this entryvar h: intThis entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:17WorldMap.heightsvar(w+1)*(h+1) corner heights, 0..MAX_HEIGHT; 0 = sea floorWorldMap.corner_yvarrendered corner heights in world units (seabed depth applied)WorldMap.terrainvarLink to this entryvar terrain := PackedByteArray()This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:20WorldMap.treesvarLink to this entryvar trees := PackedByteArray()This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:21WorldMap.variantvarLink to this entryvar variant := PackedByteArray()This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:22WorldMap.roadvarconnection bitmask N=1 E=2 S=4 W=8WorldMap.railvarLink to this entryvar rail := PackedByteArray()This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:24WorldMap.rail_ownervarcompany id + 1 for track; 0 = noneWorldMap.objsvarnull or a Dictionary with "kind": "house" | "industry" | "station"WorldMap.townsvarTown objects generated for this world.Link to this entryvar towns: Array[Town] = []A town object gives access to its population, position, and council ratings.
Declared inscripts/sim/world_map.gd:27WorldMap.industriesvarIndustries currently on the map.Link to this entryvar industries: Array[Industry] = []This collection can change as industries open, close, or progress through the eras.
Declared inscripts/sim/world_map.gd:28WorldMap.industry_revvarBumped whenever an industry opens or closes during the game (RAIL-23, IndustryLife): what is made from the list of industries (their models, smoke, lights and labels, and the caches below and in Economy) is made again.WorldMap.eravarThe era (an index into Data.ERAS) whose industry chains apply (RAIL-29): what industries take and make, and what towns make and take.Link to this entryvar era := 0Follows the date (Sim.sync_era); not saved.
Declared inscripts/sim/world_map.gd:35WorldMap._near_indvar1 on tiles within BuildOps.INDUSTRY_GAP of an industry, rebuilt whenever an industry has come or gone since it was made (or the list has grown: the world is made, or loaded, by appending to it).WorldMap._near_ind_nvarLink to this entryvar _near_ind_n := -1This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:39WorldMap._near_ind_revvarLink to this entryvar _near_ind_rev := -1This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:40WorldMap.stationsvarStation objects in the current world.Link to this entryvar stations: Array[Station] = []A station can serve more than one transport mode, so use
Declared inhas_kindto select the desired type.scripts/sim/world_map.gd:41WorldMap.next_station_idvarLink to this entryvar next_station_id := 1This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:42WorldMap.crossingsvarBridges and tunnels: {"id", "kind" rail|road, "type" bridge|tunnel, "s0", "s1" (first and last span tile), "dir" (s0 -> s1), "level" (height level of the deck / tunnel floor), "owner" (company id + 1)}.Link to this entryvar crossings: Array = []For bridges the spans are the tiles strictly between the two ramps; for tunnels they include both portals.
Declared inscripts/sim/world_map.gd:46WorldMap.spansvarVector2i -> crossingWorldMap.depotsvarVector2i -> depot object (also in objs)WorldMap.elecvar1 where the track has overhead wiresWorldMap.next_crossing_idvarLink to this entryvar next_crossing_id := 1This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:50WorldMap.signalsvarRail signals on straight track: Vector2i -> 0 (two-way) or 1 + d (one-way, trains may only pass heading d).WorldMap.diag2varTiles carrying two parallel diagonal pieces instead of a junction, per network: Vector2i -> 0 (pieces N-E and S-W) or 1 (pieces E-S and W-N).WorldMap.DIAG2_PAIRSconstLink to this entryconst DIAG2_PAIRS := [[[0, 1], [2, 3]], [[1, 2], [3, 0]]]This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:56WorldMap.EASEconsthow far off the edge midpoint an eased join crosses (see piece_shape)WorldMap.net_versionvarbumped whenever the network or the objects change (the view redraws on it)WorldMap.block_cachevarLink to this entryvar block_cache := {}This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:59WorldMap.block_versionvarthe rail revisionblock_cachewas built for (see net_rev)WorldMap.NET_LOG_MAXconstRevisions of the road and the rail network: they go up only when the network itself really changed (track, wires, signals, bridges, tunnels), not when a town merely adds a house.Link to this entryconst NET_LOG_MAX := 512Each keeps the rectangles that changed lately, so a cached route can tell whether a change touched the part of the map it was searched over (see net_changed_in). None of this is saved.
Declared inscripts/sim/world_map.gd:65WorldMap.road_revvarLink to this entryvar road_rev := 0This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:66WorldMap.rail_revvarLink to this entryvar rail_rev := 0This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:67WorldMap._road_logvarLink to this entryvar _road_log: Array[Rect2i] = []This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:68WorldMap._rail_logvarLink to this entryvar _rail_log: Array[Rect2i] = []This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:69WorldMap._net_syncedvarLink to this entryvar _net_synced := falseThis entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:70WorldMap._sh_roadvarthe network as it was at the last notify, to spot real changesWorldMap._sh_railvarLink to this entryvar _sh_rail := PackedByteArray()This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:72WorldMap._sh_elecvarLink to this entryvar _sh_elec := PackedByteArray()This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:73WorldMap._sh_statevarLink to this entryvar _sh_state := 0This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:74WorldMap.station_revvarBumped when the stations' catchments change; with the two counts it keyseco_cache(Economy's industry <-> station links).WorldMap.eco_cachevarLink to this entryvar eco_cache := {}This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:78WorldMap._town_cargo_levelsvarLink to this entryvar _town_cargo_levels: Array[int] = []This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:79WorldMap._shape_memovarpiece_shape results by tile (see shape_of): tile index -> {sides and network -> shape}.Link to this entryvar _shape_memo := {}Emptied around every change that is announced with
Declared innotify. Not saved.scripts/sim/world_map.gd:82WorldMap.sea_memovarRoutes over water found by Pathfinder, by question (see Pathfinder._sea_memo).Link to this entryvar sea_memo := {}Emptied whenever the ground changes. Not saved.
Declared inscripts/sim/world_map.gd:85WorldMap._initfuncLink to this entryfunc _init(width: int = Const.MAP_SIZE, height: int = Const.MAP_SIZE) -> void- Parameters
width: int = Const.MAP_SIZEheight: int = Const.MAP_SIZE
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:88WorldMap.set_erafuncMove the chains to erae: every industry takes and makes what its kind does then.Link to this entryfunc set_era(e: int) -> voidStations take it on when they are next refreshed.
- Parameters
e: int
- Returns
void
scripts/sim/world_map.gd:106WorldMap.is_electrifiedfuncOverhead wires over this tile's track (bridge decks and tunnels count as wired).Link to this entryfunc is_electrified(t: Vector2i) -> bool- Parameters
t: Vector2i
- Returns
bool
scripts/sim/world_map.gd:114WorldMap.notifyfuncLink to this entryfunc notify(rect: Rect2i, what: int) -> void- Parameters
rect: Rect2iwhat: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:121WorldMap._town_cargo_levels_changedfuncA population threshold changes acceptance at any stop serving that town, even far from the build.Link to this entryfunc _town_cargo_levels_changed() -> bool- Returns
bool
scripts/sim/world_map.gd:150WorldMap.net_revfuncThe revision of the road or rail network (-1 for anything else, which has none).Link to this entryfunc net_rev(kind: String) -> intWhatever caches something derived from the network keeps this number with it.
- Parameters
kind: String
- Returns
int
scripts/sim/world_map.gd:169WorldMap.net_changed_infuncWhether thekindnetwork changed insideboxsince revisionsince(true when it can't tell).Link to this entryfunc net_changed_in(kind: String, since: int, box: Rect2i) -> bool- Parameters
kind: Stringsince: intbox: Rect2i
- Returns
bool
scripts/sim/world_map.gd:178WorldMap.net_touchfuncRecord that thekindnetwork changed insiderect.Link to this entryfunc net_touch(kind: String, rect: Rect2i) -> voidnotifydoes this by itself for anything it can see (track, wires, signals, bridges and tunnels), so this is only for changes it can't.- Parameters
kind: Stringrect: Rect2i
- Returns
void
scripts/sim/world_map.gd:194WorldMap.net_resetfuncForget everything cached about the network and the stations (after loading, or after editing the map's arrays directly withoutnotify).WorldMap._net_statefuncLink to this entryfunc _net_state() -> int- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:223WorldMap._net_syncfuncLink to this entryfunc _net_sync() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:227WorldMap._net_scanfuncAfter a change insiderect: compare the network there with how it was, and record what changed.Link to this entryfunc _net_scan(rect: Rect2i) -> void- Parameters
rect: Rect2i
- Returns
void
scripts/sim/world_map.gd:236WorldMap.sig_allowsfuncWhether a train headinghmay pass the signal on tilet(one-way signals only allow one way).Link to this entryfunc sig_allows(t: Vector2i, h: int) -> bool- Parameters
t: Vector2ih: int
- Returns
bool
scripts/sim/world_map.gd:272WorldMap.sig_facesfuncWhether the signal ontcontrols trains headingh(it faces them).Link to this entryfunc sig_faces(t: Vector2i, h: int) -> bool- Parameters
t: Vector2ih: int
- Returns
bool
scripts/sim/world_map.gd:278WorldMap.block_keyfuncKey for the track a train travelling in directiondoccupies on tilet: the tile itself on the ground, or a separate key on a bridge or in a tunnel (so the line overhead and the line underneath are different blocks).Link to this entryfunc block_key(t: Vector2i, d: int) -> Variant- Parameters
t: Vector2id: int
- Returns
Variant
- Calls
Const.opp
scripts/sim/world_map.gd:288WorldMap.rail_junctionfuncWhether tiletis a junction on the ground, where three or four lines of track meet (RAIL-80).Link to this entryfunc rail_junction(t: Vector2i, d: int = -1) -> boolA junction is a block of its own even without signals (see blocks), and trains wait in front of it until it and the track beyond it are clear (Vehicle._way_ahead). With
d, a train travelling that way on a bridge or in a tunnel over the tile isn't on the junction.- Parameters
t: Vector2id: int = -1
- Returns
bool
scripts/sim/world_map.gd:302WorldMap.block_key_atfuncBlock key from a position (on a tile with two parallel diagonals, the half you're in decides).Link to this entryfunc block_key_at(p: Vector2, d: int) -> Variant- Parameters
p: Vector2d: int
- Returns
Variant
scripts/sim/world_map.gd:312WorldMap.blocksfuncTrack blocks: rail tiles grouped into connected stretches, split at signal tiles and where track meets a junction: a junction, or a few junctions side by side, is a block of its own (RAIL-80).Link to this entryfunc blocks() -> DictionaryKeyed by block_key().
- Returns
Dictionary
- Calls
WorldMap.axis_of
scripts/sim/world_map.gd:325WorldMap.cifuncLink to this entryfunc ci(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:384WorldMap.tifuncLink to this entryfunc ti(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:388WorldMap.in_boundsfuncLink to this entryfunc in_bounds(x: int, y: int) -> bool- Parameters
x: inty: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:392WorldMap.near_industryfuncWhether (x, y) lies within BuildOps.INDUSTRY_GAP tiles of an industry's footprint, diagonals included.Link to this entryfunc near_industry(x: int, y: int) -> bool- Parameters
x: inty: int
- Returns
bool
scripts/sim/world_map.gd:397WorldMap.net_bitsfuncLink to this entryfunc net_bits(kind: String, i: int) -> int- Parameters
kind: Stringi: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:411WorldMap.sailablefuncOpen water ships can sail through (not under an oil rig or other industry).Link to this entryfunc sailable(i: int) -> boolThe dock out at a rig stands in open water and ships sail onto it to berth.
- Parameters
i: int
- Returns
bool
scripts/sim/world_map.gd:421WorldMap.linkedfuncTrue when tiletconnects to its neighbour in directiondon the given network (both tiles carry the matching bit), including along bridges and through tunnels.Link to this entryfunc linked(kind: String, t: Vector2i, d: int) -> bool- Parameters
kind: Stringt: Vector2id: int
- Returns
bool
- Calls
Const.opp
scripts/sim/world_map.gd:428WorldMap.piecesfuncThe pieces of track or road on a tile, as [edge, edge] pairs ([edge, -1] for a dead end).Link to this entryfunc pieces(kind: String, t: Vector2i) -> Array- Parameters
kind: Stringt: Vector2i
- Returns
Array
scripts/sim/world_map.gd:445WorldMap._lone_cornerfuncWhether tilethas exactly the corner piece {a, b} on its own (or as one of two parallel diagonals).Link to this entryfunc _lone_corner(kind: String, t: Vector2i, a: int, b: int) -> bool- Parameters
kind: Stringt: Vector2ia: intb: int
- Returns
bool
scripts/sim/world_map.gd:464WorldMap.chord_endsfuncDiagonal runs: a corner piece (edgesa,b) that continues across an edge into the mirrored corner on the next tile.Link to this entryfunc chord_ends(kind: String, t: Vector2i, a: int, b: int) -> intReturns a mask of which ends continue diagonally (1 = end a, 2 = end b), or 0 for an ordinary curve. Diagonal stretches are drawn and driven as straight 45-degree lines; an end that meets straight track eases in with a curve that leaves the edge square.
- Parameters
kind: Stringt: Vector2ia: intb: int
- Returns
int
- Calls
Const.opp
scripts/sim/world_map.gd:480WorldMap.is_chordfuncLink to this entryfunc is_chord(kind: String, t: Vector2i, a: int, b: int) -> bool- Parameters
kind: Stringt: Vector2ia: intb: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:493WorldMap._plain_straightfuncWhether tiletcarries nothing but one straight piece running through sided: plain ground track or road, with no station, level crossing, bridge or tunnel on it.Link to this entryfunc _plain_straight(kind: String, t: Vector2i, d: int) -> bool- Parameters
kind: Stringt: Vector2id: int
- Returns
bool
- Calls
Const.opp
scripts/sim/world_map.gd:499WorldMap.piece_shapefuncThe full shape of the piece from edgeato edgeb, as a mask (0 = an ordinary piece): 1, 2 end a / end b continues diagonally (see chord_ends) 4, 8 end a / end b is eased: where a diagonal run meets plain straight track, the bend is one wide curve from the middle of the straight tile to the far end of the first diagonal tile, so it crosses their shared edge EASE to one side of the midpoint 16, 32 (straight pieces) which side end a / end b is eased towards: clear = the next direction clockwise from that end, set = the one before itLink to this entryfunc piece_shape(kind: String, t: Vector2i, a: int, b: int) -> int- Parameters
kind: Stringt: Vector2ia: intb: int
- Returns
int
- Calls
Const.opp
scripts/sim/world_map.gd:515WorldMap.shape_offuncpiece_shape for road and rail, remembered: vehicles ask for the same pieces over and over as they drive.Link to this entryfunc shape_of(kind: String, t: Vector2i, a: int, b: int) -> intThe answer only depends on the map near the tile, and
notifyforgets what it knew around every change.- Parameters
kind: Stringt: Vector2ia: intb: int
- Returns
int
scripts/sim/world_map.gd:545WorldMap.flip_shapestatic funcshapefor the same piece travelled the other way (ends a and b swapped).Link to this entrystatic func flip_shape(shape: int) -> int- Parameters
shape: int
- Returns
int
scripts/sim/world_map.gd:565WorldMap.piece_curvestatic funcControl points (tile-local, 0..1) of a piece from edgeato edgebwith a non-zeroshape(see piece_shape): a cubic curve.Link to this entrystatic func piece_curve(a: int, b: int, shape: int) -> ArrayDiagonal pieces are straight where both ends continue diagonally; an end that meets plain straight track is eased, sharing one wide bend with that tile; an end that meets anything else leaves the edge square, with a tighter S-bend.
- Parameters
a: intb: intshape: int
- Returns
Array
- Calls
Const.opp
scripts/sim/world_map.gd:573WorldMap.chord_curvestatic funcLink to this entrystatic func chord_curve(a: int, b: int, ends: int) -> Array- Parameters
a: intb: intends: int
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:619WorldMap.cubic_tangentstatic funcLink to this entrystatic func cubic_tangent(c: Array, u: float) -> Vector2- Parameters
c: Arrayu: float
- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:623WorldMap.cubicstatic funcLink to this entrystatic func cubic(c: Array, u: float) -> Vector2- Parameters
c: Arrayu: float
- Returns
Vector2
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:629WorldMap.axis_ofstatic funcLink to this entrystatic func axis_of(d: int) -> int- Parameters
d: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:634WorldMap.span_alongfuncThe bridge or tunnel ofkindthat tiletis part of, if travel in directiondruns along it.Link to this entryfunc span_along(kind: String, t: Vector2i, d: int) -> Variant- Parameters
kind: Stringt: Vector2id: int
- Returns
Variant
scripts/sim/world_map.gd:639WorldMap.exit_bitsfuncDirections a vehicle headinghinside tiletmay leave by: straight on along a bridge or tunnel, otherwise the ground connections.Link to this entryfunc exit_bits(kind: String, t: Vector2i, h: int) -> int- Parameters
kind: Stringt: Vector2ih: int
- Returns
int
- Calls
Const.opp
scripts/sim/world_map.gd:648WorldMap.travel_yfuncHeight vehicles travel at: the bridge deck or tunnel floor when running along one, else the ground.Link to this entryfunc travel_y(kind: String, fx: float, fz: float, dir: Vector2) -> float- Parameters
kind: Stringfx: floatfz: floatdir: Vector2
- Returns
float
scripts/sim/world_map.gd:662WorldMap.portal_levelfuncLevel of the tunnel mouth on tile (x, y), or -1.Link to this entryfunc portal_level(x: int, y: int) -> intMouth tiles are dug out flat to the tunnel floor.
- Parameters
x: inty: int
- Returns
int
scripts/sim/world_map.gd:675WorldMap.add_crossingfuncLink to this entryfunc add_crossing(c: Dictionary) -> void- Parameters
c: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:682WorldMap.remove_crossingfuncLink to this entryfunc remove_crossing(c: Dictionary) -> void- Parameters
c: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:688WorldMap.crossing_tilesstatic funcLink to this entrystatic func crossing_tiles(c: Dictionary) -> Array[Vector2i]- Parameters
c: Dictionary
- Returns
Array[Vector2i]
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:695WorldMap.cornerfuncLink to this entryfunc corner(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:706WorldMap.cornersfuncCorner heights in order NW (x,y), NE (x+1,y), SE (x+1,y+1), SW (x,y+1).Link to this entryfunc corners(x: int, y: int) -> Vector4i- Parameters
x: inty: int
- Returns
Vector4i
scripts/sim/world_map.gd:711WorldMap.tile_minfuncLink to this entryfunc tile_min(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:715WorldMap.tile_maxfuncLink to this entryfunc tile_max(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:720WorldMap.is_waterfuncLink to this entryfunc is_water(x: int, y: int) -> bool- Parameters
x: inty: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:725WorldMap.slopefuncBits of corners raised above the tile minimum (1=NW, 2=NE, 4=SE, 8=SW), plus 16 when steep.Link to this entryfunc slope(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
scripts/sim/world_map.gd:730WorldMap.is_flatfuncLink to this entryfunc is_flat(x: int, y: int) -> bool- Parameters
x: inty: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/world_map.gd:743WorldMap.incline_axisfuncAxis a tile is a simple incline along: 0 = along x, 1 = along y, -1 = not a simple incline.Link to this entryfunc incline_axis(x: int, y: int) -> int- Parameters
x: inty: int
- Returns
int
scripts/sim/world_map.gd:748WorldMap.split_nw_sefuncThe mesh folds along NW-SE when those corners match, else along NE-SW.Link to this entryfunc split_nw_se(x: int, y: int) -> bool- Parameters
x: inty: int
- Returns
bool
scripts/sim/world_map.gd:758WorldMap.terrain_yfuncExact height of the rendered terrain surface (matches the mesh triangles).Link to this entryfunc terrain_y(fx: float, fz: float) -> float- Parameters
fx: floatfz: float
- Returns
float
scripts/sim/world_map.gd:763WorldMap.surface_yfuncVisible surface: terrain or water, whichever is higher.Link to this entryfunc surface_y(fx: float, fz: float) -> floatOutside the map returns -INF.
- Parameters
fx: floatfz: float
- Returns
float
scripts/sim/world_map.gd:786WorldMap.compute_corner_yfuncRecompute rendered corner heights.Link to this entryfunc compute_corner_y() -> voidSea-floor corners sink deeper the farther they are from land.
- Returns
void
scripts/sim/world_map.gd:793
Industry
Industry.SIZEconstLink to this entryconst SIZE := 3This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:7Industry.LOCAL_REACHconstStaff (RAIL-28): people walk in from towns up to LOCAL_REACH tiles from the footprint, fewer the farther the edge of the town is; right next to it, a town lends LOCAL_PER_POP workers per resident.Link to this entryconst LOCAL_REACH := 8.0Walkers-in fill at most LOCAL_MAX of the jobs: the rest takes commuters, however big the town.
Declared inscripts/sim/industry.gd:11Industry.LOCAL_PER_POPconstLink to this entryconst LOCAL_PER_POP := 0.16This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:12Industry.LOCAL_MAXconstLink to this entryconst LOCAL_MAX := 0.55This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:13Industry.PRIMARY_MINconstOutput with nobody at work and with a full staff (see output_factor).Industry.PRIMARY_MAXconstLink to this entryconst PRIMARY_MAX := 1.5This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:16Industry.PLANT_MINconstLink to this entryconst PLANT_MIN := 0.8This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:17Industry.PLANT_MAXconstLink to this entryconst PLANT_MAX := 1.3This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:18Industry.SHIFT_BACKconstOf the commuters who come to work, the share that goes home again by the same stations.Industry.BUSYconstStaffing from which an industry counts as busy: its noise carries farther (Town.land_value).Industry.idvarLink to this entryvar id := 0This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:24Industry.typevarLink to this entryvar type := ""This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:25Industry.xvarLink to this entryvar x := 0This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:26Industry.yvarLink to this entryvar y := 0This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:27Industry.namevarLink to this entryvar name := ""This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:28Industry.prod_ratevarmonthly output of a primary industryIndustry.stockvarsecondary output waiting to be shippedIndustry.producedvarthis month, by cargoIndustry.transportedvarLink to this entryvar transported := {}This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:32Industry.receivedvarLink to this entryvar received := {}This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:33Industry.produced_lastvarLink to this entryvar produced_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:34Industry.transported_lastvarLink to this entryvar transported_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:35Industry.received_lastvarLink to this entryvar received_last := {}This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:36Industry.historyvar[produced, transported] at each month end (last 24)Industry.workersvarcommuters delivered to stations in reach this month (RAIL-28)Industry.workers_lastvarLink to this entryvar workers_last := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:39Industry.shift_paxvarcommuters going home, handed to stations at the next production runIndustry.local_staffvarwalkers-in from nearby towns, counted once a month (-1: not yet)Industry.closing_dayvarIndustries come and go during the game (RAIL-23, IndustryLife): the game day a struggling one closes, warned a year ahead (-1: not at risk), and whether it has closed and left the map (what still holds on to it, a window or a label, lets go).Industry.closedvarLink to this entryvar closed := falseThis entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:46Industry.acceptsvarWhat it takes and makes in the map's era (Data.accepts / produces, RAIL-29): WorldMap.set_era keeps them up to date.Link to this entryvar accepts: Array = []Shared and read-only.
Declared inscripts/sim/industry.gd:49Industry.producesvarLink to this entryvar produces: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:50Industry.heldvarCargo delivered and not used yet: what a plant that needs every input holds until the rest comes, and what a wind farm site has had towards its total (Data.INDUSTRY "needs_all" and "builds").Industry.buildersvara wind farm site: company id -> units it deliveredIndustry.last_deliveryvargame day cargo was last delivered to it (-1: never)Industry._initfuncLink to this entryfunc _init(p_id: int, p_type: String, px: int, py: int) -> void- Parameters
p_id: intp_type: Stringpx: intpy: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:58Industry.infofuncLink to this entryfunc info() -> Dictionary- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:67Industry.set_erafuncTake on what its kind takes and makes in eraera.Link to this entryfunc set_era(era: int) -> void- Parameters
era: int
- Returns
void
- Calls
Data.accepts,Data.produces
scripts/sim/industry.gd:72Industry.centerfuncReturns the center of the industry footprint in map coordinates.Link to this entryfunc center() -> Vector2It can be used as the destination for a news message.
- Returns
Vector2
scripts/sim/industry.gd:86Industry.tile_indicesfuncLink to this entryfunc tile_indices(m: WorldMap) -> Array[int]- Parameters
m: WorldMap
- Returns
Array[int]
This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:90Industry.roll_monthfuncLink to this entryfunc roll_month() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:98Industry.wantedfuncStaff it wants each month (0: it runs without, and stations by it take no commuters).Industry.localfuncPeople who walk in from the towns around (see LOCAL_REACH), counted once a month.Link to this entryfunc local(m: WorldMap, index: StaffingIndex = null) -> float- Parameters
m: WorldMapindex: StaffingIndex = null
- Returns
float
scripts/sim/industry.gd:168Industry.local_from_townsfuncLink to this entryfunc local_from_towns(m: WorldMap, index: StaffingIndex = null) -> float- Parameters
m: WorldMapindex: StaffingIndex = null
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/industry.gd:174Industry.rect_gapstatic funcDistance between the nearest edges of two rectangles (0 when they touch or overlap).Link to this entrystatic func rect_gap(a: Rect2, b: Rect2) -> float- Parameters
a: Rect2b: Rect2
- Returns
float
scripts/sim/industry.gd:186Industry.commutersfuncCommuters counting toward the staff: this month's, or last month's while this one is young.Industry.staffingfuncShare of the staff it wants that turns up (0..1); 1 for an industry that wants none.Link to this entryfunc staffing(m: WorldMap, index: StaffingIndex = null) -> float- Parameters
m: WorldMapindex: StaffingIndex = null
- Returns
float
scripts/sim/industry.gd:198Industry.output_factorfuncHow the staff changes output: a primary industry makes PRIMARY_MIN..PRIMARY_MAX times its prod_rate, a processing plant turns PLANT_MIN..PLANT_MAX of each input unit into output.Link to this entryfunc output_factor(m: WorldMap, index: StaffingIndex = null) -> floatAn industry that wants no staff runs at 1.
- Parameters
m: WorldMapindex: StaffingIndex = null
- Returns
float
scripts/sim/industry.gd:208Industry.hirefuncCommuters delivered to a station in reach: takes on up to what it still needs this month and returns how many it took.Link to this entryfunc hire(m: WorldMap, n: float) -> floatA third of them go home again (SHIFT_BACK, see Economy.produce).
- Parameters
m: WorldMapn: float
- Returns
float
scripts/sim/industry.gd:219Industry.nearest_townfuncThe town with the nearest centre: where the industry window suggests bringing workers from.Link to this entryfunc nearest_town(m: WorldMap) -> Town- Parameters
m: WorldMap
- Returns
Town
scripts/sim/industry.gd:227
Data
Data.CARGOconstwagon: what one wagon holds (30 when not given).Data.INDUSTRYconstworkers: the staff it wants each month (RAIL-28, Industry.staffing), processing plants more than mines and farms.Link to this entryconst INDUSTRYA power station makes nothing for staff to raise, so it wants none. The eras rewrite the chains (RAIL-29).
Declared intakesandmakesare what a kind takes and makes when it first appears; never read them (orlater) directly, askaccepts/produces(or Industry's own lists, kept up to date with the map's era): -era: the era (index into ERAS) from which it is found on new maps and opens during the game. -later: what it takes and makes as well from a later era on: {era: {"takes": [...], "makes": [...]}}. -retires: the era from which it is on its way out: a mine's output drifts down every year, a customer nobody supplies may close, and no new ones open (IndustryLife). -needs_all: a plant that only works with every input (two or more): it holds what comes until the rest does, and turns each full set into as many units of output (Economy.deliver_to_industries). It is sited near makers of each input (WorldGen.find_site). -builds: a construction site: it takes these totals, then becomes the kind inbecomes.count0: never found on a new map or opened, only made from another (a finished wind farm).site: where it stands: on "land" (when not given), at "sea", on the "coast", or by a "town" (one of the biggest: a printing works, see WorldGen.find_site). Adding a chain: a new kind with itsera, or alaterentry on an existing one; town cargos go in TOWN_MAKES / TOWN_TAKES. Everything else (stations, AI, the map's chains, the timeline) follows.scripts/core/data.gd:48Data.TOWN_MAKESconstCargo houses make the way they make mail (by the people in them), from the era given on: from the Late century towns stop being only customers.Data.TOWN_TAKESconstCargo towns take, from the era given on: at stations that reach one of the buildings inat, or (pop) any house of a town of at least that many people.Data.HOUSESconstzone: R residential, C commercial, I light industry, L landmark.Link to this entryconst HOUSES
Declared inpopcounts the people a building brings (residents or workers) - they all travel, so they all make passengers.scripts/core/data.gd:95Data.ZONE_NAMESconstLink to this entryconst ZONE_NAMES := {"R": "Residential", "C": "Commercial", "I": "Industrial", "L": "Landmark", "A": "Attraction"}This entry has no behavior notes yet.
Declared inscripts/core/data.gd:115Data.ATTRACTIONSconstAttractions towns build as they grow: population needed, and whether it has to be by the sea.Data.TOURIST_FAREconstpassengers to a station serving an attraction pay this much moreData.ERASconstAges of progress.Link to this entryconst ERASEach brings new kinds of buildings, more productive industry and faster-growing towns.
Declared inscripts/core/data.gd:127Data.BUILD_INTROconstYear each building type starts appearing in towns.Link to this entryconst BUILD_INTRO := {"apartment": 1955, "tower": 1962, "highrise": 1968, "modern": 1975, "mall": 1983, "techpark": 1992}Declared inscripts/core/data.gd:135Data.era_indexstatic funcLink to this entrystatic func era_index(year: int) -> int- Parameters
year: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:138Data.can_buildstatic funcLink to this entrystatic func can_build(type: String, year: int) -> bool- Parameters
type: Stringyear: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:146Data._chainsstatic vartype -> [{"accepts", "produces"} for each era], read-onlyData._town_makesstatic varera -> cargos houses makeData._town_takesstatic varera -> {house type: [cargos it takes]}Data._town_sizesstatic varera -> {cargo: the people a town needs to take it}Data._cargosstatic varera -> the cargos there are (see cargos)Data.acceptsstatic funcWhat an industry oftypetakes in eraera(an index into ERAS): what it took when it first appeared and everything later eras added.Link to this entrystatic func accepts(type: String, era: int) -> ArrayShared and read-only.
- Parameters
type: Stringera: int
- Returns
Array
scripts/core/data.gd:161Data.producesstatic funcWhat an industry oftypemakes in eraera.Link to this entrystatic func produces(type: String, era: int) -> ArrayShared and read-only.
- Parameters
type: Stringera: int
- Returns
Array
scripts/core/data.gd:166Data._chainstatic funcLink to this entrystatic func _chain(type: String, era: int) -> Dictionary- Parameters
type: Stringera: int
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:170Data.existsstatic funcWhether industries oftypeare around by eraera.Link to this entrystatic func exists(type: String, era: int) -> bool- Parameters
type: Stringera: int
- Returns
bool
scripts/core/data.gd:192Data.opensstatic funcWhether industries oftypeare found on new maps and open during the game by eraera(a kind withcount0 is only ever made from another).Link to this entrystatic func opens(type: String, era: int) -> bool- Parameters
type: Stringera: int
- Returns
bool
scripts/core/data.gd:198Data.retiringstatic funcWhethertypeis on its way out by eraera(see INDUSTRY'sretires).Link to this entrystatic func retiring(type: String, era: int) -> bool- Parameters
type: Stringera: int
- Returns
bool
scripts/core/data.gd:203Data.town_makesstatic funcThe cargos houses make in eraera, passengers aside (see TOWN_MAKES).Link to this entrystatic func town_makes(era: int) -> Array- Parameters
era: int
- Returns
Array
scripts/core/data.gd:208Data.town_takesstatic funcThe cargos each kind of house takes in eraera, beyond what any town does (see TOWN_TAKES).Link to this entrystatic func town_takes(era: int) -> Dictionary- Parameters
era: int
- Returns
Dictionary
scripts/core/data.gd:214Data.town_takes_by_sizestatic funcThe cargos any house of a big enough town takes in eraera: {cargo: the people the town needs} (see TOWN_TAKES'pop).Link to this entrystatic func town_takes_by_size(era: int) -> Dictionary- Parameters
era: int
- Returns
Dictionary
scripts/core/data.gd:221Data.town_popstatic funcThe people a town needs before it takesc(0: any town, or only some of its buildings).Link to this entrystatic func town_pop(c: String) -> int- Parameters
c: String
- Returns
int
scripts/core/data.gd:227Data._town_tablesstatic funcLink to this entrystatic func _town_tables() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:231Data.cargosstatic funcThe cargos there are in eraera, in ALL_CARGO order: passengers, what towns make and take, and what the kinds of industry around by then take and make.Link to this entrystatic func cargos(era: int) -> ArrayShared and read-only.
- Parameters
era: int
- Returns
Array
scripts/core/data.gd:260Data.era_changesstatic funcWhat eraichanges in the industry chains, a sentence each (for the news and the Timeline).Link to this entrystatic func era_changes(i: int) -> Array- Parameters
i: int
- Returns
Array
- Calls
L.t,L.lower,Fmt.cargo_list,Fmt.int_commas
scripts/core/data.gd:278Data.TOWN_PREFIXconstLink to this entryconst TOWN_PREFIXThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:308Data.TOWN_SUFFIXconstLink to this entryconst TOWN_SUFFIXThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:312Data.FREIGHTconstCars (RAIL-32) are in ALL_CARGO only: trains carry them on car wagons, roads on the car transporter.Link to this entryconst FREIGHT := ["coal", "wood", "grain", "oil", "goods", "food", "iron_ore", "steel", "fish", "mail", "paper", "news", "plastics", "waste", "electronics"]Declared inscripts/core/data.gd:316Data.ALL_CARGOconstLink to this entryconst ALL_CARGOThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:317Data.BULKconstWhat ships carry: newspapers aren't among them, as they would go stale long before a ship got anywhere.Link to this entryconst BULK := ["coal", "wood", "grain", "oil", "goods", "food", "iron_ore", "steel", "fish", "paper", "plastics", "waste", "electronics"]Declared inscripts/core/data.gd:320Data.MODELSconstLink to this entryconst MODELSThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:323Data.WAGONconstLink to this entryconst WAGON := {"cost": 6500, "run": 450}This entry has no behavior notes yet.
Declared inscripts/core/data.gd:335Data.REFITconstChanging cargo costs this share of the price: of a wagon for each wagon converted, of the whole vehicle for anything that isn't a train.Data.LENGTHconstBody length in tiles for road vehicles, ships and aircraft that aren't the standard size (road 0.46, ships 0.9, aircraft 0.7).Data.INTROconstLink to this entryconst INTROThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:351Data.LATER_MODELSconstLink to this entryconst LATER_MODELSThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:359Data.MOD_MODELSstatic varvehicle id -> the same fields as MODELS, plus "look" or "model", "mod"Data.MOD_CARGOstatic varcargo id -> {"rate", "days"} overridesData.MOD_COMPANY_NAMESstatic varLink to this entrystatic var MOD_COMPANY_NAMES: Array = []This entry has no behavior notes yet.
Declared inscripts/core/data.gd:404Data._town_prefixesstatic varLink to this entrystatic var _town_prefixes: Array = TOWN_PREFIXThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:405Data._town_suffixesstatic varLink to this entrystatic var _town_suffixes: Array = TOWN_SUFFIXThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:406Data.clear_modsstatic funcLink to this entrystatic func clear_mods() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:409Data.add_modelstatic funcLink to this entrystatic func add_model(id: String, m: Dictionary) -> void- Parameters
id: Stringm: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:417Data.add_town_namesstatic funcExtra name pieces for towns;replacedrops the game's own.Link to this entrystatic func add_town_names(prefixes: Array, suffixes: Array, replace: bool = false) -> void- Parameters
prefixes: Arraysuffixes: Arrayreplace: bool = false
- Returns
void
scripts/core/data.gd:422Data.town_prefixesstatic funcLink to this entrystatic func town_prefixes() -> Array- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:429Data.town_suffixesstatic funcLink to this entrystatic func town_suffixes() -> Array- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:433Data.has_modelstatic funcChecks for an ID in the stock and enabled mod vehicle catalogs.Link to this entrystatic func has_model(id: String) -> boolUse this before looking up an ID from a mod or save.
- Parameters
id: String
- Returns
bool
scripts/core/data.gd:437Data.modelstatic funcReturns the definition dictionary for an existing vehicle model ID, including enabled mods.Link to this entrystatic func model(id: String) -> DictionaryUse
has_model(id)first when the ID might be missing.- Parameters
id: String
- Returns
Dictionary
Example
Declared inif Data.has_model("diesel"): var diesel := Data.model("diesel") note(str(diesel.cost))scripts/core/data.gd:441Data.all_modelsstatic funcReturns the model IDs from the stock and enabled mod catalogs.Link to this entrystatic func all_models() -> ArrayUse
available(id, year)to filter by sale date.- Returns
Array
scripts/core/data.gd:447Data.intro_yearstatic funcThe year a model goes on sale (0: from the start).Link to this entrystatic func intro_year(id: String) -> int- Parameters
id: String
- Returns
int
scripts/core/data.gd:452Data.introsstatic funcEvery model with an introduction year: id -> year.Link to this entrystatic func intros() -> Dictionary- Returns
Dictionary
scripts/core/data.gd:459Data.availablestatic funcChecks whether the current year is at or after a model’s introduction year.Link to this entrystatic func available(id: String, year: int) -> boolUse
has_model(id)separately to verify the ID.- Parameters
id: Stringyear: int
- Returns
bool
scripts/core/data.gd:467Data.lookstatic funcThe game model whose 3D model (and size) a vehicle uses: itself, or a mod vehicle's "look".Link to this entrystatic func look(id: String) -> String- Parameters
id: String
- Returns
String
scripts/core/data.gd:472Data.cargo_ratestatic funcReturns the payment rate per unit of the named cargo over 25 tiles before age penalties.Link to this entrystatic func cargo_rate(c: String) -> floatUses the active mod override when one is set.
- Parameters
c: String
- Returns
float
scripts/core/data.gd:477Data.cargo_daysstatic funcReturns how many days the named cargo qualifies for the full rate.Link to this entrystatic func cargo_days(c: String) -> floatUses the active mod override when one is set.
- Parameters
c: String
- Returns
float
scripts/core/data.gd:481Data.COSTconstLink to this entryconst COSTThis entry has no behavior notes yet.
Declared inscripts/core/data.gd:484Data.START_LOANconstwhat rivals start with (cash, all borrowed)Data.PLAYER_START_LOANSconstthe player's start-up loan choicesLink to this entryconst PLAYER_START_LOANS := [100000, 250000, 500000]Declared inscripts/core/data.gd:496Data.PLAYER_START_LOANconst...and the defaultData.BANKRUPT_MONTHSconstmonths in the red before a company goes bankruptData.MAX_LOANconstLink to this entryconst MAX_LOAN := 500000This entry has no behavior notes yet.
Declared inscripts/core/data.gd:499Data.LOAN_INTERESTconstLink to this entryconst LOAN_INTEREST := 0.04This entry has no behavior notes yet.
Declared inscripts/core/data.gd:500Data.wagon_capstatic funcLink to this entrystatic func wagon_cap(cargo: String) -> int- Parameters
cargo: String
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:503Data.BRIDGESconstBridge styles: cost multiplier, longest span (tiles between the ramps), year available.Data.BRIDGE_ORDERconstLink to this entryconst BRIDGE_ORDER := ["beam", "truss", "viaduct", "arch", "suspension"]This entry has no behavior notes yet.
Declared inscripts/core/data.gd:515Data.LIFEconstYears a vehicle of this kind runs well; older ones put customers off.Link to this entryconst LIFE := {"road": 15, "rail": 25, "water": 30, "air": 20}Declared inscripts/core/data.gd:519Data.BREAKDOWN_NAMESconstBreakdowns (a new-game option): none, reduced, normal.Link to this entryconst BREAKDOWN_NAMES := ["None", "Reduced", "Normal"]Declared inscripts/core/data.gd:522Data.BREAKDOWN_RATEconstLink to this entryconst BREAKDOWN_RATE := [0.0, 0.4, 1.0]This entry has no behavior notes yet.
Declared inscripts/core/data.gd:523Data.SERVICE_DAYSconsta vehicle wants servicing this oftenData.reliabilitystatic funcHow reliable a model is when new or just serviced (0..1): later designs are better made.Link to this entrystatic func reliability(model_id: String) -> float- Parameters
model_id: String
- Returns
float
scripts/core/data.gd:528Data.kind_namestatic funcLink to this entrystatic func kind_name(kind: String) -> String- Parameters
kind: String
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/core/data.gd:536
AiPlayer
AiPlayer.NAMESconstLink to this entryconst NAMESThis entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:10AiPlayer.ROUTES_PER_YEARconstLink to this entryconst ROUTES_PER_YEAR := [1.0, 1.5, 3.0]This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:13AiPlayer.CEILINGSconstshare of the maximum loan the AI will use for expansionAiPlayer.THINKconstLink to this entryconst THINK := [[30, 60], [18, 40], [10, 24]]This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:15AiPlayer.FOUNDINGconstLink to this entryconst FOUNDING := [150, 120, 50]This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:18AiPlayer.FOUNDING_GAPconstLink to this entryconst FOUNDING_GAP := [70, 60, 30]This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:19AiPlayer.COMPETE_SHAREconstLink to this entryconst COMPETE_SHARE := [0.35, 0.55, 0.8]This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:21AiPlayer.EXTRA_VEHICLESconstLink to this entryconst EXTRA_VEHICLES := [1, 3, 5]This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:23AiPlayer.RESERVEconstcash kept in hand before repaying the loanAiPlayer.MIN_EARNINGconsta year's profit each vehicle must make before its route gets moreAiPlayer.PAIRS_COMPAREDconstindustry pairs weighed up before choosing a freight routeAiPlayer.CLOSE_STEPconsttiles of a closed route torn up in one goAiPlayer.NO_PATH_FORconstnowhere to lay the line: the ground rarely changes, so wait four yearsAiPlayer.CLOSED_FORconsta route closed for losing money isn't tried again for ten yearsAiPlayer.BUILD_RATEconstLink to this entryconst BUILD_RATE := {"rail": [2, 3, 4], "road": [3, 5, 7]}This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:32AiPlayer.REROUTESconstways round something built across a line still being laidAiPlayer.SHIPS_ROOMconstmoney a rival can raise before it opens a ship routeAiPlayer.AIR_CASHconstmoney in hand before it opens an air service...AiPlayer.AIR_ROUTESconst...and how many it runs at most, by skill: airports aren't cheapAiPlayer.AIR_MINconsttiles between two towns worth flyingAiPlayer.SHIP_MAXconsttiles apart at most: ships are slow, whatever the map's sizeLink to this entryconst SHIP_MAX := {"freight": 80.0, "ferry": 60.0}Declared inscripts/sim/ai_player.gd:39AiPlayer.AIRPORT_REACHconstan airport goes this close to the town centreAiPlayer.FERRIESconstferry services a rival runs at most, by skillAiPlayer.FERRY_TOWNconstpeople in each town a ferry linksAiPlayer.PORT_POPconstpeople a town's dock or airport must have within reachLink to this entryconst PORT_POP := {"water": 150, "air": 200}Declared inscripts/sim/ai_player.gd:43AiPlayer.SITES_FORconstdays a search for dock and airport sites is rememberedAiPlayer.WASTE_TOWNconstpeople in a town a recycling line starts from (RAIL-29)AiPlayer.levelvarLink to this entryvar level := 1This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:47AiPlayer.loan_ceilingvarLink to this entryvar loan_ceiling: floatThis entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:48AiPlayer.companyvarLink to this entryvar company: CompanyThis entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:51AiPlayer.rngvarLink to this entryvar rng := RandomNumberGenerator.new()This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:52AiPlayer.next_thinkvarLink to this entryvar next_think := 20This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:53AiPlayer.routesvar[{"kind", "cargo", "a": Station, "b": Station, "model", "wagons", "max"}], and optionally "consist" (a mixed train's wagons), "key" (its entry infailed) and "closing" (being torn up).AiPlayer.failedvar"kind:x,y" -> day it failed; tried again a year laterAiPlayer.projectvarThe route being built, or {}.Link to this entryvar project := {}"kind" (rail/road), "line" (the points to lay, in order), "at" (index of the last point laid so far), "head"/"tail" (points at either end that are station platforms, kept when the rest is re-routed), "reserved" (tiles a re-route must avoid), "route" (its entry for
Declared inroutesonce it opens; its stations may still be missing), "buy" (vehicles to buy on opening), "finish" ("", or "bus"/"delivery"/"pickup": stops still to place in towns "town_a"/"town_b"), "news", "news_at" and "reroutes".scripts/sim/ai_player.gd:64AiPlayer._searchedvarthis think already ran a construction search (one a day is enough)AiPlayer._sitesvarDock and airport sites found lately: key -> [day searched, sites].Link to this entryvar _sites := {}Not saved: it is only a cache.
Declared inscripts/sim/ai_player.gd:67AiPlayer.debugstatic varprint why route attempts fail (playtest tooling)AiPlayer.slowest_managestatic varthe longest think so far, in microseconds: looking after routes...AiPlayer.slowest_expandstatic var...and planning a new one (benchmark tooling)AiPlayer.create_competitorsstatic funcLink to this entrystatic func create_competitors(sim: Sim, count: int) -> void- Parameters
sim: Simcount: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:73AiPlayer.dailyfuncLink to this entryfunc daily(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:94AiPlayer._expandfuncLink to this entryfunc _expand(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:111AiPlayer._operatingstatic funcIncome less the cost of running the network (vehicles, stations, track, interest) in ledgerl.Link to this entrystatic func _operating(l: Dictionary) -> int- Parameters
l: Dictionary
- Returns
int
scripts/sim/ai_player.gd:124AiPlayer._troubledfuncIn the red, or about to be: no time for new ventures.AiPlayer._open_routesfuncLink to this entryfunc _open_routes() -> int- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:134AiPlayer._count_routesfuncRoutes still open, of one kind ("" for all), and of one cargo ifcargois given.Link to this entryfunc _count_routes(kind: String, cargo := "") -> int- Parameters
kind: Stringcargo := ""
- Returns
int
scripts/sim/ai_player.gd:139AiPlayer._scaledstatic funcConstruction prices follow the game's building-cost setting, for rivals as for the player.Link to this entrystatic func _scaled(sim: Sim, cost: int) -> int- Parameters
sim: Simcost: int
- Returns
int
scripts/sim/ai_player.gd:148AiPlayer._managefuncLink to this entryfunc _manage(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
Data.wagon_cap,Data.model
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:154AiPlayer._fleetsfuncOur vehicles sorted by the route they were bought for: one list for each entry ofroutes.Link to this entryfunc _fleets(sim: Sim) -> Array- Parameters
sim: Sim
- Returns
Array
scripts/sim/ai_player.gd:245AiPlayer._buyfuncOne more vehicle ofmodelfor router.Link to this entryfunc _buy(sim: Sim, r: Dictionary, model: String) -> bool- Parameters
sim: Simr: Dictionarymodel: String
- Returns
bool
- Calls
Vehicle.stranded
scripts/sim/ai_player.gd:263AiPlayer._close_routefuncTear up a route nothing runs on any more: its stations (unless another route still calls there, or they aren't ours, like an oil rig's dock) and, for a railway, its track.Link to this entryfunc _close_route(sim: Sim, r: Dictionary) -> boolA stretch at a time, so a long line doesn't hold the game up. Returns true once nothing is left; vehicles in the way or an empty bank account mean another try next time.
- Parameters
sim: Simr: Dictionary
- Returns
bool
scripts/sim/ai_player.gd:282AiPlayer.industry_closedfuncAn industry has closed (RAIL-23): a route left with nothing to load, or without one of its stops (an oil rig's dock goes with the rig), is given up at once - its vehicles sold, then its stations and track torn up like those of any route that stops paying - and so is a line still being built.Link to this entryfunc industry_closed(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/ai_player.gd:320AiPlayer._orphanedstatic funcA freight route whose loading end no longer has its cargo (the industry there closed), or whose other end no longer takes it (a wind farm site finished, a power station closed), or any route one of whose stations is gone.Link to this entrystatic func _orphaned(r: Dictionary) -> boolStops a route doesn't have yet (a bus line still being built) are null.
- Parameters
r: Dictionary
- Returns
bool
scripts/sim/ai_player.gd:337AiPlayer._station_in_usefuncLink to this entryfunc _station_in_use(sim: Sim, st: Station, r: Dictionary) -> bool- Parameters
sim: Simst: Stationr: Dictionary
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:346AiPlayer._own_track_fromfuncOur own plain track joined to stationst(the AI never shares track between its lines).Link to this entryfunc _own_track_from(sim: Sim, st: Station) -> Array[Vector2i]- Parameters
sim: Simst: Station
- Returns
Array[Vector2i]
scripts/sim/ai_player.gd:359AiPlayer._best_modelfuncThe newest model of a family the AI knows that's on sale and carries the cargo.Link to this entryfunc _best_model(sim: Sim, kind: String, cargo: String, current: String) -> StringAircraft stop at the narrowbody: the big jets want more passengers than the towns a rival flies between have.
- Parameters
sim: Simkind: Stringcargo: Stringcurrent: String
- Returns
String
- Calls
Data.available,Data.model
scripts/sim/ai_player.gd:386AiPlayer._plan_linefuncA construction plan without the money check (_affordborrows when the AI commits to it).Link to this entryfunc _plan_line(sim: Sim, kind: String, pts: Array[Vector2i]) -> Dictionary- Parameters
sim: Simkind: Stringpts: Array[Vector2i]
- Returns
Dictionary
- Calls
BuildOps.plan_line
scripts/sim/ai_player.gd:400AiPlayer._plan_routefuncThe same for a line with bridges and tunnels on it (RouteBuilder.last_crossings, RAIL-52).Link to this entryfunc _plan_route(sim: Sim, kind: String, pts: Array[Vector2i], crossings: Array) -> Dictionary- Parameters
sim: Simkind: Stringpts: Array[Vector2i]crossings: Array
- Returns
Dictionary
scripts/sim/ai_player.gd:408AiPlayer._affordfuncMake surecostcan be paid, borrowing if needed.Link to this entryfunc _afford(sim: Sim, cost: int) -> boolReturns false if it can't.
- Parameters
sim: Simcost: int
- Returns
bool
scripts/sim/ai_player.gd:413AiPlayer._try_new_routefuncLink to this entryfunc _try_new_route(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:426AiPlayer._nothing_to_buildstatic funcA line plan that is refused only because everything on it exists already (a road that's there).Link to this entrystatic func _nothing_to_build(plan: Dictionary) -> bool- Parameters
plan: Dictionary
- Returns
bool
scripts/sim/ai_player.gd:469AiPlayer._whyfuncLink to this entryfunc _why(msg: String) -> void- Parameters
msg: String
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:473AiPlayer._try_busesfuncLink to this entryfunc _try_buses(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:478AiPlayer._links_townsfuncWhether one of our passenger lines ofkind(road or rail) already runs between these two towns.Link to this entryfunc _links_towns(a: Town, b: Town, kind: String = "road") -> bool- Parameters
a: Townb: Townkind: String = "road"
- Returns
bool
scripts/sim/ai_player.gd:541AiPlayer._try_mailfuncA mail van for one of our bus lines that has none yet: the stops are there already.Link to this entryfunc _try_mail(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:552AiPlayer._town_stop_tilestatic funcA straight town road tile near the centre that can take a stop.Link to this entrystatic func _town_stop_tile(m: WorldMap, t: Town) -> Dictionary- Parameters
m: WorldMapt: Town
- Returns
Dictionary
scripts/sim/ai_player.gd:578AiPlayer._map_scalestatic funcLink to this entrystatic func _map_scale(sim: Sim) -> float- Parameters
sim: Sim
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:594AiPlayer._industry_pairfuncPick a producing industry and the nearest industry that accepts its cargo within a distance band.Link to this entryfunc _industry_pair(sim: Sim, min_d: float, max_d: float, kind: String) -> ArrayA relaxed rival takes the first pair it comes across; better ones compare a few and take the one that should earn most (output not yet carried away x fare for the distance).
- Parameters
sim: Simmin_d: floatmax_d: floatkind: String
- Returns
Array
- Calls
Data.town_pop,Data.cargo_rate
scripts/sim/ai_player.gd:601AiPlayer._customer_rankstatic funcHow good a customer forcindustryqis (RAIL-29), the best first, then the nearest: 2 a plant that needs every input and has the others, waiting forc(this completes a chain); 1 an ordinary customer; 0 one that won't keep making something of it: a wind farm site (finished one day, when it takes no more) or a plant still missing another input.Link to this entrystatic func _customer_rank(q: Industry, c: String) -> intThose pay for what is delivered all the same, so they do when there is nothing better.
- Parameters
q: Industryc: String
- Returns
int
scripts/sim/ai_player.gd:661AiPlayer._outputstatic funcHow muchcpmakes in a month: a primary's rate, or what a processing plant made last month.Link to this entrystatic func _output(p: Industry, c: String) -> float- Parameters
p: Industryc: String
- Returns
float
scripts/sim/ai_player.gd:674AiPlayer._customer_townstatic funcThe nearest town big enough to want goods and food (and of at leastpoppeople), within a distance band ofp.Link to this entrystatic func _customer_town(sim: Sim, p: Industry, min_d: float, max_d: float, pop: int = 0) -> Town- Parameters
sim: Simp: Industrymin_d: floatmax_d: floatpop: int = 0
- Returns
Town
scripts/sim/ai_player.gd:680AiPlayer._good_sourcestatic funcA producing industry on land (see_producing).Link to this entrystatic func _good_source(ind: Industry) -> bool- Parameters
ind: Industry
- Returns
bool
scripts/sim/ai_player.gd:694AiPlayer._producingstatic funcA primary industry, or a processing plant that's being supplied.Link to this entrystatic func _producing(ind: Industry) -> bool- Parameters
ind: Industry
- Returns
bool
scripts/sim/ai_player.gd:699AiPlayer._served_bystatic funcLink to this entrystatic func _served_by(sim: Sim, ind: Industry, c: String, who: Company) -> bool- Parameters
sim: Simind: Industryc: Stringwho: Company
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:710AiPlayer._served_by_anyonestatic funcLink to this entrystatic func _served_by_anyone(sim: Sim, ind: Industry, c: String) -> bool- Parameters
sim: Simind: Industryc: String
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:717AiPlayer._terminalfuncFind platform tiles nearindfor a terminal oflengthtiles, ending on the side facingtoward.Link to this entryfunc _terminal(sim: Sim, kind: String, ind: Industry, length: int, toward: Vector2, partner: Dictionary = {}) -> DictionaryReturns {"tiles", "axis", "end", "exit", "exit_dir"} or {}.
partner: the terminal at the other end of the line, when that is chosen already.- Parameters
sim: Simkind: Stringind: Industrylength: inttoward: Vector2partner: Dictionary = {}
- Returns
Dictionary
scripts/sim/ai_player.gd:727AiPlayer._terminal_infuncThe same for any area: the best site whose first tile lies inarea.Link to this entryfunc _terminal_in(sim: Sim, kind: String, area: Rect2i, length: int, toward: Vector2, min_pop: int, partner: Dictionary = {}) -> DictionaryWith
min_pop, only sites whose catchment houses at least that many people count, and busier ones are preferred.- Parameters
sim: Simkind: Stringarea: Rect2ilength: inttoward: Vector2min_pop: intpartner: Dictionary = {}
- Returns
Dictionary
scripts/sim/ai_player.gd:735AiPlayer._try_wastefuncA recycling line (RAIL-29): trucks carry the waste from a town's centre to a recycling plant within reach.Link to this entryfunc _try_waste(sim: Sim) -> boolTowns big enough to fill a truck now and then, and not served by us already.
- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:791AiPlayer._count_routes_fromfuncOur open routes loadingcargoat a stop in townt.Link to this entryfunc _count_routes_from(t: Town, cargo: String) -> int- Parameters
t: Towncargo: String
- Returns
int
scripts/sim/ai_player.gd:816AiPlayer._try_trucksfuncLink to this entryfunc _try_trucks(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:824AiPlayer._try_railfuncLink to this entryfunc _try_rail(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:833AiPlayer._try_pax_railfuncA passenger (and mail) railway between two sizeable towns a good way apart.Link to this entryfunc _try_pax_rail(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:841AiPlayer._build_pax_railfuncLink to this entryfunc _build_pax_rail(sim: Sim, a: Town, b: Town, key: String) -> bool- Parameters
sim: Sima: Townb: Townkey: String
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:864AiPlayer._build_freightfuncLink to this entryfunc _build_freight(sim: Sim, kind: String, p: Industry, q: Industry, cargo: String) -> bool- Parameters
sim: Simkind: Stringp: Industryq: Industrycargo: String
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:913AiPlayer._build_town_deliveryfuncA truck line from a processing plant to a stop in the middle of a town that takes its cargo, or withpickupthe other way round: from a town stop that supplies it (waste) top, which takes it.Link to this entryfunc _build_town_delivery(sim: Sim, p: Industry, town: Town, cargo: String, pickup := false) -> bool- Parameters
sim: Simp: Industrytown: Towncargo: Stringpickup := false
- Returns
bool
scripts/sim/ai_player.gd:979AiPlayer._try_shipsfuncA ship route: freight, or when there's none to try (no search was run), a ferry.Link to this entryfunc _try_ships(sim: Sim) -> boolA ferry earns far less than a freighter, so a rival runs only a few (FERRIES).
- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:1044AiPlayer._try_ship_freightfuncFreight by sea: a producing industry ships can call at (an oil rig, or one near the shore) and the nearest industry by the sea that takes its cargo, weighed up as in_industry_pair.Link to this entryfunc _try_ship_freight(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
- Calls
Data.cargo_rate
scripts/sim/ai_player.gd:1052AiPlayer._build_ship_freightfuncLink to this entryfunc _build_ship_freight(sim: Sim, p: Industry, q: Industry, cargo: String) -> bool- Parameters
sim: Simp: Industryq: Industrycargo: String
- Returns
bool
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1098AiPlayer._try_ferryfuncA ferry between two towns of FERRY_TOWN+ people on the same water, 14 to SHIP_MAX tiles apart.Link to this entryfunc _try_ferry(sim: Sim) -> bool- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:1115AiPlayer._try_airfuncAn air service between two big towns a good way apart: from a town, to the biggest one far enough away.Link to this entryfunc _try_air(sim: Sim) -> boolA town's airport is used again for its next service rather than building another.
- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:1145AiPlayer._pair_keystatic funcLink to this entrystatic func _pair_key(what: String, a: Town, b: Town) -> String- Parameters
what: Stringa: Townb: Town
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1171AiPlayer._build_town_linkfuncA passenger service ofkind("water" or "air") between two towns, calling atpaandpb(see_town_port).Link to this entryfunc _build_town_link(sim: Sim, kind: String, a: Town, b: Town, pa: Dictionary, pb: Dictionary) -> bool- Parameters
sim: Simkind: Stringa: Townb: Townpa: Dictionarypb: Dictionary
- Returns
bool
- Calls
L.t
scripts/sim/ai_player.gd:1177AiPlayer._open_port_routefuncBuild what a ship or air route still needs at either end (r.a,r.b: {"station"} for one that's there already, or a site {"tiles", "axis"}), buy its firstcountvehicles and open it.Link to this entryfunc _open_port_route(sim: Sim, r: Dictionary, count: int, news: String, news_at: Vector2) -> boolNothing is built unless both ends can be, and each must supply or take the cargo as its end of the route should.
- Parameters
sim: Simr: Dictionarycount: intnews: Stringnews_at: Vector2
- Returns
bool
scripts/sim/ai_player.gd:1194AiPlayer._town_portfuncWhere a passenger service ofkind("water" or "air") calls intown: a dock or airport of ours there already, or else the best site for a new one ({} when there's none).Link to this entryfunc _town_port(sim: Sim, kind: String, town: Town) -> Dictionary- Parameters
sim: Simkind: Stringtown: Town
- Returns
Dictionary
scripts/sim/ai_player.gd:1243AiPlayer._port_towardfuncWhere a ship route forindcalls: our own dock that serves it already, an oil rig's open dock, or the shore site nearesttoward.Link to this entryfunc _port_toward(sim: Sim, ind: Industry, toward: Vector2) -> Dictionary{} if ships can't reach it.
- Parameters
sim: Simind: Industrytoward: Vector2
- Returns
Dictionary
scripts/sim/ai_player.gd:1254AiPlayer._ports_offuncWhere ships can call forind: an oil rig's own open dock, or the shore tiles near enough for a dock's catchment to reach it ([] inland).Link to this entryfunc _ports_of(sim: Sim, ind: Industry) -> ArrayRemembered for a while.
- Parameters
sim: Simind: Industry
- Returns
Array
scripts/sim/ai_player.gd:1272AiPlayer._industry_docksstatic funcLink to this entrystatic func _industry_docks(m: WorldMap, ind: Industry) -> Array- Parameters
m: WorldMapind: Industry
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1276AiPlayer._rememberedfuncA search for sites, done again only once it's SITES_FOR days old: the coast and the towns barely change from one think to the next, and a site that has gone is caught when it's built on.Link to this entryfunc _remembered(sim: Sim, key: String, search: Callable)- Parameters
sim: Simkey: Stringsearch: Callable
- Returns
func _remembered(sim: Sim, key: String, search: Callable)
scripts/sim/ai_player.gd:1293AiPlayer._port_sitestatic funcThe best site near the centre oftownfor a dock (a shore tile) or an airport (a level 3x2 or 2x3 patch): most people within its reach, at least PORT_POP, less a little for each tile from the centre.Link to this entrystatic func _port_site(m: WorldMap, kind: String, town: Town) -> Dictionary{"tiles", "axis"}, or {} when there's none.
- Parameters
m: WorldMapkind: Stringtown: Town
- Returns
Dictionary
scripts/sim/ai_player.gd:1304AiPlayer._port_fitsstatic funcWhether a dock (kind"water", one tile) or an airport ("air") can go on the tiles ofr.Link to this entrystatic func _port_fits(m: WorldMap, kind: String, r: Rect2i) -> bool- Parameters
m: WorldMapkind: Stringr: Rect2i
- Returns
bool
scripts/sim/ai_player.gd:1335AiPlayer._pop_tablestatic funcRunning totals of the people in the houses ofarea, so that those in any rectangle of it take four lookups (_pop_in) instead of a count tile by tile.Link to this entrystatic func _pop_table(m: WorldMap, area: Rect2i) -> PackedInt32Array- Parameters
m: WorldMaparea: Rect2i
- Returns
PackedInt32Array
scripts/sim/ai_player.gd:1356AiPlayer._pop_instatic funcLink to this entrystatic func _pop_in(sums: PackedInt32Array, area: Rect2i, r: Rect2i) -> int- Parameters
sums: PackedInt32Arrayarea: Rect2ir: Rect2i
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1374AiPlayer._berthstatic funcThe water tile ships berth at for a dock end of a route ({"station"} or a shore site).Link to this entrystatic func _berth(m: WorldMap, port: Dictionary) -> Vector2i- Parameters
m: WorldMapport: Dictionary
- Returns
Vector2i
- Calls
BuildOps.dock_facing
scripts/sim/ai_player.gd:1387AiPlayer._second_berthfuncShips take turns at a berth (RAIL-26).Link to this entryfunc _second_berth(sim: Sim, fleet: Array) -> voidA ship seen waiting (thinks are weeks apart, so it waits often) off one of our one-berth docks, where the ship in the berth is waiting for a full load, gets a second dock tile built beside the first, with a berth of its own - but only when the waiting ship has other work there: cargo to unload, or a different cargo to load. Two ships waiting for the same cargo gain nothing from a berth each: they would share it out between them, fill up no sooner, and then sail in convoy with nobody loading in between. Two berths at most, and an oil rig's dock is nobody's to extend.
- Parameters
sim: Simfleet: Array
- Returns
void
scripts/sim/ai_player.gd:1403AiPlayer._berth_besidestatic funcA shore tile beside dock tilet, whose ships berth on the waterfacingit, where a second dock tile would have a berth of its own: on the same shore, facing the same way, so the two berths lie side by side, and on water no other dock berths at.Link to this entrystatic func _berth_beside(m: WorldMap, t: Vector2i, facing: int) -> Vector2i(-1, -1) if there's none.
- Parameters
m: WorldMapt: Vector2ifacing: int
- Returns
Vector2i
- Calls
BuildOps.dock_facing
scripts/sim/ai_player.gd:1429AiPlayer._berth_takenstatic funcWhether a dock already berths at water tilew: one on the shore facing it, or an oil rig's dock standing on it.Link to this entrystatic func _berth_taken(m: WorldMap, w: Vector2i) -> bool- Parameters
m: WorldMapw: Vector2i
- Returns
bool
scripts/sim/ai_player.gd:1442AiPlayer._sea_linkstatic funcWhether ships can sail between the water tilesaandbby a way not much longer than the straight line (a long way round the coast pays no more than the short one).Link to this entrystatic func _sea_link(m: WorldMap, a: Vector2i, b: Vector2i) -> boolThe search keeps to the water near that line, so even on a big sea it's quick.
- Parameters
m: WorldMapa: Vector2ib: Vector2i
- Returns
bool
- Calls
Pathfinder.find_sea
scripts/sim/ai_player.gd:1457AiPlayer._carries_fromfuncWhether one of our routes already loadscat a station servingind(an oil rig's dock is nobody's, so_served_bydoesn't see our tankers there).Link to this entryfunc _carries_from(sim: Sim, ind: Industry, c: String) -> bool- Parameters
sim: Simind: Industryc: String
- Returns
bool
scripts/sim/ai_player.gd:1463AiPlayer._startfuncBegin layingline, a stretch a day (seeproject).Link to this entryfunc _start(line: Array[Vector2i], head: int, tail: int, reserved: Dictionary, to_lay: bool, route: Dictionary, buy: int, news: String, news_at: Vector2, extra: Dictionary = {}) -> voidhead/tail: points at the start/end of the line that are platforms.to_lay: false when every piece of it exists already (an existing road).- Parameters
line: Array[Vector2i]head: inttail: intreserved: Dictionaryto_lay: boolroute: Dictionarybuy: intnews: Stringnews_at: Vector2extra: Dictionary = {}
- Returns
void
scripts/sim/ai_player.gd:1475AiPlayer._constructfuncA day's work on the line under construction, and opening it once it's finished.Link to this entryfunc _construct(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/ai_player.gd:1484AiPlayer._next_crossingstatic funcThe next bridge or tunnel the line under construction comes to ({} when none is left).Link to this entrystatic func _next_crossing(p: Dictionary) -> Dictionary- Parameters
p: Dictionary
- Returns
Dictionary
scripts/sim/ai_player.gd:1536AiPlayer._reroutefuncA new way from where the line has got to, to its far end.Link to this entryfunc _reroute(sim: Sim) -> boolFalse if there's none (or the line has been re-routed too often already).
- Parameters
sim: Sim
- Returns
bool
scripts/sim/ai_player.gd:1550AiPlayer._openfuncThe line is finished: place the stops still missing, buy the first vehicles and open for business.Link to this entryfunc _open(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/ai_player.gd:1606AiPlayer._abandonfuncGive up the line under construction: what was built of it is torn up again (roads stay, as they do when a route closes) and the place isn't tried again for a while.Link to this entryfunc _abandon(sim: Sim, why: String) -> void- Parameters
sim: Simwhy: String
- Returns
void
scripts/sim/ai_player.gd:1642AiPlayer.to_dictfuncLink to this entryfunc to_dict() -> Dictionary- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1661AiPlayer._route_to_dictstatic funcLink to this entrystatic func _route_to_dict(r: Dictionary) -> Dictionary- Parameters
r: Dictionary
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1681AiPlayer._route_from_dictstatic funcA route saved by_route_to_dict, or {} if one of its stations is gone.Link to this entrystatic func _route_from_dict(r: Dictionary, by_id: Dictionary, partial := false) -> DictionaryWith
partial, a station not placed yet (-1) is allowed.- Parameters
r: Dictionaryby_id: Dictionarypartial := false
- Returns
Dictionary
scripts/sim/ai_player.gd:1692AiPlayer._flatstatic funcLink to this entrystatic func _flat(tiles: Array) -> Array- Parameters
tiles: Array
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1713AiPlayer._tilesstatic funcLink to this entrystatic func _tiles(flat: Array) -> Array[Vector2i]- Parameters
flat: Array
- Returns
Array[Vector2i]
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1721AiPlayer.from_dictstatic funcLink to this entrystatic func from_dict(sim: Sim, d: Dictionary) -> AiPlayer- Parameters
sim: Simd: Dictionary
- Returns
AiPlayer
This entry has no behavior notes yet.
Declared inscripts/sim/ai_player.gd:1728
BuildOps
BuildOps._planstatic funcLink to this entrystatic func _plan() -> Dictionary- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:8BuildOps._failstatic funcLink to this entrystatic func _fail(p: Dictionary, t: Vector2i, why: String) -> void- Parameters
p: Dictionaryt: Vector2iwhy: String
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:12BuildOps.dir_betweenstatic funcLink to this entrystatic func dir_between(a: Vector2i, b: Vector2i) -> int- Parameters
a: Vector2ib: Vector2i
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:18BuildOps.network_bits_okstatic funcWhether a tile can carry a road or rail piece with the given full connection bitmask.Link to this entrystatic func network_bits_ok(m: WorldMap, x: int, y: int, bits: int, strict: bool = false) -> boolFlat tiles take any shape; simple inclines only take pieces running along the incline.
- Parameters
m: WorldMapx: inty: intbits: intstrict: bool = false
- Returns
bool
scripts/sim/build_ops.gd:26BuildOps._slope_reasonstatic funcLink to this entrystatic func _slope_reason(m: WorldMap, x: int, y: int) -> String- Parameters
m: WorldMapx: inty: int
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:50BuildOps._obj_reasonstatic funcLink to this entrystatic func _obj_reason(o: Dictionary) -> String- Parameters
o: Dictionary
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:58BuildOps._is_crossingstatic funcLink to this entrystatic func _is_crossing(existing_other: int, bits: int) -> bool- Parameters
existing_other: intbits: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:67BuildOps.span_problemstatic funcGround construction under a bridge or over a tunnel: allowed only across its line.Link to this entrystatic func span_problem(m: WorldMap, x: int, y: int, bits: int) -> String- Parameters
m: WorldMapx: inty: intbits: int
- Returns
String
- Calls
L.t,WorldMap.axis_of
scripts/sim/build_ops.gd:72BuildOps.under_bridgestatic funcLink to this entrystatic func under_bridge(m: WorldMap, x: int, y: int) -> bool- Parameters
m: WorldMapx: inty: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:86BuildOps.rail_tile_problemstatic funcWhy rail with full bitmaskbitscan't go on this tile, or "" if it can.Link to this entrystatic func rail_tile_problem(m: WorldMap, x: int, y: int, bits: int) -> String- Parameters
m: WorldMapx: inty: intbits: int
- Returns
String
- Calls
L.t
scripts/sim/build_ops.gd:92BuildOps.road_tile_problemstatic funcWhy road with full bitmaskbitscan't go on this tile, or "" if it can.Link to this entrystatic func road_tile_problem(m: WorldMap, x: int, y: int, bits: int) -> String- Parameters
m: WorldMapx: inty: intbits: int
- Returns
String
- Calls
L.t
scripts/sim/build_ops.gd:118BuildOps.INDUSTRY_GAPconstTiles of open ground towns leave around an industry's footprint: room for the player's station or loading bay, and no houses pressed against a cooling tower.BuildOps.can_link_roadstatic funcStricter rule used by town growth: no crossings, no stations, and no new street into the ground kept clear around an industry (joining a road already there is fine).Link to this entrystatic func can_link_road(m: WorldMap, x: int, y: int, d: int, strict: bool = false) -> bool- Parameters
m: WorldMapx: inty: intd: intstrict: bool = false
- Returns
bool
- Calls
Const.opp
scripts/sim/build_ops.gd:152BuildOps.link_roadstatic funcLink to this entrystatic func link_road(m: WorldMap, x: int, y: int, d: int) -> void- Parameters
m: WorldMapx: inty: intd: int
- Returns
void
- Calls
Const.opp
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:171BuildOps.can_build_housestatic funcHouses need a flat, dry, empty tile, clear of the ground kept around industries.Link to this entrystatic func can_build_house(m: WorldMap, x: int, y: int) -> bool- Parameters
m: WorldMapx: inty: int
- Returns
bool
scripts/sim/build_ops.gd:181BuildOps.plan_linestatic funcPlan a road or rail line through consecutive, 4-adjacent tilespts.Link to this entrystatic func plan_line(m: WorldMap, kind: String, pts: Array[Vector2i]) -> DictionaryExtra keys: kind, add (Vector2i -> bits to add).
- Parameters
m: WorldMapkind: Stringpts: Array[Vector2i]
- Returns
Dictionary
scripts/sim/build_ops.gd:194BuildOps._parallel_diagonalstatic funcIfexistingis one corner piece andaddingthe opposite corner, the pairing they form as two parallel diagonals (see WorldMap.diag2), else -1.Link to this entrystatic func _parallel_diagonal(existing: int, adding: int) -> int- Parameters
existing: intadding: int
- Returns
int
scripts/sim/build_ops.gd:245BuildOps.apply_linestatic funcLink to this entrystatic func apply_line(m: WorldMap, p: Dictionary) -> void- Parameters
m: WorldMapp: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:255BuildOps.dock_facingstatic funcDirection from a shore tile down to open water, or -1.Link to this entrystatic func dock_facing(m: WorldMap, x: int, y: int) -> intDocks sit on a shore slope whose low edge meets the water (or on a level tile at the water's edge).
- Parameters
m: WorldMapx: inty: int
- Returns
int
scripts/sim/build_ops.gd:276BuildOps.station_tile_problemstatic funcLink to this entrystatic func station_tile_problem(m: WorldMap, kind: String, x: int, y: int, axis: int) -> String- Parameters
m: WorldMapkind: Stringx: inty: intaxis: int
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:284BuildOps.MAX_STATION_SPREADconsta station's tiles fit in a square this many tiles acrossBuildOps.plan_stationstatic funcPlan station tiles ofkind("rail" or "road") alongaxis.Link to this entrystatic func plan_station(m: WorldMap, kind: String, pts: Array[Vector2i], axis: int) -> DictionaryExtra keys: kind, axis, tiles, join (Station or null), catch (catchment incl. joined station), accepts, supplies, attractions (attraction types in the catchment).
- Parameters
m: WorldMapkind: Stringpts: Array[Vector2i]axis: int
- Returns
Dictionary
scripts/sim/build_ops.gd:333BuildOps.apply_stationstatic funcLink to this entrystatic func apply_station(m: WorldMap, p: Dictionary) -> Station- Parameters
m: WorldMapp: Dictionary
- Returns
Station
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:389BuildOps.add_rig_dockstatic funcThe open dock an industry at sea (an oil rig) comes with, so a rig can be served by ship however far from the shore it stands.Link to this entrystatic func add_rig_dock(m: WorldMap, ind: Industry) -> StationNobody owns it and every company's ships may load there. Made with the map, and on loading a save from before rigs had one. Returns the dock (the one it already has, if any), or null when no open water touches the rig.
- Parameters
m: WorldMapind: Industry
- Returns
Station
- Calls
L.t,WorldMap.axis_of
scripts/sim/build_ops.gd:424BuildOps.rig_dock_spotstatic funcWhere a rig's dock goes: a free water tile along one of the rig's sides, the one with the most open water around it (away from any shore), so ships come and go easily.Link to this entrystatic func rig_dock_spot(m: WorldMap, ind: Industry) -> Vector2i(-1, -1) if none.
- Parameters
m: WorldMapind: Industry
- Returns
Vector2i
scripts/sim/build_ops.gd:455BuildOps.is_rig_dockstatic funcTrue on the tile of a rig's own dock (see add_rig_dock).Link to this entrystatic func is_rig_dock(o) -> bool- Parameters
o
- Returns
bool
scripts/sim/build_ops.gd:486BuildOps.bulldoze_targetstatic funcWhat bulldozing a tile would remove (one layer: station, track, road, building or trees) and its cost.Link to this entrystatic func bulldoze_target(m: WorldMap, x: int, y: int, who_id: int = -1) -> Dictionarywho_id: the company bulldozing. On a level crossing over someone else's track it takes the road.- Parameters
m: WorldMapx: inty: intwho_id: int = -1
- Returns
Dictionary
scripts/sim/build_ops.gd:494BuildOps.plan_bulldozestatic funcExtra keys: rect, count.Link to this entrystatic func plan_bulldoze(m: WorldMap, rect: Rect2i, who_id: int = -1) -> Dictionary- Parameters
m: WorldMaprect: Rect2iwho_id: int = -1
- Returns
Dictionary
- Calls
L.t
scripts/sim/build_ops.gd:526BuildOps.apply_bulldozestatic funcApplies to every removable tile in the rect; industries are skipped.Link to this entrystatic func apply_bulldoze(m: WorldMap, p: Dictionary) -> void- Parameters
m: WorldMapp: Dictionary
- Returns
void
scripts/sim/build_ops.gd:566BuildOps.plan_terraformstatic funcRaise (delta = 1) or lower (delta = -1) one tile corner.Link to this entrystatic func plan_terraform(m: WorldMap, c: Vector2i, delta: int) -> DictionaryNeighbouring corners follow so that edge-adjacent corners never differ by more than one level. Extra keys: corner, corners (Vector2i -> new height), tiles (affected tiles).
- Parameters
m: WorldMapc: Vector2idelta: int
- Returns
Dictionary
- Calls
L.t
scripts/sim/build_ops.gd:648BuildOps.apply_terraformstatic funcLink to this entrystatic func apply_terraform(m: WorldMap, p: Dictionary) -> void- Parameters
m: WorldMapp: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:701BuildOps.plan_levelstatic funcLevel the tiles inrect(all their corners) toheight, as far as the rules allow.Link to this entrystatic func plan_level(m: WorldMap, rect: Rect2i, height: int, blocked: Dictionary = {}) -> DictionaryCorners move one level at a time - cutting from the top down, then filling from the bottom up - and drag their neighbours along the way plan_terraform does, so edge-adjacent corners never differ by more than one level. A tile that can't change shape (a building, road or track, a bridge or tunnel, water, or a tile in
blocked: tile -> reason) pins its corners, and any move that would disturb a pinned corner is left out; the rest of the area is still levelled. Trees on tiles that change shape are cleared. Extra keys: rect, height, corners (Vector2i -> new height), steps (corner moves, each costing Data.COST.terraform), tiles (tiles that change shape), trees (those of them with trees), why (refused tile -> reason; the same tiles are inbad).- Parameters
m: WorldMaprect: Rect2iheight: intblocked: Dictionary = {}
- Returns
Dictionary
- Calls
L.t
scripts/sim/build_ops.gd:723BuildOps._level_problemstatic funcWhy tiletcan't change shape while levelling ("" if it can).Link to this entrystatic func _level_problem(m: WorldMap, t: Vector2i, blocked: Dictionary) -> String- Parameters
m: WorldMapt: Vector2iblocked: Dictionary
- Returns
String
- Calls
L.t
scripts/sim/build_ops.gd:783BuildOps._level_stepstatic funcMove cornercone level (delta) tov, dragging neighbours along.Link to this entrystatic func _level_step(m: WorldMap, c: Vector2i, v: int, delta: int, work: Dictionary, blocked: Dictionary, problems: Dictionary, p: Dictionary) -> boolFails, changing nothing in
work, when a corner that would move belongs to a tile that can't change (recorded in p.why).- Parameters
m: WorldMapc: Vector2iv: intdelta: intwork: Dictionaryblocked: Dictionaryproblems: Dictionaryp: Dictionary
- Returns
bool
scripts/sim/build_ops.gd:800BuildOps.apply_levelstatic funcLink to this entrystatic func apply_level(m: WorldMap, p: Dictionary) -> void- Parameters
m: WorldMapp: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:838BuildOps.MAX_BRIDGEconstLink to this entryconst MAX_BRIDGE := 24This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:857BuildOps.MAX_TUNNELconstLink to this entryconst MAX_TUNNEL := 30This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:858BuildOps.edge_heightsstatic funcCorner heights of the edge of tiletfacing directiond.Link to this entrystatic func edge_heights(m: WorldMap, t: Vector2i, d: int) -> Vector2i- Parameters
m: WorldMapt: Vector2id: int
- Returns
Vector2i
scripts/sim/build_ops.gd:862BuildOps._end_piecestatic funcThe network piece a bridge or tunnel needs on tilet(toward directiond), added to the plan.Link to this entrystatic func _end_piece(m: WorldMap, p: Dictionary, t: Vector2i, d: int) -> void- Parameters
m: WorldMapp: Dictionaryt: Vector2id: int
- Returns
void
scripts/sim/build_ops.gd:871BuildOps.plan_bridgestatic funcA bridge from ramp tileato ramp tileb(same row or column).Link to this entrystatic func plan_bridge(m: WorldMap, kind: String, a: Vector2i, b: Vector2i, style: String = "") -> DictionaryThe deck sits at the height of the ramps' inner edges, which must match. The ground underneath may not rise above the deck, and roads or track passing under need a level of clearance. Extra keys: kind, type, s0, s1, dir, level, add (ramp pieces), tiles (spans).
- Parameters
m: WorldMapkind: Stringa: Vector2ib: Vector2istyle: String = ""
- Returns
Dictionary
- Calls
L.t,L.lower,Const.opp,WorldMap.axis_of
scripts/sim/build_ops.gd:890BuildOps.plan_electrifystatic funcOverhead wires over the track alongpts.Link to this entrystatic func plan_electrify(m: WorldMap, pts: Array[Vector2i]) -> DictionaryTiles without track are skipped; wired ones are free. Extra keys: tiles (the tiles that get wires).
- Parameters
m: WorldMappts: Array[Vector2i]
- Returns
Dictionary
- Calls
L.t
scripts/sim/build_ops.gd:966BuildOps.apply_electrifystatic funcLink to this entrystatic func apply_electrify(m: WorldMap, p: Dictionary) -> void- Parameters
m: WorldMapp: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:984BuildOps.plan_depotstatic funcA depot on tilet, its door - and its one road or track connection - facingfacing.Link to this entrystatic func plan_depot(m: WorldMap, kind: String, t: Vector2i, facing: int) -> DictionaryExtra keys: kind, tile, facing, link (joins the road/track in front), link_reason.
- Parameters
m: WorldMapkind: Stringt: Vector2ifacing: int
- Returns
Dictionary
scripts/sim/build_ops.gd:999BuildOps.apply_depotstatic funcLink to this entrystatic func apply_depot(m: WorldMap, p: Dictionary, owner: Company) -> void- Parameters
m: WorldMapp: Dictionaryowner: Company
- Returns
void
- Calls
Const.opp
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:1034BuildOps.tunnel_exitstatic funcWhere a tunnel from hillside tilea(headingd, its mouth at heightlevel) comes out: how many tiles on the far mouth is, at the first tile whose far edge comes back down tolevelat either corner.Link to this entrystatic func tunnel_exit(m: WorldMap, a: Vector2i, d: int, level: int) -> int0 when the ground doesn't come down that far within MAX_TUNNEL tiles (or the map ends first).
- Parameters
m: WorldMapa: Vector2id: intlevel: int
- Returns
int
scripts/sim/build_ops.gd:1060BuildOps._edge_cornersstatic funcThe corners of the edge of tiletfacing directiond, in edge_heights' order.Link to this entrystatic func _edge_corners(t: Vector2i, d: int) -> Array[Vector2i]- Parameters
t: Vector2id: int
- Returns
Array[Vector2i]
scripts/sim/build_ops.gd:1072BuildOps.plan_tunnelstatic funcA tunnel starting at hillside tilea(an incline rising straight ahead).Link to this entrystatic func plan_tunnel(m: WorldMap, kind: String, a: Vector2i, hint: bool = true) -> DictionaryIt runs into the hill to the first tile where the ground comes back down to the entrance's height (tunnel_exit), and that tile is the far mouth. A hill seldom ends in a slope exactly like the one it started with - it comes down on a slant, or one corner sticks up - so the far mouth's tile is evened out into one, its corners lowered the way Level land lowers them (dragging the land around along). Extra keys as plan_bridge, plus corners (corner -> new height, evening out the far mouth: see apply_level) and trees (tiles that change shape and lose their trees).
hint: when there's no way out, look further up the slope for a hillside that has one.- Parameters
m: WorldMapkind: Stringa: Vector2ihint: bool = true
- Returns
Dictionary
scripts/sim/build_ops.gd:1088BuildOps._no_exitstatic funcplan_tunnel finding no way out: say so, on the entrance alone (not the whole line it looked along).Link to this entrystatic func _no_exit(m: WorldMap, p: Dictionary, a: Vector2i, d: int, level: int, hint: bool) -> voidThe ground may come back down on the far side, only not as low as here: then a hillside further up the same slope, still on the way up (before the ground first levels off or falls), may well take a tunnel - when one does, say where.
- Parameters
m: WorldMapp: Dictionarya: Vector2id: intlevel: inthint: bool
- Returns
void
- Calls
L.t,WorldMap.axis_of,L.n
scripts/sim/build_ops.gd:1162BuildOps._even_out_mouthstatic funcEven out tunnel tilet(headingd) into the far mouth: a straight incline fromlevel+ 1 on its near edge down tolevelon its far edge.Link to this entrystatic func _even_out_mouth(m: WorldMap, p: Dictionary, t: Vector2i, d: int, level: int, keep: Array) -> voidAdds the corners that move, their cost and the trees they take to
p;keepare tiles that mustn't change shape.- Parameters
m: WorldMapp: Dictionaryt: Vector2id: intlevel: intkeep: Array
- Returns
void
scripts/sim/build_ops.gd:1189BuildOps._set_cornersstatic funcPut corner heights (corner -> height) on the map as they are, without redrawing anything.Link to this entrystatic func _set_corners(m: WorldMap, corners: Dictionary) -> DictionaryReturns the heights they had, to put back the same way.
- Parameters
m: WorldMapcorners: Dictionary
- Returns
Dictionary
scripts/sim/build_ops.gd:1234BuildOps.apply_crossingstatic funcLink to this entrystatic func apply_crossing(m: WorldMap, p: Dictionary) -> Dictionary- Parameters
m: WorldMapp: Dictionary
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:1243BuildOps.signal_problemstatic funcLink to this entrystatic func signal_problem(m: WorldMap, t: Vector2i) -> String- Parameters
m: WorldMapt: Vector2i
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:1268BuildOps.plan_signalstatic funcPlace a two-way signal, or cycle an existing one: two-way -> one-way -> one-way the other way -> two-way.Link to this entrystatic func plan_signal(m: WorldMap, t: Vector2i) -> DictionaryExtra keys: tile, state (see WorldMap.signals).
- Parameters
m: WorldMapt: Vector2i
- Returns
Dictionary
scripts/sim/build_ops.gd:1288BuildOps.apply_signalstatic funcLink to this entrystatic func apply_signal(m: WorldMap, p: Dictionary) -> void- Parameters
m: WorldMapp: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/build_ops.gd:1307BuildOps._corner_ofstatic func[a, b] ifbitsis a single corner piece, else [].Link to this entrystatic func _corner_of(bits: int) -> Array- Parameters
bits: int
- Returns
Array
scripts/sim/build_ops.gd:1314BuildOps.signal_dirsstatic funcThe two directions trains can pass a signal on tilet(headings on entering the tile).Link to this entrystatic func signal_dirs(m: WorldMap, t: Vector2i) -> Array- Parameters
m: WorldMapt: Vector2i
- Returns
Array
- Calls
Const.opp
scripts/sim/build_ops.gd:1323
Calendar
Calendar.MONTHSconstLink to this entryconst MONTHS := ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]This entry has no behavior notes yet.
Declared inscripts/core/calendar.gd:4Calendar.MONTH_DAYSconstLink to this entryconst MONTH_DAYS := [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]This entry has no behavior notes yet.
Declared inscripts/core/calendar.gd:5Calendar.is_leapstatic funcLink to this entrystatic func is_leap(y: int) -> bool- Parameters
y: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/core/calendar.gd:8Calendar.year_daysstatic funcLink to this entrystatic func year_days(y: int) -> int- Parameters
y: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/core/calendar.gd:12Calendar.from_daystatic funcReturns Vector3i(year, month 0-11, day of month 1-31).Link to this entrystatic func from_day(day: int) -> Vector3i- Parameters
day: int
- Returns
Vector3i
scripts/core/calendar.gd:17Calendar.formatstatic funcLink to this entrystatic func format(day: int) -> String- Parameters
day: int
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/core/calendar.gd:33Calendar.is_christmasstatic funcChristmas time in the towns: 1 December to 6 January.Link to this entrystatic func is_christmas(day: int) -> bool- Parameters
day: int
- Returns
bool
scripts/core/calendar.gd:39Calendar.doy_is_christmasstatic funcThe same for a day of the year (0 = 1 January), ignoring leap years.Link to this entrystatic func doy_is_christmas(doy: int) -> bool- Parameters
doy: int
- Returns
bool
scripts/core/calendar.gd:45Calendar.day_of_year_startstatic funcDay number of 1 January ofyear.Link to this entrystatic func day_of_year_start(year: int) -> int- Parameters
year: int
- Returns
int
scripts/core/calendar.gd:50
ConnectPlanner
ConnectPlanner.MAX_DISTconsttiles apart (along the grid) beyond which it doesn't search at allConnectPlanner.ENDS_TRIEDconstsides of a joined end worth tryingConnectPlanner.PAIRSconst(start side, end side) pairs searched at mostConnectPlanner.LIVE_EXPANSIONSconstRouteBuilder's budget while the pointer moves (the click that builds searches with its own, larger one), so a search that finds nothing doesn't hold up the game.ConnectPlanner.SHORTCUT_SAVESconstA bridge or tunnel is taken over the cheapest way round when it saves at least SHORTCUT_SAVES tiles and SHORTCUT_SHARE of the line's length.Link to this entryconst SHORTCUT_SAVES := 4In that search a crossing tile costs plain line plus SHORTCUT_PRICE of what it costs over that, and each crossing SHORTCUT_CROSSING tiles on top.
Declared inscripts/sim/connect_planner.gd:24ConnectPlanner.SHORTCUT_SHAREconstLink to this entryconst SHORTCUT_SHARE := 0.3This entry has no behavior notes yet.
Declared inscripts/sim/connect_planner.gd:25ConnectPlanner.SHORTCUT_PRICEconstLink to this entryconst SHORTCUT_PRICE := 0.25This entry has no behavior notes yet.
Declared inscripts/sim/connect_planner.gd:26ConnectPlanner.SHORTCUT_CROSSINGconstLink to this entryconst SHORTCUT_CROSSING := 2.0This entry has no behavior notes yet.
Declared inscripts/sim/connect_planner.gd:27ConnectPlanner.pathstatic funcTiles fromatob(both included, each one next to the one before), or [] when no line was found within the search's budget; never over water or through a hill (see route for those).Link to this entrystatic func path(m: WorldMap, kind: String, a: Vector2i, b: Vector2i, arriving: int = -1, max_expansions: int = 0, pairs_tried: int = PAIRS) -> Array[Vector2i]arriving: the way a line already reachesa(a waypoint), so this one carries on from it instead of doubling back (-1: none).max_expansions: RouteBuilder's budget (0: its own default, which grows with the distance; otherwise never more than that).pairs_tried: how many (start side, end side) pairs to try at most.- Parameters
m: WorldMapkind: Stringa: Vector2ib: Vector2iarriving: int = -1max_expansions: int = 0pairs_tried: int = PAIRS
- Returns
Array[Vector2i]
scripts/sim/connect_planner.gd:36ConnectPlanner.routestatic funcpath, with bridges and tunnels where the way needs them: {"tiles", "crossings": as RouteBuilder.last_crossings gives them}.Link to this entrystatic func route(m: WorldMap, kind: String, a: Vector2i, b: Vector2i, year: int, arriving: int = -1, max_expansions: int = 0, pairs_tried: int = PAIRS) -> Dictionaryyear: the bridge styles there are by then (-1: no bridges or tunnels at all).- Parameters
m: WorldMapkind: Stringa: Vector2ib: Vector2iyear: intarriving: int = -1max_expansions: int = 0pairs_tried: int = PAIRS
- Returns
Dictionary
scripts/sim/connect_planner.gd:44ConnectPlanner._shortcutstatic funcjumps(RouteBuilder.jumps_for) with every crossing weighed mostly by its length: a span or tunnel tile costs little more than a tile of plain line, and a crossing little on top.Link to this entrystatic func _shortcut(jumps: Dictionary) -> Dictionary- Parameters
jumps: Dictionary
- Returns
Dictionary
scripts/sim/connect_planner.gd:73ConnectPlanner._routestatic funcOne search withjumps, from the best sides of the ends: route's {"tiles", "crossings"}.Link to this entrystatic func _route(m: WorldMap, kind: String, a: Vector2i, b: Vector2i, jumps: Dictionary, arriving: int, max_expansions: int, pairs_tried: int) -> Dictionary- Parameters
m: WorldMapkind: Stringa: Vector2ib: Vector2ijumps: Dictionaryarriving: intmax_expansions: intpairs_tried: int
- Returns
Dictionary
- Calls
Const.opp,RouteBuilder.find
scripts/sim/connect_planner.gd:83ConnectPlanner.endsstatic funcWhere a search may start from endp(or, read backwards, finish at it), the other end being attoward: [{"tile", "dir": the way in (-1 any), "joined": true whenpitself is an existing piece the line joins from the free tile beside it}], best first.Link to this entrystatic func ends(m: WorldMap, kind: String, p: Vector2i, toward: Vector2i) -> Array- Parameters
m: WorldMapkind: Stringp: Vector2itoward: Vector2i
- Returns
Array
scripts/sim/connect_planner.gd:129ConnectPlanner._takes_a_piecestatic funcWhether any piece of road or track at all (straight or a bend) could go on tilet.Link to this entrystatic func _takes_a_piece(m: WorldMap, kind: String, t: Vector2i) -> bool- Parameters
m: WorldMapkind: Stringt: Vector2i
- Returns
bool
scripts/sim/connect_planner.gd:154ConnectPlanner._openstatic funcWhether a line ofkindcan be searched through tiletas it is: no building, station or depot on it, and no track already there for a railway (a road may run along a road).Link to this entrystatic func _open(m: WorldMap, kind: String, t: Vector2i) -> bool- Parameters
m: WorldMapkind: Stringt: Vector2i
- Returns
bool
scripts/sim/connect_planner.gd:163
Const
Const.MAP_SIZEconstLink to this entryconst MAP_SIZE := 128This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:4Const.CHUNKconstLink to this entryconst CHUNK := 16This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:5Const.HEIGHT_STEPconstworld units per height levelConst.MAX_HEIGHTconstLink to this entryconst MAX_HEIGHT := 10This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:7Const.WATER_Yconstwater surface height in world unitsConst.DAY_SECONDSconstreal seconds per game day at 1x (OpenTTD: 74 ticks x 30 ms = 2.22 s)Const.VEHICLE_PACEconstVehicles get this much done per game day - moving, loading, being serviced - so trips take fewer days while they move on screen exactly as fast as before the day got longer.Const.START_YEARconstLink to this entryconst START_YEAR := 1950This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:14Const.DIRSconstLink to this entryconst DIRS: Array[Vector2i] = [Vector2i(0, -1), Vector2i(1, 0), Vector2i(0, 1), Vector2i(-1, 0)]This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:17Const.BITconstLink to this entryconst BIT: Array[int] = [1, 2, 4, 8]This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:18Const.AXIS_BITSconstLink to this entryconst AXIS_BITS: Array[int] = [10, 5]This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:20Const.oppstatic funcLink to this entrystatic func opp(d: int) -> int- Parameters
d: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/core/constants.gd:23
Economy
Economy.PRODUCTION_DAYSconstproduction runs every this many daysEconomy.LATE_SPANconsta late cargo loses its fare, on average, at a rate that would take all of it over this many times its on-time daysEconomy.LATE_EARLYconstbelow 1 the S-curve starts falling sooner after the on-time days; 1 is a symmetric SEconomy.LATE_FLOORconstno delivery pays less than this share of the full fareEconomy.PAX_PER_POPconstpassengers per resident per monthEconomy.MAIL_PER_POPconstbags of mail per resident per monthEconomy.WASTE_PER_POPconsttonnes of waste per resident per month (from the Late century, RAIL-29)Economy.PER_POPconstLink to this entryconst PER_POP := {"pax": PAX_PER_POP, "mail": MAIL_PER_POP, "waste": WASTE_PER_POP}This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:12Economy.MAX_WAITINGconstLink to this entryconst MAX_WAITING := 3000.0This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:13Economy.GIVE_UPconsteach production run, cargo waiting beyond a month's worth loses this share times (1 - rating)Economy.INFLOW_EASEconsthow fast a station's estimate of its monthly inflow follows what arrives (per production run)Economy.STAFF_NEUTRALconststaffing at which an industry leans neither to growing nor shrinking (see staff_lean)Economy.STAFF_TILTconsthow far staff_lean moves the odds that a production change is a riseEconomy.PROD_MINconstthe least a mine, farm or well makes in a monthEconomy.paymentstatic funcPayment for deliveringamountof cargocoverdisttiles indaysdays.Link to this entrystatic func payment(c: String, amount: float, dist: float, days: float) -> int- Parameters
c: Stringamount: floatdist: floatdays: float
- Returns
int
scripts/sim/economy.gd:22Economy.farestatic funcWhat one unit of cargocpays fordisttiles afterdayson the way.Link to this entrystatic func fare(c: String, dist: float, days: float) -> floatFares don't change over the years: distance raises them in proportion, and lateness lowers them (see time_factor).
- Parameters
c: Stringdist: floatdays: float
- Returns
float
- Calls
Data.cargo_rate
scripts/sim/economy.gd:28Economy.time_factorstatic funcShare of the full fare still paid afterdayson the way: all of it up to the cargo's own number of days, then easing down in a smooth S-curve (slowly at first, fastest half-way, slowly again at the end) to LATE_FLOOR, reached at 8 times that long (see LATE_SPAN).Link to this entrystatic func time_factor(c: String, days: float) -> float- Parameters
c: Stringdays: float
- Returns
float
- Calls
Data.cargo_days
scripts/sim/economy.gd:35Economy.late_loss_per_daystatic funcShare of the full fare lost, on average, for every day between the cargo's own number of days and the day it reaches the floor.Link to this entrystatic func late_loss_per_day(c: String) -> floatIn the steep part of the curve it falls about twice as fast.
- Parameters
c: String
- Returns
float
- Calls
Data.cargo_days
scripts/sim/economy.gd:44Economy.station_distancestatic funcLink to this entrystatic func station_distance(a: Station, b: Station) -> float- Parameters
a: Stationb: Station
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:48Economy.producestatic funcLink to this entrystatic func produce(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:56Economy._linksstatic funcWhich stations reach which industries, both ways round: {"sts": Industry -> [Station], "inds": Station -> [Industry]}, each list in map order.Link to this entrystatic func _links(m: WorldMap) -> DictionaryKept on the map and rebuilt only when a station's catchment changes or a station or industry comes or goes (never saved).
- Parameters
m: WorldMap
- Returns
Dictionary
scripts/sim/economy.gd:112Economy.industry_stationsstatic funcStations whose catchment touches any tile of the industry.Link to this entrystatic func industry_stations(m: WorldMap, ind: Industry) -> Array- Parameters
m: WorldMapind: Industry
- Returns
Array
scripts/sim/economy.gd:142Economy._distributestatic funcGiveamtof cargo to the (up to two) best-rated stations that serve it.Link to this entrystatic func _distribute(stations: Array, c: String, amt: float) -> floatReturns the amount moved.
- Parameters
stations: Arrayc: Stringamt: float
- Returns
float
scripts/sim/economy.gd:157Economy.shut_outstatic funcWhetherstgets no new cargo because another company holds exclusive transport rights in its town (a town request's reward, see Opportunities).Link to this entrystatic func shut_out(st: Station) -> bool- Parameters
st: Station
- Returns
bool
scripts/sim/economy.gd:195Economy._update_ratingsstatic funcRatings drift toward a target set by pickup frequency, vehicle speed and waiting cargo.Link to this entrystatic func _update_ratings(sim: Sim) -> voidThen cargo that has piled up gives up (see give_up).
- Parameters
sim: Sim
- Returns
void
scripts/sim/economy.gd:201Economy.give_upstatic funcCargocwaiting atstthat gives up this production run (RAIL-56): of what waits beyond a month's worth (Station.inflow), a share of GIVE_UP times what the rating falls short of 100%.Link to this entrystatic func give_up(st: Station, c: String) -> floatAt 50% that is 3% every run, about a quarter a month; at 90%, 0.6%. A queue that fits the station's own trade is never touched, and every queue settles instead of filling to MAX_WAITING.
- Parameters
st: Stationc: String
- Returns
float
scripts/sim/economy.gd:234Economy._update_inflowstatic funcFold what came tostsince the last production run into its estimate of a month's inflow.Link to this entrystatic func _update_inflow(st: Station) -> void- Parameters
st: Station
- Returns
void
scripts/sim/economy.gd:242Economy.unloadstatic funcUnload what this station accepts; pay the owner.Link to this entrystatic func unload(sim: Sim, v: Vehicle, st: Station) -> intReturns units moved.
- Parameters
sim: Simv: Vehiclest: Station
- Returns
int
scripts/sim/economy.gd:256Economy.FEEDER_SHAREconstA feeder's share of the fare for cargo it leaves at a transfer stop: part of what the trip so far would pay, less what earlier feeders already showed.Link to this entryconst FEEDER_SHARE := 0.75It only goes on the vehicle's books (its profit); the money comes when the cargo is delivered, so passing cargo back and forth earns nothing.
Declared inscripts/sim/economy.gd:324Economy.deliver_to_industriesstatic funcLink to this entrystatic func deliver_to_industries(sim: Sim, st: Station, c: String, amount: int) -> void- Parameters
sim: Simst: Stationc: Stringamount: int
- Returns
void
- Calls
IndustryLife.build
This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:333Economy._full_setsstatic funcA plant that needs every input (Data.INDUSTRY "needs_all") holds what comes until the rest does:amountofcjoins its store, and every full set (one unit of each input) goes into the works.Link to this entrystatic func _full_sets(ind: Industry, c: String, amount: float) -> floatReturns how many units go in, so each set makes as many units of output as it took in.
- Parameters
ind: Industryc: Stringamount: float
- Returns
float
scripts/sim/economy.gd:369Economy.hire_commutersstatic funcPassengers delivered tostgo to work at the industries it reaches (RAIL-28), each taking on what it still needs this month, in map order.Link to this entrystatic func hire_commuters(m: WorldMap, st: Station, amount: float) -> floatReturns how many found work; the rest are ordinary passengers (the fare is the same either way).
- Parameters
m: WorldMapst: Stationamount: float
- Returns
float
scripts/sim/economy.gd:384Economy.reachesstatic funcWhetherst's catchment touchesind(from the cached links: nothing is copied).Link to this entrystatic func reaches(m: WorldMap, st: Station, ind: Industry) -> bool- Parameters
m: WorldMapst: Stationind: Industry
- Returns
bool
scripts/sim/economy.gd:394Economy.industry_stations_reversestatic funcLink to this entrystatic func industry_stations_reverse(m: WorldMap, st: Station) -> Array- Parameters
m: WorldMapst: Station
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:398Economy.monthlystatic funcLink to this entrystatic func monthly(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:413Economy._charge_infrastructurestatic funcMonthly upkeep of everything companies own besides stations: track, overhead wires, signals, bridges and tunnels, and depots.Link to this entrystatic func _charge_infrastructure(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/economy.gd:446Economy._councilstatic funcCouncils like companies that serve their town and grow tired of neglected stations.Link to this entrystatic func _council(sim: Sim, t: Town) -> void- Parameters
sim: Simt: Town
- Returns
void
- Calls
L.t
scripts/sim/economy.gd:491Economy.staff_leanstatic funcHow staffing leans an industry's future (RAIL-28): from -STAFF_NEUTRAL with nobody at work to 1 - STAFF_NEUTRAL with a full staff, 0 at about what walkers-in from a nearby town give.Link to this entrystatic func staff_lean(m: WorldMap, ind: Industry, index: Industry.StaffingIndex = null) -> float_maybe_change_production weighs it into growing or shrinking; closures (RAIL-23) can too.
- Parameters
m: WorldMapind: Industryindex: Industry.StaffingIndex = null
- Returns
float
scripts/sim/economy.gd:528Economy._maybe_change_productionstatic funcLink to this entrystatic func _maybe_change_production(sim: Sim, ind: Industry, index: Industry.StaffingIndex) -> void- Parameters
sim: Simind: Industryindex: Industry.StaffingIndex
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/economy.gd:532
FirstSteps
FirstSteps.PAIR_DISTconsttiles apart a first bus route pays well over and costs little road forFirstSteps.PAIR_MINconstcloser than this, two towns are one place to a passengerFirstSteps.PAIR_FROMconstpairs are chosen among this many towns nearest the viewFirstSteps.CENTREconsttiles from a town's centre whose roads count as the town'sFirstSteps.town_pairstatic funcTwo towns neararound(a tile) that make a good first bus route: about PAIR_DIST apart, near the view, the bigger the better.Link to this entrystatic func town_pair(m: WorldMap, around: Vector2) -> Array[Town, Town], or [] on a map with fewer than two towns.
- Parameters
m: WorldMaparound: Vector2
- Returns
Array
scripts/sim/first_steps.gd:15FirstSteps._fromstatic funcLink to this entrystatic func _from(t: Town, p: Vector2) -> float- Parameters
t: Townp: Vector2
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/first_steps.gd:35FirstSteps.towns_joinedstatic funcWhether a road runs from the middle of townato the middle of townb.Link to this entrystatic func towns_joined(m: WorldMap, a: Town, b: Town) -> bool- Parameters
m: WorldMapa: Townb: Town
- Returns
bool
- Calls
Pathfinder.find
scripts/sim/first_steps.gd:40FirstSteps._centre_roadsstatic funcThe road tiles near a town's centre (its first crossroads is there), as a set.Link to this entrystatic func _centre_roads(m: WorldMap, t: Town) -> Dictionary- Parameters
m: WorldMapt: Town
- Returns
Dictionary
scripts/sim/first_steps.gd:49FirstSteps.road_stopsstatic funcwho's road stops (a station with a road stop).Link to this entrystatic func road_stops(m: WorldMap, who: Company) -> Array- Parameters
m: WorldMapwho: Company
- Returns
Array
scripts/sim/first_steps.gd:59FirstSteps.joined_stopsstatic funcTwo ofwho's road stops that a road joins, so a bus could run between them: [Station, Station], or [].Link to this entrystatic func joined_stops(sim: Sim, who: Company) -> ArrayOne search per stop at most, each towards all the stops after it.
- Parameters
sim: Simwho: Company
- Returns
Array
scripts/sim/first_steps.gd:69FirstSteps.depot_readystatic funcWhether a new bus could leave forstnow: with depots in the rules, one ofwho's road depots must be joined to it.Link to this entrystatic func depot_ready(sim: Sim, who: Company, st: Station) -> bool- Parameters
sim: Simwho: Companyst: Station
- Returns
bool
scripts/sim/first_steps.gd:87FirstSteps.route_vehiclestatic funcwho's newest vehicle that has a route (two stops or more), or null.Link to this entrystatic func route_vehicle(sim: Sim, who: Company) -> Vehicle- Parameters
sim: Simwho: Company
- Returns
Vehicle
scripts/sim/first_steps.gd:92FirstSteps.has_stationstatic funcWhetherwhohas a station of any kind.Link to this entrystatic func has_station(m: WorldMap, who: Company) -> bool- Parameters
m: WorldMapwho: Company
- Returns
bool
scripts/sim/first_steps.gd:101FirstSteps.town_linkstatic funcA vehicle ofwho's that carries passengers between stops in two different towns, or null.Link to this entrystatic func town_link(sim: Sim, who: Company) -> Vehicle- Parameters
sim: Simwho: Company
- Returns
Vehicle
scripts/sim/first_steps.gd:109FirstSteps._takenstatic varcargo -> true: what some industry takes, in any era (industry_takes)FirstSteps.industry_takesstatic funcWhether cargocis something an industry takes in, in any era (so delivering it delivers to an industry).Link to this entrystatic func industry_takes(c: String) -> bool- Parameters
c: String
- Returns
bool
- Calls
Data.accepts
scripts/sim/first_steps.gd:128
Fmt
Fmt.int_commasstatic funcLink to this entrystatic func int_commas(n: int) -> String- Parameters
n: int
- Returns
String
- Calls
L.thousands
This entry has no behavior notes yet.
Declared inscripts/core/fmt.gd:5Fmt.moneystatic funcFormats an integer dollar amount with the active language’s digit grouping and currency placement.Link to this entrystatic func money(n: int) -> StringThe result is a string for display.
- Parameters
n: int
- Returns
String
- Calls
L.t
scripts/core/fmt.gd:15Fmt.cargo_liststatic funcLink to this entrystatic func cargo_list(ids: Array) -> String- Parameters
ids: Array
- Returns
String
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/core/fmt.gd:19Fmt.short_moneystatic funcCompact money for chart axes and tiles: $950, $12k, $1.4M.Link to this entrystatic func short_money(n: int) -> String- Parameters
n: int
- Returns
String
- Calls
L.t
scripts/core/fmt.gd:27
Goals
Goals.STEPSconstThe checklist, in the order a company usually gets there: [id, title, how to do it].Goals.ACHIEVEMENTSconstAchievements:tiersgives one achievement per number ("<kind>_<number>"); the others are one each.Goals.KINDSconstLink to this entryconst KINDS := ["road", "rail", "water", "air"]This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:42Goals.SERVED_DAYSconsta town counts as served while one of your stations there has picked up passengers this recentlyGoals.LEAGUE_AGEconstdays: a lead in the league counts once the company is this old (before, it isGoals.GOAL_IDSconstThe company goals a new game can set, and what each takes: a company value, or first place in the league, within so many years of the company's founding.Link to this entryconst GOAL_IDS := ["none", "value_1m", "value_10m", "league"]Declared inscripts/sim/goals.gd:49Goals.GOALSconstLink to this entryconst GOALSThis entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:50Goals.stepsvarstep id -> game day it was doneGoals.unlockedvarachievement id -> game day it was wonGoals.goal_resultvar"won" or "missed" once the company goal is decidedGoals.goal_dayvar...and the day it wasGoals.paxvarpassengers delivered, all closed months togetherGoals.deliveredvarcargo -> true: every cargo the company has deliveredGoals.revvargoes up whenever something is ticked off, won or missedGoals._station_idvarthe map's next station id at the last look (a new station since?)Goals._vehicle_idvarthe same for vehiclesGoals._pax_monthvarpassengers delivered this month at the last lookGoals._quietvarcatching up an old save: no newsGoals.check_stepsfuncTick off the first steps done since the last look.Link to this entryfunc check_steps(sim: Sim) -> voidCheap: see the top of the file.
- Parameters
sim: Sim
- Returns
void
scripts/sim/goals.gd:72Goals._check_stepsfunccargo: what the company has delivered lately, cargo -> [units, $];rail_paid: a train has earned.Link to this entryfunc _check_steps(sim: Sim, cargo: Dictionary, rail_paid: bool) -> void- Parameters
sim: Simcargo: Dictionaryrail_paid: bool
- Returns
void
- Calls
FirstSteps.has_station,FirstSteps.route_vehicle,FirstSteps.town_link,FirstSteps.industry_takes
scripts/sim/goals.gd:80Goals._tickfuncLink to this entryfunc _tick(sim: Sim, id: String) -> void- Parameters
sim: Simid: String
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:107Goals.step_titlestatic funcLink to this entrystatic func step_title(id: String) -> String- Parameters
id: String
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:116Goals.monthlyfuncMonth end (Sim._on_day, once the month's books are closed): the month in profit, the achievements and the company goal.Link to this entryfunc monthly(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/goals.gd:127Goals._judgefuncLook at the figures again and unlock what they reach, then decide the goal if it is due.Link to this entryfunc _judge(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/goals.gd:140Goals.operating_profitstatic funcA month's income less its running costs and upkeep (buying and building aside), as the company overview's chart counts it.Link to this entrystatic func operating_profit(mo: Dictionary) -> int- Parameters
mo: Dictionary
- Returns
int
scripts/sim/goals.gd:151Goals.measurefuncThe figures the achievements and the goal are judged by: one pass over the vehicles and the stations, and the company value of each company for the league.Link to this entryfunc measure(sim: Sim) -> Dictionarybestis the best rival's value;leads, whether the company is worth more than every rival and old enough to count.- Parameters
sim: Sim
- Returns
Dictionary
scripts/sim/goals.gd:158Goals.cargos_in_gamestatic funcThe cargos this map has now: passengers, mail (and from the Late century waste) from the towns, and what its industries make.Link to this entrystatic func cargos_in_game(m: WorldMap) -> ArrayCargos whose industries haven't appeared yet (a later era's) aren't among them until one opens.
- Parameters
m: WorldMap
- Returns
Array
- Calls
Data.town_makes
scripts/sim/goals.gd:190Goals.ids_ofstatic funcThe ids of an achievement's tiers (or its one id).Link to this entrystatic func ids_of(a: Dictionary) -> Array- Parameters
a: Dictionary
- Returns
Array
scripts/sim/goals.gd:201Goals.reachedstatic funcWhether the figuresf(see measure) reach achievementid.Link to this entrystatic func reached(id: String, f: Dictionary) -> bool- Parameters
id: Stringf: Dictionary
- Returns
bool
scripts/sim/goals.gd:208Goals.unlockfuncWin achievementidtoday (if it isn't already), with news.Link to this entryfunc unlock(sim: Sim, id: String) -> void- Parameters
sim: Simid: String
- Returns
void
- Calls
L.t
scripts/sim/goals.gd:219Goals.achievement_namestatic funcWhat an achievement is called: the tier's own name, or the achievement's.Link to this entrystatic func achievement_name(id: String) -> String- Parameters
id: String
- Returns
String
- Calls
L.t,Fmt.money,Fmt.int_commas
scripts/sim/goals.gd:228Goals.title_ofstatic funcAn achievement's heading in the Goals window.Link to this entrystatic func title_of(kind: String) -> String- Parameters
kind: String
- Returns
String
- Calls
L.t
scripts/sim/goals.gd:240Goals.goal_ofstatic funcLink to this entrystatic func goal_of(sim: Sim) -> String- Parameters
sim: Sim
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:255Goals.goal_namestatic funcWhat a goal asks, in a few words.Link to this entrystatic func goal_name(id: String) -> String- Parameters
id: String
- Returns
String
scripts/sim/goals.gd:260Goals.goal_shortstatic funcThe same, short enough for the new-game screen's list.Link to this entrystatic func goal_short(id: String) -> String- Parameters
id: String
- Returns
String
- Calls
L.t
scripts/sim/goals.gd:270Goals.round_numberstatic funcA round number in few characters: 50, 100k, 10M.Link to this entrystatic func round_number(n: int) -> String- Parameters
n: int
- Returns
String
scripts/sim/goals.gd:280Goals.deadlinestatic funcThe last day to reach the goal: so many years after the company was founded.Link to this entrystatic func deadline(sim: Sim) -> int- Parameters
sim: Sim
- Returns
int
scripts/sim/goals.gd:289Goals.goal_metstatic funcWhether figuresf(see measure) meet the game's goal.Link to this entrystatic func goal_met(sim: Sim, f: Dictionary) -> bool- Parameters
sim: Simf: Dictionary
- Returns
bool
scripts/sim/goals.gd:297Goals._check_goalfuncLink to this entryfunc _check_goal(sim: Sim, f: Dictionary) -> void- Parameters
sim: Simf: Dictionary
- Returns
void
- Calls
L.t
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:306Goals._newsfuncLink to this entryfunc _news(sim: Sim, text: String, kind: String = "good") -> void- Parameters
sim: Simtext: Stringkind: String = "good"
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:322Goals.to_dictfuncLink to this entryfunc to_dict() -> Dictionary- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:329Goals.from_dictstatic funcLink to this entrystatic func from_dict(d: Dictionary) -> Goals- Parameters
d: Dictionary
- Returns
Goals
This entry has no behavior notes yet.
Declared inscripts/sim/goals.gd:334Goals.caught_upstatic funcA game saved before there were goals: tick off and unlock what it has done already, quietly, from what the save remembers (the last two years of deliveries, the last 24 months' books).Link to this entrystatic func caught_up(sim: Sim) -> Goals- Parameters
sim: Sim
- Returns
Goals
scripts/sim/goals.gd:350
IndustryLife
IndustryLife.OPENS_A_YEARconstopenings a year for each industry the map started withIndustryLife.WARNS_A_YEARconstchance a year a struggling industry is warned (staff tilt it)IndustryLife.UNSERVED_MONTHSconstnobody has loaded its cargo for this long before it can struggleIndustryLife.FLOORconst...and it makes at most this share of its kind's usual outputIndustryLife.WARN_DAYSconsthow long before closing it is warnedIndustryLife.RESCUE_DAYSconsta pickup (or delivery) this recent lifts the warningIndustryLife.FADEconsta retiring mine loses this share of its output every yearIndustryLife.RENEWABLEconsthow much likelier a renewable kind is to open than its count saysIndustryLife.WIND_REACHconsttowns this close to a wind farm grow faster and thank its buildersIndustryLife.WIND_RATINGconstcouncil rating a builder gains, times its share of the deliveriesIndustryLife.WIND_GROWTHconst...and growth waits this share as long in a town near oneIndustryLife.monthlystatic funcLink to this entrystatic func monthly(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
L.t,Economy.staff_lean
This entry has no behavior notes yet.
Declared inscripts/sim/industry_life.gd:40IndustryLife.yearlystatic funcOnce a year: retiring mines make a little less.Link to this entrystatic func yearly(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
- Calls
Data.retiring
scripts/sim/industry_life.gd:72IndustryLife._roomstatic funcThe map's room for industries ashore and at sea (see Sim.industry_room).Link to this entrystatic func _room(sim: Sim) -> Vector2i- Parameters
sim: Sim
- Returns
Vector2i
scripts/sim/industry_life.gd:79IndustryLife.servedstatic funcWhether a company has loadedind's cargo at a station in its reach, or delivered cargo to it, within the lastdays.Link to this entrystatic func served(sim: Sim, ind: Industry, days: float) -> bool- Parameters
sim: Simind: Industrydays: float
- Returns
bool
scripts/sim/industry_life.gd:89IndustryLife.strugglingstatic funcA primary industry at least UNSERVED_MONTHS old that nobody has served in that time, and whose output (staff included) is down to FLOOR of its kind's usual rate.Link to this entrystatic func struggling(sim: Sim, ind: Industry, index: Industry.StaffingIndex = null) -> boolOne with nobody at work gets there at its usual rate (Industry.PRIMARY_MIN); one with a town at its gate only after a cut. A customer on its way out (a power station in the Green age) struggles once nobody has supplied it for that long.
- Parameters
sim: Simind: Industryindex: Industry.StaffingIndex = null
- Returns
bool
- Calls
Data.retiring
scripts/sim/industry_life.gd:107IndustryLife.warnstatic funcTell everyoneindcloses in a year unless it is served by then.Link to this entrystatic func warn(sim: Sim, ind: Industry) -> void- Parameters
sim: Simind: Industry
- Returns
void
- Calls
L.t
scripts/sim/industry_life.gd:119IndustryLife.closing_textstatic funcThe day a struggling industry closes and what saves it, for its window and the Problems list.Link to this entrystatic func closing_text(ind: Industry) -> String- Parameters
ind: Industry
- Returns
String
- Calls
L.t,Calendar.format
scripts/sim/industry_life.gd:127IndustryLife.rescuestatic funcThe cargo that saves a struggling industry, in lower case: what it makes, carried away, or for a customer (a power station) what it takes, brought to it.Link to this entrystatic func rescue(ind: Industry) -> String- Parameters
ind: Industry
- Returns
String
- Calls
L.lower,Fmt.cargo_list
scripts/sim/industry_life.gd:135IndustryLife.closestatic funcTakeindoff the map: its tiles, an oil rig's own dock, what the stations around it accept and supply, the rivals' routes that served it, and the subsidies about it (Opportunities).Link to this entrystatic func close(sim: Sim, ind: Industry) -> void- Parameters
sim: Simind: Industry
- Returns
void
- Calls
L.t
scripts/sim/industry_life.gd:141IndustryLife._pick_typestatic funcWhich kind opens: weighed by how common each is on a new map, among those of this era that the map has room for.Link to this entrystatic func _pick_type(sim: Sim) -> StringKinds on their way out open no more, and from the era that retires the old ones (the Green age) the new kinds that take their place (wind farm sites) are favoured.
- Parameters
sim: Sim
- Returns
String
- Calls
Data.opens,Data.retiring
scripts/sim/industry_life.gd:169IndustryLife._renewablestatic funcA kind that comes with the era that retires others (the Green age's wind farm sites).Link to this entrystatic func _renewable(type: String) -> bool- Parameters
type: String
- Returns
bool
scripts/sim/industry_life.gd:191IndustryLife._introducestatic funcThe kinds of a later era, once it has come, that the map has fewer of than a new map would get each open one more this month (at the era's start, or in a game saved before it had them).Link to this entrystatic func _introduce(sim: Sim) -> voidA kind made from another (a wind farm from its site) counts with it. Where no site turns up, the next try waits a year (Sim.introduce_wait).
- Parameters
sim: Sim
- Returns
void
scripts/sim/industry_life.gd:205IndustryLife._made_fromstatic funcThe kind an industry oftypewas before it was finished (a wind farm: its site), ortype.Link to this entrystatic func _made_from(type: String) -> String- Parameters
type: String
- Returns
String
scripts/sim/industry_life.gd:221IndustryLife.buildstatic funcamountofcdelivered to a construction site (Data.INDUSTRY "builds") bywho: it counts towards the site's totals, and once they are all in the site becomes what it was building.Link to this entrystatic func build(sim: Sim, ind: Industry, c: String, amount: float, who: Company) -> void- Parameters
sim: Simind: Industryc: Stringamount: floatwho: Company
- Returns
void
scripts/sim/industry_life.gd:232IndustryLife.finishstatic funcA site has all it needs: it becomes a wind farm.Link to this entrystatic func finish(sim: Sim, ind: Industry) -> voidIts builders gain standing with the councils of the towns around it, in proportion to what each delivered, and the stations around it stop taking what it took.
- Parameters
sim: Simind: Industry
- Returns
void
- Calls
WorldGen.industry_name,L.t
scripts/sim/industry_life.gd:243IndustryLife.near_wind_farmstatic funcWhether a wind farm stands within WIND_REACH of townt(it grows faster: see Sim).Link to this entrystatic func near_wind_farm(m: WorldMap, t: Town) -> bool- Parameters
m: WorldMapt: Town
- Returns
bool
scripts/sim/industry_life.gd:270IndustryLife.openstatic funcOpen an industry oftypewhere WorldGen would put one, on ground where nothing is built.Link to this entrystatic func open(sim: Sim, type: String) -> IndustryReturns it, or null when there is no such site (or a ship is on its way through the one found).
- Parameters
sim: Simtype: String
- Returns
Industry
- Calls
WorldGen.find_site,WorldGen.spacing,WorldGen.unserved_feeders,WorldGen.put_industry,WorldGen.industry_name,BuildOps.add_rig_dock,WorldGen.level_ground,L.t,L.lower
scripts/sim/industry_life.gd:280IndustryLife._ships_throughstatic funcWhether a ship's course runs throughr(an oil rig opening there would stand in its way).Link to this entrystatic func _ships_through(sim: Sim, r: Rect2i) -> bool- Parameters
sim: Simr: Rect2i
- Returns
bool
scripts/sim/industry_life.gd:312IndustryLife._changedstatic funcAfter an industry came or went insider: stations around it look again at what they accept and supply, and everything made from the list of industries is made again (WorldMap.industry_rev).Link to this entrystatic func _changed(sim: Sim, r: Rect2i) -> void- Parameters
sim: Simr: Rect2i
- Returns
void
scripts/sim/industry_life.gd:323
L
L.DIRSconstLink to this entryconst DIRS := ["res://lang", "user://lang"]This entry has no behavior notes yet.
Declared inscripts/core/l.gd:18L.FALLBACKconstLink to this entryconst FALLBACK := "en"This entry has no behavior notes yet.
Declared inscripts/core/l.gd:19L.ELIDE_DEconstLanguages where "de" before a vowel is written "d'" (see tidy).L.KEEP_CASEconstLanguages whose nouns keep their capital in mid-sentence (see lower).L.langstatic varLink to this entrystatic var lang := "en"This entry has no behavior notes yet.
Declared inscripts/core/l.gd:25L._tablesstatic varlanguage code -> {english: translated}L._tablestatic varthe current language's tableL._loadedstatic varLink to this entrystatic var _loaded := falseThis entry has no behavior notes yet.
Declared inscripts/core/l.gd:28L._registeredstatic varlanguage code -> Translation given to the TranslationServerL.missesstatic varSet to a dictionary to collect every text looked up that has no translation (for tools/i18n_report).L._miss_mutexstatic varLink to this entrystatic var _miss_mutex := Mutex.new()This entry has no behavior notes yet.
Declared inscripts/core/l.gd:32L._guardedstatic varLink to this entrystatic var _guarded := falseThis entry has no behavior notes yet.
Declared inscripts/core/l.gd:33L._elidestatic varLink to this entrystatic var _elide: RegEx = nullThis entry has no behavior notes yet.
Declared inscripts/core/l.gd:34L.tstatic funcThe text in the current language.Link to this entrystatic func t(s: String) -> String- Parameters
s: String
- Returns
String
scripts/core/l.gd:58L.tidystatic funcSmooth text assembled from pieces, where a name was dropped into a translated sentence.Link to this entrystatic func tidy(s: String) -> StringCatalan and French write "de" as "d'" before a vowel: "Mina de carbó de Elmley" -> "Mina de carbó d'Elmley", "Mine de charbon de Ashford" -> "Mine de charbon d'Ashford". (Not before h: these are English-style names, where the h is sounded.)
- Parameters
s: String
- Returns
String
scripts/core/l.gd:75L.lowerstatic funcA name (cargo, building...) in lower case for use mid-sentence - except in German, where nouns keep their capital: "Takes coal", "Nimmt Kohle".Link to this entrystatic func lower(s: String) -> String- Parameters
s: String
- Returns
String
scripts/core/l.gd:86L.nstatic func"1 tile" / "7 tiles":oneis used for exactly one,many(with a %d) otherwise.Link to this entrystatic func n(one: String, many: String, count: int) -> String- Parameters
one: Stringmany: Stringcount: int
- Returns
String
scripts/core/l.gd:91L.eachstatic funcA list of names in the current language, e.g.Link to this entrystatic func each(items: Array) -> PackedStringArraycargo names from the data tables.
- Parameters
items: Array
- Returns
PackedStringArray
scripts/core/l.gd:98L.load_allstatic funcRead every language file.Link to this entrystatic func load_all(extra_dirs: Array = []) -> voidLater directories (the player's own, then mods) override earlier ones.
- Parameters
extra_dirs: Array = []
- Returns
void
scripts/core/l.gd:106L.load_filestatic funcParse one language file into the tables.Link to this entrystatic func load_file(path: String) -> intReturns the number of translations read.
- Parameters
path: String
- Returns
int
scripts/core/l.gd:122L._unquotestatic funcText that starts or ends with a space is written in double quotes: > "Tip: "Link to this entrystatic func _unquote(s: String) -> String- Parameters
s: String
- Returns
String
scripts/core/l.gd:148L.languagesstatic funcLanguages the player can pick: [[code, name in that language]], English first.L.system_languagestatic funcThe language to use for a setting of "auto": the system's, if we have it.Link to this entrystatic func system_language() -> String- Returns
String
scripts/core/l.gd:168L.set_languagestatic funcSwitch language.Link to this entrystatic func set_language(code: String) -> void"auto" follows the system.
- Parameters
code: String
- Returns
void
scripts/core/l.gd:176L.releasestatic funcTake our translations back out of the TranslationServer (see _Guard).L.thousandsstatic funcHow thousands are grouped: 1,234 in English, 1.234 in most others, 1 234 in French.L._guardstatic funcLink to this entrystatic func _guard() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/l.gd:207
Line
Line.COLORSconstLink to this entryconst COLORSThis entry has no behavior notes yet.
Declared inscripts/sim/line.gd:11Line.idvarLink to this entryvar id := 0This entry has no behavior notes yet.
Declared inscripts/sim/line.gd:14Line.namevarLink to this entryvar name := ""This entry has no behavior notes yet.
Declared inscripts/sim/line.gd:15Line.colorvarLink to this entryvar color := Color.WHITEThis entry has no behavior notes yet.
Declared inscripts/sim/line.gd:16Line.kindvarLink to this entryvar kind := "road"This entry has no behavior notes yet.
Declared inscripts/sim/line.gd:17Line.ownervarLink to this entryvar owner: CompanyThis entry has no behavior notes yet.
Declared inscripts/sim/line.gd:18Line.ordersvar[{"st": Station, "full": bool, "transfer": bool}], shared with every vehicle on itLine.spacingvarKeep the vehicles evenly spread round the line: each one waits at the first stop until the one before it is a fair share of a round trip ahead.Line.lap_daysvara round trip, on average (days); -1 until one has been timedLine.last_departurevargame day a vehicle of the line last left the first stopLine._initfuncLink to this entryfunc _init(p_id: int = 0, p_name: String = "", p_kind: String = "road", p_owner: Company = null) -> void- Parameters
p_id: int = 0p_name: String = ""p_kind: String = "road"p_owner: Company = null
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/line.gd:27Line.stopsfuncReturns the station objects in the order vehicles visit them on this line.Line.vehiclesfuncThe vehicles on this line, in the order they were bought.Link to this entryfunc vehicles(sim: Sim) -> Array- Parameters
sim: Sim
- Returns
Array
scripts/sim/line.gd:40Line.gapfuncThe gap (in days) the vehicles should keep at the first stop: a round trip shared out amongnof them.Link to this entryfunc gap(n: int) -> float0 when there is nothing to keep apart, or no round trip timed yet.
- Parameters
n: int
- Returns
float
scripts/sim/line.gd:46Line.note_departurefuncA vehicle of this line just left the first stop;lapis how long it took to come round since it last left it (-1 the first time).Link to this entryfunc note_departure(day: float, lap: float) -> void- Parameters
day: floatlap: float
- Returns
void
scripts/sim/line.gd:54Line.route_textfuncA route in a few words: "Ashford → Millbury".Line.totalsfuncThe line's numbers, added up over its vehicles: {"count", "profit", "last", "load" (-1 when none known), "running", "old", "stopped"}.Link to this entryfunc totals(sim: Sim) -> Dictionary- Parameters
sim: Sim
- Returns
Dictionary
scripts/sim/line.gd:73
Mods
Mods.DIRSconstLink to this entryconst DIRS := ["res://mods", "user://mods"]This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:14Mods.USER_DIRconstLink to this entryconst USER_DIR := "user://mods"This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:15Mods.UNPACKEDconstLink to this entryconst UNPACKED := "user://mods/.unpacked"This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:16Mods.SAMPLES_ZIPconstAn exported game can't hold the samples' folder as it is (the editor skips it: see mods/.gdignore), so tools/release.sh packs it into this zip, which is unpacked to SAMPLES whenever it changes.Mods.SAMPLESconstLink to this entryconst SAMPLES := "user://mods/.samples"This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:20Mods.KINDSconstLink to this entryconst KINDS := ["rail", "road", "water", "air"]This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:21Mods.foundstatic varEvery mod found: {"id", "name", "version", "author", "description", "path", "builtin", "has": {"data", "lang", "maps", "models", "script"}, "enabled", "error"}.Mods.scriptsstatic varlive Mod instances of the enabled script modsMods.mapsstatic varMaps offered in New game: {"name", "description", "heightmap", "params", "mod"}.Mods._meshesstatic varmodel id -> ArrayMesh loaded from a mod's .glbMods._appliedstatic varLink to this entrystatic var _applied := falseThis entry has no behavior notes yet.
Declared inscripts/core/mods.gd:30Mods.log_linesstatic varwhat went wrong, for the Mods screenMods.scanstatic funcLook through the mod folders.Link to this entrystatic func scan() -> voidZips in the player's folder are unpacked first.
- Returns
void
scripts/core/mods.gd:37Mods.read_infostatic funcRead a mod folder's mod.json.Link to this entrystatic func read_info(path: String) -> DictionaryReturns {} if it isn't a mod (with a note in the log if it tried to be).
- Parameters
path: String
- Returns
Dictionary
scripts/core/mods.gd:72Mods._unpack_zipsstatic funcA .zip dropped in the mods folder is unpacked next to the others (once per version of the file).Mods._unpack_samplesstatic funcUnpack the samples that ship in an exported game (once per version of them).Link to this entrystatic func _unpack_samples() -> boolFalse if that failed.
- Returns
bool
scripts/core/mods.gd:143Mods._remove_treestatic funcLink to this entrystatic func _remove_tree(path: String) -> void- Parameters
path: String
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:172Mods._notestatic funcLink to this entrystatic func _note(line: String) -> void- Parameters
line: String
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:184Mods.enabledstatic funcLink to this entrystatic func enabled() -> Array- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:189Mods.by_idstatic funcLink to this entrystatic func by_id(id: String) -> Dictionary- Parameters
id: String
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:193Mods.set_enabledstatic funcSwitch a mod on or off and rebuild what mods add.Link to this entrystatic func set_enabled(id: String, on: bool) -> voidRemembered in the settings.
- Parameters
id: Stringon: bool
- Returns
void
scripts/core/mods.gd:201Mods.applystatic funcRebuild everything the enabled mods add.Link to this entrystatic func apply(rescan: bool = true) -> voidSafe to call again: it starts from the plain game.
- Parameters
rescan: bool = true
- Returns
void
scripts/core/mods.gd:214Mods._apply_onestatic funcLink to this entrystatic func _apply_one(m: Dictionary) -> String- Parameters
m: Dictionary
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:241Mods._apply_datastatic funcCheck and merge one mod's data.json.Link to this entrystatic func _apply_data(m: Dictionary, d: Dictionary) -> StringReturns "" or what's wrong (nothing is added then).
- Parameters
m: Dictionaryd: Dictionary
- Returns
String
scripts/core/mods.gd:265Mods._collect_mapsstatic funcmaps/NAME.png, with an optional maps/NAME.json: {"name", "description", "settings": {...}} where settings are new-game parameters (w, h, towns, industries, year, ...).Link to this entrystatic func _collect_maps(m: Dictionary) -> void- Parameters
m: Dictionary
- Returns
void
scripts/core/mods.gd:333Mods.vehicle_meshstatic funcThe mesh a mod supplies for a vehicle model (from its .glb), or null to use the game's own.Link to this entrystatic func vehicle_mesh(model_id: String) -> ArrayMeshThe mesh keeps the materials it was made with.
- Parameters
model_id: String
- Returns
ArrayMesh
- Calls
Data.model,Data.has_model
scripts/core/mods.gd:364Mods.load_glbstatic funcRead a .glb / .gltf into one mesh (every mesh in the file, in place, with its materials).Link to this entrystatic func load_glb(file: String) -> ArrayMeshConvention, as for the game's own models: the vehicle faces -Z, stands on y = 0, centred.
- Parameters
file: String
- Returns
ArrayMesh
scripts/core/mods.gd:379Mods._merge_meshesstatic funcLink to this entrystatic func _merge_meshes(n: Node, xf: Transform3D, out: ArrayMesh) -> void- Parameters
n: Nodexf: Transform3Dout: ArrayMesh
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/core/mods.gd:393Mods.hookstatic funcCall a hook on every enabled script mod.Link to this entrystatic func hook(method: String, args: Array = []) -> voidA mod whose hook fails is reported, not fatal.
- Parameters
method: Stringargs: Array = []
- Returns
void
scripts/core/mods.gd:424Mods.allow_newsstatic funcNews goes out unless a mod's _on_news returns false.Link to this entrystatic func allow_news(sim: Sim, item: Dictionary) -> bool- Parameters
sim: Simitem: Dictionary
- Returns
bool
scripts/core/mods.gd:430Mods.save_statestatic funcWhat goes into a saved game: which mods were on, and each script mod's own data.Link to this entrystatic func save_state(sim: Sim) -> Dictionary- Parameters
sim: Sim
- Returns
Dictionary
scripts/core/mods.gd:438Mods.load_statestatic funcAfter loading a game: hand script mods their data, and return the mods the save was made with that aren't on now (names, for a warning).Link to this entrystatic func load_state(sim: Sim, state: Dictionary) -> Array- Parameters
sim: Simstate: Dictionary
- Returns
Array
scripts/core/mods.gd:451
Opportunities
Opportunities.MAX_SUBSIDIESconstFew at once, and seldom (a new one of each kind every eight months or so): each is news, and a stream of them buries the player's own (RAIL-78).Link to this entryconst MAX_SUBSIDIES := 2subsidies on offer at once (won ones aside)
Declared inscripts/sim/opportunities.gd:44Opportunities.MAX_REQUESTSconsttown requests open on the map at onceOpportunities.OFFER_CHANCEconstchance a month of a new subsidy while there is room, and the same for a requestOpportunities.DAY_CHANCEconst...as a chance a day (daily), so that over a month it comes to OFFER_CHANCE.Link to this entryconst DAY_CHANCE := 1.0 - pow(1.0 - OFFER_CHANCE, 1.0 / 30.0)Declared inscripts/sim/opportunities.gd:48Opportunities.TRIESconstsources (or towns) tried for a new offerOpportunities.SUBSIDY_MINconsttiles between the ends of a subsidised route (along the axes)Opportunities.SUBSIDY_MAXconstLink to this entryconst SUBSIDY_MAX := 60This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:51Opportunities.SUBSIDY_DAYSconstan offer nobody takes lapses after this longOpportunities.SUBSIDY_MULTconstthe winner's fares on the route...Opportunities.SUBSIDY_YEARSconst...for this longOpportunities.UNSERVED_DAYSconsta source whose cargo was loaded this recently is served alreadyOpportunities.TOWN_CARGOconstwhat every town takes besides passengers and mail (Station.coverage)Opportunities.TOWN_TAKES_POPconsta town this big takes them (a station in its centre reaches 60 people)Opportunities.LINK_POPconsta town this big asks for passenger links...Opportunities.LINK_TO_POPconst...to a town at least this bigOpportunities.RAIL_POPconsttwo towns this big may want the link by railOpportunities.SUPPLY_PER_POPconsta supply asks this many units a resident a month of its timeOpportunities.VISITORS_PER_POPconst...and visitors as manyOpportunities.SERVICE_RATINGconsta service request: every station rated this or more...Opportunities.SERVICE_MONTHSconst...this many month ends in a row...Opportunities.SERVICE_DEADLINEconst...within this many monthsOpportunities.REQUEST_MONTHSconstthe time other requests giveLink to this entryconst REQUEST_MONTHS := Vector2i(6, 18)Declared inscripts/sim/opportunities.gd:66Opportunities.REWARDSconstThe rewards that fit each request; one is chosen when it is made.Link to this entryconst REWARDSExclusive rights take a new link: good service alone, which rivals' stations give without trying, doesn't shut the others out.
Declared inscripts/sim/opportunities.gd:69Opportunities.RATING_BOOSTconstLink to this entryconst RATING_BOOST := 25.0This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:71Opportunities.GRANTconstLink to this entryconst GRANT := 50000This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:72Opportunities.RIGHTS_DAYSconstexclusive rights and half-price stations last this longOpportunities.CHEAPconstwhat stations and depots cost thenOpportunities.BOOM_DAYSconsta growth reward: fast growth this long (as Fund buildings)Opportunities.offersvarLink to this entryvar offers: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:77Opportunities.rngvarIts own random numbers (seeded by Sim from the game's seed, saved), so offers don't reshuffle the rest of the game's.Opportunities.revvargoes up whenever something is offered, won, met, lapses or makes progressOpportunities.on_deliveryfuncamtunits ofcloaded atfrom(null when that station is gone) delivered byvatst: wins and progress.Link to this entryfunc on_delivery(sim: Sim, v: Vehicle, from: Station, st: Station, c: String, amt: int) -> floatReturns what the fare is multiplied by (a won subsidy's SUBSIDY_MULT, else 1).
- Parameters
sim: Simv: Vehiclefrom: Stationst: Stationc: Stringamt: int
- Returns
float
scripts/sim/opportunities.gd:88Opportunities._reachesstatic funcWhether stationstreachesplace: an industry in its catchment, or a town it belongs to.Link to this entrystatic func _reaches(m: WorldMap, st: Station, place: Object) -> bool- Parameters
m: WorldMapst: Stationplace: Object
- Returns
bool
- Calls
Economy.reaches
scripts/sim/opportunities.gd:117Opportunities._joinsstatic funcLink to this entrystatic func _joins(o: Dictionary, a: Town, b: Town) -> bool- Parameters
o: Dictionarya: Townb: Town
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:123Opportunities._win_subsidyfuncLink to this entryfunc _win_subsidy(sim: Sim, o: Dictionary, who: Company) -> void- Parameters
sim: Simo: Dictionarywho: Company
- Returns
void
- Calls
L.t,Calendar.format
This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:127Opportunities._metfuncRequestkis met bywho: its reward, news, and it leaves the list.Link to this entryfunc _met(sim: Sim, k: int, who: Company) -> void- Parameters
sim: Simk: intwho: Company
- Returns
void
- Calls
L.t
scripts/sim/opportunities.gd:139Opportunities.monthlyfuncMonth end (Sim._on_day, after the industries' month): service months and rights that end.Link to this entryfunc monthly(sim: Sim) -> voidThen what lapses, as every day.
- Parameters
sim: Sim
- Returns
void
scripts/sim/opportunities.gd:169Opportunities.dailyfuncEvery day (Sim._on_day): offers that lapse or end that day, and now and then a new subsidy or a new request while there is room, so news of them comes at any time of the month.Link to this entryfunc daily(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/opportunities.gd:187Opportunities._lapsefuncTakes off the offers whose day has come, with news; a service request only at the month end (month_end), once its last month is counted.Link to this entryfunc _lapse(sim: Sim, month_end: bool) -> Vector2iReturns how many subsidies (x) and requests (y) are still open.
- Parameters
sim: Simmonth_end: bool
- Returns
Vector2i
- Calls
L.t
scripts/sim/opportunities.gd:198Opportunities._count_servicefuncOne more month for each company whose stations in the town are all rated SERVICE_RATING or more (it needs one at least); back to none for the others.Link to this entryfunc _count_service(sim: Sim, o: Dictionary) -> void- Parameters
sim: Simo: Dictionary
- Returns
void
scripts/sim/opportunities.gd:231Opportunities._leaderstatic funcThe company furthest on with a request (-1: nobody has started).Link to this entrystatic func _leader(o: Dictionary) -> int- Parameters
o: Dictionary
- Returns
int
scripts/sim/opportunities.gd:251Opportunities.industry_closedfuncAn industry closes (IndustryLife.close): offers about it are withdrawn, and a won subsidy ends.Link to this entryfunc industry_closed(sim: Sim, ind: Industry) -> void- Parameters
sim: Simind: Industry
- Returns
void
- Calls
L.t
scripts/sim/opportunities.gd:260Opportunities.offer_subsidyfuncOffer a subsidy for a route nobody serves yet, if one turns up in a few tries: a cargo an industry makes (or, from the Late century, the waste a town makes: Data.town_makes) that nobody loads there, to a place in reach that takes it.Link to this entryfunc offer_subsidy(sim: Sim) -> DictionaryReturns it, or {}.
- Parameters
sim: Sim
- Returns
Dictionary
scripts/sim/opportunities.gd:276Opportunities.pos_ofstatic funcWhere an industry or a town is: its middle.Link to this entrystatic func pos_of(place: Object) -> Vector2- Parameters
place: Object
- Returns
Vector2
scripts/sim/opportunities.gd:324Opportunities.offer_requestfuncAsk for something from a town without a request, if one in a few tries can ask for anything: the bigger the town, the likelier it is to ask.Link to this entryfunc offer_request(sim: Sim) -> DictionaryReturns the request, or {}.
- Parameters
sim: Sim
- Returns
Dictionary
- Calls
Goals.cargos_in_game
scripts/sim/opportunities.gd:330Opportunities.request_kindsfuncWhat towntcould ask for: links when it is big, supplies when it takes goods or food and the map makes some (have: Goals.cargos_in_game), visitors when it has an attraction, service when some company has a station there.Link to this entryfunc request_kinds(sim: Sim, t: Town, have: Array) -> Array- Parameters
sim: Simt: Townhave: Array
- Returns
Array
scripts/sim/opportunities.gd:359Opportunities.make_requestfuncMake a request oftypefrom townt(see request_kinds), with news.Link to this entryfunc make_request(sim: Sim, t: Town, type: String, have: Array) -> Dictionary{} when there is nothing to ask for after all (a link with no town in reach that isn't linked already).
- Parameters
sim: Simt: Towntype: Stringhave: Array
- Returns
Dictionary
- Calls
L.t,Calendar.format
scripts/sim/opportunities.gd:376Opportunities._link_partnerfuncA town for a link fromt: SUBSIDY_MIN..SUBSIDY_MAX tiles away, at least LINK_TO_POP people, and no passenger vehicle of anyone's calling at both yet.Link to this entryfunc _link_partner(sim: Sim, t: Town) -> TownNull when there is none.
- Parameters
sim: Simt: Town
- Returns
Town
scripts/sim/opportunities.gd:412Opportunities._offerfuncLink to this entryfunc _offer(sim: Sim, type: String, cargo: String, expires: int) -> Dictionary- Parameters
sim: Simtype: Stringcargo: Stringexpires: int
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:434Opportunities._offeredfuncWhether an industry or a town is the source of a subsidy already.Link to this entryfunc _offered(place: Object) -> bool- Parameters
place: Object
- Returns
bool
scripts/sim/opportunities.gd:443Opportunities._in_rangestatic funcLink to this entrystatic func _in_range(a: Vector2, b: Vector2) -> bool- Parameters
a: Vector2b: Vector2
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:447Opportunities._roundstatic funcA target in round numbers: to the nearest 50, at least 100.Link to this entrystatic func _round(n: float) -> int- Parameters
n: float
- Returns
int
scripts/sim/opportunities.gd:453Opportunities.attractions_ofstatic funcThe attractions townthas, as Data.HOUSES types.Link to this entrystatic func attractions_of(t: Town) -> Array- Parameters
t: Town
- Returns
Array
scripts/sim/opportunities.gd:458Opportunities.request_offuncThe request townthas open, or {}.Link to this entryfunc request_of(t: Town) -> Dictionary- Parameters
t: Town
- Returns
Dictionary
scripts/sim/opportunities.gd:463Opportunities.whatstatic funcWhat an offer asks, in a few words, as it reads mid-sentence: "coal from Ashford Mine to Elmford Power Station", "300 food for Elmford" (titlefor the start of one).Link to this entrystatic func what(o: Dictionary) -> String- Parameters
o: Dictionary
- Returns
String
- Calls
L.t,L.lower,Fmt.int_commas
scripts/sim/opportunities.gd:474Opportunities.titlestatic funcwhat, starting with a capital: a heading.Link to this entrystatic func title(o: Dictionary) -> String- Parameters
o: Dictionary
- Returns
String
scripts/sim/opportunities.gd:488Opportunities.reward_namestatic funcWhat meeting a request brings, in a few words ("a grant of $50,000").Link to this entrystatic func reward_name(reward: String) -> String- Parameters
reward: String
- Returns
String
scripts/sim/opportunities.gd:494Opportunities.placestatic funcWhere an offer is, for the map: the middle of its route (or the town), and a zoom that shows it.Link to this entrystatic func place(o: Dictionary) -> Array- Parameters
o: Dictionary
- Returns
Array
scripts/sim/opportunities.gd:505Opportunities._newsfuncworld: news the player can't act on (a rival's win, an offer that lapsed): Sim.post_world_news.Link to this entryfunc _news(sim: Sim, text: String, kind: String, o: Dictionary, world: bool = false) -> voidA new offer is the player's news: it is a chance for them.
- Parameters
sim: Simtext: Stringkind: Stringo: Dictionaryworld: bool = false
- Returns
void
scripts/sim/opportunities.gd:513Opportunities.to_dictfuncLink to this entryfunc to_dict() -> Dictionary- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/opportunities.gd:519Opportunities._refstatic funcAn industry or a town as a save keeps it: ["i" or "t", its id] ([] for none).Link to this entrystatic func _ref(place: Object) -> Array- Parameters
place: Object
- Returns
Array
scripts/sim/opportunities.gd:531Opportunities.restorefuncTake back the offers of a save (d: to_dict's) on mapm.Link to this entryfunc restore(d: Dictionary, m: WorldMap) -> voidAn offer about a place that isn't there is left out. A save from before there were any leaves none, and the seed Sim gave.
- Parameters
d: Dictionarym: WorldMap
- Returns
void
scripts/sim/opportunities.gd:537
Pathfinder
Pathfinder.MAX_EXPANSIONSconstLink to this entryconst MAX_EXPANSIONS := 400000This entry has no behavior notes yet.
Declared inscripts/sim/pathfinder.gd:8Pathfinder.findstatic funcReturns {"tiles": Array[Vector2i], "end_heading": int} or {} when there is no route.Link to this entrystatic func find(m: WorldMap, kind: String, start: Vector2i, heading: int, goals: Dictionary, allow_reverse_start: bool, allow_dead_end_uturn: bool, wired: bool = false, obey_signals: bool = true, avoid: Dictionary = {}) -> DictionaryA route that took a search also carries "box": every tile the search looked at lies inside it, so as long as the network doesn't change in there the same search gives the same route.
goals: Dictionary of goal tiles.heading-1 means any first move is allowed.wired: an electric train, which can only run under overhead wires.obey_signalsfalse: as if one-way signals let trains through both ways (to tell the player when they are what stands in the way).avoid: track blocks (ids of WorldMap.blocks) to keep off, where other trains are (RAIL-80).- Parameters
m: WorldMapkind: Stringstart: Vector2iheading: intgoals: Dictionaryallow_reverse_start: boolallow_dead_end_uturn: boolwired: bool = falseobey_signals: bool = trueavoid: Dictionary = {}
- Returns
Dictionary
- Calls
Const.opp
scripts/sim/pathfinder.gd:19Pathfinder._find_waterstatic funcThe way over water fromstartto the nearest ofgoals.Link to this entrystatic func _find_water(m: WorldMap, start: Vector2i, goals: Dictionary) -> DictionaryShips turn where they like and sail a straight course afterwards (Vehicle.water_course), so this is the eight-way way of
find_seawith each diagonal step split in two: a search over tiles rather than tiles and headings, with a heuristic that fits open water. Remembered on the map (see_sea_memo).- Parameters
m: WorldMapstart: Vector2igoals: Dictionary
- Returns
Dictionary
- Calls
BuildOps.dir_between
scripts/sim/pathfinder.gd:101Pathfinder.find_seastatic funcThe shortest way by water fromstarttogoal, moving between tiles in eight directions (diagonally only where both tiles beside the step are water too), or [] when there is none.Link to this entrystatic func find_sea(m: WorldMap, start: Vector2i, goal: Vector2i, max_len: float = INF) -> Array[Vector2i]Ships pull it straight afterwards (Vehicle.water_course): unlike the four-way route, it already runs close to the direct line, so the pulled course doesn't keep the corners of an L.
max_len: ways longer than this don't count, which keeps the search to the water near the straight line (an answer of "none" then comes quickly even on a big sea).- Parameters
m: WorldMapstart: Vector2igoal: Vector2imax_len: float = INF
- Returns
Array[Vector2i]
scripts/sim/pathfinder.gd:127Pathfinder._sea_memostatic funcA way over water found earlier underkeyfromstartto one ofends([] if none, if it no longer runs over open water, or if it answers another question whose key hashed the same).Link to this entrystatic func _sea_memo(m: WorldMap, key: int, start: Vector2i, ends: Dictionary) -> Array[Vector2i]Ships ask the same questions at every departure, and open water only changes with the ground (WorldMap.notify empties
sea_memothen).- Parameters
m: WorldMapkey: intstart: Vector2iends: Dictionary
- Returns
Array[Vector2i]
scripts/sim/pathfinder.gd:142Pathfinder._sea_rememberstatic funcLink to this entrystatic func _sea_remember(m: WorldMap, key: int, tiles: Array[Vector2i]) -> void- Parameters
m: WorldMapkey: inttiles: Array[Vector2i]
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/pathfinder.gd:155Pathfinder._find_seastatic funcfind_sea's search, to the nearest ofgoals.Link to this entrystatic func _find_sea(m: WorldMap, start: Vector2i, goals: Array, max_len: float) -> Array[Vector2i]- Parameters
m: WorldMapstart: Vector2igoals: Arraymax_len: float
- Returns
Array[Vector2i]
scripts/sim/pathfinder.gd:162Pathfinder._octilestatic funcThe eight-way distance over open water from (x, y) to the nearest ofgoals.Link to this entrystatic func _octile(x: int, y: int, goals: Array) -> float- Parameters
x: inty: intgoals: Array
- Returns
float
scripts/sim/pathfinder.gd:223Pathfinder._heuristicstatic funcLink to this entrystatic func _heuristic(t: Vector2i, goals: Array) -> float- Parameters
t: Vector2igoals: Array
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/pathfinder.gd:232Pathfinder._buildstatic funcLink to this entrystatic func _build(m: WorldMap, came: Dictionary, s: int, end_heading: int) -> Dictionary- Parameters
m: WorldMapcame: Dictionarys: intend_heading: int
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/pathfinder.gd:239Pathfinder._pushstatic funcLink to this entrystatic func _push(f: PackedFloat32Array, s: PackedInt32Array, pri: float, state: int) -> void- Parameters
f: PackedFloat32Arrays: PackedInt32Arraypri: floatstate: int
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/pathfinder.gd:250Pathfinder._popstatic funcLink to this entrystatic func _pop(f: PackedFloat32Array, s: PackedInt32Array) -> void- Parameters
f: PackedFloat32Arrays: PackedInt32Array
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/pathfinder.gd:263
Problems
Problems.SIGNAL_DAYSconsta train held at a red signal this longProblems.QUEUE_DAYSconsta vehicle held up in traffic, off a berth or holding this long (RAIL-26)Problems.NO_CALL_DAYSconsta station in use that no vehicle has called at for this longProblems.PILE_UPconstcargo piling up: at least this much waiting, more than comes in a month...Problems.PILE_RATINGconst...and the station's rating for it under this, so some of it gives upProblems.SERVICE_LATEconstoverdue a service: this many service intervals since the last oneProblems.STAFF_SHORTconstan industry with under this share of the staff it wantsProblems.HELD_UPconsta plant that needs every input holding this much while it waits for anotherProblems.REFRESHconstreal seconds between two looks (tick)Problems.TOLD_DAYSconsta vehicle that gets lost is announced at most once in this many daysProblems.rowsvarthe last look, most serious firstProblems.seriousvarrows of level 0Problems.revvargoes up when what is on the list (things and kinds) changesProblems._ofvarthing -> its most serious rowProblems._sigvarLink to this entryvar _sig: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/problems.gd:37Problems._waitvarLink to this entryvar _wait := 0.0This entry has no behavior notes yet.
Declared inscripts/sim/problems.gd:38Problems._lostvarids of the vehicles lost at the last lookProblems._toldvarvehicle id -> game day it was last announced as lostProblems._primedvarthe first look announces nothing: those were lost alreadyProblems._alertsvarLink to this entryvar _alerts: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/problems.gd:42Problems.tickfuncLook again if REFRESH seconds have passed since the last look.Link to this entryfunc tick(sim: Sim, delta: float) -> boolTrue when it did.
- Parameters
sim: Simdelta: float
- Returns
bool
scripts/sim/problems.gd:46Problems.refreshfuncLook again now.Link to this entryfunc refresh(sim: Sim) -> void- Parameters
sim: Sim
- Returns
void
scripts/sim/problems.gd:55Problems.hasfuncLink to this entryfunc has(thing: Object) -> bool- Parameters
thing: Object
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/problems.gd:83Problems.offuncThe most serious row aboutthing, or {}.Link to this entryfunc of(thing: Object) -> Dictionary- Parameters
thing: Object
- Returns
Dictionary
scripts/sim/problems.gd:88Problems.take_alertsfuncVehicles that got lost since the last call (at most once a month each): for a toast.Problems.liststatic funcEvery problem of the player's company, most serious first.Link to this entrystatic func list(sim: Sim) -> ArrayCheap enough for a few times a second with hundreds of vehicles: one pass over vehicles, stations, towns and the industries the stations reach, text only for the rows, and each platform measured once.
- Parameters
sim: Sim
- Returns
Array
scripts/sim/problems.gd:104Problems.vehicle_rowstatic funcThe worst problem of one vehicle, or {}.Link to this entrystatic func vehicle_row(sim: Sim, v: Vehicle) -> Dictionary- Parameters
sim: Simv: Vehicle
- Returns
Dictionary
scripts/sim/problems.gd:146Problems._station_rowsstatic funccallsis cargo -> the player's vehicles that take it on atst(see _note_calls).Link to this entrystatic func _station_rows(sim: Sim, st: Station, out: Array, calls: Dictionary) -> void- Parameters
sim: Simst: Stationout: Arraycalls: Dictionary
- Returns
void
- Calls
L.t
scripts/sim/problems.gd:173Problems._piling_rowstatic funcCargocpiling up atst, and what holds it back.Link to this entrystatic func _piling_row(st: Station, c: String, w: float, r: float, vs: Array) -> DictionaryWhen more waits than the biggest of the vehicles that load it there can take, each of them leaves full: a train wants more wagons (its fix opens that train, where Change cargo adds them), anything else more vehicles. When there is room on board they call too seldom. A player who sees a full train leave thinks it took everything, so the hint says how much it takes.
- Parameters
st: Stationc: Stringw: floatr: floatvs: Array
- Returns
Dictionary
scripts/sim/problems.gd:189Problems._note_callsstatic funcNote the stops wherevtakes cargo on (not unload-only or don't-load ones), incalls: Station -> cargo -> [Vehicle].Link to this entrystatic func _note_calls(v: Vehicle, calls: Dictionary) -> void- Parameters
v: Vehiclecalls: Dictionary
- Returns
void
scripts/sim/problems.gd:219Problems._short_platformsstatic funcNote the longest of the player's trains too long for each of its rail stops (as VehicleWindow.short_platform_text works it out), measuring each station once.Link to this entrystatic func _short_platforms(m: WorldMap, v: Vehicle, platforms: Dictionary, short: Dictionary) -> void- Parameters
m: WorldMapv: Vehicleplatforms: Dictionaryshort: Dictionary
- Returns
void
- Calls
Vehicle.tiles_long
scripts/sim/problems.gd:232Problems._tradesstatic funcWhetherstcarries a cargoindmakes or takes.Link to this entrystatic func _trades(ind: Industry, st: Station) -> bool- Parameters
ind: Industryst: Station
- Returns
bool
scripts/sim/problems.gd:246Problems._industry_rowsstatic funcLink to this entrystatic func _industry_rows(sim: Sim, ind: Industry, out: Array) -> void- Parameters
sim: Simind: Industryout: Array
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/problems.gd:253Problems._wherestatic funcWhere a vehicle is: the tile its front is on (or, before it has set off, its next stop).Link to this entrystatic func _where(v: Vehicle) -> Vector2- Parameters
v: Vehicle
- Returns
Vector2
scripts/sim/problems.gd:291Problems._rowstatic funcLink to this entrystatic func _row(kind: String, level: int, obj: Object, pos: Vector2, text: String, fix: String) -> Dictionary- Parameters
kind: Stringlevel: intobj: Objectpos: Vector2text: Stringfix: String
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/problems.gd:298Problems._beforestatic funcMost serious first, then by name.Link to this entrystatic func _before(a: Dictionary, b: Dictionary) -> bool- Parameters
a: Dictionaryb: Dictionary
- Returns
bool
scripts/sim/problems.gd:303
RouteBuilder
RouteBuilder.MAX_EXPANSIONSconstLink to this entryconst MAX_EXPANSIONS := 8000This entry has no behavior notes yet.
Declared inscripts/sim/route_builder.gd:20RouteBuilder.SHAPE_EXPANSIONSconstThe second pass's share of the search budget, at the most.RouteBuilder.REACHconstHow far from the rough path (in tiles) the second pass may stray.RouteBuilder.DETOURconstA rough path up to this much longer than the straight distance had nothing much in its way.RouteBuilder.TURNconstWhat the shape of the line costs, in tiles of track: the first turning tile after straight trackRouteBuilder.LONE_BENDconst...when straight track follows it: a 90-degree bend (2.0 in all)RouteBuilder.SECOND_TURNconst...when it turns back on the next tile: the start of a diagonal (1.5)RouteBuilder.SIDESTEPconsta diagonal that ends after those two tiles: a one-tile sidestep (4.0)RouteBuilder.RUNconsteach further tile of a diagonal: it is that much shorter to driveRouteBuilder.HAIRPINconsttwo turns the same way on neighbouring tilesRouteBuilder.CAREFULconstThe second pass first looks for the best line with this share of its budget; if that runs out it settles for a good one, weighting the distance left by HASTY.RouteBuilder.HASTYconstLink to this entryconst HASTY := 2.0This entry has no behavior notes yet.
Declared inscripts/sim/route_builder.gd:37RouteBuilder.TURN_INDEXconst(way out - way in) & 3 -> straight on, right, leftLink to this entryconst TURN_INDEX: Array[int] = [0, 1, 0, 2]Declared inscripts/sim/route_builder.gd:38RouteBuilder.last_expansionsstatic varstates looked at by the last search (benchmark tooling)RouteBuilder.last_refinedstatic varwhether the last search's second pass finished (benchmark tooling)RouteBuilder.log_tostatic varan Array: every search adds itsdescribeentry (benchmark tooling)RouteBuilder.last_crossingsstatic varThe bridges and tunnels on the path the last search returned, in order along it: [{"type": "bridge" | "tunnel", "from", "to": the tiles either side (a bridge's ramps, the tiles before and after a tunnel's mouths), "between": the tiles in between (spans / tunnel), "dir", "a", "b", "style": what Sim.build_crossing takes}].Link to this entrystatic var last_crossings: Array = []Empty when
Declared injumpswas.scripts/sim/route_builder.gd:46RouteBuilder.CROSSINGconstWhat a crossing costs on top of its tiles, in tiles of track: short detours still win.Link to this entryconst CROSSING := 8.0(The first pass leans towards the goal, so a tile sideways looks dearer to it than it is: this has to cover that too.)
Declared inscripts/sim/route_builder.gd:50RouteBuilder.findstatic funcPath of tiles fromstarttogoal(both included).Link to this entrystatic func find(m: WorldMap, kind: String, start: Vector2i, start_dir: int, goal: Vector2i, goal_dir: int, reserved: Dictionary = {}, max_expansions: int = 0, jumps: Dictionary = {}) -> Array[Vector2i]start_dir: direction of travel when enteringstart(-1: any).goal_dir: direction the path must leavegoalin (-1: any).reservedtiles are never used. Returns [] if none found.jumps(jumps_for): the bridges and tunnels it may build; {} for none. The path then may not be buildable by Sim.build_line alone: see last_crossings and Sim.build_route.- Parameters
m: WorldMapkind: Stringstart: Vector2istart_dir: intgoal: Vector2igoal_dir: intreserved: Dictionary = {}max_expansions: int = 0jumps: Dictionary = {}
- Returns
Array[Vector2i]
scripts/sim/route_builder.gd:58RouteBuilder.describestatic funcThe shape of a path: how many tiles turn, and how those turns group.Link to this entrystatic func describe(path: Array[Vector2i], start_dir: int = -1, goal_dir: int = -1) -> DictionaryA run of turning tiles is a bend one turn on its own, a sidestep a left and a right (or right and left) with straight track either side: the line jumps one tile sideways, which shows as a wobble, a diagonal three or more alternating turns, drawn and driven as one straight 45-degree line, a hairpin two turns the same way on neighbouring tiles.
start_dir/goal_dir: the directions the path is entered and left in, when known.- Parameters
path: Array[Vector2i]start_dir: int = -1goal_dir: int = -1
- Returns
Dictionary
- Calls
BuildOps.dir_between
scripts/sim/route_builder.gd:104RouteBuilder._roughstatic funcThe first pass.Link to this entrystatic func _rough(m: WorldMap, kind: String, start: Vector2i, start_dir: int, goal: Vector2i, goal_dir: int, reserved: Dictionary, budget: int, jumps: Dictionary = {}, out_crossings: Array = []) -> Array[Vector2i]With
jumps, the bridges and tunnels on the path found go intoout_crossings.- Parameters
m: WorldMapkind: Stringstart: Vector2istart_dir: intgoal: Vector2igoal_dir: intreserved: Dictionarybudget: intjumps: Dictionary = {}out_crossings: Array = []
- Returns
Array[Vector2i]
scripts/sim/route_builder.gd:140RouteBuilder._refinestatic funcThe second pass: the best-shaped path throughcorridor(see _corridor).Link to this entrystatic func _refine(m: WorldMap, kind: String, rough: Array[Vector2i], corridor: Dictionary, start_dir: int, goal_dir: int, reserved: Dictionary, budget: int, weight: float) -> Array[Vector2i]A* over (tile, entry direction, shape), where
shaperemembers the turning tiles just behind: 0 straight track 1, 2 one turn so far, to the right / to the left 3, 4 two alternating turns, the last to the right / left 5, 6 three or more: a diagonal Open ground costs the same everywhere here (the rough pass has weighed up trees and slopes), which is what lets the search run straight to the goal.weight: 1 for the best line, more to settle sooner for a good one. Returns [] whenbudgetruns out.- Parameters
m: WorldMapkind: Stringrough: Array[Vector2i]corridor: Dictionarystart_dir: intgoal_dir: intreserved: Dictionarybudget: intweight: float
- Returns
Array[Vector2i]
scripts/sim/route_builder.gd:222RouteBuilder._corridorstatic funcThe tiles the second pass may use: every tile within REACH of the rough path (and, where little was in its way, of the two straight-and-diagonal lines between its ends), each with its distance to the goal through the corridor, so the search is drawn round a lake the way the rough path went.Link to this entrystatic func _corridor(m: WorldMap, rough: Array[Vector2i]) -> Dictionary- Parameters
m: WorldMaprough: Array[Vector2i]
- Returns
Dictionary
scripts/sim/route_builder.gd:336RouteBuilder.jumps_forstatic funcWhat find() may use to cross water and hills inyear: every bridge style there is by then, cheapest first ("unit": a span tile's price in tiles of plainkind), and tunnels (likewise).Link to this entrystatic func jumps_for(kind: String, year: int) -> DictionaryA caller may add "crossing": what each crossing costs on top of its tiles (CROSSING if not).
- Parameters
kind: Stringyear: int
- Returns
Dictionary
scripts/sim/route_builder.gd:399RouteBuilder._jumpstatic funcA bridge or tunnel from tiletheadingd(see last_crossings for its keys, plus "cost" in tiles of track), or {} when there is none to build.Link to this entrystatic func _jump(m: WorldMap, kind: String, t: Vector2i, d: int, jumps: Dictionary, reserved: Dictionary, cache: Dictionary) -> DictionaryA bridge is tried where the tile ahead is water or takes no piece, a tunnel where the ground ahead rises straight up the way it goes.
- Parameters
m: WorldMapkind: Stringt: Vector2id: intjumps: Dictionaryreserved: Dictionarycache: Dictionary
- Returns
Dictionary
- Calls
WorldMap.axis_of
scripts/sim/route_builder.gd:413RouteBuilder._risesstatic funcWhether the ground on tilenclimbs on its way across it headingd.Link to this entrystatic func _rises(m: WorldMap, n: Vector2i, d: int) -> bool- Parameters
m: WorldMapn: Vector2id: int
- Returns
bool
scripts/sim/route_builder.gd:447RouteBuilder._bridgestatic funcThe shortest bridge from ramptheadingdthat the player's bridge tool would allow, in the cheapest style long enough for it.Link to this entrystatic func _bridge(m: WorldMap, kind: String, t: Vector2i, d: int, jumps: Dictionary, reserved: Dictionary) -> Dictionary- Parameters
m: WorldMapkind: Stringt: Vector2id: intjumps: Dictionaryreserved: Dictionary
- Returns
Dictionary
scripts/sim/route_builder.gd:455RouteBuilder._tunnelstatic funcThe tunnel the player's tunnel tool would dig from the hillside just ahead oft(headingd): the line goes fromtinto it and comes out on the tile beyond its far mouth.Link to this entrystatic func _tunnel(m: WorldMap, kind: String, t: Vector2i, d: int, jumps: Dictionary, reserved: Dictionary) -> Dictionary- Parameters
m: WorldMapkind: Stringt: Vector2id: intjumps: Dictionaryreserved: Dictionary
- Returns
Dictionary
scripts/sim/route_builder.gd:494RouteBuilder._build_jumpedstatic func_build for a first pass that jumped: the bridges' spans and the tunnels' tiles go into the path where they are, and the crossings intoout_crossings.Link to this entrystatic func _build_jumped(m: WorldMap, came: Dictionary, s: int, jumped: Dictionary, out_crossings: Array) -> Array[Vector2i]- Parameters
m: WorldMapcame: Dictionarys: intjumped: Dictionaryout_crossings: Array
- Returns
Array[Vector2i]
scripts/sim/route_builder.gd:539RouteBuilder._refine_betweenstatic funcThe second pass for a path with crossings: each stretch of land between them is shaped on its own (a stretch it can't improve on in its share of the budget stays as the first pass laid it), leaving every bridge and tunnel where it is and entered and left straight on.Link to this entrystatic func _refine_between(m: WorldMap, kind: String, path: Array[Vector2i], crossings: Array, start_dir: int, goal_dir: int, reserved: Dictionary, budget: int) -> Array[Vector2i]- Parameters
m: WorldMapkind: Stringpath: Array[Vector2i]crossings: Arraystart_dir: intgoal_dir: intreserved: Dictionarybudget: int
- Returns
Array[Vector2i]
scripts/sim/route_builder.gd:562RouteBuilder._manhattanstatic funcLink to this entrystatic func _manhattan(a: Vector2i, b: Vector2i) -> float- Parameters
a: Vector2ib: Vector2i
- Returns
float
This entry has no behavior notes yet.
Declared inscripts/sim/route_builder.gd:599RouteBuilder._tile_coststatic funcCost of putting a piece withbitson tilet, or -1 when it can't be built.Link to this entrystatic func _tile_cost(m: WorldMap, kind: String, t: Vector2i, bits: int, fine: bool = false) -> floatfine: for the second pass, which doesn't tell trees and slopes from open ground.- Parameters
m: WorldMapkind: Stringt: Vector2ibits: intfine: bool = false
- Returns
float
scripts/sim/route_builder.gd:605RouteBuilder._buildstatic funcLink to this entrystatic func _build(m: WorldMap, came: Dictionary, s: int, per_tile: int) -> Array[Vector2i]- Parameters
m: WorldMapcame: Dictionarys: intper_tile: int
- Returns
Array[Vector2i]
This entry has no behavior notes yet.
Declared inscripts/sim/route_builder.gd:645
SaveGame
SaveGame.VERSIONconstLink to this entryconst VERSION := 1This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:6SaveGame.DIRconstLink to this entryconst DIR := "user://saves"This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:7SaveGame.list_savesstatic funcLink to this entrystatic func list_saves() -> Array- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:10SaveGame.delete_savestatic funcLink to this entrystatic func delete_save(path: String) -> void- Parameters
path: String
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:29SaveGame._vstatic funcLink to this entrystatic func _v(v: Vector2i) -> Array- Parameters
v: Vector2i
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:36SaveGame._vistatic funcLink to this entrystatic func _vi(a: Array) -> Vector2i- Parameters
a: Array
- Returns
Vector2i
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:40SaveGame._b64static funcLink to this entrystatic func _b64(p: PackedByteArray) -> String- Parameters
p: PackedByteArray
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:44SaveGame._unb64static funcLink to this entrystatic func _unb64(s: String) -> PackedByteArray- Parameters
s: String
- Returns
PackedByteArray
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:48SaveGame.savestatic funcLink to this entrystatic func save(sim: Sim, path: String) -> Error- Parameters
sim: Simpath: String
- Returns
Error
- Calls
Mods.save_state,Town.size_of
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:54SaveGame.load_simstatic funcLink to this entrystatic func load_sim(path: String) -> Sim- Parameters
path: String
- Returns
Sim
- Calls
Data.era_index,Town.restore_annexes,Town.enlarge_old_buildings,Town.recount_all,WorldGen.add_rig_docks,Data.has_model,Data.reliability,Vehicle.make_seg,Vehicle.free_seg,AiPlayer.from_dict,Goals.from_dict,Goals.caught_up,Mods.load_state,Mods.hook
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:177SaveGame._order_outstatic funcAn order as saved: [station id, full, then each of Vehicle.ORDER_FLAGS].Link to this entrystatic func _order_out(o: Dictionary) -> Array- Parameters
o: Dictionary
- Returns
Array
scripts/sim/save_game.gd:532SaveGame._order_instatic funcAn order back fromrow(see _order_out), at stationst.Link to this entrystatic func _order_in(row: Array, st: Station) -> DictionaryFlags an older save didn't have are off.
- Parameters
row: Arrayst: Station
- Returns
Dictionary
scripts/sim/save_game.gd:540SaveGame._floatsstatic funcLink to this entrystatic func _floats(src: Dictionary) -> Dictionary- Parameters
src: Dictionary
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:547SaveGame._intsstatic funcLink to this entrystatic func _ints(d: Dictionary) -> Dictionary- Parameters
d: Dictionary
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:554SaveGame._pairsstatic funccargo -> [units, $]Link to this entrystatic func _pairs(d: Dictionary) -> Dictionary- Parameters
d: Dictionary
- Returns
Dictionary
scripts/sim/save_game.gd:562SaveGame._stat_monthstatic funcLink to this entrystatic func _stat_month(mo: Dictionary) -> Dictionary- Parameters
mo: Dictionary
- Returns
Dictionary
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:569SaveGame._course_outstatic funcA ship's course (see Vehicle.water_course) as [x, y, turn, x, y, turn, ...] over its route.Link to this entrystatic func _course_out(v: Vehicle) -> Array- Parameters
v: Vehicle
- Returns
Array
scripts/sim/save_game.gd:585SaveGame._course_instatic funcLink to this entrystatic func _course_in(v: Vehicle, a: Array) -> void- Parameters
v: Vehiclea: Array
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/save_game.gd:596
SignalTraps
SignalTraps._memo_keystatic varLink to this entrystatic var _memo_key := []This entry has no behavior notes yet.
Declared inscripts/sim/signal_traps.gd:17SignalTraps._memostatic varLink to this entrystatic var _memo: Array = []This entry has no behavior notes yet.
Declared inscripts/sim/signal_traps.gd:18SignalTraps.findstatic funcThe stations ofwhothat one-way signals shut: [{"station", "way": "out" | "in", "signal"}], one per station ("out" when both are true), the order of map.stations.Link to this entrystatic func find(sim: Sim, who: Company, over: Dictionary = {}) -> Arraysignalis the tile of the first signal in the way, seen from the station.over({tile: state}) stands in for those tiles' signals (see WorldMap.signals), to ask what a click would do; without it the answer is remembered until the rail network, the stations or the depots change.- Parameters
sim: Simwho: Companyover: Dictionary = {}
- Returns
Array
scripts/sim/signal_traps.gd:26SignalTraps.after_clickstatic funcWhat setting the signal onttostatewould change: {"shut": [...], "freed": [...]}, each in find's form, "shut" for stations it would shut that are open now and "freed" for those it would open again.Link to this entrystatic func after_click(sim: Sim, who: Company, t: Vector2i, state: int) -> DictionaryA station that stays shut (say, the far end of a line made one-way) isn't news.
- Parameters
sim: Simwho: Companyt: Vector2istate: int
- Returns
Dictionary
scripts/sim/signal_traps.gd:64SignalTraps.textstatic funcOne of find's rows in words.Link to this entrystatic func text(r: Dictionary, when: String) -> Stringwhen: "careful" (what the click under the mouse would do), "now" (what the click just did), "freed" (what the click would put right) or "problem" (a Problems row, which names the station already).- Parameters
r: Dictionarywhen: String
- Returns
String
- Calls
L.t
scripts/sim/signal_traps.gd:73SignalTraps.blockerstatic funcThe tile of the one-way signal that keeps trains from getting betweentilesand any of thegoalstiles - out oftilesor, withinward, into them - or (-1, -1) when they can, or when there is no track between them at all.Link to this entrystatic func blocker(m: WorldMap, tiles: Dictionary, goals: Dictionary, inward: bool, over: Dictionary = {}) -> Vector2i- Parameters
m: WorldMaptiles: Dictionarygoals: Dictionaryinward: boolover: Dictionary = {}
- Returns
Vector2i
scripts/sim/signal_traps.gd:92SignalTraps._passesstatic funcWhether a train headingh(or,inward, heading the other way) may pass tilen's signal.Link to this entrystatic func _passes(m: WorldMap, n: Vector2i, h: int, inward: bool, over: Dictionary) -> bool- Parameters
m: WorldMapn: Vector2ih: intinward: boolover: Dictionary
- Returns
bool
- Calls
Const.opp
scripts/sim/signal_traps.gd:104SignalTraps._floodstatic funcFlood the rail network outward fromtilesuntil one ofgoalsis reached.Link to this entrystatic func _flood(m: WorldMap, tiles: Dictionary, goals: Dictionary, obey: bool, inward: bool, over: Dictionary) -> ArrayReturns the steps from the start to that goal, [{"t": tile, "h": heading on entering it}], or [] when none is reached.
obeyfalse lets trains through one-way signals both ways.- Parameters
m: WorldMaptiles: Dictionarygoals: Dictionaryobey: boolinward: boolover: Dictionary
- Returns
Array
- Calls
Const.opp
scripts/sim/signal_traps.gd:112SignalTraps._stepstatic funcLink to this entrystatic func _step(m: WorldMap, tile: Vector2i, d: int, bits: int, from: int, obey: bool, inward: bool, over: Dictionary, came: Dictionary, queue: PackedInt32Array) -> void- Parameters
m: WorldMaptile: Vector2id: intbits: intfrom: intobey: boolinward: boolover: Dictionarycame: Dictionaryqueue: PackedInt32Array
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/signal_traps.gd:142SignalTraps._minusstatic funcLink to this entrystatic func _minus(a: Array, b: Array) -> Array- Parameters
a: Arrayb: Array
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/signal_traps.gd:156
TerrainGen
TerrainGen.generatestatic funcTerrain only (no towns or industries).Link to this entrystatic func generate(m: WorldMap, seed_value: int) -> voidWorldGen.generate builds a full world.
- Parameters
m: WorldMapseed_value: int
- Returns
void
scripts/sim/terrain_gen.gd:7TerrainGen.heights_from_imagestatic funcHeights from a greyscale image (white = high, black = sea), like OpenTTD heightmaps.Link to this entrystatic func heights_from_image(m: WorldMap, path: String) -> bool- Parameters
m: WorldMappath: String
- Returns
bool
scripts/sim/terrain_gen.gd:14TerrainGen.generate_heightsstatic funcwater: sea level 0 (low) ..Link to this entrystatic func generate_heights(m: WorldMap, seed_value: int, water: int = 1, rough: int = 2, sample_scale: float = 1.0) -> void3 (islands). rough: 0 flat .. 3 mountainous. sample_scale stretches the noise so a small preview map shows the same world as a big one.
- Parameters
m: WorldMapseed_value: intwater: int = 1rough: int = 2sample_scale: float = 1.0
- Returns
void
scripts/sim/terrain_gen.gd:30TerrainGen.enforce_slopesstatic funcLower corners until every pair of edge-adjacent corners differs by at most one level.Link to this entrystatic func enforce_slopes(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/terrain_gen.gd:73TerrainGen.classifystatic funcTerrain types (from heights) and tree cover.Link to this entrystatic func classify(m: WorldMap, seed_value: int) -> void- Parameters
m: WorldMapseed_value: int
- Returns
void
scripts/sim/terrain_gen.gd:100TerrainGen.terrain_typestatic funcLink to this entrystatic func terrain_type(m: WorldMap, x: int, y: int) -> int- Parameters
m: WorldMapx: inty: int
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/terrain_gen.gd:123TerrainGen.classify_tilestatic funcRe-derive one tile's terrain after its corners changed; trees only survive on grass.Link to this entrystatic func classify_tile(m: WorldMap, x: int, y: int) -> void- Parameters
m: WorldMapx: inty: int
- Returns
void
scripts/sim/terrain_gen.gd:138TerrainGen._near_waterstatic funcLink to this entrystatic func _near_water(m: WorldMap, x: int, y: int) -> bool- Parameters
m: WorldMapx: inty: int
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/terrain_gen.gd:145
UndoStack
UndoStack.MAX_STEPSconstLink to this entryconst MAX_STEPS := 20This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:23UndoStack.MAX_AGE_DAYSconstLink to this entryconst MAX_AGE_DAYS := 60.0This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:24UndoStack.stepsvaroldest firstUndoStack.enabledvarLink to this entryvar enabled := trueThis entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:30UndoStack.lostvarThe step that was given up last, for the button's tooltip: {"what", "why"}.UndoStack.clearfuncLink to this entryfunc clear() -> void- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:35UndoStack.sizefuncLink to this entryfunc size() -> int- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:40UndoStack._tilestatic funcLink to this entrystatic func _tile(m: WorldMap, t: Vector2i) -> Array- Parameters
m: WorldMapt: Vector2i
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:46UndoStack._putstatic funcLink to this entrystatic func _put(m: WorldMap, t: Vector2i, s: Array) -> void- Parameters
m: WorldMapt: Vector2is: Array
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:52UndoStack._stationstatic funcLink to this entrystatic func _station(m: WorldMap, st: Station) -> Array- Parameters
m: WorldMapst: Station
- Returns
Array
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:83UndoStack._orders_tostatic funcLink to this entrystatic func _orders_to(sim: Sim, st: Station) -> int- Parameters
sim: Simst: Station
- Returns
int
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:89UndoStack.bulldoze_tilesstatic funcEvery tile a bulldoze ofrectmay change: the area and its edge (a depot lets go of the road in front of it), the whole of each bridge or tunnel it reaches and of each airfield.Link to this entrystatic func bulldoze_tiles(m: WorldMap, rect: Rect2i) -> Array- Parameters
m: WorldMaprect: Rect2i
- Returns
Array
scripts/sim/undo.gd:100UndoStack.terraform_tilesstatic funcEvery tile raising or loweringcornersmay change (see BuildOps.apply_terraform).Link to this entrystatic func terraform_tiles(m: WorldMap, corners: Array) -> Array- Parameters
m: WorldMapcorners: Array
- Returns
Array
scripts/sim/undo.gd:124UndoStack.beginfuncCall before an action changes anything.Link to this entryfunc begin(sim: Sim, who: Company, tiles: Array, opt: Dictionary = {}) -> Dictionarytiles: every tile it may touch (more is fine: tiles that end up unchanged are dropped).opt: "corners" (corner heights it may change), "stations" (stations it may change that don't stand ontiles), "ratings" (it may move council ratings). Returns whatcommitneeds; {} when the action isn't the player's (nothing is recorded then).- Parameters
sim: Simwho: Companytiles: Arrayopt: Dictionary = {}
- Returns
Dictionary
scripts/sim/undo.gd:142UndoStack._log_ofstatic funcLink to this entrystatic func _log_of(t: Town, cid: int) -> Variant- Parameters
t: Towncid: int
- Returns
Variant
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:171UndoStack.commitfuncCall when the action is done and paid for.Link to this entryfunc commit(sim: Sim, u: Dictionary, kind: String, info: Dictionary = {}) -> voidkindandinfo("n": how many tiles, "name": a station's or town's name, "category": the ledger line it was paid from) only describe it.- Parameters
sim: Simu: Dictionarykind: Stringinfo: Dictionary = {}
- Returns
void
scripts/sim/undo.gd:177UndoStack._monthstatic funcLink to this entrystatic func _month(sim: Sim) -> Vector2i- Parameters
sim: Sim
- Returns
Vector2i
- Calls
Calendar.from_day
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:237UndoStack.describestatic funcA step in words: "12 tiles of rail", "Ashford North", "demolition of 3 tiles".Link to this entrystatic func describe(step: Dictionary) -> String- Parameters
step: Dictionary
- Returns
String
scripts/sim/undo.gd:245UndoStack._problemfuncWhy the newest step can't be undone now: [reason, given up for good].Link to this entryfunc _problem(sim: Sim, step: Dictionary) -> Array["", false] when it can.
- Parameters
sim: Simstep: Dictionary
- Returns
Array
- Calls
L.t
scripts/sim/undo.gd:266UndoStack._vehicle_onfuncLink to this entryfunc _vehicle_on(sim: Sim, step: Dictionary) -> bool- Parameters
sim: Simstep: Dictionary
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:299UndoStack._block_heldfuncWith realistic blocking: whether a train holds (stands in, or has been let into) a block of track that undoing the step would take away.Link to this entryfunc _block_held(sim: Sim, step: Dictionary) -> bool- Parameters
sim: Simstep: Dictionary
- Returns
bool
scripts/sim/undo.gd:320UndoStack.statusfuncFor the Undo button: {"can", "what", "money" (what undoing pays back), "tip"}.Link to this entryfunc status(sim: Sim) -> DictionaryA step that can never be undone again is dropped here, with everything older.
- Parameters
sim: Sim
- Returns
Dictionary
scripts/sim/undo.gd:340UndoStack.undofuncUndo the newest step.Link to this entryfunc undo(sim: Sim) -> DictionaryReturns {"ok", "text" (what to tell the player), "what", "money"}.
- Parameters
sim: Sim
- Returns
Dictionary
scripts/sim/undo.gd:362UndoStack._revertfuncLink to this entryfunc _revert(sim: Sim, step: Dictionary) -> void- Parameters
sim: Simstep: Dictionary
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/undo.gd:376
WorldGen
WorldGen.DENSITYconstOptions: "water" 0..3 (sea level), "rough" 0..3 (terrain), "towns" / "industries" 0..3 (density), "heightmap" (path to a greyscale image, OpenTTD-style).WorldGen.INDUSTRY_AREAconstTiles of land (or sea) that hold one full set of Data.INDUSTRY counts at normal density: 24 industries here is about one per 600 tiles.WorldGen.FEED_MINconstHow far (in tiles) a processing industry is sited from the producers that feed it: far enough for a route to pay, near enough for an early train or lorry.WorldGen.FEED_MAXconstLink to this entryconst FEED_MAX := 50.0This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:15WorldGen.SAME_APART_MAXconstUpper bound on how far apart two industries of one type are kept (see _place_industries).WorldGen.SPREAD_TRIESconstUsable sites weighed for each industry placed at random; the one farthest from its own kind wins.WorldGen.TOWN_SITE_TOWNSconstAn industry that stands by a town (a printing works) looks around the biggest few towns, up to TOWN_SITE_MAX tiles from the centre.WorldGen.TOWN_SITE_MAXconstLink to this entryconst TOWN_SITE_MAX := 16.0This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:23WorldGen.TOWN_INDUSTRY_MINconstHow far (in tiles) a town centre is founded from an industry's centre, so the town starts with room to grow before it meets the ground kept clear around the industry (BuildOps.INDUSTRY_GAP).WorldGen.TOWN_INDUSTRY_FALLBACKconstLink to this entryconst TOWN_INDUSTRY_FALLBACK := 10.0This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:27WorldGen.TOWN_EXTRAconstLink to this entryconst TOWN_EXTRAThis entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:28WorldGen.generatestatic funcLink to this entrystatic func generate(m: WorldMap, seed_value: int, opts: Dictionary = {}) -> void- Parameters
m: WorldMapseed_value: intopts: Dictionary = {}
- Returns
void
- Calls
Data.era_index,L.t,TerrainGen.heights_from_image,TerrainGen.generate_heights,TerrainGen.classify
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:31WorldGen.add_rig_docksstatic funcEvery industry out at sea gets its own open dock (see BuildOps.add_rig_dock).Link to this entrystatic func add_rig_docks(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
scripts/sim/world_gen.gd:57WorldGen._place_industriesstatic funcLink to this entrystatic func _place_industries(m: WorldMap, rng: RandomNumberGenerator, density: float = 1.0) -> void- Parameters
m: WorldMaprng: RandomNumberGeneratordensity: float = 1.0
- Returns
void
- Calls
Data.opens,Data.accepts
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:65WorldGen._place_town_industriesstatic funcThe kinds that stand by a town (a printing works, RAIL-31), once the towns are founded: on ground the towns have left clear, levelled like an industry opening during the game.Link to this entrystatic func _place_town_industries(m: WorldMap, rng: RandomNumberGenerator, density: float) -> void- Parameters
m: WorldMaprng: RandomNumberGeneratordensity: float
- Returns
void
- Calls
Data.opens
scripts/sim/world_gen.gd:84WorldGen._place_kindstatic funcPut down a new map's industries oftype(see type_count) and return them.Link to this entrystatic func _place_kind(m: WorldMap, rng: RandomNumberGenerator, room: Vector2i, type: String, density: float) -> Array- Parameters
m: WorldMaprng: RandomNumberGeneratorroom: Vector2itype: Stringdensity: float
- Returns
Array
scripts/sim/world_gen.gd:93WorldGen.industry_roomstatic funcThe room there is to build industries in: x land tiles (for industries ashore), y open water (for those at sea).Link to this entrystatic func industry_room(m: WorldMap) -> Vector2iSampled every other tile, which is plenty for a head count.
- Parameters
m: WorldMap
- Returns
Vector2i
scripts/sim/world_gen.gd:110WorldGen.type_countstatic funcHow many industries oftypea map withroom(see industry_room) gets atdensity: counts follow the room there is to build in, and every type gets at least one.Link to this entrystatic func type_count(room: Vector2i, type: String, density: float) -> int- Parameters
room: Vector2itype: Stringdensity: float
- Returns
int
scripts/sim/world_gen.gd:124WorldGen.spacingstatic funcHow far apartcountindustries oftypeare kept.Link to this entrystatic func spacing(room: Vector2i, type: String, count: int) -> floatTwo of a kind side by side look like a mistake and split one area's trade between them: keep each a fair share of its own type's room apart (half the even spacing, capped so a rare processor can still sit near its feeders).
- Parameters
room: Vector2itype: Stringcount: int
- Returns
float
scripts/sim/world_gen.gd:132WorldGen.find_sitestatic funcWhere a new industry oftypegoes: near producers inunserved(see unserved_feeders) that have nobody to take their cargo, if any; else near producers none of its own kind is near yet (a paper mill by forests that already have a sawmill); else anywhere, as far from its own kind as it can.Link to this entrystatic func find_site(m: WorldMap, rng: RandomNumberGenerator, type: String, apart: float, unserved: Array) -> Vector3iA plant that needs every input (Data.INDUSTRY "needs_all") goes where it reaches makers of as many of its inputs as it can. A kind that stands by a town (a printing works) goes at the edge of one of the biggest. (x, y) is the north-west tile and z the level it stands at; z is -1 when no usable site turned up.
- Parameters
m: WorldMaprng: RandomNumberGeneratortype: Stringapart: floatunserved: Array
- Returns
Vector3i
scripts/sim/world_gen.gd:144WorldGen.put_industrystatic funcPut an industry oftypewith ididonspot(from find_site): the ground under it flattened to its level (the corners only: the caller works out the rest), added to the map's list and its tiles.Link to this entrystatic func put_industry(m: WorldMap, id: int, type: String, spot: Vector3i) -> IndustryReturns it.
- Parameters
m: WorldMapid: inttype: Stringspot: Vector3i
- Returns
Industry
scripts/sim/world_gen.gd:162WorldGen._site_levelstatic funcThe level asitekind of industry would stand at with its north-west tile on (x, y): 0 at sea, the flattened ground level ashore, -1 where it can't go.Link to this entrystatic func _site_level(m: WorldMap, site: String, x: int, y: int) -> int- Parameters
m: WorldMapsite: Stringx: inty: int
- Returns
int
scripts/sim/world_gen.gd:178WorldGen.unserved_feedersstatic funcIndustries making somethingtypeaccepts that have no taker within FEED_MAX tiles yet.Link to this entrystatic func unserved_feeders(m: WorldMap, type: String) -> ArrayFor a plant that needs every input, all of them, taken or not: it can't work on one alone.
- Parameters
m: WorldMaptype: String
- Returns
Array
- Calls
Data.accepts
scripts/sim/world_gen.gd:189WorldGen._feeders_of_ownstatic funcIndustries making somethingtypeaccepts that have no industry oftypewithin FEED_MAX tiles: for a second customer of a cargo (a paper mill, where the forests already have a sawmill).Link to this entrystatic func _feeders_of_own(m: WorldMap, type: String) -> Array- Parameters
m: WorldMaptype: String
- Returns
Array
- Calls
Data.accepts
scripts/sim/world_gen.gd:225WorldGen._site_near_feedersstatic funcA site FEED_MIN..FEED_MAX tiles from a producer inunservedand at leastaparttiles from any othertype: the best of several usable ones, counting how many such producers each would serve (for a plant that needs every input, how many of its inputs they make), then how far it keeps from its own kind.Link to this entrystatic func _site_near_feeders(m: WorldMap, rng: RandomNumberGenerator, site: String, type: String, apart: float, unserved: Array) -> Vector3iz is -1 when none turned up.
- Parameters
m: WorldMaprng: RandomNumberGeneratorsite: Stringtype: Stringapart: floatunserved: Array
- Returns
Vector3i
- Calls
Data.accepts
scripts/sim/world_gen.gd:239WorldGen._site_spreadstatic funcA usable site anywhere on the map: of SPREAD_TRIES random ones, the farthest from other industries oftype(best-candidate sampling, which spreads them out without a hard rule that could leave one unplaced).Link to this entrystatic func _site_spread(m: WorldMap, rng: RandomNumberGenerator, site: String, type: String) -> Vector3iz is -1 when no usable site turned up.
- Parameters
m: WorldMaprng: RandomNumberGeneratorsite: Stringtype: String
- Returns
Vector3i
scripts/sim/world_gen.gd:286WorldGen._site_by_townstatic funcA site by one of the TOWN_SITE_TOWNS biggest towns, at leastaparttiles from any othertype: the usable one nearest the centre of the biggest town that has any within TOWN_SITE_MAX tiles, so it stands at the edge of town or in a gap inside it.Link to this entrystatic func _site_by_town(m: WorldMap, rng: RandomNumberGenerator, type: String, apart: float) -> Vector3iz is -1 when none turned up.
- Parameters
m: WorldMaprng: RandomNumberGeneratortype: Stringapart: float
- Returns
Vector3i
scripts/sim/world_gen.gd:309WorldGen.level_groundstatic funcThe ground of an industry put down where the land is already shaped (one opening during the game, or one by a town once the towns are founded): no trees on it or around it, its corners at the level put_industry flattened them to, and its tiles looked at again.Link to this entrystatic func level_ground(m: WorldMap, ind: Industry) -> Rect2iReturns the tiles that changed.
- Parameters
m: WorldMapind: Industry
- Returns
Rect2i
scripts/sim/world_gen.gd:334WorldGen._gap_to_kindstatic funcDistance fromcto the nearest industry oftype, INF when there is none yet.Link to this entrystatic func _gap_to_kind(m: WorldMap, type: String, c: Vector2) -> float- Parameters
m: WorldMaptype: Stringc: Vector2
- Returns
float
scripts/sim/world_gen.gd:348WorldGen._sea_site_okstatic funcOffshore: open water all over the footprint and a margin, with a shore close enough for a dock.Link to this entrystatic func _sea_site_ok(m: WorldMap, x: int, y: int) -> bool- Parameters
m: WorldMapx: inty: int
- Returns
bool
scripts/sim/world_gen.gd:357WorldGen._near_coaststatic funcA harbour sits on the shore: open water within a couple of tiles of its footprint.Link to this entrystatic func _near_coast(m: WorldMap, x: int, y: int) -> bool- Parameters
m: WorldMapx: inty: int
- Returns
bool
scripts/sim/world_gen.gd:380WorldGen._industry_site_levelstatic funcReturns the level the footprint can be flattened to, or -1 if the site is unusable.Link to this entrystatic func _industry_site_level(m: WorldMap, x: int, y: int) -> intFlattening only lowers corners by one, and only where that keeps neighbours within one level.
- Parameters
m: WorldMapx: inty: int
- Returns
int
scripts/sim/world_gen.gd:391WorldGen._site_clearstatic funcNothing built on the footprint of an industry with its north-west tile on (x, y), or by it: no road, track, bridge or tunnel within a tile (flattening reshapes the ground there), and no building, station or depot within BuildOps.INDUSTRY_GAP (the ground towns keep clear around industries).Link to this entrystatic func _site_clear(m: WorldMap, x: int, y: int) -> boolThis is for industries opening during the game (RAIL-23): when the world is made, nothing is built yet but other industries, and those keep further apart than this anyway.
- Parameters
m: WorldMapx: inty: int
- Returns
bool
scripts/sim/world_gen.gd:419WorldGen._name_industriesstatic funcLink to this entrystatic func _name_industries(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:433WorldGen.industry_namestatic funcAn industry is named after the nearest town: "Ashford Coal Mine".Link to this entrystatic func industry_name(m: WorldMap, ind: Industry) -> String- Parameters
m: WorldMapind: Industry
- Returns
String
scripts/sim/world_gen.gd:439WorldGen._place_townsstatic funcLink to this entrystatic func _place_towns(m: WorldMap, rng: RandomNumberGenerator, density: float = 1.0, opts: Dictionary = {}) -> void- Parameters
m: WorldMaprng: RandomNumberGeneratordensity: float = 1.0opts: Dictionary = {}
- Returns
void
- Calls
L.t,Town.pick_style
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:453WorldGen._town_site_okstatic funcLink to this entrystatic func _town_site_ok(m: WorldMap, x: int, y: int, spacing: float = 22.0, industry_clear: float = TOWN_INDUSTRY_MIN) -> bool- Parameters
m: WorldMapx: inty: intspacing: float = 22.0industry_clear: float = TOWN_INDUSTRY_MIN
- Returns
bool
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:481WorldGen._town_namestatic funcLink to this entrystatic func _town_name(rng: RandomNumberGenerator, used: Dictionary) -> String- Parameters
rng: RandomNumberGeneratorused: Dictionary
- Returns
String
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:502WorldGen._clear_treesstatic funcLink to this entrystatic func _clear_trees(m: WorldMap) -> void- Parameters
m: WorldMap
- Returns
void
This entry has no behavior notes yet.
Declared inscripts/sim/world_gen.gd:517
File options
The field names are case-sensitive. The linked sections have examples and explain how each file is used.
| File or section | Required fields | Optional fields |
|---|---|---|
mod.json | id | name, version, author, description |
data.json → vehicles.<id> | name, kind, cargos, speed, cost, run. Use look or model, and max_wagons for rail or cap for other vehicles. | desc, year, rel, electric, steam, length |
data.json → cargo.<id> | Existing cargo ID | rate, days |
data.json → town_names | None | prefixes, suffixes, replace |
data.json → company_names | Array of names | None |
maps/<name>.json | None | name, description, settings |
Map settings accepts w and h (64, 128, 256, 512, 1024), year (1950, 1960, 1970, 1980, 1990, 2000), and towns, industries, rough, and water (indices 0–3). rough goes from flat to mountainous. water runs from low through normal and high to islands.
Vehicle steam is a boolean for steam effects and steam-specific handling. length is the body length in tiles for a custom model.
The Sim.options dictionary contains cost, blocking, ai_level, max_loan, depots, breakdowns, and goal. These are simulation settings. Map mods use the settings fields listed above.
Cargo IDs
| ID | Name |
|---|---|
pax | Passengers |
coal | Coal |
wood | Wood |
grain | Grain |
oil | Oil |
goods | Goods |
food | Food |
iron_ore | Iron ore |
steel | Steel |
fish | Fish |
mail | |
plastics | Plastics |
waste | Waste |
electronics | Electronics |
cars | Cars |
paper | Paper |
news | Newspapers |
Stock models
| ID | Name | Kind |
|---|---|---|
cargoplane | Pelican Freighter | air |
cargoprop | Stork Cargo Prop | air |
eplane | Breeze Electric Commuter | air |
h2liner | Aurora H2 Airliner | air |
jet | Albatross Jet | air |
jumbo | Condor Jumbo | air |
mailplane | Petrel Mailplane | air |
narrowbody | Falcon Narrowbody | air |
prop | Skylark Prop | air |
regional | Swift Regional Jet | air |
superjumbo | Leviathan Double-Deck | air |
supersonic | Arrow Supersonic | air |
turboprop | Kittiwake Turboprop | air |
widebody | Osprey Widebody | air |
diesel | Meridian Diesel | rail |
efreight | Tempest Electric Freight | rail |
electric | Aurora Electric | rail |
express | Vanguard Express | rail |
heavydiesel | Ironclad Freight Diesel | rail |
hst | Swift High-Speed | rail |
hydrogen | Zephyr Hydrogen | rail |
mogul | Highland Mogul | rail |
railcar | Sparrow Railcar | rail |
steam | Kestrel Steam | rail |
tank | Brigand Tank Engine | rail |
tilting | Swallow Tilting Express | rail |
artbus | Comet Articulated | road |
bus | Comet City Bus | road |
bus2 | Comet Coach | road |
cartruck | Atlas Car Transporter | road |
ddbus | Comet Double-Decker | road |
ebus | Volt Electric Bus | road |
etruck | Volt Electric Truck | road |
roadtrain | Titan Road Train | road |
truck | Atlas Hauler | road |
truck2 | Atlas Hauler Mk II | road |
truck3 | Atlas Hauler Mk III | road |
bulker | Granite Bulk Carrier | water |
container | Atlas Box Carrier | water |
eferry | Ripple Electric Ferry | water |
ferry | Gull Ferry | water |
freighter | Tern Freighter | water |
hydrofoil | Skimmer Hydrofoil | water |
liner | Majestic Liner | water |
tanker | Petrel Tanker | water |