Integrate stats, resources, and cosmetics into adventures via conditional branches gated by game state checks. Each of the 9 adventures now has a secret branch that rewards exploration and encourages replay with subtle hints on locked choices. The endgame box now triggers a Destiny adventure that acknowledges all completed adventures and secret branches, with four ending tiers culminating in an ultimate ending when all 9 secrets are found. Also adds the crafting engine, CLAUDE.md and specifications.md for faster onboarding.
272 lines
15 KiB
Text
272 lines
15 KiB
Text
// Dark Fantasy Adventure - Open The Box
|
|
// Theme: Boxes contain souls. Opening them has consequences.
|
|
|
|
character mordecai
|
|
name: Mordecai the Grim
|
|
role: Necromancer
|
|
|
|
character pierrick
|
|
name: Pierrick
|
|
role: Reluctant Hero
|
|
|
|
state
|
|
souls: 0
|
|
corruption: 0
|
|
boxesFreed: 0
|
|
alliedWithMordecai: false
|
|
resistedDarkness: false
|
|
|
|
beat Intro
|
|
The Ashen Wastes stretch before you, gray and lifeless. The sky hasn't seen a color since the Folding. #intro-wastes
|
|
They call it the Folding because that's when the world was creased, bent, and tucked into itself like cardboard. #intro-folding
|
|
pierrick: I didn't ask for this quest. I was a baker. I made bread. Bread doesn't involve cursed boxes. #pierrick-baker
|
|
pierrick: And yet here I am, in a dead land, looking for a necromancer who collects souls in boxes. #pierrick-quest
|
|
A raven lands on a nearby rock. It's carrying a small, black box in its talons. #intro-raven
|
|
The box whispers. You can't make out the words, but you feel them: cold, sad, and slightly annoyed at being carried by a bird. #intro-whispers
|
|
|
|
choice
|
|
Take the box from the raven #opt-take
|
|
souls += 1
|
|
-> TakeBox
|
|
Follow the raven #opt-follow
|
|
-> FollowRaven
|
|
Ignore the raven and keep walking #opt-ignore
|
|
corruption += 5
|
|
-> IgnoreRaven
|
|
|
|
beat TakeBox
|
|
You reach for the box. The raven drops it and flies away, cawing something that sounds like "your problem now." #take-caw
|
|
The box is cold. Not cold like ice. Cold like loneliness. Cold like a Tuesday in February. #take-cold
|
|
pierrick: There's a soul in here. I can feel it. Someone's entire existence, folded up and boxed. #pierrick-soul
|
|
pierrick: Who puts a soul in a box? What kind of person thinks "you know what this soul needs? Cardboard." #pierrick-cardboard
|
|
|
|
choice
|
|
Open the box and free the soul #opt-free-soul
|
|
boxesFreed += 1
|
|
-> FreeSoul
|
|
Keep the box closed -- it might be dangerous #opt-keep-closed
|
|
corruption += 10
|
|
-> KeepClosed
|
|
|
|
beat FreeSoul
|
|
You open the box. A wisp of pale light rises, hovering before you. #free-wisp
|
|
The soul speaks in a voice like wind through empty rooms: "Thank you. I was in there for seven years. No WiFi." #free-speaks
|
|
pierrick: Did a liberated soul just complain about WiFi? #pierrick-wifi
|
|
The soul drifts upward and vanishes. The box crumbles to dust. Something in the air feels lighter. #free-drifts
|
|
souls += 1
|
|
boxesFreed += 1
|
|
-> ThePath
|
|
|
|
beat KeepClosed
|
|
You tuck the box into your pack. The whispers grow quieter, resigned. #keep-tuck
|
|
pierrick: Sorry, box soul. I don't know what happens when I open cursed boxes in cursed lands. #pierrick-sorry
|
|
pierrick: And I'd like to keep my current number of curses at its current number, which is already too many. #pierrick-curses
|
|
corruption += 5
|
|
-> ThePath
|
|
|
|
beat FollowRaven
|
|
The raven flies north, toward the Spine of Boxes -- a mountain range that looks like stacked containers. #follow-north
|
|
pierrick: A land so cursed even the geography is box-shaped. Wonderful. Just wonderful. #pierrick-geography
|
|
You follow the bird for an hour. It leads you to a clearing filled with hundreds of small black boxes, arranged in neat rows. #follow-clearing
|
|
Each one whispers. The combined sound is like a library where every book is complaining. #follow-library
|
|
pierrick: A box graveyard. Or a box prison. I'm not sure which is worse. #pierrick-graveyard
|
|
souls += 5
|
|
-> ThePath
|
|
|
|
beat IgnoreRaven
|
|
You walk past the raven. It stares at you with judgmental bird eyes. #ignore-stare
|
|
pierrick: Don't look at me like that. I'm on a quest. I can't stop for every spooky bird with a soul box. #pierrick-spooky
|
|
The raven caws once, drops the box, and it shatters on the ground. A soul escapes upward. #ignore-shatters
|
|
pierrick: Okay, the bird freed the soul itself. I've been outperformed by a raven. Great start to the quest. #pierrick-outperformed
|
|
boxesFreed += 1
|
|
-> ThePath
|
|
|
|
beat ThePath
|
|
The path narrows as you approach the Citadel of Folds, Mordecai's fortress. #path-narrows
|
|
It's made entirely of dark, interlocking boxes. Some are stone, some are iron, some are... something else. #path-citadel
|
|
pierrick: The architecture here is aggressively cubic. Even the doors are just bigger boxes with hinges. #pierrick-architecture
|
|
A figure appears at the gate. Tall, gaunt, draped in robes that look like unfolded cardboard. #path-figure
|
|
mordecai: Ah. The reluctant hero. You're late. I expected you three chapters ago. #mordecai-late
|
|
|
|
choice
|
|
Demand Mordecai release the souls #opt-demand
|
|
-> DemandRelease
|
|
Ask Mordecai why he collects souls in boxes #opt-ask-why
|
|
-> MordecaiMotivation
|
|
Attack immediately #opt-attack
|
|
corruption += 10
|
|
-> AttackMordecai
|
|
|
|
beat DemandRelease
|
|
pierrick: Release the souls, Mordecai! They don't belong in boxes! #pierrick-release
|
|
mordecai: Don't they? Where do YOU think souls go when the body dies? They drift. They scatter. They're LOST. #mordecai-drift
|
|
mordecai: I give them a home. A container. A purpose. A BOX. #mordecai-home
|
|
mordecai: Is that evil? Or is it... organized? #mordecai-evil
|
|
pierrick: It's both. It's organizationally evil. #pierrick-both
|
|
-> MordecaiMotivation
|
|
|
|
beat AttackMordecai
|
|
You charge at Mordecai. He raises a hand. A wall of boxes materializes between you. #attack-charge
|
|
mordecai: Violence? How unoriginal. Every hero attacks first, asks questions never. #mordecai-violence
|
|
The box wall pushes you back. Gently. Like a firm but polite bouncer. #attack-pushed
|
|
mordecai: I could trap your soul in a box right now. But where's the narrative satisfaction in that? #mordecai-narrative
|
|
mordecai: Sit. Talk. Then you can decide whether to keep fighting. #mordecai-sit
|
|
corruption += 5
|
|
-> MordecaiMotivation
|
|
|
|
beat MordecaiMotivation
|
|
mordecai: Let me show you something. #mordecai-show
|
|
He leads you into the Citadel. The walls are lined with boxes, floor to ceiling. Thousands of them. #motivation-walls
|
|
mordecai: Each box contains a soul. Each soul is preserved, protected, REMEMBERED. #mordecai-preserved
|
|
mordecai: Before me, souls faded. They dissipated into nothing. No memory. No record. Just gone. #mordecai-faded
|
|
mordecai: I built boxes for them. I gave the dead a place to BE. #mordecai-place
|
|
pierrick: That's... almost noble. If you ignore the "trapping souls against their will" part. #pierrick-noble
|
|
mordecai: "Against their will." Do you ask a book if it wants to be on a shelf? #mordecai-book
|
|
|
|
choice
|
|
Side with Mordecai -- the souls are preserved #opt-side
|
|
alliedWithMordecai = true
|
|
corruption += 20
|
|
-> AllyWithMordecai
|
|
Oppose Mordecai -- the souls deserve freedom #opt-oppose
|
|
resistedDarkness = true
|
|
-> OpposeMordecai
|
|
Propose a compromise -- let the souls choose #opt-compromise
|
|
-> CompromisePath
|
|
|
|
beat AllyWithMordecai
|
|
pierrick: Maybe you're right. Maybe the boxes are better than nothing. #pierrick-maybe
|
|
mordecai: Finally! Someone who understands! #mordecai-finally
|
|
mordecai: Here, take this box. It's empty. Fill it with a soul whenever you find one wandering. #mordecai-takebox
|
|
mordecai: Think of it as... community service. For the dead. #mordecai-community
|
|
corruption += 15
|
|
souls += 3
|
|
The box is warm in your hands. But not a good warm. The warm of a fever. The warm of something wrong. #ally-warm
|
|
pierrick: I'm going to regret this, aren't I? #pierrick-regret
|
|
mordecai: Almost certainly. But that's what makes it interesting. #mordecai-certainly
|
|
-> TheVault
|
|
|
|
beat OpposeMordecai
|
|
pierrick: No. The souls should be free. Even if freedom means fading. That's their choice, not yours. #pierrick-free
|
|
mordecai: Choice? Souls don't CHOOSE. They simply ARE. Or aren't. #mordecai-choice
|
|
pierrick: Then I'll choose FOR them. And I choose open. I choose unboxed. #pierrick-unboxed
|
|
mordecai: How heroic. How predictable. How IRRITATING. #mordecai-irritating
|
|
resistedDarkness = true
|
|
Mordecai's eyes darken. The boxes on the walls begin to rattle. The souls inside feel the tension. #oppose-rattle
|
|
-> TheVault
|
|
|
|
beat CompromisePath
|
|
pierrick: What if the souls decided? Open the boxes. Let them choose to stay or go. #pierrick-decide
|
|
mordecai: Let them CHOOSE? That's-- #mordecai-choose
|
|
mordecai: Actually... hm. I never considered asking. #mordecai-asking
|
|
mordecai: In my defense, they're in boxes. It's hard to conduct surveys through cardboard. #mordecai-surveys
|
|
pierrick: Try. #pierrick-try
|
|
mordecai: Fine. But if they all leave, I'm blaming you. And I'm keeping the boxes. They're good boxes. #mordecai-blame
|
|
-> TheVault
|
|
|
|
beat TheVault
|
|
Mordecai leads you deeper, to the Soul Vault. The largest collection of boxed souls in the realm. #vault-leads
|
|
The room is vast. Boxes glow softly in the darkness -- blue, white, pale gold. Each one a life. #vault-room
|
|
pierrick: There must be thousands. #pierrick-thousands
|
|
mordecai: Twelve thousand, four hundred and seven. I'm very organized. #mordecai-organized
|
|
mordecai: They're sorted alphabetically, by era, and by cause of death. The "eaten by dragon" section is quite large. #mordecai-sorted
|
|
|
|
if alliedWithMordecai
|
|
mordecai: With your help, we'll fill the empty shelves. The dead deserve boxes. ALL of them. #mordecai-fill
|
|
A small voice from one of the boxes says: "Actually, I'd rather not." #vault-rather
|
|
mordecai: Shh. The living are talking. #mordecai-shh
|
|
|
|
if resistedDarkness
|
|
pierrick: I'm opening them. All of them. #pierrick-opening
|
|
mordecai: You'll have to get through me first. And I warn you -- I am VERY attached to my box collection. #mordecai-attached
|
|
|
|
choice
|
|
Open all the boxes at once #opt-open-all
|
|
boxesFreed += 100
|
|
-> OpenAllBoxes
|
|
Open one box and see what happens #opt-open-one
|
|
boxesFreed += 1
|
|
-> OpenOneBox
|
|
Convince Mordecai to open them together #opt-convince if corruption < 30
|
|
-> ConvinceMordecai
|
|
Press your hand to the boxes and offer your blood as a bridge|||You feel a strange warmth in your veins, as though something ancient recognizes you... #opt-blood [if hasResource("Blood", 20)]
|
|
-> BloodCommunion
|
|
|
|
beat BloodCommunion
|
|
markSecretBranch("darkfantasy_blood_communion")
|
|
You press your palm against the nearest box. Your blood sings. The box answers. #blood-press
|
|
Every box in the vault flickers -- not with light, but with voices. Twelve thousand souls, speaking at once. #blood-voices
|
|
pierrick: They're not screaming. They're... introducing themselves. #pierrick-introduce
|
|
mordecai: Impossible. I've tried to speak with them for decades. They never answered ME. #mordecai-impossible
|
|
pierrick: Maybe they didn't trust you. You're their jailer. I'm just a baker with strange blood. #pierrick-jailer
|
|
The souls whisper a consensus: half wish to stay, half wish to leave. They've voted. Through cardboard. Democracy at its most absurd. #blood-consensus
|
|
mordecai: They VOTED? Without a suggestion box? Wait -- they ARE the suggestion boxes. #mordecai-voted
|
|
boxesFreed += 50
|
|
souls += 10
|
|
-> FinalChoice
|
|
|
|
beat OpenOneBox
|
|
You pick a box at random. It's small, blue, and warm. The label reads: "Elara. Farmer. Liked cats." #one-pick
|
|
You open it. A gentle light rises. A woman's voice, soft and clear: #one-light
|
|
The soul speaks: "Oh. Oh my. How long has it been?" #soul-how
|
|
pierrick: A while. Are you okay? #pierrick-okay
|
|
The soul speaks: "I was dreaming. Of fields, and cats, and sunshine. The box kept me safe. But it also kept me still." #soul-dream
|
|
The soul speaks: "I think... I'd like to move again. If that's alright." #soul-move
|
|
mordecai: You see? She was SAFE in there. #mordecai-safe
|
|
pierrick: Safe isn't the same as free, Mordecai. #pierrick-safefree
|
|
souls += 1
|
|
-> FinalChoice
|
|
|
|
beat OpenAllBoxes
|
|
You grab boxes and open them. One after another. Light fills the vault. #all-grab
|
|
Souls rise like lanterns, hundreds of them, filling the air with whispered thank-yous and confused questions about what year it is. #all-rise
|
|
mordecai: No! My collection! My life's work! MY BOXES! #mordecai-collection
|
|
pierrick: They were never yours, Mordecai. #pierrick-never
|
|
The souls spiral upward, through the ceiling, through the Citadel, into the sky. #all-spiral
|
|
For the first time in years, the Ashen Wastes see color. Pale golds and blues streak across the gray. #all-color
|
|
mordecai: It's... actually quite pretty. I hate that it's pretty. #mordecai-pretty
|
|
boxesFreed += 100
|
|
-> FinalChoice
|
|
|
|
beat ConvinceMordecai
|
|
pierrick: Mordecai. Open them with me. Not as an enemy. As someone who cared enough to build the boxes. #pierrick-with
|
|
mordecai: I... built them because I was afraid. Of losing people. Of forgetting. #mordecai-afraid
|
|
mordecai: Every soul I boxed was a person I didn't want the world to forget. #mordecai-forget
|
|
pierrick: Then let them go. Not because you don't care. Because you do. #pierrick-letgo
|
|
mordecai: That's the most annoyingly wise thing anyone has said to me. And I've spoken to twelve thousand souls. #mordecai-annoying
|
|
Mordecai reaches for a box. His hands shake. He opens it. A light rises, and he smiles. Just barely. #convince-opens
|
|
mordecai: Fine. We open them. Together. And then I'm retiring. Maybe I'll take up pottery. Boxes are exhausting. #mordecai-retiring
|
|
boxesFreed += 50
|
|
alliedWithMordecai = true
|
|
-> FinalChoice
|
|
|
|
beat FinalChoice
|
|
The vault is quieter now. Some boxes are open. Some are still closed. The decision hangs in the air. #final-quiet
|
|
|
|
if alliedWithMordecai
|
|
mordecai: I suppose there's something to be said for empty boxes. They have... potential. #mordecai-potential
|
|
mordecai: An empty box can become anything. A full box is just... a box. #mordecai-empty
|
|
|
|
if resistedDarkness
|
|
pierrick: The darkness said "stay in the box." I said no. That feels important. #pierrick-darkness
|
|
|
|
-> Ending
|
|
|
|
beat Ending
|
|
The wind shifts. The Ashen Wastes feel different. Not healed. But healing. #ending-wind
|
|
pierrick: I came here to fight a necromancer. Instead I had a philosophical debate about boxes and souls. #pierrick-came
|
|
pierrick: This is the weirdest career change from "baker" I could have imagined. #pierrick-career
|
|
mordecai: For what it's worth, you're not a bad hero. A bit preachy. But not bad. #mordecai-worth
|
|
pierrick: And you're not a bad necromancer. A bit dramatic. But not bad. #pierrick-notbad
|
|
mordecai: I CULTIVATE the drama. It's part of the aesthetic. #mordecai-drama
|
|
|
|
if boxesFreed > 50
|
|
The sky clears further. The first sunset in years paints the world in warm colors. #ending-sunset
|
|
Souls drift across the sky like lanterns, finding their way home, or wherever souls go when the box is finally opened. #ending-souls
|
|
|
|
pierrick: Souls freed: $boxesFreed. Corruption level: $corruption. Baker skills still intact: surprisingly yes. #pierrick-stats
|
|
mordecai: Empty boxes remaining: too many. Regrets: some. Plans for pottery class: confirmed. #mordecai-stats
|
|
pierrick: Some boxes hold treasure. Some hold darkness. Some hold souls. #pierrick-some
|
|
pierrick: But every box, eventually, deserves to be opened. Even the scary ones. #pierrick-every
|
|
mordecai: Especially the scary ones. That's where the good stuff is. #mordecai-especially
|
|
-> .
|