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.
255 lines
13 KiB
Text
255 lines
13 KiB
Text
// Contemporary Adventure - Open The Box
|
|
// Theme: Corporate office meets mysterious box absurdity
|
|
|
|
character sandrea
|
|
name: Sandrea
|
|
role: Office Worker
|
|
|
|
character samuel
|
|
name: Samuel
|
|
role: IT Guy
|
|
|
|
state
|
|
emails: 0
|
|
boxPower: 0
|
|
hrInvolved: false
|
|
unionFormed: false
|
|
|
|
beat Intro
|
|
Monday morning. Fluorescent lights. The faint smell of burned coffee and crushed dreams. #intro-monday
|
|
You arrive at Boxington & Associates Ltd. (Motto: "Thinking Outside The Box Since Never"). #intro-arrive
|
|
sandrea: Hey, have you seen the break room? Something... appeared over the weekend. #sandrea-seen
|
|
sandrea: And by "something," I mean a box. And by "appeared," I mean nobody will claim responsibility. #sandrea-appeared
|
|
|
|
choice
|
|
Go check the break room #opt-check
|
|
-> BreakRoom
|
|
Check your email first #opt-email
|
|
emails += 1
|
|
-> CheckEmail
|
|
Pretend you didn't hear anything #opt-pretend
|
|
-> Pretend
|
|
|
|
beat CheckEmail
|
|
You open your inbox. 47 unread emails. 46 of them are about the box. #email-open
|
|
Subject lines include: "RE: RE: RE: FW: THE BOX", "Box Situation Update #17", and "Please stop replying all about the box." #email-subjects
|
|
The last email is from HR: "Mandatory Box Awareness Training - Tuesday 2pm. Attendance is not optional." #email-hr
|
|
emails += 46
|
|
hrInvolved = true
|
|
sandrea: HR sent a training about the box. It hasn't even been 24 hours. #sandrea-hr
|
|
sandrea: That's a new record. Usually it takes them two weeks to acknowledge anything exists. #sandrea-record
|
|
-> BreakRoom
|
|
|
|
beat Pretend
|
|
You put on your headphones and stare at a spreadsheet. #pretend-headphones
|
|
The spreadsheet stares back. One cell reads "THE BOX KNOWS." #pretend-cell
|
|
You did not type that. #pretend-didnt
|
|
sandrea: You can't ignore it. Kevin tried. He's been transferred to the Box Department. #sandrea-kevin
|
|
sandrea: We don't have a Box Department. Or we didn't. Until today. #sandrea-department
|
|
-> BreakRoom
|
|
|
|
beat BreakRoom
|
|
You enter the break room. There it is. A plain cardboard box, sitting on the counter next to the microwave. #breakroom-enter
|
|
It's perfectly ordinary, except for the fact that it's humming. And glowing faintly. And someone put googly eyes on it. #breakroom-humming
|
|
sandrea: The googly eyes were Dave from accounting. He thought it would make it less menacing. #sandrea-dave
|
|
sandrea: It did not make it less menacing. #sandrea-menacing
|
|
samuel: Hey, IT here. I've been asked to "scan" the box. With what, I have no idea. #samuel-scan
|
|
samuel: My job description says "computer stuff." This is not computer stuff. #samuel-job
|
|
|
|
choice
|
|
Help Samuel scan the box #opt-help-scan
|
|
-> ScanBox
|
|
Try to open the box #opt-try-open
|
|
-> TryOpen
|
|
Ask the box what it wants #opt-ask-box
|
|
boxPower += 10
|
|
-> AskBox
|
|
|
|
beat ScanBox
|
|
Samuel holds up his phone's flashlight to the box. #scan-phone
|
|
samuel: Scan complete. Results: it's a box. #samuel-results
|
|
samuel: You know, I have a computer science degree. Two, actually. And here I am, scanning a box with a phone flashlight. #samuel-degree
|
|
sandrea: Did you try turning the box off and on again? #sandrea-turnitoff
|
|
samuel: That's not-- you know what, let me try. #samuel-try
|
|
He picks up the box, turns it upside down, and puts it back. The humming gets louder. #scan-upside
|
|
samuel: I've made it angry. Great. Another thing that's angry at IT. #samuel-angry
|
|
boxPower += 5
|
|
-> BoxEscalation
|
|
|
|
beat TryOpen
|
|
You reach for the box's flaps. #open-reach
|
|
sandrea: Wait! What if it's someone's lunch? #sandrea-lunch
|
|
sandrea: Remember the Great Tupperware Incident of 2019? Karen still hasn't forgiven us. #sandrea-karen
|
|
You hesitate, then open it anyway. Inside the box, there's... another box. #open-another
|
|
Inside that box: a Post-it note that reads "Nice try. - The Box" #open-postit
|
|
boxPower += 10
|
|
-> BoxEscalation
|
|
|
|
beat AskBox
|
|
You lean toward the box and whisper: "What do you want?" #ask-whisper
|
|
The box hums at a slightly different frequency. Your phone autocorrects a text to "BOX IS LIFE." #ask-phone
|
|
sandrea: Did the box just hack your phone? #sandrea-hack
|
|
samuel: Boxes don't hack phones! #samuel-hack
|
|
samuel: ... Do they? I didn't study box-hacking in college. I'm starting to think my education had gaps. #samuel-gaps
|
|
The break room lights flicker. The microwave turns on by itself and heats nothing for exactly thirty seconds. #ask-flicker
|
|
-> BoxEscalation
|
|
|
|
beat BoxEscalation
|
|
An email arrives. From the box. It has its own email address: box@boxington-associates.com. #escalation-email
|
|
emails += 1
|
|
The email reads: "Dear colleagues, I would like to schedule a meeting to discuss my role in the organization. Please bring snacks. Preferably cardboard-based." #escalation-meeting
|
|
sandrea: The box wants a meeting. #sandrea-meeting
|
|
samuel: The box has better email etiquette than half the sales team. #samuel-etiquette
|
|
|
|
choice
|
|
Schedule the meeting #opt-schedule
|
|
-> BoxMeeting
|
|
Forward the email to HR #opt-forward-hr
|
|
hrInvolved = true
|
|
emails += 5
|
|
-> HRResponse
|
|
Reply all with "Please remove me from this thread" #opt-reply-all
|
|
emails += 200
|
|
-> ReplyAllChaos
|
|
Offer to sponsor the box's corporate integration personally|||Your financial resources might open some doors here... #opt-vip [if hasResource("Gold", 30)]
|
|
-> VIPFastTrack
|
|
|
|
beat VIPFastTrack
|
|
markSecretBranch("contemporary_vip")
|
|
You reply to the box's email with a generous corporate sponsorship offer. The box hums approvingly. #vip-offer
|
|
sandrea: You're... buying the box a corner office? With a window? #sandrea-corner
|
|
samuel: I've been here three years and I sit next to the printer. The LOUD printer. #samuel-printer
|
|
The box's hum shifts to a contented purr. An email arrives: "Counter-offer accepted. I will also require a company card and a parking spot." #vip-counter
|
|
sandrea: The box negotiated better than our entire sales department. In one email. #sandrea-negotiated
|
|
samuel: Can the box negotiate MY salary next? #samuel-salary
|
|
boxPower += 25
|
|
unionFormed = true
|
|
-> BoxMeeting
|
|
|
|
beat ReplyAllChaos
|
|
You hit Reply All. The office erupts. #reply-chaos
|
|
47 people reply all with "Please stop replying all." Each reply triggers more replies. #reply-trigger
|
|
emails += 200
|
|
samuel: The email server is at 98% capacity. All from box-related reply-alls. #samuel-server
|
|
sandrea: Dave from accounting replied with a GIF of a box. It's 47 megabytes. #sandrea-gif
|
|
sandrea: The email server has crashed. The box's email still works though. Somehow. #sandrea-crashed
|
|
The box sends one final email: "I rest my case. You need me." #reply-rest
|
|
boxPower += 20
|
|
-> BoxUnion
|
|
|
|
beat HRResponse
|
|
HR responds within minutes. A new record. Their email is seventeen paragraphs long. #hr-response
|
|
Key excerpts: "Per company policy section 7.4.2, unidentified boxes must complete onboarding." #hr-onboarding
|
|
"Please ensure the box has filled out Form B-0X (yes, really) and attended the safety briefing." #hr-form
|
|
sandrea: HR wants to onboard the box. They want to give it an employee badge. #sandrea-badge
|
|
samuel: I've been here three years and still don't have an employee badge. #samuel-badge
|
|
samuel: But sure. Give it to the box. The sentient, humming, email-sending box. #samuel-sentient
|
|
-> BoxMeeting
|
|
|
|
beat BoxMeeting
|
|
The meeting room fills up. Everyone is there. The box sits in a chair. Someone gave it a name tag: "THE BOX - Role: TBD." #meeting-room
|
|
boxPower += 10
|
|
sandrea: So... the box has prepared a presentation. #sandrea-presentation
|
|
The projector turns on. Slide 1: "Why This Office Needs Me: A 47-Slide Deck by THE BOX." #meeting-slide
|
|
samuel: It has better slides than my last quarterly review. #samuel-slides
|
|
Slide 7 shows a pie chart. 100% of the pie is labeled "BOX." #meeting-pie
|
|
Slide 23 is just the word "OPEN" in 72-point font, pulsing. #meeting-open
|
|
Slide 47: "In conclusion: open me. Or don't. I'll still be here Monday." #meeting-conclusion
|
|
|
|
choice
|
|
Vote to make the box a full employee #opt-employee
|
|
unionFormed = true
|
|
-> BoxEmployee
|
|
Vote to put the box in storage #opt-storage
|
|
-> BoxStorage
|
|
Open the box during the meeting #opt-open-meeting
|
|
-> OpenDuringMeeting
|
|
|
|
beat BoxStorage
|
|
You vote to put the box in storage. The box's hum drops to a lower frequency. It sounds... hurt. #storage-vote
|
|
samuel: I think we hurt the box's feelings. #samuel-hurt
|
|
sandrea: Does the box have feelings? #sandrea-feelings
|
|
The lights flicker. Every computer in the office displays "I HAVE FEELINGS" in Comic Sans. #storage-feelings
|
|
boxPower += 30
|
|
sandrea: Apparently yes. And it has opinions about fonts. #sandrea-fonts
|
|
The box returns to the break room on its own. Nobody sees it move. It's just... there again. #storage-returns
|
|
-> BoxUnion
|
|
|
|
beat OpenDuringMeeting
|
|
You stand up and open the box mid-presentation. Gasp from the audience. #open-gasp
|
|
Inside the box: a smaller box. Inside that: a USB drive. #open-usb
|
|
samuel: A USB drive? Now we're in MY territory! #samuel-usb
|
|
He plugs it in. The screen displays: "Company Performance Could Be 340% Better If You Opened More Boxes - A Study by THE BOX." #open-study
|
|
samuel: The data is... actually compelling? The methodology is sound? #samuel-data
|
|
sandrea: We're being out-performed by a box. On a Monday. #sandrea-outperformed
|
|
boxPower += 15
|
|
-> BoxUnion
|
|
|
|
beat BoxEmployee
|
|
The box is officially hired. Employee #BOX-001. #employee-hired
|
|
It gets a desk, a computer it doesn't use, and a parking spot it definitely doesn't need. #employee-desk
|
|
sandrea: The box got a parking spot before I did. I've been on the waitlist for two years. #sandrea-parking
|
|
samuel: The box's employee portal says its skills are "containing things" and "being opened." #samuel-skills
|
|
samuel: That's more than my resume had when I started here. #samuel-resume
|
|
boxPower += 20
|
|
-> BoxUnion
|
|
|
|
beat BoxUnion
|
|
Weeks pass. The box has gained a following. Other boxes have appeared. #union-weeks
|
|
The supply closet, the printer paper boxes, the shipping containers -- they're all... organizing. #union-organizing
|
|
sandrea: The boxes are forming a union. #sandrea-union
|
|
samuel: Can boxes unionize? Is that legal? #samuel-legal
|
|
unionFormed = true
|
|
A memo slides under the door. It reads: "The United Box Workers of Boxington & Associates demand: 1) Better storage conditions. 2) No more being thrown away on Fridays. 3) One seat on the board of directors." #union-memo
|
|
emails += 30
|
|
|
|
choice
|
|
Support the box union #opt-support
|
|
-> SupportUnion
|
|
Oppose the box union #opt-oppose
|
|
-> OpposeUnion
|
|
Negotiate with the box union #opt-negotiate
|
|
-> NegotiateUnion
|
|
|
|
beat SupportUnion
|
|
You sign the box union's petition. It's the first petition you've ever signed that was also a box. #support-petition
|
|
sandrea: You know what? Good for the boxes. They work hard. They carry things. #sandrea-goodfor
|
|
samuel: The IT department has fourteen boxes. They do more work than the interns. #samuel-fourteen
|
|
The CEO, who no one has ever seen, sends an email: "I've always been a box. Surprise." #support-ceo
|
|
boxPower += 50
|
|
-> Ending
|
|
|
|
beat OpposeUnion
|
|
You take a stand against the box union. Bold move. #oppose-stand
|
|
The boxes respond by collectively refusing to be opened. Every package, every delivery, every Amazon order -- sealed shut. #oppose-sealed
|
|
sandrea: My online shopping! No! #sandrea-shopping
|
|
samuel: The server backup tapes are in boxes. We can't access anything. #samuel-tapes
|
|
The office grinds to a halt. You can't fight organized cardboard. #oppose-halt
|
|
boxPower += 30
|
|
You quietly un-oppose the box union. #oppose-retract
|
|
-> Ending
|
|
|
|
beat NegotiateUnion
|
|
You sit across from the original box. It's wearing a tiny tie now. Where did it get a tie? #negotiate-tie
|
|
sandrea: The box wants dental. #sandrea-dental
|
|
samuel: Boxes don't have teeth. #samuel-teeth
|
|
sandrea: The box says, and I quote, "not yet." #sandrea-notyet
|
|
After three hours of negotiation, you reach a compromise: boxes get better shelf space, and employees stop using them as makeshift chairs. #negotiate-compromise
|
|
boxPower += 20
|
|
-> Ending
|
|
|
|
beat Ending
|
|
You lean back in your office chair. It's Friday. The box is still humming in the break room. #ending-friday
|
|
sandrea: So... same thing next Monday? #sandrea-monday
|
|
samuel: Probably. I'm updating my resume, though. Under "Skills," I'm adding "box diplomacy." #samuel-resume-end
|
|
sandrea: You know, I used to think this job was boring. #sandrea-boring
|
|
sandrea: Then a box showed up, sent better emails than my manager, formed a union, and possibly became CEO. #sandrea-recap
|
|
sandrea: Mondays, am I right? #sandrea-mondays
|
|
|
|
if unionFormed
|
|
The box hums contentedly. The office will never be the same. But maybe that's okay. #ending-content
|
|
The break room microwave displays "THANK YOU" in its timer. Nobody questions it anymore. #ending-microwave
|
|
|
|
samuel: Box power level at end of week: $boxPower. Emails generated: $emails. Sanity remaining: undefined. #samuel-final
|
|
sandrea: See you Monday. Bring the box a coffee. It likes decaf. Don't ask how we know. #sandrea-final
|
|
-> .
|