WIP: in-flight combat/expedition/flavor changes

Bundle of uncommitted working-tree edits across combat engine, expedition
cycle, flavor pools, and TwinBee/zone narration. Includes new files:
combat_debug.go, dnd_boss_consumables.go, dnd_dex_floor.go, plus
CHANGES_24H.md and REBALANCE_NOTES.md scratch notes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-05-12 21:59:19 -07:00
parent 2b86f3df16
commit 4e412219f3
49 changed files with 1381 additions and 444 deletions

View File

@@ -119,7 +119,7 @@ func (p *AdventurePlugin) runHarvestInterrupt(
}
preCombatHP, _ := dndHPSnapshot(userID)
result, err := p.runZoneCombat(userID, monster, int(zone.Tier))
result, err := p.runZoneCombat(userID, monster, int(zone.Tier), nil, run.DMMood)
if err != nil {
return fmt.Sprintf("_(Interrupt combat error: %v.)_", err), false
}
@@ -149,12 +149,18 @@ func (p *AdventurePlugin) runHarvestInterrupt(
_, _ = applyMoodEvent(run.RunID, MoodEventPlayerDeath)
_ = abandonZoneRun(userID)
_ = retireAllRegionRuns(exp)
markAdventureDead(userID, "expedition", zone.Display)
if !result.TimedOut {
markAdventureDead(userID, "expedition", zone.Display)
}
if line := flavor.Pick(flavor.PlayerDeath); line != "" {
b.WriteString(line)
b.WriteString("\n")
}
b.WriteString(fmt.Sprintf("💀 You fell to **%s**. Run ended.", monster.Name))
if result.TimedOut {
b.WriteString(fmt.Sprintf("⏳ **%s** outlasts you. You retreat from the expedition, wounded but alive.", monster.Name))
} else {
b.WriteString(fmt.Sprintf("💀 You fell to **%s**. Run ended.", monster.Name))
}
return b.String(), true
}
@@ -359,8 +365,7 @@ func (p *AdventurePlugin) tryPatrolEncounter(
if !ok {
return
}
preHP, _ := dndHPSnapshot(userID)
result, rerr := p.runZoneCombat(userID, monster, int(zone.Tier))
result, rerr := p.runZoneCombat(userID, monster, int(zone.Tier), nil, run.DMMood)
if rerr != nil {
err = rerr
return
@@ -388,12 +393,18 @@ func (p *AdventurePlugin) tryPatrolEncounter(
_, _ = applyMoodEvent(run.RunID, MoodEventPlayerDeath)
_ = abandonZoneRun(userID)
_ = retireAllRegionRuns(exp)
markAdventureDead(userID, "patrol", zone.Display)
if !result.TimedOut {
markAdventureDead(userID, "patrol", zone.Display)
}
if line := flavor.Pick(flavor.PlayerDeath); line != "" {
ob.WriteString(line)
ob.WriteString("\n")
}
ob.WriteString("💀 The patrol takes you down. Run ended.")
if result.TimedOut {
ob.WriteString("⏳ The patrol drags on. You break off and retreat, wounded but alive.")
} else {
ob.WriteString("💀 The patrol takes you down. Run ended.")
}
if rollLine := dndRollSummaryLine(result); rollLine != "" {
ob.WriteString("\n")
ob.WriteString(rollLine)
@@ -403,8 +414,8 @@ func (p *AdventurePlugin) tryPatrolEncounter(
return
}
_ = recordZoneKill(exp, monster.ID)
ob.WriteString(fmt.Sprintf("✅ Patrol dispatched (HP %d→%d / %d).",
preHP, postHP, maxHP))
ob.WriteString(fmt.Sprintf("✅ Patrol dispatched. You finished at **%d/%d HP**.",
postHP, maxHP))
if rollLine := dndRollSummaryLine(result); rollLine != "" {
ob.WriteString("\n")
ob.WriteString(rollLine)