Add adventure plugin, holdem CFR fixes, and wordle plugin

Adventure: Complete v1 daily idle RPG with DM-driven gameplay, equipment
shop, treasure system, TwinBee NPC, streak/grudge/party mechanics,
flavor text, and scheduled morning/evening/midnight tickers.

Holdem CFR: Fix three critical training bugs (fold not forfeiting pot,
free calls after raises, training/runtime key mismatch). Add performance
optimizations (preflop lookup table, zero-alloc equity, integer keys,
raise cap, regret pruning). Enrich abstraction with 12 equity buckets,
board texture dimension, and 6-char action history. Replace validation
with proper multi-street simulation.

Also includes wordle plugin, holdem seed tooling, and schema additions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-03-22 10:09:57 -07:00
parent e9890fd880
commit c7c1b76589
35 changed files with 12388 additions and 3 deletions

View File

@@ -0,0 +1,927 @@
package plugin
// DungeonFlavor holds all pre-written narrative strings for dungeon outcomes.
// Indexed by tier (15) and outcome type.
// Selection: pick randomly, skip last 5 used per player per category.
var DungeonDeath = map[int][]string{
// ── TIER 1: THE SOGGY CELLAR ─────────────────────────────────────────────
// Deaths here should be embarrassing above all else. You died to rats.
// You died to slimes. The dungeon is four feet underground and damp.
// History will not record this kindly.
1: {
"You entered the Soggy Cellar with a sword and left without consciousness. " +
"The rats were not impressed. They had, if you're being honest, a point. " +
"You have been retrieved from the floor by a passing merchant who charged you " +
"for the inconvenience and did not make eye contact.",
"A single rat. One rat. You were killed by one rat in a cellar that smells " +
"of old vegetables and broken dreams. The rat has returned to its business. " +
"You have been taken to the medical facility, which is a cot and a bill " +
"and a nurse who has seen this before and has thoughts but keeps them to herself.",
"YOU DIED. In large, honest letters, if this were a more transparent world. " +
"It is not, so instead you simply died, quietly, in a damp place, " +
"surrounded by rats who did not particularly want to kill you but " +
"found themselves in the position regardless. Here we are.",
"GAME OVER. INSERT COIN TO CONTINUE. You do not have a coin. You have " +
"a copay and a 24-hour wait and a healthcare system that is processing " +
"your claim and will get back to you. The arcade never prepared you for this. " +
"Nothing prepared you for this. You went into a cellar.",
"The Wet Slime got you. Not a fire slime. Not a poison slime. A wet slime. " +
"An ambient, damp, fundamentally inoffensive slime that nonetheless " +
"managed to be fatal to you specifically. The slime has resumed being wet. " +
"You have resumed being a problem for the healthcare system.",
"You slipped. That's it. You slipped on something unidentified on the " +
"Soggy Cellar floor — the name should have been a warning, it was a warning, " +
"you did not take the warning — hit your head, and that was that. " +
"The Angry Badger nearby watched this happen and felt nothing.",
"The Angry Badger was, it turns out, very angry. You were not prepared " +
"for the depth of the anger. You are now in medical care reflecting " +
"on the gap between 'Angry Badger' as a concept and 'Angry Badger' " +
"as an experience. The gap is significant. The badger is still angry.",
"You fought bravely. History will record this as 'bravely.' The rats " +
"will record it as 'lunch,' which is a matter of perspective, " +
"and the rats have the stronger perspective here because they won. " +
"You are expected to make a full recovery. Expected is doing a lot of work " +
"in that sentence.",
"Your Basic Ass Sword broke on the first swing. Not bent. Not chipped. " +
"Broke. In half. On a rat. You had a moment to process this fully " +
"before losing consciousness, which is more processing time than " +
"most people get in this situation. You used it to feel regret.",
"Press F. Just press F. The Soggy Cellar has won this round, which is " +
"a sentence that should embarrass everyone involved. Respawn in 24 hours. " +
"Use the time to consider whether 'adventurer' was the right career path " +
"or whether it is simply the path you are on.",
"The ceiling dripped on you. You looked up. The rat hit you while you " +
"were looking up. This sequence of events is, in its own way, " +
"a complete story about who you are as an adventurer. " +
"The healthcare system has received your chart. They are not surprised.",
"You died to a Wet Slime and a Giant Rat working in what can only be " +
"described as accidental coordination. They were not coordinating. " +
"They just both happened to be there. This is worse, somehow. " +
"A coordinated attack you could respect. This was just Tuesday for them.",
"The dungeon is four feet underground. It is damp. It contains rats " +
"and slimes and one badger with emotional problems. You did not survive it. " +
"This information is being processed by multiple parties including " +
"yourself, your healthcare provider, and the badger, who feels nothing.",
"You have died in the Soggy Cellar for what the records indicate is " +
"not the first time, which the records find notable. The records " +
"have been updated. The update reads: 'again.' The healthcare system " +
"is beginning to recognise your face. This is not the achievement it sounds like.",
"Something bit you. You're not entirely sure what. The darkness was " +
"involved, and the dampness, and a sound that in retrospect was " +
"a warning and at the time seemed like ambience. You are now ambience " +
"for the medical recovery ward. Try to be quieter than the Soggy Cellar.",
"The Wet Slime engulfed your boots. The Knobby-Ass Boots, to be specific, " +
"which offered less traction than anticipated on a wet floor, " +
"which is to say none. You went down fast. The slime was apologetic " +
"about it in the way that slimes are, which is not at all.",
"You had a plan. The plan was good. The plan did not account for there " +
"being two rats instead of one, which in retrospect is the kind of " +
"assumption that ends careers. Your career has not ended. It has paused, " +
"for 24 hours, in a medical facility, reconsidering its assumptions.",
"An Angry Badger and a Wet Slime and a Giant Rat walked into a cellar. " +
"You were already in the cellar. This is not a joke. There is no punchline. " +
"You are the punchline. You are currently in medical care being the punchline.",
},
// ── TIER 2: THE GOBLIN WARRENS ───────────────────────────────────────────
// Dying here is more understandable but no less embarrassing. Goblins are
// real monsters. You still lost to them. They're goblins.
2: {
"The goblin did not look threatening. This was a trap. The goblin was, " +
"in fact, threatening, and had been for some time, and had been waiting " +
"for someone to underestimate him specifically. You were that someone. " +
"He has returned to his warrens. You have been sent to medical care.",
"Three goblins. You handled two. The third one was waiting. " +
"Goblins, it turns out, have a concept of patience that you " +
"failed to account for. The patient goblin is now slightly richer. " +
"You are now slightly more medicated. The exchange rate favours the goblin.",
"The Kobold was not listed as a threat. The Kobold disagreed with this " +
"assessment at considerable length and velocity. Your Shitty Armor " +
"absorbed the first disagreement and then stopped absorbing. " +
"The Kobold made its point. You have conceded the point. Medically.",
"A Trap Spider. In a warren. Obviously there was a Trap Spider. " +
"The name of the dungeon is the Goblin Warrens and goblins are " +
"famous for their traps and you walked into a web the size of a doorway " +
"because you were looking at the goblins. The spider was not the goblins.",
"You cleared the first room. You cleared the second room. The third room " +
"cleared you, which is a thing that happens and a sentence that " +
"will be on your medical chart indefinitely. Room three: dangerous. " +
"This information is available to you now, retroactively, useless.",
"The Goblin Warchief was not supposed to be there. That's the official " +
"position. The unofficial position is that the Goblin Warchief " +
"is absolutely supposed to be there, has always been there, " +
"and you should have checked. You did not check. The Warchief checked for you.",
"Your sword arm got tired. This is an embarrassing thing to admit " +
"but it is the honest account of what happened in the Goblin Warrens " +
"between the second and third encounter. Arm tired. Goblin fast. " +
"Healthcare called. The sequence is complete.",
"The goblins coordinated. Actually coordinated — flanked you, " +
"drew your attention left while the attack came right, " +
"used the terrain. You did not know goblins did that. " +
"You know now. The knowledge cost 24 hours and some dignity.",
"A Kobold with a crossbow. In the dark. Across a room you couldn't " +
"see clearly. This is not a fair fight. Nothing about the Goblin Warrens " +
"is fair. That's the entire deal. You knew the deal. " +
"The bolt knew the deal better than you did.",
"You slipped on something goblin-related. You do not want to know " +
"what it was. The floor of the Goblin Warrens is not clean. " +
"The fall was not dignified. The subsequent encounter with " +
"the subsequent goblin was not survivable. Here we are.",
"The warrens go deeper than the map suggested. You went deeper than " +
"your level suggested. These two facts met in a corridor and " +
"produced a medical emergency that the healthcare system " +
"is processing with the enthusiasm of an organisation that " +
"has processed this before.",
"Trap. You found the trap. Specifically, you found it with your foot, " +
"and then your face, and then your general body in a way that " +
"involved the floor. The goblins who set the trap have noted " +
"its success in whatever the goblin equivalent of a ledger is. " +
"You are a successful data point for their trap program.",
"The goblin was smaller than you. The goblin was faster than you. " +
"The goblin had friends and you had a Slightly Less Shit Iron Sword " +
"and misplaced confidence. The misplaced confidence did not survive " +
"the encounter. Neither did you, technically, for 24 hours.",
"You got lost. In the warrens. Which are, by definition, a warren — " +
"a maze of tunnels built by creatures who live there and know " +
"every turn. You got lost and then you got found, by goblins, " +
"which is the worst way to be found in this context.",
"Three arrows. You saw the first one coming. The second one you heard. " +
"The third one you did not experience as a separate event " +
"from the second one, which tells you everything about the timing. " +
"The kobold archers have been congratulated by their colleagues.",
"The Trap Spider's web was across a doorway you had already walked " +
"through once, going in. It wasn't there going in. The spider " +
"built it while you were dealing with the goblins. " +
"The spider was waiting. Spiders are good at waiting. " +
"You were not good at checking doorways twice.",
"You ran out of dungeon before you ran out of goblins, " +
"which sounds like it should be good news but meant " +
"you were cornered in the last room with more goblins " +
"than exits. The math did not work in your favour. " +
"The math rarely does in the Goblin Warrens.",
"The Goblin Warchief had a horn. You learned about the horn " +
"thirty seconds before you learned about the twelve goblins " +
"the horn summons. The horn was loud. The goblins were fast. " +
"The medical transport was eventually located. A difficult day.",
},
// ── TIER 3: THE CURSED CRYPT ─────────────────────────────────────────────
// Dying here is understandable. These are proper monsters. The shame
// is less about competence and more about hubris.
3: {
"The Draugr was asleep when you entered. You were quiet. Not quiet enough. " +
"The Draugr's definition of 'quiet' is stricter than yours " +
"and its response to noise is well-documented and physical. " +
"You are in medical care. The Draugr is asleep again.",
"A ghost. You cannot hit a ghost. You tried to hit the ghost. " +
"The ghost watched you try to hit it with what it correctly " +
"identified as a sword, and then it did what ghosts do, " +
"which is not care about swords and continue being a ghost.",
"The Cursed Crypt is cursed. This is in the name. The curse " +
"manifested as a compulsion to walk into the room " +
"with the most skeletons and swing at the first one. " +
"You did this. The curse was efficient. The skeletons were numerous.",
"Three skeletons. Fine. Five skeletons. Manageable. " +
"The eighth skeleton that came through the door you " +
"thought was an exit was neither fine nor manageable. " +
"The eighth skeleton was the end of the encounter from your perspective.",
"The Draugr hit you once. Once was sufficient. " +
"Your armor held the first blow and then had a brief existential crisis " +
"about its structural integrity and resolved that crisis " +
"by failing. The Draugr needed only the one.",
"The ghost phased through your sword, through your armor, " +
"through your carefully maintained sense of tactical awareness, " +
"and through the part of your nervous system responsible " +
"for staying upright. Ghosts do not fight fair. " +
"They are not required to. They are ghosts.",
"You found the crypt boss room. This was not the plan. " +
"The plan was to find treasure and leave before finding " +
"the crypt boss room. The crypt boss room found you instead, " +
"which is a subtle but important distinction " +
"that is not available to you right now.",
"The curse got you on the way out. Not in — you navigated in fine. " +
"The curse was waiting on the way out, which is deeply unfair " +
"and also completely consistent with being called a curse. " +
"You are in medical care. The crypt is still cursed.",
"A Draugr, two skeletons, and a ghost in a room that was supposed " +
"to be empty according to your extremely unreliable " +
"pre-run intelligence. The intelligence was wrong. " +
"The room was not empty. The distinction matters to your healthcare provider.",
"The skeleton archers were a surprise. The crypt looked like " +
"a melee crypt — close quarters, low ceilings, short sight lines. " +
"The skeleton archers had compensated for this " +
"by being very accurate at short range. Live and learn. " +
"In 24 hours. When you are alive again.",
"Something in the Cursed Crypt cursed you specifically, " +
"which is both an achievement and a disaster. " +
"You were cursed enough to be notable. The curse assessed you, " +
"selected you, and applied itself with intention. " +
"You are special. The specialness requires medical attention.",
"The Draugr spoke. You did not know they spoke. Nobody warned you. " +
"You stopped, briefly, because something in you wanted to hear " +
"what a Draugr had to say. The Draugr used this pause efficiently. " +
"You will not stop next time. There will be a next time in 24 hours.",
"Dark room. Something in it. You had a torch. The torch went out. " +
"The something in the room did not require light to function. " +
"You required light to function. The something was aware of this asymmetry " +
"and applied it professionally.",
"You got cocky. There is no other explanation. You were doing well — " +
"three rooms cleared, good haul developing, exit in sight — " +
"and you got cocky and opened a door that had a very clear " +
"'do not open this door' energy and opened it anyway. " +
"The door was correct about itself.",
"The skeleton fell apart when you hit it. You felt good about this. " +
"The other eleven skeletons in the room did not fall apart. " +
"You had a moment of feeling good followed by a longer moment " +
"of not feeling anything, which is the medical situation.",
},
// ── TIER 4: TROLL BRIDGE DEPTHS ─────────────────────────────────────────
// Dying here is a serious matter. These are high-level monsters.
// The tone shifts from embarrassment to something closer to respect
// for the thing that killed you.
4: {
"The Troll did not notice you at first. When it noticed you, " +
"you were briefly grateful for the time you'd had when it hadn't. " +
"Then it acted on the noticing. You are in medical care. " +
"The Troll has returned to its business, which does not involve you.",
"A Stone Giant. You knew there were Stone Giants in the Troll Bridge Depths. " +
"Knowing and experiencing are different scales of the same information " +
"and the experiential scale is considerably larger than you anticipated. " +
"The Stone Giant was the appropriate size for a Stone Giant. " +
"You were not the appropriate size for this encounter.",
"The Cursed Knight had been down there a long time. " +
"You could tell because of the armor — old, wrong era, " +
"still functional in ways that defy the passage of centuries. " +
"The Knight fought like someone who had been practicing " +
"for exactly this encounter, in this corridor, for decades. " +
"They had been. You had not.",
"Two Trolls. You planned for one. The plan was good for one. " +
"The second Troll arrived from a tunnel you had assessed " +
"as non-threatening, which is the last assessment you made " +
"before the assessment became irrelevant.",
"The Stone Giant threw a rock. From across the chamber. " +
"At you specifically, with what appeared to be accurate intent. " +
"You did not know Stone Giants had that kind of range or precision. " +
"You are in possession of this knowledge now. " +
"The knowledge is available to you upon recovery.",
"The Cursed Knight's sword went through your Enhanced Plate " +
"in a way that Enchanted Plate is not supposed to permit. " +
"The Knight is old enough to have fought enchanted armor before. " +
"The Knight had notes. The Knight applied the notes.",
"The depths went deeper. You followed them. " +
"The things that live in the deepest parts of the Troll Bridge Depths " +
"do not come up, generally, because the things above them are also " +
"dangerous and the arrangement suits everyone. " +
"You disrupted the arrangement. The arrangement corrected itself.",
"A Troll, a Stone Giant, and a Cursed Knight in the same corridor " +
"at the same time is not a coincidence. It is a configuration " +
"that the Troll Bridge Depths produces when someone has been " +
"pushing their luck across multiple rooms and the dungeon " +
"has decided to consolidate the response.",
"The bridge itself was the trap. You were on the bridge. " +
"The Troll was under the bridge, which is where Trolls are, " +
"which is information that was available to you before you " +
"stepped onto the bridge, and which you had filed " +
"under 'probably not relevant right now.'",
"Your equipment held. Your stamina didn't. " +
"The Troll Bridge Depths is a long dungeon and the things inside it " +
"are not tiring in the way you are tiring and the gap " +
"between your stamina curve and the dungeon's stamina curve " +
"met in the fourth room and the dungeon's curve continued upward.",
"The Cursed Knight spoke your name. Your full name. " +
"You have never told anyone in this dungeon your full name. " +
"You had a moment to think about this before the encounter concluded. " +
"The moment was brief. The thought is available for review upon recovery.",
"It was the small things. Not the Troll. Not the Stone Giant. " +
"The small cursed things that live in the walls and margins " +
"of the Troll Bridge Depths, the ones nobody lists in the dungeon " +
"briefing because they're individually minor and collectively " +
"the reason you are in medical care.",
},
// ── TIER 5: THE ABYSSAL MAW ──────────────────────────────────────────────
// Dying here is not embarrassing. It is almost an achievement.
// The tone is terse, respectful, slightly ominous.
// The thing that killed you deserves one sentence.
5: {
"The demon didn't fight you. It waited until you were tired " +
"and then it stopped waiting. There's a lesson in that. " +
"The lesson is available in 24 hours.",
"An Elder Drake. You know what that means. " +
"You knew before you went in. You went in anyway. " +
"This is either courage or a poor risk assessment " +
"and the Abyssal Maw does not distinguish between the two.",
"The Unnamed was there. You found it or it found you — " +
"the distinction collapses at a certain depth. " +
"You are alive. That's more than it usually leaves.",
"Something in the Abyssal Maw does not have a name " +
"because the people who named things didn't come back. " +
"You came back. Consider this the win it technically is.",
"The Elder Drake breathed once. Your Dragonscale armor " +
"was, in its way, a message to the Drake about its predecessor. " +
"The Drake received the message and responded at length.",
"The demon was old. Older than the dungeon. Older than the concept " +
"of dungeons. It has been down there since before people " +
"started going into deep places looking for treasure. " +
"It is still there. You are here. That's the update.",
"YOU DIED in the Abyssal Maw. In large, honest letters. " +
"The large, honest letters are impressed, which is " +
"more than the large honest letters usually feel. " +
"Recovery in 24 hours. The Maw will be there.",
"The floor in the deepest chamber of the Abyssal Maw is not a floor. " +
"You know this now. What it is remains unclear " +
"because you did not have sufficient time to form a complete theory " +
"before the theory became irrelevant.",
"Three demons, one Elder Drake, and something that doesn't have " +
"a category yet. You lasted longer than most. " +
"The dungeon log reflects this. The dungeon log is not gentle " +
"but it is accurate.",
"The Abyssal Maw goes deeper than the maps indicate. " +
"You found the level below the last mapped level. " +
"Nobody has mapped it because nobody came back to do the mapping. " +
"You are back. The map remains incomplete. " +
"This is a conversation for after recovery.",
"The Unnamed said something as you lost consciousness. " +
"You don't remember what. You remember the shape of it. " +
"This is probably fine. Probably.",
"An Elder Drake, cornered, is different from an Elder Drake with room. " +
"You cornered one. This seemed advantageous at the time. " +
"The Drake had a different read on the geometry.",
},
}
var DungeonEmpty = map[int][]string{
1: {
"You explored the entire Soggy Cellar and found: one dead rat (not your kill), " +
"a suspicious smell, and the growing suspicion that adventure is complete bullshit. " +
"You return home with nothing but the experience. " +
"The experience was bad and you would like a refund.",
"Three hours. Three hours in there. The rats were apparently " +
"on some kind of rodent holiday. You found one button behind a loose stone. " +
"It was a button, not a coin. An ordinary button. " +
"You are home now. The button is in your pocket. You don't know why.",
"Nothing. The Soggy Cellar had nothing in it today. " +
"Not even a pot. There were pots, but smashing them yielded nothing, " +
"which has never once been true in any dungeon worth the name. " +
"You smashed all the pots anyway. Out of principle. Out of grief.",
"A chest. There was an actual chest. You opened it. " +
"It played a little tune — a proper, sincere, full-length discovery fanfare " +
"for a chest that contained absolutely nothing. " +
"You stood there and listened to the whole tune. " +
"You don't know why. Respect for the process, maybe.",
"The monsters had already been cleared. By whom is unclear. " +
"Someone faster, better equipped, more prepared, and apparently " +
"more punctual than you. They left footprints. " +
"The footprints were mocking you. You felt it.",
"The Soggy Cellar was, today, simply a cellar. Soggy, yes. " +
"Damp, absolutely. Full of rats and opportunity? No. " +
"Just a cellar underground with nothing in it " +
"and you in it looking for things that weren't there.",
"You searched for two hours and found: some damp, a rat hole " +
"that went nowhere useful, a piece of wood that might have been " +
"a weapon at some point in a different life, and the strong conviction " +
"that someone else already had a very good day in here recently.",
"The rats ran from you today. This is new. You don't know what it means. " +
"It means there's nothing left to protect, as it turns out. " +
"The rats had already eaten everything interesting. " +
"You found the aftermath. The aftermath paid nothing.",
"Empty. Completely, aggressively, personally empty. " +
"The Soggy Cellar had one job today and declined it. " +
"You have returned home with XP that barely qualifies as XP " +
"and a new, deeper understanding of disappointment as a lifestyle.",
"You found a locked door. You found a way to open the locked door. " +
"Behind the locked door was another locked door. " +
"Behind the second locked door was a small room with nothing in it " +
"except the specific silence of a room that used to have something in it " +
"and doesn't anymore.",
"The dungeon was empty in the way that says someone was here recently. " +
"Fresh tracks. Still-warm torch brackets. One rat looking nervous " +
"in a way that suggests it witnessed something. " +
"You got there second. Being second in dungeons is being last.",
"Every door opened. Every chest empty. Every crevice checked. " +
"Every pot smashed, every loose stone lifted, every shadow assessed. " +
"Nothing. The Soggy Cellar has been professionally cleaned " +
"by someone who was not you and did not leave a finder's fee.",
},
2: {
"The Goblin Warrens were staffed today but not stocked. " +
"Goblins everywhere, treasure nowhere. You fought your way " +
"through three rooms of nothing valuable and came home " +
"with XP and a strong sense of having been personally targeted " +
"by the random number generator.",
"The goblins had nothing on them. You checked. Thoroughly. " +
"Goblins are supposed to hoard things — it's the whole deal with goblins. " +
"These goblins had apparently subscribed to a minimalist philosophy " +
"and gotten rid of everything. You got rid of the goblins. " +
"The net result was nothing.",
"A chest. A locked chest. A locked chest in a trapped room " +
"that took you twenty minutes to navigate safely. " +
"The chest contained a goblin IOU for 'eight copper, payable eventually.' " +
"The goblin is not available to honour the IOU.",
"The warren went deeper than the map suggested. " +
"You followed it to the bottom, fighting the whole way. " +
"The bottom contained a goblin who looked as surprised to see you " +
"as you were to find nothing else there. " +
"You both agreed, silently, that this wasn't how today was supposed to go.",
"Room after room after room of goblins and kobolds " +
"and trap spiders and none of them carrying anything worth the walk. " +
"The Goblin Warrens had a sale recently. You were not informed. " +
"Everything has already been liquidated. You are the liquidator of nothing.",
"You found the goblin treasury. You know this because it said " +
"'TREASURY' above the door in goblin script, which you cannot read, " +
"but which a helpful kobold graffitied the translation of nearby. " +
"The treasury was empty. Someone got here first. " +
"The translation is the only treasure you're taking home.",
},
3: {
"The Cursed Crypt was cursed today toward emptiness. " +
"You fought the undead — all the undead, it felt like, " +
"every skeleton in the crypt standing up to discuss your presence — " +
"and none of them had anything worth taking. " +
"Skeletons, it turns out, travel light.",
"Three rooms cleared, zero treasure found. The fourth room had a sarcophagus. " +
"You opened the sarcophagus. The sarcophagus was empty. " +
"In retrospect the Draugr had already left for the day. " +
"You opened an empty box dramatically and then went home.",
"The ghosts had nothing. You cannot take things from ghosts regardless, " +
"but usually there are things nearby that they're haunting " +
"that you can take. Today the ghosts were haunting a bare room " +
"with stone walls and the specific sadness of things that " +
"have been haunting nothing for a very long time.",
"The crypt was picked clean. Ancient clean — not recently cleaned, " +
"but cleaned at some point in history by someone thorough " +
"who left nothing and sealed it and the Draugr and skeletons " +
"and ghosts have been guarding an empty crypt ever since " +
"out of what can only be described as institutional inertia.",
},
4: {
"The Troll Bridge Depths ran empty today in the way that deep things " +
"sometimes do — everything present, nothing accessible. " +
"You fought your way through Trolls and Cursed Knights " +
"and Stone Giants and came out the other side with bruises " +
"and XP and exactly nothing in your pockets.",
"A treasury room. Well-defended. Three Trolls, two Cursed Knights, " +
"a Stone Giant as a bonus. You cleared it. " +
"The treasury had been emptied before you arrived. " +
"Possibly before any of the monsters arrived. " +
"They were guarding an empty room for reasons lost to history.",
"The dungeon had a good day before you arrived. " +
"The dungeon has bad days too, but today was not the dungeon's bad day. " +
"Today was your bad day. You were in the dungeon on the dungeon's good day " +
"and everything was taken and everything that tried to take you succeeded " +
"and you are home now with the participation award, which is XP.",
},
5: {
"The Abyssal Maw gave you nothing today except survival, " +
"which at this tier is actually something. " +
"You went in. You came out. The space between those two facts " +
"contains several encounters you will be processing for some time. " +
"Nothing of material value. Everything of experiential value. " +
"The distinction matters less than it used to.",
"The demons were between you and everything worth taking. " +
"You dealt with the demons. Behind them: more demons. " +
"Behind them: the Elder Drake. Behind the Elder Drake: nothing. " +
"The Abyssal Maw is well-defended for a room that turns out " +
"to have had nothing in it today.",
"The Unnamed was in the way of the treasure room. " +
"You did not attempt to move the Unnamed. " +
"This was the correct decision. You went home with XP " +
"and the knowledge that some doors are better left as doors.",
},
}
var DungeonSuccess = map[int][]string{
1: {
"Success! Relative to your recent attempts, which mostly involved " +
"screaming and losing consciousness. You found {item} worth €{value}. " +
"The rats respected you marginally more on the way out. " +
"You chose not to investigate why. Some respects are best left unexplored.",
"You cleared the Soggy Cellar of one rat and found {item} worth €{value}. " +
"The other rats were watching from the shadows and agreed not to intervene, " +
"apparently out of pity. Pity! You have been pitied by rats. " +
"And yet you have {item}. The rats have a hole. You're ahead.",
"Not bad. Not good either, let's be honest, but not bad. " +
"You found {item} worth €{value}, took a hit that'll bruise nicely by morning, " +
"and made it out without dying. By your current standards, " +
"this is a triumph. Sad, but measurably true.",
"You killed a thing. The thing had {item} on it. " +
"You have €{value} more than you started with and {xp} XP " +
"and a new familiarity with the smell of the Soggy Cellar " +
"that no amount of recovery time will fully address. " +
"This is the whole job. This is what adventure is.",
"Level up potential! Well — XP potential. " +
"You found {item} worth €{value} and gained {xp} XP " +
"and somewhere a small chime played that only you could hear. " +
"Progress. Measurable, modest, hard-won progress in a damp cellar.",
"In and out. {item} worth €{value}. One rat with an attitude problem " +
"that has since been resolved. Your Basic Ass Sword is no worse " +
"than when you started, which is its version of a good day. " +
"Everything survived. You are counting this as a win.",
"The Angry Badger had {item}. You weren't expecting that. " +
"You weren't expecting the badger at all, honestly, " +
"but the badger had {item} and now you have {item} " +
"and the badger has consequences. €{value}. {xp} XP. " +
"An unexpected Tuesday.",
"Two rats, one Wet Slime, {item} worth €{value}, and you walked out " +
"under your own power. The Shitty Armor is slightly worse. " +
"Everything else is the same or better. " +
"You have chosen to describe this as 'clean execution' " +
"and nobody in the Soggy Cellar is alive to contradict you.",
"A wild {item} appeared. You used ACQUIRE. It was effective. " +
"€{value} secured, {xp} XP noted, zero hospitalizations. " +
"A complete run. By Soggy Cellar standards, legendary.",
"You found {item} behind a loose stone that three rats were " +
"apparently using as a savings account. The rats objected. " +
"Their objections were noted and overruled. €{value}. " +
"This is the economy working as intended.",
"The cellar was manageable today. That's the whole report. " +
"Manageable. {item}, €{value}, {xp} XP, no deaths, " +
"one close call that was closer than you're admitting " +
"but resulted in nothing clinical. Manageable.",
"You fought your way to the back of the Soggy Cellar " +
"and found {item} worth €{value} in a corner that smelled like " +
"rats had been storing things there for years. " +
"They had. You have the things now. The rats are reconsidering their storage strategy.",
"Solid. Not exciting, not legendary, just solid. " +
"{item} worth €{value}. {xp} XP. All equipment functional. " +
"You have returned home upright and slightly less broke than you left. " +
"This is the dream. This specifically, unimpressively, is the dream.",
},
2: {
"The Goblin Warrens cleared two rooms and {item} worth €{value} " +
"and you are not dead, which this dungeon does not give away freely. " +
"The goblins are impressed, in the way that goblins are impressed, " +
"which is the same way they are everything: angrily.",
"You took {item} from the goblins. The goblins had {item}. " +
"They should not have had it — it's yours now — " +
"but the how of them having it is a story " +
"that ends with someone else having a worse day than yours. " +
"€{value}. You're the winner today.",
"The Goblin Warchief dropped {item} worth €{value} and you took it " +
"before anyone else could form an opinion about that. " +
"{xp} XP. The Warchief's ring is still on your thumb. " +
"The other goblins are making decisions about you. " +
"The decisions are not positive but they are respectful.",
"Trap avoided. Kobold handled. Two goblins negotiated with " +
"(negotiations were physical). {item} acquired, €{value} secured, " +
"exit located and used. This is a textbook run " +
"by the standards of a textbook nobody has written yet " +
"because everyone who tried died in the Goblin Warrens.",
"Three rooms. {item} in room two. €{value} total. " +
"The Trap Spider was in room three and you went to room three " +
"anyway because you had already committed emotionally " +
"and the spider was manageable. You were right. " +
"Being right in the Goblin Warrens is not guaranteed.",
"You collected {item} worth €{value} from the body of a goblin " +
"who was, frankly, carrying more than expected. " +
"This is true of most goblins. They are sentimental creatures " +
"who attach value to things that aren't valuable " +
"and occasionally to things that are. Today: the latter.",
"The warrens gave ground today. Not easily — {xp} XP worth of not easily — " +
"but it gave ground and you took {item} and €{value} " +
"and made it out with your equipment in the same condition it started. " +
"The goblins are annoyed. The goblins are always annoyed. " +
"Today they are additionally annoyed.",
},
3: {
"The Cursed Crypt had {item} worth €{value} and you have it now. " +
"You fought a Draugr and two skeletons and a ghost that " +
"you mostly avoided by walking quickly through rooms " +
"and pretending you couldn't hear it. " +
"Sound tactical approach. {xp} XP. No deaths.",
"Three skeletons, one Draugr, {item} worth €{value}. " +
"The curse was present but mild today — present in the way " +
"that all the torches went out simultaneously and something breathed " +
"in your ear when nothing was near you, but not present in the way " +
"that kills you. A good day by crypt standards.",
"The ghost let you pass. You don't know why. " +
"Ghosts make decisions on criteria that are not available to the living " +
"and today's criteria allowed you through with {item} worth €{value}. " +
"You did not ask questions. You took the {item} and left. " +
"Correct response.",
"You found {item} in the sarcophagus. The Draugr who was supposed to be " +
"in the sarcophagus was in the next room, which gave you time to " +
"take {item} before the situation became complicated. " +
"€{value}. {xp} XP. Timing is everything in the Cursed Crypt.",
"Four rooms. The fourth room had {item} worth €{value} " +
"and the kind of ominous atmosphere that suggests something " +
"terrible used to happen in it but currently doesn't. " +
"Currently was enough. You took the {item} and left " +
"before the 'currently' expired.",
},
4: {
"The Troll went down. The Stone Giant went down. {item} worth €{value} " +
"retrieved from behind them both. {xp} XP. " +
"Your equipment is worse than it was — there are marks on it " +
"that will require explanation — but you are home and solvent " +
"and that is the transaction the Troll Bridge Depths offers.",
"The Cursed Knight's sword went for your throat. " +
"Your Guardian's Helm got in the way. The Knight adjusted. " +
"You adjusted faster. {item} worth €{value}. {xp} XP. " +
"The Helm has a new dent. You have new money. Fair exchange.",
"{item} worth €{value} from the fourth level of the Troll Bridge Depths, " +
"retrieved past a Troll, two Stone Giants, and the specific kind of " +
"architectural malice that suggests the dungeon was designed by someone " +
"who didn't want anyone to get to the fourth level. " +
"You got to the fourth level. Here is what was there.",
"You bribed the Troll. Not with money — Trolls don't want money — " +
"but with the specific kind of tactical retreat that says " +
"'I know where I am and I know what you are and I am choosing " +
"this particular angle of withdrawal.' The Troll respected it. " +
"{item} was in the room behind the Troll. €{value}. {xp} XP.",
},
5: {
"The Abyssal Maw gave up {item} worth €{value} today, " +
"which cost more to retrieve than the number suggests " +
"and was worth every measure of that cost. " +
"{xp} XP. You are home. The Maw is still there. " +
"Both of these facts are remarkable.",
"{item} worth €{value} from the deepest accessible chamber. " +
"The Elder Drake was between you and it. " +
"The Elder Drake is no longer between anything and anything. " +
"You have the {item}. This is what success looks like at Tier 5. " +
"Remember it. Not many people get to.",
"You went into the Abyssal Maw and came back with {item} worth €{value} " +
"and {xp} XP and a story that you will tell carefully, " +
"to people you trust, in private, " +
"because the full version contains several things " +
"that are better experienced than described.",
"The demon had {item}. The demon no longer has {item}. " +
"€{value}. {xp} XP. The exchange was not peaceful. " +
"The exchange was not brief. The exchange was ultimately yours " +
"and that is what the ledger records.",
},
}
var DungeonExceptional = map[int][]string{
1: {
"STOP EVERYTHING. You found {item} worth €{value} in the SOGGY CELLAR. " +
"The SOGGY CELLAR. Where the rats live. Underground. In the damp. " +
"You found something worth €{value} in there and gained {xp} XP " +
"and came home upright. This does not happen. It has happened. " +
"The rats are as surprised as you are.",
"Against all probability and the general expectations of everyone " +
"who has been watching your adventuring career — " +
"which has not been impressive — you found {item} worth €{value} " +
"in the Soggy Cellar. {xp} XP. The dungeon has filed a formal complaint. " +
"The complaint will not be actioned. You have the {item}.",
"A boss. The Soggy Cellar had a boss today. Not a rat. Not an angry badger. " +
"A boss. You fought the boss. You won. You found {item} worth €{value}. " +
"{xp} XP. The rats have appointed a new boss. " +
"The new boss is watching you leave and reconsidering things.",
"What the hell. You got a critical hit. In the Soggy Cellar. " +
"The numbers came up. The RNG loved you. {item} worth €{value}. " +
"{xp} XP. Screenshot this feeling. Frame it. " +
"It is unlikely to repeat at this location.",
"NEW PERSONAL RECORD for the Soggy Cellar. " +
"{item} worth €{value}. {xp} XP. The rats acknowledge your authority " +
"over this specific damp underground space. " +
"This is the most authority you have had over anything. " +
"It smells like rats. It is yours.",
"The Soggy Cellar had a secret room. You found the secret room. " +
"The secret room had {item} worth €{value} in it and {xp} bonus XP " +
"and the specific satisfaction of a secret found, which is " +
"the satisfaction you became an adventurer for. " +
"This is what it's supposed to feel like. Remember this.",
"You found {item} worth €{value} and gained {xp} XP and the Angry Badger " +
"that attacked you on the way out was actually carrying " +
"a second smaller item that you also took. " +
"Two items from one run. The Soggy Cellar is not going to live this down.",
},
2: {
"UNPRECEDENTED. The Goblin Warchief was in residence today " +
"and you fought the Goblin Warchief and you won. " +
"You have {item} worth €{value} and {xp} XP and the signet ring " +
"of a Goblin Warchief on your thumb. " +
"The goblins are in a governance crisis. This is your fault. Good.",
"The Goblin Warrens had a treasury room today. " +
"You found the treasury room. The treasury room had {item} worth €{value} " +
"and several other things of lesser value that sum to a significant " +
"improvement in your financial situation. {xp} XP. " +
"The goblins are devastated. You are not.",
"Critical run. Everything went right. Every roll landed. " +
"Every trap avoided, every goblin dropped, " +
"every room yielded something. {item} worth €{value} total. " +
"{xp} XP. The Goblin Warrens is not supposed to work like this. " +
"It worked like this today. For you. Today.",
"The Kobold Cartographer had a map. You have the map now. " +
"The map led to {item} worth €{value} in a room that isn't on " +
"any other map because the Kobold was the only one who knew about it. " +
"The Kobold no longer knows anything. {xp} XP. " +
"The map is yours. The room was yours today.",
},
3: {
"The Cursed Crypt's inner chamber. Nobody is supposed to reach " +
"the inner chamber in one run. You reached the inner chamber. " +
"{item} worth €{value}. {xp} XP. The Draugr in the inner chamber " +
"had been waiting for centuries for someone to reach it. " +
"They did not expect to lose. Neither did you, honestly.",
"You broke the curse. Not permanently — curses don't break permanently — " +
"but for long enough that the inner rooms opened and you took " +
"{item} worth €{value} before anything could stop you. " +
"{xp} XP. The crypt is cursed again now. You are home and rich. " +
"The timing was everything.",
"A boss encounter in the Cursed Crypt. The boss had been there " +
"since before the crypt was a crypt. You fought the boss. " +
"You won, which is a sentence the boss did not anticipate " +
"being the ending of. {item} worth €{value}. {xp} XP. " +
"The crypt is quieter now.",
},
4: {
"The deepest chamber of the Troll Bridge Depths yielded {item} worth €{value}. " +
"Three Trolls, two Stone Giants, and the Cursed Knight of the Third Bridge " +
"disagreed with this outcome. They were overruled. {xp} XP. " +
"Your equipment has a story to tell. " +
"The story involves those three Trolls and is not suitable for all audiences.",
"The Stone Giant had {item}. The Stone Giant was the size of a room. " +
"The Stone Giant is now the size of a room that is lying down. " +
"€{value}. {xp} XP. You found a way. " +
"The way was neither clean nor dignified but it was a way " +
"and it worked and here you are.",
"EXCEPTIONAL OUTCOME in the Troll Bridge Depths, which is a sentence " +
"that has been said approximately four times in recorded history. " +
"You are one of the four times. {item} worth €{value}. " +
"{xp} XP. The dungeon will remember this.",
},
5: {
"Against all probability, several laws of narrative structure, " +
"and the general understanding that the Abyssal Maw does not " +
"give things up easily, you have returned with {item} worth €{value} " +
"and {xp} XP and a story that begins 'so there were three demons' " +
"and gets significantly more complicated from there.",
"The Elder Drake is dead. You killed an Elder Drake. " +
"Its hoard contained {item} worth €{value}. " +
"This is now a fact about you that is true. " +
"The Abyssal Maw has one fewer Elder Drake. " +
"The dungeon log is noting this with what can only be described " +
"as reluctant respect.",
"The Unnamed retreated. You don't know why. " +
"The Unnamed does not retreat. It retreated today, from you, " +
"and left {item} worth €{value} in the chamber it was occupying. " +
"{xp} XP. There will be a next time. " +
"You will think about what it means that it retreated " +
"and you will not reach a comfortable conclusion.",
"LEGENDARY RUN. The Abyssal Maw at full depth, full clear, " +
"{item} worth €{value}, {xp} XP. " +
"Three demons, an Elder Drake, and something that doesn't have a name. " +
"You beat all of them. You are home. " +
"This is the best day anyone in this community has had " +
"in a dungeon. Write it down. " +
"The dungeon will tell this story differently.",
},
}