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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DyCu8vwChKMbLJQ3xosYEN
471 lines
14 KiB
TOML
471 lines
14 KiB
TOML
# balancing.toml — canonical arena suite for the combat stats pass.
|
|
#
|
|
# Ship counts are chosen so both teams have (near-)equal total threat,
|
|
# 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,
|
|
# 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.
|
|
#
|
|
# Expectations: mirror matches and equal-threat cross-tier matchups should
|
|
# be near-draws (power-per-threat rule); the two-to-one arena must be a
|
|
# decisive win for the larger team. "Cruisers vs carrier" is EXPECTED to be
|
|
# a loss for the carrier until the drone-launching capability exists — the
|
|
# hangar is 224 threat of dead weight.
|
|
|
|
# --- mirrors (sanity: symmetric outcomes, fight duration in the 30-60 s band) ---
|
|
|
|
[[arena]]
|
|
name = "Mirror: drones 20v20"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Alpha"
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 20
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Beta"
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 20
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
]
|
|
|
|
[[arena]]
|
|
name = "Mirror: cruisers 6v6"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Alpha"
|
|
[[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.team]]
|
|
name = "Beta"
|
|
[[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 = "Mirror: battleships 2v2"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Alpha"
|
|
[[arena.team.ship]]
|
|
schematic = "battleship"
|
|
count = 2
|
|
modules = [
|
|
{type = "railgun_l", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_m", x = 1, y = 3, rotation = "east"},
|
|
{type = "railgun_m", x = 3, y = 3, rotation = "east"},
|
|
{type = "weapon_stabilizer", x = 4, y = 1, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Beta"
|
|
[[arena.team.ship]]
|
|
schematic = "battleship"
|
|
count = 2
|
|
modules = [
|
|
{type = "railgun_l", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_m", x = 1, y = 3, rotation = "east"},
|
|
{type = "railgun_m", x = 3, y = 3, rotation = "east"},
|
|
{type = "weapon_stabilizer", x = 4, y = 1, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
|
|
# --- equal-threat cross-tier matchups (power-per-threat: expect near-draws) ---
|
|
|
|
[[arena]]
|
|
name = "Drone swarm vs cruisers (462 vs 467)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Swarm"
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 44
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Cruisers"
|
|
[[arena.team.ship]]
|
|
schematic = "cruiser"
|
|
count = 2
|
|
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 = "Frigates vs battleship (705 vs 723)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Frigates"
|
|
[[arena.team.ship]]
|
|
schematic = "frigate"
|
|
count = 15
|
|
modules = [
|
|
{type = "railgun_s", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 1, rotation = "east"},
|
|
{type = "maneuvering_thrusters", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Battleship"
|
|
[[arena.team.ship]]
|
|
schematic = "battleship"
|
|
count = 1
|
|
modules = [
|
|
{type = "railgun_l", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_m", x = 1, y = 3, rotation = "east"},
|
|
{type = "railgun_m", x = 3, y = 3, rotation = "east"},
|
|
{type = "weapon_stabilizer", x = 4, y = 1, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena]]
|
|
name = "Destroyers vs dreadnought (1485 vs 1492)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Destroyers"
|
|
[[arena.team.ship]]
|
|
schematic = "destroyer"
|
|
count = 15
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 0, rotation = "east"},
|
|
{type = "armor_plates", x = 0, y = 1, rotation = "east"},
|
|
{type = "sensor_booster", x = 3, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Dreadnought"
|
|
[[arena.team.ship]]
|
|
schematic = "dreadnought"
|
|
count = 1
|
|
modules = [
|
|
{type = "railgun_l", x = 0, y = 1, rotation = "east"},
|
|
{type = "railgun_l", x = 4, y = 1, rotation = "east"},
|
|
{type = "railgun_l", x = 8, y = 1, rotation = "east"},
|
|
{type = "armor_plates", x = 3, y = 0, rotation = "east"},
|
|
{type = "armor_plates", x = 5, y = 0, rotation = "east"},
|
|
{type = "armor_plates", x = 2, y = 4, rotation = "east"},
|
|
{type = "armor_plates", x = 7, y = 4, rotation = "east"},
|
|
{type = "railgun_s", x = 7, y = 0, rotation = "east"},
|
|
]
|
|
|
|
[[arena]]
|
|
name = "Cruisers vs carrier (1401 vs 1437, carrier expected to lose)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Cruisers"
|
|
[[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.team]]
|
|
name = "Carrier"
|
|
[[arena.team.ship]]
|
|
schematic = "carrier"
|
|
count = 1
|
|
modules = [
|
|
{type = "drone_hangar", x = 2, y = 0, rotation = "east"},
|
|
{type = "railgun_m", x = 3, y = 2, rotation = "east"},
|
|
{type = "railgun_m", x = 6, y = 2, rotation = "east"},
|
|
{type = "armor_plates", x = 0, y = 1, rotation = "east"},
|
|
{type = "armor_plates", x = 8, y = 1, rotation = "east"},
|
|
{type = "sensor_booster", x = 3, y = 4, rotation = "east"},
|
|
]
|
|
|
|
[[arena]]
|
|
name = "Mixed mid vs battlecruisers (1394 vs 1418)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Mixed"
|
|
[[arena.team.ship]]
|
|
schematic = "destroyer"
|
|
count = 7
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 0, rotation = "east"},
|
|
{type = "armor_plates", x = 0, y = 1, rotation = "east"},
|
|
{type = "sensor_booster", x = 3, y = 1, rotation = "east"},
|
|
]
|
|
[[arena.team.ship]]
|
|
schematic = "cruiser"
|
|
count = 3
|
|
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.team]]
|
|
name = "Battlecruisers"
|
|
[[arena.team.ship]]
|
|
schematic = "battlecruiser"
|
|
count = 4
|
|
modules = [
|
|
{type = "railgun_m", x = 0, y = 0, rotation = "east"},
|
|
{type = "railgun_m", x = 4, y = 0, rotation = "east"},
|
|
{type = "railgun_m", x = 2, y = 1, rotation = "east"},
|
|
{type = "armor_plates", x = 2, y = 3, rotation = "east"},
|
|
{type = "railgun_s", x = 1, y = 2, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 2, rotation = "east"},
|
|
]
|
|
|
|
# --- asymmetric checks ---
|
|
|
|
[[arena]]
|
|
name = "Two to one (must be decisive)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Six"
|
|
[[arena.team.ship]]
|
|
schematic = "frigate"
|
|
count = 6
|
|
modules = [
|
|
{type = "railgun_s", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 1, rotation = "east"},
|
|
{type = "maneuvering_thrusters", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Three"
|
|
[[arena.team.ship]]
|
|
schematic = "frigate"
|
|
count = 3
|
|
modules = [
|
|
{type = "railgun_s", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 1, rotation = "east"},
|
|
{type = "maneuvering_thrusters", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena]]
|
|
name = "Armored vs glass destroyers (1188 vs 1196)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Armored"
|
|
[[arena.team.ship]]
|
|
schematic = "destroyer"
|
|
count = 12
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 4, y = 0, rotation = "east"},
|
|
{type = "armor_plates", x = 0, y = 1, rotation = "east"},
|
|
{type = "sensor_booster", x = 3, y = 1, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Glass"
|
|
[[arena.team.ship]]
|
|
schematic = "destroyer"
|
|
count = 13
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 4, 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 = 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
|
|
player_buffer_width_tiles = 10
|
|
contest_zone_width_tiles = 50
|
|
enemy_buffer_width_tiles = 10
|
|
|
|
[[arena.team]]
|
|
name = "Escorted"
|
|
[[arena.team.ship]]
|
|
schematic = "frigate"
|
|
count = 8
|
|
modules = [
|
|
{type = "railgun_s", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 1, rotation = "east"},
|
|
{type = "maneuvering_thrusters", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 4
|
|
modules = [
|
|
{type = "repair_tool", x = 0, y = 0, rotation = "east"},
|
|
]
|
|
|
|
[[arena.team]]
|
|
name = "Raw"
|
|
[[arena.team.ship]]
|
|
schematic = "frigate"
|
|
count = 9
|
|
modules = [
|
|
{type = "railgun_s", x = 1, y = 0, rotation = "east"},
|
|
{type = "railgun_s", x = 2, y = 1, rotation = "east"},
|
|
{type = "maneuvering_thrusters", x = 0, y = 1, rotation = "east"},
|
|
]
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 2
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
]
|
|
|
|
[[arena]]
|
|
name = "Station assault (2 stations + 105 vs 315)"
|
|
height_tiles = 10
|
|
player_buffer_width_tiles = 15
|
|
contest_zone_width_tiles = 40
|
|
enemy_buffer_width_tiles = 15
|
|
|
|
[[arena.team]]
|
|
name = "Fortified"
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 10
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
]
|
|
[[arena.team.station]]
|
|
type = "player_station"
|
|
x = 8
|
|
y = 15
|
|
level = 1
|
|
[[arena.team.station]]
|
|
type = "player_station"
|
|
x = 8
|
|
y = 45
|
|
level = 1
|
|
|
|
[[arena.team]]
|
|
name = "Swarm"
|
|
[[arena.team.ship]]
|
|
schematic = "drone"
|
|
count = 30
|
|
modules = [
|
|
{type = "railgun_s", x = 0, y = 0, rotation = "east"},
|
|
]
|