From f8028a6ca2e807255158dd8923fcb6a40a5a61b4 Mon Sep 17 00:00:00 2001 From: Malte Langkabel Date: Mon, 6 Jul 2026 22:00:34 +0200 Subject: [PATCH] Adjust combat stats after playtest 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Playtest 1 (first two pushes, ~40 min game time — pacing on target) found the railgun_s-spam-cruiser meta and confirmed the repair tool as overpowered (second signal after the persistent arena escort margin): - repair_tool 9 -> 4 HP/s: the arena only prices in-fight sustain; real runs add free between-wave top-offs across the whole swarm - railgun_l range 100 -> 130: now outranges stations (120), buying the siege role the capital ladder promises - railgun_m 14 -> 16 dmg, range 70 -> 80: concentration tax softened so the ladder reads "pay some DPS efficiency for reach", not "strictly worse" - new tracked arena: railgun_s-spam cruisers vs default cruisers Module costs untouched, so all threat values stay valid. Docs updated (derived.md, history.md playtest record, README status). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01DyCu8vwChKMbLJQ3xosYEN --- bin/app/data/config/modules.toml | 11 +++++--- bin/balancing/data/balancing.toml | 47 ++++++++++++++++++++++++++++++- docs/balancing/README.md | 7 +++-- docs/balancing/derived.md | 13 ++++++--- docs/balancing/history.md | 31 ++++++++++++++++++++ 5 files changed, 98 insertions(+), 11 deletions(-) diff --git a/bin/app/data/config/modules.toml b/bin/app/data/config/modules.toml index 557926b..27a2888 100644 --- a/bin/app/data/config/modules.toml +++ b/bin/app/data/config/modules.toml @@ -57,8 +57,8 @@ fill_color = "#FF8040" glyph = "Rm" [module.weapon] -damage = 14 -attack_range_m = 70 +damage = 16 +attack_range_m = 80 attack_rate_hz = 1.5 @@ -75,9 +75,12 @@ production_time_seconds = 4 fill_color = "#FF8040" glyph = "Rl" +# attack_range_m 130 deliberately exceeds the station range of 120 +# (stations.toml) — the l gun is the only weapon that can besiege stations +# without tanking their fire (docs/balancing/history.md, playtest 1). [module.weapon] damage = 52 -attack_range_m = 100 +attack_range_m = 130 attack_rate_hz = 0.8 # ----------------------------------------------------------------------------- @@ -110,7 +113,7 @@ glyph = "Rp" [module.repair] repair_rate_hz = 1 -repair_amount_hp = 9 +repair_amount_hp = 4 repair_range_m = 80 # ----------------------------------------------------------------------------- diff --git a/bin/balancing/data/balancing.toml b/bin/balancing/data/balancing.toml index 524bb43..5f728b8 100644 --- a/bin/balancing/data/balancing.toml +++ b/bin/balancing/data/balancing.toml @@ -4,7 +4,8 @@ # using the verified fitted threat values from tools/threat_report.py: # drone 10.5, frigate 47, destroyer 99, cruiser 233.5, # battlecruiser 354.5, battleship 722.5, dreadnought 1491.5, -# carrier 1436.5, glass destroyer (8 small guns) 92, repair drone 17. +# carrier 1436.5, glass destroyer (8 small guns) 92, repair drone 17, +# railgun_s-spam cruiser (12 small guns) 178. # Module arrays mirror the ships' default_modules loadouts unless a # doctrine variant is the point of the arena. # @@ -348,6 +349,50 @@ enemy_buffer_width_tiles = 10 {type = "railgun_s", x = 4, y = 1, rotation = "east"}, ] +[[arena]] +name = "Railgun_s-spam cruisers vs default cruisers (1424 vs 1401)" +# Tracks the playtest-1 meta: cruiser hulls filled with 12 small guns +# (max DPS/threat, no armor, range 50) against the default m-gun fit. +# The concentration tax means the spam side SHOULD win a brawl somewhat; +# this arena bounds its margin — a blowout here means the small-gun +# premium or the m-gun range edge needs retuning. +height_tiles = 10 +player_buffer_width_tiles = 10 +contest_zone_width_tiles = 50 +enemy_buffer_width_tiles = 10 + + [[arena.team]] + name = "Spam" + [[arena.team.ship]] + schematic = "cruiser" + count = 8 + modules = [ + {type = "railgun_s", x = 1, y = 0, rotation = "east"}, + {type = "railgun_s", x = 2, y = 0, rotation = "east"}, + {type = "railgun_s", x = 0, y = 1, rotation = "east"}, + {type = "railgun_s", x = 1, y = 1, rotation = "east"}, + {type = "railgun_s", x = 2, y = 1, rotation = "east"}, + {type = "railgun_s", x = 3, y = 1, rotation = "east"}, + {type = "railgun_s", x = 0, y = 2, rotation = "east"}, + {type = "railgun_s", x = 1, y = 2, rotation = "east"}, + {type = "railgun_s", x = 2, y = 2, rotation = "east"}, + {type = "railgun_s", x = 3, y = 2, rotation = "east"}, + {type = "railgun_s", x = 1, y = 3, rotation = "east"}, + {type = "railgun_s", x = 2, y = 3, rotation = "east"}, + ] + + [[arena.team]] + name = "Default" + [[arena.team.ship]] + schematic = "cruiser" + count = 6 + modules = [ + {type = "railgun_m", x = 0, y = 1, rotation = "east"}, + {type = "railgun_m", x = 2, y = 1, rotation = "east"}, + {type = "armor_plates", x = 1, y = 0, rotation = "east"}, + {type = "maneuvering_thrusters", x = 1, y = 3, rotation = "east"}, + ] + [[arena]] name = "Repair escort vs raw numbers (444 vs 444)" height_tiles = 10 diff --git a/docs/balancing/README.md b/docs/balancing/README.md index 26a809e..e5258dc 100644 --- a/docs/balancing/README.md +++ b/docs/balancing/README.md @@ -21,8 +21,11 @@ REQ-* ids in [../requirements.md](../requirements.md). 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`. +pacing. Playtesting in progress: playtest 1 (first two pushes) found the +railgun_s-spam-cruiser meta and confirmed repair as overpowered — combat +stats adjusted, see `history.md`. Next: re-run the arena suite against +the adjustments, then continue playtests against the run-shape targets +in `targets.md`. ## Open action items diff --git a/docs/balancing/derived.md b/docs/balancing/derived.md index 4ccefad..6b34687 100644 --- a/docs/balancing/derived.md +++ b/docs/balancing/derived.md @@ -94,10 +94,14 @@ geometry-validated against the hull grids) ## Combat stats -(arena-converged, 2026-07; see `history.md` rounds 1–5) +(arena-converged 2026-07, rounds 1–5; playtest-1 adjustments 2026-07-06 — +see `history.md`) **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. +railgun_m 16 × 1.5 (24), range 80; railgun_l 52 × 0.8 (41.6), range 130. +DPS per threat: s 0.62, m 0.55, l 0.41 — the concentration tax softened +after playtest 1 so the ladder reads "pay some DPS efficiency for reach"; +railgun_l deliberately outranges stations (120 m) to buy the siege role. **Hull HP** (15/threat prior + empirical trims): drone 60, frigate 300, destroyer 550, cruiser 1500, battlecruiser 2400, battleship 6300, @@ -109,8 +113,9 @@ 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 +**Other modules:** armor_plates +1200 HP; repair_tool 4 HP × 1 Hz, +range 80 (halved after playtest 1 — free between-wave top-offs were never +priced by the arena escort test); 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. diff --git a/docs/balancing/history.md b/docs/balancing/history.md index 690d390..804647d 100644 --- a/docs/balancing/history.md +++ b/docs/balancing/history.md @@ -94,3 +94,34 @@ range 200). — ~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. + +## 2026-07-06 — playtest 1 (first two pushes) + +First real run: two enemy stations destroyed in ~40 min game time +(~80 min real time with heavy build-pausing) — roughly on pace for the +≤2 h game-time target, so pacing untouched. + +- **Meta finding: cruisers filled with 12× railgun_s dominate.** Predicted + by the numbers in hindsight: the concentration tax makes railgun_s the + best DPS/threat (0.62 vs m 0.48, l 0.41), range is the big guns' only + mechanical edge (armor is added HP, not damage reduction — no anti-swarm + mechanic), repair sustain covers the closing distance, and stations + outranged every ship gun (120 vs railgun_l's 100), so even capitals had + to tank-and-brawl. The cruiser compounds it: first hull with a large + 1×1 canvas (12 cells) and a nearly quartz-free chain. +- **Repair tool confirmed overpowered** (second signal after the + persistent +24% arena escort margin): the arena only prices in-fight + sustain; real runs add free full top-offs in every 15–45 s wave gap + across the whole swarm. The 0.7 HP/s-per-threat prior is wrong for + wave defence. +- **Changes:** repair_tool 9→4 HP/s; railgun_l range 100→130 (now + outranges stations — buys the siege role the capital ladder promises); + railgun_m 14→16 dmg and range 70→80 (tax softened: m sits at 0.55 + DPS/threat, between s and l). Module threats unchanged (costs + untouched), so no ladder recalculation needed. +- New tracked arena added: railgun_s-spam cruisers (8× 178) vs default + cruisers (6× 233.5) — the spam side should win a brawl somewhat, but a + blowout means the small-gun premium needs retuning. +- **Open:** re-run the arena suite to check the range/damage changes + against the round 1–5 results; next playtest should verify big guns now + feel worth climbing to and repair is merely good.