5.1 KiB
5.1 KiB
Balancing History
Chronological record of the balancing work: what was decided, what was
found, what changed. Current values live in derived.md; this file
explains how they got there.
2026-07-02/03 — rules and structural decisions
- Rules document written (now
rules.md): ratio curve, shortcut recipes, refactorability, cost archetypes, threat model, growth curve. - Scrap derived from threat (
scrap_per_threat), replacing authored per-ship scrap drops; scrap threat became the constant1/scrap_per_threat, removing the old min-scrap_drop derivation and its circularity. - Duplicate schematic drops removed (no level-ups); ship/module levels removed entirely — all time scaling lives in the threat rate, push scaling stays on stations. Mk2 upgrade recipes noted as the future per-item progression.
- Growth-curve rules added: escalating expansion costs, designed doubling time, growth limited by economy not waiting; resource deposits designed (deposit-gated mid resource in expansion territory).
- Production tree v2 decided: iron/copper everywhere (M-type asteroid), quartz in geodes (mid), voidsteel battle-forged from scrap (late); titanium dropped; lasers renamed to railguns, lasers reserved as a future weapon type.
2026-07-03 — targets, tree, numbers
- Balancing targets fixed: ≤2 h run, phases 1–5/6–14/15+, factory curve 25/60/120/150, threat ladder, 25-ship swarm, block roots.
- Tree structure drafted and numbers computed (recursive threat calculator); ratio curve realized; fitted ships within 96–124% of the strawman ladder (small end hot from fixed chain overhead — ladder later adopted the achieved values).
- Rule bugs found by the numbers work: the scrap→ingot smelter
recipe would inflate basic materials via the max rule (fixed:
scrap-consuming recipes are threat fallback only); recipe output
amounts were ignored (fixed: per-unit division); items downstream of
reprocessing-only items never resolved (fixed: fixpoint resolution);
a shortcut recipe resolving earlier than the base path silently
underpriced items (fixed: commit only when all eligible recipes are
computable). All four fixed in
ThreatCostCalculatorwith tests, and implemented intools/threat_report.py. - v2 tree written into the configs;
default_modulesloadouts geometry-validated (the numbers-pass loadouts for battlecruiser and dreadnought were geometrically impossible — L-modifiers don't fit beside full gun complements; corrected loadouts landed closer to the ladder).
2026-07-04 — combat stats, arena rounds 1–5
Initial stats derived from the anchors (weapon DPS ≈0.6/threat flat, hull 15 HP/threat, armor 20/threat, repair 2 HP/s/threat, station range 200).
- Round 1: concentrated fleets won all equal-threat cross-tier matchups flawlessly; glass beat armored; repair escort flawless; two stations shrugged off a 3× swarm. Changes: concentration tax on m/l gun damage (railgun_m 17→14, railgun_l 70→52), armor 640→1000, repair 25→12, station range 200→120. (Team-1 "bias" in mirrors later shown to be noise.)
- Round 2 (EHP-margin logging added): battleship +33% while dreadnought −37% (stabilizer range + opposing armor); glass still +11%. Changes: stabilizer range ×1.5→×1.3; per-hull trims introduced (BC 2700→2500, BS 7500→7000, DN/CV 15500→19000).
- Round 3 (narrow lanes — geometry fixed into the fixture): DN closed to −11%, BS +22%, swarm flipped to +14% over cruisers, glass +12% third time. Changes: armor 1000→1200, BC 2500→2000, BS 7000→6300, DN/CV 19000→22500.
- Round 4: glass-vs-armored resolved (+3% armored); noise floor established (~±10%/run: BS ignored a −10% EHP cut; repair drifted 14→24% untouched). Convergence policy adopted: two-round signals only, ±20% converged. Changes: BC 2000→2200, DN/CV 22500→24000; BS +23% accepted as doctrine texture (mechanical range edge vs. pure small fleets).
- Round 5 (durations logged; end-condition bug fixed upstream): TTK anchor validated (mirrors 23/71/95 s; DN-vs-swarm 214 s outlier accepted); dreadnought +3%, everything else inside band. Final changes: BC 2200→2400, repair 12→9 (persistent +24% escort margin). Combat pass declared converged.
2026-07-05/06 — pacing pass
- Unlock ladder set (starting set drone/frigate/railgun_s/salvager;
quartz gate at level 2; capitals at 8–9 with
unlock_requireschains); threat rate2*x + 0.15*x*x; starting blocks 1000→200; expansion 400 flat pending the cost formula; artifacts 3→5. - Bug found: the building_block recipe was silently locked at game
start (building blocks appear in no schematic's materials, so implicit
unlocking could never reach the recipe) — fixed with an explicit
unlock_at_station_level = -1. - Expansion cost formula implemented and set (
300 + 50*x + 10*x*x): quadratic, so costs outrun the roughly linear block income gradually — ~1 expansion per cycle mid-game, 2–3 cycles apart late. - First full balancing round complete. Next: full-game playtests against the run-shape targets.