reikhelm/combat/combat-core/src
Parley Hatch 57dba5e149 feat(combat): order-of-magnitude slowdown — fights now ~20-30s
Fights were ~3-5s; the user wanted 20-30s. Tuned the table (and added one
mechanic) so they land there, re-validated against the sim throughout.

- Engine: a `global_cooldown` (the genre swing timer, §10 "attack delay") — an
  actor can't start a new action until it elapses, so no button-masher can
  out-DPS the intended tempo. Config-driven (`global_cooldown` ticks; 0 = off).
  Actor gains `next_action_at`; engine gates decisions on it.
- Controller: ScriptedPlayer now pressures with its heavy proactively when
  healthy (not only on the exact overrun frame), so the sim measures what a real
  player experiences instead of an unrealistically patient bound.
- Config rebalance: damage cut + flattened, fatigue/regen/recovery co-tuned, and
  the kit made roughly **DPS-neutral** with auto-attack (each ability's cooldown
  matched to auto's damage-per-second). Under the global cooldown that's the key
  insight: abilities win through stagger leverage + timing, not raw throughput —
  otherwise strong abilities trivialize the pace and flat ones aren't worth their
  fill (the guardrail kept inverting until this landed). Auto-attacks (difficulty
  0) also no longer fizzle.
- Front-end: cache-bust the config fetch so edits are always picked up; widened
  the sim's archetype sweep to all six monsters.

Result (sim, skilled play ≈ real play): monster fights 16-38s (centered ~24s);
guardrail steep and green (even-con auto 0% → skill20 2% → skill50 12% →
skill80 44% → skill100 78%); all six monsters winnable. Verified live in-browser:
realistic play lands ~15-30s and a clean mid-fight reads perfectly on the dual bar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:34:10 -06:00
..
ability.rs feat(combat): deterministic combined-pool combat engine + sim + analysis 2026-06-03 12:13:04 -06:00
actor.rs feat(combat): order-of-magnitude slowdown — fights now ~20-30s 2026-06-03 13:34:10 -06:00
con.rs feat(combat): deterministic combined-pool combat engine + sim + analysis 2026-06-03 12:13:04 -06:00
config.rs feat(combat): order-of-magnitude slowdown — fights now ~20-30s 2026-06-03 13:34:10 -06:00
controller.rs feat(combat): order-of-magnitude slowdown — fights now ~20-30s 2026-06-03 13:34:10 -06:00
effect.rs feat(combat): deterministic combined-pool combat engine + sim + analysis 2026-06-03 12:13:04 -06:00
engine.rs feat(combat): order-of-magnitude slowdown — fights now ~20-30s 2026-06-03 13:34:10 -06:00
event.rs feat(combat): playable browser front-end + AI monster portraits 2026-06-03 12:46:47 -06:00
fixed.rs feat(combat): deterministic combined-pool combat engine + sim + analysis 2026-06-03 12:13:04 -06:00
lib.rs feat(combat): playable browser front-end + AI monster portraits 2026-06-03 12:46:47 -06:00
mitigation.rs feat(combat): deterministic combined-pool combat engine + sim + analysis 2026-06-03 12:13:04 -06:00
rng.rs feat(combat): deterministic combined-pool combat engine + sim + analysis 2026-06-03 12:13:04 -06:00