KESSLERSKY PACKS

Make a pack

A pack is a folder of TOML files that Kesslersky loads on top of its own content. It can add gear, factions, paints, structures and systems, and change what's already in the game.

The game's own content is a pack too, called core. It loads the same way yours does, and its files are the reference for writing yours.

This page describes Kesslersky 0.3.3. The file table and the Union's files are generated from that build.

DOWNLOAD AN EXAMPLE PACK PLAY

Try one

  1. Download the example pack, the Union, and unzip it. You get a folder, union/, holding pack.toml and a content/ folder.
  2. Open the game. On the title screen, open Packs, choose Load a pack… and pick the folder. The game checks the pack and lists what it adds, or shows what's wrong with it. Loaded packs stay on this device.
  3. Tick the pack and start a new game. A game keeps the packs it started with, and its save opens only where they're loaded.

To try a change, edit the files and load the folder again. Errors give the file, the row and what was expected.

A pack is a folder

union/
  pack.toml              the manifest
  content/               TOML files shaped like the game's own
    factions.toml
    modules.toml
    paints.toml
    structures.toml

A manifest's kinds says which of content, text (translations), assets (art and music) and rules the pack carries; each has a section below.

pack.toml

[pack]
id = "union"              # lowercase letters, digits and _; prefixes every id you define
name = "The Union"
version = "0.1.0"         # major.minor.patch; saves record it
description = "An industrial faction with halls in Stipend and Two Cradle."
kinds = ["content"]       # what the pack carries
game = ">=0.1"            # game versions it was written for; checked when it loads

[dependencies]
core = "*"                # every pack depends on core; list other packs to load after them

Ids

Core's ids have no prefix: mule, ministry_cargo_pod, ferrite, stipend. A pack's ids start with the pack's id: union:deep_drill.

Adding things

A file with the same name as one of core's (modules.toml, paints.toml, factions.toml, structures.toml and the rest) adds its rows to that file's lists. Each row needs a new id. A value outside a list is an error, since it would overwrite core's; to change something that exists, use a patch.

# content/modules.toml
[[module]]
id = "pocket_hold"          # becomes example:pocket_hold
name = "Pocket Hold"
faction = "ministry"
tiers = [1, 3]
slot = "aux"
price = 45
description = "A smaller box. Also bolted on."
cargo = { capacity = 15.0 }
scrap = { materials = { scrap_metal = 2 } }
forge = { materials = { ferrite = 10 }, credits = 15 }

A gun draws its shot from a row of effects.toml: the kind of shot (a beam, a bolt, a projectile, a burst), its colours, width and life, what its hit looks like, and what a better gun draws from a tier up. A weapon module names its row with effect = "..."; one without draws its damage type's default. So a pack's gun can have a shot of its own:

# content/effects.toml
[[effect]]
id = "ember"                # becomes example:ember; a module says effect = "ember"
kind = "bolt"               # beam, bolt, projectile or burst
color = "#ff7a3c"
core = "#ffe8c8"
width = 2.4                 # screen pixels for a small gun; bigger hardpoints scale it
length = 40.0               # a bolt's length, in world units
life = 0.26                 # seconds from the gun to the target
impact = "scorch"           # sparks, scorch, shock or none

[[effect.band]]
from_tier = 4               # from tier 4 up: only what the band names changes
core = "#ffffff"

A file core doesn't have, such as a new system under systems/, is a new definition. Its ids get your prefix, and it has to be complete: a new system needs everything core's systems have.

Added content is checked along with core's. A module's faction must exist, a recipe must be written for the module's first tier, and a structure's site must name a system that exists. Errors give the file, the row and what was expected.

A structure's [structure.services] lists what it offers whoever docks: guests = [...] for anyone its faction lets dock, and patrons = [{ rung = 2, services = [...] }] for anyone who has reached that rung of the keeper's patronage (1 is the lowest). A written guests list is the whole of it. Left out, a kind with pads gives guests the pad, fitting, the shelf, the painter and hull repair, plus patronage if it takes patronage, and a kind without pads gives them nothing. To keep storage or the pads for patrons, leave them out of guests and put them in a patrons row. A base of yours offers everything, and only a base has a forge, refinery, workshop, shipyard and building.

Services (guests, patrons)

dock The pads: you may dock, and while you're on one the pad patches your hulls.
fitting Fitting and unfitting modules on your ships, from your hold or from what you bought here.
shop Buying from the shelf (shop, plus each rung's).
painter Having a ship painted from the painter's list (paints, plus each rung's).
repair Hull repairs at the pad, for credits.
patronage Giving its faction credits, climbing the faction's rungs.
storage A hangar of yours here: materials and modules kept, sold, loaded and stowed; module repairs, scrapping and salvage; loadouts from stock; crews that call it home unload here, and haulers run to it.
crews Ships parked and pilots hired here; fleets formed here, sent out from here and told to call it home.

Changing things

To change something another pack defines, write a patch that lists the fields to change. In a file of rows, each [[patch.<kind>]] row names its target by id. A file that holds a single definition (systems/stipend.toml, galaxy.toml, rules.toml) takes one [patch] table.

# content/modules.toml
[[patch.module]]
id = "ministry_cargo_pod"
scale = { price = 1.2 }
was = { price = 30 }
# content/systems/stipend.toml
[patch]
scale = { "belts[outer].regrowth" = 1.5 }
min = { "belts[inner].fields" = 8 }
remove = { "belts[outer].ores" = ["manganite"] }

[[patch.add.belts]]       # a row added to the system's belts
id = "glass"
name = "The Glass Belt"
radius = 7400.0
width = 300.0
fields = 3
ores = { ferrite = 60, cobaltine = 40 }
reserve = 600.0
regrowth = 30.0

Fields are named by path: a dot goes into a table, and [id] picks a row from a list by its id. Rows you add to a list get your prefix (example:glass).

Operation What it does
set Sets a field. If the field doesn't exist, it's created and the report notes it.
replace Replaces a whole table or list.
add Adds to a number, or appends rows to a list. Each row needs a new id.
scale Multiplies a number. Whole-number fields are rounded.
min Raises a number to at least this value.
max Lowers a number to at most this value.
remove Removes rows from a list (by id or value) or keys from a table. Removing something that isn't there is an error.
was Not an operation: the value the field had when you wrote the patch. If it has changed since, the report marks the patch stale.

Every pack's patches run in phases: new definitions first, then set and replace, then add, scale, min and max, then remove. The merged content is checked last. The order of packs doesn't change the result, with one exception: when two packs set the same field to different values, the later pack wins. If it depends on the other pack, that's expected and goes unreported; otherwise the report lists both.

Rules

A rule makes something happen without code: when this happens, if that holds, do this. Rules are [[rule]] rows in rules.toml, beside core's tunables. Core's own objectives and achievements run as rules, so every word below is proven by the game itself. A rule fires on the tick its trigger goes true, once unless repeat = true. after chains it behind another rule, begin runs effects when it begins, and early is the letter that arrives when a chained goal was already met. Ids and flags take your prefix; what a rule refers to is written in full.

# rules.toml: the station stands a first round; Stipend pays a slow drip
[[rule]]
id = "first_round"                   # becomes example:first_round
when = { event = "docked", site = "Starbase Perseverance" }
do = [
  { credits = 500 },
  { letter = { title = "On the house", body = "{pilot}, the first round is the station's." } },
]

[[rule]]
id = "slow_drip"
when = { every = 600 }
if = [{ system = "stipend" }, { flag = { not = "example:dry" } }]
repeat = true
do = [{ materials = { ferrite = 20 } }]

The words a rule can use, from this build:

Triggers (when)

event The sim raised that event this tick: { event = "docked", site = "Opportunity" }; the events and their filters are listed below.
goal An objective's goal is met (objectives.toml lists the kinds): counted kinds measure since the rule began, the rest are true right now; career = true counts over the whole career.
patronage Your patronage of a faction crossed reached credits: { patronage = { faction = "union:union", reached = 5000 } }.
every Every so many seconds since the rule began: { every = 120 }.
start The first tick of a game, or the tick the rule begins: { start = true }.

Events (when = { event = ... })

band_cleared A band's last ship is gone. Filters: faction, tier, system.
site_revealed A signature resolved into a site (by its content name). Filters: site.
docked Your flagship docked (site by name, structure by kind). Filters: site, structure.
undocked Your flagship left a pad.
arrived Your flagship came out of a gate. Filters: system, site.
jumped Your flagship went through a gate; system is the one it left. Filters: system.
level_up The pilot reached a level. Filters: level.
achievement An achievement was earned. Filters: id.
structure_built A structure you built stands. Filters: structure.
structure_taken A structure changed hands to you. Filters: structure.
frontier A beat at a frontier (disabled, boarding, reclaimed, arrived, gate_awake, wave, secured, unguarded, landing, claimed). Filters: beat, system.
hull_built A hull left one of your slips. Filters: hull.
hull_researched A slip worked out a hull's blueprint. Filters: hull.
blueprint_learned You can forge a module to a new tier. Filters: module.
battle_ended A battle went quiet (won, lost, retreated). Filters: outcome.
ship_lost A ship of yours was destroyed.
rule_fired A rule fired, the tick before. Filters: rule.

Conditions (if)

goal A goal that is true right now holds: { goal = { kind = "level", level = 5 } }.
patronage You have given a faction at least so much: { patronage = { faction = "union:union", at_least = 400 } }.
flag A flag is set, { flag = "union:struck" }, or not, { flag = { not = "union:struck" } }.
fired A rule has fired, { fired = "union:welcome" }, or has not, { fired = { not = "union:welcome" } }.
system Your flagship is in that system: { system = "stipend" }.
holder Who keeps a structure, by its name: { holder = { site = "Union Hall", who = "player" } }; who is player, nobody or faction:<id>; system names another system than yours.
chance The world's dice say so, deterministically: { chance = 0.3 }.

Effects (do, begin)

credits Pays credits: { credits = 2000 }.
xp Grants experience: { xp = 150 }.
materials Delivers to your home hangar: { materials = { ferrite = 200 } }.
module A module at its first tier, level 1, to your home hangar: { module = "long_hold" }.
hull Learns a hull's blueprint: { hull = "ox" }.
blueprint Learns a module's blueprint up to a tier: { blueprint = { module = "drill", tier = 3 } }.
paint A paint any dock applies from now on: { paint = "union:rust" }.
letter A letter, as written ({pilot} and the other pilot tokens work): { letter = { title = "...", body = "..." } }.
log A log line: { log = { text = "...", tone = "good" } }; tones are info, good, loot, bad; with an id (the pack's prefix, like a letter's) a catalog may restate it under log-<id>.text.
spawn A band from bands.toml, hostile to you, near a site by name or "player": { spawn = { band = "raiders", near = "player", levels = [2, 4] } }; faction has it fly as a faction's, system places it elsewhere.
reveal Resolves a site's signature, by its name: { reveal = "The Lull" } (or { reveal = { site, system } }).
flag Sets a flag, { flag = "union:struck" }, or clears one, { flag = { clear = "union:struck" } }; a pack's flags carry its prefix.
achievement Records an achievement earned: { achievement = "first_blood" }.
holder A structure changes hands: { holder = { site = "Union Hall", who = "player" } }; no garrison is posted.

Text

A pack speaks through Fluent files under text/, one folder per locale named by its language tag (en, de, pt-BR). Every .ftl in a folder joins that locale's catalog after core's English and after the packs loaded before yours, so a later file may restate a message. A row's name and description are plain strings in content/; a catalog restates them under the row's derived id, <kind>-<id> with the field as an attribute, a namespaced id writing : as -- (structure-union--hall). Whatever no catalog restates reads as the row wrote it, and a locale falls back along its tag (de-AT, then de) to English. A pack of text alone is a language the player chooses on the title screen; a content pack's text travels with it into the games it is part of. The loader checks every file and refuses by name a line that doesn't parse, a message defined twice, and a folder that isn't a locale.

Names and descriptions aren't all. A rule's letter with an id (letter = { id = "union:welcome", ... }, the pack's prefix like a flag's) is restated under letter-union--welcome with .title and .body, the pilot's name arriving as { $pilot } and the pronoun tokens as $they, $their, $is. An objective is objective-<id> with .title, .brief and its letters as .begin-title, .done-body, .early-title, the pirates' words arriving as $pirates and $Pirate. A faction's rungs sit on its row as .rung-1-name and .rung-1-description. A rule's log line with an id is log-<id> with .text. A site content placed in an authored system is site-<system>-<slug> with .name (site-stipend-the-lull). A letter or a log line without an id, and the names of places the world makes, read as written in every language.

# text/de/sim.ftl: a core row in German, one of core's messages restated,
# an objective and a rule's letter
structure-outpost =
    .name = Außenposten
    .description = Ein Dock, das dir gehört.

core-structure-built-dock = { $structure } steht. Du kannst dort andocken.

objective-first_light =
    .title = Erstes Licht
    .begin-title = Ein Wort vom Minister

letter-union--welcome =
    .title = Ein Wort von der Union
    .body = { $pilot }, willkommen in der Halle.

Art and music

Art and music travel under assets/, found by path, never named in content. A hull's hangar card is hulls/<hull>.portrait.png and its top-down map view hulls/<hull>.map.png, each with an optional .paint.png beside it (the livery's shading in white, tinted with the owner's color; without it the ship shows its panels unpainted). A structure kind's marker on the map is structures/<kind>.png, a namespaced id writing : as -- (structures/union--hall.png). Music is music/<slug>.mp3 or .ogg, titled by music/tracks.json ({ "<slug>": "<title>" }) and played among the game's own pieces. A captain's portrait part is portraits/<kin>/<kind>/<id>.svg (a kin and its parts are rows of kins.toml): shapes only, 256 KB at most. The game never shows the file itself: it rebuilds what it draws from a short list of shapes and plain attributes and drops the rest (scripts, styles, links, images, gradients), naming what it dropped. That is the one SVG the game reads. Images are PNG, WebP or JPEG, 4 MB each at most; audio 16 MB; a pack's assets 96 MB in all. Any other file under assets/ is left alone.

Packs apply in load order: a later pack's file at a path replaces an earlier pack's, and a pack's hull art at the game's own paths replaces the game's. A pack of art or music alone, with no content and no text, is the device's and plays everywhere, the way a pack of text alone is a language. Assets never change what happens, so they never enter a save.

The report

Loading a pack produces a report. The Packs panel shows what the pack adds and changes, by kind (Adds 1 faction, 3 modules, 2 paints, 1 structure · changes 1 module), with the names when you hover. The report also records conflicts between packs, stale patches and fields a patch created. A pack that can't load shows the error instead, with the file and the row. From a checkout of the game, make pack P=path/to/folder prints the same report on the command line (V=1 lists what every patch did) and exits non-zero when the pack won't load.

A save records each pack it uses: its id, its version and a hash of its files. On a device missing one of them, the save doesn't open and names the pack it needs.

The files

Your files use the same fields as core's. Each core file starts with comments that describe its rows; the links go to the files as this build ships them.

File What it holds
achievements.toml Achievements: milestones over a whole career.
aliases.toml Aliases: retired ids and what they became.
bands.toml Bands: the groups enemy ships fly in, from Stipend's pirates to the Empire.
bases.toml The bases you run: a template saying what a base does, one tier saying how well.
classes.toml Hull classes: frigate, destroyer, battleship, titan and platform.
effects.toml Effects: how a gun's shot and its hit are drawn.
explored.toml What the generator builds explored systems from, past Two Cradle.
facilities.toml Dock facilities (forge, refinery, shipyard, storage, defense, tow, sensors and repair) and what each level does.
factions.toml Factions: everyone who makes gear, holds places or flies ships.
galaxy.toml The galaxy: which systems there are and how they connect.
guide.toml The guide in the Index: articles on how the game works.
hulls.toml Hulls: each ship's class, role, stats, hardpoints and price.
industry.toml Industry: refining, compacting and fabricating materials across the tiers.
instances/pocket.toml The inside of a pocket, behind its hidden gate.
kins.toml Kins: the peoples your captains come from. A kin says how often its captains come and how their faces are drawn.
materials.toml Materials: twenty tiers, five kinds each.
modules.toml Modules: the gear that fits a hull's hardpoints (weapon, shield, armor and aux).
names.toml Captains' names: lists of first or last names for a kin, each tagged with the presentations (presentations.toml) it fits.
naming.toml Naming ideas for ships: the hangar's naming menu (the tag beside a ship's name in Fitting). Two choices combine.
objectives.toml The Ministry of Opportunity's objective chain and its bounty board.
paints.toml Paint jobs. A paint colors a ship's livery panels.
pockets.toml Pockets: small hidden places behind hidden gates, their guards and their vaults.
portraits.toml Painted captains: one row per bust, of a kin (kins.toml) and a presentation (presentations.toml), whose names (names.toml) a captain wearing it is given.
presentations.toml How a captain presents.
rules.toml Rules that hold in every system: repairs, experience, the shipyard and the Ministry's captains, and the [[rule]] rows that make things happen (when this happens, if that holds, do this; the end of this file documents them).
structures.toml Structures: built places in a system, such as a faction's hall, each with a holder and services.
systems/stipend.toml Stipend, the home system: where a new game starts (galaxy.toml) and the Ministry of Opportunity keeps its planet.
systems/two_cradle.toml Two Cradle, the binary system through the Stipend Gate.
warp.toml The warp gate beside Severance: the research that finishes it, and the kit each expedition into explored space takes with it.
workshop.toml The Workshop at Opportunity: what upgrading a module one level costs.

The Union

The example pack: an industrial faction with a hall in Stipend and one in Two Cradle. Give it credits at a hall to climb its ranks; each rank unlocks gear or paint. These are its files as they ship.

pack.toml

# The Union: an industrial faction with a hall in Stipend and one in Two
# Cradle. Giving it credits at a hall climbs its ranks, and each rank
# unlocks paint, a bigger hold or a better drill.

[pack]
id = "union"
name = "The Union"
version = "0.1.0"
kinds = ["content"]
description = "A union of miners and haulers with halls in Stipend and Two Cradle. Give at a hall to rise through its ranks and unlock Union paints, a bigger hold and better drills."

[dependencies]
core = "*"

content/factions.toml

# The Union. Its patronage rungs are what giving it credits at a hall earns.
# Core's factions.toml lists every field a faction can have.
#
# Each rank sells the Long Hold and the Survey Drill at a band of tiers, at
# four times their list price, and teaches the blueprints of the band the
# rank before it sold, so you can forge them at your own bases. The top rank
# sells nothing new; it teaches the last band.

[[faction]]
id = "union"
name = "The Union"
one = "Union"
common = "the Union"
color = "#d08a2c"
stance = "friendly"
description = "A union of miners and haulers, started by pilots who flew the Ministry's free ships out to the belts and wanted a fair price for what they brought back. It keeps halls in Stipend and Two Cradle."

[faction.patronage]
markup = 4

[[faction.patronage.rungs]]
name = "Associate I"
given = 50_000
description = "Your name goes on the board by the door. The shelf sells you the Long Hold and the Survey Drill up to tier 3, and your ships can wear Union rust."
shop = [{ module = "union:long_hold", tiers = [1, 3] }, { module = "union:survey_drill", tiers = [1, 3] }]
paints = ["union:rust"]

[[faction.patronage.rungs]]
name = "Associate II"
given = 500_000
description = "The shelf adds tiers 4 to 6, and the Union teaches you to make tiers 1 to 3 yourself."
shop = [{ module = "union:long_hold", tiers = [4, 6] }, { module = "union:survey_drill", tiers = [4, 6] }]
blueprints = [{ module = "union:long_hold", tier = 3 }, { module = "union:survey_drill", tier = 3 }]

[[faction.patronage.rungs]]
name = "Associate III"
given = 5_000_000
description = "The shelf adds tiers 7 to 9, and the blueprints go up to tier 6."
shop = [{ module = "union:long_hold", tiers = [7, 9] }, { module = "union:survey_drill", tiers = [7, 9] }]
blueprints = [{ module = "union:long_hold", tier = 6 }, { module = "union:survey_drill", tier = 6 }]

[[faction.patronage.rungs]]
name = "Member I"
given = 25_000_000
description = "A membership card, Union orange for your ships and 10% off everything on a Union shelf. The shelf adds tiers 10 to 12, and the blueprints go up to tier 9."
shop = [{ module = "union:long_hold", tiers = [10, 12] }, { module = "union:survey_drill", tiers = [10, 12] }]
blueprints = [{ module = "union:long_hold", tier = 9 }, { module = "union:survey_drill", tier = 9 }]
paints = ["union:orange"]
discount = 0.9

[[faction.patronage.rungs]]
name = "Member II"
given = 75_000_000
description = "The shelf adds tiers 13 to 15, and the blueprints go up to tier 12."
shop = [{ module = "union:long_hold", tiers = [13, 15] }, { module = "union:survey_drill", tiers = [13, 15] }]
blueprints = [{ module = "union:long_hold", tier = 12 }, { module = "union:survey_drill", tier = 12 }]

[[faction.patronage.rungs]]
name = "Partner I"
given = 225_000_000
description = "The Union's survey reports help every ship of yours mine 5% faster. The shelf adds tiers 16 to 18, and the blueprints go up to tier 15."
shop = [{ module = "union:long_hold", tiers = [16, 18] }, { module = "union:survey_drill", tiers = [16, 18] }]
blueprints = [{ module = "union:long_hold", tier = 15 }, { module = "union:survey_drill", tier = 15 }]
bonuses = [{ stat = "mining", percent = 5 }]

[[faction.patronage.rungs]]
name = "Partner II"
given = 750_000_000
description = "The shelf adds tiers 19 and 20, and the blueprints go up to tier 18."
shop = [{ module = "union:long_hold", tiers = [19, 20] }, { module = "union:survey_drill", tiers = [19, 20] }]
blueprints = [{ module = "union:long_hold", tier = 18 }, { module = "union:survey_drill", tier = 18 }]

[[faction.patronage.rungs]]
name = "Patron"
given = 2_000_000_000
description = "Your name goes over the hall's front doors, and the Union teaches you to make tiers 19 and 20."
blueprints = [{ module = "union:long_hold", tier = 20 }, { module = "union:survey_drill", tier = 20 }]

content/modules.toml

# The Union's gear. Ids are written without the prefix; the game adds it
# (deep_drill becomes union:deep_drill).

[[module]]
id = "deep_drill"
name = "Union Deep Drill"
faction = "union:union"
tiers = [1, 3]
slot = "aux"
price = 140
description = "A Union-made drill with a heavier head than the Ministry's Mining Laser. It brings in about a third more ore."
miner = { yield_per_sec = 2.1, range = 240.0 }
scrap = { materials = { scrap_metal = 3, circuitry = 1 } }
forge = { materials = { ferrite = 20, scrap_metal = 4, circuitry = 1 }, credits = 60 }

[[module]]
id = "long_hold"
name = "Union Long Hold"
faction = "union:union"
tiers = [1, 20]
slot = "aux"
price = 90
description = "A Union cargo hold that carries half again what the Ministry's Cargo Pod does, so a hauler makes fewer trips."
cargo = { capacity = 45.0 }
scrap = { materials = { scrap_metal = 4 } }
forge = { materials = { ferrite = 22, scrap_metal = 2 }, credits = 35 }

# What the pack asks of core: the Ministry's cargo pod is a little dearer
# where the Union sells holds. `was` records the price this was written
# against; the report says so when core moves it.
[[patch.module]]
id = "ministry_cargo_pod"
scale = { price = 1.2 }
was = { price = 30 }

[[module]]
id = "survey_drill"
name = "Union Survey Drill"
faction = "union:union"
tiers = [1, 20]
slot = "aux"
price = 300
description = "The drill the Union's survey crews use. It reaches further and digs faster than the Deep Drill, and the hall sells it only to its own."
miner = { yield_per_sec = 2.6, range = 300.0 }
scrap = { materials = { scrap_metal = 4, circuitry = 2 } }
forge = { materials = { ferrite = 24, scrap_metal = 6, circuitry = 2 }, credits = 90 }

content/naming.toml

# A naming scheme the Union adds to the hangar's naming menu (core's
# content/naming.toml says how rows read). The tools of the trade.

[[scheme]]
id = "tools"
name = "Union tools"
words = ["Hammer", "Anvil", "Pick", "Crowbar", "Lantern", "Winch", "Wedge", "Chisel", "Rivet", "Plumb Line", "Spanner", "Tongs"]

content/paints.toml

# Union colors. No dock sells them: a rung of patronage at a Union Hall
# earns each, and any dock applies it after that (like a vault's paint).

[[paint]]
id = "rust"
name = "Union rust"
color = "#9a4a1e"
price = 250
sold = false
description = "The dark red-brown of the first Union haulers. They chose it because it hid the rust."

[[paint]]
id = "orange"
name = "Union orange"
color = "#e07a1f"
price = 450
sold = false
description = "Union rules say anything carrying ore has to be easy to spot in a belt. This is the orange they settled on."

content/rules.toml

# The Union's rules: what its hall says to a guest and what its top ranks
# bring, written as data. Core's rules.toml documents every word a rule can
# use. The ids here become union:welcome, union:partner and union:patron;
# what a rule refers to is written in full.

# The first time you dock at a Union Hall, anywhere.
[[rule]]
id = "welcome"
when = { event = "docked", structure = "union:hall" }
do = [
  { letter = { id = "union:welcome", title = "Welcome to the Union Hall", body = "{pilot},\n\nWe're the miners and haulers who work Stipend's belts, and lately Two Cradle's too. Anyone can dock here, buy a Deep Drill and have a hull patched.\n\nIf you want more than that, give at the front desk. Your name goes on the board, and as your total grows you become an Associate, then a Member, then a Partner. Each rank puts better holds and drills on the shelf, and from the second rank on we teach you to make what the rank before it sold.\n\nTove Brask\nHall Secretary" } },
]

# Partner I (225,000,000 given, factions.toml) comes with the Union's survey
# reports: the rung's +5% mining.
[[rule]]
id = "partner"
when = { patronage = { faction = "union:union", reached = 225_000_000 } }
do = [
  { letter = { id = "union:partner", title = "You're a Union Partner", body = "{pilot},\n\nYou've given enough to make you a Union Partner. From now on you'll get our survey reports, which should help all your ships mine a little faster, and the shelf sells you our best holds and drills.\n\nTove Brask\nHall Secretary" } },
]

# Patron (2,000,000,000 given) is the top of the board.
[[rule]]
id = "patron"
when = { patronage = { faction = "union:union", reached = 2_000_000_000 } }
do = [
  { letter = { id = "union:patron", title = "You're the Union's Patron", body = "{pilot},\n\nThere's nobody above you on the board now. Your name is going up over the hall's front doors, and we've taught your forges the last of what we make. Thank you for everything you've given.\n\nTove Brask\nHall Secretary" } },
]

content/structures.toml

# The Union's halls: one in Stipend, one in Two Cradle. A guest docks, buys
# Union gear from the shelf, has a ship painted in Union colors and gives
# the Union credits; patronage climbs rungs that put more on the shelf. The
# hall keeps nothing of yours: no storage, no slips, no crews work out of it
# (content/structures.toml says what a structure can be).

[[structure]]
id = "hall"
name = "Union Hall"
description = "Union pilots stop here between runs to buy drills and pay their dues. Guests can dock, buy a Deep Drill and have their hulls patched. Give at the front desk to rise through the Union's ranks."
faction = "union:union"
color = "#d08a2c"
radius = 110.0
look = { starbase = 2 }

[structure.services]
dock = true
shop = ["union:deep_drill"]
paints = []
patronage = true

# Stipend: between Opportunity's orbit and the Inner Belt, on the far side
# of the star from the planet.
[[structure.sites]]
system = "stipend"
name = "Union Hall"
angle = 4.2
orbit = 4300.0

# Two Cradle: round the Lull, outside its belt.
[[structure.sites]]
system = "two_cradle"
name = "Union Hall"
star = "lull"
angle = 0.5
orbit = 3400.0

text/de/union.ftl

# The Union in German: its rows' names and descriptions, its rungs and its
# letters, restated under the ids a catalog addresses them by (<kind>-<id>,
# with `:` written as `--`). Anything not restated here reads as content/
# wrote it.

faction-union--union =
    .name = Die Union
    .one = Unionist
    .common = die Union
    .description = Eine Union von Bergleuten und Schleppern, gegründet von Piloten, die die kostenlosen Schiffe des Ministeriums zu den Gürteln flogen und einen fairen Preis für das wollten, was sie zurückbrachten. Sie hat Hallen in Stipend und Two Cradle.
    .rung-1-name = Anwärter I
    .rung-1-description = Dein Name kommt an die Tafel neben der Tür. Das Regal verkauft dir den Langraum und den Prospektionsbohrer bis Stufe 3, und deine Schiffe dürfen Unionsrost tragen.
    .rung-2-name = Anwärter II
    .rung-2-description = Das Regal führt jetzt die Stufen 4 bis 6, und die Union bringt dir bei, die Stufen 1 bis 3 selbst herzustellen.
    .rung-3-name = Anwärter III
    .rung-3-description = Das Regal führt jetzt die Stufen 7 bis 9, und die Baupläne reichen bis Stufe 6.
    .rung-4-name = Mitglied I
    .rung-4-description = Ein Mitgliedsausweis, Unionsorange für deine Schiffe und 10 % Rabatt auf alles in einem Unionsregal. Das Regal führt jetzt die Stufen 10 bis 12, und die Baupläne reichen bis Stufe 9.
    .rung-5-name = Mitglied II
    .rung-5-description = Das Regal führt jetzt die Stufen 13 bis 15, und die Baupläne reichen bis Stufe 12.
    .rung-6-name = Partner I
    .rung-6-description = Mit den Prospektionsberichten der Union baut jedes deiner Schiffe 5 % schneller ab. Das Regal führt jetzt die Stufen 16 bis 18, und die Baupläne reichen bis Stufe 15.
    .rung-7-name = Partner II
    .rung-7-description = Das Regal führt jetzt die Stufen 19 und 20, und die Baupläne reichen bis Stufe 18.
    .rung-8-name = Schirmherr
    .rung-8-description = Dein Name kommt über die Eingangstür der Halle, und die Union bringt dir bei, die Stufen 19 und 20 herzustellen.

structure-union--hall =
    .name = Unionshalle
    .description = Unionspiloten legen hier zwischen zwei Touren an, um Bohrer zu kaufen und ihre Beiträge zu zahlen. Gäste können andocken, einen Tiefbohrer kaufen und ihre Rümpfe flicken lassen. Wer am Empfang gibt, steigt in den Rängen der Union auf.

module-union--deep_drill =
    .name = Union-Tiefbohrer
    .description = Ein Bohrer aus Unionsfertigung mit einem schwereren Kopf als der Abbaulaser des Ministeriums. Er bringt etwa ein Drittel mehr Erz ein.

module-union--long_hold =
    .name = Union-Langraum
    .description = Ein Unionsladeraum, der anderthalbmal so viel fasst wie die Frachtkapsel des Ministeriums. Ein Schlepper muss seltener fahren.

module-union--survey_drill =
    .name = Union-Prospektionsbohrer
    .description = Der Bohrer, mit dem die Prospektionstrupps der Union arbeiten. Er reicht weiter und bohrt schneller als der Tiefbohrer, und die Halle verkauft ihn nur an ihre eigenen Leute.

paint-union--rust =
    .name = Unionsrost
    .description = Das dunkle Rotbraun der ersten Unionsschlepper. Sie haben es gewählt, weil man darauf den Rost nicht sieht.

paint-union--orange =
    .name = Unionsorange
    .description = Nach Unionsregel muss alles, was Erz trägt, im Gürtel gut zu sehen sein. Auf dieses Orange hat man sich geeinigt.

# The letters its rules send, by the ids rules.toml gives them; { $pilot }
# is the pilot's name.
letter-union--welcome =
    .title = Willkommen in der Unionshalle
    .body =
        { $pilot },

        wir sind die Bergleute und Schlepper, die in den Gürteln von Stipend arbeiten, und seit Kurzem auch in denen von Two Cradle. Hier kann jeder andocken, einen Tiefbohrer kaufen und einen Rumpf flicken lassen.

        Wer mehr will, gibt am Empfang. Dein Name kommt an die Tafel, und mit der Summe steigst du auf: erst Anwärter, dann Mitglied, dann Partner. Mit jedem Rang kommen bessere Laderäume und Bohrer ins Regal, und ab dem zweiten Rang bringen wir dir bei, selbst herzustellen, was der Rang davor verkauft hat.

        Tove Brask
        Hallensekretärin

letter-union--partner =
    .title = Du bist Partner der Union
    .body =
        { $pilot },

        du hast genug gegeben, um Partner der Union zu sein. Ab jetzt bekommst du unsere Prospektionsberichte, mit denen alle deine Schiffe etwas schneller abbauen sollten, und das Regal verkauft dir unsere besten Laderäume und Bohrer.

        Tove Brask
        Hallensekretärin

letter-union--patron =
    .title = Du bist Schirmherr der Union
    .body =
        { $pilot },

        über dir steht jetzt niemand mehr an der Tafel. Dein Name kommt über die Eingangstür der Halle, und wir haben deinen Schmieden das Letzte beigebracht, was wir herstellen. Danke für alles, was du gegeben hast.

        Tove Brask
        Hallensekretärin

# The naming scheme the Union adds (content/naming.toml).
scheme-union--tools =
    .name = Unionswerkzeug
    .words = Hammer, Amboss, Spitzhacke, Brecheisen, Laterne, Winde, Keil, Meißel, Niete, Lot, Schraubenschlüssel, Zange

In the Packs panel: Adds 1 faction, 3 modules, 2 paints, 3 rules, 1 scheme, 1 structure · changes 1 module.

Not possible yet

Packs are new and will change from build to build. This page describes the build named at the top.