Arena re-run after the playtest-1 adjustments: - spam-cruiser arena landed at par (default +9%) - the range buff alone priced out the small-gun-spam meta, so revert railgun_m damage 16 -> 14 (range stays 80). The buff had regressed drone-swarm-vs-cruisers to +47%, largely via a hit-count breakpoint (60 HP drone: 5 hits at 14 dmg, 4 at 16). - battleship +30% / dreadnought +29% vs pure railgun_s fleets accepted as reach-doctrine texture (the l gun's 130 m standoff working as intended); repair kept at 4 HP/s (below par in-fight is the correct price for free between-wave sustain). Also corrects the playtest-1 record: it was two FULL playthroughs won in ~40 min each with cruisers only (not two pushes) - a 2.5-3x run-length gap. Pacing knobs deliberately deferred to playtest 2, since those runs predate the repair nerf and the l-gun siege range. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DyCu8vwChKMbLJQ3xosYEN
61 lines
3.2 KiB
Markdown
61 lines
3.2 KiB
Markdown
# 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.
|