Class identity audit close-out: Fighter/Ranger/Paladin/Druid + Bard-Valor

Phase 2 Monte Carlo tuning had papered over four classes whose 5e-defining
mechanics never actually existed in the engine — only flat DamageBonus or
FlatDmgStart compensation riders that hit the right aggregate win rate.
This pass replaces the proxies with the real primitives.

New CombatModifiers fields: ExtraAttacks (additional swings/round, looped
in a new resolvePlayerSwings helper); HuntersMarkDie (per-hit Nd6 bonus,
same path as Sneak Attack); ThornLashDmg (flat counter on landed enemy
hits, fires in resolveEnemyAttack after ward/block).

Fighter L5/11/20 Extra Attack, Ranger L5 Extra Attack + Hunter's Mark
(1→4 d6 by level), Paladin L5 Extra Attack + per-hit Divine Smite
(replaces one-shot opener), Druid thorn lash. Bard College of Valor L7
"Extra Attack" subclass tier converted from +1 attack/+10% damage proxy
to the real primitive.

Post-fix T5 class-balance: martials cluster at top (Fighter/Rogue 0.90,
Ranger 0.89, Paladin 0.88), casters keep their relative ordering, spread
14pp top-to-bottom.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-05-16 12:53:00 -07:00
parent 41adfce9f1
commit 98ba416359
5 changed files with 144 additions and 14 deletions

View File

@@ -442,16 +442,16 @@ func applySubclassPassives(stats *CombatStats, mods *CombatModifiers, c *DnDChar
}
case SubclassCollegeValor:
// L5 Combat Inspiration: songs that sharpen the blade (+10% damage).
// L7 Extra Attack: throughput — +1 attack and a further +10% damage
// proxy for the second swing. L10 Battle Magic: a bonus-action
// strike after a spell — a FlatDmgStart burst. L15: +1 AC, the
// late-game shield half of Combat Inspiration.
// L7 Extra Attack: a real second swing (5e literal Extra Attack).
// Class-identity audit (2026-05-16) — previously proxied as +1
// AttackBonus + 10% damage; now uses ExtraAttacks. L10 Battle
// Magic: a bonus-action strike after a spell — a FlatDmgStart
// burst. L15: +1 AC, late-game shield half of Combat Inspiration.
if c.Level >= 5 {
mods.DamageBonus += 0.10
}
if c.Level >= 7 {
stats.AttackBonus++
mods.DamageBonus += 0.10
mods.ExtraAttacks += 1
}
if c.Level >= 10 {
mods.FlatDmgStart += 6