mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
J3 D8-d-fix: caster AC floor + HP ×1.25
computeAC: lift caster floors (cleric/druid 3→5, bard/warlock 1→3, mage/sorcerer 0→2). Ranger 3 / rogue 1 / fighter+paladin 6 unchanged. computeMaxHP: new casterHPMult(class) = 1.25 for the same caster set, applied multiplicatively on top of phase5BHPMult. Martials unchanged. New caster L10 HPMax: mage/sorc ~98 (was 78), bard/cleric/druid/warlock ~118 (was 95); martial L10 ~141 unchanged. bootstrap_caster_hp.go: new bootstrapCasterHPRefresh (job key caster_hp_refresh_v1) refreshes existing rows once at startup; mirrors bootstrapPhase5BHPRefresh — only raises HPMax, preserves absolute wound. Wired in adventure.go. Measured on n=2500 d8dfix2 corpus (gitignored sim_results) vs d8c: - T3 manor caster lift confirmed — bard +13 (43→56), druid +8 (88→96), warlock +8, sorcerer +5, mage +5, cleric +2. Martials flat. - Macro deltas: bard +2.6, warlock +2.0, druid +1.4, mage/sorcerer +1.0, cleric -0.2. n=500 1σ ≈ 2.2pp — bard/warlock cleanly past noise. - T4 underdark wall still holds (every caster ~0%). Lift directionally correct but undersized for T4 atk-bonus + multiattack — separate follow-up. - T5 dragons_lair universal wall unchanged (martials TPK too). Diagnostic context: project_d8d_diagnostic. Cleric flat manor likely the concentration AOE re-tick engine gap (filed for D8-e+).
This commit is contained in:
@@ -70,10 +70,10 @@ func TestComputeMaxHP_MageLevel5(t *testing.T) {
|
||||
// Mage d6, CON +1
|
||||
// L1: 6 + 1 = 7
|
||||
// L2-5: 4 levels × (avg 4 + 1) = 4 × 5 = 20
|
||||
// Raw total: 27; Phase 5-B: 27 × 1.5 = 40.5 → 41 (round half-up).
|
||||
// Raw total: 27; Phase 5-B × casterHPMult: 27 × 1.5 × 1.25 = 50.625 → 51.
|
||||
got := computeMaxHP(ClassMage, 1, 5)
|
||||
if got != 41 {
|
||||
t.Errorf("Mage L5 (CON+1) = %d, want 41 (27 raw × phase5BHPMult)", got)
|
||||
if got != 51 {
|
||||
t.Errorf("Mage L5 (CON+1) = %d, want 51 (27 raw × phase5BHPMult × casterHPMult)", got)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,8 +94,12 @@ func TestComputeAC(t *testing.T) {
|
||||
{ClassFighter, 0, 16}, // 10 + 0 + 6
|
||||
{ClassFighter, 2, 18}, // 10 + 2 + 6
|
||||
{ClassRogue, 3, 14}, // 10 + 3 + 1
|
||||
{ClassMage, 0, 10}, // 10 + 0 + 0
|
||||
{ClassCleric, 1, 14}, // 10 + 1 + 3
|
||||
{ClassMage, 0, 12}, // 10 + 0 + 2 (D8-d-fix caster floor)
|
||||
{ClassSorcerer, 1, 13}, // 10 + 1 + 2
|
||||
{ClassCleric, 1, 16}, // 10 + 1 + 5 (D8-d-fix caster floor)
|
||||
{ClassDruid, 0, 15}, // 10 + 0 + 5
|
||||
{ClassBard, 2, 15}, // 10 + 2 + 3 (D8-d-fix caster floor)
|
||||
{ClassWarlock, 0, 13}, // 10 + 0 + 3
|
||||
{ClassRanger, 2, 15}, // 10 + 2 + 3
|
||||
}
|
||||
for _, c := range cases {
|
||||
|
||||
Reference in New Issue
Block a user