<<actiontext>>
The room you’re in is very small and cold, more like a closet or a storage room. You lean against mostly empty wooden shelves, hewn into the crude blocks of stone that make up the walls.<br/><br/>
The closet is lit through the cracks of a massive oaken door with cast iron fittings.<br/>
<<if $inventory>><<inventory>><</if>>
[[Examine walls]]<br/>
[[Examine shelves]]<br/>
[[Examine door]]<br/>
[[Check your pockets|ClosetPockets1]]<<audio "m_wizard" fadeout>>
<<audio "m_main" loop play>>
<<actiontext>>
You’re still in that closet with the massive wooden door blocking your path.<br/><br/>
The room has changed neither in size not in comfort. The shelves hold no interest for you anymore but perhaps your tiny new friends might be able to help you out somehow?<br/>
<<inventory>>
[[Examine door|ClosetDoor2]]<br/>The door is made of thick wooden planks that are held together by sturdy iron bars. The frame is just as massive but there are plenty of openings between the aging wood.<br/><br/>
The lock is as crudely built as the rest and loose parts rattle inside as you test it. You can almost fit your finger in the keyhole but without a lockpick or similar that’s of no help.<br/>
<<inventory>>
[[Okay|Closet2]].<br/><<set $f.checked_pockets to true >>
<<set $inventory to true >>
<<set $i.jellybeans to false >>
Your pockets are largely empty save a handful of colorful jelly beans you never leave the house without.<br/><br/>
You take them out and behold them on the palm of your hand.<br/>
<<if $inventory>>
<<if $i.powder>>
<<inventory>>
<</if>>
<</if>>
<<link [[Back|Closet]]>>
<<set $i.jellybeans to true >>
<<set $action_text to "You put them back in your pockets.">>
<</link>>
<br/>The door is made of thick wooden planks that are held together by sturdy iron bars. The frame is just as massive but there are plenty of openings between the aging wood.<br/><br/>
The lock is as crudely built as the rest and loose parts rattle inside as you test it. You can almost fit your finger in the keyhole but without a lockpick or similar that’s of no help.<br/>
<<if $inventory>><<inventory>><</if>>
[[Okay|Closet]]<br/>The boards of the shelves are old and dusty, empty burlap sacks litter the floor, bits of fabric from even older burlap sacks underneath. A few crusty old vials and shards of broken glass are far in the back. <br/>
<<if $inventory>><<inventory>><</if>>
[[Examine vials]]<br/>
[[Nevermind|Closet]]<br/>They look like they held reagents at some point but seemingly haven't been used as containers in ages.
<<if not $i.powder>>
There is one, however, with a colorful dusty substance, just enough to fill half a thimble.
<<else>>
There aren’t any more of interest.
<</if>>
<br/>
<<if $inventory>><<inventory>><</if>>
<<if not $i.powder>>
[[Leave it for now|Closet]]<br/>
<<link [[Take vial|Closet]]<br/>>>
<<set $action_text to "You pocket the glittering dust for some reason.">>
<<set $i.powder to true>>
<</link>>
<<else>>
[[Fine|Closet]]<br/>
<</if>>The walls look old and unyielding. There are slight gaps between them. You can’t see them but you can feel the cold wind creeping through the ancient masonry. Even if you had the proper tools, it would probably take days to chisel your way through them. <br/><br/>
<<if $inventory>><<inventory>><</if>>
<<return>><<audio "m_wizard" fadeout>>
<<audio "m_sting" play>>
<<set $f.beans_alive to true >>
<<set $inventory to true >>
<<set $i.powder to false >>
<<set $i.jellybeans to false >>
You hold the jelly beans in your hand and with the other pour out the sparkling substance on top of them.<br/><br/>
An unexpected flash of bright, colorful light fills the small chamber for half a second, then fades out just as suddenly. <br/><br/>
It takes your eyes a while to re-adjust to the gloominess surrounding you while the jelly beans in your hand feel different. They also make little chriping noises.<br/><br/>
[[Look at your hand]]<br/><<audio "fx_cauldron" stop>>
<<actiontext>>
<<if visited(passage()) is 1>>The winding staircase leads into a circular kitchen which you gingerly enter. No one is there.
<<else>>
You enter the kitchen.
<</if>>
<br/><br/>
In the middle of the room a [[cauldron|Cauldron]] is propped up, clearly the main attraction of an otherwise mediocre, if not humble kitchen.
An old [[book|recipe book]] lies open on the counter, strewn about are [[knives and utensils|utensils]].<br/><br/>
The tower’s circular layout is divided by a straight stone wall with a <<if visited("living quarters") is 0>>[[door|living quarters]]<<else>>door to the mage’s [[living quarters]]<</if>>, close to it squats a small dining table with four chairs.<br/>
<<inventory>>
A flight of stairs leads [[up to the laboratory|Laboratory]],<br/>
another
<<if hasVisited("Entrance")>>
down to the [[entrance hall|Entrance]].
<<else>>
further [[down|Entrance]]
<</if>>
Incredible! What once had been an assortment of various flavors and spices had been turned into <b>tiny creatures</b>, scuttling about your hand!<br/><br/>
While they still resemble candy beans for the most part, they now sport googly eyes and four stubby little legs. For all intents and purposes they look like a herd of tiny ponies on the palm of your hand.<br/><br/>
<<set $f.beans_alive to true>>
But that magic transmutation didn’t really help you much, you’re still stuck and you certainly don’t want to linger.<br/><br/>
[[Oh well…|Closet2]]<br/>
That must’ve been the moment you blacked out. You don’t know for how long. You are in no place you recognize but you’re pretty sure that darn mage kidnapped you.<br/><br/>
You look down on yourself and are relieved for a moment that you haven’t been turned into a newt or something worse. Yet. You should get out before the old sorcerer returns as he probably has plans for you.<br/><br/>
<<link [[Look around|Closet]]>>
<<script>>
UIBar.show();
<</script>>
<</link>><<audio "m_sting" play>>
<<set $inventory to true >>
<<set $f.beans_alive to true >>
<<set $frecipe_revealed to false >>
<<set $i.powder to false >>
<<set $i.jellybeans to false >>
<<set $b.twitchy to false >>
Carefully you nudge the twitchy creature into the keyhole. The little bean struggles swiftly disappears and you hear its effect instantly: Bouncing around like a pinball it quckly dismantles the lock that comes apart and falls through the plank.<br/><br/>
You reach through the hole and effortlessly push open the door as the brown bean bounces around the floor and disappears into a mousehole in the wall followed by muffled panicked squeaks.
You’re now free! Well, relatively.<br/><br/>
[[Onwards!|TopStairs]]<br/><<audio ":all" stop>>
Darkness. All-engulfing darkness. <br/><br/>
And that headache… You open your eyes and find yourself in a dim, cramped place. You must’ve passed out.<br/><br/>
What happened this time? It hurts but still you [[try to remember]]…<br/><<script>>
UIBar.show();
<</script>>
<<if $DEBUG>>
<<set $inventory to true >>
<</if>>
<<inventory_check>>
<<actiontext>>
You are on the top of a curving set of stone steps made of the same material as the walls. Overhead old beams creak in the gusts and the floor seems to shake slightly with the wind that pours in through an open [[window|TopWindow]].<br/>
<<inventory>>
The spiral staircase leads
<<if hasVisited("Library")>>
to the [[library|Library]].
<<else>>
[[down|Library]].
<</if>><br/><<inventory_check>>
<<actiontext>>
Curiously you peek outside and only see clouds for much too long before finally snowy mountains in the distance form a horizon.<br/><br/>
You’re looking down from a considerable height of what must be castle or a tower. The wind is strong and cold up here and even down below it tugs on the sparse vegetation.<br/><br/>
On the rocky plain you spot a small robed figure with a basket moving about. Not really close but also not far away either. <br/>
<<inventory>>
You decide to continue
<<if hasVisited("Library")>>
to the [[library|Library]].
<<else>>
[[downwards|Library]].
<</if>><br/>/* inits */
<<set $starting_passage to "Title">>
<<set $DEBUG to true >>
<<set $action_text to "">>
<<set $inventory to false>>
<<set $petcounter to 0>>
<<script>>
UIBar.hide().stow();
Config.passages.nobr = true
<</script>>
/* flags */
<<set $f to {
"checked_pockets" : false,
"has_inventory" : false,
"beans_alive" : false,
"recipe_revealed" : false,
"crack_plugged" : false,
"looking_for_book": false,
"looking_for_negator" : false,
}
>>
/* inventory */
<<set $i to
{
"jellybeans" : false,
"powder" : false,
"candle" : false,
"lit_candle" : false,
"negator" : false,
} >>
/* beans */
<<set $b to {
"sticky" : true,
"inky" : true,
"oily" : true,
"hot" : true,
"twitchy" : true,
"debugging" : true,
}>>
/* misdeeds */
<<set $misdeeds to [
"I’m sorry for ridiculing you",
"I’m sorry for stealing from you",
"I’m sorry for going through your things"
]
>>
/* books */
<<set $boring_books to [
"Craft of War",
"Rampage – A Short History of Trebuchets",
"Headroom: Living Lofty in Spires and Towers",
"Wood Paneling and Other Simple Projects for Passionate Amateurs",
"Hogwash and Gibberish: The Secret Language of Dwarves",
"The Lords of Midnight",
"Saber Rider and the Star Sherrifs",
"The Clash at Demonhead",
"Wars of the Stars",
"Ludum Distractio. (Lorem Ipsum Ed.)",
"Deliveries and Dragons",
"Ever Shifting — The Dunes of Yash Caleni",
"Sow ’n’ Reap. A Guide for Farmers",
"Beards and Barbers Monthly",
"Thanks for Nothing: How to stay positive",
"Memorandum",
"Perry Hotter and the Pony of Death",
"Power, Monarchy, Treason",
"Zoccer the Great. A Biography",
"The King is Dead, Long Live The Queen",
"The Sacrificial Trail",
]
>>
<<init_music>>
<<goto $starting_passage>><<widget "b_sticky">>
<<if $b.sticky>><li>
<span id="sticky">
<<if $b.sticky_known isnot true >>
Pink bean creature
<<else>>
<span class="sticky">Sticky</span> bean creature
<</if>>
</span>
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
Its flavor was bubble gum. It still smells like it.
<</replace>>
<</link>>
<<link "<<pet>>">> /* ---- PET --------*/
<<audio "fx_pet" play>>
<<replace "#exam">>
You pet the bean that chirps happily but its stickiness makes it almost impossible to separate your finger from it.
<<set $b.sticky_known to true >>
<</replace>>
<<replace #sticky>>
<span class="sticky">Sticky</span> bean creature
<</replace>>
<<set $petcounter += 1>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<case "storage">>
<<set $b.sticky to false>> /* remove item */
<<goto "StickyStorage">>
<<default>>
You don’t want to stick it here.
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "i_jellybeans">>
<<if $i.jellybeans>><li>
Jelly beans
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
An assortment of colors and flavors of a wide and wild variety.
<</replace>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<default>>
You’re not feeling hungry.
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "i_powder">>
<<if $i.powder>><li>
Sparkly powder
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
It’s a strange substance that faintly sparkles in the dim light.
<</replace>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<case "ClosetPockets1">>
<<set $i.powder to false>> /* remove item */
<<goto "JellyCreatures">>
<<default>>
You don’t really know what to sprinkle it <em>on</em>.
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<audio "m_tavern" fadeout>>
He was utterly devoid of humor and muttered something you couldn’t understand as he turned away. Joker that you were, you decided to milk the situation for more comedy.<br/><br/>
“Too weak to speak, old man? Or did your dentures come loose?”<br/><br/>
Your friends should’ve exploded in another laughing fit. But they didn’t. Maybe your jokes are <em>too</em> good? Your posse was probably too inebriated to get it. Pearls before swine…<br/><br/>
The man’s dentures seemed alright as he <em>did</em> [[speak]].
<<audio "m_wizard" play>>
His suddenly booming voice recanted words in the ancient tongue, louder and louder, angrier and angrier. You felt like you could handle him.<br/><br/>
“That’s her majesty’s arch mage!” your friend who knows all the celebrities suddenly shouted. Timing, Leopold!<br/><br/>
The air crackled with magic and striking a pose the mage shot a ball of blue lightning from his hands that engulfed you a second later.<br/><br/>
You didn’t feel like you could handle him anymore. It was too late for a snide retort anyway as you were being swept up and launched through the roof, head first.<br/><br/>
[[Ouch!]]<<audio "m_tavern" play >>
Faint memories return of a night at the tavern. It had been a swell night. You were on top of your game, friends and strangers rapt up in the stories and jokes you were telling.<br/><br/>
You got carried away as an elderly man in a robe and a pointed floppy hat entered. He looked rather ridiculous. As you were on a roll, naturally you [[went for it]].<<widget "actiontext">>
<<if $action_text isnot "">>
<<print "<span class='action_text'>" + $action_text + "</span><br/><br/>">>
<<else>>
<</if>>
<<set $action_text to "">>
<</widget>><<widget "beans">>
<<if $f.beans_alive>>
<<b_debugging>>
<<b_sticky>>
<<b_inky>>
<<b_hot>>
<<b_twitchy>>
<</if>>
<</widget>><<widget "examine">>
<span class="button"
title="Examine this">
🔍</span>
<</widget>><<widget inventory>>
<div class="inventory">
/* limit to 2 decimal places
<<set $res.money to Math.round($res.money * 100.0) / 100.0>>
<<set $car.gas to Math.round($car.gas * 100.0) / 100.0>>
// round to integer
<<set $res.coffee to Math.round($res.coffee)>>
*/
<b>In your pockets:</b>
<ul>
<<beans>>
<<i_powder>>
<<i_jellybeans>>
<<i_candle>>
<<i_lit_candle>>
<<i_negator>>
</ul>
<div id="exam"></div>
</div>
<</widget>><<widget "reload">>
<<goto `passage()`>>
<</widget>><<widget "use">>
<span class="button"
title="Use this here">
✋</span>
<</widget>>You made a joke at the man’s expense.<br/><br/>
And what a joke that was, a real zinger! You then remember the faces of your friends as you said it. That expression with that big O mouth and wide eyes of “oh no, they didn’t!”.<br/><br/>
They were too stunned to laugh. Cute. In a few seconds they would get it.<br/><br/>
You also remember the man’s expression. His was [[not amused]].<<actiontext>>
<<audio "fx_cauldron" loop play>>
An undefinable broth slowly simmers in the big black cauldron that sits in the center of the room below a sooty chimney, underneath blue flames of a magical fire flicker. Surely some alchemical monstrosities float under the foamy surface.<br/><br/>
You shudder <<if hasVisited("utensils")>>and glance over once more to the knives. It’s just too gruesome. You groan<</if>> and turn away.<br/>
<<inventory>>
[[Return|Kitchen]]<<actiontext>>
<<if $f.recipe_revealed isnot true>>
The recipe book is opened on a page whose ink is too faded to read in most parts. Only the grooves of the quill that once wrote these words remains.<br/><br/>
But you can decipher the following lines that make you shudder in disbelief.
<div class="recipe">
... Pale.... m.s.....s ...st be soft and flesh..<br/>
... .....e o. Blood.... s..... .........<br/>
½ × slice. N.r...o.<br/>
. . spo...... .f ..gh.... ....<br/>
P.enty of s..... .....<br/><br/>
1. ..mmer Blood.... .....s ..d Ni......t mi.. i. cauldron f.r . ..u...<br/>
2. Ad. t.i... slice. ni......<br/>
.. ..d P... ..p .u......s .t t.. e..<br/>
4. Si...r un... t.ick .nd flesh.<br/>
</div><br/>
That mage is not a mere kidnapper but also a cannibal! <br/><br/> That’s why you were locked up in that windy closet. To keep you fresh and tasty. The thought alone chills you to your bones.
<<else>>
The recipe book’s letters and ornaments look as good as new and are easily legible. At the bottom of the corner you notice a black bean that’s still huffing and puffing.<br/><br/>
The recipe appears as plain as a pikestaff<br/>
<div class="recipe">
5 × Pale Cap mushrooms (must be soft and fleshy)<br/>
1 × bundle of Bloodroot stalks (crushed)<br/>
½ × sliced Nirnroot<br/>
2 × spoonfuls of Nighgoat milk<br/>
Plenty of spring water<br/><br/>
1. Simmer Bloodroot stalks and Nightgoat milk in cauldron for 3 hours.<br/>
2. Add thinly sliced Nirnroot<br/>
3. Add Pale Cap mushrooms at the end<br/>
4. Simmer until thick and fleshy<br/>
</div><br/>
Perhaps it’s not spelled out as clearly as you thought but you can read between the lines. You’re that good. That entire cannibalism thing aside, though, it sounds quite tasty.
<</if>>
<br/><br/>
<<inventory>>
[[Return|Kitchen]]<<actiontext>>
<<if visited(passage()) is 1>>You enter a room that must be the sorcerer’s library<<else>>You’re in the library<</if>>.<br/><br/>
There are many <<if $f.looking_for_negator>>shelves you just went through<<else>>[[shelves]]<</if>> with arcane books, dusty volumes in foreign alphabets. Stacks of scrolls and parchments are strewn about a small lectern<<if $i.candle or $i.lit_candle>>.<<else>> with an old candle sitting on top.<</if>><br/>
<<inventory>>
<<if $i.candle isnot true and $i.lit_candle isnot true>>
<<link "Take the candle<br/>">>
<<set $action_text to "You’ve taken the candle and put it in your pockets.">>
<<set $misdeeds.push("I’m sorry for stealing from you")>>
<<set $i.lit_candle to false>>
<<set $i.candle to true>>
<<goto `passage()`>>
<</link>>
<</if>>
Leave [[up the staris|TopStairs]]<br/>
<<if hasVisited("Laboratory")>>
Down to the [[laboratory|Laboratory]]
<<else>>
Down to [[who knows where|Laboratory]]
<</if>><br/><<audio "m_main" fadeout>>
<<actiontext>>
With something that sounds like a shriek, the lock releases the bolt and as you come within arm’s length with the negator. With the lock disengaged you throw yourself against the iron doors towards sweet, sweet freedom!<br/><br/>
But your freedom doesn’t last as you bump into the man in the blue robe and that silly hat. He’s carrying a basket full of mushroom. And he’s still not amused at seeing you.<br/><br/>
[[Oh shit!]]<<audio ":cue" stop>>
<<audio ":music" stop>>
<<audio "m_wizard" play>>
You don’t get to say it. With an exasperated twirl of the mage’s slender fingers your body is paralyzed, only your eyes are free to move and react very appropriately in utter terror as you begin to float a few inces above the ground.<br/><br/>
The mage sighs and picks up the negator you dropped and mumbles an annoyed “oh for crying out loud.”
The negator under his arm, he enters his humble abode and your motionless body silently follows him insidethe very place you meant to escape from.<br/><br/>
[[Oh no!]]Oh yes. And it gets worse.<br/><br/>
“Leaving so soon? I thought you might join me for … dinner,” he mumbles. You don’t like the pause before the last word, not at all. You can’t even protest. Or joke.<br/><br/>
In no particular hurry, the mage climbs the steps to the kitchen with you on an invisible tether where he empties the basket over the cauldron. The mushrooms plummet into the broth.<br/><br/>
“Now for that last vital ingredient…” you hear him mutter. And then you get pulled over the cauldon as well.<br/><br/>
[[Halp!]]
You want to scream, you want to flail your arms at that cannibalistic wizard but it’s impossible. Your helpless body is violently shaken like a salt pitcher.<br/><br/>
You hear everything you kept in your pockets drop on the hard floor as the terror of being eaten alive overwhelms you and you fall into the merciful hands of another unconsciousness.<br/><br/>
That’s becoming a pattern, it seems.<br/><br/>
[[Shut up]]Against all odds, you live to open your eyes again. This time it’s no stuffy closet that you find yourself in but propped up on a chair at the small dining table.<br/><br/>
Right across sits the arch mage, his intelligent eyes assess you from below white bushy brows.<br/><br/>
In front of you sits a steaming bowl of delicious smelling mushroom soup.<br/><br/>
“Can you guess why you are here?” he asks in a stern voice.<br/><br/>
“[[Because you want to eat me]].”The mage’s expession doesn’t change at first. Then he bursts out laughing, a booming loud ho-ho-ho that leaves you speechless.<br/><br/>
“What whith my loose dentures?” he beams at you before another fit of laughter shakes the room.<br/><br/>
You fail to see the humor in [[whatever this is]].“I wanted to talk to you, little jester. Because you seem to know nothing about boundaries. Personal boundaries.” He looks at the floor where still the contents of your invent— your pockets are strewn about.<br/><br/>
“[[You’ve locked me in a closet!]]”“For your own safety. You seemed like the crafty, mischeivous type and I didn’t want you prying into my affairs while I went out to gather Pale Caps for the broth.”<br/><br/>
“[[That worked out well]]”<br/>
“[[I’m sorry]]”<br/>“Careful now, little jester. I might eat you after all!”<br/><br/>
You’re certain that he is joking. Though the look he’s giving you makes you only rather certain.<br/><br/>
“You cannot go about and treat people like you do. I am not just her majesty’s court mage, I am also responsible for morale. And I prefer to handle things differently than the previous mage.”<br/><br/>
You’re still no newt, so that’s good. You consider your option and decide it might be best to come clean.<br/><br/>
“[[I’m sorry]]”
“You’re sorry, you say.” He leans back and musters you critically. “What exactly are you sorry for, then?”<br/><br/>
“<<link "For making a joke at your expense">>
<<goto "MisdeedLoop">>
<</link>>”“Very well then,” he grumbles. “Now let’s eat.” <br/><br/>
You stare suspisciously at your bowl as the old mage spoons his soup. Is that… a little bean-shaped jalapeño between the mushrooms? You hesitate.<br><br>
The mage’s fist pounds on the table<br>
“Eat!”<br/><br/>
You eat. <br/><br/>
<<if $misdeeds.length isnot 0>>
<!-- You didn't apologize fully -->
<<else>>
<!-- You apologized for everything -->
<</if>>
[[The End.]]
<<if $misdeeds.length isnot 0>>
<<goto "MisdeedItem">>
<<else>>
<<goto "DoneApologizing">>
<</if>>“<<print either("And…?", "Is that all?", "Go on", "Anything else?")>>”<br/><br/>
<<set $temp to $misdeeds.pluck()>>
“<<link $temp>>
<<goto "MisdeedLoop">>
<</link>>”<br/>
“[[That’s it|DoneApologizing]]”
<<audio ":all" stop>>
<<audio "m_tavern" play>>
Thank you for playing <b>Bean There, Done That</b>!<br/><br/>
This game was made for the Ludum Dare #56 Compo in 48 hours for the theme “Tiny Creatures”. I know, I should’ve done more with them but I am really bad at puzzle design. A fact that emerged treacherously late in development. Thus I am more than thankful that you still played it till the end! 💖 <br/><br/>
Here are some statistics:
<ul>
<li>You played <<print turns()>> turns.</li>
<li>You petted the beans <<=$petcounter>> times.
<<if $petcounter gte 20>>
They love you! 🥰
<<elseif $petcounter gte 10>>
They liked that.
<<elseif $petcounter gte 5>>
Just often enough, I guess…
<<elseif $petcounter gte 2>>
They are not too keen on you.
<<elseif $petcounter eq 1>>
At least once.
<<else>>
You monster!
<</if>>
</li>
<li>You <<if $boring_books.length isnot 0>>did not see<<else>> browsed <</if>> all books on the wizard’s shelf.</li>
<li>You <<if $f.recipe_revealed>>succeeded<<else>>failed<</if>> in revealing the recipe in the kitchen.
</li>
<li>You chose to
<<if $misdeeds.length isnot 0>>not<</if>> apologize for all your misdeeds.
</li>
</ul>
<br/><br/>
<<link "Start over">>
<<goto "_init">>
<</link>><<inventory_check>>
<<actiontext>>
<<if visited("Laboratory") is 1>>You enter a room that you instantly recognize as an artificer’s laboratory<<else>>The laboratory<</if>>.<br/><br/>
It’s filled to the brim with shelves and containers, flasks and sachtels, potions and reagents. The cracks in the walls are much more pronounced here than in other parts of the structure, presumably thanks to a couple of explosive mishaps over the years. Gusts of cold wind ruffle your hair.<br/><br/>
<<if visited("storage") is 0>>
There is a small, circular [[door|storage]] with a sign over it reading <em>Trinkets Storage</em>.
<<else>>
The small round door to the [[Trinkets Storage|storage]].
<</if>><br/>
<<inventory>>
Walk up to the [[library|Library]]<br/>
<<if hasVisited("Kitchen")>>
Descend to the [[kitchen|Kitchen]]
<<else>>
[[Descend|Kitchen]] further down
<</if>>
<<actiontext>>
<<if visited("living quarters") is 1>>These must be the living quarters of the arch mage. <</if>>The room is a stone-walled chamber like the others but a clumsy attempt at wood paneling was made. He might be a powerful mage but a skilled interior designer he is not.<br/><br/>
A sturdy curved desk with a chair stands against the wall with the small window, between it and the bed a low [[shelf]] with books of more mundane pedigree than what you saw in the library.<br/>
<<inventory>>
The door to the [[kitchen|Kitchen]]<br/>
<<if hasVisited("privy") isnot true>>
A much smaller [[door|privy]] is on the outside wall. An exit, possibly?
<<else>>
Finally, of course, the [[door|privy]] to the privy.
<</if>><br/><br/><<actiontext>>
The entrance hall.<br><br/>
Well, “hall” might be overly euphemistic as it’s not much bigger than the closet you’ve been in recently. You care little for the humble décor, as you want to make it like a tree and get out of here.<br/><br/>
But in your way stands the mother of all doors. It’s representative of an arch mage, a studded black cast-iron monstrosity with an equally sturdy looking [[lock]].<br/>
<<inventory>>
Back up to the [[kitchen|Kitchen]]<<actiontext>>
Upon closer inspection it becomes clear that this lock plays in another leage than the flimsy one on the closet. Or rather, another sport entirely:<br><br>
It’s smooth and shiny and without a keyhole or any other crevice that you could cram an unwilling bean creature into. Instead, the smooth metal shimmers in shifting spectral colors. An enchanted lock that cannot be picked by mechanical means.<br><br>
But the mage had to learn how to do that himself at some point. This knowledge is sure to be around here somewhere.<br/>
<<set $f.looking_for_book to true>>
<<inventory>>
[[Return|Entrance]]<<return>><<if $boring_books.length is 0>>
You’ve seen all of the titles. Time to move on. <br/><br/>
[[Return|living quarters]]
<<else>>
<<audio "fx_book" play>>
<<if visited("shelf") is 1>>
The shelf is small but the abundance of paperbacks is impressive. The first one you notice is
<<else>>
<<print either(
"How about this",
"Take a look at this",
"Yet another",
"You’ve seen this ",
"A rather",
"A pretty",
"A very",
"A particularly",
"Look at this",
"You’ve read parts of this",
"Critics loathe this",
"One of the worst might be this"
)>>
<<print either(
"glamorous",
"striking",
"mundane",
"thrilling",
"taxing",
"annoying",
"“inspiring”",
"crude",
"boring",
"questionable",
"amateurish",
"clumsy",
"laughable",
)>>
<<print either(
"book",
"title",
"volume",
"tome",
"piece of literature",
"botch",
"effort",
"scribbling",
"entry",
"bunch of words",
"crime against taste",
"stack of pages",
"compilation",
"edition"
)>>:
<</if>>
<em><<print $boring_books.pluck()>></em>.<br/><br/>
<<link "Pick another">>
<<reload>>
<</link>><br/>
[[Return|living quarters]]
<</if>><<actiontext>>
Eagerly you open the unlocked door expactant of the sweet scent of freedom but instead it opens into a tiny room consisting only of a stone bench with a [[hole|privy hole]] in the middle.<br/>
<<inventory>>
[[Back out|living quarters]]<<actiontext>>
Your plans of escaping through this particular aperture are fooiled as you peer through it. You stare into the abyss that’s right next to the tower but the abyss doesn’t stare back. It must be busy elsewhere.<br/>
<<inventory>>
[[Darn|privy]]
<<actiontext>>
So much red. The knive, the sickle, the cutting board, the mortar, the pestle—all red. They glisten with that deep, dark reddish substance slowly turning brown and crusting. You don’t want to know but you kind of do anyway.<br/>
<<inventory>>
[[Return|Kitchen]]<<return>><<inventory_check>>
<<actiontext>>
You open the little door and the room is pitch black, the light from behind you is touches only a small ledge with steps leading up into the musty darkness.<br/><br/>
<<if $f.crack_plugged >>
Thanks to the help from your candy creature, this entrance is now almost as calm as the dark lofty chamber it leads to.
<<else>>
A particularly nasty crack in the masonry allows the wind entrance. At least the dark chamber appears relatively calm and undistrubed.
<</if>><br/>
<<inventory>>
<<if $i.lit_candle>>
Enter the [[Trinkets Storage]]<br/>
<</if>>
[[Return to laboratory|Laboratory]]<<inventory_check>>
<<actiontext>>
<<audio "fx_book" play>>
<<if $f.looking_for_book>>
Since you now know what you are looking for exactly, you disregard most of the books in this well organized library.<br><br>
Aha! There it is: <em>Protective Spells and Access Control: An Illustrated Handbook</em>. Impatiently you page through the extensive volume until you happen upon an illustration that looks very similar to what you saw on the main entrance. The areticle reads:<br><br>
<div class="recipe">
This protective spell has been used by treasurers and home owners alike for centuries for its simplicity and robustness. Impenetrable by non-magical devices and resistant against even magical tampering, this timeless classic will never grow out of style.<br><br>
Each enchantment also produces a matching thyrologic negator (pictured) in case the spell-caster is unable to perform the dischantment.<br/>
</div><br>
A thyrologic negator, eh? You memorize the picture illustration as you’re certain that the old hoarder is certain to have it around somewhere.
<<set $f.looking_for_negator to true>>
<<else>>
The knowledge collected in these book is extensive. There are books on cryptozoology, conjuring, banishing rituals, rituals, encyclopedias of beasts and demons, protective spells and healing magic, printer driver installation under something called <em>Lee-nucks</em>, and tomes upon tomes in langueages you’ve never seen before.
<</if>>
<<inventory>>
[[Return|Library]]<<return>><<return>><<widget "pet">>
<span class="button"
title="Pet this">
🫳</span>
<</widget>><<audio "m_sting" play>>
<<audio "fx_book" play>>
Carefully you place the bean creature on top of the old parchment. The black little bean sniffs around curiously for a few seconds, then finds the grooves of the first faint letter and geefully follows its trail.<br/><br/>
You’re pretty sure you can hear faint “Wheee!” noises coming from it as it goes around some especially curvy letters.<br/><br/>
<<set $f.recipe_revealed to true >>
[[Look at book|recipe book]]<<widget "b_inky">>
<<if $b.inky>><li>
<span id="inky">
<<if $b.inky_known isnot true >>
Black bean creature
<<else>>
<span class="inky">Inky</span> bean creature
<</if>>
</span>
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
This used to be a liquorice-flavored bean.
<</replace>>
<</link>>
<<link "<<pet>>">> /* ---- PET --------*/
<<audio "fx_pet" play>>
<<replace "#exam">>
The bean sniffs cautiously at your finger but lets you pet it. Its little torso is slick and leaves a dark inky stain on your finger.
<<set $b.inky_known to true >>
<</replace>>
<<replace #inky>>
<span class="inky">Inky</span> bean creature
<</replace>>
<<set $petcounter += 1>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<case "recipe book">>
<<set $b.inky to false>> /* remove item */
<<goto "InkyBook">>
<<default>>
<<if $b.inky_known>>
You don’t want to lose it, it’s so black, you might not be able to find it again.
<<else>>
You don’t want to ink stains all over this.
<</if>>
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>># Create a new widget and give it a name, eg. "b_inky"
# Fill it all out and replace the previous aspekt with the new one, e.g. "inky".
# Be sure to set the proper passage in the GOTO event in use!
# Also make sure to give it the tags "widget" and "nobr"
# In w_beans, add the macro to the list, e.g. <<b_inky>>
# In _init, add it to $b, e.g. "inky" : true,
# In the story's CSS, add the style tag to it, e.g. .inky { color: #808080; }<<widget "b_twitchy">>
<<if $b.twitchy>><li>
<span id="twitchy">
<<if $b.twitchy_known isnot true >>
Brown bean creature
<<else>>
<span class="twitchy">Twitchy</span> bean creature
<</if>>
</span>
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
Hey! This is no jelly bean but a regular coffee bean! It looks… frenetic.
<</replace>>
<</link>>
<<link "<<pet>>">> /* ---- PET --------*/
<<audio "fx_pet" play>>
<<replace "#exam">>
The bean twiches and dashes back and forth but accepts your attempt to pet it. It strains to contain all the energy that’s building up inside its sturdy shell.
<<set $b.twitchy_known to true >>
<</replace>>
<<replace #twitchy>>
<span class="twitchy">Twitchy</span> bean creature
<</replace>>
<<set $petcounter += 1>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<case "ClosetDoor2">>
<<set $b.twitchy to false>> /* remove item */
<<goto "OutOfCloset">>
<<default>>
<<if $b.twitchy_known>>
You feel like it might be a bad idea to let it wreak havoc.
<<else>>
That’s not something you want to try.
<</if>>
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "b_debugging">>
<<if $b.debugging>><li>
<span id="debugging">
<<if $b.debugging_known isnot true >>
A plump little pony
<<else>>
<span class="debugging">Debugging</span> pony
<</if>>
</span>
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
Looks like the developer forgot about this one. Idiot.
<</replace>>
<</link>>
<<link "<<pet>>">> /* ---- PET --------*/
<<replace "#exam">>
You pet it and it feels warm and fuzzy and licks your hand. “Mama” it says. It means you!
<<set $b.debugging_known to true >>
<</replace>>
<<replace #debugging>>
<span class="debugging">Debugging</span> pony
<</replace>>
<<set $petcounter += 1>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<replace "#exam">>
<<switch passage()>>
<<case " %%%%%%%%%%%%%%%%%%%% ">>
<<set $b.debugging to false>> /* remove item */
<<goto "Showdown">>
<<default>>
<<if $b.debugging_known>>
The pony doesn’t feel like doing some debugging work here. It should, though.
<<else>>
#ERROR AT LINE 512. MISSINGNO DETECTED.
<</if>>
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "i_candle">>
<<if $i.candle>><li>
A candle
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
It’s a stubby candle made out of beeswax with a bristly wick.
<</replace>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<case "Cauldron">>
The magical flames don’t ignite anything they were not meant to.
<<default>>
You see no use for an unlit candle here.
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "i_lit_candle">>
<<if $i.lit_candle>><li>
A lit candle
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
It’s a lit candle emitting warm light. I don’t know how you keep that in your pockets
<</replace>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<default>>
The candle makes the surroundings slightly brighter but that’s about it.
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "b_hot">>
<<if $b.hot>><li>
<span id="hot">
<<if $b.hot_known isnot true >>
Green bean creature
<<else>>
<span class="hot">Fiery</span> bean creature
<</if>>
</span>
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
The green bean that once had been a jalapeño flavored candy looks angry.
<</replace>>
<</link>>
<<link "<<pet>>">> /* ---- PET --------*/
<<audio "fx_pet" play>>
<<replace "#exam">>
The bean doesn’t resist you, for good reason: As soon as your skin touches its tiny shell, it turns red and erupts in a burst of heat that sears your fingertip.
<<set $b.hot_known to true >>
<</replace>>
<<replace #hot>>
<span class="hot">Fiery</span> bean creature
<</replace>>
<<set $petcounter += 1>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<if $i.candle>>
<<if tags().includes("is_windy")>>
It’s too windy here, the wick can’t retain the flame.
<<elseif passage() is "storage" and $f.crack_plugged is false>>
It’s too windy here, the wick can’t retain the flame.
<<else>>
<<set $i.candle to false>>
<<set $i.lit_candle to true>>
<<set $action_text to "The candle’s wick catches fire instantly as it touches that mean green bean. It is now lit.">>
<<goto `passage()`>>
<</if>>
<<else>>
<<if $b.hot_known>>
You don’t consider it safe. It looks too angry.
<<else>>
That’s no place for a potential fire hazard.
<</if>>
<</if>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "inventory_check">>
<<if tags().includes("is_windy")>>
<<if $i.lit_candle>>
<<set $i.lit_candle to false >>
<<set $i.candle to true>>
<<set $action_text to "The draft extinguishes your candle.">>
<</if>>
<</if>>
<</widget>><<inventory_check>>
<<actiontext>>
With the light of the steadfast candle you behold a gigantic collection of hundreds, if not thousands, of small trinkets, talismans, curios, and other devices of magical properties lining the curved walls.<br/><br/>
<<if $f.looking_for_negator>>
The etching of the thyrologic negator in mind, you scan the packed shelves, looking for that pointy dodecahedron. Miraculously you spot it as it reflects the flame of your candle in the same spectral colors as the door lock.<br><br>
It’s perched on the very top of a shelf, almost out of reach to you. As you strain to reach it, you lose hold of the cande that plummets into the black depths between stairs and shelves.<br><br>
<<set $i.candle to false>>
<<set $i.lit_candle to false>>
<<set $action_text to "You’ve picked up a thyrologic negator. Good for you!">>
No matter as you take your prize and carefully follow the steps down towards the light of the small entrance.
<<set $i.negator to true>>
<<else>>
You browse them for a while but your head grows dizzy with all the options (and presumably their magical properties). Surely, the mage must have a system by which he organized his collection but you fail to see it.
<</if>>
<<inventory>>
Return to [[the Laboratory|storage]]<<audio "m_sting" play>>
Carefully you position your hand underneath the crack in the stonework with the small candy bean. It struggles against the breeze and disappears between the cleft stones. For some reason it feels right at home there. After a second a syrupy goo fills the rift completely and hardens in the strong breeze that instantly subsides.<br/><br/>
At least in this part of the laboratory the wind has lost some territory.<br/><br/>
<<set $f.crack_plugged to true >>
[[Return|storage]]<<widget "i_negator">>
<<if $i.negator>><li>
Thyrologic negator
<<link "<<examine>>">> /* ---- EXAMINE --------*/
<<replace "#exam">>
It’s a pointy dodecahedron, shimmering in pale rainbow colors. Doors hate it.
<</replace>>
<</link>>
<<link "<<use>>">> /* ------ USE --------------- */
<<audio "fx_use" play>>
<<replace "#exam">>
<<switch passage()>>
<<case "lock">>
<<goto "Showdown">>
<<set $actiontext to "You used the negator to great effect!">>
<<default>>
The doors in the room slightly quiver as if in fear of what the negator might to do them.
<</switch>>
<</replace>>
<</link>>
</li>
<</if>>
<</widget>><<widget "init_music">>
<<cacheaudio "m_wizard" "music/mus-wizard.ogg">>
<<cacheaudio "m_main" "music/mus-main.ogg">>
<<cacheaudio "m_tavern" "music/mus-tavern.ogg">>
<<cacheaudio "m_sting" "music/mus-sting.ogg">>
<<cacheaudio "fx_pet" "sfx/fx_pet.ogg">>
<<cacheaudio "fx_use" "sfx/fx_use.ogg">>
<<cacheaudio "fx_book" "sfx/fx_book.ogg">>
<<cacheaudio "fx_cauldron" "sfx/fx_cauldron.ogg">>
<<createaudiogroup ":music">>
<<track "m_wizard">>
<<track "m_main">>
<<track "m_tavern">>
<</createaudiogroup>>
<<createaudiogroup ":sfx">>
<<track "fx_pet">>
<<track "fx_cauldron">>
<<track "fx_use">>
<<track "fx_book">>
<</createaudiogroup>>
<<createaudiogroup ":cue">>
<<track "m_sting">>
<</createaudiogroup>>
<<audio ":music" volume 0.30>>
<<audio ":cue" volume 0.50>>
<<audio ":all" stop>>
<</widget>><h1>Bean There, Done That</h1>
<a data-passage="Start" class="link-internal link-image">
<img src="bean-cover.png" style="width:100%">
</a>
<h4>Version 1.0.1</h4>
<h2>A Ludum Dare #56 Compo Adventure</h2>
<h3>By Pixel Prophecy, 2024</h3>
<br><br>
<div style="text-align: center; font-size: 150%">[[Start Game|Start]]</div>