prosolis
519964fb01
J1: Extra Attack now fires in turn-based combat
...
The class-identity audit (98ba416 ) wired Extra Attack via the new
resolvePlayerSwings helper, but only SimulateCombat (auto-resolve)
called it. The turn-based engine — every !fight/!attack and every
elite/boss gate the sim drives via autoResolveCombat — still called
single-swing resolvePlayerAttack, so Fighter L11+ got 1 swing/turn at
the gates instead of 3. The audit close-out was correct in spirit but
half-applied.
J1 baseline matrix surfaced it: Fighter L12 cleared 100% of T2 forest
but 2% of T3 manor and 7% of T4 underdark, with %boss_reached at 100%
across the board. The wall was the boss-room damage exchange, not
mid-zone attrition. Trace dump on a sample fight: Fighter dealt 79
dmg in 14 rounds (7 hits / 9 swings) — exactly one swing per round —
versus 167 enemy dmg. With multi-swing wired in, the same fight ends
in 7 rounds with the boss dead, Fighter at 87/168 HP, 16 hits in 19
swings.
n=100 matrix after the fix:
Fighter L12 manor: 2% → 100% clr
Fighter L12 underdark: 7% → 98% clr
Fighter L12 forest: 94% → 100% (no leader regression)
Mage cells unchanged (J2 territory). Rogue cells within noise.
Sim infra changes that landed alongside (needed to read the J1
signal):
* expedition_sim auto-arms class-default defensive abilities
(Second Wind / Healing Word) via the new simAutoArmEnabled toggle
+ trySimAutoArm helper, hooked before applyArmedAbility in both
combat builders. Production code paths untouched (toggle stays
off). Without this the sim simulated a player who never types
!arm, which under-counts class survival.
* SimResult.Combats captures per-fight turn-log summaries (rounds,
hits/misses, damage by side, AC values inferred from RollAgainst)
so future J-phase questions can dig into the engine without
re-running the matrix.
* sim_results/run_matrix.sh fans the matrix across (class,level,zone)
cells via xargs -P (one process per cell — each owns its global
sqlite handle). ~6× wall-clock speedup on a 14-core box; n=100
matrix runs in ~3min.
* sim_results/summarize.sh gains p50_yld_clr + %boss_reached columns
so future sweeps don't conflate "reaches boss" with "clears zone".
Baselines:
sim_results/baseline_j0_n100.jsonl — pre-fix (1350 rows)
sim_results/baseline_j1_extra_attack.jsonl — post-fix (4500 rows)
Phase J state: J0 baseline locked, J1 done. T5 dragons_lair still
0% clear universally (J3). Mage T2+ wall still real (J2).
2026-05-17 14:11:39 -07:00
..
2026-05-13 23:00:35 -07:00
2026-05-15 14:43:11 -07:00
2026-05-15 11:29:03 -07:00
2026-05-09 14:25:22 -07:00
2026-05-13 22:53:58 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-15 08:03:42 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:23 -07:00
2026-04-26 07:57:31 -07:00
2026-05-09 14:25:23 -07:00
2026-04-08 15:50:28 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 18:38:57 -07:00
2026-05-14 08:01:10 -07:00
2026-05-09 14:25:21 -07:00
2026-04-05 17:04:03 -07:00
2026-05-16 12:40:17 -07:00
2026-03-27 21:26:19 -07:00
2026-04-28 22:37:04 -07:00
2026-04-10 16:50:49 -07:00
2026-05-09 21:32:47 -07:00
2026-04-24 22:23:58 -07:00
2026-04-08 23:01:39 -07:00
2026-04-10 16:50:49 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-05-16 12:40:17 -07:00
2026-05-16 12:40:17 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-03-27 21:26:19 -07:00
2026-05-09 21:32:47 -07:00
2026-04-10 16:50:49 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:22 -07:00
2026-05-13 22:53:58 -07:00
2026-05-16 12:40:17 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 08:01:10 -07:00
2026-05-14 21:19:31 -07:00
2026-04-08 15:50:28 -07:00
2026-05-15 14:43:11 -07:00
2026-04-08 22:41:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-16 12:40:17 -07:00
2026-05-16 12:40:17 -07:00
2026-04-08 17:04:40 -07:00
2026-03-31 18:47:49 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 15:28:42 -07:00
2026-05-14 15:28:42 -07:00
2026-05-14 15:28:42 -07:00
2026-05-14 08:59:51 -07:00
2026-05-14 07:44:01 -07:00
2026-05-14 22:06:31 -07:00
2026-05-14 18:00:29 -07:00
2026-05-14 18:00:29 -07:00
2026-03-27 21:26:19 -07:00
2026-03-26 09:22:02 -07:00
2026-04-18 01:07:25 -07:00
2026-05-15 12:11:27 -07:00
2026-05-09 14:25:23 -07:00
2026-05-12 21:54:40 -07:00
2026-04-18 01:07:25 -07:00
2026-05-09 17:23:08 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:22 -07:00
2026-05-17 14:11:39 -07:00
2026-05-14 07:53:17 -07:00
2026-05-16 13:48:52 -07:00
2026-05-12 21:59:19 -07:00
2026-05-13 23:00:35 -07:00
2026-04-18 01:05:22 -07:00
2026-05-16 12:53:00 -07:00
2026-05-09 14:25:22 -07:00
2026-05-16 12:40:17 -07:00
2026-05-16 12:53:00 -07:00
2026-05-16 12:40:17 -07:00
2026-05-17 14:11:39 -07:00
2026-05-14 08:08:26 -07:00
2026-05-14 08:59:51 -07:00
2026-05-15 12:11:27 -07:00
2026-05-12 21:59:19 -07:00
2026-05-17 14:11:39 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 14:25:21 -07:00
2026-05-17 14:11:39 -07:00
2026-05-12 21:59:19 -07:00
2026-05-09 14:25:22 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 22:06:31 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 22:17:03 -07:00
2026-05-14 20:32:41 -07:00
2026-05-15 12:11:27 -07:00
2026-05-12 21:59:19 -07:00
2026-05-15 12:11:27 -07:00
2026-05-12 21:59:19 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-15 12:11:27 -07:00
2026-05-13 22:53:06 -07:00
2026-05-14 22:37:47 -07:00
2026-05-14 22:37:47 -07:00
2026-05-17 12:24:18 -07:00
2026-05-17 12:33:59 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 17:21:33 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 23:02:53 -07:00
2026-05-17 12:33:59 -07:00
2026-05-15 12:11:27 -07:00
2026-05-16 13:48:52 -07:00
2026-05-15 12:11:27 -07:00
2026-05-16 12:40:17 -07:00
2026-05-15 12:11:27 -07:00
2026-05-16 13:48:52 -07:00
2026-05-13 22:53:58 -07:00
2026-05-13 22:53:58 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 17:17:19 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-16 12:40:17 -07:00
2026-05-15 12:11:27 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-15 12:11:27 -07:00
2026-05-15 12:11:27 -07:00
2026-05-15 12:11:27 -07:00
2026-05-09 15:17:30 -07:00
2026-05-09 14:25:22 -07:00
2026-05-15 12:11:27 -07:00
2026-05-15 12:11:27 -07:00
2026-05-16 12:40:17 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-15 11:29:03 -07:00
2026-05-09 14:25:21 -07:00
2026-05-16 12:53:00 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 21:30:15 -07:00
2026-05-12 21:59:19 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 19:47:01 -07:00
2026-05-09 14:25:22 -07:00
2026-05-17 12:45:21 -07:00
2026-05-17 12:45:21 -07:00
2026-05-14 22:06:31 -07:00
2026-05-15 14:43:11 -07:00
2026-05-15 14:43:11 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-14 07:12:37 -07:00
2026-05-09 14:25:21 -07:00
2026-05-16 12:40:17 -07:00
2026-05-14 21:30:15 -07:00
2026-05-09 14:25:21 -07:00
2026-05-15 14:43:11 -07:00
2026-05-14 21:53:06 -07:00
2026-05-14 15:18:18 -07:00
2026-05-17 12:45:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:22 -07:00
2026-05-15 14:43:11 -07:00
2026-05-16 12:53:00 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 18:38:57 -07:00
2026-05-16 12:40:17 -07:00
2026-05-15 12:11:27 -07:00
2026-05-16 12:53:00 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 06:16:45 -07:00
2026-05-09 14:25:22 -07:00
2026-05-17 12:33:59 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 22:06:31 -07:00
2026-05-09 15:17:30 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-12 21:59:19 -07:00
2026-05-09 15:17:30 -07:00
2026-05-09 14:25:22 -07:00
2026-05-16 12:40:17 -07:00
2026-05-12 21:59:19 -07:00
2026-05-12 21:59:19 -07:00
2026-05-12 21:59:19 -07:00
2026-05-09 17:21:33 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-16 12:40:17 -07:00
2026-05-15 12:11:27 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 21:37:29 -07:00
2026-05-16 12:40:17 -07:00
2026-05-16 13:48:52 -07:00
2026-05-16 12:40:17 -07:00
2026-05-15 12:24:03 -07:00
2026-05-15 12:11:27 -07:00
2026-05-17 14:11:39 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 23:38:06 -07:00
2026-03-26 23:38:06 -07:00
2026-03-26 23:38:06 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-03-26 09:22:02 -07:00
2026-05-09 14:25:21 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-03-22 10:09:57 -07:00
2026-04-18 01:06:50 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-05-09 14:25:21 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-04-18 14:11:59 -07:00
2026-04-18 01:06:50 -07:00
2026-04-18 14:11:59 -07:00
2026-04-18 14:11:59 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-03-10 16:58:15 -07:00
2026-04-26 10:09:32 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-14 22:37:47 -07:00
2026-05-15 14:43:11 -07:00
2026-05-14 22:37:47 -07:00
2026-05-14 18:00:29 -07:00
2026-05-14 18:00:29 -07:00
2026-03-27 21:26:19 -07:00
2026-03-27 11:55:47 -07:00
2026-03-30 17:11:45 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:21 -07:00
2026-05-15 08:03:42 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:23 -07:00
2026-03-11 00:45:25 -07:00
2026-03-08 18:25:18 -07:00
2026-03-27 11:55:47 -07:00
2026-03-26 09:22:02 -07:00
2026-03-10 18:08:05 -07:00
2026-04-08 17:04:40 -07:00
2026-03-08 18:25:18 -07:00
2026-05-09 20:20:56 -07:00
2026-05-12 21:59:19 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-03-11 00:45:25 -07:00
2026-04-10 16:50:49 -07:00
2026-03-08 18:25:18 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-03-29 20:51:28 -07:00
2026-03-29 09:27:00 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-04-26 10:09:32 -07:00
2026-03-11 00:45:25 -07:00
2026-03-29 16:24:59 -07:00
2026-03-26 09:22:02 -07:00
2026-04-01 18:58:33 -07:00
2026-04-10 16:50:49 -07:00
2026-03-29 16:24:59 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 15:24:49 -07:00
2026-05-09 17:00:57 -07:00
2026-05-09 17:00:57 -07:00
2026-05-09 17:17:19 -07:00
2026-05-09 17:17:19 -07:00
2026-05-09 16:59:32 -07:00
2026-05-09 16:59:32 -07:00
2026-05-09 16:57:48 -07:00
2026-05-09 16:57:48 -07:00
2026-05-09 16:51:19 -07:00
2026-05-09 16:51:19 -07:00
2026-05-09 16:48:48 -07:00
2026-05-09 16:48:48 -07:00
2026-05-09 16:54:45 -07:00
2026-05-09 16:54:45 -07:00
2026-05-09 16:41:46 -07:00
2026-05-09 17:17:19 -07:00
2026-05-09 17:17:19 -07:00
2026-05-09 17:21:33 -07:00
2026-05-09 16:52:52 -07:00
2026-05-09 16:52:52 -07:00
2026-05-09 14:34:05 -07:00
2026-05-09 17:03:21 -07:00
2026-05-09 17:03:21 -07:00
2026-05-09 16:56:07 -07:00
2026-05-09 16:56:07 -07:00
2026-05-09 14:34:05 -07:00