<<nobr>>\
<<if $items.length > 0>>
<div class="inventory-section">
<div class="inventory-tabs">
<<for _i = 0; _i < $items.length; _i++>>
<div class="inventory-item">
<span class="item-name"><<print $items[_i]>></span>
<<if window.GameConfig && window.GameConfig.itemDescriptions && window.GameConfig.itemDescriptions[$items[_i]]>>
<span class="item-description"><<print window.GameConfig.itemDescriptions[$items[_i]]>></span>
<</if>>
</div>
<</for>>
</div>
</div>
<<else>>
<div class="inventory-section">
<p class="empty-inventory"><em><<print GameConfig.emptyMessages.items>></em></p>
</div>
<</if>>
<</nobr>>\<<nobr>>\
<<if $clues.length > 0>>
<div class="inventory-section">
<div class="inventory-tabs">
<<for _i = 0; _i < $clues.length; _i++>>
<div class="inventory-item">
<span class="item-name"><<print $clues[_i]>></span>
<<if window.GameConfig && window.GameConfig.clueDescriptions && window.GameConfig.clueDescriptions[$clues[_i]]>>
<span class="item-description"><<print window.GameConfig.clueDescriptions[$clues[_i]]>></span>
<</if>>
</div>
<</for>>
</div>
</div>
<<else>>
<div class="inventory-section">
<p class="empty-inventory"><em><<print GameConfig.emptyMessages.clues>></em></p>
</div>
<</if>>
<</nobr>>\<<nobr>>\
<<if $restraints.length > 0>>
<div class="inventory-section">
<div class="inventory-tabs">
<<for _i = 0; _i < $restraints.length; _i++>>
<<capture _i>>
<div class="inventory-item restraint-applicable" @data-restraint-name="$restraints[_i].name" onclick="window.applyRestraint(this.getAttribute('data-restraint-name'))">
<div class="item-content">
<span class="item-name"><<print $restraints[_i].name>></span>
<<if $restraints[_i].value > 1>>
<span class="inventory-item-quantity"><<print $restraints[_i].value>></span>
<</if>>
<br>
<span class="item-description">
<<if window.GameConfig && window.GameConfig.restraintDescriptions && window.GameConfig.restraintDescriptions[$restraints[_i].name]>>
<<print window.GameConfig.restraintDescriptions[$restraints[_i].name]>>
<<elseif window.GameConfig && window.GameConfig.itemDescriptions && window.GameConfig.itemDescriptions[$restraints[_i].name]>>
<<print window.GameConfig.itemDescriptions[$restraints[_i].name]>>
<<else>>
<<print `A ${$restraints[_i].name.toLowerCase()}`>>
<</if>>
</span>
</div>
</div>
<</capture>>
<</for>>
</div>
</div>
<<else>>
<div class="inventory-section">
<p class="empty-inventory"><em><<print GameConfig.emptyMessages.restraints>></em></p>
</div>
<</if>>
<</nobr>>\<div class="time-display" id="time-display">
<span class="day-label">Day $day:</span>
<span class="time-icon"><<print GameConfig.labels.time[$time.toLowerCase()]>></span>
<span class="time-text">$time</span>
</div>
<div class="status-bars">\
<div class="stat-bar">\
<div class="stat-label">
<span><<print GameConfig.labels.statIcons.composure>> <<print GameConfig.labels.stats.composure>></span>
<span id="composure-value">$composure/$composuremax</span>
</div>\
<div class="stat-progress">\
<div class="stat-fill composure" id="composure-bar" @style="'width: ' + (($composure / $composuremax) * 100) + '%'"></div>
</div>\
</div>\
<div class="stat-bar">
<div class="stat-label">
<span><<print GameConfig.labels.statIcons.energy>> <<print GameConfig.labels.stats.energy>></span>
<span id="energy-value">$energy/$energymax</span>
</div>\
<div class="stat-progress">\
<div class="stat-fill energy" id="energy-bar" @style="'width: ' + (($energy / $energymax) * 100) + '%'"></div>
</div>\
</div>\
<div class="stat-bar">
<div class="stat-label">
<span><<print GameConfig.labels.statIcons.stimulation>> <<print GameConfig.labels.stats.stimulation>></span>
<span id="stimulation-value">$stimulation/$stimulationmax</span>
</div>\
<div class="stat-progress">\
<div class="stat-fill stimulation" id="stimulation-bar" @style="'width: ' + (($stimulation / $stimulationmax) * 100) + '%'"></div>
</div>\
</div>\
</div>
<<if $bondage.length gte 1>>\
<div class="body-section">\
<h3><<print GameConfig.labels.bondage>></h3>\
<div class="body-container">\
<<for _i = 0; _i < $bondage.length; _i++>>\
<div class="body-item">
<<print $bondage[_i]>>
</div>
<</for>>\
</div>\
</div>\
<</if>>\
<<nobr>>\
<<set _hasAvailableCharacter = false>>
<<for _charName range $relationships>>
<<if State.variables.characters[_charName] && State.variables.characters[_charName].available>>
<<set _hasAvailableCharacter = true>>
<<break>>
<</if>>
<</for>>
<</nobr>>\
<<if _hasAvailableCharacter>>\
<div class="body-section">\
<h3><<print GameConfig.labels.relationships>></h3>\
<<nobr>><div class="relationship-meters">
<<for _charName range $relationships>>
<<if State.variables.characters[_charName] && State.variables.characters[_charName].available>>
<<set _charIcon to State.variables.characters[_charName].icon || "💗">>
<div class="relationship-meter">
<img @src="State.variables.characters[_charName].sprite" alt="" class="face-sprite">
<div class="relationship-info">
<div class="relationship-name"><<print _charIcon>>| <<print _charName>></div>
<div class="relationship-bar-container">
<div class="relationship-progress">
<div class="relationship-fill" @style="'width: ' + (State.variables.characters[_charName].status * 5) + '%'"></div>
</div>
<span class="relationship-value"><<print State.variables.characters[_charName].status>>/20</span>
</div>
</div>
</div>
<</if>>
<</for>>
</div><</nobr>>\
</div>\
<</if>>\<<nobr>>\
<<set _activeLeads = $leads.filter(lead => !lead.completed)>>
<<set _completedLeads = $leads.filter(lead => lead.completed)>>
<<if _activeLeads.length > 0>>
<div class="inventory-section">
<h3>Active Leads</h3>
<div class="inventory-tabs">
<<for _i = 0; _i < _activeLeads.length; _i++>>
<<capture _i>>
<div class="lead-item">
<<if State.variables.characters[_activeLeads[_i].requester] && State.variables.characters[_activeLeads[_i].requester].sprite>>
<img @src="State.variables.characters[_activeLeads[_i].requester].sprite" alt="" class="lead-portrait">
<</if>>
<div class="lead-info">
<div class="lead-description"><<= _activeLeads[_i].description>></div>
<div class="lead-reward">Reward: <<print _activeLeads[_i].reward>></div>
</div>
</div>
<</capture>>
<</for>>
</div>
</div>
<<else>>
<div class="inventory-section">
<h3>Active Leads</h3>
<p class="empty-inventory"><em>No active leads.</em></p>
</div>
<</if>>
<<if _completedLeads.length > 0>>
<div class="inventory-section">
<h3>Completed</h3>
<div class="inventory-tabs">
<<for _i = 0; _i < _completedLeads.length; _i++>>
<<capture _i>>
<div class="lead-item lead-completed">
<<if State.variables.characters[_completedLeads[_i].requester] && State.variables.characters[_completedLeads[_i].requester].sprite>>
<img @src="State.variables.characters[_completedLeads[_i].requester].sprite" alt="" class="lead-portrait">
<</if>>
<div class="lead-info">
<div class="lead-description"><<= _completedLeads[_i].description>></div>
<div class="lead-reward">✓ Completed</div>
</div>
</div>
<</capture>>
<</for>>
</div>
</div>
<</if>>
<</nobr>>\<div class="map-section">
<<rendermap>>
</div>All unsaved progress will be lost. Are you sure you want to exit to title?
<button onclick="Nuke()">OK</button> <button onclick="GoBack()">Cancel</button><<nobr>>\
<<if visited("TutorialStart")>>
<div class="character-panel">
<div class="character-art">
<img id="character-image" alt="Character Image" src="">
</div>
<div class="status-button-section">
<button class="status-button" onclick="showStatus()"><<print GameConfig.labels.buttons.status>></button>
</div>
<<if visited("TutorialEnd")>>
/* Leads Section */
<<if visited("ShortcutStreet") or visited("Placeholder")>>
<div class="leads-button-section">
<button class="leads-button" onclick="showLeads()"><<print GameConfig.labels.buttons.leads>></button>
</div>
<<else>>
<div class="leads-button-section locked-section">
<button class="leads-button locked" disabled>🔒 ???</button>
</div>
<</if>>
/* Map Section */
<<if visited("Placeholder") or visited("Placeholder")>>
<div class="map-button-section">
<button class="map-button" onclick="showMap()"><<print GameConfig.labels.buttons.map>></button>
</div>
<<else>>
<div class="map-button-section locked-section">
<button class="map-button locked" disabled>🔒 ???</button>
</div>
<</if>>
/* Money Section */
<<if visited("Placeholder") or visited("Placeholder")>>
<div class="money-section">
<div class="money-display">
<span class="money-label">💰 Funds:</span>
<span class="money-amount" id="money-amount">$<<print $money>></span>
</div>
<div class="money-progress-container">
<div class="money-progress">
<<set _progress = window.getMoneyProgress()>>
<div class="money-progress-fill" id="money-progress-fill"
@style="'width: ' + _progress.percentage + '%'">
</div>
</div>
</div>
</div>
<<else>>
<div class="money-section locked-section locked-money">
<div class="money-display">
<span class="money-label locked-label">🔒 ???</span>
<span class="money-amount locked-amount">???</span>
</div>
<div class="money-progress-container">
<div class="money-progress">
<div class="money-progress-fill locked-fill" style="width: 0%"></div>
</div>
</div>
</div>
<</if>>
/* Inventory Section - Show if ANY tab is unlocked */
<<set _itemsUnlocked = visited("MerryPhoto") or visited("ShortcutStreet")>>
<<set _cluesUnlocked = visited("ShortcutStreet") or visited("Placeholder")>>
<<set _restraintsUnlocked = visited("Placeholder") or visited("Placeholder")>>
<<set _anyInventoryUnlocked = _itemsUnlocked or _cluesUnlocked or _restraintsUnlocked>>
<<if _anyInventoryUnlocked>>
<div class="inventory-section">
<h3><<print GameConfig.labels.inventory>></h3>
<div class="inventory-tabs">
<<if _itemsUnlocked>>
<button class="tab-button" onclick="showItems()"><<print GameConfig.labels.tabs.items>></button>
<<else>>
<button class="tab-button locked" disabled>🔒 ???</button>
<</if>>
<<if _cluesUnlocked>>
<button class="tab-button" onclick="showClues()"><<print GameConfig.labels.tabs.clues>></button>
<<else>>
<button class="tab-button locked" disabled>🔒 ???</button>
<</if>>
<<if _restraintsUnlocked>>
<button class="tab-button" onclick="showRestraints()"><<print GameConfig.labels.tabs.restraints>></button>
<<else>>
<button class="tab-button locked" disabled>🔒 ???</button>
<</if>>
</div>
</div>
<<else>>
<div class="inventory-section locked-section">
<h3>🔒 ???</h3>
<div class="inventory-tabs">
<button class="tab-button locked" disabled>🔒 ???</button>
<button class="tab-button locked" disabled>🔒 ???</button>
<button class="tab-button locked" disabled>🔒 ???</button>
</div>
</div>
<</if>>
<</if>>/* End TutorialEnd check */
</div>
<</if>>/* End Tutorial check */
<</nobr>>
<link rel="icon" href="data:image/png;base64,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">\/* Basic initialization */
<<set $items to clone(GameConfig.startingItems)>>
<<set $clues to clone(GameConfig.startingClues)>>
<<set $restraints to clone(GameConfig.startingRestraints)>>
<<set $bondage to clone(GameConfig.startingBondage)>>
<<set $characters to clone(GameConfig.characters)>>
<<set $relationships to clone(GameConfig.startingRelationships)>>
<<set $time to GameConfig.startingTime>>
<<set $day to 1>>
/* Stat initialization */
<<set $composure to GameConfig.startingStats.composure>>
<<set $energy to GameConfig.startingStats.energy>>
<<set $stimulation to GameConfig.startingStats.stimulation>>
<<set $composuremax to GameConfig.startingStats.maxValue>>
<<set $energymax to GameConfig.startingStats.maxValue>>
<<set $stimulationmax to GameConfig.startingStats.maxValue>>
/* Map initialization */
<<set $currentLocation to GameConfig.startingLocation>>
<<set $currentMap to GameConfig.startingMap>>
/* Money system */
<<set $money to GameConfig.moneySystem.starting>>
<<set $unlockedMilestones to {}>>
/* Leads */
<<set $leads to clone(GameConfig.startingLeads)>>
/* Outfit initialization */
<<set $outfitCategories to clone(GameConfig.outfitCategories)>>
<<set $currentOutfit to GameConfig.startingOutfit>>
/* Stat check system */
<<set $lastRoll to 0>>
<<set $lastTotal to 0>>
<<set $lastSuccess to false>>
<<set $lastDC to 0>>
/* Useful for specific utilities - use the <<setback>> macro to disable the back button */
<<set $backButtonAvailable to true>>
<<set $lastChoice to "">>
<<set $progress to 0>>
/* Image vars - set different base pose versions, e.c: */
/* <<set $hasJacket to true>> <- Template */
<<script>>
Config.history.maxStates = GameConfig.settings.maxHistoryStates;
<</script>><<script>>
// Restore UI when leaving title screen
$(document).one(':passagestart', function(ev) {
if (ev.passage.title !== 'TitleScreen') {
document.body.classList.remove('title-screen-active');
// Re-enable sidebars (they'll be properly shown/hidden by their own logic)
const leftSidebar = document.getElementById('leftSidebar');
const sidebarToggle = document.getElementById('sidebarToggle');
const characterPanel = document.querySelector('.character-panel');
const characterToggle = document.getElementById('characterToggle');
if (leftSidebar) leftSidebar.style.display = '';
if (sidebarToggle) sidebarToggle.style.display = '';
if (characterPanel) characterPanel.style.display = '';
if (characterToggle) characterToggle.style.display = ''; }
});
<</script>>
<div class="title-screen">
<!-- Background decoration -->
<div class="title-bg-pattern"></div>
<!-- Red ribbon on left side -->
<div class="title-ribbon"></div>
<!-- Main content area -->
<div class="title-main">
<div class="title-content">
<!-- Game title -->
<div class="title-header">
<h1 class="title-name">
<span class="title-red">Red</span>
<span class="title-riot">Riot</span>
</h1>
<div class="title-tagline">A story of rebellion</div>
</div>
<!-- Menu buttons -->
<nav class="title-menu">
<<if Save.slots.has(0)>>
<button class="title-btn title-btn-continue" type="button" onclick="myContinue()">
<span class="btn-icon">▶</span>
<span class="btn-text">Continue</span>
</button>
<</if>>
<button class="title-btn title-btn-new" type="button" onclick="newGame()">
<span class="btn-icon">✦</span>
<span class="btn-text">New Game</span>
</button>
<button class="title-btn title-btn-options" type="button" onclick="openSettings()">
<span class="btn-icon">⚙</span>
<span class="btn-text">Options</span>
</button>
<button class="title-btn title-btn-back" type="button" onclick="window.location.href='https://www.inkwellinteractive.ink';">
<span class="btn-icon">←</span>
<span class="btn-text">Back to Site</span>
</button>
</nav>
<!-- Version/Credits footer -->
<div class="title-footer">
<div class="title-version">Early Development</div>
<div class="title-social">
<a href="https://discord.gg/AB8eyY7cyv" target="_blank" title="Join Discord">Discord</a>
<span class="title-divider">•</span>
<a href="https://bsky.app/profile/tundy.bsky.social" target="_blank" title="Follow on Bluesky">Bluesky</a>
<span class="title-divider">•</span>
<a href="https://www.tumblr.com/blog/tundyblr" target="_blank" title="Follow on Tumblr">Tumblr</a>
</div>
</div>
</div>
</div>
</div><<unset $uninterested>>
<<unset $awful>>
<<unset $true>>
<<if not $photosgotten>><<set $photosgotten to 0>><</if>>
<<if visited("MerryBeaKinkedIn2")>>
<<givelead "KinkedIn Application" "Merry" "Merry wants me to take a picture with three people so I can make a KinkedIn profile. I've got <<print 3 - $photosgotten>> pictures left to take." "A KinkedIn account.">>
<<else>>
<<givelead "Photos for Merry" "Merry" "Merry's given me three people to take pictures of. I don't really see the point, but if it makes her happy, it's not like I don't have time. I've visited <<if $photosgotten is 0>>none <<else>>$photosgotten <</if>>so far." "Money?">>
<</if>>
<<giveclue "Merry's Recommendation | Éclair" false>>
<<giveclue "Merry's Recommendation | Scarlett" false>>
<<giveclue "Merry's Recommendation | Maple" false>>
<<goto "ShortcutStreet">>Fresh air fills your nose, as does the smell of fish and women's perfume. Steam Street. You knew this place perhaps a bit too well. As the main path to Dewville Springs, the legendary thermal spa that gave the city its name, it was a major tourist funnel. And where there were people, there were shops. A permanent establishment along the street was any merchant's dream. Many couldn't make that happen, so they set up stalls or busking spots along the side of the road instead. You never knew what kind of sounds or smells you'd encounter—or what there'd be to poach.
You could go for a dip right now yourself, but you purge the thought from your head. Better to go visit one of the leads Merry gave you before you forget the directions.
[[Visit the Sundance Patisserie->EclairStart]]
[[Visit the Strip Parlor->ScarlettStart]]
[[Visit the dojo, Helpless->MapleStart]]<<meetcharacter "Merry" false>>\
Your cheek brushes against the smooth beige counter. A few days later, you find yourself in the comfort of Merry Place, a toy store owned by your oldest friend in Dewville City. Not much had come of the punch besides the expected firing and subsequent ban. Back to the drawing board. That's what you thought anyway, but lately, you hadn't been able to summon the energy for much of anything.
Merry appears from inside her storage, a stack of balance boards in hand, her tail coiled around a pen. You barely register her presence. She makes her way past the counter, towards an empty shelf with a price tag nailed to it. Her shop wasn't that big. Two aisles seperated by twin leaning shelves, the outer ring carrying the latest block sets and action figures, the inner carrying candy. The walls and floor were made of pristine white birch wood and the shelves were mostly dark oak. You'd think she'd chosen the colors for contrast, but once, Merry had told you that the real reason was due to supply shortages. If she could, she'd have made the whole thing oak.
Sometimes we all don't get what we want.
A sting on the back of your head makes you flinch. A pen clatters onto the counter in front of you.
"None of that moping here," Merry reprimands. "You'll drive people away."
[[Apologize->MerryBeaTalk][$apologized to true]]
[[Say nothing->MerryBeaTalk]]<<if $apologized>>\
"Sorry", you mutter. Your actions don't lend much credence to your words.
<<else>>\
You turn your head to lie down the other way. Merry sighs behind you.
<</if>>\
"That bad, huh?"
"I just don't know what to do anymore. Every time I think I might be able to hold something down, something happens, and I lose it, then it turns into this whole 'human resources' nightmare and then I'm back to square one. With a bunch more enemies."
Merry turns towards you and gives a small, knowing smile. She sits down next to you, but doesn't speak. Then she says, "I know", and disappears past the counter back into the storage.
A few moments later, she returns with a worn camera. "You still know what this is, right?"
"A camera, duh. I didn't know people still used these, with everyone having phones now."
"They do. Mostly for professional photography. Would that be something that interests you?"
[[Not at all->MerryBeaTalk2][$uninterested to true]]
[[I could try->MerryBeaTalk2]]<<if $uninterested>>\
"Not really," you mutter, then fall back on the lap of your folded arms.
"And what if I told you there's a sexy aspect involved?" You blink in shock and sit up slightly. Thoughts race through your head for what feels like the first time in forever, then you sigh, and shake your head.
"...Still not really. I appreciate the attempt, though."
Merry snorts. "I'm not kidding. Look, if nothing else, will you just do it for me?"
[[Fine->MerryBeaKinkedIn]]
<<else>>\
"From where I'm at, I'll try anything once," you sputter a laugh.
"Awesome. You'll love this, then."
[[Show me->MerryBeaKinkedIn]]
<</if>>\<<if $uninterested>>\
"Fine. What's the idea?"
Merry takes her phone out of a jacket pocket, swipes on it a few times, then slides it over the counter towards you. You lazily look over, then feel your cheeks go hot. Inside a cute social media interface, there's a post of a nude red-haired lady, covered only in strategically-placed chocolate. The caption is a recipe for sweets. Instinctively, you scroll down, but below her is mostly text posts like "looking for photographer" or "rigger looking for sub" or similar.
"This is what you wanted to show me?"
"It's KinkedIn! You know, like a networking site, but for kink."
It takes your brain a few moments to process. And then a few more after that. "...What? This isn't one of those shady parasocial sites where you pay women to pretend to care about you, is it?"
"No, no! Look, the point is, people on this site will pay a premium for quality photography. Having a cameraman lets them focus on what matters and looks much more professional too. So, I can get you set up with some leads, you go there and take the pictures, and then you get paid! How's that sound?"
[[Awful->MerryBeaMove][$awful to true]]
[[Great!->MerryBeaMove][$great to true]]
[[What?->MerryBeaMove]]
<<else>>\
Merry takes her phone out of a jacket pocket, swipes on it a few times, then slides it over the counter towards you. You lazily look over, then feel your cheeks go hot. Inside a cute social media interface, there's a post of a nude red-haired lady, covered only in strategically-placed chocolate. The caption is a recipe for sweets. Instinctively, you scroll down, but below her is mostly text posts like "looking for photographer" or "rigger looking for sub" or similar.
"Um, is this-?"
"It's KinkedIn! A networking site for kinky people. Very professional. You understand."
"I don't think I do, actually."
"It's simple. People on this site will pay a premium for quality photography, because a cameraman lets them focus on what matters and looks more professional. I can get you set up with some leads, you go there and take the pictures, and then you get paid! How's that sound?"
[[Awful->MerryBeaMove][$awful to true]]
[[Great!->MerryBeaMove][$great to true]]
[[What?->MerryBeaMove]]
<</if>><<giveitem "Old Camera" false>>\
Before you can react, Merry's already slung the camera around your neck. You get the impression she doesn't plan on taking 'no' for an answer.
<<if $awful>>\
"Merry, I'm really not sure, I don't have any experience—"
<<elseif $great>>\
"Merry, this all sounds lovely, but—"
<<else>>\
"Merry, I don't even understand half of what you just—"
<</if>>\
"Look, there's one thing you learn as you get older, and that's that nobody ever has any clue what they're doing. All we can do is try. You'll do fine. And if you don't, then you'll do fine next time, or we can find something else. The important part is to not count yourself out before the fight's even begun."
"Don't get all philosophical on me. You know I'm just going to ruin everything again."
"Sweets, it's photography. What are they going to do, sue you because you took a bad photo? It's not like you're going to be tied up too."
You inhale sharply, then exhale. "That's, um, not the problem."
"Well, camera's yours now." She swipes her phone back off the counter and begins to scroll. "<span class='status-text'>Éclair</span> of the <span class='status-text'>Sundance Patisserie</span> is probably looking for work. Same with <span class='status-text'>Scarlett</span>, probably at the <span class='status-text'>Strip Parlor</span> and <span class='status-text'>Maple</span> in her <span class='status-text'>shibari dojo</span>." She shrugs, and turns her back to you again, continuing her work lifting boards.
"What you do with that is up to you."
<<link "Go outside">><<run Engine.play("MerryTransition", true)>><</link>>
[[Talk to Merry more->MerryBeaKinkedIn2]]"I appreciate it," you say. "But I'm more worried about that app you showed me. If I'm going to do this, shouldn't I have an account or something? Can I just go up to people?"
Shock flashes over Merry's face. She gives a small laugh. "That's the catch. Because of the type of platform KinkedIn is, in the old days, it had a lot of issues with creepy guys and catfishes. That's why you need to verify yourself by taking pictures with three incumbent members before you can get a full profile."
"Wow, exclusive." You take a moment to consider the situation. "Guess that's why you suggested three people?"
"Exactly," she nods. "I'll send them a message. Let them know you're coming. You just head on out there and get to know them. Anything else?"
<<link "Nothing">><<run Engine.play("MerryTransition", true)>><</link>>
[[Take a photo with Merry->MerryAskPhoto]]You tap your lip. "Say, are you a member?"
"For quite a while now, yes."
"So...then could I..."
Merry wags her finger. "Clever girl, but no dice. I'm not doing this just to assign you a chore, you know. It's also to teach you what kind of people you'll find on KinkedIn. Tell you what: if you really don't get along with one of 'em, come back and I'll give you that photo."
[[Insist->MerryAskPhoto2]]
<<link "Nod in agreement">><<run Engine.play("MerryTransition", true)>><</link>>You pout, then smirk. Your face gets up against hers, close enough to feel her breath on your skin. Hands clutching her white velvet jacket, you press your forehead to hers. Merry flinches back. A blush coats her cheeks.
Slowly, you press her against the counter. You try to think of something sexy to say while you fumble with her jacket, but nothing's really coming to you and so you simply stare at her as if you were mugging her for lunch money. Merry's lips curl up into a smile. Then yours do, and then she breaks out into a laughing fit, and suddenly you're one that's embarrassed.
"And you were doing so well," Merry wheezes. "Someone's gotten my bra off by pushing me against the counter before. After hours, of course."
"Um, so what I was going to ask," you say, trying to hide your face. "Can I have the photo now?"
"Were you trying to seduce me into getting the photo?" She snorts. "I guess if you're that eager, I don't mind. Here, this button. Set the timer, put your arm around my shoulder, and..."
[[Snap!->MerryPhoto]]<<if not $photosgotten>><<set $photosgotten to 0>><</if>>\
<<set $photosgotten++>>\
<<giveitem "Merry's Photo" "You got Merry's photo!">> You've gotten <span class="status-text">$photosgotten/3 photos</span>. Only <span class="status-text"><<print 3 - $photosgotten>></span> photos left!
<<link "Go outside">><<run Engine.play("MerryTransition", true)>><</link>>The fridge always looks empty when you're broke.
All the money from your last job as a bouncer had lasted an admirable time, over two months, but you'd had no luck with a new one. The cool white interior of the fridge seems to stare back at you, taunting you with its emptiness.
What should you try to get back at it?
[[A security guard job!->NotGuard]]
[[A job at the library!->NotLibrarian]]
[[A job at a strip club!->NotStripper]]
[[A job as a cashier!->Cashier]]Nope, can't do that. You'd already tried five different companies after you were fired the last time. The latest letter had read something like "excessive force" and "poor discipline", but it was obvious they just didn't want female guards.<<set $guardseen to true>>
<<if not $librarianseen>>\
[[A job at the library!->NotLibrarian]]
<</if>>\
<<if not $stripperseen>>\
[[A job at a strip club!->NotStripper]]
<</if>>\
[[A job as a cashier!->Cashier]]<<if visited("NotGuard") or visited("NotStripper")>>\
Also no. It'd seemed pretty easy at first, just sit at a desk and hand books to people, but then they started to badger you about working with kids and organizing programs for them. Soon after, you discovered that kids were utterly incomprehensible, and decided never to work with them ever again.
You didn't get fired, you quit. Important distinction.
<<else>>\
Nope, can't do that. It'd seemed pretty easy at first, just sit at a desk and hand books to people, but then they started to badger you about working with kids and organizing programs for them. Soon after, you discovered that kids were utterly incomprehensible, and decided never to work with them ever again.
You didn't get fired, you quit. Important distinction.
<</if>>\
<<set $librarianseen to true>>\
<<if not $guardseen>>\
[[A security guard job!->NotGuard]]
<</if>>\
<<if not $stripperseen>>\
[[A job at a strip club!->NotStripper]]
<</if>>\
[[A job as a cashier!->Cashier]]Honestly, that sounded fun. You can picture yourself up on a small round stage with a pole, a dozen eyes trained on your figure. You're wearing only some skimpy lingerie and a pair of heels. Smooth jazz fills your ears over the sound of the crowd clamoring for you to take your tits out. From their hungry gazes, you can tell that all you are to them is entertainment, a hot piece of flesh to consume. It feels amazing. So you stop, reach behind you, and watch your white velvet push-up bra glide slowly down your chest.
Hours pass. You're on the same stage, naked, exhausted, sweaty. Heavy breaths course through your lungs, coerced by the humid atmosphere. The intro to a song you've heard four times now comes on through the speakers. Just then, the crowd starts to clear out, finally, aside from one hot girl who invites you to come down from the stage.
Next thing you know, your hands are cuffed on your back and you're blindfolded, sprawled out on a bed in a back room somewhere. You wince in both pleasure and pain as a lone finger teases your hypersensitive clit. Those fingers have already made you come several times, yet they seem nowhere near satisfied. She takes you on her lap. Your brain is too scrambled and horny to notice anything other than that she, like you, has stripped naked. Her hips stradle yours, her bare breasts push into your back, and then...well, and then...
You suddenly snap out of your daydream. Wait, what were you just thinking about?
<<set $stripperseen to true>>\
<<if not $guardseen>>\
[[A security guard job!->NotGuard]]
<</if>>\
<<if not $librarianseen>>\
[[A job at the library!->NotLibrarian]]
<</if>>\
[[A job as a cashier!->Cashier]]
[[Tending to your "needs"->BeaJackIt]]Cashier? Now there was an idea. Still a boring desk job, but at least there was no way you could mess that one up. Just sit at a desk and scan items, that's it. As long as you could eat off it, it'd do.
[[Head into town->TutorialStart]]Ah, fuck. It's no good. You're way too horny to think straight. Best get that cleared up before you continue your brainstorming session.
Your apartment isn't much more than a bed with a kitchen in front of it and a closet to the side, so you don't have to walk far. You make sure the door is locked and the windows are closed. Then you strip everything off and let yourself fall on your back. As you put one hand on your right breast and the other on your throbbing wet slit, you're almost hesitant to start; the anticipation might feel even better than the act itself. Then you grope yourself once and get lost in a haze of pleasure.
Twenty minutes later, you bring yourself to a wonderful orgasm, a real one this time. But strangely, you feel even hornier than you had been.
[[Go further->BeaJackIt2]]
[[Put your clothes back on->BeaRecover]]You don't own many toys, but the ones that you did had become your trusty partners. Take these two pink rings for around your nipples, for example, that vibrate intensely enough to make you feel like you could cum from just your chest alone. $50 at Lá Place. A premium blindfold and harness ball combo. $80, on sale. Remote egg vibrator. Free after spending two hours in the shop looking pathetic. You spread your options out over your bed and then decide to just put all of them on.
The pleasure overwhelms you the moment you hit the remote. You jerk so hard and so involuntarily to the right that you hear both remotes clatter to the floor beside you. You try to remove your blindfold to go look for them, but you'd put it on before your harness gag, and now it's tightly stuck in place under the strap that goes over your head. No way you have the finesse to remove it like this.
After three minutes of groping around on the floor, you finally find one of the remotes and manage to turn it off, after which the rest gets much easier. You breathe a sigh of relief when you've managed to get all of your partners off and gathered on your bed again.
But you're still not satisfied.
Forty minutes later, the toys run out of battery right after your third orgasm. You're in too much bliss to want to stand up, and you're not even sure you have replacement batteries in the first place. Before long, you're fast asleep.
[[Sweet dreams->BeaWakeUp]]A knock at the door wakes you up. You've no idea how long it's been, but it's enough for you to feel too groggy to stand. After a moment, you manage to sit up on the side of your bed.
"Bea?" It's your landlady, you recognize. "Beatrix, are you in there?"
You squeal in surprise as you notice you're still naked and wearing your toys. There's no way you can show yourself to her like this!
"I-I'm in the middle of something," you call back. "Can it wait?"
"I just wanted to confirm with you about rent this month," she says. It's the most relieving and most exhausting thing you've ever heard.
"Yes, I'll have it in four days, like I said."
"Alright. I hope you're telling the truth this time." She paces away.
You stand up, breathing a sigh of relief. Best get on that job.
<<if not $guardseen>>\
[[A security guard job!->NotGuard]]
<</if>>\
<<if not $librarianseen>>\
[[A job at the library!->NotLibrarian]]
<</if>>\
[[A job as a cashier!->Cashier]]No, this is no time for hedonism. You stand up and slip back into the pile of clothes you nonchalantly threw down. Time to look into this.
<<if not $guardseen>>\
[[A security guard job!->NotGuard]]
<</if>>\
<<if not $librarianseen>>\
[[A job at the library!->NotLibrarian]]
<</if>>\
[[A job as a cashier!->Cashier]]<<unset $guardseen>>\
<<unset $librarianseen>>\
<<unset $stripperseen>>\
There's no shortage of grocery store chains that need more part-timers. Some of them are notably hesitant to hire a 24-year-old, but nonetheless you get a hit before long. Three days later you're behind a cash register at a smaller chain, MasterMart, around the corner at the end of East-Relycsen.
It's a Thursday morning. You have an 8-hour shift today. How will you treat the customers?
[[Be polite and kind to all of them!->TutorialExhaustSelf]]
[[Just try to get through the day->TutorialPreserveSanity]]You do your best to greet each customer with a smile, chat with them, ask them about their day if they look down. Some of them appreciate it. Most of them brush you off. A surprising amount of them get mad at you for it. Still, you keep it up, day after day, as it is the right thing to do. That's what you hope, anyway.
Weeks pass. A month passes. You make some money, but not enough to matter. Most of it is gone on rent and food before long. You tell yourself that it's not so bad, that you have friends, a roof over your head and food to eat, but deep down you hunger for more.
<<adjuststat "composure" -5 "Like water to a stone, it grinds you down over a time.">>
You're home for the day. What would you like to do?
[[Take a nice bath->TutorialBath]]
[[Ping your friends to play->TutorialJackbox]]
<span class="help-tip"> Beatrix's <span class="composure">Composure</span> just went down due to the endless grind of customer service. To check how much, review your stats with the <<config "labels.buttons.status">> button. Try to keep yourself well-rested!</span>You do your best to keep your head down, fade into the background, make sure nobody remembers you were there. This was a job. Labor for money. You don't have to do anything that's not in your contract. Day after day, you scan items and handle customers efficiently, and make sure you leave at exactly five sharp.
Weeks pass. A month passes. You make some money, but not enough to matter. Most of it is gone on rent and food before long. You tell yourself that it's not so bad, that you have friends, a roof over your head and food to eat, but deep down you hunger for more.
<<adjuststat "composure" -5 "Like water to a stone, it grinds you down over a time.">>
You're home for the day. What would you like to do?
[[Take a nice bath->TutorialBath]]
[[Ping your friends to play->TutorialJackbox]]
<span class="help-tip"> Beatrix's <span class="composure">Composure</span> just went down due to the endless grind of customer service. To check how much, review your stats with the <<config "labels.buttons.status">> button. Try to keep yourself well-rested!</span>You turn the hot water on as far as it'll go, and run a bath that submerges you up to your upper arms. Your neck leans back against the porcelain of the bathtub and you close your eyes. The heat melts your worries away, until there is only the here and now, the brush of water on your skin and the steam you inhale with each breath.
<<adjuststat "composure" 5 "And that while hot water isn't even that expensive!">> <span class="composure"></span>
[[The next day at work...->TutorialRegionalManager]]You type up the usual message: "@Game Night, anyone up? idc what we play I just need to take my mind off things". Three people respond, and before long you're playing a prompt-based game where you answer pressing political queries in the worst possible way. The problem, as usual, is that none of you are all that funny, and yet that in itself is often what leads to the best jokes.
<<adjuststat "composure" 5 "Maybe 'Implement Thanos' plan' wasn't the best answer to 'How do we solve world hunger?'...">>
[[The next day at work...->TutorialRegionalManager]]It's twelve at noon. A coworker, Luna Tacte, comes over to your register with an urgent look on her face.
"The regional manager's almost here," she says. "About five minutes. Remember, she'll only be an hour, so just try not to make a mess of things while she's here." You roll your eyes, then give a curt nod.
Five minutes later she's there. A tall lady, somewhere in her 40s. She checks out the registers, going line by line, until she comes to you at #7. Her heels clack against the marble floor, then you feel her velvet coat brush your skin. Wordlessly, she pushes you out of her way to look at your desk computer.
<<if visited("TutorialExhaustSelf")>>
Thirty seconds later, she looks behind her and at you. "Store target is two minutes per transaction, two minutes thirty at most. You spend more than three minutes. How come?"
"Well, it's more fun for both me and the customer that way."
"You're here to sell and move the line, not make friends." She scoffs. "Really, the problem is people who see this as a game. Less time chatting, more time doing your actual job, got it?"
<<else>>
Thirty seconds later, she looks behind her and at you. "Your sign up rate is only 1%. We're targetting about 3%. What's the problem?"
"Well, they say no when I ask."
"Obviously. Everyone says no at first. So you ask again. Keep asking until they walk away or sign up." She scoffs. "Do you think this job is just showing up here, scanning some products and then going home after a few hours? Any halfwit could do that. We're paying you to be efficient and sign people up. Snap to it."
<</if>>\
<<checklink "Stay professional" "composure" "TutorialLuna" "TutorialEnd" 15>><span class="stat-gain">Success!</span>
Your roll: $lastTotal
Required roll: $lastDC
<hr>\
"Yeah, I will," you manage to push out. You do your best to keep the edge out of your voice.
"Good." She leaves you to head over to the next register. Register #8 belongs to your coworker, Luna. You stand at the edge of your register and watch her push past Luna to check the computer, but this time, the manager's expression grows even sterner.
"Your till is short. Three times this month. And here, your break was seven minutes too long, then nine minutes, then eight. You've pretty much never taken a break that doesn't go over time. Why?"
"Well, the system—"
"Yeah yeah, I'm sure. Take care of it or you're fired. I don't need people that can't even count."
Something hot and sharp coils in your chest.
<<checklink "Stay professional" "composure" "huh" "TutorialEnd" 999>>
<span class="help-tip"> Sometimes, you might run into a check that you can't succeed at yet. You'll need to find ways to raise your maximum <span class="composure">Composure</span> or <span class="energy">Energy</span> first. That said, this one might be a lost cause...</span><span class="stat-loss">Failure...</span>
Your roll: $lastTotal
Required roll: $lastDC
<hr>\
Your fist connects with her face.
Fear clouds her eyes as one of the manager's hands rushes to her nose. How does this happen every time? Someone walks all over someone, you feel rage, you punch them, but instead of resolving it it gets even worse. It never feels as good as it should. And yet you never learn. Oh well. You can hardly take back the punch.
Before she can call security, you grab your things and walk out the door. They don't need to escort you out. If she wants to arrest you, she already has your address. If she wants to blacklist you, she hardly needs to wait for you to be present. There was no need for you to be there anymore.
Another job down.
[[Pick yourself back up->MerryBeaMope]]Hey, you shouldn't be here! Stop cheating and get to the actual story!
[[But props for figuring out to mod, honestly->MerryBeaMope]]You don't have to travel far to find the Sundance. Two minutes into your walk down Steam Street, you spot a set of stairs leading down into a hole-in-the-wall shop. All of the walls, including the door, are bright yellow with a flower motif, and there's an emblem of an orange sun painted on the front one. 'Sundance Patisserie,' black letters under it spell, 'Sweets from the stars'.
Stone stairs clack under your boots. The door is unlocked. <<if $photosgotten is 0 or $photosgotten is 1>>You hesitate momentarily, a slight grimace coming over your face, but you take a deep breath and tell yourself it'll be alright. You're sure they'll be nice and you won't lose your cool again. You won't lose another job before it's even started. It simply won't happen.<</if>>
You slide the door open.
[[Enter->EnterSundance]]"YOU MELTED THEM AGAIN?"
You step onto a round carpet. The shop is surprisingly small: there's your round customer section, a glass-front counter with all sorts of delicacies accompanied by appropriate price tags, a door behind it and that's all. Very peaceful. Almost like Merry's Place. You find it hard to appreciate the quaint minimalism over the booming woman's voice coming from behind the door, though.
"I'm--"
"You know why it's called 'pain au chocolat'? Because 'pain' is French for 'bread', not because you're supposed to torture the food. The laminate is screaming for mercy! And what do you do? Turn up the heat again as if you're running some deranged underground experiment. Great, now we've got a batch of overbaked chocolate bread with a side of unethical live experiments. Throw these out and come over--"
A bell rings inside the kitchen. You look under you, and see that you've stepped on a small switch embedded in the carpet underfoot. Moments later, the door swings open and a woman with tiger ears emerges
"Welcome!" You recognize her voice as the same one that was yelling. "Can I help you to anything?"
[[Explain about Merry->SundanceBack]]
[[Ask to order->EclairOrder]]
[[Ask about the switch->EclairSwitch]]"Um, yes." You lean down to glance into the glass counter. There's eclairs, mille-feuille, croissants and other foundational items you'd expect from a patisserie, but what really catches your eye is the bottom row. An assortment of expressive, almost impossible cakes is on display. One depicts a lightning strike, another a dolphin, then another a wave with a dolphin in it. Then you glance at the price tags.
"I'd like to order some macarons."
"Oh, do you?" Traces of a smug smile play on the edges of her lips. "That'll be 30 Funds."
You reach into your skirt pocket for your wallet, then realize you'd sold it to buy bread a few weeks ago. It's too embarrassing to let her know you're broke. Fortunately, you remember you rehearsed an explanation for this.
"Ah, it seems I, didn't, take the right skirt with me today. Can I come back later?"
"Incidentally, did you forget your shirt and leggings too?"
You look down, suddenly self-conscious, then find yourself unable to look back up to face her. She just didn't get it. The outfit was comfortable!"Isn't there a better way to know when new customers come in?" You press a finger to your cheek. "You know, like a bell above the door or something?"
"We used to have that," she explains, crossing her arms. "But the thing is, tons of people come here just to window shop. I can't have that break the focus of me and my chefs. They struggle enough as-is. That's why the bell only goes off if you step a certain ways into our shop."
You wonder when you got that far into the shop, then it hits you: her voice was only barely audible from the entrance, so you gradually inched closer to hear it better. Catching your contemplative gaze, the woman cracks a small smile.
"Perhaps you'd be interested in getting yelled at as well?"
You blush. "Eh? No! Of course not! Look, I'm--you--nobody here needs to get yelled at, alright?"
She closes her eyes, holds a hand in front of her mouth and laughs softly. Like this, you'd almost think she's cute.<<improve "Éclair" 1 false>>
[[Explain about Merry->SundanceBack]]
[[Ask to order->EclairOrder]]