mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 08:52:42 +00:00
Adv 2.0 D&D Phase 12 E3c: Underforge heat accumulation
§7.3 heat stacks: +1/day in the Underforge (cap 10), persisted via new updateTemporalStack helper. Band thresholds: • 1–3 ambient (no narration) • 4–6 warning band (combat fire damage applies, narration logged) • 7–9 supply band (forces harsh-conditions burn = +50%, narration) • 10 critical (exhaustion narration, log entry) Fortified/base camp long rest in the Underforge drops heat by 2 (updates briefing's "Fortified rest" summary line), per §7.3. Replaces the placeholder `TemporalStack > 0 → harsh` predicate in deliverBriefing with zoneTemporalHarsh(), which is now per-zone aware — Heat 1–3 in the Underforge is correctly flavor-only and no longer prematurely doubles supply burn from Day 1. Combat-side knobs (+1d4 fire round-start damage at heat 4–6, dis CON saves at 7–9, -2 to all rolls at 10) are exposed via heat band but not yet applied — combat-link phase reads heat band off the active expedition. Reuses flavor.UnderforgHeapWarning / UnderforgHeapCritical per feedback_reuse_existing_flavor. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -241,6 +241,14 @@ func processOvernightCamp(e *Expedition) string {
|
||||
_ = applyThreatDelta(e.ID, -5, "long rest in fortified camp")
|
||||
}
|
||||
|
||||
// §7.3 Underforge: fortified rest drops heat stacks by 2.
|
||||
heatReduced := 0
|
||||
if (kind == CampTypeFortified || kind == CampTypeBase) && e.ZoneID == ZoneUnderforge {
|
||||
before := e.TemporalStack
|
||||
after := reduceUnderforgeHeat(e)
|
||||
heatReduced = before - after
|
||||
}
|
||||
|
||||
// Auto-break the camp now that the rest has been applied.
|
||||
_ = updateCamp(e.ID, nil)
|
||||
e.Camp = nil
|
||||
@@ -255,8 +263,12 @@ func processOvernightCamp(e *Expedition) string {
|
||||
case CampTypeStandard:
|
||||
return fmt.Sprintf("Long rest: HP %d → %d, spell slots & resources refreshed.", prevHP, c.HPCurrent)
|
||||
case CampTypeFortified, CampTypeBase:
|
||||
return fmt.Sprintf("Fortified rest: HP %d → %d (+1d6 = %d bonus); threat clock −5; resources refreshed.",
|
||||
summary := fmt.Sprintf("Fortified rest: HP %d → %d (+1d6 = %d bonus); threat clock −5; resources refreshed.",
|
||||
prevHP, c.HPCurrent, bonusHP)
|
||||
if heatReduced > 0 {
|
||||
summary += fmt.Sprintf(" Heat stacks −%d.", heatReduced)
|
||||
}
|
||||
return summary
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user