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.
292 lines
14 KiB
Text
292 lines
14 KiB
Text
// Pirate Adventure - Open The Box
|
|
// Theme: High seas treasure hunting, but the treasure is always boxes
|
|
|
|
character captain
|
|
name: Blackbeard the Unboxable
|
|
role: Pirate Captain
|
|
|
|
character mate
|
|
name: Linu
|
|
role: First Mate
|
|
|
|
state
|
|
doubloons: 30
|
|
boxesFound: 0
|
|
crewMorale: 50
|
|
hasMap: false
|
|
betrayed: false
|
|
|
|
beat Intro
|
|
The salty wind hits your face as you stand on the deck of The Corrugated Corsair. #intro-wind
|
|
captain: Arrr! Welcome aboard, ye scurvy landlubber! #captain-welcome
|
|
captain: I be Blackbeard the Unboxable! They call me that because no box can contain me! #captain-name
|
|
mate: They call him that because he can't figure out how to open boxes, Captain. #mate-truth
|
|
captain: LINU! What have I told ye about telling the truth?! #captain-truth
|
|
mate: That it's "mutiny with extra steps," Captain. #mate-mutiny
|
|
|
|
choice
|
|
Ask about the mission #opt-mission
|
|
-> MissionBrief
|
|
Ask why the ship is made of cardboard #opt-cardboard
|
|
-> CardboardShip
|
|
Attempt to leave immediately #opt-leave
|
|
-> CantLeave
|
|
|
|
beat CardboardShip
|
|
captain: The Corrugated Corsair is made from the finest triple-wall cardboard! #captain-corsair
|
|
captain: She's waterproof! Mostly. Don't touch the starboard side. Or breathe on it. #captain-waterproof
|
|
mate: We've lost three deckhands to structural dampness this week. #mate-dampness
|
|
captain: They knew the risks when they signed up for a cardboard pirate ship. #captain-risks
|
|
-> MissionBrief
|
|
|
|
beat CantLeave
|
|
You turn toward the gangplank. It's gone. It was also made of cardboard. A seagull ate it. #leave-gangplank
|
|
captain: Ha! No one leaves Blackbeard's crew! Mostly because the exit dissolved! #captain-noleave
|
|
mate: We really should switch to wood, Captain. #mate-wood
|
|
captain: NEVER! Cardboard or death! #captain-death
|
|
-> MissionBrief
|
|
|
|
beat MissionBrief
|
|
captain: We be searching for the legendary Treasure Box of the Seven Seas! #captain-treasure
|
|
captain: A box so valuable, it contains ALL other boxes! The mother of all boxes! #captain-mother
|
|
mate: Supposedly. The map was found inside a box, so its reliability is questionable. #mate-map
|
|
captain: Every map is found inside SOMETHING, Linu! That's how maps work! #captain-maps
|
|
hasMap = true
|
|
The captain unfurls a map. It's just a drawing of a box with an X on it. #mission-unfurl
|
|
|
|
choice
|
|
Follow the map as-is #opt-follow
|
|
-> FollowMap
|
|
Suggest the map might be upside down #opt-upside
|
|
-> UpsideDown
|
|
Question whether a box drawing constitutes a map #opt-question
|
|
-> QuestionMap
|
|
Stomp your leg on the deck with authority|||Your sea legs might earn some respect around here... #opt-pegleg [if hasEquipped("legs", "PegLeg")]
|
|
-> OneOfUs
|
|
|
|
beat OneOfUs
|
|
markSecretBranch("pirate_one_of_us")
|
|
You stomp your peg leg on the cardboard deck. It makes a deeply satisfying THUNK. #pegleg-stomp
|
|
The entire crew goes silent. Then Blackbeard's eyes widen. #pegleg-eyes
|
|
captain: That sound... that THUNK... ye have a PEG LEG! #captain-pegleg
|
|
captain: Linu! This one's got the leg! THE LEG! They're one of US! #captain-one
|
|
mate: The crew is going wild, Captain. They haven't been this excited since we found that box of rum. #linu-excited
|
|
captain: Forget the map! This changes everything! A peg-legged sailor on a cardboard ship -- that's DESTINY! #captain-destiny
|
|
captain: Ye get double rations! And by rations I mean cardboard, but DOUBLE cardboard! #captain-rations
|
|
crewMorale += 30
|
|
boxesFound += 1
|
|
-> FollowMap
|
|
|
|
beat QuestionMap
|
|
captain: Of course it's a map! It has an X! #captain-x
|
|
mate: Captain, you drew the X yourself. Five minutes ago. In crayon. #mate-crayon
|
|
captain: It was TACTICAL crayon, Linu! #captain-crayon
|
|
mate: There's no such thing as tactical crayon. #mate-tactical
|
|
captain: There is now! I just invented it! Innovation, Linu! #captain-innovation
|
|
crewMorale -= 10
|
|
-> FollowMap
|
|
|
|
beat UpsideDown
|
|
You rotate the map 180 degrees. It looks exactly the same because it's just a square. #upside-rotate
|
|
captain: By Davy Jones' Box Collection! The map was upside down the whole time! #captain-jones
|
|
mate: Captain, it's a square. It looks the same from every angle. #mate-square
|
|
captain: That's what makes it such a CLEVER map! #captain-clever
|
|
crewMorale += 10
|
|
-> FollowMap
|
|
|
|
beat FollowMap
|
|
The Corrugated Corsair sets sail across the Cardboard Sea. #follow-sail
|
|
After two days of sailing, you spot something on the horizon. #follow-horizon
|
|
mate: Captain! Land ho! Or... box ho? It appears to be a floating box. #mate-landho
|
|
captain: A floating box in the ocean? That's either our treasure or our lunch. #captain-floating
|
|
captain: The crew has been eating boxes for days. We're running low on provisions. #captain-provisions
|
|
mate: We're running low on ship, too. Someone ate part of the hull. #mate-hull
|
|
|
|
choice
|
|
Sail toward the floating box #opt-sail-toward
|
|
-> FloatingBox
|
|
Fire a cannon at it first #opt-cannon if doubloons > 10
|
|
doubloons -= 10
|
|
-> FireCannon
|
|
Send Linu to investigate in a rowboat #opt-send-linu
|
|
-> LinuInvestigates
|
|
|
|
beat FireCannon
|
|
captain: FIRE THE CARDBOARD CANNONS! #captain-fire
|
|
The cannon makes a "pffft" sound and launches a cardboard ball approximately twelve feet. #cannon-pffft
|
|
It lands in the water with a soft, disappointing splash. #cannon-splash
|
|
mate: Effective range: twelve feet. Effective damage: emotional. #mate-range
|
|
captain: The enemy doesn't know our cannons are useless! That's our advantage! #captain-advantage
|
|
-> FloatingBox
|
|
|
|
beat LinuInvestigates
|
|
Linu rows out to the box in a tiny boat made of -- you guessed it -- cardboard. #linu-rows
|
|
mate: It's a crate, Captain! Marked "Property of the Seven Seas Box Co." #linu-crate
|
|
mate: Also, my boat is dissolving. Permission to hurry? #linu-dissolving
|
|
captain: Permission granted! Save the box first, though! #captain-savebox
|
|
mate: Before me?! #linu-before
|
|
captain: Priorities, Linu! #captain-priorities
|
|
boxesFound += 1
|
|
-> FloatingBox
|
|
|
|
beat FloatingBox
|
|
You pull alongside the mysterious floating box. It's enormous. Waterlogged but intact. #floating-pull
|
|
captain: This be it! The Treasure Box of the Seven Seas! #captain-thisbe
|
|
mate: How can you tell? #linu-how
|
|
captain: It says "Treasure Box of the Seven Seas" on the side. #captain-says
|
|
mate: Oh. That IS convenient. #linu-convenient
|
|
boxesFound += 1
|
|
|
|
choice
|
|
Open the treasure box immediately #opt-open-treasure
|
|
-> OpenTreasure
|
|
Check for traps first #opt-check-traps
|
|
-> CheckTraps
|
|
Claim the box without opening it -- it's worth more sealed #opt-sealed
|
|
-> SealedBox
|
|
|
|
beat CheckTraps
|
|
You examine the box carefully. There's a small warning label. #traps-examine
|
|
The label reads: "WARNING: Contents may contain more boxes. And also a kraken." #traps-label
|
|
mate: A kraken? In a box? #linu-kraken
|
|
captain: That's how they ship 'em these days. Free-range krakens are expensive. #captain-kraken
|
|
crewMorale -= 10
|
|
-> OpenTreasure
|
|
|
|
beat SealedBox
|
|
captain: Brilliant! A sealed box is worth ten opened ones! That's pirate economics! #captain-economics
|
|
mate: That's not how economics works. #linu-economics
|
|
captain: What are ye, a pirate or an accountant? #captain-accountant
|
|
mate: Currently? An accountant. Someone has to manage our negative doubloon balance. #linu-accountant
|
|
You secure the sealed box in the cargo hold. It rattles suspiciously. #sealed-rattles
|
|
-> RivalPirates
|
|
|
|
beat OpenTreasure
|
|
You pry open the massive treasure box. Inside, there are... #open-pry
|
|
captain: MORE BOXES! #captain-moreboxes
|
|
Indeed. Hundreds of smaller boxes, stacked neatly. Each labeled with a different sea. #open-hundreds
|
|
mate: "Adriatic Box." "Caribbean Box." "That Puddle Behind Gary's House Box." #linu-labels
|
|
captain: Seven seas, hundreds of boxes. The math checks out. Pirate math, anyway. #captain-math
|
|
boxesFound += 3
|
|
|
|
choice
|
|
Open all the smaller boxes #opt-open-all
|
|
-> OpenAllBoxes
|
|
Take them back to port to sell #opt-sell
|
|
doubloons += 50
|
|
-> RivalPirates
|
|
Build a raft out of the boxes since the ship is sinking #opt-raft if crewMorale < 40
|
|
-> BoxRaft
|
|
|
|
beat OpenAllBoxes
|
|
You spend the next four hours opening boxes. Your hands are covered in cardboard cuts. #openall-hours
|
|
Each box contains a smaller box. It's boxes all the way down. #openall-alltheway
|
|
captain: We're rich! Rich in BOXES! #captain-rich
|
|
mate: We can't spend boxes, Captain. #linu-spend
|
|
captain: Not with THAT attitude! #captain-attitude
|
|
At the very bottom of the last box, you find a single gold doubloon and a note. #openall-note
|
|
The note reads: "IOU - One Treasure. Sorry, the kraken needed it." #openall-iou
|
|
doubloons += 1
|
|
-> RivalPirates
|
|
|
|
beat BoxRaft
|
|
The ship is taking on water. Specifically, it's becoming water, because it's cardboard. #raft-water
|
|
mate: Captain, the ship is dissolving! #linu-ship
|
|
captain: Then we BUILD! From the treasure boxes! A new ship! A BOX SHIP! #captain-build
|
|
mate: As opposed to our current box ship? #linu-current
|
|
captain: A BETTER box ship! With LAMINATION! #captain-lamination
|
|
You construct a surprisingly seaworthy raft from the treasure boxes. #raft-construct
|
|
crewMorale += 20
|
|
-> RivalPirates
|
|
|
|
beat RivalPirates
|
|
A ship appears on the horizon. A WOODEN ship. How luxurious. #rival-appears
|
|
captain: Rival pirates! It's Captain Unboxinator and his crew! #captain-rival
|
|
mate: They have real cannons, Captain. And a ship that doesn't dissolve. #linu-real
|
|
captain: Details! #captain-details
|
|
The rival ship pulls alongside. Their captain, a large woman with a crowbar for a hand, grins. #rival-pulls
|
|
She shouts across the water: "Hand over your boxes, Blackbeard!" #rival-shouts
|
|
|
|
choice
|
|
Fight the rival pirates #opt-fight
|
|
-> SeaBattle
|
|
Negotiate a trade #opt-negotiate if doubloons > 20
|
|
doubloons -= 20
|
|
-> Negotiate
|
|
Challenge them to a box-opening race #opt-race
|
|
-> BoxRace
|
|
|
|
beat SeaBattle
|
|
captain: Battle stations! Load the cardboard cannons! #captain-stations
|
|
mate: Captain, they're laughing at us. #linu-laughing
|
|
captain: Good! Laughter is the enemy of focus! While they laugh, we... throw boxes at them! #captain-throw
|
|
You hurl boxes at the rival ship. One hits their captain in the face. #battle-hurl
|
|
She's momentarily stunned. Not by the impact -- by the audacity. #battle-stunned
|
|
boxesFound += 1
|
|
crewMorale += 20
|
|
-> TwistEnding
|
|
|
|
beat Negotiate
|
|
captain: Perhaps we can reach a... box-ness arrangement? #captain-arrangement
|
|
The rival captain narrows her eyes. She considers. #negotiate-considers
|
|
She responds: "Half your boxes. And that weird map you drew in crayon." #rival-half
|
|
captain: You can have the boxes. But the crayon map is MY intellectual property! #captain-ip
|
|
mate: Let it go, Captain. #linu-letitgo
|
|
boxesFound -= 1
|
|
-> TwistEnding
|
|
|
|
beat BoxRace
|
|
captain: A box-opening race! First crew to open fifty boxes wins! #captain-race
|
|
The rival captain agrees. She's confident. Her crew has real tools. #race-agrees
|
|
But your crew has DESPERATION. And cardboard cuts have made your fingers incredibly nimble. #race-desperation
|
|
The race begins. Boxes fly open left and right. Cardboard confetti fills the air. #race-begins
|
|
You win by a single box. The last box contains a rubber duck. Nobody knows why. #race-duck
|
|
boxesFound += 5
|
|
crewMorale += 30
|
|
-> TwistEnding
|
|
|
|
beat TwistEnding
|
|
As the rival pirates retreat (or celebrate, depending on the outcome), Linu pulls you aside. #twist-aside
|
|
mate: Look at the bottom of the treasure box, Captain. There's a hidden compartment. #linu-hidden
|
|
You open the hidden compartment. Inside: a single, perfect, golden box. #twist-golden
|
|
captain: The REAL Treasure Box of the Seven Seas! #captain-realbox
|
|
mate: What's inside it? #linu-inside
|
|
captain: Linu, I've been a pirate for thirty years. I've opened ten thousand boxes. #captain-thirty
|
|
captain: And I've learned one thing: it's never about what's inside the box. #captain-lesson
|
|
|
|
choice
|
|
Open the golden box anyway #opt-open-golden
|
|
-> FinalReveal
|
|
Keep it sealed forever #opt-keep-sealed
|
|
-> KeepSealed
|
|
|
|
beat FinalReveal
|
|
You open the golden box. Inside, there's a mirror. #reveal-mirror
|
|
You see your own reflection staring back at you. #reveal-reflection
|
|
captain: The real treasure... was us? #captain-us
|
|
mate: No, Captain. It's literally just a mirror. Someone put a mirror in a box. #linu-mirror
|
|
captain: A METAPHORICAL mirror, Linu! #captain-metaphor
|
|
mate: It's a regular mirror. I can see the price tag. It cost three doubloons. #linu-pricetag
|
|
captain: The cheapest treasures are the most priceless! #captain-priceless
|
|
mate: That's... not even slightly true. #linu-nottrue
|
|
-> Ending
|
|
|
|
beat KeepSealed
|
|
captain: This box shall remain sealed! For all eternity! Or until someone gets curious! #captain-sealed
|
|
mate: So... about five minutes, then? #linu-fiveminutes
|
|
captain: Probably less. I'm already curious. #captain-curious
|
|
captain: But a good pirate knows that some boxes are better left unopened. #captain-good
|
|
captain: And I am a terrible pirate. So I'll open it Tuesday. #captain-tuesday
|
|
-> Ending
|
|
|
|
beat Ending
|
|
The sun sets over the Cardboard Sea. Your adventure draws to a close. #ending-sunset
|
|
captain: We found boxes! We opened boxes! We ARE boxes! #captain-summary
|
|
mate: We're not boxes, Captain. #linu-notboxes
|
|
captain: Speak for yourself, Linu. I've always identified as a shipping container. #captain-container
|
|
mate: Boxes found today: $boxesFound. Ship structural integrity: questionable. #linu-log
|
|
mate: Doubloons remaining: $doubloons. Captain's sanity: also questionable. #linu-sanity
|
|
captain: Set course for the next adventure, Linu! There are always more boxes on the horizon! #captain-next
|
|
mate: The horizon is sinking, Captain. Along with our ship. #linu-sinking
|
|
captain: Then we'll sink WITH STYLE! #captain-style
|
|
-> .
|