# Balancing Documentation Everything about balancing Dota Factory, separated by role: - **[rules.md](rules.md)** — the design rules and principles. Timeless; changes only when the design changes. - **[targets.md](targets.md)** — the base numbers (roots/anchors) chosen by design. Change these first; everything else re-derives. - **[derived.md](derived.md)** — the current tuned state of all derived numbers, mirroring the configs. Updated whenever configs change. - **[process.md](process.md)** — how balancing is done: the pass order, tuning discipline, tools, and the checklist for the next round. - **[history.md](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](../content_design.md); rules with REQ-* ids in [../requirements.md](../requirements.md). ## Status First full balancing round complete (2026-07-06): targets → tree → numbers → threat-calculator parity → combat stats (arena-converged) → pacing. Playtesting in progress: playtest 1 (two full ~40-min wins, cruisers only) found the railgun_s-spam-cruiser meta, confirmed repair as overpowered, and exposed a 2.5–3× run-length gap; combat stats adjusted and re-checked in arena round 6 (see `history.md`). Next: playtest 2 with the new stats — pacing knobs (station scaling, threat rate, win pacing) wait for its result. ## 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). 1. **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. 2. **Confirm wave scaling in playtests.** `threat_rate_formula` is the only time-scaling axis; verify the tuned curve (see `derived.md`) produces the intended difficulty race in real runs. 3. **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. 4. **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`, and `visuals.toml`. Until this lands, quartz mines anywhere and the mid-game is knowledge-gated only.