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.
Try one
-
Download the example pack, the Union, and unzip it. You get a folder,
union/, holdingpack.tomland acontent/folder. - 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.
- 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
- Every pack depends on
core, listed or not. If a dependency isn't loaded, the pack is refused and the error names it. -
gameand each dependency are version requirements:*is any version; a bare0.5or1.2.3is that version and anything compatible with it (up to the next minor below 1.0, the next major from 1.0 on);>=0.5, <0.7(also>,<=,=) must all hold, with a missing minor or patch read as 0. A pack written for another game version, or needing a pack at a version that isn't loaded, is refused by name before any game begins: “pack union is written for game versions 0.2; this is 0.1.0”. - Packs load after their dependencies, then in order of id, so the order is the same on every device. A pack can't depend on itself or be loaded twice, and dependencies can't form a circle.
- The Packs panel shows the
descriptionabove what the pack adds.
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.
-
When you define something, write its id without the prefix (
id = "deep_drill") and the game adds it. Writingunion:deep_drillalso works; another pack's prefix is an error. -
When you refer to something, write its full id:
faction = "union:union"for your own,scrap_metalorministryfor core's.
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
- Text without an id. A catalog can't restate text that has no id, so it reads as written in every language: a letter or log line a rule writes without an id, the places the world makes (wrecks, hideouts, pockets and a generated system's sites), and the module names on a rung's shelf. A catalog does restate the rest: names and descriptions, message keys, a rule's letters and log lines that have an id, a faction's rungs, and the sites content placed.
- Sound, icons and the structure itself. A pack draws hull views, structure markers, a captain's parts and each gun's shot, and brings music; sounds, icons for modules and materials, and a structure's own look up close are still the game's.
- New words. A rule can only use the triggers, conditions and effects listed above; a new one needs code. Reputation, prices and the bounty board aren't words yet.
- Sharing. Packs load from a folder on your device. A workshop, signed packs, and opening a save whose pack is missing come later.
Packs are new and will change from build to build. This page describes the build named at the top.