- Fix Loreline parsing: escape quotes in dialogue, remove [if] bracket syntax, remove # in text conflicting with tags - Add French accents to all 9 .fr.lor translation files (hundreds of fixes) - Fix cosmetic equip display: use item nameKey lookup instead of constructing key from cosmeticValue (fixes StardustLegendary MISSING) - Deduplicate cosmetics in appearance menu - Localize all hardcoded strings (welcome, inventory, adventure, cosmetic) - Add new tests: Loreline parsing (19), cosmetic slot keys, slot+value uniqueness (302 total, 0 failures)
252 lines
12 KiB
Text
252 lines
12 KiB
Text
// Medieval Adventure - Open The Box
|
|
// Theme: A kingdom where everything is suspiciously box-shaped
|
|
|
|
character knight
|
|
name: Sir Boxalot
|
|
role: Knight of the Square Table
|
|
|
|
character wizard
|
|
name: Malkith
|
|
role: Dark Wizard of the Cubic Order
|
|
|
|
state
|
|
honor: 50
|
|
boxesOpened: 0
|
|
savedPrincess: false
|
|
dragonFriendly: false
|
|
|
|
beat Intro
|
|
You stand before Castle Cardboard, its square towers rising into the overcast sky. #intro-castle
|
|
Everything here is box-shaped. The drawbridge is a flattened box. The moat is a long, wet box. #intro-everything
|
|
knight: Halt! Who goes there? I am Sir Boxalot, Knight of the Square Table! #knight-halt
|
|
knight: State your business, or I shall smite thee with my box-shaped sword! #knight-smite
|
|
You notice his sword is, indeed, a rectangular prism. Not very sharp. #intro-sword
|
|
|
|
choice
|
|
Declare yourself a hero #opt-hero
|
|
honor += 10
|
|
-> HeroIntro
|
|
Declare yourself a box inspector #opt-inspector
|
|
-> InspectorIntro
|
|
Ask why everything is box-shaped #opt-why
|
|
-> WhyBoxes
|
|
|
|
beat WhyBoxes
|
|
knight: Why is everything box-shaped? Why is the SKY blue? Why do birds sing? #knight-why
|
|
knight: Some questions have no answers. Others have box-shaped answers. #knight-answers
|
|
knight: The real question is: can you open the Box of Destiny? #knight-destiny
|
|
You feel like this is the kind of game that asks you rhetorical questions and then gives you exactly one path forward. #why-meta
|
|
-> HeroIntro
|
|
|
|
beat HeroIntro
|
|
knight: A hero! Wonderful! We haven't had one of those since Sir Unboxington fell into the Box Pit. #knight-hero
|
|
knight: The kingdom is in peril! The dark wizard Malkith has captured Princess Rectangula! #knight-peril
|
|
knight: She's being held in the Tall Tower, which is basically just a really tall box. #knight-tower
|
|
|
|
choice
|
|
Vow to rescue the princess #opt-rescue
|
|
honor += 10
|
|
-> QuestBegins
|
|
Ask what the princess looks like #opt-princess-look
|
|
-> PrincessDescription
|
|
Suggest they just tip the tower over #opt-tip
|
|
-> TipTower
|
|
|
|
beat InspectorIntro
|
|
knight: A box inspector?! By the Square Gods, we've been expecting you! #knight-inspector
|
|
knight: The kingdom's boxes have been malfunctioning. Some open from the wrong side. #knight-malfunction
|
|
knight: One box started opening OTHER boxes. It was chaos. Beautiful, beautiful chaos. #knight-chaos
|
|
honor += 5
|
|
-> QuestBegins
|
|
|
|
beat PrincessDescription
|
|
knight: The princess? She's... well... she's a box. #knight-princess
|
|
knight: A very PRETTY box. With a tiara taped to the top. #knight-pretty
|
|
knight: Don't judge. Love is love, and boxes are boxes. #knight-love
|
|
You decide not to question the romantic standards of this kingdom. #princess-standards
|
|
-> QuestBegins
|
|
|
|
beat TipTower
|
|
knight: Tip the-- that's the most brilliant and idiotic thing I've ever heard! #knight-tip
|
|
knight: We can't tip the tower. It's load-bearing. The entire castle is just boxes stacked on boxes. #knight-loadbearing
|
|
knight: Tip one and the whole kingdom collapses like a house of... boxes. #knight-collapse
|
|
-> QuestBegins
|
|
|
|
beat QuestBegins
|
|
You set off toward the Tall Tower with Sir Boxalot. #quest-setoff
|
|
The path leads through the Forest of Flat-Pack, where the trees are unassembled boxes with confusing instructions. #quest-forest
|
|
knight: Stay close. These woods are full of bandits and IKEA references. #knight-ikea
|
|
A rustling sound comes from behind a bush-shaped box. #quest-rustling
|
|
|
|
choice
|
|
Draw your weapon #opt-draw
|
|
-> Ambush
|
|
Hide inside a nearby box #opt-hide
|
|
-> HideInBox
|
|
Yell \"I know you're there!\" #opt-yell
|
|
-> YellAtBush
|
|
|
|
beat HideInBox
|
|
You climb inside a conveniently person-sized box and close the flaps above you. #hide-climb
|
|
knight: Brilliant strategy! If you can't see the enemy, the enemy can't see you! #knight-strategy
|
|
knight: That's not how that works but I admire the commitment. #knight-commitment
|
|
From inside the box, you hear the bandit trip over a root and knock himself out. #hide-bandit
|
|
boxesOpened += 1
|
|
You emerge victorious, technically. #hide-victory
|
|
-> DragonApproach
|
|
|
|
beat Ambush
|
|
A bandit leaps out! He's wearing a box as armor. It's not very effective. #ambush-leap
|
|
knight: Have at thee, villain! #knight-haveatthee
|
|
Sir Boxalot swings his box-sword. It makes a cardboard \"thwap\" sound. #ambush-thwap
|
|
The bandit looks confused, then disappointed, then falls over out of politeness. #ambush-falls
|
|
boxesOpened += 1
|
|
-> DragonApproach
|
|
|
|
beat YellAtBush
|
|
You yell into the forest. Your voice echoes off the box-trees. #yell-echo
|
|
A small rabbit hops out. It's wearing a tiny box as a shell. A box turtle, if you will. #yell-rabbit
|
|
knight: False alarm. Just a box bunny. They're everywhere this time of year. #knight-bunny
|
|
knight: Breeding season. They multiply like... well, like boxes in this game. #knight-breeding
|
|
-> DragonApproach
|
|
|
|
beat DragonApproach
|
|
You reach the Tall Tower. A dragon circles overhead. #dragon-tower
|
|
knight: That's Scorchtangle, the Box Dragon! He hoards boxes instead of gold! #knight-dragon
|
|
The dragon lands before you. He's... also somewhat box-shaped. You're sensing a pattern. #dragon-lands
|
|
knight: His weakness is that he can't resist opening boxes. It's like catnip for dragons. #knight-weakness
|
|
|
|
choice
|
|
Offer the dragon a box to open #opt-offer-box
|
|
dragonFriendly = true
|
|
-> DragonFriendly
|
|
Fight the dragon #opt-fight-dragon
|
|
-> DragonFight
|
|
Try to sneak past while the dragon is distracted #opt-sneak
|
|
-> SneakPast
|
|
Flash your most dazzling smile at the dragon|||Something about your magnetic personality might work here... #opt-charm if hasStat("Charisma", 10)
|
|
-> DragonCharmer
|
|
|
|
beat DragonCharmer
|
|
markSecretBranch("medieval_dragon_charmer")
|
|
You step forward, lock eyes with Scorchtangle, and deliver the most radiant smile in the kingdom's history. #charm-smile
|
|
The dragon blinks. Then blushes. Can dragons blush? This one can. His scales turn a gentle pink. #charm-blush
|
|
knight: By the Square Gods... the dragon is SWOONING. I've never seen a box-dragon swoon before. #knight-swoon
|
|
Scorchtangle rolls over like a puppy and presents his belly, which is covered in tiny box-shaped scales. #charm-belly
|
|
knight: You've charmed a dragon with nothing but raw charisma. That's either very brave or very weird. #knight-brave
|
|
dragonFriendly = true
|
|
-> DragonFriendly
|
|
|
|
beat DragonFight
|
|
You charge at Scorchtangle with your definitely-not-adequate weapon. #fight-charge
|
|
The dragon yawns and a small flame singes your eyebrows. #fight-singe
|
|
knight: Perhaps a more... diplomatic approach? #knight-diplomatic
|
|
knight: I once saw a hero try to fight him. He got boxed. Literally. Put in a box. #knight-boxed
|
|
The dragon looks at you expectantly, as if waiting for you to do something smarter. #fight-expectant
|
|
-> DragonFriendly
|
|
|
|
beat SneakPast
|
|
You tiptoe past the dragon. Your sneaking skills are impeccable. #sneak-tiptoe
|
|
Unfortunately, you step on a bubble wrap moat. The popping is deafening. #sneak-bubble
|
|
The dragon looks at you with what can only be described as secondhand embarrassment. #sneak-embarrassment
|
|
knight: Bubble wrap. The natural enemy of stealth. #knight-bubble
|
|
-> DragonFriendly
|
|
|
|
beat DragonFriendly
|
|
You pull out a beautifully wrapped box from your inventory. #friendly-box
|
|
You don't remember putting it there, but this is a game, so inventory logic doesn't apply. #friendly-inventory
|
|
The dragon's eyes widen. He opens the box with surprisingly delicate claws. #friendly-opens
|
|
Inside: a smaller box. The dragon is DELIGHTED. #friendly-smaller
|
|
boxesOpened += 1
|
|
He opens the smaller box. Inside: an even smaller box. He's in heaven. #friendly-heaven
|
|
The dragon steps aside, too busy with his recursive box gift to guard anything. #friendly-aside
|
|
|
|
choice
|
|
Enter the tower #opt-enter-tower
|
|
-> TowerClimb
|
|
Pet the dragon first #opt-pet-dragon
|
|
dragonFriendly = true
|
|
The dragon purrs. It sounds like cardboard being rubbed together. #pet-purr
|
|
-> TowerClimb
|
|
|
|
beat TowerClimb
|
|
You climb the tower stairs. Each step is a small box. It's like climbing a staircase of shoeboxes. #climb-stairs
|
|
At the top, you find Malkith standing before a large ornate box. #climb-malkith
|
|
wizard: Ah, the hero arrives! You're late. I've been monologuing to myself for twenty minutes. #wizard-late
|
|
wizard: Behold! The Box of Destiny! Within it lies Princess Rectangula! #wizard-behold
|
|
wizard: And with her, the power to fold reality itself into a BOX! #wizard-power
|
|
|
|
choice
|
|
Challenge Malkith to a duel #opt-duel
|
|
-> WizardDuel
|
|
Ask Malkith why he wants box-folding power #opt-ask-why
|
|
-> WizardMotivation
|
|
Just open the Box of Destiny while he's talking #opt-just-open if boxesOpened > 0
|
|
-> JustOpenIt
|
|
|
|
beat WizardMotivation
|
|
wizard: Why? WHY?! Have you seen this kingdom? Everything is already a box! #wizard-whykingdom
|
|
wizard: But they're DISORGANIZED boxes! Boxes within boxes with no structure! #wizard-disorganized
|
|
wizard: I want to SORT them. By size. By color. By emotional significance. #wizard-sort
|
|
wizard: I'm not evil. I'm a box organizer. The kingdom just doesn't appreciate good filing. #wizard-filing
|
|
knight: That... actually sounds reasonable? #knight-reasonable
|
|
wizard: THANK you. #wizard-thanks
|
|
|
|
choice
|
|
Help Malkith organize the boxes #opt-help-organize
|
|
-> HelpMalkith
|
|
Insist on freeing the princess first #opt-free-first
|
|
-> WizardDuel
|
|
|
|
beat HelpMalkith
|
|
You spend the next three hours sorting boxes with Malkith. #help-sorting
|
|
wizard: Small boxes go LEFT. Medium boxes go RIGHT. Large boxes go in the LARGE BOX. #wizard-instructions
|
|
knight: This is surprisingly therapeutic. #knight-therapeutic
|
|
wizard: Right? I keep telling people. Box organization is self-care. #wizard-selfcare
|
|
savedPrincess = true
|
|
boxesOpened += 1
|
|
Malkith releases Princess Rectangula as a thank you. She is, in fact, a box with a tiara. #help-princess
|
|
She's lovely. #help-lovely
|
|
-> Ending
|
|
|
|
beat WizardDuel
|
|
wizard: A duel? Fine! I choose... BOX MAGIC! #wizard-duel
|
|
Malkith shoots a beam of cubic energy at you. You dodge. Barely. #duel-dodge
|
|
knight: Hit him with the thing! The box thing! #knight-boxthing
|
|
You're not sure what \"the box thing\" is, but you grab the nearest box and throw it. #duel-throw
|
|
It hits Malkith square in the face. Square. Because it's a box. #duel-square
|
|
wizard: Ow! That was my favorite face! #wizard-ow
|
|
boxesOpened += 1
|
|
Malkith stumbles back into the Box of Destiny, accidentally opening it. #duel-stumble
|
|
Princess Rectangula tumbles out. She kicks Malkith with her box-corner. It looks painful. #duel-kick
|
|
savedPrincess = true
|
|
-> Ending
|
|
|
|
beat JustOpenIt
|
|
While Malkith is mid-monologue, you casually walk up and open the Box of Destiny. #just-walk
|
|
wizard: --and furthermore, the cubic nature of-- wait, what are you doing? #wizard-wait
|
|
wizard: You can't just OPEN it! I had a whole speech prepared! #wizard-speech
|
|
wizard: There were DRAMATIC PAUSES! A CALLBACK to act one! #wizard-pauses
|
|
Princess Rectangula tumbles out and bonks Malkith on the head. #just-bonk
|
|
savedPrincess = true
|
|
boxesOpened += 1
|
|
knight: That was incredibly anticlimactic. I loved it. #knight-anticlimactic
|
|
-> Ending
|
|
|
|
beat Ending
|
|
|
|
if savedPrincess
|
|
The kingdom celebrates! Princess Rectangula is safe! #ending-celebrate
|
|
knight: You've saved the kingdom! The Square Table shall sing of your deeds! #knight-saved
|
|
knight: Well, they'll sing in monotone. Everything here is a bit... flat. #knight-flat
|
|
else
|
|
The kingdom is mildly concerned but ultimately fine. Boxes don't hold grudges. Usually. #ending-fine
|
|
|
|
if dragonFriendly
|
|
Scorchtangle the dragon joins the celebration, bringing his collection of nested boxes as party favors. #ending-dragon
|
|
|
|
knight: Until next time, hero. There are always more boxes to open. #knight-nexttime
|
|
knight: And more fourth walls to break. Yes, I know this is a game. I've always known. #knight-fourthwall
|
|
knight: The real box was the friends we made along the way. #knight-realbox
|
|
knight: Actually, no. The real box is a box. That's the whole point. #knight-point
|
|
-> .
|