Split the cluttered progression_design.md and content_design.md into
separated documents by role:
- docs/balancing/rules.md - design rules and principles (moved from
progression_design.md, which is removed)
- docs/balancing/targets.md - the chosen base numbers: run shape,
factory curve, threat ladder (achieved
values adopted), combat anchors, pacing
anchors
- docs/balancing/derived.md - current tuned state of all derived
numbers, mirroring the configs
- docs/balancing/process.md - pass order, tuning discipline learned in
arena rounds 1-5, tools, next-round
checklist
- docs/balancing/history.md - chronological record: decisions, numbers
pass, calculator bugs, arena rounds,
pacing pass
- docs/balancing/README.md - index, status, open action items (moved
from progression_design.md)
content_design.md slims back down to actual content: footprint gating,
hull grids, gating matrix (module names updated to railguns), and the
production tree structure with its fiction - numbers, anchors, arena
logs, and pacing all moved to docs/balancing/. Stale references in the
config comments updated to the new locations.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DyCu8vwChKMbLJQ3xosYEN
Balancing Documentation
Everything about balancing Dota Factory, separated by role:
- rules.md — the design rules and principles. Timeless; changes only when the design changes.
- targets.md — the base numbers (roots/anchors) chosen by design. Change these first; everything else re-derives.
- derived.md — the current tuned state of all derived numbers, mirroring the configs. Updated whenever configs change.
- process.md — how balancing is done: the pass order, tuning discipline, tools, and the checklist for the next round.
- history.md — chronological record of decisions, findings, bugs, and arena rounds.
Related: game content (hull grids, footprint gating, tree design and fiction) in ../content_design.md; rules with REQ-* ids in ../requirements.md.
Status
First full balancing round complete (2026-07-06): targets → tree →
numbers → threat-calculator parity → combat stats (arena-converged) →
pacing. Next step: full-game playtests against the run-shape targets in
targets.md.
Open action items
Agreed changes that require edits to requirements.md, the code, or the
configs. Completed items are removed (their outcomes live in
requirements.md, history.md, and the git history).
- Fill unfillable schematic slots with artifacts. With duplicates removed, the schematic drop pool can run dry — previously unreachable. Decision: every slot in the choice dialog that cannot be filled with a schematic because the eligible pool is exhausted is filled with an artifact option instead (in addition to any artifact option granted by the regular artifact roll). A push therefore always awards a full dialog. Update REQ-DEF-SCHEMATIC-DROP.
- Confirm wave scaling in playtests.
threat_rate_formulais the only time-scaling axis; verify the tuned curve (seederived.md) produces the intended difficulty race in real runs. - Gate shortcut-recipe drops on their inputs. Extend the assembler recipe schematic pool eligibility in REQ-DEF-SCHEMATIC-DROP: in addition to the existing station-level and output-item checks, all of the recipe's input item types must be implicitly unlocked as well.
- Resource deposits. Add a terrain deposit layer per the Resource
deposits rules (
rules.md): deposit patches generated in expansion columns (deterministic content per expansion, randomized placement within the new columns), deposit rendering, and a miner condition (a resource recipe is selectable only if the miner's footprint overlaps at least one matching deposit tile). Touches REQ-BLD-MINER ("every asteroid tile is equivalent" no longer holds), REQ-GW-ASTEROID-EXPAND / REQ-EXP-*,world.toml, andvisuals.toml. Until this lands, quartz mines anywhere and the mid-game is knowledge-gated only.