7.8 KiB
Derived Values (current tuned state)
Everything here is derived from targets.md under the rules in
rules.md, and mirrors the config files. Item threats, ship threats,
ratios, and belt checks are verified by tools/threat_report.py — re-run
it after any recipe or material change and update this file when values
move. Combat stats were tuned empirically against the arena suite in
bin/balancing/data/balancing.toml (round-by-round record in
history.md).
Economy constants
scrap_per_threat = 0.25— 1 scrap per 4 threat destroyed (a cruiser kill drops ~59 scrap); threat(scrap) = 4.- Scrap smelting: 1 scrap → 1 iron_ingot, 1 s — deliberately value-losing; reprocessing is the value-preserving path.
- Reprocessing: 4 scrap per cycle, 4 s; full-pool weights iron_ingot 30 / copper_ingot 30 / silicon 20 / voidsteel 20 → threat(voidsteel) = (4·4 + 4)/0.2 = 100.
debris_despawn_seconds = 120(a capital kill drops hundreds of scrap, collected one per salvage cycle).
Recipes and item threats
(dur in seconds; threat is per output unit)
| item | recipe | dur | out | threat |
|---|---|---|---|---|
| iron_ore / copper_ore | miner | 1 | 1 | 1 |
| quartz | miner (deposit) | 2 | 1 | 2 |
| iron_ingot | 1 iron_ore | 1 | 1 | 2 |
| copper_ingot | 1 copper_ore | 1 | 1 | 2 |
| silicon | 1 quartz | 2 | 1 | 4 |
| steel_plate | 2 iron_ingot | 3 | 1 | 7 |
| copper_wire | 1 copper_ingot | 1 | 2 | 1.5 |
| copper_coil | 2 copper_wire | 1.5 | 1 | 4.5 |
| building_block | 2 steel_plate | 2 | 4 | 4 |
| control_chip | 1 silicon + 2 copper_wire | 5 | 1 | 12 |
| capacitor_bank | 2 copper_coil + 1 silicon | 5 | 1 | 18 |
| hardened_steel | 3 steel_plate | 12 | 1 | 33 |
| ceramic_plate | 2 quartz | 4 | 1 | 8 |
| drive_unit | 2 steel_plate + 2 copper_coil + 1 control_chip | 8 | 1 | 43 |
| voidsteel_plate | 1 voidsteel + 1 hardened_steel | 8 | 1 | 141 |
| capital_core | 2 voidsteel + 1 capacitor_bank + 1 control_chip | 10 | 1 | 240 |
Shortcut recipes (drop-only; item threat stays defined by the base path
via the max rule): shortcut_steel_plate 3 iron_ore → 1 plate (2 s,
level 1), shortcut_control_chip 2 quartz → 1 chip (4 s, level 2),
shortcut_hardened_steel 4 iron_ingot → 1 hardened (8 s, level 2).
Ratio curve realized: t1 all 1:1 (miner:smelter); t2 clean 2:3 (ingot→plate, wire→coil); t3 strange — 2:5 (silicon→chip), 3:5 (coil→capacitor), 3:4 (plate→hardened, plate→drive); t4 inverted 3:2 (hardened→voidsteel_plate). Belt check: worst input demand 1.33 items/s, under the ~2/s single-belt cap everywhere.
Module prefabs
(contribution = item threat + module production time)
| module | recipe | dur | mod. time | contribution |
|---|---|---|---|---|
| railgun_s | 1 copper_coil | 1 | 1 | 6.5 |
| salvager | 1 steel_plate + 2 copper_wire | 2 | 1 | 13 |
| repair_tool | 1 steel_plate + 2 copper_wire | 2 | 1 | 13 |
| armor_plates | 4 steel_plate | 3 | 1 | 32 |
| maneuvering_thrusters | 1 steel_plate + 1 copper_coil | 2 | 1 | 14.5 |
| sensor_booster | 2 copper_wire + 1 copper_coil | 2 | 1 | 10.5 |
| afterburner | 2 copper_coil + 1 steel_plate | 3 | 1 | 20 |
| weapon_stabilizer | 1 steel_plate + 1 copper_coil | 2 | 1 | 14.5 |
| weapon_primer | 1 capacitor_bank + 1 copper_coil | 4 | 2 | 28.5 |
| weapon_upgrade | 1 control_chip + 1 copper_coil | 4 | 2 | 22.5 |
| railgun_m | 1 capacitor_bank + 2 steel_plate + 1 copper_coil | 4 | 3 | 43.5 |
| drone_bay | 1 control_chip + 2 steel_plate + 1 copper_coil | 4 | 3 | 37.5 |
| railgun_l | 1 capacitor_bank + 2 hardened_steel + 1 ceramic_plate | 6 | 4 | 102 |
| drone_hangar | 1 voidsteel_plate + 2 control_chip + 1 drive_unit | 10 | 6 | 224 |
Ships
(fitted = hull item + ship base time + default loadout; the default
loadouts are the default_modules used by enemy waves and are
geometry-validated against the hull grids)
| ship | hull recipe | dur | base | default loadout | fitted |
|---|---|---|---|---|---|
| drone | 1 iron_ingot | 1 | 1 | railgun_s | 10.5 |
| frigate | 2 steel_plate + 1 copper_wire | 2 | 2 | 2× railgun_s, maneuvering_thrusters | 47 |
| destroyer | 3 steel_plate + 2 copper_coil | 4 | 3 | 3× railgun_s, armor_plates, sensor_booster | 99 |
| cruiser | 2 hardened_steel + 2 control_chip | 6 | 4 | 2× railgun_m, armor_plates, maneuvering_thrusters | 233.5 |
| battlecruiser | 3 hardened_steel + 2 control_chip + 1 drive_unit | 8 | 5 | 3× railgun_m, armor_plates, 2× railgun_s | 354.5 |
| battleship | 3 voidsteel_plate + 1 drive_unit + 2 control_chip | 10 | 6 | railgun_l, 2× railgun_m, weapon_stabilizer, 2× railgun_s | 722.5 |
| dreadnought | 5 voidsteel_plate + 1 capital_core + 2 drive_unit | 12 | 8 | 3× railgun_l, 4× armor_plates, railgun_s | 1491.5 |
| carrier | 5 voidsteel_plate + 1 capital_core + 2 drive_unit | 12 | 8 | drone_hangar, 2× railgun_m, 2× armor_plates, sensor_booster | 1436.5 |
Combat stats
(arena-converged, 2026-07; see history.md rounds 1–5)
Weapons: railgun_s 2 dmg × 2.0 Hz (4.0 DPS), range 50 m; railgun_m 14 × 1.5 (21), range 70; railgun_l 52 × 0.8 (41.6), range 100.
Hull HP (15/threat prior + empirical trims): drone 60, frigate 300, destroyer 550, cruiser 1500, battlecruiser 2400, battleship 6300, dreadnought/carrier 24000.
Mobility ladder (speed m/s | main accel | maneuvering | angular | max rot): drone 45|60|30|12|6, frigate 35|45|22|8|4, destroyer 30|35|18|6|3, cruiser 24|25|12|4|2, battlecruiser 20|20|10|3|1.5, battleship 15|14|7|2|1, dreadnought/carrier 10|8|4|1|0.5. Sensors: 150/200/220/250/260/280/300/350 m.
Other modules: armor_plates +1200 HP; repair_tool 9 HP × 1 Hz, range 80; salvager range 60, cargo 20, 0.5 collections/s; afterburner ×1.6 speed +60 accel; maneuvering_thrusters ×1.2 speed +10 maneuvering; sensor_booster +50 m; weapon_upgrade ×1.2 damage; weapon_primer ×1.2 rate; weapon_stabilizer ×1.3 range ×0.8 rate.
Stations: HQ 5000 HP. Player station 3000 HP, 25 dmg × 1 Hz, range 120, scrap 40. Enemy station: 3000+1500x HP, 25+12x dmg, 1.0+0.1x Hz, range 120, scrap 40+30x (x = push level).
Pacing
Unlock ladder (level → unlocks; ← marks unlock_requires; starting
set at −1: drone, frigate, railgun_s, salvager, building_block recipe):
| level | ships | modules | recipes |
|---|---|---|---|
| 0 | destroyer | repair_tool, armor_plates | |
| 1 | maneuvering_thrusters, sensor_booster | shortcut_steel_plate | |
| 2 | cruiser | railgun_m, afterburner | shortcut_control_chip, shortcut_hardened_steel |
| 3 | weapon_stabilizer | ||
| 4 | battlecruiser ← cruiser | weapon_primer, weapon_upgrade | |
| 5 | drone_bay | ||
| 6 | battleship ← battlecruiser | railgun_l ← railgun_m | |
| 8 | dreadnought ← battleship | ||
| 9 | carrier ← battleship | drone_hangar |
Level 0's pool has exactly three entries (a full first dialog). Level 2 is the quartz gate: cruiser and railgun_m are the first schematics whose chains reach quartz; the shortcut outputs only become implicitly unlocked alongside them, so shortcuts cannot drop early.
Threat rate 2*x + 0.15*x*x (x = boss cycle counter), against the
factory-size curve with ~half the player's output assumed military:
| cycle x | rate (threat/s) | player military (≈ curve/2) |
|---|---|---|
| 2 | 4.6 | ~12 |
| 6 | 17.4 | ~30 |
| 15 | 63.8 | ~60 |
| 20 | 100 | ~75 |
| 24 | 134 | — |
Economy: starting_building_blocks = 200; expansion cost formula
300 + 50*x + 10*x*x (x = expansions already purchased: ~1 affordable
per cycle mid-game at ~1/3 of block income, stretching to 2–3 cycles
late — quadratic so costs outrun the roughly linear block income
gradually, never with a hard wall); artifact_win_count = 5 with
artifact_chance_formula = 0.05*x. Building costs: belt 2, splitter 3,
tunnels 5, miner 15, smelter 20, assembler 35, reprocessing plant 40,
salvage bay 25, shipyard 60 — averaging ≈18 blocks per placed building
(belts included), which meets the 4-minute doubling target at block
threat 4.