mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 08:52:42 +00:00
Adv 2.0 D&D Phase 12 E2c: Siege Mode effects + threat-70 warning
§8.3 siege economics: - applyDailyBurn now takes an explicit siege flag and enforces a 2× floor on supply burn even when HarshMod is below 2 (tier-1 zones still get starved out per spec). - currentBurn mirrors the same precedence so status/briefing readouts stay consistent. - Briefing rollover passes e.SiegeMode through, decoupling siege from the harsh-conditions composite. §8.3 threat-70 warning: applyDailyThreatDrift emits a one-time appendApproachingSiegeLog when the level crosses 70 (prevLevel<70 and new level≥70). Pulls from a new flavor.ThreatClockApproachingSiege pool seeded with the spec's verbatim warning beat plus two voice-matched alternates. Other siege effects (boss +20 HP / Legendary Resistance, cleared-room respawn, no-short-rest enforcement) stay deferred to the combat-link phase — ThreatBandInfo already exposes the flags that engine will read. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -113,6 +113,7 @@ func applyDailyThreatDrift(e *Expedition) (int, string, error) {
|
||||
if delta == 0 {
|
||||
return 0, reason, nil
|
||||
}
|
||||
prevLevel := e.ThreatLevel
|
||||
prevBand := threatBandFor(e.ThreatLevel, e.SiegeMode)
|
||||
if err := applyThreatDelta(e.ID, delta, reason); err != nil {
|
||||
return 0, reason, err
|
||||
@@ -132,9 +133,22 @@ func applyDailyThreatDrift(e *Expedition) (int, string, error) {
|
||||
if newBand != prevBand && newBand > prevBand {
|
||||
_ = appendThreatTransitionLog(e, newBand)
|
||||
}
|
||||
// E2c: §8.3 — one-time warning when crossing 70.
|
||||
if prevLevel < 70 && e.ThreatLevel >= 70 {
|
||||
_ = appendApproachingSiegeLog(e)
|
||||
}
|
||||
return delta, reason, nil
|
||||
}
|
||||
|
||||
// appendApproachingSiegeLog records the §8.3 "begin warning at 70" beat
|
||||
// once per expedition. Caller is responsible for only firing it on the
|
||||
// crossing edge (see applyDailyThreatDrift).
|
||||
func appendApproachingSiegeLog(e *Expedition) error {
|
||||
line := flavor.Pick(flavor.ThreatClockApproachingSiege)
|
||||
return appendExpeditionLog(e.ID, e.CurrentDay, "threat",
|
||||
"threat clock past 70 — siege approaches", line)
|
||||
}
|
||||
|
||||
// appendThreatTransitionLog records a band-crossing in the expedition log
|
||||
// with the prewritten TwinBee narration for that band.
|
||||
func appendThreatTransitionLog(e *Expedition, band ThreatBand) error {
|
||||
|
||||
Reference in New Issue
Block a user