mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
Expedition autopilot Phase 4 + rogue sneak attack + TwinBee voice sweep
Tedium-removal pass driven by live play feedback. Three big threads: Expedition autopilot Phase 4 — background auto-run + harvest-until-dry: - New expeditionAutoRunTicker walks active expeditions every 15min (5min tick, per-expedition CAS on new last_autorun_at column). Skips combat sessions, briefing/recap quiet windows, expeditions <30min old. - Walks up to 3 rooms/tick with compact narration; suppresses DMs when 0 rooms walked or just hitting the per-tick cap (no "stretch complete" filler). Player only hears from the bot when a real decision is needed. - Compact mode: one-line combat narration for trash/elite, auto-resolves elite doorways via the forward-sim engine (boss still pauses). Threaded via new advanceOnceWithOpts → resolveRoom → resolveCombatRoom. - Auto-harvest now grinds each Common/Uncommon node until dry (cap at 8 attempts/visit), mirroring manual !scavenge retries. Rare+ still pauses. - Ambient ticker: anti-repeat by Kind via new last_ambient_kind column (avoids two pack_rat DMs in a row when the pool only has 6 lines). - !expedition go <n> now routes to the fork-choice handler when active + numeric; fork footer rewritten to suggest !expedition go instead of !zone go. Boss/Elite doorway: formatNextRoomMessage routes the action hint by next room type and autopilot loop breaks via new nextRoomType field so "Room X/Y — Boss" doesn't double-print with contradictory hints (!zone advance vs !fight). - runAutopilotWalk extracted from expeditionCmdRun so foreground and background share the loop body. Rogue Sneak Attack actually exists now: - Audit found the rogue's "Sneak Attack" passive was AutoCritFirst + 5% damage rider. No Nd6, ever. Phase 2 Monte Carlo masked this with a small flat buff; the class's defining mechanic never matched its tooltip or 5e identity. - Added SneakAttackDie int to CombatModifiers, per-hit Nd6 in combat_primitives.go (same lane as DivineStrikePerHit). Scales with level: 1d6 at L1-2 ... 4d6 at L7-8 ... capped at 10d6 at L19-20. - AutoCritFirst + 5% rider retained as bonuses on top of working sneak attack — preserves the opener-burst feel. - L7 rogue expected per-hit ~8 → ~22 damage. Valdris fight math goes from "16 rounds to kill, die in 8" to winnable. TwinBee voice sweep (Phase B3): - ~530 line changes across 24 files replacing third-person "TwinBee notes/files/tracks/respects/..." constructions with first-person inside flavor string literals. Code identifiers (TwinBeeLine, twinBeeLine, etc.), chat-prefix labels (🎭 **TwinBee:**), item names (TwinBee's Bell), achievements, and game-title references in fun.go (Konami TwinBee ship) left intact. - Catches a real bug: Valdris fight rendered "TwinBee marks the Legendary Resistance" mid-combat in third person, contradicting the Phase B2 convention. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -84,57 +84,57 @@ var dndSubclassRegistry = []DnDSubclassInfo{
|
||||
// Fighter
|
||||
{SubclassChampion, ClassFighter, "Champion",
|
||||
"Raw power, brutal efficiency.",
|
||||
"You've chosen the old way. No tricks, no systems. Just you, and the blade, and the next hit. TwinBee approves of this directness."},
|
||||
"You've chosen the old way. No tricks, no systems. Just you, and the blade, and the next hit. I approve of this directness."},
|
||||
{SubclassBattleMaster, ClassFighter, "Battle Master",
|
||||
"Tactical superiority, maneuver control.",
|
||||
"Maneuvers, dice, control of the engagement. TwinBee notes that the smartest fighter in the room rarely throws the first punch."},
|
||||
"Maneuvers, dice, control of the engagement. I note that the smartest fighter in the room rarely throws the first punch."},
|
||||
{SubclassBerserker, ClassFighter, "Berserker",
|
||||
"Rage-fueled destruction, high risk/reward.",
|
||||
"Rage as a tool, exhaustion as a tax. TwinBee files this under 'load-bearing recklessness'."},
|
||||
"Rage as a tool, exhaustion as a tax. I file this under 'load-bearing recklessness'."},
|
||||
|
||||
// Rogue
|
||||
{SubclassThief, ClassRogue, "Thief",
|
||||
"Speed, opportunism, fast hands.",
|
||||
"Quick fingers, quicker exits. TwinBee suspects the locks of the world have been put on notice."},
|
||||
"Quick fingers, quicker exits. I suspect the locks of the world have been put on notice."},
|
||||
{SubclassAssassin, ClassRogue, "Assassin",
|
||||
"Setup and execution; devastating openers.",
|
||||
"Patience, then violence, then nothing. TwinBee respects the economy of motion."},
|
||||
"Patience, then violence, then nothing. I respect the economy of motion."},
|
||||
{SubclassArcaneTrickster, ClassRogue, "Arcane Trickster",
|
||||
"Stealth plus a slice of Mage spellcasting.",
|
||||
"Magic in the hands of a Rogue. TwinBee considers this the universe's way of apologizing for giving you low HP."},
|
||||
"Magic in the hands of a Rogue. I consider this the universe's way of apologizing for giving you low HP."},
|
||||
|
||||
// Mage
|
||||
{SubclassEvocation, ClassMage, "Evocation",
|
||||
"Pure damage output. The glass cannon perfected.",
|
||||
"You picked the path of the louder spell. TwinBee finds this aesthetically pleasing and structurally alarming."},
|
||||
"You picked the path of the louder spell. I find this aesthetically pleasing and structurally alarming."},
|
||||
{SubclassAbjuration, ClassMage, "Abjuration",
|
||||
"Wards, shields, counterspells.",
|
||||
"You'd rather not get hit, and you've made it your specialty. TwinBee approves of this kind of foresight."},
|
||||
"You'd rather not get hit, and you've made it your specialty. I approve of this kind of foresight."},
|
||||
{SubclassNecromancy, ClassMage, "Necromancy",
|
||||
"Control undead and drain life.",
|
||||
"Undeath as a tool rather than a state. TwinBee has opinions about this. TwinBee is keeping them to itself."},
|
||||
"Undeath as a tool rather than a state. I have opinions about this. I am keeping them to itself."},
|
||||
|
||||
// Cleric
|
||||
{SubclassLifeDomain, ClassCleric, "Life Domain",
|
||||
"Maximum healing output. Party support anchor.",
|
||||
"Healing as discipline, not afterthought. TwinBee notes the party will live longer because of you, whether they thank you or not."},
|
||||
"Healing as discipline, not afterthought. I note the party will live longer because of you, whether they thank you or not."},
|
||||
{SubclassWarDomain, ClassCleric, "War Domain",
|
||||
"Combat Cleric — extra attacks, martial weapons.",
|
||||
"You came to fight, not to mediate. TwinBee finds this clarifying."},
|
||||
"You came to fight, not to mediate. I find this clarifying."},
|
||||
{SubclassTrickeryDomain, ClassCleric, "Trickery Domain",
|
||||
"Illusion, misdirection, chaos.",
|
||||
"A Cleric who lies for a living. TwinBee delights in the implied theological complications."},
|
||||
"A Cleric who lies for a living. I delight in the implied theological complications."},
|
||||
|
||||
// Ranger
|
||||
{SubclassHunter, ClassRanger, "Hunter",
|
||||
"Zone specialist; bonuses against enemy types.",
|
||||
"You read the terrain before you draw the bow. TwinBee finds this professionalism rare and welcome."},
|
||||
"You read the terrain before you draw the bow. I find this professionalism rare and welcome."},
|
||||
{SubclassBeastMaster, ClassRanger, "Beast Master",
|
||||
"Deep Ranger–pet bond. Pet as combat partner.",
|
||||
"You and your pet, all the way down. TwinBee finds this genuinely moving and declines to be embarrassed about that."},
|
||||
"You and your pet, all the way down. I find this genuinely moving and decline to be embarrassed about that."},
|
||||
{SubclassGloomStalker, ClassRanger, "Gloom Stalker",
|
||||
"Darkness specialist. Exceptional underground.",
|
||||
"You were already good in the dark. Now you're better. TwinBee notes: the Underdark is waiting."},
|
||||
"You were already good in the dark. Now you're better. I note: the Underdark is waiting."},
|
||||
|
||||
// Druid — Open5e caster scaffold
|
||||
{SubclassCircleLand, ClassDruid, "Circle of the Land",
|
||||
|
||||
Reference in New Issue
Block a user