mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 00:32:40 +00:00
J3 D11: T5 difficulty lift (leaders-define-band) + empty-EnemyID combat guard
Boss-only tuning at the L15/L16 mid-range (D8-f #2 had tested T5 at the L12 floor where everything walls). The two T5 zones needed opposite treatment: - dragons_lair (infernax): impossible wall, leaders 0-2% -> HP 546->405, AC 22->20, frightful-presence stun 0.80->0.40, multiattack 49->42. - abyss_portal (belaxath): leader faceroll 88-92% -> HP 262->300, AC 19->20, multiattack 40->41. Final n=50: leaders 61% at L15 (both zones), 72-79% at L16 -- same leaders-define-band shape as T4; casters ~0% (J3 caster-track gap, not monster-tunable). Bosses are the sole binding lever (every run decided at the boss; standard/elite pools already survivable). Also harden handleFightCmd: a malformed bestiary entry with an empty ID was silently persisting an enemy-less combat session that spun to autoDriveCombat's 200-round cap. Now treated as a bestiary miss (fail loud). Writeup: sim_results/t5_findings.md (gitignored).
This commit is contained in:
@@ -80,7 +80,12 @@ func (p *AdventurePlugin) handleFightCmd(ctx MessageContext) error {
|
||||
} else {
|
||||
monster, ok = pickZoneEnemy(zone, run.RunID, run.CurrentRoom, true)
|
||||
}
|
||||
if !ok {
|
||||
if !ok || monster.ID == "" {
|
||||
// monster.ID == "" guards a malformed bestiary entry (e.g. one whose
|
||||
// ID field was dropped): startCombatSession would otherwise persist a
|
||||
// session with an empty EnemyID, and the turn engine — having no enemy
|
||||
// to resolve — spins inertly until autoDriveCombat's round cap. Fail
|
||||
// loudly instead of stalling.
|
||||
return p.replyDM(ctx, "_(No bestiary entry for this encounter — file a bug. `!zone abandon` to bail.)_")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user