Create / Mod files / Stations for mods

Stations for mods

A Station is a hull that never flies, authored once and parked by id. It owns a ship design for its hull, the services a docked ship may use, a storage cap, the stock its hold opens with and the credits it trades with. A Station spawn names it and adds what differs per spawn: where it sits, which side it is on, whether it is a derelict.

Stations are content like ships and sections. Create a new id to add a station, or reuse a base id to rebuild the base waystation everywhere it is parked.

This page is the field-by-field station reference. For general RON spelling rules such as double parentheses, Some(...), and asset schemes, see RON spelling rules.

Why a station is its own kind

A station is not a ship with the thrusters left off. It has no pilot, it is never ordered anywhere, and it keeps a store beside its own hold. Giving it its own kind lets the lint refuse a station that could fly, lets a save freeze it as a station, and keeps a ship's spawn fields (a controller, a capability set) off it.

The Station item

[
    Station((
        id: "my_outpost",
        name: "My Outpost",
        about: "A collar, a bridge and four plates. Dock to trade.",
        design: (
            hull: (
                sections: [
                    (
                        id: "collar",
                        position: (-1.0, 0.0, 0.0),
                        rotation: (0.0, 0.70710677, 0.0, 0.70710677),
                        source: Prototype(id: "docking_port_section"),
                    ),
                    (
                        id: "bridge",
                        position: (0.0, 1.0, 0.0),
                        rotation: (0.0, 0.0, 0.0, 1.0),
                        source: Prototype(id: "basic_controller_section"),
                    ),
                    // ... hull plates ...
                ],
                integrity: (collapse_threshold: Some(0.5)),
            ),
            services: [Trade, Storage],
            builds: [],
            storage_cap_g: 50000,
            stock: {"HullPlate": 4},
            credits: 1000,
        ),
    )),
]

Every field is required. id, name and about name the catalog entry; design holds the station.

field type meaning
id string what a spawn names this design by. A mod reusing a base id REPLACES that station everywhere
name string the name a picker shows. A parked station is named by the scenario object that placed it
about string what this station is, for a reader
design station the station itself: the six fields below. A spawn can also carry one inline, see Spawning one
hull design the same fields a ship design takes: sections, integrity, presentation. It must hold a Docking section and a Controller section and no Thruster section, and author integrity.collapse_threshold: the share of its hull a station collapses at, see below
services list what a docked ship may do here, from the closed set Rebuild, Refit, Trade, Storage, Jobs, Roster. At least one
builds list the section prototype ids this station crafts, each listed once. Nonempty exactly when services lists Refit or Rebuild, empty otherwise
storage_cap_g whole number how many grams the station's storage takes. Above zero exactly when services lists Storage
stock stock what the hull's own hold opens with, in the stock format. It must fit the hull's hold (100 kg per hull section)
credits whole number the credits the station trades with at spawn

The Docking section is what a ship docks to. The Controller section is what levels the station, see below.

A docked ship trades with a living station that offers Trade as it trades with a ship, and keeps items in the storage of one that offers Storage (see Trade and storage). Rebuild and Refit are in play too (see Rebuild, Swap, Add, Buy a hull and Hire an escort). Jobs posts the station's job board (see Jobs); Roster is checked and carried, and the screen that reads it is its own task.

How a station behaves

A station is a dynamic body, never a fixed one. Gravity pulls it and a ram shoves it, and a living station holds its post: the place its spawn gave it, derived on its first physics tick from its position and initial_velocity and kept across a freeze, a thaw and a world save. Moved off it, the station rides back on gentle RCS and pushes every hull docked at it along. A dead station keeps its post but nothing reads it: where a hit leaves it is where it stays, and a docked player tows it freely.

behaviour rule
self-levelling the Controller section parks its target attitude on the spawn rotation and drives the hull with torque alone. Spun by a hit, the hull comes to rest within STATION_LEVEL_TOLERANCE_RAD (0.03 rad, about 1.7 degrees) of that attitude. No main-drive thrust is ever applied: only a Thruster section writes thrust, and the lint refuses one
the post a living station's RCS flies it back onto its post: toward the post at up to 5 m/s, slowing on a 1 m/s^2 curve, torque-free at each hull's centre of mass so the attitude hold and the dock joints see nothing. It idles inside 5 m of the post and 0.5 m/s of the post's motion, so a settled station spends nothing and its RCS magazine refills. A station under a scenario order, a dead station and a hub whose docked ship holds the helm are left to whoever moves them
damage and collapse a station takes damage, collapses and is destroyed as a ship is. At or below collapse_threshold of the pool it was built with (0.5 on every base station) it is peeled apart section by section and its root is destroyed, a dead station included. A sever counts: the pieces cut away leave its pool, so a cut that leaves the kept half at or below the threshold collapses it. A destroyed station drops its hold and the player's storage as cargo canisters, releases a docked ship and is gone for good: its cell's record no longer holds it
turning dead a living station whose last turret or last Controller section is lost (an unarmed station: its last Controller) turns into a dead station on the spot: services stop, it goes Neutral and lootable, its sections other than structure and docking ports switch off, and a docked player gets the helm. Hold and storage stay. See Dead stations
the guns a living station is AI-driven. Its turrets aim, its point defense covers it, and it answers fire; with no thruster the AI never moves it. An Enemy or Player station fires on hostile sides; a Neutral one only answers a ship that has dealt it 30 hit points in quick succession, so a scrape or a stray round does not provoke it. Primary fire holds while a ship is docked, and point defense never fires through the docked hull
the PDC reserve a station's PDC turrets reload only from its private reserve of 10,000 rounds, never from its hold, so selling out its PdcRound stock never disarms it and an empty reserve never falls back to the hold. A station spawns with it full. A living station refills it at 10,000 rounds per 1,800 s of play, live and on a thaw for the time it stood frozen; a dead or neutralized one never does. Its other weapons draw on the hold as a ship's do. The frozen record and the save carry it; a Load refuses a reserve above 10,000 rounds or a part-round outside [0, 1)
severed pieces a piece cut off a station leaves at the separation speed while the station keeps its own velocity, so a cut never puts a station on a new orbit
orbit a station spawned in a planet's well rides a circular orbit: its initial_velocity is sqrt(mass / r) on the tangent of its radial with +Y (with +X when the radial is near +Y), in engine units, the speed the gravity pull integrates. The generator sets it. Its post is that orbit - the well's centre, the radius and the plane - and the station holds the ring against the kick and against the integrator (the pull is held constant over each physics step, so an unheld orbit widens a little every step)
the post rule the post is the one a station's authored motion defines, or the scenario fails at lint and the spawn panics: in the well that pulls on it hardest (the rule the force layer applies to a body with no well yet) the velocity is the circular speed on the tangent within STATION_POST_CIRCULAR_TOLERANCE (5 percent) in magnitude and radial component; out of every well it is (0.0, 0.0, 0.0). A station at rest in a well would fall, and a station drifting in flat space would never stand anywhere

The proofs are system_station_body (a nudged station in a void) and system_station_orbit (a generated yard with a tender docked at each port but one: a hit that damages it without collapsing it, a shove and three orbits of a small planet).

Docking at a station

A ship docks with a station through its Docking section as it docks with a ship: a free port on each hull, inside the capture envelope, and DOCK. What differs is who the station lets in and who flies the pair.

rule what happens
admission a living station reads its allegiance: Enemy refuses every dock, and any side refuses a ship it is hostile to (a Player station and an Enemy-flagged ship, or a station answering that ship's fire). A generated station's side is its civilization's stance to you, so an Enemy civilization's stations refuse you. A derelict admits whatever its side; it is a hull to loot. A station you own admits you whatever your side
the refusal while the travel lock is on a station that refuses, the HUD posts a notice (<NAME> REFUSES DOCKING with the station object's name) once; the mode chip does not show it, the DOCK chip draws dim in its slot, and DOCK builds nothing
one ship per port a ship holds one connection; a station holds one per docking port. A ship docks while any port is free; once every port is held the next ship meets <NAME> DOCK OCCUPIED until one lets go. The station and every ship docked at it move as one body
a living station's helm the station owns the helm of everything docked at it. HELM is refused, the HUD reads STATION HELM, and each docked ship's drive, RCS and maneuvers are held. The station has no thruster, so the assembly never moves; its bridge holds it level on the station's parked attitude
a dead station's helm the docked player holds the helm from the capture, as after HELM on a ship, because the dead station's bridge is inactive (derelict or neutralized alike), and gets it the moment a living station it is docked to turns dead. The player's burn tows the station and every ship docked at it
losing the port a docking port destroyed while a ship is docked to it releases the dock
leaving DOCK again, from the ship, as always

The proof is system_station_docking: a living station holds the helm under a held burn, a dead station hands it over, and an Enemy station refuses - the HUD notice shows the refusal, the mode chip does not, and the DOCK chip draws dim.

Trade and storage

A ship docked to a living station uses the station from the Inventory pane. Every service below reads one gate: the partner is the docked station, it is not a derelict, and its services list the service.

rule what happens
trade with Trade, the station's column lists its hold: the station's row opens Buy, the player's row Sell, against both purses. A station a scenario places deals at the item's reference ask_cr and bid_cr; a generated one at its computed price, see Price tables. Without Trade, Buy and Sell refuse with <NAME> does not trade
storage with Storage, a third column lists the station's storage and its used mass against storage_cap_g. The player's row opens Store, the storage row Withdraw. No credits move
one store a station keeps one storage, for the player alone. Nothing else stores or takes from it
refusals Store and Withdraw refuse in this order, on the form with Confirm disabled, and on the note line: not docked, no Storage service, unknown item, no quantity, quantity zero, fewer items than the quantity, then storage full, <N> kg free for a Store or <SHIP> has room for <N> more for a Withdraw
persistence the storage freezes with the station when its cell retires, thaws with it, and is in the world save; a save checks it against storage_cap_g. A destroyed station drops it as cargo canisters with its hold. A Take all or a strip at a dead station takes it
events OnTraded for a trade; OnStored and OnWithdrawn for a store or withdraw, the station as id and the player as other_id, see Hold events
a derelict a dead station offers no service. Its hold is loot: Take and Give, as for a derelict ship. Your storage there is loot too: the storage column is hidden, and Take all and Strip take it after the hold, what fits for a Take all and whole or nothing for a strip. Strip refuses at your own dead station and while a ship you own is parked there

The proof is system_station_storage: on a generated world, the player docks at a living waystation, buys, sells and stores through the pane, leaves until the station's cell retires, comes back, withdraws the same stacks, meets the over-cap refusal, and finds the storage in the leave save and after a Load.

Rebuild

A ship docked to a living station that offers Rebuild can rebuild a section it lost. The Ship pane lists each lost section under its old code (PDC-1) with a price or the reason it cannot be built. A lost section is one the ship's design places and the ship no longer has. A station crafts only what its builds lists, whatever its hold carries: a generated station builds the sections its civilization knows, which is every section at advancement 0 and a seeded subset of those above it, and the base waystation builds the sections open at advancement 0. So any station rebuilds a start hull's parts.

rule what happens
the gate docked to a living station whose services list Rebuild. A dead station and a ship offer no rebuild
the recipe the section's build recipe: its credits plus every part
parts taken from the ship's hold first; the rest are bought from the station's stock at ask
credits the ship pays the recipe's credits plus the bought parts. The station receives all of it
refusals in this order: not docked, no Rebuild service, the station does not build the section, section not lost, no live section to attach to where the design places it, a part neither hold can cover, too few credits
the result the section spawns where the design places it, at full health, with the key binding it had when it was lost
events OnRebuilt and one OnCreditsChanged per party with cause: Rebuild, see Hold events

A section code reads the ship's design, not its live sections, so a lost section keeps its code and a rebuilt one gets it back. A key binding the player set on a section is kept when the section is lost and across a save.

The proof is system_station_rebuild: a ship loses a rebound PDC, docks, rebuilds it from hold and bought parts, and keeps it with its binding across a freeze and thaw.

Swap

A ship docked to a living station that offers Refit can swap a live section for another part of the same family. Select the section in the Ship pane: the panel lists each part it can take, with a price or the reason it cannot be paid.

rule what happens
the gate docked to a living station whose services list Refit. A dead station and a ship offer no swap
the family the same kind of section (a turret for a turret) that fills the same cells, read from its collider, and not the part the section already is. Parts marked hide_in_editor, or that the station does not build, are not offered
the recipe the new part's build recipe: its credits plus every part, paid as a rebuild pays it
the old part it is removed. Nothing is refunded
the build checks the ship the swap leaves must still join into one ship, keep every firing and exhaust lane clear, and keep enough thrust and flight computers for its mass. A swap is refused only for a check it breaks, not for one the ship already failed
refusals in this order: not docked, no Refit service, the station does not build the part, another kind of section, another size, the part the section already is, a part neither hold can cover, too few credits, a build check
the result the new part spawns where the old one stood, at full health, under the same code and with the old part's key binding. The ship keeps the new part across a save
events OnSwapped and one OnCreditsChanged per party with cause: Swap, see Hold events

The proof is system_station_swap: a ship docks, a thruster swap for a PDC is refused, a damaged and rebound PDC is swapped for the twin kinetic PDC, and the new part keeps its binding and its health across a freeze and thaw.

Add

A ship docked to a living station that offers Refit can add a part at a free attachment point. A free point is any socket of a live section that no section of the ship's design mates, so every hull has them and no content marks them. Select the section in the Ship pane: the panel shows its free points as buttons, the first one chosen, and lists each part that fits at the chosen point with a price or the reason it cannot be added.

rule what happens
the gate docked to a living station whose services list Refit
the point a socket no design section mates. A lost section's socket stays reserved for its rebuild
the fit the part mates the point with the socket that keeps it as drawn, and must not overlap a section it does not mate. Parts marked hide_in_editor are not offered. The catalogue lists a part the station does not build, or that neither hold can cover, dimmed and with Place off
the recipe the part's build recipe, paid as a rebuild pays it
the build checks the ship the add leaves must still join into one ship, keep every firing and exhaust lane clear, and keep enough thrust and flight computers for its mass. Only a check the add breaks refuses it
the binding the key of the first live section of its kind that has one. With none, a weapon takes an empty binding to set with Rebind and a thruster none. A mining emitter takes the first free key of V, B, N, C, refused when all are held
refusals in this order: not docked, no Refit service, the station does not build the part, a taken point, a part with no socket, an overlap, a build check, no free mining key, a part neither hold can cover, too few credits
the result the part spawns at full health under the next code of its kind. The ship keeps it across a save
events OnAdded and one OnCreditsChanged per party with cause: Add, see Hold events

The proof is system_station_add: an add at a taken socket is refused, a kinetic PDC is added to a base hull through the pane and to a generated hull, and each keeps its binding and its health across a freeze and thaw.

Buy a hull

A living station that a generated world places sells one whole hull per docking port but one, so one port is always free for the player. A hull that fits at no free port without touching the station or another parked hull is not offered. The world lays them out for the station's civilization from the world seed and the station's id, so a station sells the same list on every visit and keeps it across a save. Each hull's roles follow what the civilization can build, and its size grows with the civilization's advancement: a station near the origin sells small hulls only. A station a scenario places sells none.

Every hull for sale is a real ship parked at one of the station's ports. A parked hull is inert: nobody flies it, it is Neutral, it does not shoot, and it cannot be looted or stripped. Docked to a living station that offers Refit, the Station pane lists the parked hulls under Ships for sale: each a card with the real hull turning slowly, its name, length and price, and a Buy button, greyed with the reason as its tooltip while refused, beside an Info button that shows the hull in the Ship pane, read-only. A ship the player owns, parked there, lists above them under Your ships and says "your ship" in place of the price, over a Board button. Each list shows only while it has a card.

rule what happens
the gate docked to a living station whose services list Refit, with a hull parked
the price every section's build recipe at ask: its credits plus its parts at the item's ask, rounded up per lot. The station pays nothing for the old ship
the swap the player takes the controls of the parked hull, which undocks and redocks with the station. The old ship parks where it stood, still the player's
the board Board on the card of a ship the player owns swaps the player into it the same way, for free. The ship left parks where it stood, still the player's
the hold the old hold stays in the old ship. While docked at that station, its hold lists as the player's storage. The new hold opens empty
the credits the ship pays the price and the station takes it. A board moves no credits
the binding the start-role keys for the new hull: turrets the trigger, railguns R, torpedoes F, mining emitters V then B, N, C. No old binding carries over
refusals in this order: not docked, no Refit service, too few credits
the result the new hull docks where it was parked, at full health. The ship and the parked hulls keep across a retire, a save and a Load
events a buy fires OnShipBought and one OnCreditsChanged per party with cause: ShipBuy, see Hold events. A board fires neither

The proof is system_station_buy: on a New Game, the station parks its hulls for sale; the player buys one through the pane, the old ship parks as the player's own, the station's cell retires and thaws, the player boards the old ship for free, and the player's hull and the parked hulls come back after a save and a Load.

Hire an escort

After its hulls for sale, a living station that a generated world places hires out one to three armed escorts: scavenger and armored hulls its civilization can build, laid out from the world seed and the station's id. A civilization that builds no armed role hires none, and a station a scenario places hires none. Each escort waits outside the station, undocked and Neutral, coasting on the station's course a little ahead or behind it, clear of the station and of each other. The Station pane lists them under Escorts for hire, on the same cards as the hulls for sale, with a Hire button greyed the same way, under a header with the fleet's slots. The escorts stay with the station when its sector unloads, and in the world save.

rule what happens
the gate docked to a living station whose services list Refit, that hires out escorts, and that flies your side: an Ally civilization's station or one you own, see Civilization stances
the price half again the hull's price: every section's build recipe at ask, times 3/2
the fleet two slots, starboard then port. A third hire is refused
the credits the ship pays the price and the station takes it
refusals in this order: not docked, no Refit service, not an ally, a full fleet, too few credits, a station balance that would overflow
the result the escort leaves the station's list and joins your fleet where it waited, with an empty hold. It flies on its own drive to its place off your side and behind your travel, matches your speed, holds where it is while you stop, and fights what attacks you
sectors and saves an escort flies with you across sectors and the world save keeps it in your fleet. A neutralized escort leaves the fleet and stays in its sector as a wreck
events OnEscortHired and one OnCreditsChanged per party with cause: EscortHire, see Hold events

The proof is system_station_hire: on a New Game, the player hires an escort through the pane, crosses sectors with it, sees it fly formation through a turn and finds it beside the ship after a save and a Load; a killed escort is gone from the fleet after the next save and Load.

Buy the station

A living station that a generated world places is for sale to the ship docked with it. The Station pane shows it under This station: its name, its price and a Buy station button, greyed with the reason while refused. A station a scenario places and a derelict are not for sale.

rule what happens
the gate docked to a living station a generated world placed, whose civilization is your Ally, see Civilization stances. No services entry is needed
the price twice what the station is worth at ask: every live section's build recipe, every stack of its hold at the item's ask, rounded up per lot, and its credits. Your storage there is already yours and is not priced
the credits the ship pays the price to the civilization. The station keeps its own credits, stock and services
refusals in this order: not docked, not for sale, already yours, not an ally, too few credits
what becomes yours the station leaves its civilization: it takes the Player side, so its guns fire on your foes, and it is named Owned station. It admits you whatever your side. Its hold sells to you at the item's bid, rounded up per lot; storage withdraw stays free. Its services still price at ask, and Take does not reach its credits
what stays the station keeps its stock, credits, services and the hulls it sells. It earns no income yet, and you cannot set its stock targets yet
the Map the chart holds it as yours: the chart view shows OWNED STATION in the ally colour
sectors and saves the station stays yours, on your side and under its new name, when its sector retires and thaws, and the world save keeps it so
events OnStationBought and one OnCreditsChanged for your ship with cause: StationBuy, see Hold events

The proof is system_station_own: on a New Game, the player docks at an Ally civilization's generated station, buys it through the pane and sees it take the Player side and the owned name, leaves its sector and comes back, saves and Loads, and finds it still the player's, on the chart and the Map too. An Enemy-flagged ship, which its Player side would refuse, is admitted.

Spawning one

A scenario parks a station with a Station object. Its design names a catalog station with Prototype(id):

SpawnScenarioObject((
    base: (id: "outpost", name: "OUTPOST", position: (0.0, 0.0, -1500.0), rotation: (0.0, 0.0, 0.0, 1.0)),
    kind: Station((
        design: Prototype("my_outpost"),
        allegiance: Neutral,
        derelict: false,
        initial_velocity: (0.0, 0.0, 0.0),
    )),
)),

Or it carries a one-off station whole with Inline((hull: .., services: .., storage_cap_g: .., stock: .., credits: ..)), the fields of design above. The lint checks an inline station as it checks a Station item. A station spawn takes no section patches.

The editor writes the same pair. A ship marked Station in its inspector saves as a Station item under the ship's node id and a Station object that spawns it. The editor writes the hull and its side and fills the rest: the four services, a 100 kg storage cap, 5000 credits, and the base waystation's hull plates, rations and salvaged parts cut to fit the hull's hold. Driver None saves derelict: true. The content lint checks the saved station like any other.

Overlay and lint

Overlay is last-wins by id, as for every content kind: a mod that defines a Station with a base id replaces it whole.

The static lint and the load gate both refuse a station that:

  • names a section prototype no loaded content declares, or gives two sections one id, or a reserved id;
  • has no Docking section (nothing could dock with it);
  • has any Thruster section (a station never flies);
  • has no Controller section (nothing would hold its attitude);
  • authors no integrity.collapse_threshold, or one outside 0..=1 (a station states the share it collapses at);
  • lists no service;
  • has a builds entry that no loaded content declares or that repeats, an empty builds with Refit or Rebuild, or a nonempty one with neither;
  • lists Storage with storage_cap_g: 0, or sets storage_cap_g above zero without Storage;
  • seeds its stock with an unknown item, or more than the hull's hold takes.

A service listed twice is a warning. A spawn naming a station id no loaded content declares is an error, like an unknown ship design.

Generated-world stations

The open world places stations itself. Every civilization keeps its stations at the clusters nearest its centroid: a living one keeps one, plus one per half of its advancement (one to three), and an extinct one left exactly one. A cluster holds at most one station; when two civilizations want one, the nearer centroid keeps it. The choice is a function of the world seed and the civilization alone, so a cluster holds the same station from every cell and in any visit order.

Where it stands follows the cluster. In a cluster with a planetoid the station rides a circular orbit around one world, at that world's radius plus the 500 m clearance margin plus the station's own clearance, with the orbit velocity the behaviour table names. In a cluster without one it stands at rest beside one of the cluster's rocks, 500 m clear of it, on the anchor-facing side when that side is free. A station is never placed inside another body, never across a cell face, and never where its cluster placed no rock or planetoid in its cell.

The generator builds every station from the loaded parts; no catalog station is placed. Each civilization draws one archetype, with an even chance each, and builds one design from it at its advancement a. All of its stations share that design, so a cluster shows the same station from every cell.

archetype shape style
ring a solid hub, one to three rings round it and four spokes, eight from a 0.5 station
spire two to five solid decks on columns, with wings: struts below a 0.5, solar panels from it armoured
yard a spine between two end blocks, with rows of arms: struts below a 0.5, solar panels from it industrial
what at a 0 at a 1
clearance radius, at most 100 m 300 m
docking ports, 2 + floor(6a) 2 8
turrets, 4 + floor(12a) 4 16
storage cap 1 t 4 t
credits 10000 40000
opening stock, share of the hold, at least 4% 8%
parts floor one recipe of each built part one recipe of each built part

Every generated station offers Rebuild, Refit, Trade, Storage and Jobs. Its stock is half goods and half the recipe parts of every section its civilization builds: every part at advancement 0, and of the parts above 0 that its advancement opens, each with chance 0.5 keyed to the civilization and the part id. The parts hold at least one recipe of every part it builds: for each item, the largest count any one of those recipes asks, so the Catalogue can sell every part it lists from the station's own stock. Its goods hold ammunition only for the reloading weapons its civilization knows (PdcRound, RailSlug, Torpedo): at least 2,000 PdcRound when one of those weapons reloads from it, and at least one unit of each other such item. It draws the parts its civilization knows at its advancement, by draw weight, those within 0.25 below its advancement first, and carries flight computers for its mass, as a generated ship does. A dead station keeps the same stock and credits as loot.

The open world refuses to arm when no loaded style authors an archetype's style, or when no station hull, flight computer, docking port or turret part is open at advancement 0. A station that no layout fits fails its sector with the seed, civilization, archetype, advancement and failed constraint. A station whose opening stock, PDC floor included, weighs more than its hull holds fails its sector with a station_stock fault. block_waystation is for scenarios; the generator never places it. A mod's Station items are for its scenarios too.

A generated station spawns with a typed generated id and no scenario address, freezes as a station record when its cell retires, and thaws from that record: what a docked ship bought or stored is kept for the session, and across a save on the desktop build.

Civilization stances

Every living civilization holds one stance toward the player, Ally, Neutral or Enemy, and one toward each living neighbour. Never a number. The world seed draws both; the player's deeds move the first. A generated station or ship flies its civilization's stance as its side (Ally is the Player side), so admission, the AI and the HUD read the side alone.

rule what happens
the seed each civilization's stance to the player is an even draw of Enemy, Ally or Neutral, the same for every start role. Two living civilizations whose centroids lie under 340 km apart are neighbours; their edge is drawn Ally / Neutral / Enemy at 25 / 50 / 25, and a civilization with no Enemy edge designates one neighbour its rival, so every neighbourhood holds a rival
an offence neutralizing an intact generated hull or station of a civilization, your ship or a fleet escort dealing the last hit. Three offences inside 3600 s of play step the civilization one down; the first two are a grace count, and an offence older than the window is forgotten
a merit handing in a job one of its stations posted. Three merits step it one up
propagation a step DOWN an offence makes reaches the civilization's living neighbours once, by their edge: an Ally edge follows one step down, an Enemy edge warms one step up, a Neutral edge moves nothing. Nothing reaches a neighbour's neighbour, and a merit, a settlement or the decay moves the one civilization alone
a provocation your fire or ram on a Neutral or Ally hull past its patience (30 hit points in quick succession, the same tally that makes a Neutral ship answer) makes its whole civilization read Enemy for 900 s of play; a later provocation restarts the window
what the side does an Enemy civilization's stations refuse your dock and its ships fight you; only an Ally civilization's station sells itself or hires out escorts; a Neutral one trades and posts jobs
settling with a charted living station selected, the Map chart's STANCES block lists every neighbour of its civilization that stands Enemy to you, with its fine and Pay fine, which works only while docked at that station: 1,000 cr at advancement 0 up to 10,000 cr at 1, so a backwater asks about 1,090 cr. Paying it returns that civilization to Neutral, clears its offences and provocation, and moves no neighbour. The fine goes to the station
decay a civilization your deeds made Enemy returns to Neutral after 7200 s of play with no new offence; a seeded Enemy never decays
merchandise a station you own, an escort in your fleet and a neutralized hull keep their side: a bought station flies yours, a dead hull is loot
arrival a generated crew holds fire for 8 s after its cell streams in, whatever its side, so a civilization you turned Enemy arrives with the grace a seeded Enemy gets; a Neutral or Ally crew provoked inside that window answers once it passes
the charter the base pirate role's goal counts the civilizations your kills turned Enemy and the intact hulls you took from one of them while it stood so, see Start roles
sectors and saves the stances live on your save, not the station: an offence counts across a retire, a thaw and a Load, and a Load restores the table on its arming frame. A table stamped ahead of the saved play clock refuses the Load
events a settlement fires one OnCreditsChanged per party with cause: Settle, see Hold events

Take three neighbours: A Ally to you, B on an Ally edge to A, and C on an Enemy edge to both and Enemy by its seed. Neutralize three A hulls inside an hour: A steps to Neutral, B follows to Neutral and C warms to Neutral, and B's own step reaches nobody. Three more and A and B stand Enemy by your deeds; two hours of play with no new offence thaw both to Neutral. Hand in three jobs at a station and only its civilization steps up. A provocation makes a civilization read Enemy for 15 minutes without moving its table stance. A seeded Enemy never thaws; paying its fine returns it to Neutral and moves no neighbour.

The proof is system_civilization_stance: on a New Game as the pirate, the player docks at a civilization's station, neutralizes three of its other hulls, sees the station refuse the dock and the charter count the civilization, finds its rival warmed to Ally with every hull on the Player side, reads the stances back from the leave save and after a Load with a remote civilization untouched, and docks again once the Enemy decayed.

Dead stations

An extinct civilization's station is the SAME design spawned dead: its Station spawn carries derelict: true, so its hull spawns inactive and lootable, with DerelictShipMarker and LootableShipMarker, and no service is offered on it. There is no second catalogue entry for a dead station; the strip is the spawn flag, the same one a scenario's own Station object sets. A dead station keeps the Neutral side, and admits a dock on any side: see Docking at a station.

A living station fought down to its last turret or last flight computer turns into the same dead station in place (see the behaviour table), and freezes, thaws and saves as one.

Jobs

A living station that offers Jobs posts a board of three jobs (JOBS_PER_BOARD), put on its root as JobBoard once every sector in the cube of 27 around its own is live and settled. The station the player began docked at - the session's starting station, the nearest station of a civilization whose seeded stance is Ally, kept in the world save's start field - also wears StarterBoardMarker beside its board; it is the one board that posts the start role's starter jobs, and no other board ever carries the marker. When a slot there posts and no standing offer stays open to the player's current hull, the slot posts one the hull can do: a procurement the hold takes, else a distress call for a docking section, else an escort for a weapon. A held slot, and a slot that does not renew, stays as it is. Each board slot carries a posting number, the play-time stamp it was posted at and the offer it posted (SlotPosting, kept per station in the JobPostings session resource, saved with the world). A slot's offer is drawn once, when the slot posts, from the world seed, the station's generated id, the slot, the posting number, the cluster types of its sector, the start role's job mix, the board's standing offers, the field around the station and, on the starting station's board, the player's hull, off its own WyRand seeded from FNV-64 of (seed, "station_jobs", station id, slot, posting). The offer then stands as drawn until its slot renews: a looted wreck, a job held elsewhere, a thaw or a Load never changes it. A job's id is the posting station's id, its board slot and its posting number (<station>#<slot>.<posting>).

A slot renews - moves to its next posting, stamped now - when its job is handed in, when a player pays to delete a current unheld offer at the posting station, or when an unheld offer stands past the price table's jobs.offer_seconds (jobs.escort_offer_seconds for an escort). The bodies the old posting could have put in the world (a hauler, its raiders, a caller, each named <station stem>_job_<slot>_<posting>_<part>) are despawned before the slot posts again under the next posting number, with fresh body ids. Stations draw in id order. A job you hold is pinned: its slot never renews under it, so a held job never expires. A free drop, including loss of the hauler, wreck, caller or poster, retires the job and its bodies at once. Its slot waits until the original offer window expires before it renews; the old offer's Accept is refused as expired.

Each slot draws its kind by the start role's jobs mix (see start roles), as weights over Procure, Recover, Escort, Distress and Neutralize:

mix roles Procure Recover Escort Distress Neutralize
Trade industrial, transport; no session 4 1 4 1 1
Salvage scavenger 1 5 1 2 1
Combat bounty hunter, military, pirate 1 1 1 3 4
kind title what it asks reward
Procure Bring 4 Iron ore bring that many units of the item to the poster the goods at the ask plus half, plus a fee
Recover Recover 2 Hull plate from <wreck> take that many off the named derelict in the cube and undock with them aboard, the wreck's stack gone twice the ask, plus a fee
Escort Escort a hauler carrying 1200 cr a working-hull hauler spawns 1 km off the poster on a 10 km leg and leaves at 100 m/s once you are undocked and within 1 km of it; see it reach its mark. 1 + cargo / 700 raiders, at most 3, lie in wait 2.5 km off the leg, 75 % along it, and engage within 3 km; they hunt the hauler and turn on a ship that shoots them for as long as it keeps shooting half the cargo value, plus a fee
Distress Answer a distress call a neutral drifting caller spawns 10 km out: dock with the caller 200 cr plus twice a fee
Neutralize Neutralize <hull> neutralize the named Enemy hull standing in the cube 400 cr plus twice a fee

The fee is 50 to 250 cr. The sector's clusters pick the item categories a Procure or Recover asks for:

clusters asks for
AsteroidRich, RockOnly Raw
PlanetHeavy Food, Raw
DerelictField Parts, Repair
none every category but Ammo

A Procure draws a distinct item from those categories while the pool allows (a catalog with none of them draws from every item) and a count of 2 to 8. A Recover names a derelict with a non-empty hold in the cube and one of its stacks; a Neutralize names an intact, un-neutralized Enemy hull in the cube. A new offer never names a wreck or hull that a held job, a body a held job spawned, or an unexpired offer on any board already names, so two boards never pay for one target; a slot with no candidate left posts a Procure instead.

The player accepts and hands in only while docked at a living station that offers Jobs (plan_job_accept, plan_job_hand_in). An accept is refused while the job is held or completed, while its offer's window has passed (Expired: the station no longer offers it), and for a Recover or Neutralize whose target is gone. An accept raises JobAccepted: an Escort spawns its hauler and its raiders, and the hauler waits with no helm order until the player stands undocked from the poster and within 1 km of the hauler, then flies a Move to its mark under a 100 m/s cruise cap; a Distress spawns its caller. A job is DONE when the open world sees its completion over the shipped event kinds: onundocked naming the wreck with the stack aboard and the wreck's stack gone (Recover), onshipordercomplete for the hauler's Move (Escort; the hauler neutralized or destroyed, or its Move failed because it lost its drives or its flight computer, drops the job and its bodies), ondocked with the caller (Distress), onneutralized or ondestroyed naming the hull (Neutralize). A hand-in needs the posting station, the job done (a Procure is done with the goods in the hold), and a station balance that covers the reward; it removes a Procure's goods, pays OnCreditsChanged with cause JobReward on both sides and lists the job completed. Held, done and completed jobs are the Jobs session resource, and every board's slot postings and offers are the JobPostings session resource; both save in the world state's jobs and postings fields and are checked on load: a job held twice, held and completed, held or completed and dropped, done but not held, an undone escort with no leg or a leg with no undone escort, with a zero count or reward, or naming an item the catalog lacks refuses the world, as does a board with the wrong slot count, a posting stamp ahead of the clock, or an offer that is not its slot's posting or that no board could post. A held job is checked by its own rules, not against its slot. A frozen sector keeps a spawned hauler, caller or raider as any ship, but not the hauler's helm order or its cruise cap: the jobs keep the hauler's mark and whether it left, so a thawed or loaded hauler that left flies to its mark again under the same cap. Authored Station content with Jobs in its services posts no board: only generated stations have the id and sector the board is seeded from.

Base stations

id what it is
block_waystation Waystation - a plated two-deck block about 40 m across, unarmed, with a bridge set into the top deck, a second flight computer (lower_bridge) in the far corner of the lower deck and a docking collar off the port flank (port_collar). Offers Rebuild, Refit, Trade and Storage; its hold opens with hull plates, rations, salvaged parts and a few of each hull, drive, controller and PDC part

The waystation collapses at half its hull pool, as every generated station does.