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
Dockingsection (nothing could dock with it); - has any
Thrustersection (a station never flies); - has no
Controllersection (nothing would hold its attitude); - authors no
integrity.collapse_threshold, or one outside0..=1(a station states the share it collapses at); - lists no service;
- has a
buildsentry that no loaded content declares or that repeats, an emptybuildswithRefitorRebuild, or a nonempty one with neither; - lists
Storagewithstorage_cap_g: 0, or setsstorage_cap_gabove zero withoutStorage; - seeds its
stockwith 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 |
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.