/% Silently set default names %/
<<silently>>
<<set $mcName to "Dave">>
<<set $gfName to "Kate">>
<</silently>>
<img src="images/logo.jpg" alt="From Jeans to Lace">
<p class="story-description">
Life threw you a curveball – job loss, then eviction. Thankfully, your supportive girlfriend offered you her spare room. As you navigate this dependent situation and rely on her kindness, you find yourself exploring unexpected changes, guided by her "encouragement."
</p>
<hr>
<div class="name-inputs">
<label for="mcNameInput">Your Name:</label>
<<textbox "$mcName" $mcName "mcNameInput">>
<br>
<label for="gfNameInput">Girlfriend's Name:</label>
<<textbox "$gfName" $gfName "gfNameInput">>
</div>
<br>
<div class="disclaimer">
<strong>Disclaimer:</strong> This story explores themes of transformation, shifting relationship dynamics, dependency, BDSM elements (including chastity and power exchange), and non-monogamy. Please ensure you are comfortable with these topics before proceeding and you are of legal age in your country to view this material. Player discretion is advised. <comment>/* Disclaimer text directly embedded */</comment>
</div>
<div class="navigation-links">
[[Begin Story->Introduction]] <comment>/* Link to the passage containing your introduction text */</comment>
| <comment>/* Separator */</comment>
<a href="https://www.google.com/search?udm=2&q=Cute Puppies" target="_blank">Exit</a> <comment>/* External link to Google search, opens in new tab */</comment>
</div>
<style> <comment>/* CSS for this passage */</comment>
/* Center the Logo Image */
img[src="images/logo.jpg"] {
display: block;
margin-left: auto;
margin-right: auto;
margin-bottom: 1em;
max-width: 100%; /* Responsive */
width: 300px; /* Set desired base width (optional, overrides inline) */
height: auto; /* Maintain aspect ratio */
}
/* Other Styles from your original block */
.story-title { text-align: center; margin-bottom: 1em; } /* Note: You don't have an element with class="story-title" currently */
.story-description { font-style: italic; margin-bottom: 1.5em; }
.name-inputs label { display: inline-block; width: 130px; /* Adjust width as needed */ text-align: right; margin-right: 10px; }
.name-inputs input[type="text"] { width: 150px; /* Adjust width as needed */ }
.disclaimer {
margin-top: 1.5em;
padding: 10px;
border: 1px solid #ccc;
background-color: #f9f9f9;
font-size: 0.9em;
color: #555;
}
.navigation-links { text-align: center; margin-top: 1.5em; font-weight: bold; }
.navigation-links a { text-decoration: none; } /* Optional: remove underline from puppy link */
</style><div class="room-gf-presence">
<img src="images/intro/coffee.png" alt="coffee">
</div>
$mcName stared into his lukewarm coffee, the unfamiliar pattern of $gfName’s kitchen counter a stark reminder that this wasn’t his space, not really. Losing his job had been a gut punch, but losing his apartment less than a month later when the landlord decided to sell felt like a knockout blow.
<br><br>
<div class="room-gf-presence">
<img src="images/intro/gf.png" alt="$gfName">
</div>
$gfName, ever the lifeline, hadn't hesitated to offer her spare room – a proposition complicated slightly by her parents' traditional views. They didn't approve of the live-in boyfriend situation, so officially, $mcName occupied the somewhat empty spare bedroom, still basic and lacking any personal touches. It was a space mostly for show, a plausible den for him should her parents drop by unannounced. In reality, most nights found him seeking comfort and closeness in $gfName's actual bedroom, though the spare room remained his designated territory, a constant, physical symbol of his reliance on her careful management of her family and her life.
<br><div class="room-gf-presence">
<img src="images/intro/gfhug.png" alt="$gfName hug">
</div><br>
Despite the awkwardness of his situation and the slight deception, $mcName knew he was incredibly lucky. He loved $gfName more than words could say – her easy laugh, her sharp mind, the way she seemed to understand him even when he didn't understand himself. Finding someone like her had always felt like a fluke. Growing up, he'd been perpetually tongue-tied around girls, awkward and overlooked, never quite knowing how to bridge the gap or capture their interest. $gfName had somehow seen past all that, choosing him, supporting him, and now, literally giving him shelter, even if it required navigating familial expectations. The depth of his gratitude was immense, tangled up with a love that felt both secure and, given his current predicament, terrifyingly precarious.
<br><br>
The apartment felt different with him in it, quieter somehow, yet also filled with subtle markers of $gfName’s world he hadn't paid much attention to before – the array of scented lotions by the sink, the surprisingly soft texture of the throw blankets she favored, the way she moved with a quiet confidence he envied. This was all typical $gfName, but lingering underneath was a thread of something else, a quiet anticipation that his integration into her life, and maybe into himself, would come with strings attached.
<br><br>
[[Time to go to my room...->Your Bedroom]]<<if tags().includes('footer') and $gfLocation neq "Your Bedroom">>
<div class="nav-footer">
<div class="nav-grid-container">
<div class="nav-grid-item">
<a data-passage="Your Bedroom">
<img src="images/nav_mc_bedroom.png" alt="Your Bedroom Icon">
Your Bedroom
</a>
</div>
<div class="nav-grid-item">
<a data-passage="$gfName Bedroom">
<img src="images/nav_gf_bedroom.png" alt="Her Bedroom Icon">
<<print $gfName>>'s Bedroom
</a>
</div>
<div class="nav-grid-item">
<a data-passage="Kitchen">
<img src="images/nav_kitchen.png" alt="Kitchen Icon">
Kitchen
</a>
</div>
<div class="nav-grid-item">
<a data-passage="Living Room">
<img src="images/nav_living_room.png" alt="Living Room Icon">
Living Room
</a>
</div>
<div class="nav-grid-item">
<a data-passage="Bathroom">
<img src="images/nav_bathroom.png" alt="Bathroom Icon">
Bathroom
</a>
</div>
<div class="nav-grid-item">
<a data-passage="Exercise Room">
<img src="images/nav_exercise.png" alt="Workout Room Icon">
Workout Room
</a>
</div>
</div>
</div>
<</if>><div class="room-container">
<div class="room-header">
<h2>Your Bedroom</h2>
</div>
<div class="room-description">
This is the basic, somewhat empty spare bedroom $gfName lets you use. It feels temporary and impersonal compared to the rest of the apartment.
</div>
<div class="room-gf-presence">
<<if $gfLocation is "Your Bedroom">>
<<if $arousal lt 50>>
<<modifyArousal 2>>
<<run UI.update("StoryCaption")>>
<</if>>
<<set _gfimg to random(1, 4)>>
<<set _gfimg to "images/bedroom/gf/gf" + _gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName is here">
$gfName looks at you like she wants to talk. I should see what she has to say <br>
[[Talk to her ->GFtalkRouter]]
<<else>>
<img src="images/nav_mc_bedroom.png" alt="Room Image"><br>
''$gfName isn't here right now.''
<</if>>
</div>
<div class="story-text-area">
You glance around the room. Your few belongings sit tidily on the dresser. The desk remains mostly clear, a testament to your lack of work. It serves its purpose as a place to sleep and keep up appearances for her parents, but little else.
<br>
<<if $chastityLocked is true>>Your keys rest securely with $gfName.<</if>>
</div>
<<set $currentRoom = passage()>>
<div class="room-actions">
<<if $gfLocation is "Your Bedroom">>
<<else>>
<<if $day gt 1 or $unpacked is true>>
<li>[[Check closet->YourBedroomCloset]]</li><br>
<li>[[Check dresser->YourBedroomDresser]]</li><br>
<</if>>
<<if $cleanliness is "You stink!">>
You cant lay on the bed smelling like that!
<<elseif $tasks.some(t => t.key === "talkGfSleep")>>
I should find $gfName before laying down
<<elseif $arousal > 89>>
I am too horny to sleep
<<else>>
<li>[[Lie on the bed->YourBedroomBed]]</li>
<</if>>
<<if $unpacked is false and $talkcount is 1 and $day is 1>><br><br>
<li>[[I should unpack my bags->ActivityRouter]]</li>
<</if>>
<br><br> <br><br>
<<if $tasks.some(t => t.key === "cleanOwnRoom")>>
<li>
<<link "Clean Your Room" "task-bedroomclean">>
<</link>>
</li><br>
<</if>>
<<set _moisturizerTask = $tasks.find(t => t.key === "moisturizer")>>
<<if _moisturizerTask and $cleanliness is "Spotless and Fresh!">>
<li>
<<link "Use Moisturizer" "task-moisturizer">>
<</link>>
</li><br>
<<elseif _moisturizerTask>>
<br> I need to shower before I use the moisturizer<br>
<</if>>
<<if $owncondom is false and $day gt 2>>
<li>
<<link "Buy a condom" "task-condombuy">>
<</link>>
</li><br>
<</if>>
<<if $shopevent is true>>
<<link "Call $gfName into your room for shopping" "ActivityRouter">>
<</link>>
<br>
<</if>>
<<if $day gte 3>>
<<if ($day is 3 and $talkcount gt 2) or ($day is 5 and $talkcount is 4) or $day is 7>>
After an invite like that, why would I mess with a magazine?
<<elseif $arousal > 89>>
<li>[[Play with the magazine...->PlayWithMagazine]]</li><br>
<<else>>
I am not desperate enough to read this stuff...
<</if>>
<</if>>
<</if>>
</div>
<div class="room-container">
<div class="room-header">
<h2><<print $gfName>>'s Bedroom</h2>
</div>
<div class="room-description">
$gfName's bedroom. It looks comfortable and reflects her personality.
</div>
<div class="room-gf-presence">
<<if $gfLocation is "$gfName Bedroom">>
<<if $arousal lt 50>>
<<modifyArousal 2>>
<<run UI.update("StoryCaption")>>
<</if>>
<<set _gfimg to random(1, 7)>>
<<set _gfimg to "images/herroom/gf/gf" + _gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName is here">
<<include GFCheckAndTalkPrompt>>
<<else>><br>
<img src="images/nav_gf_bedroom.png" alt="Room Image">
<br>
''$gfName isn't here right now.''
<</if>> </div>
<br><br>
<div class="story-text-area">
$gfName's queen-sized bed dominates the space, adorned with a soft, inviting duvet and a scattering of throw pillows in calming colors. A sleek vanity table near the window holds a carefully arranged collection of lotions, perfumes, and makeup brushes, reflecting the light. The air carries a faint, pleasant mix of her signature vanilla scent and clean laundry. Unlike your sparse room, this space feels deeply lived-in and unequivocally hers – curated, comfortable, and confidently occupied.
<br>
<<if $chastityLocked is true>>Your keys rest securely with $gfName.<</if>>
</div>
<<set $currentRoom = passage()>>
<div class="room-actions">
<li>[[Check Dresser->HerBedroomDresser]]</li><br>
<<if $cleanliness neq "You stink!">>
<li>[[Lay Down->HerBedroomBed]]</li>
<<else>>
How do you think $gfName would react laying in her bed smelling like this?!
<</if>>
</div>
</div> <comment>/* End of room-container */</comment><div class="room-container">
<div class="room-header">
<h2>Kitchen</h2>
</div>
<div class="room-description">
The apartment's kitchen. It's clean, modern, and clearly well-maintained by $gfName.
</div>
<br>
<div class="room-gf-presence">
<<if $gfLocation is "Kitchen">>
<<if $arousal lt 50>>
<<modifyArousal 2>>
<<run UI.update("StoryCaption")>>
<</if>>
<<set _gfimg to random(1, 4)>>
<<set _gfimg to "images/kitchen/gf/gf" + _gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName is here">
<<include GFCheckAndTalkPrompt>>
<<else>><br>
<img src="images/nav_kitchen.png" alt="Room Image">
<br>
''$gfName isn't here right now.''
<</if>> </div>
<br><br>
<div class="story-text-area">
Stainless steel appliances gleam under the recessed lighting. The countertops are spotless granite, holding only essential items like a high-end coffee maker, a knife block, and a neatly arranged fruit bowl. Everything feels efficient and orderly, perhaps more so than you're used to. Cabinet doors are sleek and handleless. There's a small, round table with two chairs tucked into a breakfast nook by the window, overlooking the street below. The air smells faintly of lemon polish and maybe brewing coffee.
<br>
<<if $chastityLocked is true>>A subtle awareness, the lack of keys in your pocket, reminds you they rest securely with $gfName.<</if>>
</div>
<<set $currentRoom = passage()>>
<div class="room-actions">
<li>[[Look out the window->Window]]</li>
<br><br> <br> <br>
<<if $tasks.some(t => t.key === "cleanKitchen")>>
<li>
<<link "Clean The Kitchen" "task-cleankitchen">>
<</link>>
</li>
<</if>>
</div>
</div> <comment>/* End of room-container */</comment><div class="room-container">
<<set $currentRoom = passage()>>
<div class="room-header">
<h2>Living Room</h2>
</div>
<div class="room-description">
The main living area of the apartment. It feels inviting and thoughtfully decorated with $gfName's touch.
</div>
<div class="room-gf-presence">
<<if $gfLocation is "Living Room">>
<<if $arousal lt 50>>
<<modifyArousal 2>>
<<run UI.update("StoryCaption")>>
<</if>>
<<set _gfimg to random(1, 7)>>
<<set _gfimg to "images/livingroom/gf/gf" + _gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName is here">
<<include GFCheckAndTalkPrompt>>
<<else>><br>
<img src="images/nav_living_room.png" alt="Room Image">
<br>
''$gfName isn't here right now.''
<</if>> </div>
<br><br>
<div class="story-text-area">
A deep, comfortable sofa covered in a soft, dove-grey fabric dominates one wall, scattered with plush throw pillows in shades of blush pink and cream. A luxuriously soft cashmere throw blanket is artfully draped over one arm. It faces a minimalist entertainment center holding the TV, flanked by shelves displaying curated decorative objects – scented candles in glass jars, a small ceramic vase with delicate dried flowers, and a few framed photos. Warm light glows from lamps with soft fabric shades. Instead of stark abstract pieces, the walls feature gentle watercolor prints. A thick, high-pile rug softens the floor, making the space feel cozy and intimate. The air holds a faint, sweet scent, perhaps vanilla or rose from one of the candles. It's undeniably $gfName's space – comfortable, aesthetically pleasing, and welcoming with a distinctly feminine elegance.
<br>
<<if $chastityLocked is true>>The subtle weight, or lack thereof, in your pocket serves as a quiet reminder that your keys are safely kept by $gfName.<</if>>
</div>
<div class="room-actions">
<li>[[Sit on the couch->LivingRoomCouch]]</li><br>
<li>[[Turn on the TV->LivingRoomTV]]</li><br>
<li>[[Look out the window->Window]]</li>
<br><br><br><br>
<<if $tasks.some(t => t.key === "cleanLiving")>>
<li>
<<link "Clean the Living Room" "task-cleanlivingroom">>
/* Action: Link to the cleaning task passage */
<</link>>
</li>
<</if>>
</div>
</div> <comment>/* End of room-container */</comment><div class="room-container">
<<set $currentRoom = passage()>>
<div class="room-header">
<h2>Bathroom</h2>
</div>
<div class="room-description">
The apartment bathroom. I sometimes wonder what would happen if I walk in on her, or she walks in on me. The thought of that... its appealing.
</div>
<br>
<div class="room-gf-presence">
<<if $gfLocation is "Bathroom">>
<<if $arousal lt 80>>
<<modifyArousal 2>>
<<run UI.update("StoryCaption")>>
<</if>>
<<set _gfimg to random(1, 9)>>
<<set _gfimg to "images/bathroom/gf/gf" + _gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName is here">
<<include GFCheckAndTalkPrompt>>
<<else>><br>
<img src="images/nav_bathroom.png" alt="Room Image">
<br>
''$gfName isn't here right now.''
<</if>> </div>
<br><br>
<div class="story-text-area">
The bathroom is clean and brightly lit, but it feels unmistakably like $gfName's domain. $mcName's own sparse toiletries – a toothbrush, maybe a razor – look almost comically out of place on the edge of the counter, dwarfed by the sheer multitude of her things. An array of lotions, creams, tubes, and bottles jostle for space near the sink, alongside makeup brushes standing upright in a holder and palettes neatly stacked.
The shower ledge tells a similar story, lined with colorful bottles of shampoos, conditioners, and fragrant body washes – far more than seem strictly necessary, a testament to her routine or maybe just her enjoyment of different scents. Even under the sink, glimpsed when he reaches for spare toilet paper, neatly arranged boxes and packages contain items clearly meant only for her personal cycles and hygiene. It's not messy, just densely occupied territory, underscored by the faint, lingering scent of something floral or sweet. It's a distinctly feminine space, reinforcing that he's living in her world now.
<br>
<<if $chastityLocked is true>>I am not sure how clean I can get with $gfName holding the key to my chastity cage.<</if>>
</div>
<div class="room-actions">
<li>[[Look in the mirror->BathroomMirror]]</li><br>
<<if $day is 1 and $introtalk is false or $tasks.some(t => t.key === "unpack")>>
I should do something else before taking a shower
<<elseif $tasks.some(t => t.key === "shower")>>
<li>[[Take a shower->BathroomShower]]</li>
<<else>> I already took a shower today.
<</if>>
<br><br><br><br>
<<if $tasks.some(t => t.key === "cleanBathroom")>>
<li>
<<link "Clean the Bathroom" "task-cleanbathroom">>
<</link>>
</li>
<</if>>
</div>
</div><div class="room-container">
<<set $currentRoom = passage()>>
<div class="room-header">
<h2>Exercise Room</h2>
</div>
<div class="room-description">
A dedicated space for workouts. It's compact but well-equipped.
</div>
<br>
<div class="room-gf-presence">
<<if $gfLocation is "Exercise Room">>
<<if $arousal lt 50>>
<<modifyArousal 2>>
<<run UI.update("StoryCaption")>>
<</if>>
<<set _gfimg to random(1, 7)>>
<<set _gfimg to "images/exerciseroom/gf/gf" + _gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName is here">
<<include GFCheckAndTalkPrompt>>
<<else>><br>
<img src="images/nav_exercise.png" alt="Room Image">
<br>
''$gfName isn't here right now.''
<</if>> </div>
<br><br>
<div class="story-text-area">
This room is clearly $gfName's domain for fitness. A high-quality treadmill sits against one wall, facing a window. Beside it, a sleek stationary bike stands ready. Rolled-up yoga mats in pastel colors are stacked neatly in a corner next to a set of resistance bands and a stability ball. There's also a rack holding a range of dumbbells, mostly on the lighter side, but with a few heavier options. The air smells clean, perhaps with a faint hint of disinfectant wipes. A mounted speaker suggests music often fills this space during workouts. It's tidy, functional, and reflects a focus on cardio and toning.
<br>
<<if $chastityLocked is true>>Even here, the absence of your keys is a small, constant awareness, a reminder of $gfName's control.<</if>> <comment>/* Added chastity check */</comment>
</div>
<div class="room-actions">
<li>[[Try the treadmill->ExerciseTreadmill]]</li><br>
<li>[[Check the weights->ExerciseWeights]]</li>
<br><br><br><br>
<<if $tasks.some(t => t.key === "cleanWorkout")>>
<li>
<<link "Clean the Workout Room" "task-cleanworkout">>
<</link>>
</li>
<</if>>
</div> </div><comment>/* End of room-container */</comment><<set $sidebarFilter to "Over">>
<<run UI.update("StoryCaption")>>
<div class="wardrobe-container">
<h2>Your Closet</h2>
<div class="currently-wearing-section">
<h3>Currently Wearing (Outer)</h3>
<div class="current-items-grid">
<<displayCurrentItemWidget "tops">>
<<displayCurrentItemWidget "bottoms">>
<<displayCurrentItemWidget "shoes">>
</div>
</div>
<div class="save-outfit-buttons" style="text-align: center; margin-top: 1em;">
<<button "Save Daytime Outerwear">><<saveOutfitPart "daytime" "outer">><</button>>
|
<<button "Save Sleep Outerwear">><<saveOutfitPart "sleep" "outer">><</button>>
<br>
<span id="save-feedback" style="font-style: italic; font-size: 0.9em; color: #aaa;"><<print $saveOutfitFeedback>></span>
</div> <hr>
<div class="available-items-section">
<h3>Available Items</h3>
<div class="clothing-category">
<h4>Tops</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.tops>>
<<if $wornTop !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "tops" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Bottoms</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.bottoms>>
<<if $wornBottoms !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "bottoms" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Dresses</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.dresses>>
<<if $wornTop !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "dresses" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Shoes</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.shoes>>
<<if $wornShoes !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "shoes" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Sleep Tops</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.sleepTop>>
<<if $wornTop !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "sleepTop" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Sleep Bottoms</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.sleepBottom>>
<<if $wornBottoms !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "sleepBottom" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Sleep Sets</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.sleepSet>>
<<if $wornTop !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "sleepSet" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
</div> <hr>
/* --- Closet Exit Check --- */
<<set _isWearingOutfit to false>>
<<if $wornTop !== null>>
<<if getClothing("sleepSet", $wornTop) !== null or getClothing("dresses", $wornTop) !== null>>
<<set _isWearingOutfit to true>>
<</if>>
<</if>>
<<if ($wornTop !== null and $wornBottoms !== null) or _isWearingOutfit>>
[[Leave Closet->Your Bedroom]]
[[Look in your Dresser ->YourBedroomDresser]]
<<else>>
<span class="disabled-exit-warning">You should probably put on a top and bottoms (or a full outfit like a dress or sleep set) before leaving the closet.</span>
<</if>>
/* --- End Closet Exit Check --- */
</div><p>
$mcName let himself fall back onto the bed in the spare room. It was... fine. A bed, a dresser, a lamp. Functional. Not his. He stared up at the ceiling, the generic white paint a stark contrast to the warm, cluttered comfort of his old apartment.
</p>
<p>
<<if $cleanliness is "Spotless and Fresh!" and $day is 1 and $ownedClothing.size is 5>>
<br>
Just as you are about to drift off, you see $gfName standing at your door, wearing extremely sexy lingerie, likely what she was wearing earlier under her clothes; she was clearly planning for intimacy. You give her a blank stare, unable to look away. <br><br>After letting you stare for a moment, $gfName clears her throat.<br>
[[Talk to her ->GFtalkRouter]]
<<elseif $sleeptime is false>>
I am not tired
<br>
<<return>>
<<elseif $wornShoes neq null>>
<br>
I shouldn't wear shoes to sleep.
<br>
<<return>>
<<elseif not setup.isWearingSleepwear()>>
<br>
I dont think I will be very comfortable wearing this to sleep.
<br>
<<return>>
<<elseif $sleeptime is true and $day is 6 and $talkcount is 2>>
<br>
[[Go to sleep->Talk_D6_GF_Evening_Mast]]
<<elseif $sleeptime is true>>
<br>
[[Go to sleep->Sleep]]
<<else>>
<br>
Something went wrong here....<br>
<<return>>
<</if>>
</p>
<div class="room-gf-presence">
<img src="images/herroom/dresser.png" alt="$gfName smiling at the door">
</div>
<<if $gfLocation is "$gfName Bedroom">>
Are you crazy! No way I am doing that with her in the room!<br><br><br><br>
[[Quickly change your mind->$gfName Bedroom]]
<<else>>
$gfName was so nice to allow me to stay with her. I dont think I should be violating her space.<br><br><br><br>
[[Contemplate your choices...->$gfName Bedroom]]
<</if>><div class="room-container">
<div class="story-text-area">
/% Check if the girlfriend is present %/
<<if $gfLocation is "$gfName Bedroom">>
You glance towards the large, inviting bed. It looks incredibly comfortable, covered in that soft duvet and those plush pillows $gfName likes. But with her right here in the room... no, definitely not appropriate. You wouldn't dare just climb into her bed wihtout an invitation.
<<elseif $cleanliness is "You stink!">>
You look at the pristine bed, then think about your current state. There's no way you should be getting near $gfName's clean sheets smelling like this. That would be incredibly disrespectful.
/% Default case: GF not present, player is clean %/
<<else>>
You approach the queen-sized bed. It dominates the room, looking soft and inviting with its plush duvet and array of pillows. It smells faintly of her, that familiar vanilla scent mixed with clean laundry. It looks so comfortable, a stark contrast to the basic bed in your own room.
For a moment, you consider just stretching out, sinking into the mattress... but the thought feels wrong. This is her space, her sanctuary. Climbing into her bed uninvited, even just to rest for a moment, feels like crossing a line, a violation of the trust she's shown you by letting you stay here. It's better to respect her privacy and wait for an invitation.
<</if>>
</div>
<div class="room-actions">
/% Always link back to her bedroom regardless of the condition checked above %/
<<link "Step away from the bed" "$gfName Bedroom">>
/* No state changes needed here */
<</link>>
</div>
</div>/% --- Passage: LivingRoomCouch --- %/
You sink into the deep cushions of the sofa. It's incredibly soft, much more luxurious than anything you've owned. The blush pink and cream pillows feel plush against your back, and the cashmere throw draped over the arm is tempting to pull over yourself, though you resist, not wanting to disturb <<print $gfName>>'s careful arrangement.
<br><br>
The fabric feels smooth under your hand, a stark contrast to the worn denim of your old jeans. You shift slightly, aware of the quiet elegance of the room – the gentle lighting, the faint vanilla scent, the curated decor. It's peaceful, but it underscores how much this is her space, meticulously crafted to her taste. It's a constant, quiet reminder of your current reliance on her generosity.
<br><br>
<<if $chastityLocked is true>>
The subtle pressure of the cage against your skin is another layer to the awareness, a physical reminder of the boundaries and dynamics currently shaping your life here.
<<else>>
You try to relax, letting the quiet comfort seep in, pushing away the anxieties about your future for just a moment.
<</if>>
<br><br>
[[Get up from the couch->Living Room]]<style>
.tv-display {
text-align: center;
margin-top: 1.5em;
margin-bottom: 1.5em;
}
.tv-gif {
display: block;
margin-left: auto;
margin-right: auto;
max-width: 90%; /* Adjust max width as needed */
max-height: 450px; /* Adjust max height as needed */
border: 1px solid #444; /* Optional subtle border */
background-color: #111; /* Optional dark background if GIFs have transparency */
}
</style>
<<if $day is 6 and $gfLocation is "Out" and $arousal lt 30>>
<<set $gfLocation to "Living Room">>
<<run UI.update("StoryCaption")>>
<</if>>
<div class="room-container">
<div class="story-text-area">
You settle onto the plush living room sofa, the familiar weight of the remote control feeling slightly foreign in your hand now. Deciding you could use a distraction, you flick the TV on. The screen immediately bursts to life, bathing the quiet room in flickering light.
//Maybe just zone out for a little while... forget about everything else for a bit.//
You flip through a few channels, eventually landing on something - anything, really - to fill the silence.
</div>
<<set _tvGifNum to random(1, 13)>>
<<set _tvGifPath to "images/activities/tv/tv" + _tvGifNum + ".gif">>
<div class="tv-display">
<img @src="_tvGifPath" alt="Images flickering on the TV screen" class="tv-gif">
</div>
<div class="story-text-area">
The colorful, moving images capture your attention, offering a brief respite. You let your mind drift, focusing on the mindless entertainment flickering before you. It's a small comfort, a moment of normalcy in this strange new routine.
</div>
<div class="room-actions">
<ul>
<li>[[Stop watching TV->Living Room]]</li>
</ul>
</div>
</div> <<include WindowThoughts>><div id="passage-bathroom-mirror">
You step up to the large bathroom mirror, the bright light reflecting off the clean surface. Taking a deep breath, you study your reflection, taking stock of the man looking back at you<br><br><br><br>
<div class="mirror-part-section">
<<if $appearance_face.img>>
<img @src="$appearance_face.img" :alt="$appearance_face.desc" class="mirror-appearance-img">
<</if>>
Your face is <<= $appearance_face.desc >>.
<<if $tasks.some(t => t.key === "shaveFace")>>
<br>
<<link "Shave Face">>
<<set $appearance_face to { desc: "clean shaven", img: "images/appearance/face_clean.png" }>>
<<set $tasks = $tasks.filter(t => t.key !== "shaveFace")>>
<<set $baseScore -= 1>>
<<calculateScore>> /* Recalculate score */
<<run UI.update("StoryCaption")>> /* Update sidebar task list */
<<replace "#passage-bathroom-mirror">><<include "BathroomMirror">><</replace>> /* Refresh */
<</link>>
<</if>>
</div>
<br><br>
<div class="mirror-part-section">
<<if $appearance_pits.img>>
<img @src="$appearance_pits.img" :alt="$appearance_pits.desc" class="mirror-appearance-img">
<</if>>
Looking at your armpits reveals that they are <<= $appearance_pits.desc >>.
<<if $tasks.some(t => t.key === "shavePits")>>
<br>
<<link "Shave Arm Pits">>
<<set $appearance_pits to { desc: "smooth and shaved", img: "images/appearance/pits_shaved.png" }>> /* Assumes shaved state */
<<set $tasks = $tasks.filter(t => t.key !== "shavePits")>>
<<set $baseScore -= 2>>
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<<replace "#passage-bathroom-mirror">><<include "BathroomMirror">><</replace>>
<</link>>
<</if>>
</div>
<br><br>
<div class="mirror-part-section">
<<if $appearance_chest.img>>
<img @src="$appearance_chest.img" :alt="$appearance_chest.desc" class="mirror-appearance-img">
<</if>>
Looking at your chest reveals it is <<= $appearance_chest.desc >>.
<<if $tasks.some(t => t.key === "shaveChest")>> /* Assuming task key "shaveChest" exists */
<br>
<<link "Shave Chest">>
<<set $appearance_chest to { desc: "smooth and shaved", img: "images/appearance/chest_shaved.png" }>> /* Assumes shaved state */
<<set $tasks = $tasks.filter(t => t.key !== "shaveChest")>>
<<set $baseScore -= 1>>
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<<replace "#passage-bathroom-mirror">><<include "BathroomMirror">><</replace>>
<</link>>
<</if>>
</div>
<br><br>
<div class="mirror-part-section">
<<if $appearance_arms.img>>
<img @src="$appearance_arms.img" :alt="$appearance_arms.desc" class="mirror-appearance-img">
<</if>>
Glancing down your arms, you see they are <<= $appearance_arms.desc >>.
<<if $tasks.some(t => t.key === "shaveArms")>>
<br>
<<link "Shave Arms">>
<<set $appearance_arms to { desc: "smooth and shaved", img: "images/appearance/arms_shaved.png" }>> /* Assumes shaved state */
<<set $tasks = $tasks.filter(t => t.key !== "shaveArms")>>
<<set $baseScore -= 1>>
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<<replace "#passage-bathroom-mirror">><<include "BathroomMirror">><</replace>>
<</link>>
<</if>>
</div>
<br><br>
<div class="mirror-part-section">
<<if $appearance_pubes.img>>
<img @src="$appearance_pubes.img" :alt="$appearance_pubes.desc" class="mirror-appearance-img">
<</if>>
You note that you have <<= $appearance_pubes.desc >>.
<<if $tasks.some(t => t.key === "shavePubes")>>
<br>
<<link "Shave Pubes">>
<<set $appearance_pubes to { desc: "clean shaven dick and balls", img: "images/appearance/pubes_shaved.jpg" }>> /* Assumes shaved state */
<<set $tasks = $tasks.filter(t => t.key !== "shavePubes")>>
<<set $baseScore -= 1>>
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<<replace "#passage-bathroom-mirror">><<include "BathroomMirror">><</replace>>
<</link>>
<</if>>
</div>
<br><br>
<div class="mirror-part-section">
<<if $appearance_legs.img>>
<img @src="$appearance_legs.img" :alt="$appearance_legs.desc" class="mirror-appearance-img">
<</if>>
Your legs are <<= $appearance_legs.desc >>.
<<if $tasks.some(t => t.key === "shaveLegs")>>
<br>
<<link "Shave Legs">>
<<set $appearance_legs to { desc: "smooth and shaved", img: "images/appearance/legs_shaved.png" }>> /* Assumes shaved state */
<<set $tasks = $tasks.filter(t => t.key !== "shaveLegs")>>
<<set $baseScore -= 4>>
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<<replace "#passage-bathroom-mirror">><<include "BathroomMirror">><</replace>>
<</link>>
<</if>>
</div>
<br><br>
You finish your assessment.<br><br>
[[Step away from the mirror->Bathroom]] /* Adjust exit link target if needed */
</div><div class="room-container">
<div class="room-header">
<h2>Showering</h2>
</div>
<div class="story-text-area">
You step into the shower stall, the tile cool beneath your feet before the spray hits. Adjusting the temperature takes a moment – $gfName seems to like it hotter than you do. Steam quickly fills the small space, fogging the glass door.
<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('hersoap1.png', 'hersoap2.png', 'hersoap3.png', 'hersoap4.png', 'hersoap5.png')">
</div>
<br>
Your eyes inevitably land on the built-in shelf, a veritable fortress of $gfName's products. Pink, purple, and brightly labeled bottles stand shoulder-to-shoulder: volumizing shampoos, deep conditioners, scrubs promising impossible smoothness, washes smelling intensely of vanilla or gardenia. It's almost overwhelming.
<br>
<div class="room-gf-presence">
<img src="images/tasks/hissoap.png" alt="$gfName smiling at the door">
</div>
<br>
Reaching past them, you grab the decidedly plainer bottle you brought with you – your own familiar, male body wash and a basic 2-in-1 shampoo. It feels important, somehow, to carve out this small olfactory space amidst her abundant collection. You lather up quickly, the scent of your own wash briefly cutting through the steam and the underlying floral notes of the bathroom. Washing your hair, rinsing off... the routine is familiar, yet the setting makes it feel different, slightly detached.
<br><br>
Turning off the water, you grab a towel – large and fluffy, clearly one of $gfName's – and begin to dry off. Clean, yes, but the feeling of being a guest in this very personal space lingers.
</div>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<<if $day is 1>>
<div class="room-actions">
<<link "Get Dressed (Back to Your Room)">>
<<set $tasks = $tasks.filter(t => t.key !== "shower")>>
<<set $cleanliness = "Spotless and Fresh!">>
<<run UI.update("StoryCaption")>>
<<goto "GFtalkRouter">>
<</link>>
</div>
<<elseif $day is 4>>
<div class="room-actions">
<<link "Get Dressed (Back to Your Room)">>
<<set $tasks = $tasks.filter(t => t.key !== "shower")>>
<<set $cleanliness = "Spotless and Fresh!">>
<<run UI.update("StoryCaption")>>
<<goto "GFtalkRouter">>
<</link>>
</div>
<<else>>
<div class="room-actions">
<<link "Get Dressed (Back to Your Room)">>
<<set $tasks = $tasks.filter(t => t.key !== "shower")>>
<<set $cleanliness = "Spotless and Fresh!">>
<<run UI.update("StoryCaption")>>
<<goto "Your Bedroom">>
<</link>>
</div>
<</if>>
You step onto the treadmill. It looks expensive and high-tech, far more advanced than the basic models you've occasionally used at gyms in the past. The control panel has numerous buttons and programs. You press the 'Quick Start' button, and the belt begins to move smoothly beneath your feet.
//Wonder how often <<print $gfName>> uses this? She's definitely in better shape than I am right now...//
<br>
<div class="room-gf-presence">
<img @src="'images/exerciseroom/' + either('tm1.jpg', 'tm2.jpg', 'tm3.jpg', 'tm4.jpg')">
</div>
<br>
You pick up the pace slightly, settling into a steady walk. It feels good to move, but also a little pointless. Where are you even walking to? The machine hums quietly, a reminder of the comfortable, well-equipped life you've stepped into – and aren't currently contributing to.
<br><br>
<<if $chastityLocked is true>>
The slight jostle of the cage with each step is a subtle, constant reminder of the current terms of your existence here. It doesn't exactly inspire peak performance.
<</if>>
After a few minutes, the monotony and your own thoughts get the better of you.
<br><br>
[[Stop the treadmill->Exercise Room]]/% --- Passage: ExerciseWeights --- %/
You approach the weight rack. Most of the dumbbells are in the lower weight range – pastel-coated 3s, 5s, and 8s, clearly <<print $gfName>>'s. There are a few heavier ones tucked at the end, but even those feel lighter than what you used to lift routinely back when you had a gym membership and, well, less on your mind.
//Barely enough here for a real workout for me... but probably perfect for her toning exercises. She's disciplined, I'll give her that.//
<br>
<div class="room-gf-presence">
<<set _timg to random(1, 6)>>
<<set _timg to "images/exerciseroom/lw" + _timg + ".jpg">>
<img @src="_timg" alt="$mcName Lift Weights">
</div>
<br>
You pick up one of the heavier dumbbells, maybe a 25-pounder. It feels solid, but the motion of doing a simple curl feels strangely disconnected. Your energy is low, and the motivation just isn't there. Setting it back down with a quiet clink, you realize push-ups might be a better option if you actually wanted to exert yourself.
<br><br>
<<if $chastityLocked is true>>
Plus, the thought of any strenuous lifting with the cage pressing against you isn't exactly appealing. Best not to push it.
<</if>>
<br><br>
[[Step away from the weights->Exercise Room]]
<<set $sidebarFilter to "Under">>
<<run UI.update("StoryCaption")>>
<div class="wardrobe-container"> /* Needs this container class for <<replace>> */
<h2>Your Dresser</h2>
<div class="currently-wearing-section">
<h3>Currently Wearing (Under)</h3>
<div class="current-items-grid">
<<nobr>> /* No extra breaks from these widget calls */
<<displayCurrentItemWidget "chest">>
<<displayCurrentItemWidget "underwear">>
<<displayCurrentItemWidget "socks">>
<</nobr>>
</div>
</div>
<div class="save-outfit-buttons" style="text-align: center; margin-top: 1em;">
<<button "Save Daytime Underwear">><<saveOutfitPart "daytime" "under">><</button>>
|
<<button "Save Sleep Underwear">><<saveOutfitPart "sleep" "under">><</button>>
<br>
<span id="save-feedback" style="font-style: italic; font-size: 0.9em; color: #aaa;"><<print $saveOutfitFeedback>></span>
</div> <hr>
<div class="available-items-section">
<h3>Available Items</h3>
<div class="clothing-category">
<h4>Chest</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.chest>>
<<if $wornChest !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "chest" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Underwear</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.underwear>>
<<if $wornUnderwear !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "underwear" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
<div class="clothing-category">
<h4>Socks</h4>
<div class="items-grid">
<<nobr>>
<<for _key, _item range setup.clothing.socks>>
<<if $wornSocks !== _key and $ownedClothing.has(_key)>>
<<clothingItemWidget "socks" _key>>
<</if>>
<</for>>
<</nobr>>
</div>
</div>
</div> <hr>
/* --- Dresser Exit Check --- */
<<if $wornUnderwear !== null>>
[[Leave Dresser->Your Bedroom]]
[[Look in your Closet ->YourBedroomCloset]]
<<else>>
<span class="disabled-exit-warning">You should probably put on underwear before leaving the dresser area.</span>
<</if>>
/* --- End Dresser Exit Check --- */
</div> <img src="images/logo.jpg" alt="From Jeans to Lace" width="200" height="145">
<br><br><<if $unpacked is true or $day gt 1>>
''Day'' $day
<br>
<<if $sleeptime is true>><br>
<span style="color: yellow;">You feel sleepy</span>
<</if>>
<hr>
''$gfName's location:'' <br>$gfLocation
<<if $shopevent is true>>
<br><span style="color: red;">I need to call <<print $gfName>> to my room</span>
<</if>>
<br><br>
''Cleanliness:''<br>$cleanliness
<br>
/* APPEARANCE SECTION */
<br>
''Appearance''<br>
<<if $displayScore gt 0>>
/* Add span with class "masc-score" */
<span class="masc-score">Masculine: <<print $displayScore>></span>
<<elseif $displayScore lt 0>>
/* Add span with class "fem-score" */
<span class="fem-score">Feminine: <<print Math.abs($displayScore)>></span>
<<else>>
/* Optionally wrap neutral score too if you want different styling */
<span class="neutral-score">Neutral: 0</span>
<</if>>
<br>
/* --- AROUSAL SECTION --- */
<br><span class="arousal-label">Arousal:</span>
<<nobr>>
<<set _arousalText to "Unknown">>
<<set _arousalClass to "">>
<<set _arousalBarFillClass to "">> /* Initialize bar class variable */
<<if $chastityLocked is false>>
/* --- Logic for NOT Locked --- */
<<if $arousal <= 10>>
<<set _arousalText to "Calm">>
<<set _arousalClass to "arousal-calm">>
<<set _arousalBarFillClass to "arousal-fill-calm">>
<<elseif $arousal <= 30>>
<<set _arousalText to "Aware">>
<<set _arousalClass to "arousal-aware">>
<<set _arousalBarFillClass to "arousal-fill-aware">>
<<elseif $arousal <= 50>>
<<set _arousalText to "Tingling">>
<<set _arousalClass to "arousal-tingling">>
<<set _arousalBarFillClass to "arousal-fill-tingling">>
<<elseif $arousal <= 70>>
<<set _arousalText to "Hard as a rock">>
<<set _arousalClass to "arousal-flushed">>
<<set _arousalBarFillClass to "arousal-fill-flushed">>
<<elseif $arousal <= 90>>
<<set _arousalText to "Unbearably horny">>
<<set _arousalClass to "arousal-hard">>
<<set _arousalBarFillClass to "arousal-fill-hard">>
<<else>> /* Arousal > 90 */
<<set _arousalText to "Overwhelmed">>
<<set _arousalClass to "arousal-overwhelmed">>
<<set _arousalBarFillClass to "arousal-fill-overwhelmed">>
<</if>>
<<else>> /* $chastityLocked is true */
/* --- Logic for Locked --- */
<<if $arousal <= 10>>
<<set _arousalText to "Calm">>
<<set _arousalClass to "arousal-calm">>
<<set _arousalBarFillClass to "arousal-fill-calm">>
<<elseif $arousal <= 30>>
<<set _arousalText to "Restrained Stirring">>
<<set _arousalClass to "arousal-aware">>
<<set _arousalBarFillClass to "arousal-fill-aware">>
<<elseif $arousal <= 50>>
<<set _arousalText to "Confined Tingles">>
<<set _arousalClass to "arousal-tingling">>
<<set _arousalBarFillClass to "arousal-fill-tingling">>
<<elseif $arousal <= 70>>
<<set _arousalText to "Leaking Helplessly">>
<<set _arousalClass to "arousal-flushed">>
<<set _arousalBarFillClass to "arousal-fill-flushed">>
<<elseif $arousal <= 90>>
<<set _arousalText to "Throbbing Prison">>
<<set _arousalClass to "arousal-hard">>
<<set _arousalBarFillClass to "arousal-fill-hard">>
<<else>> /* Arousal > 90 */
<<set _arousalText to "Raw Desperation">>
<<set _arousalClass to "arousal-overwhelmed">>
<<set _arousalBarFillClass to "arousal-fill-overwhelmed">>
<</if>>
<</if>>
/* Display Number and Text Label with Color */
<span @class="_arousalClass"> <<print _arousalText>></span>
/* Display Progress Bar */
<div class="arousal-bar-background">
<div @class="'arousal-bar-fill ' + _arousalBarFillClass" @style="'width:' + $arousal + '%;'">
/* Optional: Put $arousal number inside the bar */
/* <<print $arousal>> */
</div>
</div>
<</nobr>>
/* --- END AROUSAL SECTION --- */
<br>
/* --- Start of Task Section --- */
<hr>
<div class="sidebar-tasks">
<<if $tasks.length gt 0>>
<strong>Tasks Remaining:</strong>
<span class="task-count"><<print $tasks.length>></span>
<br>
<<link "View Task List">>
<<run Dialog.setup("Current Tasks")>> /* Sets the dialog title */
<<run Dialog.wiki(Story.get("TaskListDialogContent").processText())>> /* Renders content from TaskListDialogContent passage */
<<run Dialog.open()>> /* Opens the dialog */
<</link>>
<<else>>
<strong>Tasks:</strong> None
<</if>>
</div><hr>
/* --- End of Task Section --- */
<<if $enableoutfit is true>>
<div id="sidebar-equip-outfits" style="text-align: center; margin-top: 10px; font-size: 0.9em; padding-top: 10px;">
<<nobr>>
/* --- ADDED: Location Check --- */
<<set _currentPassage to passage()>>
<<if _currentPassage is "Your Bedroom" or _currentPassage is "YourBedroomCloset" or _currentPassage is "YourBedroomDresser">>
/* --- Player is in an allowed room: Show standard outfit links --- */
<<set _canEquipDay to checkOutfitMinimums($savedOutfits.daytime, 'daytime')>>
<<set _canEquipSleep to checkOutfitMinimums($savedOutfits.sleep, 'sleep')>>
<<if _canEquipDay>>
<<link "Wear Daytime Outfit">><<equipOutfit "daytime">><</link>>
<<else>>
<span style="color:#888;">Wear Daytime Outfit (Incomplete Set)</span>
<</if>>
<br>
<<if _canEquipSleep>>
<<link "Wear Sleep Outfit">><<equipOutfit "sleep">><</link>>
<<else>>
<span style="color:#888;">Wear Sleep Outfit (Incomplete Set)</span>
<</if>>
<<unset _canEquipDay, _canEquipSleep>> /* Unset these temp vars */
<<else>>
<span style="color:#888; font-style:italic;">I can't change here.</span> /* Changed color/style for visibility */
<</if>>
<<unset _currentPassage>> /* Clean up the passage variable */
<</nobr>>
<span id="equip-feedback"></span> /* Feedback span remains outside the nobr */
</div>
<</if>>
<br>''Currently Wearing:''<br>
/* === Wardrobe Display Area === */
<div id="sidebar-wardrobe">
<div id="sidebar-worn-items">
<<nobr>>
<<if $sidebarFilter is "Over">>
/* --- Display Top (Check tops, sleepTop, sleepSet, dresses) --- */
<<set _key to $wornTop>>
<<if _key !== null>>
<<set _itemData to getClothing("tops", _key)>>
<<if !_itemData>>
<<set _itemData to getClothing("sleepTop", _key)>>
<</if>>
<<if !_itemData>>
<<set _itemData to getClothing("sleepSet", _key)>>
<</if>>
<<if !_itemData>>
<<set _itemData to getClothing("dresses", _key)>>
<</if>>
<<if _itemData>>
<div class="sidebar-clothing-item">
<img @src="_itemData.img" @alt="_itemData.name" :title="_itemData.name">
</div>
<</if>>
<</if>>
/* --- Display Bottom (Check bottoms, sleepBottom) --- */
/* Only display if $wornBottoms isn't null (i.e., not wearing a sleepSet) */
<<set _key to $wornBottoms>>
<<if _key !== null>>
<<set _itemData to getClothing("bottoms", _key)>>
<<if !_itemData>>
<<set _itemData to getClothing("sleepBottom", _key)>>
<</if>>
<<if _itemData>>
<div class="sidebar-clothing-item">
<img @src="_itemData.img" @alt="_itemData.name" :title="_itemData.name">
</div>
<</if>>
<</if>>
/* --- Display Shoes (Check shoes) --- */
<<set _key to $wornShoes>>
<<if _key !== null>>
<<set _itemData to getClothing("shoes", _key)>>
<<if _itemData>>
<div class="sidebar-clothing-item">
<img @src="_itemData.img" @alt="_itemData.name" :title="_itemData.name">
</div>
<</if>>
<</if>>
<<elseif $sidebarFilter is "Under">>
/* --- Display Chest (Check chest) --- */
<<set _key to $wornChest>>
<<if _key !== null>>
<<set _itemData to getClothing("chest", _key)>>
<<if _itemData>>
<div class="sidebar-clothing-item">
<img @src="_itemData.img" @alt="_itemData.name" :title="_itemData.name">
</div>
<</if>>
<</if>>
/* --- Display Underwear (Check underwear) --- */
<<set _key to $wornUnderwear>>
<<if _key !== null>>
<<set _itemData to getClothing("underwear", _key)>>
<<if _itemData>>
<div class="sidebar-clothing-item">
<img @src="_itemData.img" @alt="_itemData.name" :title="_itemData.name">
</div>
<</if>>
<</if>>
/* --- Display Socks (Check socks) --- */
<<set _key to $wornSocks>>
<<if _key !== null>>
<<set _itemData to getClothing("socks", _key)>>
<<if _itemData>>
<div class="sidebar-clothing-item">
<img @src="_itemData.img" @alt="_itemData.name" :title="_itemData.name">
</div>
<</if>>
<</if>>
<</if>>
<</nobr>>
</div>
/* === Sidebar Filter Links === */
<div id="sidebar-filters">
<<link "Over">>
<<set $sidebarFilter to "Over">>
<<run UI.update("StoryCaption")>>
<</link>>
|
<<link "Under">>
<<set $sidebarFilter to "Under">>
<<run UI.update("StoryCaption")>>
<</link>>
</div> /* End of #sidebar-filters */
<</if>>
/* Set day 1 start */
<<set $femValue to 0>>
<<set $abstinenceStep to 0>>
<<set $chastityLocked to false>>
<<set $otherBfIntroStep to 0>>
<<set $gfLocation to "Your Bedroom">>
<<set $obfName to "Mark">>
<<set $day to 1>>
<<set $cleanliness to "You stink!">>
<<set $talkedtoday to false>>
<<set $currentRoom = "Your Bedroom">>
<<set $baseScore to 10>>
<<set $displayScore to $baseScore>>
<<set $shopevent to false>>
<<set $arousal to 0>>
<<set $sleeptime to false>>
<<set $talkcount to 0>>
<<set $introtalk to false>>
<<set $shopevent to false>>
<<set $saveOutfitFeedback to "">>
<<set $enableoutfit to false>>
<<set $currentScoreRequirement to null>>
/* Set initial worn clothing */
<<set $wornTop to "tank_white">>
<<set $wornBottoms to "jeans_holy">>
<<set $wornShoes to "sneakers_old">>
<<set $wornChest to null>>
<<set $wornUnderwear to "boxer_briefs_grey">>
<<set $wornSocks to "socks_crew">>
/* Create array to store owned clothing, and populate it */
<<set $ownedClothing to new Set([
"tank_white",
"jeans_holy",
"sneakers_old",
"boxer_briefs_grey",
"socks_crew"
])>>
/* Initialize Saved Outfits */
<<set $savedOutfits to {
daytime: {
outer: { top: "tank_white", bottom: "jeans_holy", shoes: "sneakers_old" },
under: { chest: null, underwear: "boxer_briefs_grey", socks: "socks_crew" }
},
sleep: { // Sleep set starts empty/null as requested
outer: { top: null, bottom: null, shoes: null },
under: { chest: null, underwear: null, socks: null }
}
}>>
/* Create empty array to store tasks */
<<set $tasks to []>>
/* Initialize sidebar filter */
<<set $sidebarFilter to "Over">>
/* Set initial body variables */
<<set $appearance_face to { desc: "covered by a beard and moustache", img: "images/appearance/face_beard_moustache.png" }>>
<<set $appearance_chest to { desc: "hairy", img: "images/appearance/chest_hairy.png" }>>
<<set $appearance_pits to { desc: "hairy", img: "images/appearance/pits_hairy.png" }>>
<<set $appearance_arms to { desc: "hairy", img: "images/appearance/arms_hairy.png" }>>
<<set $appearance_pubes to { desc: "a lot of pubic hair", img: "images/appearance/pubes_bushy.png" }>>
<<set $appearance_legs to { desc: "hairy", img: "images/appearance/legs_hairy.png" }>>
<<calculateScore>>
/* ================================================================== */
/* == Widget: calculateScore == */
/* ================================================================== */
<<widget "calculateScore">>
<<set _currentScore to $baseScore>>
/* Define the standard slot variables to check */
<<set _slotVarsToCheck to ["$wornTop", "$wornBottoms", "$wornShoes", "$wornChest", "$wornUnderwear", "$wornSocks"]>>
<<for _varName range _slotVarsToCheck>>
<<set _wornItemKey to State.variables[_varName.slice(1)]>> /* Get key from variable */
<<if _wornItemKey !== null>>
<<set _itemData to null>> /* Reset item data for each slot */
<<set _primaryType to "">> /* Determine primary type based on slot */
/* --- Determine Primary Type --- */
<<switch _varName>>
<<case "$wornTop">> <<set _primaryType to "tops">>
<<case "$wornBottoms">> <<set _primaryType to "bottoms">>
<<case "$wornShoes">> <<set _primaryType to "shoes">>
<<case "$wornChest">> <<set _primaryType to "chest">>
<<case "$wornUnderwear">> <<set _primaryType to "underwear">>
<<case "$wornSocks">> <<set _primaryType to "socks">>
<</switch>>
/* --- Try to Get Item Data (with Fallbacks) --- */
/* 1. Try Primary Type */
<<if _primaryType !== "">>
<<set _itemData to getClothing(_primaryType, _wornItemKey)>>
<</if>>
/* 2. Fallbacks if primary failed OR for slots that can hold multiple types */
<<if !_itemData>>
<<if _varName is "$wornTop">> /* Check sleep types if looking at $wornTop */
<<set _itemData to getClothing("sleepTop", _wornItemKey)>>
<<if !_itemData>>
<<set _itemData to getClothing("sleepSet", _wornItemKey)>>
<</if>>
<<if !_itemData>>
<<set _itemData to getClothing("dresses", _wornItemKey)>> /* Also check dresses */
<</if>>
<<elseif _varName is "$wornBottoms">> /* Check sleepBottom if looking at $wornBottoms */
<<set _itemData to getClothing("sleepBottom", _wornItemKey)>>
<</if>>
<</if>>
/* --- End Item Data Lookup --- */
/* --- Add Score if Item Data Found --- */
<<if _itemData and typeof _itemData.score === 'number'>>
<<set _currentScore += _itemData.score>>
<</if>>
/* --- End Add Score --- */
/* Clean up temp var (optional) */
<<unset _itemData, _primaryType>>
<</if>> /* End null check for _wornItemKey */
<</for>> /* End loop through slot variables */
<<set $displayScore to _currentScore>> /* Update the global display score */
<</widget>>
/* ================================================================== */
/* == Widget: setWornItem == */
/* == Sets the specified worn item and refreshes the container == */
/* ================================================================== */
<<widget "setWornItem">>
/* Args: _args[0] = type, _args[1] = key, _args[2] = passageNameToRefresh */
<<set _type to _args[0]>>
<<set _key to _args[1]>>
<<set _passageNameToRefresh to _args[2]>>
/* --- Check if currently wearing a full-body item (SleepSet or Dress) --- */
<<set _isWearingFullBody to false>> /* Default to false */
<<if $wornTop !== null>>
<<if getClothing("sleepSet", $wornTop) !== null or getClothing("dresses", $wornTop) !== null>>
<<set _isWearingFullBody to true>>
<</if>>
<</if>>
/* --- END UPDATED --- */
/* Determine the variable name based on the passed type */
<<set _slotVarName to "">>
<<switch _type>>
<<case "tops">>
/* Equipping a top naturally overwrites any full-body item in $wornTop */
<<set _slotVarName = "$wornTop">>
<<break>>
<<case "bottoms">>
/* UPDATED CHECK: If wearing a full-body item, clear wornTop first */
<<if _isWearingFullBody>>
<<run State.setVar("$wornTop", null)>>
<</if>>
/* END UPDATED CHECK */
<<set _slotVarName = "$wornBottoms">>
<<break>>
<<case "shoes">>
<<set _slotVarName = "$wornShoes">>
<<break>>
<<case "chest">>
<<set _slotVarName = "$wornChest">>
<<break>>
<<case "underwear">>
<<set _slotVarName = "$wornUnderwear">>
<<break>>
<<case "socks">>
<<set _slotVarName = "$wornSocks">>
<<break>>
<<case "sleepTop">>
/* Equipping a sleepTop naturally overwrites any full-body item in $wornTop */
<<set _slotVarName = "$wornTop">>
<<break>>
<<case "sleepBottom">>
<<if _isWearingFullBody>>
<<run State.setVar("$wornTop", null)>>
<</if>>
<<set _slotVarName = "$wornBottoms">>
<<break>>
<<case "sleepSet">>
/* Special handling: Set top directly, nullify bottom */
<<run State.setVar("$wornTop", _key)>>
<<run State.setVar("$wornBottoms", null)>>
<<set _slotVarName = null>>
<<break>>
<<case "dresses">>
/* Same handling as sleepSet: Set top directly, nullify bottom */
<<run State.setVar("$wornTop", _key)>>
<<run State.setVar("$wornBottoms", null)>>
<<set _slotVarName = null>>
<<break>>
<<default>>
<<run console.error("setWornItem Error: Unknown type '" + _type + "'")>>
<<set _slotVarName = null>> /* Ensure invalid type doesn't proceed */
<</switch>>
/* Set the correct variable if name was determined AND NOT NULL */
<<if _slotVarName !== "" and _slotVarName !== null>>
<<run State.setVar(_slotVarName, _key)>>
<</if>>
/* Set Sidebar Filter based on equipped type */
<<switch _type>>
<<case "tops" "bottoms" "shoes" "sleepTop" "sleepBottom" "sleepSet" "dresses">>
<<set $sidebarFilter to "Over">>
<<case "chest" "underwear" "socks">>
<<set $sidebarFilter to "Under">>
<<default>>
<<set $sidebarFilter to "Over">> /* Default to Over for safety */
<</switch>>
/* Recalculate score & Update Sidebar (Now uses updated filter) */
<<calculateScore>>
<<run UI.update("StoryCaption")>>
/* Refresh the container */
<<replace ".wardrobe-container">>
<<include _passageNameToRefresh>>
<</replace>>
<</widget>>
/* ================================================================== */
/* == Widget: unsetWornItem (ACTION WIDGET) == */
/* == Sets the specified worn item to null and refreshes == */
/* ================================================================== */
<<widget "unsetWornItem">>
/* Args: _args[0] = slotVarName, _args[1] = passageNameToRefresh */
<<set _slotVarName to _args[0]>>
<<set _passageNameToRefresh to _args[1]>>
/* Set the variable to null */
<<run State.setVar(_slotVarName, null)>>
<<calculateScore>>
/* Update sidebar */
<<run UI.update("StoryCaption")>>
/* Refresh the container */
<<replace ".wardrobe-container">>
<<include _passageNameToRefresh>>
<</replace>>
<</widget>>
/* ================================================================== */
/* == Widget: clothingItemWidget (Uses data-* attributes) == */
/* == Displays item, link uses data attributes, calls action == */
/* ================================================================== */
<<widget "clothingItemWidget">>
/* Arguments: _args[0] = type, _args[1] = key */
<<set _type to _args[0]>>
<<set _key to _args[1]>>
<<set _item to getClothing(_type, _key)>>
<<set _passageName to passage()>>
<div class="clothing-item-selection">
<<if _item and _item.img>> /* Check if item and image exist */
<img @src="_item.img" @alt="_item.name">
<<else>>
<img src="images/placeholder.png" alt="Missing Image"> /* Fallback image */
<</if>>
/* Link text itself - Attach data-* attributes */
<<if _item>>
<a @data-passage-target="_passageName" @data-clothing-type="_type" @data-clothing-key="_key" class="link-internal clothing-action-link"><<print _item.name>></a>
<<else>>
<span>Error: Item not found</span>
<</if>>
</div>
<</widget>>
/* ================================================================== */
/* == Widget: unequipItemWidget (Uses data-* attributes) == */
/* == Displays an "Unequip" link for a clothing slot == */
/* ================================================================== */
<<widget "unequipItemWidget">>
/* Arguments: _args[0] = type, _args[1] = variable NAME (string) */
<<set _type to _args[0]>>
<<set _slotVarName to _args[1]>>
<<set _categoryName to getCategoryName(_type)>>
<<set _linkText to `Unequip ${_categoryName}`>>
<<set _passageName to passage()>>
/* Attach data-* attributes for the unequip action */
<a @data-passage-target="_passageName" @data-unequip-var="_slotVarName" class="link-internal clothing-unequip-link"><<print _linkText>></a>
<</widget>>
/* ================================================================== */
/* == Widget: displayCurrentItemWidget (Uses Direct Access) == */
/* == Displays the currently worn item for a specific slot == */
/* ================================================================== */
<<widget "displayCurrentItemWidget">>
/* Argument: _args[0] = clothing type passed from display passage */
<<set _type to _args[0]>>
/* --- Determine Correct Slot Variable Name --- */
<<set _varSuffix = "">>
<<switch _type>>
<<case "tops" "sleepTop" "sleepSet" "dresses">> <<set _varSuffix = "Top">>
<<case "bottoms" "sleepBottom">> <<set _varSuffix = "Bottoms">>
<<case "shoes">> <<set _varSuffix = "Shoes">>
<<case "chest">> <<set _varSuffix = "Chest">>
<<case "underwear">> <<set _varSuffix = "Underwear">>
<<case "socks">> <<set _varSuffix = "Socks">>
<<default>>
<<if typeof _type === 'string' and _type.length > 0>>
<<set _varSuffix = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<</if>>
<</switch>>
<<set _slotVarName to '$worn' + _varSuffix>>
/* --- Read Currently Worn Key Directly from Variable --- */
<<set _wornKeyDirect = null>>
<<if State.variables.hasOwnProperty(_slotVarName.slice(1))>>
<<set _wornKeyDirect = State.variables[_slotVarName.slice(1)]>>
<</if>>
/* --- Get Item Data (with Fallbacks for $wornTop/$wornBottoms) --- */
<<set _itemData to null>>
<<set _actualItemType = null>> /* Track where the item was found */
<<if _wornKeyDirect !== null>>
/* Try the primary type first */
<<set _itemData to getClothing(_type, _wornKeyDirect)>>
<<if _itemData>>
<<set _actualItemType = _type>>
<</if>>
/* Fallbacks if not found in primary type */
<<if !_itemData>>
<<if _type === "tops">> /* If checking top slot, look in sleep/outfit types */
<<set _itemData to getClothing("sleepTop", _wornKeyDirect)>>
<<if _itemData>> <<set _actualItemType = "sleepTop">> <</if>>
<<if !_itemData>>
<<set _itemData to getClothing("sleepSet", _wornKeyDirect)>>
<<if _itemData>> <<set _actualItemType = "sleepSet">> <</if>>
<</if>>
<<if !_itemData>>
<<set _itemData to getClothing("dresses", _wornKeyDirect)>>
<<if _itemData>> <<set _actualItemType = "dresses">> <</if>>
<</if>>
<<elseif _type === "bottoms">> /* If checking bottom slot, look in sleepBottom */
<<set _itemData to getClothing("sleepBottom", _wornKeyDirect)>>
<<if _itemData>> <<set _actualItemType = "sleepBottom">> <</if>>
<</if>>
<</if>>
/* If still no data found, treat as nothing valid worn */
<<if _itemData is null>>
<<set _wornKeyDirect = null>>
<</if>>
<</if>>
/* --- End Item Data Lookup --- */
/* Determine category name for display based on the type where data was found */
<<set _categoryName = getCategoryName(_actualItemType || _type)>> /* Use found type, fallback to requested type */
<<if _actualItemType is "sleepTop">> <<set _categoryName = "Sleep Top">>
<<elseif _actualItemType is "sleepBottom">> <<set _categoryName = "Sleep Bottoms">>
<<elseif _actualItemType is "sleepSet">> <<set _categoryName = "Sleep Set">>
<<elseif _actualItemType is "dresses">> <<set _categoryName = "Dress">>
<</if>>
<div class="currently-wearing-item">
<h4>Currently Wearing <<= _categoryName>>:</h4>
<<if _itemData>> /* If a valid item IS worn */
<img @src="_itemData.img" @alt="'Currently worn ' + _itemData.name" class="current-item-img">
<span><<= _itemData.name>></span>
<<else>> /* If _itemData is null (nothing worn in this slot) */
<<set _isCoveredByOutfit to false>>
/* Check ONLY if we are currently trying to display the "bottoms" slot */
<<if _type is "bottoms" and $wornTop !== null>>
/* See if the item in $wornTop is actually a sleepSet OR dress item */
<<if getClothing("sleepSet", $wornTop) !== null or getClothing("dresses", $wornTop) !== null>>
<<set _isCoveredByOutfit to true>>
<</if>>
<</if>>
<<if _isCoveredByOutfit>>
/* Print custom message */
<span>(Covered by outfit)</span>
<<else>>
/* Otherwise, print the default "Nothing" */
<span>(Nothing)</span>
<</if>>
<</if>> /* End check for _itemData */
<br>
<<if _wornKeyDirect !== null and _itemData !== null>> /* If something valid is worn */
/* Determine correct variable to unequip */
<<set _unequipVar = _slotVarName>>
<<if _actualItemType is "sleepTop" or _actualItemType is "sleepSet" or _actualItemType is "dresses">>
<<set _unequipVar = "$wornTop">>
<<elseif _actualItemType is "sleepBottom">>
<<set _unequipVar = "$wornBottoms">>
<</if>>
/* Handle unequip link for full body items */
<<if _actualItemType is "sleepSet" or _actualItemType is "dresses">>
/* Unequipping a Sleep Set or Dress - uses $wornTop explicitly */
<<set _linkHTML to '<a class="link-internal clothing-unequip-link" data-passage-target="' + _passageName + '" data-unequip-var="$wornTop">(Unequip Outfit)</a>'>>
<<print _linkHTML>>
<<unset _linkHTML>>
<<else>>
/* Standard unequip clears the relevant single slot */
<<unequipItemWidget _actualItemType _unequipVar>>
<</if>>
<</if>>
</div>
<</widget>><div class="story-text-area">
<<if $day is 1>>
Back in the relative privacy of your room, you stand holding the bottle of moisturizer $gfName pressed into your hand earlier. It feels light, elegant, and definitely smells like her - that familiar blend of vanilla and something floral.
<br><br><</if>>
You sigh quietly. You don't want any friction, especially not now when everything feels so precarious. More than anything, you just want her to be happy, to see that warm smile directed at you again. Maybe doing these little things she asks, like this, is the key. It feels a bit strange, holding this decidedly feminine product, so different from your usual routine (or lack thereof).
<br><br>
Unscrewing the cap, you pour a dollop of the creamy white lotion into your palm. It feels cooler and silkier than you expected. Following her instruction, you start rubbing it into your hands, paying attention to the knuckles and palms she'd subtly criticized. The lotion sinks in quickly, leaving a smooth, almost slippery feeling behind as the scent clings to your skin.
<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('lotion1.webp', 'lotion2.webp', 'lotion3.webp', 'lotion4.webp', 'lotion5.webp')">
</div>
<br>
Hesitantly at first, then with a bit more resolve, you apply it to your arms, shoulders, anywhere the hot shower might have left your skin feeling dry. Each stroke feels slightly self-conscious, unfamiliar territory. This isn't something you'd ever do on your own. But the thought of $gfName noticing, of her being pleased... that pushes you on.
<br><br>
You finish, recapping the bottle. Your skin feels undeniably softer, smoother to the touch, and carries her scent. It's... different. You hope it's enough. You plan on seeing her later, maybe relaxing together, and a knot of anticipation tightens in your stomach. You really hope this simple act softens her mood, paving the way for the closeness and intimacy you desperately crave.
<br><br>
</div>
<<silently>>
<<set $baseScore -= 1>>
<<calculateScore>>
<<set $gfLocation to "Living Room">>
/* Remove the 'moisturizer' task from the list */
<<set $tasks = $tasks.filter(t => t.key !== "moisturizer")>>
/* Update the sidebar UI */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Return to your room">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<<if $day lte 3>>
$mcName leaned his forehead against the cool glass of the window, gazing out but not really "seeing" anything at all. The familiar rooftops and the distant city skyline seemed muted, just like his own prospects. A month ago, this view would have been from his apartment. Now... now it was $gfName's window, $gfName's spare room, $gfName's life he was observing from the inside.
<br>
<div class="room-gf-presence">
<img @src="'images/activities/window/' + either('win1.jpg', 'win2.jpg', 'win3.jpg', 'win4.jpg')">
</div>
<br> He sighed, the breath fogging a small patch on the pane. How had he gotten here? Losing the job was bad luck, the eviction a gut punch, but this slow slide into dependency... that felt different. It felt heavier. $gfName was kind, generous even, but every meal, every quiet evening, even the space he occupied felt borrowed. He was adrift, tethered only by her goodwill, and the unspoken expectations that seemed to grow with each passing day.
<br><br> $mcName wasn't sure which was more unsettling – the uncertainty of his future, or the surprising comfort he sometimes found in this strange, passive role.
<</if>>
<<if $day gt 3 and $day lte 7>>
$mcName found himself drawn to the window again, a now familiar habit. The city outside bustled with its usual indifference, a world moving forward while his own seemed to be shifting on an entirely different axis. He wasn't just a guest anymore, was he? Days blurred into a routine dictated by `$gfName`'s expectations – the specific clothes she approved of, the daily shaving tasks, meticulous cleaning.
<br>
<div class="room-gf-presence">
<img @src="'images/activities/window/' + either('win1.jpg', 'win2.jpg', 'win3.jpg', 'win4.jpg')">
</div>
<br>
It was strange. Part of him chafed against the rules, the constant awareness of her standards judging his every choice, down to the color of his boxers. Yet... there was an undeniable pull in her approval. Her satisfied smile when he presented himself shaved and wearing the 'right' things, the promise of more if he continued to comply... it was a potent mix. He was fitting into her life, just as she wanted, piece by piece. The unease hadn't vanished entirely, but it was now tangled with a confusing blend of resentment, anticipation, and a growing, quiet acceptance of this new reality she was carefully constructing around him. Was this just temporary support, or was he being remolded into something else entirely?
<</if>>
<br><br><br>
<<return>>Your eyes start to feel heavy, you think about the day as you start to drift away.<br><br>
<div class="room-gf-presence">
<img src="images/activities/sleep/sleep1.jpg" alt="Sleep">
</div>
<br><br>
/* --- Sleep Thoughts Section --- */
/* Content is defined here but starts hidden */
<div id="sleep-thoughts" class="fade-in-section">
//<<include sleepthoughts>>//
<br><br>
</div>
<<timed 5s>><<addclass "#sleep-thoughts" "fade-in-visible">><</timed>>
/* --- Dream Section --- */
<div id="sleep-dream" class="fade-in-section">
Sleep overtakes you...<br><br>
<<if $chastityLocked is false>>
<<if $arousal <= 50>>
<br> You are calm, you dream of tiktok girls.<br><br>
<div class="room-gf-presence">
<<nobr>>
<<set _vidNum to random(1, 48)>>
/* Construct the video file path */
<<set _vidPath to "images/vids/dream/nllowdream" + _vidNum + ".mp4">>
<</nobr>>
/* Display the video using the dynamic path */
<video @src="_vidPath"
type="video/mp4"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
</div>
<<elseif $arousal <= 80>>
<br> You are horny, you have a dream of a girl stripping.<br>
<div class="room-gf-presence">
<<nobr>>
<<set _vidNum to random(1, 18)>>
/* Construct the video file path */
<<set _vidPath to "images/vids/dream/nlmiddream" + _vidNum + ".webm">>
<</nobr>>
/* Display the video using the dynamic path */
<video @src="_vidPath"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
</div>
<<else>> /* Arousal > 80 */
<br> You are burning with lust, you have a dream of hardcore sex.<br>
<div class="room-gf-presence">
<<nobr>>
<<set _vidNum to random(1, 20)>>
/* Construct the video file path */
<<set _vidPath to "images/vids/dream/nlhighdream" + _vidNum + ".webm">>
<</nobr>>
/* Display the video using the dynamic path */
<video @src="_vidPath"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
</div>
<</if>>
<<else>> /* $chastityLocked is true */
<<if $arousal <= 30>>
locked dream <=30
<<elseif $arousal <= 70>>
locked dream <= 70
<<else>> /* Arousal > 70 */
locked dream > 70
<</if>>
<</if>>
</div>
<br>
<<timed 10s>><<addclass "#sleep-dream" "fade-in-visible">><</timed>>
/% --- Call the widget to advance day, reset tasks, etc. --- %/
<<StartNewDay>>
/* --- Wake Up Section --- */
<div id="sleep-wakeup" class="fade-in-section">
<br>
<<if $day is 4>>
<br><br>
As you are sleeping, you think you dream of someone in your bed. You dream of vanilla and roses scents. <br>//Why would you dream of that?// <br> You feel your dick being rubbed. You are very much so enjoying this dream. It seems to go on for ages.
<br><br><</if>>
Sunlight filters through the window, nudging you awake. A new day has begun.
<br><br><div class="room-gf-presence">
<img src="images/activities/sleep/wakeup1.jpg" alt="Wake up">
</div><br>
<<if $day is 3>>
<br>
[[Continue...->Night_Swap_D2]]
<<elseif $day is 8>>
[[Continue...->End Of Content]]
<<else>>
[[Continue...->Your Bedroom]]
<</if>>
</div>
<<timed 15s>><<addclass "#sleep-wakeup" "fade-in-visible">><</timed>>
<<run
setTimeout(function() {
if (State.variables.day === 4) {
/* --- Animation Setup --- */
var startArousal = State.variables.arousal; /* Get current arousal */
var targetArousal = 95;
var duration = 2000; /* 2 seconds in milliseconds */
var updateFrequency = 50; /* Update every 50ms (adjust for smoothness) */
var steps = duration / updateFrequency;
var increment = (targetArousal - startArousal) / steps;
var currentStep = 0;
/* Safety check: If already at/above target, just set and update */
if (startArousal >= targetArousal) {
State.variables.arousal = targetArousal;
UI.update("StoryCaption"); /* Update UI */
return; /* Exit the function */
}
/* Clear any previous interval timer if it exists (using temporary state is safer) */
if (State.temporary.arousalAnimationInterval) {
clearInterval(State.temporary.arousalAnimationInterval);
}
/* --- Start the Animation Interval --- */
/* Store interval ID on temporary state instead of window */
State.temporary.arousalAnimationInterval = setInterval(function() {
currentStep++;
var nextArousal = startArousal + (increment * currentStep);
if (currentStep >= steps) {
/* --- Animation Finished --- */
clearInterval(State.temporary.arousalAnimationInterval); /* Stop the timer */
State.temporary.arousalAnimationInterval = null; /* Clean up temp variable */
State.variables.arousal = targetArousal; /* Ensure exact final value */
UI.update("StoryCaption"); /* Final update */
} else {
/* --- Mid-Animation --- */
State.variables.arousal = Math.round(nextArousal); /* Update with intermediate value */
UI.update("StoryCaption"); /* Update sidebar frequently */
}
}, updateFrequency);
}
}, 15000); /* <-- NOTE: Semicolon ADDED BACK here */
>>:: StartNewDay [widget]
<<widget "StartNewDay">>
<<set $day += 1>>
<<set $talkedtoday to false>>
<<set $cleanliness to "You stink!">>
<<set $tasks to []>>
<<set $sleeptime to false>>
<<set $talkcount to 0>>
<<set $shopevent to false>>
/* --- Score reset after sleeping --- */
<<if $day is 6>> /* Specifically for waking up on Day 6 */
/* Revert the special -3 from Day 5 skincare if it's meant to be temporary */
<<set $baseScore += 3>>
<</if>>
/* --- Lotion --- */
<<if $day gte 1>>
<<set $baseScore += 1>>
<</if>>
/* --- Shaving --- */
<<if $day gt 3>> /* Face */
<<set $baseScore += 1>>
<</if>>
<<if $day gt 4>> /* Pubes */
<<set $baseScore += 1>>
<</if>>
<<if $arousal lt 71>>
<<modifyArousal 5>>
<</if>>
<<if $day gt 3>>
<<set $appearance_face to { desc: "showing stubble", img: "images/appearance/face_stubble.png" }>>
<</if>>
<<if $day gt 4>>
<<set $appearance_pubes to { desc: "not shaved your dick and balls today", img: "images/appearance/pubes_stubble.jpg" }>>
<</if>>
/* --- Add Tasks Based on Flags & Definitions --- */
/* --- Hygiene / Body Care --- */
<<if $taskShowerActive>>
<<run $tasks.push(clone(setup.taskDefinitions.shower))>>
<</if>>
<<if $taskMoisturizerActive>>
<<run $tasks.push(clone(setup.taskDefinitions.moisturizer))>>
<</if>>
/* --- Shaving --- */
<<if $taskShaveFaceActive>>
<<run $tasks.push(clone(setup.taskDefinitions.shaveFace))>>
<</if>>
<<if $taskShaveArmsActive>>
<<run $tasks.push(clone(setup.taskDefinitions.shaveArms))>>
<</if>>
<<if $taskShavePitsActive>>
<<run $tasks.push(clone(setup.taskDefinitions.shavePits))>>
<</if>>
<<if $taskShaveLegsActive>> /* Corrected flag name */
<<run $tasks.push(clone(setup.taskDefinitions.shaveLegs))>>
<</if>>
<<if $taskShavePubesActive>>
<<run $tasks.push(clone(setup.taskDefinitions.shavePubes))>>
<</if>>
/* --- Activities --- */
<<if $taskFootrubActive>>
<<run $tasks.push(clone(setup.taskDefinitions.footrub))>>
<</if>>
<<if $taskCagerubActive>>
<<run $tasks.push(clone(setup.taskDefinitions.cagerub))>>
<</if>>
<<if $taskMallActive>>
<<run $tasks.push(clone(setup.taskDefinitions.mall))>>
<</if>>
<<if $taskClothesCheckActive>>
<<run $tasks.push(clone(setup.taskDefinitions.clothesCheck))>>
<</if>>
/* --- Cleaning --- */
/* If $taskCleanActive adds *all* cleaning tasks: */
<<if $taskCleanActive>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanKitchen))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanBathroom))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanLiving))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanWorkout))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanOwnRoom))>>
<</if>>
/* --- Day-Specific / Other Tasks --- */
/* Add any other conditional tasks here using their definitions */
/* --- Move GF randomly
<<set $gfLocation to either("Kitchen", "Living Room", "$gfName Bedroom")>>
--- */
/* --- Move GF to her room, unless specific event/day --- */
<<if $day is 3>>
<<set $gfLocation to "Your Bedroom">> /* GF starts Day 3 in MC's room */
<<elseif $day is 4>>
<<set $gfLocation to "Your Bedroom">> /* GF starts Day 4 in MC's room */
<<elseif $day is 7>>
<<set $gfLocation to "Your Bedroom">> /* GF starts Day 7 in MC's room */
<<else>>
<<set $gfLocation to "$gfName Bedroom">> /* Default for other days */
<</if>>
/* --- Set arousal specific day (morning)
<<if $day is 4>>
<<set $arousal to 95>>
<</if>>
--- */
/* --- Update Sidebar --- */
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<</widget>><<if $tasks.length > 0>>
/* Get tasks for each category using the helper function */
<<set _hygieneTasks = setup.tasksByCategory($tasks, "Hygiene")>>
<<set _shavingTasks = setup.tasksByCategory($tasks, "Shaving")>>
<<set _activityTasks = setup.tasksByCategory($tasks, "Activities")>>
<<set _cleaningTasks = setup.tasksByCategory($tasks, "Cleaning")>>
<<set _setupTasks = setup.tasksByCategory($tasks, "Setup")>>
<<set _interactionTasks = setup.tasksByCategory($tasks, "Interaction")>> /* Added Interaction category */
/* Add other categories if you defined more */
<<set _otherTasks = $tasks.filter(t => t && ["Hygiene", "Shaving", "Activities", "Cleaning", "Setup", "Interaction"].indexOf(t.category) === -1)>>
/* --- Display Setup Tasks --- */
<<if _setupTasks.length gt 0>>
<h4>Setup</h4>
<ul>
<<for _task range _setupTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>>
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
/* --- Display Hygiene Tasks --- */
<<if _hygieneTasks.length gt 0>>
<h4>Hygiene</h4>
<ul>
<<for _task range _hygieneTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>>
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
/* --- Display Shaving Tasks --- */
<<if _shavingTasks.length gt 0>>
<h4>Shaving</h4>
<ul>
<<for _task range _shavingTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>>
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
/* --- Display Activity Tasks --- */
<<if _activityTasks.length gt 0>>
<h4>Activities</h4>
<ul>
<<for _task range _activityTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>>
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
/* --- Display Interaction Tasks --- */
<<if _interactionTasks.length gt 0>>
<h4>Interaction</h4>
<ul>
<<for _task range _interactionTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>> /* This will process "Talk to <<print $gfName>>..." */
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
/* --- Display Cleaning Tasks --- */
<<if _cleaningTasks.length gt 0>>
<h4>Cleaning</h4>
<ul>
<<for _task range _cleaningTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>>
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
/* --- Display Other Tasks --- */
<<if _otherTasks.length gt 0>>
<h4>Other</h4>
<ul>
<<for _task range _otherTasks>>
<li>
<<if _task.nameTemplate>>
<<print Wikifier.wikifyEval(_task.nameTemplate)>>
<<else>>
<<print _task.name>>
<</if>>
</li>
<</for>>
</ul>
<</if>>
<<else>>
<p>You have no outstanding tasks.</p>
<</if>>
<div style="text-align: center; margin-top: 1.5em;">
<<button "Close">>
<<run Dialog.close()>>
<</button>>
</div>
/* Add any preprocessing events here, make sure to include day */
<<if $tasks.some(t => t.category === "Cleaning") and ($talkedtoday is true or $day gte 2) and $gfLocation neq "Your Bedroom" and not ($day is 4 and $talkcount is 1)>>
<<goto "Talk_GF_NeedCleaning">>
/* Day 1 */
<<elseif $day is 1>>
<<if $talkedtoday is false>>
<<include Talk_D1_GF_Intro>>
<<elseif $tasks.some(t => t.key === "moisturizer")>>
<<include Talk_D1_GF_No_Moist>>
<<elseif $cleanliness is "Spotless and Fresh!" and !$tasks.some(t => t.key === "shower") and $gfLocation !== "Living Room" and $gfLocation !== "Hmm...">>
<<include Talk_D1_GF_After_Shower>>
<<elseif $tasks.length is 1 and $tasks[0].key is "talkGfSleep" and $cleanliness is "Spotless and Fresh!">>
<<include Talk_D1_GF_LR_Night>>
<<elseif $tasks.length is 0 and $cleanliness is "Spotless and Fresh!">>
<<include Talk_D1_GF_Sleep>>
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* Day 2 */
<<elseif $day is 2>>
<<if $talkedtoday is false>>
<<include Talk_D2_GF_StartDay>> /* Sets talkcount to 1 */
<<elseif $talkcount is 1 and $shopevent is false>>
<<include Talk_D2_GF_Condom>> /* Sets talkcount to 2*/
<<elseif $talkcount is 2>>
<<include Talk_D2_GF_ShoppingInvite>> /* Sets talkcount to 3 */
<<elseif $talkcount is 3 and $shopevent is false>>
<<include Talk_D2_GF_ShirtReact>>/* Sets talkcount to 4*/
<<elseif $talkcount is 4 >>
<<include Talk_D2_GF_NoCondom>> /* Sets talkcount to 5*/
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* Day 3 */
<<elseif $day is 3>>
<<if $talkedtoday is false>>
<<include Talk_D3_GF_Morning>>/* Sets talkcount to 1 */
<<elseif $talkcount is 1>>
<<include Talk_D3_GF_PostChoresInvite>>/* Sets talkcount to 2 */
<<elseif $talkcount is 2>>
<<include Talk_D3_GF_Makeup>>/* Sets talkcount to 3 */
<<elseif $talkcount is 3>>
<<include Talk_D3_GF_JeansReact_Shave>>/* Sets talkcount to 4 */
<<elseif $talkcount is 4>>
<<include Talk_D3_GF_Intimate>>/* Sets talkcount to 5 and sleeptime */
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* Day 4 */
<<elseif $day is 4>>
<<if $talkedtoday is false>>
<<include Talk_D4_GF_OnBed>>/* Sets talkcount to 1 */
<<elseif $talkcount is 1>>
<<include Talk_D4_GF_After_Shower>>/* Sets talkcount to 2 */
<<elseif $talkcount is 2>>
<<include Talk_D4_GF_Movie_Invite>>/* Sets talkcount to 3 */
<<elseif $talkcount is 3>>
<<include Talk_D4_GF_Movie_Night>>/* Sets talkcount to 4 */
<<elseif $talkcount is 4>>
<<include Talk_D4_GF_Night_Talk>>
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* Day 5 */
<<elseif $day is 5>>
<<if $talkedtoday is false>>
<<include Talk_D5_GF_Routine>>/* Sets talkcount to 1 */
<<elseif $talkcount is 1>>
<<include Talk_D5_GF_Skincare>>/* Sets talkcount to 2 */
<<elseif $talkcount is 2>>
<<include Talk_D5_GF_Assist_Hair>>/* Sets talkcount to 3 */
<<elseif $talkcount is 3>>
<<include Talk_D5_GF_Assist_Clothes>>/* Sets talkcount to 4 */
<<elseif $talkcount is 4>>
<<include Talk_D5_GF_BJ>>
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* Day 6 */
<<elseif $day is 6>>
<<if $talkedtoday is false>>
<<include Talk_D6_GF_Morning_Plans>>/* Sets talkcount to 1 */
<<elseif $talkcount is 1>>
<<include Talk_D6_GF_Evening_Return>> /* Sets talkcount to 2 */
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* Day 7 */
<<elseif $day is 7>>
<<if $talkedtoday is false>>
<<include Talk_D7_GF_Morning_Privacy>>/* Sets talkcount to 1 */
<<elseif $talkcount is 1>>
<<include Talk_D7_GF_New_PJ>> /* Sets talkcount to 3 */
<<elseif $talkcount is 3>>
<<include Talk_D7_GF_PJ_Check>> /* Sets talkcount to 4 */
<<elseif $talkcount is 4>>
<<include Talk_D7_GF_Night_Fuck>> /* Sets talkcount to 5 */
<<else>>
<<include Talk_GF_Already_Talked>>
<</if>>
/* End for preprocessing events */
<<else>>
<<link "Something went wrong or end of content" $currentRoom>><</link>>
<</if>>/* --- Day 1 --- */
<<if $day is 1>>
<<if $unpacked is false>>
<<include Act_D1_Unpack_Bags>>
<<else>>
I don't know how you got here. Something went wrong, I think.
<</if>>
<</if>>
/* --- Day 2 --- */
<<if $day is 2>>
<<if $shopevent is true>>
<<set $tempEvent = { configPassage: "Act_D2_Shopping"}>>
<<include ShoppingEvent_Display>>
<<else>>
I don't know how you got here. Something went wrong, I think.
<</if>>
<</if>>
/* --- Day 3 --- */
<<if $day is 3>>
<<if $shopevent is true>>
<<set $tempEvent = { configPassage: "Act_D3_Shopping"}>>
<<include ShoppingEvent_Display>>
<<else>>
I don't know how you got here. Something went wrong, I think.
<</if>>
<</if>>
/* --- Day 7 --- */
<<if $day is 7>>
<<if $shopevent is true>>
<<include Talk_D7_GF_PJ_Shop>>
<<else>>
I don't know how you got here. Something went wrong, I think.
<</if>>
<</if>><div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Hey you. Come here. <br>*(She pulls him into a brief, warm hug)* <br>Welcome home... officially, I guess.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey. <br>*(He returns the hug)* <br>Thanks, $gfName. Seriously. For... everything. It still feels weird, imposing like this.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Shh, none of that. I know it's rough right now, losing your job and then the apartment hitting you all at once. It sucks, and I'm really sorry you're dealing with it. But you're not imposing, okay? I want you here. We'll get through it.
</div>
</div>
<div class="room-gf-presence">
<img src="images/d1aff.png" alt="$gfName smiling at the door">
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I know... it's just... a lot. I feel like dead weight.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
You're not dead weight. But... <br>*(She pulls back slightly, her expression still kind but focused)* <br>...while you're getting sorted, it probably would help both of us if we have a little structure here. You know, just so things run smoothly? This is my space too, and I function better with some order.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah? Like what? I don't want to mess things up for you.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Nothing major! Just... basic stuff. Keep the common areas tidy, you know, bathroom, kitchen. Let me know if you're going to be out late or have plans, just so I know what's going on. And, well... //She hesitates slightly// ...you know the deal with the spare room, right?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
For your parents? Yeah, I get it. My official 'zone'. No problem, really. I appreciate you navigating that for me.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good. See? Simple stuff. It just helps me feel like things are under control, which helps me relax, which helps us. <br>*(She reaches out and squeezes his hand)* <br>Mostly, I just want you to feel safe and settled here while you figure out your next steps. Don't stress about repaying me or anything like that right now. Your only job is to take care of yourself.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay. Okay, I can do that. Tidy, communicate, spare room theater for the parents. Got it. Thank you, $gfName. Really.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile widens, becoming genuinely warm)* <br>Good. Now, stop looking like the world ended. We've got this. You've got this. And I've got you. <br>*(She leans in for a sweet kiss)* <br>Now, let's get you properly settled in your... official zone. For now you should go unpack your bags and, sorry to say, take a shower.
</div>
</div><<nobr>>
<<set $tasks = [
clone(setup.taskDefinitions.shower),
clone(setup.taskDefinitions.unpack)
]>>
<<set $cleanliness = "You stink!">>
<<set $unpacked = false>>
<<set $talkcount to 1>>
<<set $talkedtoday to true>>
<<set $gfLocation to "$gfName Bedroom">>
<<set $introtalk to true>>
<</nobr>>
<div class="room-actions">
<<link "Return to your room">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<div class="story-text-area">
You find $gfName relaxing, scrolling through her phone. Taking a breath, you walk over, wanting to connect for a moment.
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey, $gfName. Got a sec? Just wanted to... talk for a bit, if you're not too busy.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejsmilesgrug.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She immediately puts her phone down, turning her full attention to you with a welcoming smile)* <br>Of course, $mcName. Always have time for you. What's on your mind? Everything okay?
</div>
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, mostly. Just... still adjusting, you know? Wanted to check in. See how you are doing with... well, with me being here like this.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejtakehand.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She reaches out and takes your hand, her touch warm and reassuring, but her gaze is firm)* <br>Sweetie, I'm fine. Really. My main concern is you. Are you feeling comfortable? Settling in? Because that's what matters most right now. <br>*(She gives your hand a gentle squeeze)* <br>I meant what I said: I want this to feel like home for you, even with the temporary setup. No awkwardness allowed.
</div>
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
You keep saying that, and I appreciate it. It's... getting easier. You're making it easier. Just feels weird not pulling my own weight.
</div>
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She leans in slightly, her expression earnest but definite)* <br>Shh. Stop that line of thinking right now. We're a team, and right now, my role is supporting you. Your role is to let me, and to focus on getting back on your feet without adding stress about 'owing' me anything. //Her tone softens slightly// Just relax into it, okay? Let me take care of things. Let me take care of you. That's what makes me feel good.
</div>
</div>
<div class="story-text-area">
She holds your gaze for a moment longer, her confidence a comforting anchor, even as it subtly reinforces the dynamic. Then she smiles warmly again.
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
So, unless there's something specific bothering you that needs fixing, let's put the worrying aside for now? Maybe it would be good to focus on any tasks you have. I am always here for you if you need me.
</div>
</div>
<div class="room-actions">
<<link "I should head back">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div><div class="room-container"> <comment>/* Using room container for consistent padding/layout */</comment>
<div class="story-text-area"> <comment>/* Using the main text area for internal monologue */</comment>
$mcName carefully folded a worn t-shirt, placing it into one of the empty dresser drawers in the spare room. Unpacking felt strange, almost like playing house but with higher stakes. Each item pulled from his duffel bag – the pair of blue jeans with holes in them, stained white shirts, the slightly-too-loud shirts he favored – seemed out of place here in $gfName's tidy, organized world. A familiar pang of awkwardness hit him; he was a guest, a dependent, relying entirely on her generosity. It wasn't a comfortable feeling, that constant weight of owing someone so much.
<br>
<div class="room-gf-presence">
<img src="images/bedroom/unpack.jpg" alt="Unpacking bags">
</div>
<br>
But then, thinking of $gfName, the discomfort eased, replaced by a warm tide of affection and profound gratitude. How had he gotten so lucky? He replayed their last conversation, her easy reassurance as she’d offered the room, brushing off his apologies. She just got him, in a way no one else ever really had. He remembered the fumbling conversations and missed cues that had characterized his attempts at dating before her. He'd always felt like background noise, easily ignored. Yet $gfName saw him, chose him, and now, when his world had crumbled, she was his anchor, his safe harbor.
<br><br>
Looking around the bare room, he knew it didn't matter that it wasn't truly his. Being here, being with her, sharing her life even under these strained circumstances... it was everything. Whatever came next, whatever challenges arose, he felt a fierce determination to be worthy of her kindness, to show her how much her love and support meant. He owed her the world, and he loved her more than he could ever properly express.
</div>
<<set $unpacked to true>>
<<set $tasks = $tasks.filter(t => t.key !== "unpack")>>
<div class="room-actions">
<<link "Return to your room">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
</div><div class="room-container">
<div class="story-text-area"> <comment>/* Use this area for scene description outside bubbles */</comment>
You step out of the steamy bathroom, tightly wrapping the towel around your waist, only to nearly bump into $gfName in the hallway. She smiles, looking you up and down with an appreciative glint in her eye.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Feeling refreshed, $mcName? You look good all steamy like that... almost makes me want to ditch my plans and just relax with you for a bit.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Uh, yeah. Thanks, $gfName. It was good. Just heading back to my room to get dressed.
</div>
</div>
<div class="story-text-area">
She steps closer, ignoring your slight awkwardness, and wraps her arms around your bare shoulders, pulling you into a warm, firm hug. Her body feels soft and inviting against yours. After a moment, feeling a surge of affection, you raise a hand to gently cup her cheek.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Mmm, careful there... your hands are so rough, honey. Look at them. You really need to take better care of your skin, especially your hands if you want to touch me like that.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejrubhand.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
*(She pulls away slightly, her expression shifting from warm to mildly concerned.)*<br> Before you can respond, she darts quickly into the bathroom and returns holding a bottle of familiar-looking hand and body lotion – definitely one of hers. She presses it firmly into your free hand.
</div>
<div class="room-gf-presence">
<img src="images/items/lotion.png" alt="lotion">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName"> <comment>/* REPLACE IMAGE PATH */</comment>
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Here. Use this every day, okay? Especially right after you shower when your skin absorbs it best. I want your hands to be soft when you touch me. Consider it part of settling in here.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName"> <comment>/* REPLACE IMAGE PATH */</comment>
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Anyway, I've got to run for now. I'll pop by your room later tonight before bed, okay?<br>Oh, and $mcName, make sure you do this everyday.
</div>
</div>
<div class="story-text-area">
With a final, assertive pat right on your towel-covered butt that leaves you slightly stunned, she gives you a quick wink and heads off towards her own room, leaving you standing there holding the lotion, the warmth of her hug still lingering.
</div>
<<set $tasks = [
clone(setup.taskDefinitions.moisturizer),
clone(setup.taskDefinitions.talkGfSleep)
]>>
/* Activate the flag so moisturizer and showering becomes a recurring task starting Day 2++ */
<<set $taskMoisturizerActive to true>>
<<set $taskShowerActive to true>>
<<set $gfLocation to "Kitchen">>
<<modifyArousal 10>>
<<run UI.update("StoryCaption")>>
<div class="room-actions">
<<link "Slightly confused and slightly turned on, you continue to your room...">>
<<goto "Your Bedroom">>
<</link>>
</div>
</div><div class="story-text-area">
<br>
<div class="room-gf-presence">
<video src="images/vids/ejsitisofasmile.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
You find $gfName in the living room, sitting on the sofa. She looks up as you approach, her expression softening into a welcoming smile. You walk over, hyper-aware of the smooth feeling of your own skin under your clothes and the faint vanilla scent clinging to you.
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey. Uh... that moisturizer... It's definitely... different. Feels smoother. I guess you were right about it.
</div>
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Of course I was right, silly. Why do you think I use it? Come here, let me properly appreciate the results.
</div>
</div>
<div class="room-gf-presence">
<img src="images/livingroom/handfeel.png" alt="$gfName engrossed in her phone">
</div>
<div class="story-text-area">
You sit beside her, the plush cushion sinking slightly, bringing you into her personal space. The warmth from her body is noticeable. She wastes no time, reaching out to take your hand. Her manicured fingers trace slow, deliberate paths up your forearm, the feather-light touch sending unexpected shivers through you.
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Mmm, yes. See? Much, much nicer. <br>*(She turns your arm over, her thumb stroking your now sensitive and smooth skin. Her gaze locks with yours, warm but carrying an undercurrent of intensity)*<br> So much better this way. Soft... receptive. <br>*(She leans closer, her voice dropping almost to a purr as she inhales near your neck)* <br>And you smell so good... like you belong right here, with me.
</div>
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Your breath catches. Heat floods your face and neck)* <br>$gfName... I... You... you really like it this much?
</div>
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She gives a slow, knowing smile that makes your stomach do a nervous flip. Her hands leaves your arm, gliding over your chest almost before coming to rest deliberately on your crotch.)*<br> //The contact, even through your jeans, is startlingly intimate.// I ''love'' it when you listen, $mcName. When you let me guide you. When you trust me enough to take care of yourself the way I ask. It shows... potential. And it makes me want to reward that trust. <br>*(She stands up and gets on her knees in front of you, continuing to rub your jeans)*
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejrubjeans.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
Your heart is pounding now, a frantic drum in your chest. Her unwavering gaze holds yours, confident, challenging, promising. You try to swallow, but your mouth is dry. She continues to rub you crotch as your dick swells.
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Relax... <br> //The brush of her hands against your cock, even through fabric, is almost painful in its intensity// <br> Just let me... show you how much I appreciate it...
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejrubdickjeans.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
A sharp, choked gasp forces its way out of you as her fingers find and press gently against your fully erect cock under your pants. An electric current seems to arc through your entire body. Heat pools low and heavy in your belly, coiling tight like a spring wound too far. The sensation builds, a relentless wave surging stronger and stronger, threatening to crash over you any second. You seize up, eyes wide with panic, feeling the last vestiges of control evaporating. The overwhelming physical response grips you, tightening every muscle, stealing your breath.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejremoveshirt.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
$mcName, I know how stressful the last week has been for you. I am here to support you and I will make sure to take very good care of you <br>*(she satnds up to remove her shirt)*
</div>
</div>
<div class="story-text-area">
You now feel it. You are not sure if it is due to all of the stress, just how ''stunning'' $gfName looks, or maybe you have just been lacking in intimacy lately but you start to feel small spasms coming. You look at $gfName and you can clearly see hunger in her eyes. She wants you right now. Now is your time to shine but you can't hold it! You are nearing an orgasm just by her taking off her shirt! //This is horrible//, you think
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You pull back abruptly, almost scrambling off the couch, face flushed)* <br>I... uh... I gotta go! Sorry! Just remembered... something! <br>*(You avoid her gaze, utterly mortified)*
</div>
</div>
<div class="story-text-area">
As you enter your room, you practically slam the door behind you, leaning back against it, chest heaving, arousal diminishing but still increased. Your heart is racing, and you can feel heat radiating from your face and neck. //What the hell just happened?//
<br><br>
One minute, $gfName was touching you, praising you, making you feel... wanted, desired in a way that sent sparks through your entire body. The next... it was just too much, too fast. That wave of sensation crashed over you with absolutely no warning, no control. You just... lost it. And then you ran. Like a terrified kid.
<br><br>
God, the embarrassment is searing. //How could you react like that?// Just her touch and you nearly... You clamp down on the thought, angry at life. What must she think? After she was being so nice, so encouraging, finally showing you that affection you've been craving... and you bolted?
<br><br>
Was it just nerves? The stress of losing your job, moving in here, feeling so dependent on her for everything? Maybe all that pressure just short-circuited something upstairs? Or maybe... maybe it was just pathetic. A complete failure to handle intimacy when it was finally offered.
<br><br>
You groan quietly, running a hand through your hair. You wanted things to go well, to feel close to her, to show her you appreciated her... and instead, you acted like an idiot. You have no idea how she took it – was she amused? Annoyed? Disappointed?
<br><br>
The smooth feeling of the lotion on your skin, a reminder of the sequence of events that led to this humiliating moment. You need to calm down. But the questions linger, swirling with anxiety and embarrassment. How are you going to face her now?
</div>
<<set $tasks to []>>
<<modifyArousal 10>>
<<run UI.update("StoryCaption")>>
<div class="room-actions">
<<link "Prepare to sleep...">>
<<set $gfLocation to "Hmm...">>
<<goto "Your Bedroom">>
<</link>>
</div>
<div class="story-text-area">
The bedroom door opens softly, and $gfName peeks in.
</div>
<div class="room-gf-presence">
<img src="images/bedroom/day1sleep1.png" alt="$gfName smiling at the door">
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh, hey $gfName ... Look, uh, about earlier... in the living room... I just wanted to say, I...
</div>
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Shh. Not now, $mcName. You can't possibly be comfortable trying to sleep in those.
</div>
</div>
<div class="story-text-area">
She steps fully into the room and places a set of folded pajamas gently on the foot of the bed.
</div>
<comment>/* --- Display Pajamas --- */</comment>
<div style="margin: 1em 0; text-align: center;">
<img src="images/clothing/sleep/sleep_pj_blue_shirt.png" alt="Blue Pajama Shirt" style="max-height: 350px; border: 1px solid #ccc; margin: 5px;"><br>
<img src="images/clothing/sleep/sleep_pj_blue_pants.png" alt="Blue Pajama Pants" style="max-height: 400px; border: 1px solid #ccc; margin: 5px;">
</div>
<div class="story-text-area">
You look down at the matching blue pajama shirt and pants. You usually just sleep in your boxers; wearing full pajamas will definitely be a change. You clear your throat, trying again to explain yourself.
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Right, pajamas... thanks, $gfName. But really, about before, I just feel like I should...
</div>
</div>
<div class="room-gf-presence">
<img src="images/bedroom/day1sleep2.png" alt="$gfName a little annoyed">
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName - Assertive"> <comment>/* Optional: Change expression image */</comment>
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
I said not now, $mcName. You look exhausted, and frankly, dwelling on whatever happened won't help you sleep. Change. Get some rest. We can talk tomorrow when you're thinking more clearly.
</div>
</div>
<div class="story-text-area">
Her tone is still quiet, but carries an undeniable edge of finality. It’s not a suggestion. She gives you one last meaningful look before turning and quietly closing the bedroom door behind her, leaving you alone with your thoughts and the pajamas. <br>
<br> The silence in the room feels heavy now. Did she intentionally enter my room wearing that to tease me? To make me feel worse? No.. it had to be a simple coincidence. <br>
<br>Your eyes drift back to the folded clothes at the foot of the bed. The soft cotton looks comfortable enough, certainly more so than the jeans you're still wearing. But it also feels like another small concession, still, arguing seemed pointless Maybe she was right – sleep first, awkward conversations later. You sigh, pushing back the covers properly this time.<br><br> //Might as well get comfortable.//
</div>
/% --- Update Clothing State --- %/
<<silently>>
<<run $ownedClothing.add("sleep_pj_blue_shirt")>>
<<run $ownedClothing.add("sleep_pj_blue_pants")>>
<<set $wornTop to "sleep_pj_blue_shirt">>
<<set $wornBottoms to "sleep_pj_blue_pants">>
<<if $wornShoes !== null>><<set $wornShoes to null>><</if>>
<<if $wornSocks !== null>><<set $wornSocks to null>><</if>>
<<calculateScore>>
<<modifyArousal 10>>
<<set $savedOutfits.sleep.outer.top to "sleep_pj_blue_shirt">>
<<set $savedOutfits.sleep.outer.bottom to "sleep_pj_blue_pants">>
<<set $savedOutfits.sleep.outer.shoes to null>>
<<set $savedOutfits.sleep.under.chest to null>>
<<set $savedOutfits.sleep.under.underwear to "boxer_briefs_grey">>
<<set $savedOutfits.sleep.under.socks to null>>
<<set $enableoutfit to true>>
<<run UI.update("StoryCaption")>>
<<set $sleeptime to true>>
<</silently>>
<div class="room-actions">
<<link "Continue...">>
<<goto "Your Bedroom">>
<</link>>
</div>
<div class="story-text-area">
Feeling clean and with the faint scent of <<print $gfName>>'s lotion on your skin, you find her relaxing with her tablet. She looks up as you approach, a warm, genuinely pleased smile lighting up her face.
</div>
<div class="room-gf-presence">
<img src="images/gf/clothed2.jpg" alt="<<print $gfName>> smiling warmly">
/% Placeholder image path - replace with actual image %/
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Morning, <<print $gfName>>.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She sets down her tablet, her eyes crinkling at the corners)* <br>
Morning, <<print $mcName>>! Much better. See? Doesn't it feel good to start the day fresh? And you smell lovely – that moisturizer really suits you. I knew it would.
/% Praises MC for completing hygiene tasks %/
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You blush slightly at the compliment)* <br>
Uh, thanks. Yeah, it feels... cleaner. Definitely different than usual.
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/clothed3.jpg" alt="<<print $gfName>> explaining chores kindly">
/% Placeholder image path - Add a second relevant image here %/
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile remains, but her tone becomes a bit more business-like, though still warm)* <br>
Good. Taking care of yourself is important. And speaking of taking care of things... now that you're settled in a bit, I was thinking we could tackle keeping the apartment tidy.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, absolutely. I want to help out. What needs doing?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods approvingly)* <br><br>
Okay, perfect. Just the usual spots to keep everything fresh. For today, let's make sure we cover:
<br> - <<print setup.taskDefinitions.cleanKitchen.name>>
<br> - <<print setup.taskDefinitions.cleanBathroom.name>>
<br> - <<print setup.taskDefinitions.cleanLiving.name>>
<br> - <<print setup.taskDefinitions.cleanWorkout.name>>
<br> - And definitely <<print setup.taskDefinitions.cleanOwnRoom.name>>.<br>
<br>*(She gives your arm a light, encouraging squeeze)* <br>
It won't take long. I appreciate you being proactive about this, <<print $mcName>>. It really helps me relax knowing things are taken care of.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Sounds like a plan. Kitchen, bathroom, living room, workout room, my room. Consider it done. It's the least I can do while I stay here rent free.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile widens again)* <br>
Excellent. That's what I like to hear. We can discuss later about paying for anything, for now, just helping me around this place everyday is plenty while you try to get yourself back on your feet. Feel free to relax for a bit first. You've earned it after getting yourself ready so nicely.
</div>
</div>
<<silently>>
/% --- Update state after the conversation --- %/
<<set $talkedtoday to true>>
<<set $taskCleanActive to true>>
/* Add the explicitly mentioned cleaning tasks */
<<run $tasks.push(clone(setup.taskDefinitions.cleanKitchen))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanBathroom))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanLiving))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanWorkout))>>
<<run $tasks.push(clone(setup.taskDefinitions.cleanOwnRoom))>>
<<set $talkcount += 1>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<run UI.update("StoryCaption")>> /* Update sidebar to show new tasks */
<</silently>>
<div class="room-actions">
<<link "Alright, sounds good.">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<div class="story-text-area">
You see <<print $gfName>> relaxing nearby and decide to check in with her, maybe just chat for a bit. She glances up as you approach, offering a polite but slightly reserved smile.
</div>
<div class="room-gf-presence">
<img src="images/gf/clothed4.jpg" alt="<<print $gfName>> looking expectant">
/% Placeholder image path - replace with actual image %/
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey, <<print $gfName>>. Just wanted to see how you're doing.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile doesn't quite reach her eyes this time. She tilts her head slightly.)* <br>
I'm doing fine, <<print $mcName>>. But... are you finished with the chores already? The ones we talked about? I know I mentioned relaxing, but I didn't mean all day.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh, uh... not quite yet. I was just taking a quick breather. I'll get back to them.
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/face1.jpg" alt="<<print $gfName>> giving instructions">
/% Placeholder image path - Add a second relevant image here %/
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her expression firms, kind but definite. She doesn't raise her voice, but there's a clear expectation in her tone.)* <br>
Okay, honey, but let's be clear. We agreed you'd help out, and I laid out what needs doing today. I appreciate you wanting to chat, I really do, but the agreement was that we'd tackle those responsibilities first. Relaxation comes after the work is done.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Right, yeah. You're right. Sorry. I'll... I'll go finish up.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods, a hint of the warmer smile returning now that the expectation is set.)* <br>
Good boy. I know you can get them done quickly if you focus. Come find me when you're actually finished, okay? Then we can relax together properly. Go on now.
</div>
</div>
<div class="room-actions">
<<link "Okay, back to the chores..." $currentRoom>><</link>>
</div>
<<ChoreFailCheck>>
<div class="room-container">
<div class="room-header">
<h2>Cleaning Your Room</h2>
</div>
<div class="story-text-area">
You turn your attention to the spare room – your room. It doesn't take long; there isn't much here to actually clean. You make the bed, ensuring the covers are smooth and wrinkle-free. You tidy the few clothes you unpacked onto the dresser, folding them neatly.
<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('clr1.jpg', 'clr2.jpg', 'clr3.jpg', 'clr4.jpg')">
</div>
<br>
A quick dusting of the bare desk surface and wiping down the windowsill completes the task. The room feels even more impersonal now, stripped of any minor disarray that might have suggested actual living. It serves its purpose as your designated space, clean and unobtrusive, just as $gfName prefers. It's less like cleaning your own room and more like maintaining a guest space according to someone else's standards.
</div>
<<silently>>
/* Update the sidebar UI */
<<if $tasks.some(t => t.category === "Hygiene")>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<else>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<</if>>
<</silently>>
<div class="room-actions">
<<link "Finish cleaning your room" "Your Bedroom">>
/* Remove the 'cleanOwnRoom' task from the list */
<<set $tasks = $tasks.filter(t => t.key !== "cleanOwnRoom")>>
<<run UI.update("StoryCaption")>>
<</link>>
</div>
</div><<ChoreFailCheck>>
<div class="room-container">
<div class="room-header">
<h2>Cleaning the Kitchen</h2>
</div>
<div class="story-text-area">
You tackle the kitchen task. Wiping down the spotless countertops feels almost redundant, but $gfName expects thoroughness. You scrub the sink until the stainless steel gleams, check the fridge for anything expired (finding nothing, of course), and make sure the coffee maker is fingerprint-free.<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('clk1.jpg', 'clk2.jpg', 'clk3.jpg', 'clk4.jpg')">
</div>
<br>
It's meticulous work in a space that already feels more like a showroom than a lived-in kitchen. Every polished surface reflects your own slightly weary expression. You remind yourself that contributing like this is the least you can do, given the circumstances. Hopefully, $gfName appreciates the effort.
</div>
<br><br>
<<silently>>
/* Update the sidebar UI */
<<if $tasks.some(t => t.category === "Hygiene")>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<else>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<</if>>
<</silently>>
<div class="room-actions">
<<link "Finish cleaning the kitchen" "Kitchen">>
/* Remove the 'cleanKitchen' task from the list */
<<set $tasks = $tasks.filter(t => t.key !== "cleanKitchen")>>
<<run UI.update("StoryCaption")>>
<</link>>
</div>
</div>
<<ChoreFailCheck>>
<div class="room-container">
<div class="room-header">
<h2>Cleaning the Bathroom</h2>
</div>
<div class="story-text-area">
You start with the mirror, wiping away any stray splashes until it's perfectly clear. Cleaning the counter involves carefully navigating around $gfName's extensive collection of bottles and tubes – a task requiring almost surgical precision not to disturb her arrangement.<br><br>
<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('clbr1.jpg', 'clbr2.jpg', 'clbr3.jpg', 'clbr4.jpg')">
</div>
<br>
You scrub the shower stall, the scent of the cleaner mixing oddly with the lingering floral notes of her body wash. Cleaning the toilet feels like the most mundane, yet somehow most necessary, part of the chore. It's intimate, cleaning the space where she performs her daily routines. You try not to think about it too much, focusing instead on making sure everything is spotless.
</div>
<br><br>
<<silently>>
<<if $tasks.some(t => t.category === "Hygiene")>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<else>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<</if>>
/* Update the sidebar UI */
<</silently>>
<div class="room-actions">
<<link "Finish cleaning the bathroom" "Bathroom">>
/* Remove the 'cleanBathroom' task from the list */
<<set $tasks = $tasks.filter(t => t.key !== "cleanBathroom")>>
<<run UI.update("StoryCaption")>>
<</link>>
</div>
</div><<ChoreFailCheck>>
<div class="room-container">
<div class="room-header">
<h2>Cleaning the Living Room</h2>
</div>
<div class="story-text-area">
You carefully plump the plush throw pillows on the sofa, arranging them just so. You refold the soft cashmere throw blanket, making sure it drapes artfully over the armrest exactly as $gfName usually leaves it.
<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('cllr1.jpg', 'cllr2.jpg', 'cllr3.jpg', 'cllr4.jpg')">
</div>
<br>
Dusting the minimalist entertainment center and the curated objects on the shelves feels like handling museum pieces. You vacuum the thick, high-pile rug, the machine's hum filling the otherwise quiet space. It's comfortable here, but it's undeniably her comfort, her style.
</div>
<<silently>>
<<if $tasks.some(t => t.category === "Hygiene")>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<else>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<</if>>
<</silently>>
<<if $day is 2>>
<div class="room-actions">
<<link "Finish cleaning the living room" "Talk_D2_GF_Condom">>
<<set $gfLocation to "Living Room">>
<</link>>
</div>
<<else>>
<div class="room-actions">
<<link "Finish cleaning the living room" "Living Room">>
/* Remove the 'cleanLiving' task from the list */
<<set $tasks = $tasks.filter(t => t.key !== "cleanLiving")>>
/* Update the sidebar UI */
<<run UI.update("StoryCaption")>>
<</link>>
</div>
<</if>><<ChoreFailCheck>>
<div class="room-container">
<div class="room-header">
<h2>Cleaning the Workout Room</h2>
</div>
<div class="story-text-area">
The exercise room is already quite tidy, but the task requires diligence. You wipe down the treadmill and stationary bike with disinfectant wipes, paying attention to the handlebars and control panels. The faint scent of cleaner momentarily overpowers the neutral smell of the room.
<br>
<div class="room-gf-presence">
<img @src="'images/tasks/' + either('clwr1.jpg', 'clwr2.jpg', 'clwr3.jpg', 'clwr4.jpg')">
</div>
<br>
You check the rack of dumbbells, ensuring they're ordered correctly, mostly the lighter, pastel-coated ones $gfName uses. You straighten the stack of yoga mats in the corner. It's a quick job compared to the other rooms, reinforcing that this space is functional and maintained.
</div>
<<silently>>
<<if $tasks.some(t => t.category === "Hygiene")>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<else>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<</if>>
/* Update the sidebar UI */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Finish cleaning the workout room" "Exercise Room">>
/* Remove the 'cleanWorkout' task from the list */
<<set $tasks = $tasks.filter(t => t.key !== "cleanWorkout")>>
<<run UI.update("StoryCaption")>>
<</link>>
</div>
</div> <div class="story-text-area">
You find $gfName just finishing up her Yoga.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey $gfName, just wanted to let you know I finished up all the chores for today.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejhappy.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Excellent, $mcName! Good job getting them done. Remember, keeping things tidy like this every day really helps keep the place feeling nice for both of us.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Since you did so well, I was thinking... how about a little reward? I've noticed your shirt is looking a bit... well, loved. <br>*(She smiles warmly)*<br> I'd like to buy you a nice new one. Maybe something a bit different?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh! Uh, wow, $gfName. Thanks. You don't have to do that.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejlookphone.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
I want to. Consider it an investment in my handsome boyfriend. Now, I just need to finish up something quickly here. Why don't you head back to your room for a bit? Just call me over when you're ready to go shopping, okay? I already have some ideas in my AmZon wishlist.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay... yeah. Sounds good. I'll call you when I'm ready. Thanks again, $gfName.
</div>
</div>
<<silently>>
/% --- Update state after the conversation --- %/
<<set $talkcount += 1>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<set $shopevent to true>>
<<run UI.update("StoryCaption")>> /* Update sidebar to show new tasks */
<</silently>>
<div class="room-actions">
<<link "I could use a new shirt...">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<div class="story-text-area">
You head into the kitchen, hoping for a casual chat. $gfName is there, wiping down the counter. She glances up as you enter, her expression neutral.
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey $gfName. Just... seeing what you were up to.
</div>
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She stops wiping for a moment, looking you over with an assessing gaze)* <br>$mcName. Before we chat, tell me – did you use that moisturizer I gave you after your shower?
</div>
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Ah... no. Not yet. I was going to, but I got sidetracked.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejannoyed.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her brow furrows slightly, and her tone becomes firm, losing its earlier warmth)* <br>Sidetracked? $mcName, it takes ten seconds. I specifically asked you to do that as part of settling in here properly. It wasn't just a suggestion. <br>*(She puts the cloth down and turns to face you fully, crossing her arms)* <br>Go do it. Now.
</div>
</div>
<comment>/* --- MC Speech --- */</comment>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay, okay. I'm going.
</div>
</div>
<comment>/* --- Girlfriend Speech --- */</comment>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good. //Her expression doesn't soften// Come back when you've actually done it. We can talk then.
</div>
</div>
<div class="story-text-area">
There's no room for argument in her voice. Her directive is clear, and the warmth she usually shows is noticeably absent, replaced by pointed expectation. It seems completing this small task is non-negotiable.
</div>
<div class="room-actions">
<<link "I should probably listen...">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<<set _eventConfig to {
passageName: "Act_D2_Shopping", /* Store name for reference */
slot: "tops",
itemKeys: ["button_long_blue", "polo_blue_short", "tshirt_blue"],
initialConversation: `
<div class="story-text-area">
You finally decide to head back to your room and relax, as asked you call $gfName into your room. She comes over and sits down right next to you, a bit closer than strictly necessary, making you aware of her presence. She opens the laptop on her lap, angling slightly towards you.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Hey Honey. Thinking about things... I know it's stressful for you right now, the job hunt and everything. But I need you to hear me on this: relax. Seriously. With my parents' help, I've got things covered financially, and I want to take care of you while you're sorting things out. It makes me feel good to support you like this. Just let me, okay?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I appreciate that, <<print $gfName>>, really. But it still feels... weird. Like I'm just freeloading. You don't have to buy me stuff or anything. I can manage with what I have for now.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She waves a dismissive hand, her smile tightening slightly)* <br>Nonsense. It's not about 'have to', it's about 'want to'. And frankly, part of taking care of you is making sure you look presentable. It reflects on both of us. Which brings me to... this. *(Her eyes pointedly fix on your current <<print _slot.replace("s","")>>)*
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
My <<print _slot.replace("s","")>>? What about it? It's comfortable.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She sighs softly, leaning in a bit conspiratorially but with an edge)*<br> Honey, be honest. It's... old. It's stained. It doesn't fit you that well anymore. It just looks... sloppy. It's not the image we want, is it? Especially not now. We need to project confidence, success, even if we're faking it a little. That <<print _slot.replace("s","")>> isn't helping.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I... I guess I hadn't really thought about it like that. It's just a <<print _slot.replace("s","")>>. It's not ''that'' bad, is it?
</div>
</div>
<div class="story-text-area">
She shakes her head firmly and turns the laptop screen fully towards you. The AmZon page is already loaded, showing the shirts she picked out.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Trust me, it is. But don't worry, I've already found some much better options. <br>*(Her tone becomes brighter, more decisive, leaving no room for argument)*<br> Look, these will suit you so much better. Modern, clean, a good fit... Just pick one you like the best. We'll order it right now, and the AmZon drone will have it here within the hour. Problem solved! Which one do you want?
</div>
</div>
`,
outcomeConversation: `
/* Use _chosenItemData, _oldItemData, _tempSlot from temp state */
<<if _chosenItemData>>
<div class="story-text-area">
You point to the <<print _chosenItemData.name>>. It looks decent enough, and arguing seems pointless.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Excellent choice! <br>*(She quickly clicks a few buttons on the laptop)*<br> Perfect. Ordered! AmZon Prime Drone should have it here in about an hour, maybe less. See? Easy. While we wait... <br>*(She navigates to a different page on the laptop)* <br> Look at this...
</div>
</div>
<div class="story-text-area">
She angles the screen so you can see. It's fashion tips for broad shoulder women.
<br>
<img src="images/activities/fashtip.jpg" alt="Laptop showing GF's tips"><br>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Why would you be looking at this, <<print $gfName>>? You are very petite.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She laughs lightly)*<br> I am now, but you never know how your body will shape as you age, so I like to be prepared. Helps me keep track of pretty things I might want someday if I lose this... form.
</div>
</div>
<div class="story-text-area">
$gfName keeps browsing through different clothing options, page after page. She gently nudges you every so often to keep you engaged.<br><br> Roughly an hour later, a distinct whirring sound approaches the window.
<br>
</div>
<div class="room-gf-presence">
<<set _drimg to random(1, 7)>>
<<set _drimg to "images/activities/drone" + _drimg + ".jpg">>
<img @src="_drimg" alt="Drone Delivery">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Ah, there it is! Right on time. I'll be right back.
</div>
</div>
<div class="story-text-area">
She gets up and heads out briefly, returning moments later with a standard AmZon package. She opens it quickly, pulling out the <<print _chosenItemData.name>>.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Here we go! And I paid extra for the AmZon 'Pre-Wash & Fold' service, so it's clean and ready to wear right now. Go on, try it on! Let's see how it looks.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Right now? Can't I wear it tomorrow?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Don't be silly, I want to see it! <br>*(She steps closer, holding the new shirt out.)*<br> When you hesitate, she reaches out playfully but firmly, grabbing the hem of your <<if _oldItemData>><<print _oldItemData.name>><<else>> old<<print _tempSlot.replace("s","")>> <</if>>.<br> Come on, off with the old, in with the new! I'll help.<br>*($gfName starts to lift your <<if _oldItemData>><<print _oldItemData.name>><<else>> old <<print _tempSlot.replace("s","")>> <</if>>, as if nothing is going to stop her.)*
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay, okay! Alright! I'm doing it.
</div>
</div>
<div class="story-text-area">
Sighing, you quickly pull off your <<if _oldItemData>> <<print _oldItemData.name>> <<else>> old <<print _tempSlot.replace("s","")>> <</if>> and slip on the new <<print _chosenItemData.name>>. It feels different - fresher, maybe a better fit, just as she said.
</div>
<div class="room-gf-presence">
<img @src="_chosenItemData.img" alt="You wearing the new <<print _chosenItemData.name>>">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her eyes light up, a genuine smile spreading across her face)* <br>See? Much better! Oh, that suits you perfectly, <<print $mcName>>. So much more... appropriate.<br> *(She deftly picks up your discarded <<if _oldItemData>> <<print _oldItemData.name>> <<else>> item <</if>>)* <br>Right then, I'll just... take care of this old thing for you. Definitely no need for it anymore.
</div>
</div>
<div class="story-text-area">
She bundles up your old item without a second glance and sets it aside, clearly destined for the trash later. It's gone from your wardrobe. She steps close again, placing her hands on your chest, smoothing the fabric of the new shirt.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
See how easy it is when you just let me help? You're in good hands here, <<print $mcName>>. Remember that. <br>*(She leans in and gives you a soft, lingering kiss. She leaves the room, leaving you in your new shirt)*
</div>
</div>
<div class="story-text-area">
//The shirt really seemed to have an effect. //
</div>
<<else>>
<span style="color:red; font-weight:bold;">Error displaying outcome: Cannot retrieve chosen item data.</span>
<</if>>
`
}>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "Bathroom")>>
<<run console.log("Entered ShoppingEvent_ProcessChoice passage.")>> /* DEBUG LOG */
/* --- Read temporary variables --- */
<<if typeof $tempEvent !== "undefined" && $tempEvent.chosenKey>> /* Check if variable and key exist */
<<set _chosenKey to $tempEvent.chosenKey>>
<<set _slot to $tempEvent.slot>>
<<set _slotVarName to $tempEvent.slotVarName>>
/* Handle potential null oldKey safely */
<<set _oldKey to ($tempEvent.oldKey !== null && $tempEvent.oldKey !== '') ? $tempEvent.oldKey : null>>
<<set _chosenItemData = getClothing(_slot, _chosenKey)>>
<<set _oldItemData = null>>
<<if _oldKey !== null>>
<<set _oldItemData = getClothing(_slot, _oldKey)>>
<</if>>
/* --- Perform Actions --- */
<<if _chosenItemData>> /* Only proceed if chosen item data is valid */
<<run console.log("Processing choice: Setting " + _slotVarName + " to " + _chosenKey)>>
<<run State.setVar(_slotVarName, _chosenKey)>> /* 1. Update worn item */
<<run console.log("Processing choice: Updating ownedClothing. Adding: " + _chosenKey + ", Removing: " + _oldKey)>>
<<run $ownedClothing.add(_chosenKey)>> /* 2a. Add new */
<<if _oldKey !== null>>
<<run $ownedClothing.delete(_oldKey)>> /* 2b. Remove old */
<</if>>
<<run console.log("Processing choice: Setting $shopevent to false")>>
<<set $shopevent to false>>
<<switch _slot>>
<<case "tops" "bottoms" "shoes">>
<<set $sidebarFilter to "Over">>
<<run console.log("Processing choice: Set $sidebarFilter to 'Over'")>> /* DEBUG LOG */
<<break>>
<<case "chest" "underwear" "socks">>
<<set $sidebarFilter to "Under">>
<<run console.log("Processing choice: Set $sidebarFilter to 'Under'")>> /* DEBUG LOG */
<<break>>
<<default>>
/* Optional: Keep current filter or default to 'Over' if slot type is unknown/new */
<<run console.log("Processing choice: Unknown slot type '" + _slot + "' for sidebar filter, leaving unchanged.")>>
<</switch>>
<<run console.log("Processing choice: Updating StoryCaption")>>
<<calculateScore>>
<<run UI.update("StoryCaption")>> /* 4. Update Sidebar Display (uses new $sidebarFilter value) */
/* --- Cleanup and Navigate --- */
<<unset $tempEvent>>
<<run console.log("Processing complete. Navigating to Your Bedroom.")>> /* DEBUG LOG */
<<goto "Your Bedroom">> /* 5. Go to final destination */
<<else>>
/* --- Error Condition if chosen item is invalid --- */
<span style="color: red; font-weight: bold;">Error: Could not process choice. Invalid item key selected: <<print _chosenKey>>.</span>
<<run console.error("ShoppingEvent_ProcessChoice Error: _chosenItemData is invalid for key " + _chosenKey)>>
<br><br>
[[Return -> Your Bedroom]]
<<unset $tempEvent>>
<</if>>
<<else>>
/* --- Error Condition if temp variable is missing --- */
<span style="color: red; font-weight: bold;">Error: ShoppingEvent_ProcessChoice reached without required data ($tempEvent). State may be inconsistent.</span>
<<run console.error("ShoppingEvent_ProcessChoice Error: $tempEvent is undefined or invalid.")>>
<br><br>
[[Return -> Your Bedroom]] /* Provide an escape route */
<<unset $tempEvent>> /* Still try to unset */
<</if>> <<set _configPassageName to $tempEvent.configPassage>>
<<if !_configPassageName>>
<span style="color:red">Error: ShoppingEvent_Display requires $tempEvent.configPassage to be set.</span>
<<stop>>
<</if>>
/* Include the specific config passage to load _eventConfig */
<<include _configPassageName>>
<<if typeof _eventConfig === "undefined">>
<span style="color:red">Error: Configuration object '_eventConfig' not found in passage '<<print _configPassageName>>'.</span>
<<stop>>
<</if>>
/* --- Set up derived variables --- */
<<set _slot to _eventConfig.slot>>
<<set _itemKeys to _eventConfig.itemKeys>>
<<set _slotVarName to "">>
<<set _currentWornKey to null>>
<<switch _slot>>
<<case "tops">> <<set _slotVarName to "$wornTop">> <<set _currentWornKey to $wornTop>>
<<case "bottoms">> <<set _slotVarName to "$wornBottoms">> <<set _currentWornKey to $wornBottoms>>
<<case "shoes">> <<set _slotVarName to "$wornShoes">> <<set _currentWornKey to $wornShoes>>
<<case "chest">> <<set _slotVarName to "$wornChest">> <<set _currentWornKey to $wornChest>>
<<case "underwear">> <<set _slotVarName to "$wornUnderwear">> <<set _currentWornKey to $wornUnderwear>>
<<case "socks">> <<set _slotVarName to "$wornSocks">> <<set _currentWornKey to $wornSocks>>
<<default>>
<span style="color:red">Error: Invalid slot '<<print _slot>>' in config '<<print _configPassageName>>'.</span>
<<stop>>
<</switch>>
/* --- Display Initial Content --- */
<div id="shopping-event-display">
<<print _eventConfig.initialConversation>>
<div class="shopping-choice-display">
<<for _key range _itemKeys>>
<<set _item to getClothing(_slot, _key)>>
<<if _item>>
<div class="shopping-choice-item">
<img @src="_item.img" @alt="_item.name">
/* --- TRY USING BUTTON + CAPTURE --- */
<<capture _key _slot _slotVarName _currentWornKey _configPassageName _item>>
<<button `_item.name` "ShoppingEvent_Outcome">>
<<run console.log("Shopping button clicked (in Display) for key: " + _key)>> /* DEBUG */
<<set $tempEvent to {
configPassage: _configPassageName, /* Pass config name along */
chosenKey: _key, /* Uses captured _key */
slot: _slot, /* Uses captured _slot */
slotVarName: _slotVarName, /* Uses captured _slotVarName */
oldKey: _currentWornKey /* Uses captured _currentWornKey */
}>>
<<run console.log("$tempEvent set:", JSON.stringify($tempEvent))>> /* DEBUG */
<</button>>
<</capture>>
/* --- END BUTTON + CAPTURE --- */
</div>
<<else>>
<span style="color:red">Error: Item '<<print _key>>' not found for slot '<<print _slot>>'.</span>
<</if>>
<</for>>
</div>
</div>
<<nobr>>
<<set _configPassageName to $tempEvent.configPassage>>
<<if !_configPassageName>>
<span style="color:red">Error: ShoppingEvent_Outcome requires $tempEvent.configPassage to be set.</span>
<<stop>>
<</if>>
/* Include the specific config passage again to get the outcome conversation string */
<<include _configPassageName>>
<<if typeof _eventConfig === "undefined" || typeof _eventConfig.outcomeConversation === "undefined">>
<span style="color:red">Error: Config object or outcomeConversation not found in '<<print _configPassageName>>'.</span>
<<stop>>
<</if>>
<<if typeof $tempEvent === "undefined">>
<span style="color:red">Error: ShoppingEvent_Outcome requires $tempEvent to be set.</span>
<<stop>>
<</if>>
/* --- Set up REGULAR temporary display variables needed by the outcome conversation --- */
<<set _chosenItemData = getClothing($tempEvent.slot, $tempEvent.chosenKey)>>
<<set _oldItemData = null>>
<<if $tempEvent.oldKey !== null && $tempEvent.oldKey !== ''>>
<<set _oldItemData = getClothing($tempEvent.slot, $tempEvent.oldKey)>>
<</if>>
<<set _tempSlot = $tempEvent.slot>>
/* --- Display Outcome --- */
<div id="shopping-event-outcome">
/* This print will now correctly find _chosenItemData etc. used within the string */
<<print _eventConfig.outcomeConversation>>
<div class="room-actions">
<<link `"Well, that was something..."` "ShoppingEvent_ProcessChoice">>
/* $tempEvent is already set correctly */
<</link>>
</div>
</div>
/* No need to manually unset regular temporary variables */
<</nobr>><h2>Debug: All Clothing Items</h2>
<hr>
<<nobr>>
/* Get the list of clothing categories (e.g., "tops", "bottoms", etc.) */
<<set _categories to Object.keys(setup.clothing)>>
/* Loop through each category */
<<for _category range _categories>>
<<set _categoryItems to setup.clothing[_category]>>
<<if Object.keys(_categoryItems).length > 0>> /* Only display category if it has items */
/* Display the category name */
<h3>Category: <<print _category.charAt(0).toUpperCase() + _category.slice(1)>></h3>
/* Loop through each item (_key, _itemData) in the current category */
<<for _key, _itemData range _categoryItems>>
<div style="border: 1px solid #ccc; margin: 5px; padding: 5px; display: inline-block; width: 150px; vertical-align: top; text-align: center;">
/* Display Item Name */
<strong>Name:</strong> <<print _itemData.name>><br>
/* Display Item Key */
<strong>Key:</strong> <<print _key>><br>
/* Display Item Image */
<<if _itemData.img>>
/* --- ADDED class="debug-clothing-img" below --- */
<img @src="_itemData.img" :alt="_itemData.name + ' (' + _key + ')'" class="debug-clothing-img" style="max-width: 100px; max-height: 100px; margin-top: 5px; border: 1px solid #eee;">
<<else>>
(No Image Path)
<</if>>
</div>
<</for>>
<hr style="clear: both;"> /* Separator after each category */
<</if>> /* End of check if category has items */
<</for>> /* End of category loop */
<</nobr>><div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Hey, <<print $mcName>>. Can you come here for a second? There's something important we need to talk about.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Uh, sure, <<print $gfName>>. Everything okay? You sound serious.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejserious.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
$gfName turns to face you directly, her expression kind but resolute. She takes your hand.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Look, <<print $mcName>>... you know how careful we have to be with my parents, right? With the whole living situation and keeping up appearances. They're sweet, but they're... traditional. And they worry.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, of course. I get it. I stay in your spare room when we sleep, just in case they stop by. What about it $gfName? We've been careful.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
I know we have, and I appreciate that. But things have felt a little... tense lately when they call. I think they suspect more, and the absolute ''last'' thing either of us needs right now is an accidental pregnancy scare on top of everything else. It would be a disaster with them.<br>
*(She squeezes his hand, her gaze firm but still holding affection)*<br>
So, I've made a decision. It's about protecting us, both of us, and this situation we're in.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay...? What decision? You are not saying we can't have sex anymore are you?
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejno.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
No, of course not. I am saying from now on, if we're going to have sex... you ''need'' to wear a condom. ''Every single time''. No exceptions, no getting lost in the moment.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Wait... ''every'' time? <<print $gfName>>? We've always been careful before. We can follow your cycle and identify 'dangerous' days and I can wear one then. Is that a decent compromise? You know I ''hate'' condoms. Isn't this... a bit much?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her grip on his hand tightens slightly, her voice losing its softer edge)*<br>
It's ''not'' too much, <<print $mcName>>. It's necessary. Being 'careful' isn't enough anymore, not with all I already had to do to get my parents to allow this...situation. You know they are paying for this apartment, if we upset them, they might cut that off... then what $mcName? <br>This isn't up for debate. It's the ''only'' way I can feel secure right now, and frankly, it's the responsible thing to do given our circumstances. My decision is final. No condoms, no intercourse. <br>//''Period.''//
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
You make some good points. Fine, we can add the condom requirement while we are in this situation. I have to tell you, I ''hate'' it though.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her expression softens again slightly now that $mcName agreed, though the firmness remains)*<br>
Thank you for understanding, <<print $mcName>>. I appreciate you respecting my decision on this. Don't worry about going out to buy them. I looked into it – you can easily and discreetly order some from AmZon delivery, they will be avaialbe to buy in your room tomorrow. Just place an order for one.<br>Oh, and $mcName, just buy single packs for now and keep them on you. If my parents find condoms in here, we would have hell to pay. I do not want to have that conversation.<br>*(She gives his hand one last firm, reassuring squeeze before letting go.)*
</div>
</div>
<<silently>>
/* Set flag indicating MC does not currently possess condoms */
<<set $owncondom to false>>
<<set $talkcount += 1>>
<<set $gfLocation to "Exercise Room">>
<<modifyArousal -5>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Condoms it is, I guess..blah.." "Living Room">>
<<set $tasks = $tasks.filter(t => t.key !== "cleanLiving")>>
<</link>>
</div>:: DebugUnlockAllClothing [nobr]
<h2>Debug: Unlock All Clothing</h2>
<p>Click the button below to add all defined clothing items (from all categories in <code>setup.clothing</code>) to your owned collection (<code>$ownedClothing</code>).</p>
<<button "Unlock All Items">>
<<silently>>
/* Check if $ownedClothing is actually a Set, initialize if not (safety check) */
<<if typeof $ownedClothing !== 'object' or !$ownedClothing.constructor || $ownedClothing.constructor.name !== 'Set'>>
<<set $ownedClothing to new Set()>>
<<run console.warn("DebugUnlockAllClothing: $ownedClothing was not a Set, re-initialized.")>>
<</if>>
/* Get all category names (tops, bottoms, etc.) */
<<set _categories to Object.keys(setup.clothing)>>
/* Loop through each category */
<<for _category range _categories>>
<<set _categoryItems to setup.clothing[_category]>>
/* Loop through each item key in the category */
<<for _key range Object.keys(_categoryItems)>>
/* Add the item key to the owned set */
<<run $ownedClothing.add(_key)>>
<</for>>
<</for>>
<</silently>>
/* Refresh the display area (e.g., wardrobe) after adding items */
<<replace "#debug-unlock-status">>All defined clothing items have been added to $ownedClothing. (<<print $ownedClothing.size>> items total). You may need to refresh wardrobe view.<</replace>>
<<run console.log("Debug: Added all clothing items. $ownedClothing size:", $ownedClothing.size)>>
<</button>>
<div id="debug-unlock-status">
/* Status message will appear here */
</div>
<br><hr><br>
[[Back->previous()]] <div class="room-gf-presence">
<<set _gfimg to random(1, 7)>>
<<set _gfimg to "images/livingroom/gf/gf" +_gfimg + ".jpg">>
<img @src="_gfimg" alt="$gfName">
</div>
<div class="story-text-area">
You follow <<print $gfName>> into the bedroom.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Long day, huh?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, definitely ready to unwind.<br> *(She opens the covers and pats the spot next to her.)*
</div>
</div>
<div class="story-text-area">
You walk over and lay next to her.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejbedlook.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Me too.<br>
*(She rubs your arm for a moment before looking up at you)*<br>
This is really great. I know the circumstances for this arrangement are horrible, but the nights like these... it is almost worth it.
</div>
</div>
<div class="story-text-area">
The warmth radiating from her is comforting. Her eyes locked on yours in the dim light filtering in from the hallway.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Hey,
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey yourself,
</div>
</div>
<div class="story-text-area">
You lean in. Your lips meet in a soft, tentative kiss that quickly deepens. One of her hands finds its way to the back of your neck, pulling you closer, while the other rests on your chest. Your own hands begin to explore the familiar curves of her body; the kisses becoming more urgent, more passionate.
<br><br>
Just as things are getting significantly heated, <<print $gfName>> pulls back slightly, her breath catching. Her eyes are wide, looking at you intently.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejbedhandchest.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She places a hand gently on your chest to create a little space)*<br>
Wait... hang on...
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Do you... um... do you have a condom?
</div>
</div>
<div class="story-text-area">
You feel a flush creep up your neck.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh. Uh... no, actually. Not yet. I was planning to order some first thing in the morning. We can go one more time without, we used to do it all the time. <br>
*(You pull her face closer to yours, ready to continue the session)*<br>
</div>
</div>
<div class="story-text-area">
<<print $gfName>> lets out a soft sigh, a mixture of understanding and slight disappointment flickering across her face. She moves her head away from yours and pulls your hands away from her face. She gives your chest a gentle pat, signaling to keep some distance.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Okay, Well... let's hold off for now then, alright? Safety first.<br>
*(She leans over and plants a kiss on your cheek)*<br>
No big deal. We can... maybe try again tomorrow night? Once you're prepared.<br>
*(She settles back down onto her pillow, turning slightly away but still close)*<br>
Why don't you head back to your room for the night.
</div>
</div>
<div class="story-text-area">
// Back to my room,... She was just saying how much she enjoyed nights like these. She knew I did not order any condoms, she ''always'' hears that drone. I do not want to push my luck, but I am certainly bringing this up to her tomorrow. Yet another night with no release, again right after she has me all...worked up... //
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Fine. If that is what you want. <br>*($mcName pulls the covers off of himself and starts to leave)*
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*($gfName turns over and looks toward you before you exit the room)*<br>Hey $mcName...
</div>
</div>
<div class="story-text-area">
// What now? Maybe I can avoid the conversation tomorrow. I am sure now she senses my frustration and disappointment. The night is looking positive again. I just need to play my cards right here, and I am in... Come on, $mcName, contain your excitemnt... play it cool...//
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*($mcName pauses for a moment, lost in thought)*<br>Yes, $gfName?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Turn off the lights on your way out.
</div>
</div>
<div class="story-text-area">
// You have ''got'' to be kidding me...//
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Alright.<br>*($mcName flips off the lights and exits the room)*
</div>
</div>
<<silently>>
<<set $talkcount += 1>>
<<modifyArousal 15>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Another night without a release.... Back to your room...">>
<<set $sleeptime to true>>
<<goto "Your Bedroom">>
<</link>>
</div> <div class="story-text-area">
You pull out your phone, navigating to the AmZon app. //Might as well get this over with,// you think, feeling a familiar mix of resignation and slight annoyance. //Just one condom... feels weird ordering it like this, but Kate was insistent.//
<br><br>
You find the single-pack condoms she mentioned – discreet packaging promised – and tap the 'Buy Now' button. The confirmation message appears almost instantly. Estimated delivery: within the hour via Prime Drone.
<br><br>
//An hour to wait...// You sigh, tossing the phone onto the bed. You try to distract yourself, maybe tidy up the already clean room, or just stare out the window. The time stretches, each minute feeling longer than the last. The thought of Kate's reaction last night, her firm 'no' despite the obvious mood, replays in your mind. //This better be worth it... or at least, hopefully it avoids another awkward shutdown.// You just want things to feel normal, close, like they used to be.
<br><br>
Eventually, the distinct whirring sound of an approaching AmZon drone breaks the monotony. It hovers outside your window for a moment before depositing a small, plain package onto the exterior delivery shelf Kate had installed.
</div>
<div class="room-gf-presence">
<<set _drimg to random(1, 7)>>
<<set _drimg to "images/activities/drone" + _drimg + ".jpg">>
<img @src="_drimg" alt="Drone Delivery">
</div>
<div class="story-text-area">
You quickly retrieve the package. It's small, light, and indeed very discreet. You tuck it away safely. //Okay, step one complete. Let's see what happens tonight.//
</div>
<<silently>>
<<set $owncondom to true>>
/* No need to update sidebar for just obtaining this */
<</silently>>
<div class="room-actions">
<<link "Condom obtained" "Your Bedroom">>
<</link>>
</div>/* ================================== */
/* == Widget: modifyArousal == */
/* ================================== */
<<widget "modifyArousal">>
<<set _change to _args[0]>>
<<set $arousal to Math.clamp($arousal + _change, 0, 100)>>
<<run UI.update("StoryCaption")>>
<</widget>>
/* ================================== */
/* == ChoreFailCheck Widget == */
/* ================================== */
/* Checks if player is too aroused on/after Day 4 to do a chore */
<<widget "ChoreFailCheck">>
<<silently>>
<<if $arousal > 89 and $day >= 4>>
/* Fail conditions met! Redirect player to the failure passage. */
<<goto "ChoreFailTooAroused">>
<</if>>
/* If the conditions are NOT met, the widget finishes silently */
<</silently>>
<</widget>>
/* ================================== */
/* == Widget: equipOutfit (FIXED+++) == */ /* Added main display refresh */
/* ================================== */
<<widget "equipOutfit">>
<<set _setType to _args[0]>> /* "daytime" or "sleep" */
<<set _outfit to $savedOutfits[_setType]>>
<<set _canEquip to true>>
<<set _missingItemName to "">>
<<set _requiredItems to []>>
/* --- Define Minimum Requirements --- */
<<set _needsOuter to true>>
<<set _needsUnderwear to true>>
<<set _needsSocks to (_setType is "daytime")>>
<<set _needsShoes to (_setType is "daytime")>>
/* <<set _needsChest to true>> */
/* --- Build list of required keys --- */
/* Check Outer */
<<if _outfit.outer.top !== null>>
<<set _isFullBodyCheck to (getClothing("dresses", _outfit.outer.top) !== null or getClothing("sleepSet", _outfit.outer.top) !== null)>>
<<run _requiredItems.push(_outfit.outer.top)>>
<<if !_isFullBodyCheck and _outfit.outer.bottom !== null>>
<<run _requiredItems.push(_outfit.outer.bottom)>>
<</if>>
<<unset _isFullBodyCheck>>
<</if>>
<<if _needsShoes and _outfit.outer.shoes !== null>>
<<run _requiredItems.push(_outfit.outer.shoes)>>
<</if>>
/* Check Under */
/* <<if _needsChest and _outfit.under.chest !== null>>
<<run _requiredItems.push(_outfit.under.chest)>>
<</if>> */
<<if _needsUnderwear and _outfit.under.underwear !== null>>
<<run _requiredItems.push(_outfit.under.underwear)>>
<</if>>
<<if _needsSocks and _outfit.under.socks !== null>>
<<run _requiredItems.push(_outfit.under.socks)>>
<</if>>
/* --- Pre-Check Ownership --- */
<<for _key range _requiredItems>>
<<if !$ownedClothing.has(_key)>>
<<set _canEquip to false>>
<<set _tempItemData to getClothing("tops", _key) || getClothing("bottoms", _key) || getClothing("shoes", _key) || getClothing("chest", _key) || getClothing("underwear", _key) || getClothing("socks", _key) || getClothing("sleepTop", _key) || getClothing("sleepBottom", _key) || getClothing("sleepSet", _key) || getClothing("dresses", _key)>>
<<if _tempItemData>>
<<set _missingItemName to _tempItemData.name>>
<<else>>
<<set _missingItemName to "a required item">>
<</if>>
<<unset _tempItemData>>
<<set _alertMsg to "Cannot equip " + _setType.toLocaleUpperCase() + " Outfit: You no longer own " + _missingItemName + ". Please update the saved set.">>
<<run alert(_alertMsg)>>
<<unset _alertMsg>>
<<break>>
<</if>>
<</for>>
/* --- Equip or Show Error --- */
<<if _canEquip>>
/* Clear all worn slots first */
<<set $wornTop to null>>
<<set $wornBottoms to null>>
<<set $wornShoes to null>>
<<set $wornChest to null>>
<<set $wornUnderwear to null>>
<<set $wornSocks to null>>
/* Equip items from the saved set */
/* Equip Outer */
<<if _outfit.outer.top !== null>>
<<set _isFullBodyEquip to (getClothing("dresses", _outfit.outer.top) !== null or getClothing("sleepSet", _outfit.outer.top) !== null)>>
<<set $wornTop to _outfit.outer.top>>
<<if _isFullBodyEquip>>
/* $wornBottoms is already null */
<<elseif _outfit.outer.bottom !== null>>
<<set $wornBottoms to _outfit.outer.bottom>>
<</if>>
<<unset _isFullBodyEquip>>
<</if>>
<<if _outfit.outer.shoes !== null>>
<<set $wornShoes to _outfit.outer.shoes>>
<</if>>
/* Equip Under */
<<if _outfit.under.chest !== null>>
<<set $wornChest to _outfit.under.chest>>
<</if>>
<<if _outfit.under.underwear !== null>>
<<set $wornUnderwear to _outfit.under.underwear>>
<</if>>
<<if _outfit.under.socks !== null>>
<<set $wornSocks to _outfit.under.socks>>
<</if>>
/* Update Score and Sidebar */
<<calculateScore>>
<<run UI.update("StoryCaption")>>
<<set _currentPassage to passage()>>
<<if _currentPassage is "YourBedroomCloset" or _currentPassage is "YourBedroomDresser">>
/* Refresh the 'current-items-grid' section */
<<replace ".current-items-grid">><<refreshWornDisplay>><</replace>>
<</if>>
<<unset _currentPassage>>
/* Success Feedback in Sidebar */
<<set _feedbackMsg to _setType.toLocaleUpperCase() + " outfit equipped!">>
<<replace "#equip-feedback">><br><<print _feedbackMsg>><</replace>>
<<timed 3s>>
<<replace "#equip-feedback">><</replace>>
<</timed>>
<<unset _feedbackMsg>>
<</if>> /* End _canEquip check */
/* Clean up */
<<unset _setType, _outfit, _canEquip, _missingItemName, _requiredItems, _needsOuter, _needsUnderwear, _needsSocks, _needsShoes, _key>>
<</widget>>
/* ================================== */
/* == Widget: saveOutfitPart == */ /* RESTORED ORIGINAL */
/* ================================== */
<<widget "saveOutfitPart">> /* No container keyword */
<<set _setType to _args[0]>> /* "daytime" or "sleep" */
<<set _part to _args[1]>> /* "outer" or "under" */
<<set _feedback to "">>
<<if _part is "outer">>
<<set _topKey to $wornTop>>
<<set _bottomKey to $wornBottoms>>
<<set _shoesKey to $wornShoes>>
/* Handle dress/sleepSet cases */
<<if _topKey !== null>>
<<if getClothing("dresses", _topKey) !== null or getClothing("sleepSet", _topKey) !== null>>
<<set _bottomKey to null>>
<</if>>
<</if>>
<<set $savedOutfits[_setType].outer.top to _topKey>>
<<set $savedOutfits[_setType].outer.bottom to _bottomKey>>
<<set $savedOutfits[_setType].outer.shoes to _shoesKey>>
<<set _feedback to _setType.toLocaleUpperCase() + " Outerwear Saved!">>
<<elseif _part is "under">>
<<set $savedOutfits[_setType].under.chest to $wornChest>>
<<set $savedOutfits[_setType].under.underwear to $wornUnderwear>>
<<set $savedOutfits[_setType].under.socks to $wornSocks>>
<<set _feedback to _setType.toLocaleUpperCase() + " Underwear Saved!">>
<<else>>
<<set _feedback to "Error: Invalid part specified for saving outfit.">>
<</if>>
/* Display feedback */
<<set $saveOutfitFeedback to _feedback>>
<<replace "#save-feedback">><<print $saveOutfitFeedback>><</replace>>
<<timed 3s>>
<<set $saveOutfitFeedback to "">>
<<replace "#save-feedback">><<print $saveOutfitFeedback>><</replace>>
<</timed>>
<<unset _setType, _part, _feedback, _topKey, _bottomKey, _shoesKey>> /* Clean up */
<</widget>>
/* ================================== */
/* == Refresh passage
/* ================================== */
<<widget "refreshWornDisplay">>
<<nobr>>
/* Re-render the display widgets based on the current sidebar filter */
<<if $sidebarFilter is "Over">>
<<displayCurrentItemWidget "tops">>
<<displayCurrentItemWidget "bottoms">>
<<displayCurrentItemWidget "shoes">>
<<elseif $sidebarFilter is "Under">>
<<displayCurrentItemWidget "chest">>
<<displayCurrentItemWidget "underwear">>
<<displayCurrentItemWidget "socks">>
<</if>>
<</nobr>>
<</widget>><<if $day is 1>>
The unfamiliar softness of the pajamas <<print $gfName>> gave you is surprisingly comforting against your skin, a stark contrast to the rough denim you started the day in. Despite the lingering embarrassment and anxiety about your situation, sleep pulls you under. The thoughts of the day – the dependency, the awkwardness, the unexpected moments with <<print $gfName>> .....
<</if>>
<<if $day is 2>>
Drifting off alone... again. After she invited me, touched my leg like that... then sent me away. Because of condoms she knew I wouldn't have yet? It felt deliberate. A reminder of who's in charge, maybe. Or maybe just... I wasn't worth the trouble tonight. The silence in this room feels louder than usual.....
<</if>>
<<if $day is 3>>
Finally... I fucked $gfName. She seemed genuinely pleased tonight, happy with the new clothes, the smooth face... Happy with me listening. The feeling of her touch, the closeness... it was intoxicating, exactly what I've been craving. But even that came with strings attached. Shave down there if I want her mouth, ''pull out even with a condom on''? More hoops to jump through. It feels less like a relationship sometimes and more like... training. The satisfaction is real, but so is the constant pressure. Sleep feels like the only escape from thinking about it...
<</if>>
<<if $day is 4>>
Another day, another set of hoops. Shave this, wear that, rub her feet… I did it all. She even said I was ‘perfectly compliant.’ And for what? Takeout and a movie? I mean, it was nice, quiet… but that’s not what she dangled in front of me this morning when she was… checking my 'working order'. Got me all worked up, then… ‘too tired’. Again.
<</if>>
<<if $day is 5>>
That phone thing… while I was brushing her hair. That giggle. The way she shut it off so fast. Was that really… a dating app? After everything we… after everything I’m doing to fit in here? My stomach still feels tight thinking about it. Should I ask? When? She’s so quick to shut me down if she doesn’t want to talk about something.
<</if>>
<<if $day is 6>>
That sound… the buzzing… and then her groan. It was… she sounded so… It wasn’t like with me. Not for a long time. Was it because of her 'friend'? Her 'day out' that she wouldn't talk about?
<br>
She looked… furious. Like she hated me. 'Worthless, disobedient fuck…' The way she screamed… I’ve never seen her like that. Tomorrow morning… what’s she going to do? What’s she going to say?
<br>
Maybe if I hadn't made that noise. If I’d just stayed in my room. But hearing that… knowing she was in there… after the way she was all day… I couldn’t just ignore it. But I should have. God, I should have.
<</if>>
<<if $day is 7>>
She had the condom ready. She put it on me. She pulled me to her. She wanted it. What changed? Just because I didn't pull out? That rage… I’ve never seen anything like it. Worse than last night. So much worse. Last night was an 'overreaction' she apologized for. What will this be? How can she even look at me tomorrow?
<</if>><div class="story-text-area">
You encounter <<print $gfName>>. She pauses when she sees you, her gaze sweeping over you in the new shirt. A slow, satisfied smile spreads across her face.
</div>
<div class="room-gf-presence">
<img src="images/gf/d2shirtreact1.jpg" alt="$gfName smiling at the door">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Well hello there, handsome. <br>*(She stops directly in front of you)*<br> I have to say, that shirt makes a remarkable difference. You look so much more... presentable. Proper.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You feel a slight flush rise in your neck)*<br> Uh, thanks, <<print $gfName>>. It feels... okay. Thanks again for getting it for me.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She reaches out, her fingers lightly tracing the fabric on your chest before resting her hand there, pinning you in place with just that simple contact)*<br> Oh, I was happy to. It's important you look good while you're here. And seeing how well you listened today... how readily you accepted my help... it really makes me think. It shows promise.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Her hand on your chest creates a distracting warmth)*<br> Promise? Think about what?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her eyes hold yours)*<br> About... potential. About how much better things could be if you continue letting me guide you. There are other little adjustments, other improvements we could make. Things to help you truly settle in, to make sure you always look and feel... appropriate... for your situation here with me.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Adjustments? What kind of adjustments are you talking about?
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/d2shirtreact2.jpg" alt="$gfName smiling at the door">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She gives a soft, knowing chuckle, leaning in just slightly, her voice dropping a little lower. Her hand remains on your chest)*<br> Think... better. Let's just say I have ideas to ensure you fit perfectly into this life. Good ideas. For both of us and our relationship. Just trust me.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay. I trust you, <<print $gfName>>.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile widens, full of confidence. She finally removes her hand from your chest, but shifts slightly, her knee now pressing and rubbing gently against your thigh.*)<br> //The unexpected intimacy sends a jolt through you//<br> Excellent. That's exactly what I need to hear. Since you've been so good today... finish up whatever you were doing, then meet me in my room in, say, fifteen minutes? I think we could both use some... proper relaxation after such a productive day. Don't keep me waiting.
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/d2shirtreact3.jpg" alt="$gfName smiling at the door">
</div>
<div class="story-text-area">
She gives your thigh one last meaningful press with her knee before stepping back, her eyes holding yours with a mixture of affection and undeniable command. She turns and heads towards her bedroom teasing you as she goes, leaving you rooted to the spot. The pressure from her knee still tingling against your leg, the directness of her invitation, and peak at her panties makes your heart pound. <br><br>//Finally! Maybe tonight will be different, maybe tonight you'll actually get some relief...//
</div>
<div class="room-actions">
<<link "Head towards her room when ready...">>
<<modifyArousal 5>>
<<set $talkcount += 1>>
<<set $tasks = $tasks.filter(t => t.key !== "talkGfSleep")>>
<<set $gfLocation to "$gfName Bedroom">>
<<run UI.update("StoryCaption")>>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div><<if not $showWakeUp>> /* Show GF's actions first */
<div class="room-gf-presence">
<video src="images/vids/ejcomeintobedroom.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div id="gf-actions">
<div class="story-text-area">
The darkness of the spare room is soft, punctuated only by the rhythmic, deep breathing of <<print $mcName>> asleep in the bed. Silently, the door eases open and <<print $gfName>> slips inside, moving with practiced quiet. Her eyes adjust quickly, landing on the discarded pile of clothes near the dresser where his old sneakers and worn crew socks lie.
<br><br>
A small, thoughtful frown touches her lips as she looks at them. //Definitely seen better days,// she thinks, picking them up. //Time for an upgrade. Something cleaner, more... fitting.//
<br><br>
She places a new pair of crisp, white sneakers and folded white athletic socks with red and blue stripes neatly at the foot of the bed, easily visible for when he wakes. The old ones disappear with her as she retrieves them from wherever she stashed them. She pauses at the dresser, placing a glossy magazine titled "Panty Play" conspicuously on its surface before slipping back out of the room as silently as she entered, closing the door softly behind her.
</div>
<<silently>>
/* Remove old items */
<<run $ownedClothing.delete("socks_crew")>>
<<run $ownedClothing.delete("sneakers_old")>>
/* Add new items */
<<run $ownedClothing.add("socks_athletic_knee_white_striped")>>
<<run $ownedClothing.add("sneakers_white")>>
/* Set flag to show next part */
<<set $showWakeUp to true>>
<</silently>>
<div class="room-actions">
[[Continue...|Night_Swap_D2]] /* Link back to this passage to trigger the 'else' block */
</div>
</div>
<<else>> /* Show MC waking up */
<div id="mc-wakes-up">
<div class="room-gf-presence">
<img src="images/activities/sleep/wakeup1.jpg" alt="Wake up"> /* Re-using wakeup image */
</div><br>
<div class="room-gf-presence">
<img src="images/clothing/shoes/sneakers_white.png" alt="White Sneakers">
</div><br>
<div class="room-gf-presence">
<img src="images/clothing/socks/socks_athletic_knee_white_striped.png" alt="calf-high athletic socks with colored stripes">
</div><br>
<div class="story-text-area"><br><br>
Sunlight filters through the window, nudging you awake. You stretch, the events of yesterday feeling slightly distant. As your eyes focus, you notice something unfamiliar at the foot of your bed – bright white sneakers and stark white, calf-high athletic socks with colored stripes, definitely not yours. //Where did these come from?//
<br><br>
<div class="room-gf-presence">
<img src="images/items/pplaymag.jpg" alt="Panty Play magazine">
</div>
<br>
Sitting up, you glance towards your dresser and spot something else out of place: a sleek magazine titled "Panty Play". //What the...? Did Kate leave this? And the shoes?// A strange mix of confusion and a prickle of something else – curiosity? – runs through you. //Replacing my stuff while I sleep... leaving this magazine... What is she playing at?//
</div>
<<silently>>
<<unset $showWakeUp>> /* Clean up the temporary variable */
/* Update sidebar necessary after StartNewDay call to show Day 3 info */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "A new day begins...">><<goto "Your Bedroom">><</link>>
</div>
</div>
<</if>><div class="story-text-area">
You're still processing the appearance of the new items when <<print $gfName>>, already dressed and looking fresh, turns her attention fully towards you. She's perched casually on the edge of your desk chair, observing you with an unreadable expression.
</div>
<br>
<div class="room-gf-presence">
<img src="images/bedroom/ejdoor.jpg" alt="$gfName smiling at the door">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Morning, sleepyhead. How did you sleep?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Uh... okay, I guess. Hey, <<print $gfName>>... what's with the new shoes and socks? And... <br>*(You nod towards the dresser)*<br> ...that magazine? Where did this stuff come from?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She smiles, a knowing glint in her eyes)* <br>Oh, those? Your old sneakers were practically falling apart, <<print $mcName>>, and the socks had definitely seen better days. I figured it was time for an upgrade – something clean and fresh to start the day right.
<br><br>*(Her gaze flicks towards the magazine, then back to you, lingering pointedly on your pajama pants)*<br> As for the magazine... I found it tucked away. When I came in earlier and saw the impressive tent you were pitching, I thought some visual stimulation seemed rather... fitting for your current predicament. Perhaps it will be useful before sleeping.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Heat rushes to your face. You instinctively adjust your position slightly)*<br> I... uh... you saw...? //Great, just great.//
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She chuckles softly, standing up and walking closer)*<br> Don't be embarrassed, honey. It's perfectly natural. Especially after last night. But it does highlight your... need. You have two options to ease that tension now. You can make use of your new reading material...
<br><br>*(She pauses, letting the implication hang in the air)*<br>
...Or, you can finally order condoms like we discussed. If you handle that little task, perhaps we can properly address your... enthusiasm... The choice is yours.
</div>
</div>
<<silently>>
<<set $talkedtoday to true>>
<<set $talkcount += 1>>
<<set $gfLocation to "$gfName Bedroom">>
<<run UI.update("StoryCaption")>> /* Still update sidebar for talk count if needed */
<</silently>>
<div class="room-actions">
<<link "$gfName goes back about her day." "Your Bedroom">>
<</link>>
</div><div class="story-text-area">
<<print $gfName>>'s sitting at her vanity table. Various makeup items – tubes of lipstick, colourful eyeshadow palettes, brushes – are spread across the surface in slight disarray. She looks up and gestures vaguely at the collection.
</div><br>
<div class="room-gf-presence">
<img src="images/herroom/makeup.jpg" alt="$gfName makeup">
</div><br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
My lipsticks are a total mess. Can you just group the reds and pinks together in this little tray while I sort these brushes? Shouldn't take long.
</div>
</div>
<div class="story-text-area">
You step over to the vanity, the faint scent of perfume and powder in the air. You awkwardly start picking through the sleek tubes and compacts, trying to differentiate the various shades of pink and red under the vanity lights. It feels strange handling these decidedly feminine items.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She watches you for a moment, a slight, amused smirk appearing as you perhaps hesitate over a coral shade)*<br> Careful there... You seem a little preoccupied today. Still thinking about 'Panty Play'?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
What? No. Just trying to get these sorted like you asked.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/herroom/pask.jpg" alt="$gfName makeup">
</div><br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Oh? Just wondering if you found any particular... style... that caught your eye? <br> *(She winks, her tone light and teasing)* <br>Understanding the difference between a bikini and a boyshort is crucial knowledge, after all. Maybe you should study it more closely later.
</div>
</div>
<div class="story-text-area">
//Just ignore her... focus on the lipsticks... This is weird...//
</div>
<div class="story-text-area">
You finish sorting the lipsticks into the tray as she finishes arranging her brushes.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
There, much better. Thanks for the help. Speaking of styles... <br>*(She turns slightly on her stool, looking you up and down again, her gaze lingering pointedly on your lower half)*<br> ...we really need to do something about those jeans. They just don't work anymore, especially with your nice new shoes.
<br><br>
I was thinking we could browse AmZon later today. Find you something with a much better look, something that actually fits you properly. How does that sound?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay, yeah. If you think so. We can look later.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Perfect. Why don't you head back to your room for now? Just relax for a bit. Call me over when you're ready to do some shopping, okay?
</div>
</div>
<<silently>>
<<set $talkcount += 1>> /* Increment talk count again */
<<run UI.update("StoryCaption")>> /* Update sidebar if shopevent flag is shown */
<</silently>>
<div class="room-actions">
<<link "That was slighly uncomfortable...." `previous()`>>
/* Set GF location if she moves after this */
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room")>>
<<set $shopevent to true>>
<</link>>
</div><div class="story-text-area">
You find <<print $gfName>> relaxing <<print ($gfLocation == "$gfName Bedroom" ? "in her room" : "in the " + $gfLocation.toLowerCase())>> after finishing your chores for the day. She looks up, a neutral expression on her face as you approach.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey <<print $gfName>>, just finished up the last of the cleaning.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
All done already? Good. It's nice when things are kept tidy around here, isn't it? Makes the whole place feel more relaxing.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, it does. Happy to help out.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejlookdown.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods slowly, her gaze drifting down to your feet)*<br> Come closer for a second. Let me see...
<br>*(You take a step closer. She leans forward slightly, examining the new white sneakers)*<br> Yes, these are much better. So much cleaner than those old things you insisted on wearing. A fresh start for your feet.
<br>*(Her attention shifts to the socks visible above the sneakers. She reaches out, her fingers lightly brushing against the fabric as she smooths one of the striped athletic socks against your calf)*<br> And these... the stripes add a nice touch, don't you think? Much more defined than plain socks. Shows a little effort.
<br><br>*(She lets her hand linger for a moment before slowly drawing it back. She straightens up slightly, stepping just a bit closer into your personal space. Her eyes meet yours, holding the gaze longer than necessary, and a subtle, knowing smile touches her lips. Her voice drops just a touch, becoming softer, more intimate)*<br> It really makes a difference when you look so... neat. Put together. Makes you look quite... appealing.
</div>
</div>
<<silently>>
<<set $talkcount += 1>>
<</silently>>
<<if $gfLocation is "$gfName Bedroom">>
/* === GF IS ALREADY IN HER ROOM === */
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Stay here for a minute, okay? There's something else I wanted to talk about.
</div>
</div>
<div class="room-actions">
<<link "Wait for her..." `$gfName Bedroom`>>
<</link>>
</div>
<<else>>
/* === GF IS NOT IN HER ROOM === */
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Listen, head over to my bedroom and wait for me there, okay? Give me five minutes or so. There's something I want you to help me with. Don't keep me waiting.
</div>
</div>
<div class="room-actions">
/* Set GF location and link back to the previous room MC was in */
<<link "Head to her bedroom..." `previous()`>>
<<set $gfLocation to "$gfName Bedroom">>
<</link>>
</div>
<</if>><<set _eventConfig to {
passageName: "Act_D3_Shopping", /* Store name for reference */
slot: "bottoms",
itemKeys: ["jeans_dark_stonewash", "jeans_blue", "jeans_blue_classic"],
initialConversation: `
<div class="story-text-area">
Remembering Kate's instruction, you call her into your room. She enters with a soft smile and settles onto the edge of your bed. She opens her laptop, angling it slightly towards you.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Ready to tackle those jeans, <<print $mcName>>? Like I said, the old ones just won't do anymore. They completely throw off the cleaner look we're achieving with your new sneakers and socks. We need something with a better look, something that actually fits you properly.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I guess... They're comfortable, but yeah, okay. What did you have in mind?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She gives a confident nod, already navigating on the laptop)*<br> Don't worry, I've already found some excellent options on AmZon. Much more modern, better fabrics, and most importantly, a cut that will actually complement your shape instead of hiding it under baggy denim.
<br>*(She turns the laptop screen fully towards you, showing three different styles of men's jeans)*<br>
See? Much better choices. Just pick the one you like the best, and we'll get it ordered. Easy. Which pair do you want?
</div>
</div>
`,
outcomeConversation: `
/* Use _chosenItemData, _oldItemData, _tempSlot from temp state */
<<if _chosenItemData>>
<div class="story-text-area">
You point to the <<print _chosenItemData.name>>. It looks decent enough, and arguing seems pointless.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Excellent choice! <br>*(She quickly clicks a few buttons on the laptop)*<br> Perfect. Ordered! AmZon Prime Drone should have it here in about an hour, maybe less. See? Easy. While we wait... <br>*(She navigates to a different page on the laptop)* <br> Look at this...
</div>
</div>
<div class="story-text-area">
She angles the screen so you can see. It's an infographic on different lingerie types.
<br>
<img src="images/activities/lintips.png" alt="Laptop showing GF's tips"><br>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I like the idea of you wearing lingerie.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She laughs lightly)*<br> I know, imagine me wearing these beautiful sets. Which one is your favorite?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*($mcName points to the screen)* that one.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She shakes her head no)*<br> No, no. You need to use the name. Look, the graphic is teaching you the names!
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh, uh, Bodysuit/Teddy I guess?
</div>
</div>
<div class="story-text-area">
$gfName keeps browsing through different lingerie options, page after page. She gently nudges you every so often to keep you engaged.<br><br> Roughly an hour later, a distinct whirring sound approaches the window.
<br>
</div>
<div class="room-gf-presence">
<<set _drimg to random(1, 7)>>
<<set _drimg to "images/activities/drone" + _drimg + ".jpg">>
<img @src="_drimg" alt="Drone Delivery">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Ah, there it is! Right on time. I'll be right back.
</div>
</div>
<div class="story-text-area">
She gets up and heads out briefly, returning moments later with a standard AmZon package. She opens it quickly, pulling out the <<print _chosenItemData.name>>.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Here we go! And I paid extra for the AmZon 'Pre-Wash & Fold' service, so it's clean and ready to wear right now. Go on, try it on! Let's see how it looks.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Right now? Can't I wear it tomorrow?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Don't be silly, I want to see it! <br>*(She steps closer, holding the new jeans out.)*<br> When you hesitate, she reaches out playfully but firmly, grabbing the hem of your <<if _oldItemData>><<print _oldItemData.name>><<else>> old<<print _tempSlot.replace("s","")>> <</if>>.<br> Come on, off with the old, in with the new! I'll help.<br>*($gfName starts to pull down your <<if _oldItemData>><<print _oldItemData.name>><<else>> old <<print _tempSlot.replace("s","")>> <</if>>, as if nothing is going to stop her.)*
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Okay, okay! Alright! I'm doing it.
</div>
</div>
<div class="story-text-area">
Sighing, you quickly remove your <<if _oldItemData>> <<print _oldItemData.name>> <<else>> old <<print _tempSlot.replace("s","")>> <</if>> and slip on the new <<print _chosenItemData.name>>. It feels different - fresher, maybe a better fit, just as she said.
</div>
<div class="room-gf-presence">
<img @src="_chosenItemData.img" alt="You wearing the new <<print _chosenItemData.name>>">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her eyes light up, a genuine smile spreading across her face)* <br>See? Much better! Oh, that suits you perfectly, <<print $mcName>>. So much more... appropriate.<br> *(She deftly picks up your discarded <<if _oldItemData>> <<print _oldItemData.name>> <<else>> item <</if>>)* <br>Right then, I'll just... take care of this old thing for you. Definitely no need for it anymore.
</div>
</div>
<div class="story-text-area">
She bundles up your old item without a second glance and sets it aside, clearly destined for the trash later. It's gone from your wardrobe.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
See how easy it is when you just let me help? You're in good hands here, <<print $mcName>>. Remember that. <br>*(She leans in and gives you a soft, lingering kiss. She leaves the room, leaving you in your new clothes)*
</div>
</div>
<<else>>
<span style="color:red; font-weight:bold;">Error displaying outcome: Cannot retrieve chosen item data.</span>
<</if>>
`
}>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "Bathroom")>>
<<nobr>>
/* Initialize STORY variables if they don't exist */
<<if not def $storyMagazineActive>>
<<set $storyMagazineActive = true>>
/* JS state is reset automatically when passage initializes */
<</if>>
/* --- Interaction Area (Initially Visible) --- */
<div id="magazine-interaction" style="text-align: center; display: block;">
/* Display the FIXED starting placeholder GIF */
<img id="magazine-placeholder" src="images/mag/jerk.gif" alt="Reading..." style="max-width: 80%; max-height: 300px; display: block; margin: 1em auto;">
<br>
/* Display the image - JS will set the initial src and update it */
<img id="magazine-image" src="" alt="Magazine Page" style="max-width: 80%; max-height: 600px; display: block; margin: 1em auto; border: 1px solid #ccc;">
<br>
/* Placeholder for countdown text - JS will update this */
<span id="magazine-countdown" style="font-size: 1.5em; color: red; font-weight: bold; display: none;"></span>
<br><br>
/* --- Interaction Button --- */
<button id="flip-page-button">Flip the page...</button>
</div> /* End of #magazine-interaction */
/* --- Climax Area (Initially Hidden) --- */
<div id="magazine-climax" style="text-align: center; display: none;"> /* Starts hidden */
<img id="climax-gif" src="images/mag/finish.gif" alt="Climax..." style="max-width: 80%; max-height: 600px; display: block; margin: 1em auto;">
<br>
/* Return link, also initially hidden */
<span id="climax-return-link-wrapper" style="display: none;">
/* --- LINK MODIFIED HERE --- */
<<link "Return to your room" "Your Bedroom">>
<<set $arousal = 0>> /* Reset arousal */
<<unset $storyMagazineActive>> /* Unset story state var */
<<run setup.resetMagazineFlag()>> /* Reset JS init flag */
<</link>>
/* --- END LINK MODIFICATION --- */
</span>
</div> /* End of #magazine-climax */
/* --- Run the JavaScript logic AFTER the passage is rendered --- */
<<done>>
<<run setup.initPlayWithMagazine()>>
<</done>>
<</nobr>><div class="room-gf-presence">
<img src="images/gf/roomshorts.jpg" alt="$gfName smiling">
</div>
<div class="story-text-area">
You find <<print $gfName>> later in the day. She turns as you approach, and her eyes immediately go to your new jeans. A slow, appreciative smile spreads across her face, similar to how she reacted to the shirt yesterday.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
There you are. See? Much better. Those jeans fit you properly, none of that baggy mess from before or more holes than swiss cheese. It makes you look quite sharp, actually.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You feel a familiar warmth rise in your neck)*<br> Thanks, <<print $gfName>>. They feel... different, but good. Thanks again for getting them.
</div>
</div>
<div class="story-text-area">
She steps closer, reaching out not to touch the jeans, but leaning in to give you a soft kiss on the cheek. As she pulls back slightly, her expression shifts, a small wrinkle appearing on her nose.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Mmm... <br>*(She gently touches her own cheek where she kissed yours)*<br> Honey, your face... it's so scratchy. It tickles. I don't really like how it feels against my skin. That beard... it hides your features too.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh. Uh, sorry? I didn't realize...
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
It's alright. Just... something to think about. Speaking of being prepared... *(Her tone shifts slightly, becoming more direct)*<br> Did you manage to get that other little thing sorted out? Do you have a condom with you now?
</div>
</div>
<<nobr>>
<<if $owncondom is false>> /* --- Player DOES NOT have a condom --- */
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Ah... no. Not yet. I haven't had a chance to order one.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(A flicker of disappointment crosses her face, quickly replaced by polite firmness)*<br> I see. Well, <<print $mcName>>, like I said, that's non-negotiable for anything... more. You know where to get one. Go take care of that now, please. We can talk properly afterwards.
</div>
</div>
<<silently>>
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room", "$gfName Bedroom")>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Alright, I'll go order one..." `previous()`>>
/* Return to previous room */
<</link>>
</div>
<<else>>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Actually, yes. I ordered one earlier today. Got it right here.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her expression immediately brightens, a genuine smile returning. She reaches out and takes your hand)*<br> Excellent! Thank you, <<print $mcName>>. I really appreciate you respecting my boundaries on that. It means a lot, especially right now. It shows you're listening, that you care about making this work for both of us.
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/jeangrab.jpg" alt="hand moves down to your crotch in your new jeans">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her hand moves down to your crotch in your new jeans)*<br> And... since you've been so good about that, and about the clothes... perhaps we can look forward to being... very intimate later tonight. There's just one little thing, related to what I mentioned... that scratchy face of yours.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
My beard? What about it?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
I want you to shave it off. Completely. I want to see your face properly, and I want your skin to be smooth when I kiss you. If you keep your face nice and clean-shaven for me, starting now... then yes, tonight I will take very good care of you.<br>*(She looks at the clear buldge in your pants)*<br> Will you do that for me? For us?
</div>
</div>
<div class="story-text-area">
Her words hang in the air, the promise of intimacy clear. You hesitate for only a fraction of a second. The thought of her touching you, of finally getting close after the denials... it overrides any attachment you had to your facial hair. The desire for her approval and affection is too strong right now.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Your voice is slightly husky)*<br> Yes. Okay, Kate. Whatever you want. I'll shave it. Right now.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile becomes radiant)*<br> Wonderful! That's exactly what I wanted to hear. Go get cleaned up, make yourself smooth for me. Make sure you do that every day. I'll see you later tonight... and I ''promise'', you won't regret it.
</div>
</div>
<div class="story-text-area">
She gives your hand one last lingering squeeze before releasing it, her eyes full of promise.
</div>
<<silently>>
<<set $talkcount += 1>>
<<modifyArousal 15>>
<<set $taskShaveFaceActive to true>>
<<run $tasks.push(clone(setup.taskDefinitions.shaveFace))>>
<<set $gfLocation to "$gfName Bedroom">>
<<set $tasks = $tasks.filter(t => t.key !== "talkGfSleep")>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Okay, time to shave..." `previous()`>>
<</link>>
</div>
<</if>>
<</nobr>><<if $day gt 1 and $tasks.some(t => t.category === "Hygiene") or $day is 1 and $cleanliness is "You stink!">>
$gfName looks at you and shakes her head, "<<= either('I will be honest with you, you do not smell great', 'What is that smell?', 'Come talk to me after your hygiene routine')>>"
<<elseif ($wornShoes eq null or $wornSocks eq null)>>
$gfName looks at your feet and says, "<<= either('Go put some shoes and socks on', 'Aren\'t your feet cold?', 'You should wear something on your feet')>>"
<<elseif (($wornTop neq null and $wornTop.indexOf("sleep") neq -1) or ($wornBottoms neq null and $wornBottoms.indexOf("sleep") neq -1)) and !($day is 7 and ($talkcount is 3 or $talkcount is 4)) >>
$gfName looks up and down and says, "<<= either('Really? That is your outfit planned for the day?', 'What is up with your outfit choice?', 'Come talk to me after have proper daily clothes on')>>"
<<elseif $day is 7 and ($talkcount is 3 or $talkcount is 4) and !($wornTop is "sleep_top_champ_satin_shirt" and $wornBottoms is "sleep_bottom_champ_satin_pants")>>
$gfName gives you a pointed look, "I thought we agreed you'd wear those lovely champagne satin pajamas for me? I'll be waiting."
<<elseif ($day gt 3 or $day is 3 and $talkcount gt 3) and $tasks.some(t => t.category === "Shaving")>>
I promised to shave for $gfName everyday. I should do that.
<<elseif $day gt 4 and $tasks.some(t => t.key === "footrub")>>
I promised to give a footrub every morning. Let's see if she is ready.<br>
[[Give her the morning footrub->task-footrub]]
<<elseif $shopevent is true>>
I should not bother her, she asked me to call her to my room.
<<elseif $day gt 1 and $sleeptime is true>>
$gfName looks at you like she wants to talk. I should see what she has to say<br>
[[Talk to her ->Talk_GF_Sleepy]]<br>
<<elseif $currentScoreRequirement != null and $displayScore > $currentScoreRequirement>>
$gfName looks at you like she wants to talk. I should see what she has to say<br>
[[Talk to her ->Talk_GF_Clothing_Fail]]<br>
<<else>>
$gfName looks at you like she wants to talk. I should see what she has to say<br>
[[Talk to her ->GFtalkRouter]]<br>
<</if>><div class="room-gf-presence">
<img src="images/herroom/d3ling.jpg" alt="$gfName waiting on the bed">
</div>
<div class="story-text-area">
You enter <<print $gfName>>'s bedroom, having meticulously shaved your face. The air feels thick with anticipation. She's lounging on her bed, in the lingerie she wore under her clothes before, and gestures for you to come closer.
</div>
<div class="story-text-area">
She reaches up, gently cupping your face and running her fingertips over your smooth jawline and cheeks. Her eyes search yours, filled with warm approval.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Let me feel... Oh, yes. Perfectly smooth. See how much better this is, <<print $mcName>>? Now I can actually kiss you properly without getting scratched. Keep it like this for me, understand? ''Every single day''.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yes, Kate. I understand. It feels... different. Smooth.
</div>
</div>
<div class="room-gf-presence">
<img src="images/herroom/ejkissd3.jpg" alt=" pulls your face down for a slow, lingering kiss">
</div>
<div class="story-text-area">
She pulls your face down for a slow, lingering kiss, her touch soft against your newly sensitive skin. She pulls back slightly, her gaze taking in your whole appearance.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
And honestly, seeing you like this... the clean face, that nice shirt looking good on you, the new jeans that actually fit you now... you're really starting to look so much more presentable, more... refined. It makes me genuinely happy seeing you listen and take my suggestions so seriously. It feels like you want to fit into my life here, and that's wonderful.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I... I do want to make you happy, $gfName. I appreciate everything you're doing.
</div>
</div>
<div class="story-text-area">
Her words, combined with her proximity and touch, ignite the passion that's been building. Kissing deepens, hands begin to explore, and she guides your movements, subtly taking charge. Her hands roam down your chest, over the waistband of your new jeans. With deft fingers, she slowly undoes the button, then eases down the zipper sending shivers through you. Her eyes lock with yours as she pushes the denim down slightly over your hips.
</div>
<div class="story-text-area">
Leaning down, <<print $gfName>> kisses a path lower, her intentions clear. But just as her lips hover near your groin, she hesitates, then stops, pulling back with a soft sigh of frustration.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Oh... wait. Honey, no... I can't. It's just... <br>*(She gestures vaguely)* <br>all this hair. It gets in the way, it wouldn't be pleasant for me at all.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hair? Oh... Right. I... didn't think about that.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
* (She meets your eyes, her tone softening slightly but remaining firm)*<br>
Listen, I want to please you like that, truly I do. But if you want my mouth down there next time, you'll need to shave it all off first. Completely smooth, just like your face is now. When you take care of that properly, then we can definitely revisit this. Consider it something to look forward to, motivation for keeping yourself groomed the way I like.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(A wave of disappointment washes over you, but it's quickly followed by understanding... and the lingering promise)*<br> Okay... okay, Kate. For next time. Smooth down there too. I understand.
</div>
</div>
<div class="room-gf-presence">
<img src="images/herroom/bedsmiled3.jpg" alt="her face wears with a warm smile">
</div>
<div class="story-text-area">
Seeing your acceptance, her face wears with a warm smile. She removes your jeans and underwear.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
But... let's not get sidetracked. You did shave your face exactly like I asked. You listened, you complied, and you're making such wonderful progress fitting in here. So let's enjoy the reward you have earned tonight. Go on, get the condom ready.
</div>
</div>
<div class="story-text-area">
You retrieve the condom and put it on, fumbling slightly under her observant gaze. She smiles encouragingly, then pulls you down onto the bed with her.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/condomfuck.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
There's no gentle exploration or tentative merging; $gfName immediately takes charge,her movements precise and confident, leaving no doubt about who is leading this encounter. $gfName guides your cock into her. She barely reacts, its almost 'clinical' in naute.
<br><br>
The intercourse proceeds, largely guided by her desires and pace, reinforcing the dynamic of her control and your eager compliance. The condom is the only thing that is stopping this moment from being near perfection. Your hips buck, your eyes squint and your toes curl.
<br><br>
You feel it, and $gfName sees it on your face - you are about to cum.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
''STOP''<br>
*($gfName pushes you back)*
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Your dick pulls out of $gfName)*<br> What is wrong?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*($gfName pushes you down on the bed)*<br>We just cant risk it, honey. I will finsih you with my hand, keep the condom on.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/jerkcondom.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
A look of confusion comes over your face, quickly changing to a look of pleasure as $gfName strokes your cock, with the condom on.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/jerkcondomcum.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
It does not take long, a grunt and then a groan and the condom fills with your jizz.<br>You lay back on the bed, feeling spent from the orgasm.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Mmm, see? This is so nice. Honestly, <<print $mcName>>, I'm really happy with how things are going between us. You making an effort with your appearance – the clothes, the shaving – and respecting my rules about protection... it makes me feel like you truly value this relationship and my feelings. It feels like we're really connecting, building something positive here, even with everything else going on. You're making me feel cherished and secure, knowing I can rely on you to listen.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Feeling warm and satisfied, you nuzzle against her)*<br> I'm happy too, Kate. Really happy. Being with you... it feels right. I want to do whatever makes you happy.<br>But I have to know, why did you push me back? I was wearing a condom.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She shifts slightly, tracing your newly smooth jawline again)* <br> Are you really complaining right now? We fucked, you came. Look how full that condom is. We just cannot risk it. It was only the final moments that I had you pull out. Remember, there was going to be a blowjob, but I dont need to floss while I do it.
If you take care of all the little grooming things I ask... <br>*(her eyes dart down briefly)*<br> ...next time we can incoporate that.
</div>
</div>
<div class="story-text-area">
You do not reply, you continue to stare at the celing, satisfied.<br><br> After a few more moments of quiet cuddling, her practical side surfaces. She sighs softly and gives you a gentle nudge.
</div>
<div class="room-gf-presence">
<img src="images/herroom/layinbed1.jpg" alt="GF talking">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Okay... but listen. You know how my parents can be, sometimes they call or show up unannounced at the crack of dawn. We absolutely cannot risk them catching you in my bed in the morning. As lovely as this is, it's safest if you head back to your own room now.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="$mcName">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(A small sigh escapes you, but you nod)*<br> Yeah... okay. You're right. Don't want to cause trouble with them.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="$gfName">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She adds quietly as you start to disentangle)* <br>And make sure you take that condom with you. Get rid of it in the bathroom, nice and discreetly. No evidence left behind, alright?
</div>
</div>
<div class="story-text-area">
You give a nod to $gfName as you exit the room and head toward the bathroom.
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $arousal to 0>>
/* Set the flag for pubic shaving task, it will be added by StartNewDay */
<<set $taskShavePubesActive to true>>
<<set $owncondom to false>>
<<set $gfLocation to "$gfName Bedroom">>
<</silently>>
<div class="room-actions">
<<link "Dispose of the condom" "Bathroom">>
<<set $sleeptime to true>>
<</link>>
</div><<if $day is 2 and $talkcount is 2 and $tasks.length is 0>>
<<set $gfLocation = "Exercise Room">>
<</if>><div class="story-text-area">
You surface from sleep, instantly aware of a demanding throb low in your belly. Your eyes snap open to find <<print $gfName>> sitting up beside you in bed, wearing a simple teal sleeping dress. She’s holding a mug, the aroma of coffee faintly drifting from it. Her expression is calm, watchful, and you know immediately she's the source of your intense physical state.
</div>
<div class="room-gf-presence">
<img src="images/bedroom/EJonMCbedCoffee.webp" alt="$gfName sitting up beside you in bed">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good morning. Finally decided to join the living. You seem to be starting the day quite... responsive. <br>*(Her smile fades slightly as her gaze sharpens on your jawline)*<br> But I see stubble already. We need to keep that face smooth for me, <<print $mcName>>. ''Every single day''. Remember? <br>*(She holds the coffee mug out to you)*<br> Here.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Morning... Right. Stubble. Sorry. I'll handle it first thing after this. Thanks for the... coffee.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods, taking the mug back for a second so you can adjust, then placing it firmly back in your hands)*<br> You're welcome. Yesterday was good. Your face was perfectly smooth, much better. And the new clothes look right on you. It shows you're listening, making an effort. <br>*(Her tone becomes slightly more pointed, intimate)*<br> That's important. Just like keeping your face smooth is important if you want my kisses... you need to remember our ''other'' discussion. About keeping things smooth ''down there''. If you expect my mouth anywhere near you again, it needs to be completely clean. No hair. Is that clear?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Meets her gaze, feeling heat rise in his face. The combination of his arousal and her talk of rewards makes him bold)*<br> Yeah... Crystal clear, <<print $gfName>>. Face and... pubes. Smooth. For... you know. <br>*(He sets the coffee mug hastily back on the nightstand and reaches for her, trying to pull her closer)*<br> Maybe we could... start the appreciation early today?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Stops him easily, placing a firm hand flat on his chest. Her expression isn't angry, just resolute)*<br> <<print $mcName>>. ''No''. Not yet. <br>*(Her voice is quiet but clear, leaving no room for doubt)*<br> First things first. Enthusiasm is noted, but we have an understanding. You need to make yourself presentable for me. ''Completely'' presentable.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Stills, taken aback. Irritation mixes with the arousal and embarrassment)*<br> Presentable? But... you were just touching me! While I was asleep! ''You'' got me like this, and now you're saying no?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(A genuinely mischievous glint appears in her eyes. She leans in a little, her voice dropping to a low, teasing murmur)*<br> Was I? Perhaps I was just... checking on things. Making sure all your parts were still in working order after such a busy day yesterday. Or maybe... <br>*(She pauses, letting the implication hang)*<br> ...maybe I just enjoy knowing I can touch my boyfriend whenever, and however, I please, even when he's dreaming. Doesn't mean the rules change when you wake up. <br>*(She straightens up, her expression becoming firm and business-like again)*<br>
</div>
</div>
<div class="story-text-area">
You stare at her, momentarily speechless at her directness and lack of denial about her actions, but also how she has you all worked up and is just....leaving you here.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her tone leaves no room for argument)*<br> Now, enough chatter. Get up. Drink your coffee. Go take care of your grooming – face ''and'' pubes. Completely smooth. And remember your daily chores need doing as well; keep the apartment tidy. ''Then'', if you've handled all your responsibilities properly, we'll discuss... appreciation. Go on now.
</div>
</div>
<<silently>>
<<set $talkedtoday to true>>
<<set $talkcount to 1>> /* Assuming this is the first talk of Day 4 */
/* Tasks shaveFace and shavePubes should already be added by StartNewDay widget based on flags set on Day 3 */
/* Daily cleaning tasks ($taskCleanActive) likely also set by StartNewDay or need separate activation */
<<set $gfLocation to either("$gfName Bedroom", "Kitchen", "Living Room")>> /* GF leaves MC's room */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Handle your tasks..." "Your Bedroom">>
/* Link back to MC's room */
<</link>>
</div><div class="room-container">
<div class="room-header">
<h2>Can't Concentrate!</h2>
</div>
<div class="story-text-area">
You attempt to start the chore, but your mind immediately floods with distracting thoughts, fueled by your high arousal ($arousal). Your body feels restless and needy.
<br><br>
Focusing on mundane tasks like cleaning seems impossible right now. You need to address this overwhelming feeling first, or at least wait until you've calmed down significantly.
<br><br>
//Maybe that magazine back in your room could offer some... immediate relief? //
<br><br>
You couldn't bring yourself to start the chore.
</div>
<div class="room-actions">
<<link "Forget it for now" $currentRoom>>
<</link>>
</div>
</div><div class="story-text-area">
$mcName steps out of the bathroom. Feeling clean after the shower, he turns towards his room and finds <<print $gfName>> leaning against the doorframe, waiting for him, an expectant look on her face.
</div>
<div class="room-gf-presence">
<img src="images/gf/ejd4aftershower.jpg" alt="<<print $gfName>> leaning against the doorframe">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Finished? Good. Step inside your room for a minute, I have something for you. <br>*(She pushes off the doorframe and walks into his room ahead of him, expecting him to follow)*<br>
</div>
</div>
<div class="story-text-area">
Once he's inside, she turns from his dresser, holding three pairs of neatly folded boxers. One pair is a rich red, another a deep teal, and the third a crisp blue.
</div>
<br>
<div class="room-gf-presence">
<img src="images/clothing/underwear/boxers_red.png" alt="Red Boxers">
</div>
<div class="room-gf-presence">
<img src="images/clothing/underwear/boxers_teal.png" alt="Teal Boxers">
</div>
<div class="room-gf-presence">
<img src="images/clothing/underwear/boxers_blue.png" alt="Blue Boxers">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
I was just looking through your dresser. That ''single'' pair of grey boxer briefs you have... it's rather functional, I suppose, but so incredibly dull. Entirely lacking in personality. <br>*(She places the red, teal, and blue boxers on his dresser)*<br> We need to inject some life into your wardrobe, starting from the basics. These are for you.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh. They're... certainly not grey. Thanks, <<print $gfName>>. But the grey one works fine, really. It's comfortable. Does it matter?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Meets his gaze directly, her expression patient but firm)*<br> 'Fine' isn't the standard we're aiming for, <<print $mcName>>. Presentable is. And presentable according to ''my'' standards involves a little more effort, a little more color, even underneath. Plain grey is simply... insufficient. Uninspired. I want you to wear something with more style, more flare.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
No one sees them anyway. Does it really make a difference what color they are?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Takes a deliberate step closer. Her voice remains level but carries undeniable authority)*<br> It makes a difference ''to me''. You've said you like the clothes I choose, the grooming I ask. This is part of that same process. <br>*(She shrugs slightly)*<br> You can keep the grey one if you're attached to it. However, I hope you choose less drab clothing, the styles ''I'' consider appropriate... that demonstrates your commitment to presenting yourself correctly here, for me, for us.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Looks from the bright boxers back to her, processing the implication. It's not a direct order to discard, but a clear statement of preference and expectation)*<br> Right. Okay. So... you ''expect'' me to wear these ones instead of the grey one.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Not exactly, if you have other clothing that removes the focus on the drab clothing, I am hapy wih that also. It's about the overall picture, the effort you put into meeting my standards. I trust you'll make the appropriate choice starting now. Now, get yourself dressed.
</div>
</div>
<<silently>>
/* Add the new boxers to owned clothing */
<<run $ownedClothing.add("boxers_red")>>
<<run $ownedClothing.add("boxers_teal")>>
<<run $ownedClothing.add("boxers_blue")>>
<<set $talkcount += 1>>
<<set $currentScoreRequirement = 19>>
/* Set GF's location after conversation */
<<set $gfLocation to either("$gfName Bedroom", "Kitchen", "Living Room")>>
/* Update sidebar */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Get dressed..." "Your Bedroom">>
/* Link back to MC's room */
<</link>>
</div>
<div class="story-text-area">
You approach <<print $gfName>>, hoping to talk, but she gives you a quick, appraising look, and her expression tightens almost imperceptibly. There's a coolness in her eyes that wasn't there before.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Actually, <<print $mcName>>, not right now. <br>*(She gestures vaguely at your current outfit)*<br> Honestly, seeing you dressed like... ''that''... it's a bit distracting. It doesn't quite fit the standard I expect, especially if we're going to have a proper conversation.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh. My clothes? What's wrong with them?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She sighs softly, a hint of impatience)*<br> Let's just say it's not quite... appropriate for what I had in mind. Put a little more thought into your appearance, meet my expectations, and ''then'' we can talk properly. Maybe try changing into something more suitable?
</div>
</div>
<div class="story-text-area">
Her message is clear: your current appearance isn't up to par for her right now. You feel dismissed, realizing your clothing choice has consequences for interacting with her.
<br><br>
/% --- Developer Debug Info (Hidden from player) --- %/
/% Score requirement check failed: $displayScore > $requiredScoreForFailureMessage %/
/% Requirement (Max Allowed): $requiredScoreForFailureMessage %/
/% Player Score: $displayScore %/
/% --- End Debug Info --- %/
</div>
<div class="room-actions">
<<link "Leave her be for now" $currentRoom>>
/* Player returns to the room they were in */
<</link>>
</div>
<<silently>>
/* Determine the color of the worn underwear for dialog */
<<set _wornUnderwearColor to "unknown">>
<<if $wornUnderwear is "boxers_red">>
<<set _wornUnderwearColor to "red">>
<<elseif $wornUnderwear is "boxers_teal">>
<<set _wornUnderwearColor to "teal">>
<<elseif $wornUnderwear is "boxers_blue">>
<<set _wornUnderwearColor to "blue">>
<</if>>
<</silently>>
<div class="story-text-area">
Later that day, you find <<print $gfName>> relaxing <<print ($gfLocation == "$gfName Bedroom" ? "in her room" : "in the " + $gfLocation.toLowerCase())>>. You approach her.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey <<print $gfName>>. Got a minute?
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/neutral.webp" alt="$gfName Looks up">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Of course, <<print $mcName>>. Come sit. <br>*(She gestures for him to come closer)* <br>How are you doing today?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I'm okay. Just... you know. Adjusting.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Nods understandingly)*<br> Good. <br>*(She reaches out, gently touching his jawline)*<br> Let me see... <br>*(Her fingertips trace his skin)*<br> Ahh, much better. ''Perfectly'' smooth, just like I asked. Feels so nice.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yes, I am really satrting to get used to it <<print $gfName>>.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
And underneath? Did we make the ''right'' choice today? <br> *(Her eyes hold a playful challenge. She leans forward slightly and gives the waistband of your jeans a quick, firm tug, revealing a flash of <<print _wornUnderwearColor>>)*
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Slightly flustered)*<br> Uh... yes. The <<print _wornUnderwearColor>> ones you gave me.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Visibly pleased, nods)*<br> Excellent. Much better than that drab grey. It shows you're really paying attention to the details I care about.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I'm trying my best.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Voice lowers slightly)*<br> And... the other grooming requirement? For... special attention? All taken care of?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Nods, avoids her gaze slightly)*<br> Yes. Smooth. Like you asked.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Wonderful, <<print $mcName>>. Face smooth, wearing the right underwear, properly groomed downstairs... You followed all my instructions perfectly today. You absolutely deserve a reward for being so compliant and attentive.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Looks hopeful)*<br> Oh?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her tone brightens)*<br> You've earned a relaxing evening. Why don't we order some takeout tonight – my treat. We can just curl up on the couch and watch a movie. How does that sound? A proper break after a day of good work and focusing on yourself.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah... yeah, <<print $gfName>>, that sounds amazing.
</div>
</div>
<div class="room-gf-presence">
<img src="images/activities/d4movie.jpg" alt="$gfName smiling">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*($gfName gestures towards the door)*<br> You earned it. Come on, let's go decide what we want to eat first. We can pick something to watch later.
</div>
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation to "Living Room">>
<<unset _wornUnderwearColor>> /* Clean up temp variable */
<<run UI.update("StoryCaption")>> /* Update sidebar */
<</silently>>
<div class="room-actions">
<<link "Follow her" "Living Room">>
<</link>>
</div>
<div class="room-gf-presence">
<img src="images/activities/d4movie.jpg" alt="$gfName smiling">
</div>
<div class="story-text-area">
The living room is cozy, bathed in the soft, flickering light from the TV screen where the romantic comedy <<print $gfName>> picked is playing. Empty takeout containers rest on the coffee table, evidence of the easy dinner she treated you to – a clear reward for your earlier compliance. You're both settled comfortably deep into the plush sofa, tucked under a shared cashmere blanket. The atmosphere is relaxed, affectionate.<br>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmovietalk.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
<<print $gfName>> lets out a soft laugh at something one of the characters says, then glances over at you, her eyes sparkling in the dim light. She nudges you playfully with her shoulder.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
You're awfully quiet over there. Don't tell me you're actually getting invested in whether Charlotte ends up with the brooding architect?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Offers a small, genuine smile)*<br> Hey, it's... surprisingly watchable. The dialogue is sharp, I'll give it that. And Charlotte's kind of funny. Besides... <br>*(He meets her gaze, his voice softening slightly)*<br> ...it's nice just being here like this. Relaxing with you feels good.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She leans her head comfortably against his shoulder)*<br> It is nice, isn't it? Especially knowing everything's taken care of, and you've been so attentive today. Makes it easy to just... unwind together.
</div>
</div>
<div class="story-text-area">
She snuggles a little closer, focusing back on the movie. You put an arm around her as you watch together in comfortable silence for several more minutes.<br>
</div>
<div class="story-text-area">
After another stretch of the movie, during a quieter moment, <<print $gfName>> shifts slightly, stretching her legs out along the couch with a soft sigh.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmovielookfeet.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Mmm, this couch is heaven, but my feet are absolutely ''killing'' me today. Seriously, they feel like I ran a marathon in heels, even though I didn't.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Really? That bad?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Nods, wiggling her feet)*<br> Achy. Definitely achy.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Hesitates only briefly, remembering her pleasure at his earlier compliance)*<br> Hey... if they're that sore... I could massage them for you? While we finish the movie, if you like?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Turns to him, smiling with pleasant surprise)*<br> Oh? Would you really do that? <<print $mcName>>, that would be ''heavenly''. Yes, please! That's incredibly sweet.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmovieremoveheels.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmovierubfeet1.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
She eagerly lifts her feet, shifting so they rest comfortably in your lap. You then move to the other, working methodically to ease the soreness while the movie continues to play. <<print $gfName>> lets out small, contented sighs, her body visibly relaxing deeper into the sofa cushions. The atmosphere feels warm, caring, and comfortably intimate.<br>
</div>
<div class="story-text-area">
As the movie's end credits begin to scroll up the screen, <<print $gfName>> yawns and stretches.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmovierubfeet2.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Wow... <<print $mcName>>, that was absolutely ''perfect''. My feet feel like they're floating on clouds. Thank you – that was incredibly thoughtful, and you have a surprisingly good touch.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Smiling, glad she's happy)*<br> Just wanted you to be comfortable. You looked like you really needed it.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Turns to him more fully, her expression soft but clear)*<br> I really did. You know... this is exactly the kind of relaxing end to the day I appreciate. It felt so restorative. You should do this for me ''every'' morning, <<print $mcName>>. A morning foot rub after I've waken up would really set up my day for success. It would be a wonderful, consistent way for you to help me prepare. Consider it one of your regular contributions.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Slightly surprised by the 'every day' instruction but nods readily, wanting to maintain the positive mood)*<br> Oh. Every day? Okay, <<print $gfName>>. Yeah, if it helps you relax that much, I can definitely do that.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Leans in and gives him a sweet, lingering kiss on the cheek, her lips soft against his smooth skin)*<br> ''Excellent''. I knew I could count on you. It's these consistent little acts of care that truly matter.
</div>
</div>
<div class="story-text-area">
$gfName walks out of the living room as you clean up the take out and tidy up the room after the evening activities.
</div>
<<silently>>
<<set $taskFootrubActive to true>>
<<set $talkcount += 1>>
<<set $gfLocation to either("Kitchen", "Exercise Room", "$gfName Bedroom", "Bathroom")>>
<<run UI.update("StoryCaption")>> /* Update sidebar */
<</silently>>
<div class="room-actions">
<<link "Continue the evening." "Living Room">>
<</link>>
</div>
<div class="story-text-area">
As you're both winding down for the evening, you catch <<print $gfName>>'s eye.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey <<print $gfName>>... heading to bed? I, uh, just wanted to let you know I took care of all the grooming you asked for today. Face and pubes. Made sure it's smooth, like you wanted for... later?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good. I expect you to maintain that daily. Following instructions is important.<br>*(Her tone becomes decisive)*<br> However, I'm quite tired now. I've decided tonight is just for sleeping. We can talk about your blowjob another day.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Sleeping? But you ''promised''! You said if I shaved everything... And this morning? You got me completely worked up and then just left! Why do that if you were just going to be 'too tired' tonight?
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejannoyedface.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Impatient sigh)*<br> <<print $mcName>>, managing your expectations is important. What happened this morning is irrelevant to how I feel ''now''. And ''now'', I require sleep. My need for rest comes first. We just had a wonderful movie night, are you really going to ruin that mood over a silly blowjob? The decision is made.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her tone softens considerably, offering a brief, warm smile)*<br> Look, I know you were hoping for more tonight, and I ''do'' appreciate you taking care of everything I asked. You did well.<br>*(Slight pause)*<br> But I really am exhausted right now. Go get some sleep in your room, okay? We need to be careful about appearances for my parents. If you have trouble sleeping, you have your magazine. Goodnight, <<print $mcName>>.
</div>
</div>
<div class="story-text-area">
She gives you that warm smile one last time before turning towards her own bedroom, leaving you with the clear, albeit kinder, dismissal.
</div>
<<silently>>
<<set $gfLocation to "$gfName Bedroom">> /* She goes to her room */
<<set $sleeptime to true>> /* Set flag that MC should now go to sleep */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Head to your room..." "Your Bedroom">>
/* Link leads MC back to his room to trigger sleep */
<</link>>
</div><div class="story-text-area">
After finishing your morning grooming and chores, you find <<print $gfName>> relaxing in the <<print ($gfLocation == "$gfName Bedroom" ? "bedroom" : $gfLocation.toLowerCase())>>. She looks up as you approach, looking immaculate as always.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
There you are, <<print $mcName>>. Chores all done? And I see you've maintained your grooming properly today – face nice and smooth. Good.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, all done. It's getting easier to keep up with.
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/mutalk.jpg" alt="$gfName talking about mak up">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
It takes consistency to look presentable, doesn't it? But I wonder if you truly appreciate the effort ''I'' put in every single day... getting my hair right, doing my makeup, choosing the perfect outfit... all so I look good for ''you'', for us.<br>*(Slight pause, her gaze is knowing)*<br> Maybe if you understood that, you'd understand why sometimes, like last night, a girl is genuinely too tired for extra activities.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I... I do appreciate it, <<print $gfName>>. You always look amazing. I didn't mean to imply...
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She holds up a hand gently, stopping him)*<br> Words are easy, <<print $mcName>>. Today, you're going to learn appreciation through experience. You're going to help me with my entire routine – skincare, makeup, hair, and my outfit. You'll see firsthand the time and effort involved.<br>*(She leans in slightly, her voice dropping to a promising whisper)*<br> And if you're a good, attentive helper all day... then tonight, I ''promise'' you'll get that blowjob you were so disappointed about missing. Consider it motivation.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Help... with your makeup? And hair? I don't know anything about that stuff...<br>*(His eyes flick up, meeting hers, the promise clearly registering)*<br> But... okay. If it means... tonight... I'll do my best.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Excellent. Attitude is key. Don't worry, I'll guide you.<br>*(She smiles confidently)*<br> Now, I need to gather a few things first. Let's head to the bathroom.
</div>
</div>
<<silently>>
<<set $talkedtoday to true>>
<<set $talkcount to 1>>
<<set $gfLocation = "Bathroom">>
<<modifyArousal 20>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Let's see where this goes...">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div><div class="story-text-area">
You're waiting in the bathroom as <<print $gfName>> requested, feeling slightly out of place amidst the organized array of bottles and jars on her counter. The air already carries a faint mix of her signature vanilla scent and something floral. She enters a moment later, nodding briefly to you before turning her attention to the sink, all business.
</div>
<br>
<div class="room-gf-presence">
<img src="images/bathroom/supplies.png" alt="$gfName bathroom supplies">
</div>
<br>
<div class="story-text-area">
//Okay, just watch? She seems really focused. Definitely more steps than just soap and water...// <br>She begins her face-washing routine, moving with practiced efficiency. She applies a cleanser from an elegant bottle, rinses thoroughly, and gently pats her face dry with a small, plush towel you hadn't noticed before – likely reserved just for her face.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She speaks while examining her reflection, her tone instructive)*<br> Always start with a clean base. No point putting expensive products on dirty skin. This cleanser has ceramides... important for the skin barrier. You should learn about these things.
</div>
</div>
<div class="story-text-area">
She finishes with her face and reaches for a different, larger bottle of creamy body lotion – it looks rich, with shea butter judging by the packaging. She applies it methodically to her arms and legs.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Alright... now the tricky part. I can never quite reach my upper back properly.<br>*(She turns partially towards you, holding the lotion bottle)*<br> <<print $mcName>>, come here and make yourself useful, she says jokingly.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
//Okay, stay calm. Be helpful. Remember the promise... Just lotion.//<br>Uh... sure, <<print $gfName>>. Ready when you are.
</div>
</div>
<div class="story-text-area">
You step closer. As she pumps a generous amount into your offered hand, the scent hits you strongly – it's not just vanilla, but heavy gardenia, maybe jasmine? It's intensely floral, almost overwhelmingly sweet. //Whoa, okay. That smells... really strong. Definitely her smell, nothing like my own stuff... Smells... overtly feminine... But remember tonight's promise... be helpful.// <br>You realize she's dispensed quite a large dollop of the rich cream into your palm.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Raises an eyebrow slightly at the amount)*<br> Oops, that's quite a bit... Just use a little of that for now.<br>*(She turns her back slightly, pointing)*<br> Right here, between my shoulder blades. Smooth it in gently and evenly.
</div>
</div>
<div class="story-text-area">
You carefully apply some of the lotion to the indicated spot on her smooth back. The cream feels silky, and the potent floral scent seems to intensify with the warmth of her skin, clinging heavily to your hands. You try to be gentle and even as she instructed, hyper-aware of the task, the intimate scent, the excess lotion cooling on your palm, and the promised reward later.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Alright, that's done.<br>*(She glances back at your hands, still coated in the white lotion)*<br> Goodness, <<print $mcName>>, look at all that excess. We don't waste expensive lotion in this house. Rub the rest of it into your own arms. Go on, all of it. Make them nice and soft.
</div>
</div>
<div class="story-text-area">
//Great. Now I smell like a flower garden... Hope she likes it.// <br>Slightly flustered but obedient, you rub the remaining, powerfully scented lotion onto your own forearms and biceps. The heavy floral fragrance blooms around you, now emanating strongly from your own skin. Your arms feel smoother, softer under the rich cream, and distinctly smell like her.
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/bathroomprepare.jpg" alt="$gfName smiling in mirror">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Watches you finish, with a flicker of amusement in her eyes)*<br> There. Much better than letting it go to waste. Your skin will thank you.<br>*(She turns back towards the mirror and the array of makeup on the counter admiring herself in her bathrobe)*<br> Now that the skin is properly prepped and moisturized... we can move on to makeup.
</div>
</div>
<<silently>>
<<set $baseScore -= 3>>
<<calculateScore>>
<<modifyArousal 5>>
<<run UI.update("StoryCaption")>> /* Update sidebar */
<</silently>>
<div class="room-actions">
<<link "Continue assisting..." "Talk_D5_GF_Assist_Makeup">>
<</link>>
</div><div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Right, makeup. The base is everything. Need to even out the skin tone first.<br>*(She begins dabbing foundation onto her face with a sponge)*<br> Blending is key... no streaks allowed. This step alone takes concentration.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
<<print $mcName>>, pass me the angled blush brush – the one with the pink handle, sitting over there.
</div>
</div>
<div class="story-text-area">
You carefully locate the specific brush and hand it to her. She swirls it in a compact of blush powder.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Okay, hold out your wrist, palm down.<br>*(She demonstrates hovering the brush near her own wrist)*<br> I need you to let me tap the excess powder off this brush onto your skin before I apply it. Like this... nice and gentle. Don't want powder falling everywhere.
</div>
</div>
<div class="story-text-area">
You hold out your wrist as instructed. She lightly taps the brush against your skin, leaving a faint pinkish dusting near where the feminine lotion scent still lingers. //Great, now I've got pink dust on my arm... Still smelling that lotion too... This is weird.// She then turns back to the mirror and applies the blush to her cheeks with practiced sweeps. <br><br>She then removes her bathrobe, I am not sure sure why. Is she trying to tease me even more?
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She picks up an eyeliner pencil, leaning closer to the mirror)*<br> Now for eyes. See this liquid eyeliner? Waterproof, smudge-proof... and costs a small fortune for such a tiny bottle. And don't get me started on quality eyeshadow palettes – the good ones with real pigment are a serious investment, <<print $mcName>>. You have no idea the expense involved in looking effortlessly good every day. You should remember that.
</div>
</div>
<div class="story-text-area">
She carefully applies her eyeliner, then selects colors from a palette and applies eyeshadow and mascara. You watch, noting the focus and time it takes. //She just spent five minutes drawing one line... And it costs that much? How much does all this add up to? No wonder she controls the finances... Remember the promise... just keep helping...// She finishes her eyes and picks up a tube of lipstick.
</div>
<div class="room-gf-presence">
<img src="images/gf/lipstick.jpg" alt="$gfName applies lipstick">
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Almost done... Lips.<br>*(She applies the lipstick carefully)*<br> Hand me a tissue, please.
</div>
</div>
<div class="story-text-area">
You pass her a tissue from the box on the counter.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She takes the tissue, folds it precisely, places it between her lips, and presses down firmly)* <br>Perfect blot. There. Presentable.<br>*(She surveys her reflection, then turns to you)*<br> Quite the process, isn't it? Takes time, precision... and money. Far more involved than you probably imagined.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Now for hair. Honestly, I think I'd rather relax on the couch while I deal with that. Meet me in the living room in a couple of minutes, okay? And bring my hairbrush – the wooden one from the top drawer here.
</div>
</div>
<div class="room-gf-presence">
<img src="images/gf/mirroradmire.webp" alt="$gfName smiling into the mirror">
</div>
<div class="story-text-area">
She puts her robe back on and admires her work thus far in the mirror before leaving for the living room.
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation = "Living Room">>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Grab her hairbrush and go to the living room..." "Living Room">>
<</link>>
</div><br>
<div class="room-gf-presence">
<video src="images/vids/ejonphone.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
You walk into the living room and find <<print $gfName>> settled comfortably on the couch, scrolling through something on her phone. She looks up as you approach.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Got the brush you asked for, <<print $gfName>>.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Looks away from her phone)*<br> Thank you. Put it on the coffee table for now.<br>*(She starts running her fingers through her hair)*<br> First, I need to get any tangles out... even dry hair gets knots sometimes.
</div>
</div>
<div class="story-text-area">
// Is tonight really going to happen? Keep being helpful.// She then begins sectioning her hair with practiced ease.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Okay, I need you to hold this section here.<br>*(She gathers a portion of her hair near the top)*<br> Keep it separate from this part I'm about to work on. Hold it firmly but don't pull while I use the straightener.
</div>
</div>
<div class="story-text-area">
You take the section of hair carefully, its texture surprisingly soft. She picks up a straightening iron and begins meticulously working on the lower sections of her hair, the tool gliding smoothly. You watch her focused movements.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She speaks while working on a section, not looking at you)*<br> This takes patience... have to get every piece just right. And you have to be careful not to burn yourself ''or'' your hair with these things. Takes focus, can't be rushed.
</div>
</div>
<div class="story-text-area">
After finishing the main styling, she puts down the straightener and gestures for the brush you brought earlier.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Alright, almost done. Take the wooden brush now and just gently brush through everything one last time, make sure it's perfectly smooth. Long, even strokes from top to bottom.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/activities/brushhair.webp" alt="$mcName brush her hair">
</div>
<br>
<div class="story-text-area">
You take the brush and carefully begin brushing her newly styled hair. It feels silky and smells faintly of heat protectant and her shampoo. As you continue the repetitive, soothing strokes, she picks up her phone again from the couch cushion beside her and starts scrolling, seemingly absorbed. Suddenly, she lets out a short, sharp *giggle* while looking intently at the screen. Just as quickly, she taps the screen decisively, her expression becoming neutral again, and puts the phone down, face down, on the cushion beside her.
</div>
<div class="story-text-area">
//What was that giggle about? She shut that off fast... The screen angle... was that... profiles? Like on a dating app?//<br>*(A cold knot of unease tightens in your stomach, a stark contrast to the promised intimacy later. You force yourself to keep brushing smoothly)*<br> //No, don't say anything now. Not while I'm doing this, not before tonight... I need to ask her later. //
</div>
<div class="story-text-area">
You finish brushing. Kate seems oblivious to your internal turmoil, picking up a small hand mirror from the coffee table to inspect her hair.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She checks the back and sides, then nods)*<br> Okay, that's acceptable.<br>*(She puts the mirror down and sighs lightly, sounding genuinely a bit tired now)*<br> Skincare, makeup, hair... it really is a production, <<print $mcName>>. Takes so much time and focus each day. Do you understand that a bit better now?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You try to push the phone incident aside for now)*<br> Yeah. Honestly, I had no idea. It's... a lot. It looks great, <<print $gfName>>. Really.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/finishedhair.webp" alt="$gfName admiring herself">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good. Understanding the effort is important.<br>*(Gives you an approving nod)*<br> You were helpful today. Now, the final step is the outfit. Meet me in my bedroom – I need to decide exactly what I'm wearing with this look.
</div>
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation = "$gfName Bedroom">>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Head to her bedroom..." >>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div><div class="story-text-area">
You follow <<print $gfName>> into her bedroom. Clothes are laid out on the bed, and her closet door is open. She gestures vaguely towards the options.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Ah, good, you're here. Hair and makeup done, but now the ''real'' challenge – finding the perfect outfit to tie it all together. It's not just throwing anything on, you know.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/items/knitset.jpg" alt="black knit blouse and some wide-leg flare pants">
</div>
<br>
<div class="story-text-area">
She picks up a black knit blouse and some wide-leg flare pants, looking at them critically.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Hmm, maybe this knit bluse and flare pants? No... too '70s retro for today, I think. Doesn't match the effort we put in. <br>*(She tosses them onto a chair)*.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/items/outfitplaidskirt.jpg" alt="itted top and a plaid skirt">
</div>
<br>
<div class="story-text-area">
Next, she considers a fitted top and a plaid skirt.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Or this top with the plaid skirt? Cute, but... maybe a bit too 'schoolgirl' playful after all the sophisticated makeup work. Not the vibe.<br>*(She puts them aside)*.
</div>
</div>
<div class="story-text-area">
//How many outfits does she have? We spent ages on hair and makeup, now this? That promise better be real... She looks amazing just standing there, though...//<br>Her eyes light up as she pulls a specific dress from the closet.
</div>
<br>
<div class="room-gf-presence">
<img src="images/items/pinkdress.png" alt="pink, strapless tube dress">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Ah! ''This'' is more like it. Simple, bold, and definitely shows off... the effort.<br>*(She holds up a bright pink, strapless tube dress, very form-fitting and short, made of a smooth, stretchy material)*.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Okay, turn around for a moment.
</div>
</div>
<div class="story-text-area">
You turn away. After a rustle of fabric, she speaks again.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Alright. Zipper, please. Gently.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/pinkdress.jpg" alt="$gfName in pink dress">
</div>
<br>
<div class="story-text-area">
You turn back and carefully zip up the back of the tight pink dress. She looks stunning.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Looking in the mirror)*<br> Simple but effective. The color works well, don't you think? Now, shoes... definitely needs heels. <<print $mcName>>, could you get the black stilettos for me? The ones with the bows on the ankle strap. They're in the black box on the top shelf of the closet.
</div>
</div>
<div class="story-text-area">
You head to her closet, locate the correct box on the top shelf, and retrieve the heels, bringing them over to where she's now sitting on the edge of her bed.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Takes one shoe)*<br> These always make such a statement.<br>*(She slides her foot into the sleek, black open-toed stiletto. It features a single strap across the toes and a thin, high heel. A wider strap wraps around her ankle, adorned at the back with a large, dramatic black bow made of soft, suede-like material)*.<br> This buckle is always fiddly. Give me a hand fastening it, would you?
</div>
</div>
<div class="story-text-area">
You kneel, carefully taking the strap and threading it through the small buckle, fastening it snugly around her ankle. You do the same for the other shoe.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Stands up, walks to the mirror, and surveys the complete look)*<br> There. ''Now'' it's a complete look. Perfect.<br>*(Turns to face you)*<br> Skincare, makeup, hair, dress, heels... See how every single element matters, <<print $mcName>>? The coordination? The ''effort''? Well? Do you have a better appreciation now for what goes into looking like this every day?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Takes a step closer, eyes lingering on her figure in the dress and heels)*<br> Yes! Definitely. It's... stunning, Kate. The whole picture! So... about that promise...?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Holds up a hand, halting him gently but firmly. Her expression turns serious, searching his eyes)*<br> Before we get to that... tell me honestly. Do you ''really'' understand now? The time it takes? The cost involved? The precision needed for every step? Do you actually ''appreciate'' what it takes?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Meets her serious gaze, sounding sincere)*<br> Yes, Kate. Honestly... yes. Seeing everything you did today... the skincare, the makeup, the hair, choosing the outfit... It's... a lot more than I ever realized. I definitely appreciate it more now. Truly.
</div>
</div><br>
<div class="room-gf-presence">
<img src="images/gf/smiling.jpg" alt="$gfName smiling ">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(A genuine, satisfied smile spreads across her face. She nods slowly)*<br> Good. I'm glad you understand. Appreciation ''is'' important.<br><br> And attentive helpers deserve their rewards... Now, about that promise...why dont we head back to the living room. I think you need to relax on the sofa while I reward you.
</div>
</div>
<<silently>>
<<set $talkcount += 1>>
<<modifyArousal 25>>
<<set $gfLocation = "Living Room">>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Receive your reward..." >>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div><div class="story-text-area">
Back in the living room, the atmosphere shifts. <<print $gfName>>, looking radiant after completing her routine, turns her full attention to you.
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/gfhug.jpg" alt="$gfName hugging">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
You were such a good helper today, <<print $mcName>>. So attentive... so compliant.<br>*(She pulls you close for a long hug)*<br> It's time you received your reward.
</div>
</div>
<div class="story-text-area">
Before you can fully process her words, she leans in, kissing you deeply, almost demandingly. Her hands aren't idle; they move with surprising speed and purpose down your body, unfastening your jeans and pushing them down your legs, taking your underwear along with them. You're suddenly exposed on the couch, her direct actions leaving you breathless and making your arousal spike sharply. //Whoa! Okay... she's not wasting any time... This is... intense.//
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Pulls back from the kiss just enough to speak, her gaze intense as she looks at your exposed state)*<br> Much better... easier access... Now. The condom.
</div>
</div>
<<if $owncondom is false>>
<div class="story-text-area">
Your heart sinks. You don't have one.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh... uh... I don't have one right now, <<print $gfName>>. I must have forgotten to order a new one after last time.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(The desire in her eyes cools instantly, replaced by disappointment and a hint of impatience)*<br> I see. Well, <<print $mcName>>, unpreparedness has consequences. As I've made clear, the rule is non-negotiable.<br>*(She pulls away completely)*<br> No condom, no reward. You know where to get one. Perhaps try again another day. For tonight, you have your magazine.
</div>
</div>
<div class="story-text-area">
The intensely promising atmosphere evaporates, leaving only awkwardness and your own frustrated arousal. The reward is withdrawn simply because you weren't prepared as expected.
</div>
<div class="room-actions">
<<link "Frustrated, you pull up your pants...">>
<<set $gfLocation to either("$gfName Bedroom", "Bathroom")>>
<<set $talkcount += 1>> /* Still counts as an interaction */
<<set $sleeptime to true>>
<<run UI.update("StoryCaption")>>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<<else>>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
A condom? Still? <<print $gfName>>, but why? For this? It really doesn't make sense. There's no pregnancy risk here.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her eyes narrow slightly, her tone sharpening instantly, leaving no room for debate)*<br> Don't question my rules, <<print $mcName>>. I said every time. It's non-negotiable. It demonstrates control – mine over the situation, and yours over your impulses. Hand me the condom now, or this reward ends immediately.
</div>
</div>
<div class="story-text-area">
//Okay, definitely no arguing that... Non-negotiable. Just give it to her...// <br>Her unwavering stare and the clear ultimatum leave you no choice if you want this. You retrieve the single condom package and place it in her outstretched hand.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/condomon.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
Kate takes the condom, tears open the wrapper with efficient fingers, and proceeds to carefully roll it onto you. Her touch is firm, practiced, and undeniably controlling as she completes the task, leaving you ready, encased in latex according to her command.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/condomteasebj.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
With the condom securely in place, she leans down without further delay. Her lips close over the latex barrier, and she licking and teasing your cock. Her technique is confident, skilled, focusing entirely on the task at hand. You watch, caught between the intense visual of <<print $gfName>> in her stunning outfit servicing you and the somewhat muted, indirect physical sensations caused by the condom and the fact that there is no penetration at all. It's a strange mix of desire fulfilled and intimacy constrained by her rules. You long for her to take your cock in her mouth, but she continues to just tease the tip.<br>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/condombjcum.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
Despite the barrier, the persistent teasing quickly pushes you towards the edge. A groan escapes you as your orgasm builds and releases within the confines of the condom. Kate continues for a few moments longer before pulling away smoothly, her expression calm. The total time was less than two minutes.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She leans against your shoulder briefly, her tone soft)*<br> Okay... reward delivered successfully. You followed all instructions today, even when you didn't understand.<br>*(She shifts slightly, moving away to signal the end of the intimate moment)*<br> Alright, time to get sorted for the night.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Carefully take that off now.<br>*(She gestures towards the used condom)*<br> Wrap it well in tissue and put it deep in the main bathroom trash bin, make sure it's hidden. No evidence, remember?<br>*(Offers a soft, perhaps slightly tired smile)*<br> Then off to your own room. Sleep well, <<print $mcName>>. You earned your rest tonight.
</div>
</div>
<<silently>>
<<set $talkcount += 1>> /* Increment talk count for reward scene */
<<set $arousal to 0>> /* Reset arousal post-climax */
<<set $owncondom to false>> /* Condom has been used */
<<set $gfLocation = "$gfName Bedroom">> /* She likely goes to her room after */
<<set $sleeptime to true>> /* Set flag for MC to sleep */
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Clean up in the bathroom..." "Bathroom">>
/* Link directs MC to bathroom first for cleanup */
<</link>>
</div>
<</if>> /* End of condom check */<div class="room-container">
<div class="story-text-area">
You find <<print $gfName>> in her room, the usual vibrant energy of her day softened by the late hour.
She just finished her nightly skincare routine or choosing what to wear for bed.
A sense of calm readiness for sleep pervades her space.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejsleeptime.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Oh, hey <<print $mcName>>.
<br>*(She turns, offering a small, tired but sweet smile.)*<br>
I was just getting ready to call it a night. It's been a long one.
You look like you're tired also. Why don't you go get comfortable in your room? We can catch up on anything else in the morning.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah, sounds good, <<print $gfName>>. I'll head off then. Sleep well.
</div>
</div>
<div class="story-text-area">
She nods, clearly expecting you to leave her to her nighttime routine.
</div>
<div class="room-actions">
<<link "I should probably head to bed">>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
<<ChoreFailCheck>>
<div class="room-container">
<div class="room-header">
<h2><<print $gfName>>'s Morning Footrub</h2>
</div>
<<if $gfLocation is "Living Room">>
<div class="story-text-area">
You head to the living room, remembering your daily task. As you enter, you find <<print $gfName>> already there, looking through a magazine and sipping a morning drink. She glances up as you approach, a soft, expectant smile on her face.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good morning, <<print $mcName>>. I was hoping you'd remember. My feet are a little stiff this morning. A good rub would be a wonderful way to start the day.
</div>
</div>
<<else>>
<div class="story-text-area">
You find <<print $gfName>> in the <<print $gfLocation.toLowerCase()>>. She looks up as you enter.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Morning, <<print $gfName>>. Ready for your footrub?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Good morning! And yes, that sounds lovely. Why don't we head to the living room? It's more comfortable there.
</div>
</div>
<div class="story-text-area">
<<print $gfName>> stands, and you both make your way to the living room. She settles onto the plush sofa, getting comfortable.
</div>
<</if>>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Ready when you are.
</div>
</div>
<div class="room-gf-presence">
<<set _timg to random(1, 10)>>
<<set _timg to "images/tasks/footrub/start/foot" + _timg + ".jpg">>
<img @src="_timg" alt="<<print $gfName>> shifts, gracefully extending her feet">
</div>
<div class="story-text-area">
With a soft sigh of anticipation, <<print $gfName>> shifts, gracefully extending her feet towards you. She wiggles her toes slightly, settling back into the cushions.
</div>
<div class="story-text-area">
You move to sit at the end of the couch, carefully taking her feet into your hands. They feel warm and soft. You begin to gently massage them, working your thumbs into the soles, then moving to her ankles and calves, remembering the spots she seemed to enjoy.
She closes her eyes, a quiet hum of contentment escaping her lips as you work. The morning light filters into the room, and the only sounds are the gentle rustle of her clothes as she relaxes further and the occasional soft sigh she lets out.
<br><br>
This has quickly become a part of your daily routine, a quiet act of service to start her day. There's an intimacy to it, yet it's also a clear reminder of her expectations and your role in fulfilling them. You focus on the task, aiming to provide the relief she seeks, finding a strange sort of rhythm in the repetitive motion, your touch intended to soothe and please.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Mmm, that's wonderful, <<print $mcName>>. Such a perfect way to begin the day. You're getting quite good at this.
</div>
</div>
<div class="story-text-area">
After a while, when you sense she's fully relaxed and her feet feel supple, you gradually ease the massage.
</div>
<<silently>>
<<set $gfLocation to "Living Room">>
<<modifyArousal 8>>
<</silently>>
<div class="room-actions">
<<link "Finish the footrub" "Living Room">>
<<set $tasks = $tasks.filter(t => t.key !== "footrub")>>
<<run UI.update("StoryCaption")>>
<</link>>
</div>
</div><div class="story-text-area">
You find <<print $gfName>> in the <<print $gfLocation.toLowerCase() == "your bedroom" ? "kitchen, already dressed in a stylish outfit you haven't seen before" : $gfLocation.toLowerCase()>>. She seems ready to head out, a subtle air of purpose about her.
</div>
<div class="room-gf-presence">
<<set _gfimg_d6_outfit to random(1, 18)>>
<<set _gfimg_d6_outfit_path to "images/gf/outfits/l1-ejoutfit" + _gfimg_d6_outfit + ".jpg">>
<img @src="_gfimg_d6_outfit_path" alt="<<print $gfName>> dressed to go out">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Morning, <<print $mcName>>. Just wanted to let you know, I'll be heading out for most of the day. I should be back this evening.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh. Out? Where are you going?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She gives a slight, non-committal shrug, her smile polite but not particularly warm)*<br>
Just... out and about. Here and there. A few things I need to take care of.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Alone? Or... are you meeting someone?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
I'm meeting a friend.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
A friend? Which friend? Is it someone I know?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her gaze remains steady, a hint of impatience now visible. She glances at her watch briefly.)*<br>
Just a friend, <<print $mcName>>. Don't worry your head about it.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
But, <<print $gfName>>, I just mean, if you're going to be out all day, I was wondering if—
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She cuts him off smoothly, her tone now brisk and final. She steps towards the door.)*<br>
Look, I really need to get going. You will find some things to keep you occupied, I'm sure. Perhaps watch some TV, or better yet, check out that magazine I left you?
</div>
</div>
<div class="story-text-area">
Before you can say another word, she gives gives your balls a quick massage, and gives you a great view of her cleavage. This turns you on immensely. She then abuptly heads out the door, leaving you standing there with a growing sense of unease, arousal and confusion. The click of the apartment door closing sounds particularly final.
</div>
<<silently>>
<<set $talkedtoday to true>>
<<set $talkcount to 1>>
<<set $arousal to 95>>
<<set $gfLocation to "Out">>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Watch her leave..." $currentRoom>>
<</link>>
</div><div class="room-container">
<br>
<div class="room-gf-presence">
<video src="images/vids/ejcomehome.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
The click of the front door announces <<print $gfName>>'s return. Her footsteps sound in the hall before she enters the <<print $currentRoom.toLowerCase()>>, carrying a small bag. She looks towards you, her expression unreadable, a little distant.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey, <<print $gfName>>. You're back. Everything go okay today?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She gives a brief, almost automatic smile.)*<br>
Yes, <<print $mcName>>. Everything went as planned. Just a busy day out.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh, good. Did you, uh... did you meet up with that friend you mentioned this morning?
//Keep it light, just asking.//
</div>
</div>
<div class="story-text-area">
You now notice that her outfit has changed. When did she change? Why did she change?
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her expression hardens almost imperceptibly. Her voice remains even, but carries a clear tone of finality.)*<br>
My day is concluded, <<print $mcName>>.
<br>*(She meets your gaze directly, her eyes cool and dismissive.)*
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
//Okay, shut down completely.//
Right. Understood.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She turns slightly, dismissing the subject entirely.)*<br>
Good. I'm quite tired now. It's been a long day, and I'm ready for sleep.
<br>*(Her tone shifts, becoming more directive.)*
<br>*(She moves towards her bedroom.)*<br>
Goodnight.
</div>
</div>
<div class="story-text-area">
She doesn't linger, heading directly to her bedroom and closing the door. You're left with the distinct feeling of being shut out, her vague answers and dismissive tone fueling your unease.
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation to "$gfName Bedroom">>
<<set $sleeptime to true>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
[[Head to your room and prepare for sleep...->Your Bedroom]]
</div>
</div><div class="room-container">
<div class="story-text-area">
Sleep doesn't come easily. The vague unease from <<print $gfName>>'s return lingers. Just as you're drifting towards unconsciousness, a series of faint sounds from her bedroom jolts you awake. It's a rhythmic, hushed sound... accompanied by soft gasps. Your mind struggles to identify it for a moment, dismissing possibilities – the building settling, traffic outside. But the sounds continue, growing slightly clearer. Curiosity, sharp and insistent, outweighs your hesitation. Cautiously, you slip out of your bed.
</div>
<div class="story-text-area">
The hallway is dark. You creep silently towards <<print $gfName>>'s closed bedroom door, your heart pounding softly in your chest. The sounds become more distinct now – definitely <<print $gfName>>, her breathing quickening, the rhythmic friction unmistakable. She's in there, alone, and clearly... busy. A strange mix of confusion, arousal, and a knot of something cold and uncomfortable tightens in your gut.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmast1.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
You arrive outside her room where her door is cracked open. Was it intentional? You dont know, all you know is you have a full view of your girlfriend in all ger nakes glory pleasureing herself. What prmopted this? Her night out? Are you not putting out enough for her? Your mind wonders.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/ejmast2.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
You reach her door, hesitating with your hand hovering near the knob. Should you knock? Should you open the door more - your body frozen at the sight you now behold. The intense sounds, which now include buzzing make you pause, rooted to the spot. You lean closer.
</div>
<div class="story-text-area">
Then, a soft, prolonged groan from within her room, filled with a deep, raw pleasure you've rarely heard from her directed at you, causes you to inhale sharply in surprise, stumbling back half a step. Your foot catches quietly on the carpet edge, and a small, unavoidable thump echoes in the hallway.
</div>
<div class="story-text-area">
Silence. Absolute, immediate silence from <<print $gfName>>'s room. The air crackles with tension.
//Shit. She heard me.//
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her voice cuts through the silence, sharp and furious. It's low, but loaded with intense, barely contained anger.)*<br>
<<print $mcName>>! What the ''hell'' do you think you are doing?!
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
//Uh oh. Deep trouble.//
I... I just... I heard sounds. I was worried.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(The door swings open. <<print $gfName>> stands there, wrapped tightly in a robe, her hair slightly disheveled, face flushed. But her eyes are blazing, fixed on you with cold fury.)*<br>
Worried?! You were ''eavesdropping''! You were lurking outside my bedroom door, spying on me!
<br>*(Her voice trembles slightly with the force of her emotion.)*<br>
How ''dare'' you invade my privacy like this?!
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
No! I wasn't! I swear! I just... came to check. I made noise by accident!
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She takes a step forward, her intensity forcing you to instinctively back up.)*<br>
Accident?! You were standing there, in the dark, listening! After I explicitly told you my day was not up for discussion! Do you have absolutely ''no'' respect for my personal space? For me?!
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Of course I do! <<print $gfName>>, please, I didn't mean...
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
<br>*(She cuts you off, her voice dropping to a low, dangerous hiss.)*<br>
Get. Back. To. Your. Room. Now. I don't want to see you. I don't want to talk to you tonight.
<br>*(She gestures fiercely down the hallway.)*<br>
We will discuss this colossal invasion of my privacy in the morning. And trust me, <<print $mcName>>, you have a ''lot'' of explaining to do. Do you understand?!
</div>
</div>
<div class="story-text-area">
You shrink back from her fury, the icy coldness in her voice more cutting than any shout. Her agitated breathing is the only sound in the tense hallway. There is no mistaking the command or the depth of her anger. Your earlier arousal is completely gone, replaced by a sickening wave of dread and regret.
//I really messed up this time. Badly.//
</div>
<<silently>>
<<set $talkcount += 1>>
<<modifyArousal -50>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
[[Retreat to your room...->Your Bedroom]]
</div>
</div>
<div class="room-container">
<br>
<div class="room-gf-presence">
<img src="images/gf/morning.jpg" alt="$gfName at the door">
</div>
<br>
<div class="story-text-area">
Sunlight is beginning to filter through the blinds in the spare room when you stir awake. The first thing you register is a silhouette at your door, and the soft, familiar scent of vanilla. Your eyes open, and you find <<print $gfName>> standing there, seemingly just out of bed with her lingerie and robe on, watching you with a thoughtful expression. The memory of last night's furious confrontation floods back, making your stomach clench.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her voice is quiet, softer than last night, though still serious.)*<br>
Morning, <<print $mcName>>. We need to talk about what happened.
</div>
</div>
<div class="story-text-area">
You push yourself up, leaning back against the headboard. The tension in the room is palpable, a stark contrast to the peaceful morning light.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Yeah. Look, <<print $gfName>>, I... I really am sorry about last night. I didn't mean to spy. I just heard... sounds... and I was worried something was wrong. I wasn't trying to listen in.
</div>
</div>
<div class="story-text-area">
She moves into the bed and under the covers with you.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods slowly, her expression softening slightly.)*<br>
I know. I... I overreacted. Massively. I was startled, and... well, I wasn't expecting anyone to be outside my door. My privacy is important to me, and for a second, I just saw red. That wasn't fair to you. I shouldn't have yelled like that.
<br>*(She reaches out and takes your hand, her touch gentle.)*<br>
I apologize, <<print $mcName>>. I'm sorry I got so angry.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You squeeze her hand, relief washing over you at her apology.)*<br>
It's okay, Kate. I understand. I shouldn't have been lurking in the hallway. I just... reacted without thinking.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/morning2.jpg" alt="$gfName at the door">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile becomes genuinely warm, full of affection.)*<br>
Good. We're okay then. I hate going to bed angry with you.
<br>*(She gives your hand a comforting pat before releasing it.)*<br>
And... as an apology for my outburst last night...
<br>*(Her voice drops slightly, becoming low and suggestive. A familiar spark enters her eyes.)*<br>
...tonight, we'll have sex. No more excuses, no being too tired. Just you and me, in my bed. It's the least I can do to make up for being so harsh.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(Your heart leaps. The promise of intimacy, freely offered, is almost overwhelming.)*<br>
Oh. <<print $gfName>>... thank you. That's...
//Wow. Just like that?//
That's really generous.
//Okay, don't mess this up. Be cool. But maybe... maybe I can ask now?//
Hey... about yesterday...
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her expression instantly shifts back to that polite but firm look from last night. The softness vanishes, replaced by clear, assertive boundaries.)*<br>
No, <<print $mcName>>. My day out is not up for discussion. My private life is not your business. We are discussing last night's misunderstanding, and that discussion is now concluded.
<br>*(Her tone leaves no room for argument.)*<br>
Do not confuse my apology with an invitation to pry into matters that do not concern you.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
//Okay, back to that. She's serious.//
Right. Sorry. Won't happen again.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She gives a decisive nod, her gaze sweeping over the room.)*<br>
Good. Now, enough dwelling on it. We have a day to get through. You have your daily tasks to complete – hygiene, grooming, keeping the apartment tidy. Ensure everything is taken care of properly.
<br>*(She stands up from the bed, her presence filling the small room with her expectation.)*<br>
Focus on your responsibilities, <<print $mcName>>. I will see you later.
</div>
</div>
<div class="story-text-area">
She turns and leaves the room without another word, leaving you sitting on the bed, the confusing mix of relief, anticipation for tonight, and the sting of her renewed dismissal swirling in your head. The mystery of her day and the anger from last night remain, but the promise of intimacy is a powerful motivator.
//Alright. Daily tasks. And then... tonight.//
</div>
<<silently>>
<<set $talkedtoday to true>>
<<set $talkcount to 1>>
<<set $gfLocation to either("$gfName Bedroom", "Kitchen", "Living Room", "Exercise Room")>>
<<modifyArousal 25>>
<<run UI.update("StoryCaption")>> /* Ensure sidebar updates */
<</silently>>
<div class="room-actions">
[[I have things to do->Your Bedroom]]
</div>
</div><div class="room-container">
<div class="story-text-area">
Having finished all the chores and grooming tasks for the day, you seek out <<print $gfName>>. You find her in the <<print $gfLocation.toLowerCase()>>, looking relaxed and scrolling on her tablet. She looks up as you approach, a hint of a smile playing on her lips.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Hey, <<print $gfName>>. All done with everything on my end.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She puts her tablet down, giving you her full attention. Her smile widens, her eyes tracing your form approvingly.)*<br>
Good. I knew you would be. You've been so attentive to all my requests today. Clean apartment, face smooth...
<br>*(Her gaze lingers for a moment on your groin, her voice dropping to a low purr.)*<br>
...and everything else properly maintained, I trust?
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You feel heat rise in your face at her directness, but the anticipation for tonight makes you bold.)*<br>
Yes, <<print $gfName>>. Exactly like you like it.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/ejyeltopgskirt.jpg" alt="$gfName smiling at the door">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile deepens, a mischievous glint in her eyes. She shifts slightly, crossing her legs, drawing your attention.)*<br>
Excellent. Knowing that... it makes me look forward to tonight even more. Feeling all that smooth, clean skin against mine...
<br>*(She trails off suggestively, letting the image hang in the air.)*<br>
Speaking of tonight, I had an idea. A little something special before we get to the main event.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
An idea? What kind of idea?
//Please don't be another task...//
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/ejyeltopgskirt1.jpg" alt="$gfName smiling at the door">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She laughs softly, leaning forward conspiratorially.)*<br>
Just a little something to make things even more... comfortable. More pleasurable. I was thinking about how nice it feels when things are soft and smooth against the skin, especially at night.
<br>*(She meets your eyes, a clear hint in her gaze.)*<br>
I was looking at some options earlier today. Something that would feel absolutely wonderful... to the touch. Something to really enhance that feeling of... closeness.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Soft? Smooth?
//What is she talking about? Something to wear? For me?//
Okay... what do you have in mind?
//Whatever it is, just agree. Tonight!//
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her smile is full of satisfaction at your eagerness.)*<br>
Exactly. Something that would feel incredible against your newly smooth skin. Something that reflects how well you're adapting.
<br>*(She gestures vaguely towards your room.)*<br>
I've already arranged for it. Just call me into your room when you're ready, and we'll take a look together. It's the perfect precursor to our evening.
<br>*(Her voice is firm, leaving no doubt about the plan.)*<br>
Don't keep me waiting too long. Oh, and dont think I forgot about this evening, here, have a little preview.
</div>
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/ejyeltopgskirt2.jpg" alt="$gfName smiling at the door">
</div>
<br>
<div class="story-text-area">
You nod, your mind racing with possibilities, mostly centered around the promised intimacy, especially after that panty flash. Whatever her "idea" is, the hint of something soft and smooth, combined with her suggestive tone, only amplifies your anticipation. You're ready for whatever she has planned, as long as it leads to tonight.
//New pajamas? Does she want me in something specific? Whatever. Just agree. Tonight!//
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation to either("$gfName Bedroom", "Kitchen", "Living Room", "Exercise Room")>>
<<modifyArousal 25>>
<<set $shopevent to true>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Focus on tonight..." >>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
</div><div class="room-container">
<div class="story-text-area">
You head back to your room and, taking a deep breath, call for <<print $gfName>>. It feels a little strange, initiating this after her vague hinting, but the promise of tonight is a powerful motivator.
</div>
<div class="story-text-area">
You call her into your room, when she arrives, she places the laptop on the bed and then gives you a little tease. Making sure you remember what tonight holds.
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/ejyeltopgskirt3.jpg" alt="$gfName small tease">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Ready to see my little idea for tonight, <<print $mcName>>?
<br>*(She gestures towards the laptop screen, turning it slightly towards you.)*<br>
As I said, I want everything to feel wonderfully soft and smooth tonight, especially against your skin... and mine.
</div>
</div>
<div class="story-text-area">
Your eyes fall on the screen. It's an online shopping page, displaying a two-piece pajama set.
</div>
<br>
<div class="room-gf-presence">
<<print setup.clothing.sleepTop.sleep_top_champ_satin_shirt.name>>
<img src="images/clothing/sleep/sleep_top_champ_satin_shirt.png">
</div>
<br>
<br>
<div class="room-gf-presence">
<<print setup.clothing.sleepBottom.sleep_bottom_champ_satin_pants.name>>
<img src="images/clothing/sleep/sleep_bottom_champ_satin_pants.png">
</div>
<br>
<div class="story-text-area">
The fabric looks incredibly smooth, almost liquid in the way it drapes. It's clearly a women's pajama set, a satiny, champagne color. It's beautiful, elegant... and utterly different from anything you've ever considered wearing.
//Okay, definitely not what I pictured. Silk pajamas? For me?//
The thought is strange, but <<print $gfName>>'s expectant smile and the memory of her promise keep you focused.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
They're... very... soft looking.
//Just go with it. Soft and smooth. She said that.//
That satin... yeah. Looks smooth.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
<br>*(Her smile brightens, pleased with your response.)*<br>
They are. Imagine that against your skin, honey. Just luxurious. It will be perfect.
<br>*(She quickly clicks a few buttons on the laptop.)*<br>
Ordered! AmZon Prime Drone will have it here within the hour.
</div>
</div>
<div class="story-text-area">
While you wait, she closes the shopping tab and opens a different page on her laptop.
</div>
<br>
<div class="room-gf-presence">
<img src="images/activities/bras.webp" alt="$gfName showng bras on the computer">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Since we have a moment... I was looking at this earlier.
<br>*(She turns the screen towards you again.)*<br>
It's some basic training on different types of bras.
</div>
</div>
<div class="story-text-area">
The screen displays an infographic detailing various bra styles – balconette, strapless, plunge, T-Shirt, etc., with small images and descriptions. You stare at it, completely confused.
//Bras? Why... what am I supposed to do with this?//
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Bras? <<print $gfName>>, I... I don't wear bras.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She giggles softly, a playful look in her eyes.)*<br>
I know that, silly. I meant, which one is your favorite? On me? Imagine me wearing them. Which style do you like best?
</div>
</div>
<div class="story-text-area">
Realization dawns, and heat rushes to your face again. She wasn't showing you this to learn for yourself, but to learn about her preferences. You quickly scan the images, trying to pick one.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
Oh! Right. Uh...
That one? The... bandaeu?
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods, smiling.)*<br>
See? It's good to learn. Knowing what you like is... informative.
<br>*(She closes the laptop.)*<br>
Now, where is that drone... Ah, I think I hear it.
</div>
</div>
<div class="story-text-area">
The distinct whirring sound of an approaching drone grows louder. A moment later, it hovers outside your window, depositing a small package.
</div>
<div class="room-gf-presence">
<<set _drimg to random(1, 7)>>
<<set _drimg to "images/activities/drone" + _drimg + ".jpg">>
<img @src="_drimg" alt="Drone Delivery">
</div>
<div class="story-text-area">
<<print $gfName>> retrieves the package. She opens it with a practiced tear, pulling out the satin pajama set.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
Perfect. Go on, put them on. Right now. I want to see you in them.
<br>*(Her eyes are expectant, full of anticipation.)*<br>
Let's see how wonderfully soft they look... and feel.
</div>
</div>
<div class="story-text-area">
Under her direct gaze, you quickly take off your current clothes. You slip on the champagne satin shirt and pants. The fabric is cool and smooth against your skin, a completely alien sensation for sleepwear. It feels incredibly light, almost like wearing nothing.
</div>
<br>
<div class="room-gf-presence">
<img src="images/gf/ejyeltopgskirt4.jpg" alt="$gfName small tease">
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her eyes widen slightly, then she smiles, a slow, satisfied expression spreading across her face.)*<br>
Oh, <<print $mcName>>. Yes. That's... perfect. Absolutely perfect. You look incredible. So soft, so smooth, so... ready. This is exactly the feeling I wanted.
<br>*(She takes the old blue pajamas from your dresser.)*<br>
These old things... we won't be needing these anymore.
</div>
</div>
<div class="story-text-area">
She bundles up the blue pajama set without a second glance. They are gone from your meager wardrobe. She steps closer, her hand lightly stroking the satin.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her voice is a low, promising murmur.)*<br>
This feels so much better. So much more appropriate. Tonight... wearing these for me... it's going to be exquisite. I'll see you later, <<print $mcName>>. Make sure you're wearing those when you come to my room.
</div>
</div>
<div class="story-text-area">
<<print $gfName>> gives you one last look, her eyes full of anticipation for the night ahead, before leaving your room. You're left standing in the unfamiliar, luxurious feel of the satin pajamas, your anticipation building to a fever pitch.
//Okay. This is happening. New pajamas... for tonight...//
</div>
<<silently>>
/* Remove old pajamas */
<<run $ownedClothing.delete("sleep_pj_blue_shirt")>>
<<run $ownedClothing.delete("sleep_pj_blue_pants")>>
/* Add new pajamas */
<<run $ownedClothing.add("sleep_top_champ_satin_shirt")>>
<<run $ownedClothing.add("sleep_bottom_champ_satin_pants")>>
/* Update worn clothing */
<<set $wornTop to "sleep_top_champ_satin_shirt">>
<<set $wornBottoms to "sleep_bottom_champ_satin_pants">>
/* Update saved sleep outfit to the new set keys */
<<set $savedOutfits.sleep.outer.top to "sleep_top_champ_satin_shirt">>
<<set $savedOutfits.sleep.outer.bottom to "sleep_bottom_champ_satin_pants">>
/* Mark shopping event as complete */
<<set $shopevent to false>>
/* Increment talk count */
<<set $talkcount += 1>>
/* Arousal increases significantly */
<<modifyArousal 30>>
/* Set GF's location after she leaves */
<<set $gfLocation to either("Kitchen", "Living Room", "Exercise Room")>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
[[Prepare for the evening...->Your Bedroom]]
</div>
</div><div class="room-container">
<div class="story-text-area">
Wearing the champagne satin pajamas, feeling the smooth, unfamiliar fabric against your skin, you leave your room to find <<print $gfName>>. You locate her in the <<print $gfLocation.toLowerCase()>>, looking perfectly put together as always. She glances up as you enter, her eyes widening slightly as she takes in your appearance. A slow smile spreads across her face.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her voice is warm and appreciative.)*<br>
Oh, <<print $mcName>>. You kept them on. You look... stunning. Absolutely beautiful in those. They suit you so well.
</div>
</div>
<div class="story-text-area">
Her genuine pleasure is evident, but you still feel a wave of self-consciousness in the undeniably feminine sleepwear.
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You shift uncomfortably slightly.)*<br>
Thanks, <<print $gfName>>. They're... soft. Really soft. But... aren't they... aren't they clearly women's pajamas? I feel a little...
<br>
...weird.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She stands up and walks towards you, her smile gentle and reassuring.)*<br>
Honey, it doesn't matter if they're traditionally women's. What matters is how they feel. And how they look on you. Think about how soft that satin is against your skin, how comfortable they are. And they look absolutely exquisite.
<br>*(She reaches out, her fingers lightly stroking the fabric on your arm.)*<br>
The comfort and the aesthetics are what's important here, not some label.
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
I guess... It's just...<br>
//It's not just the label, it's how they look, how they feel... feminine.//<br>
...it's a big change.
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She nods, understanding, but her tone is firm.)*<br>
I know it is. But it's a good change. And who is going to see you in them, <<print $mcName>>? Only me. And I absolutely love them on you.
<br>*(Her eyes hold yours, full of both affection and expectation.)*<br>
Your only job is to look and feel good for me. And you look spectacular right now.
<br>*(She steps closer, her gaze becoming intense, hinting at the promised intimacy.)*<br>
Think about how this feels now. Imagine how much more amazing it will feel tonight...
</div>
</div>
<div class="story-text-area">
Her proximity, her words, and the soft caress on your arm send shivers through you. The strangeness of the pajamas fades into the background as anticipation for the promised sex takes over your thoughts.
//Right. Just for her. And tonight...//
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
<br>*(Her smile turns sensual, her voice dropping to a low murmur.)*<br>
...imagine that satin sliding against our skin... the smoothness...
<br>*(She trails a finger lightly down your chest.)*<br>
...I don't think I can wait until 'tonight'.
<br>*(Her eyes lock with yours, a surprising, bold challenge in their depths.)*<br>
I want you... in these. Now.
</div>
</div>
<div class="story-text-area">
Your breath catches in your throat. The sudden, unexpected shift in her timeline hits you with the force of a physical blow, but not an unwelcome one. Your mind races – 'now'? She's ready ''right now''?
//Holy hell. She means it. After everything... it's finally happening. And she wants it ''now''?!//
Your earlier hesitation about the pajamas vanishes completely, replaced by a surging tide of arousal and pure, unadulterated eagerness.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her voice is firm and decisive, back to her usual command, but underscored with intense desire.)*<br>
Go. My bedroom. Now. Don't keep me waiting. I want to feel that satin... and you... against me. I need your cock, your beautiful cock, inside me. I cannto wait.
</div>
</div>
<div class="story-text-area">
She turns and walks quickly towards her bedroom, leaving you standing there in the middle of the room, heart pounding, body throbbing with sudden, intense arousal. The champagne satin pajamas feel suddenly less strange and more like a uniform for the exquisite experience that awaits.
//Now. Okay. Now!//
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation to "$gfName Bedroom">>
<<modifyArousal 40>> // Major arousal spike
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Its time..." >>
<<set _prevPassageName to previous()>>
<<goto _prevPassageName>>
<</link>>
</div>
</div><div class="room-container">
<div class="story-text-area">
You practically sprint to <<print $gfName>>'s bedroom, the satin pajamas feeling slick against your skin, your heart hammering with anticipation. The door is ajar. You push it open and step inside.
</div>
<div class="story-text-area">
<<print $gfName>> is standing near the center of the room, bathed in the soft, strategic lighting she favors. She's wearing... a sexy schoolgirl uniform complete with a short skirt and high heels. It's utterly, breathtakingly sexy. Your eyes devour the sight of her, the contrast between her commanding attire and your own soft, feminine sleepwear sending a jolt of intense arousal through you.<br>
//Wow. She wasn't kidding. A uniform? And she wants me ''now''...//<br>
She meets your gaze, a dominant intensity in her eyes that promises exactly what you've been craving.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her voice is low and husky, a perfect match for her appearance.)*<br>
There you are. Took you long enough.
<br>*(She gestures impatiently towards you.)*<br>
Come here. Now.
</div>
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/putoncondom.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
You move towards her without hesitation, caught in the potent pull of her presence and the promise in her eyes. She doesn't waste a second. Reaching into a nearby drawer on her desk, she pulls out a single condom packet.<br>
//She already has one? Of course she does.//<br>
She tears it open with practiced ease and takes your erect cock in hand, quickly rolling the latex down the shaft with firm, efficient movements. Her touch is clinical, focused entirely on the task of preparation, yet the intimacy of her handling your erection sends another wave of heat through you.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(Her eyes flick up to yours once the condom is on, the dominant look intensifying.)*<br>
Ready?
<br>*(She walks purposefully to her desk and sits on the edge, her legs falling open slightly over the side, creating a space for you.)*<br>
Get over here. Eat me out.
</div>
</div>
<div class="story-text-area">
Following her command, you kneel between her legs. The soft satin of your pajamas pools slightly around your knees. She guides your head gently but firmly. You obey, eager to please, eager for the promised reward.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(After a moment, she shifts, guiding your hips with her hands.)*<br>
Okay... enough of that. I want you inside me. Now. Get up here.
</div>
</div>
<div class="story-text-area">
You stand and move closer, she adjusts herself on the desk, hooking her legs around your neck. Her uniform skirt rides high on her thighs, her shirt open and tits out. The condom is a barrier, but the feeling of her legs wrapped around you, her heat, her readiness, is overwhelming. She guides you expertly.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/condomfuck1.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She lets out a soft gasp as you slide inside her. Her hips begin to move, setting a demanding pace.)*<br>
Ah... yes. This is it. Feel that...
<br>*(Between breaths, her voice is urgent.)*<br>
...But remember... condom rule... when you're close... pull out... okay?<br>
*(She gently pushes you back as she turns on leans on the desk, putting one leg up.)*<br>''Fuck me hard <<print $mcName>>!''
</div>
</div>
<div class="story-text-area">
Her words barely register. The intensity of the moment, the feeling of being buried inside her, the sight of her above you in that uniform... it consumes your focus entirely. All the frustration, all the anticipation, boils down to this raw, overwhelming physical release. You plunge into the sensation, thoughts scattering, consciousness narrowing to the driving need building within you. Your hips buck, your body tightening uncontrollably.
''God... yes... Kate...''
The pleasure is a runaway train, accelerating past everything else.
</div>
<br>
<div class="room-gf-presence">
<video src="images/vids/condomcreampie.webm"
type="video/webm"
loop muted autoplay playsinline
style="max-width: 80%; max-height: 800px; display: block; margin: 0.5em auto 0 auto;">
Your browser does not support the video tag.
</video>
<br>
</div>
<br>
<div class="story-text-area">
A guttural groan rips from your throat as your climax hits. Your body seizes, muscles locking, jizz pulsing hot and heavy into the tip of the condom... while you are still deep inside her.
</div>
<div class="story-text-area">
The moment you collapse against her, breathless and spent, she pushes you back with force and stares directly at the full condom and then up into your eyes, the intensity in her eyes doesn't soften. It shifts, hardening into pure, incandescent rage.
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
<br>*(Her voice is quiet, but vibrates with a terrifying fury you've never heard before. She shoves at your shoulders, trying to put distance between both of you.)*<br>
You... you ''idiot''! I TOLD you to pull out! I told you the rule! Every single time!
</div>
</div>
<div class="speech-bubble mc">
<img class="speaker-image" src="images/speech/mc.jpg" alt="<<print $mcName>>">
<span class="speaker-name"><<print $mcName>></span>
<div class="speech-text">
*(You are still, startled and confused by the sudden shift, panting.)*<br>
What? What's wrong? I had the condom on!
</div>
</div>
<div class="speech-bubble gf">
<img class="speaker-image" src="images/speech/gf.jpg" alt="<<print $gfName>>">
<span class="speaker-name"><<print $gfName>></span>
<div class="speech-text">
*(She scrambles off the desk, pulling her skirt down, her face contorted with absolute rage. She points towards the door, trembling.)*<br>
I said ''pull out''! You didn't listen! You never listen! You just think about yourself! You think because you had the condom on you could just do whatever you wanted?! After I told you specifically to PULL OUT?! I todl you that it was too dangerous, you agreed!
<br>*(Her voice rises, raw and furious.)*<br>
GET THE HELL OUT! GET OUT OF MY ROOM! NOW! YOU WORTHLESS, DISOBEDIENT FUCK GET OUT!
</div>
</div>
<div class="story-text-area">
Her curses follow you as you scramble backwards, grabbing your discarded satin pajamas, your body still buzzing from the orgasm but your mind reeling from the abrupt, explosive shift to fury. You are completely naked except for the condom, standing in the doorway of her room while she screams at you. The intimacy of moments ago is utterly annihilated, replaced by raw, terrifying anger.<br>
//Oh god. What did I do?!//<br>
There is nothing to do but escape her wrath. You turn and flee down the hallway, her furious voice echoing behind you.
</div>
<<silently>>
<<set $talkcount += 1>>
<<set $gfLocation to "$gfName Bedroom">>
<<set $sleeptime to true>>
<<modifyArousal -100>>
<<run UI.update("StoryCaption")>>
<</silently>>
<div class="room-actions">
<<link "Escape back to your room" "Your Bedroom">><</link>>
</div>
</div>This is the end of content for now, Thank you for playing!