<<widget "initaftercare">>
<<set $aftercare to {
rounds: 0,
npcactions: [],
pcactions: [],
partner: V.partner1,
}>>
<<if _args[0]>>
<<set $aftercare.postpassage to _args[0]>>
<<elseif $attemptednavigation>>
<<set $aftercare.postpassage to $attemptednavigation>>
<<unset $attemptednavigation>>
<<else>>
<<set $aftercare.postpassage to $lastlocpassage>>
<</if>>
<</widget>><<if ndef $aftercare>>
<<initaftercare>>
<</if>>
<<set _eventnpc to $aftercare.partner>>
<<set $aftercare.rounds++>>
<<if $aftercare.pcaction>>
<<set _pcaction to $aftercare.pcaction>>
<<run $aftercare.pcactions.push(_pcaction)>>
<</if>>
<<if $aftercare.npcaction>>
<<set _npcaction to $aftercare.npcaction>>
<<run $aftercare.npcactions.push(_npcaction)>>
<</if>>
<<set _rel to setup.Relationships.relationship_with(_eventnpc)>>
<<set _reltype to setup.Relationships.relationship_type_with(_eventnpc)>>
<<set _desrel to setup.people.desired_relationship(_eventnpc, false)>>
<<set _pcactions to []>>
<<set _npcactions to []>>
<<if _rel is "dominant">>
<<set _attitude to "dominant">>
<<elseif _rel is "submissive">>
<<set _attitude to "submissive">>
<<elseif _reltype is "romantic" or _desrel is "date">>
<<set _attitude to "romantic">>
<<elseif _reltype is "friend" or _desrel is "friend">>
<<set _attitude to "friend">>
<<elseif _desrel is "hatefuck" or _desrel is "rival" or !setup.people.likes_pc(_eventnpc)>>
<<set _attitude to "hatefuck">>
<<else>>
<<if setup.people.has_any_inclination(_eventnpc, "dominant")>>
<<set _attitude to "dominant">>
<<elseif setup.people.has_any_inclination(_eventnpc, "submissive")>>
<<set _attitude to "submissive">>
<<else>>
<<set _attitude to "friend">>
<</if>>
<</if>>
<<if $aftercare.rounds is 1>>
<<if _attitude is "dominant">>
<<anonorfullnamerelc _eventnpc>> smiles at you. "Good <<pet $pc>>."
<<elseif _attitude is "submissive">>
<<anonorfullnamerelc _eventnpc>> smiles at you. "How was that? Was I good?"
<<run _pcactions.push("reassure")>>
<<elseif _attitude is "romantic">>
<<anonorfullnamerelc _eventnpc>> smiles at you.
<<if setup.people.get_attitude(_eventnpc, "romance") gte 1000>>
"I love you..."
<<run _pcactions.push("love")>>
<<elseif setup.people.has_any_inclination(_eventnpc, "dominant")>>
"You liked that, didn't you?"
<<run _pcactions.push("acknowledge")>>
<<else>>
"How are you doing? Was it good?"
<<run _pcactions.push("reassure")>>
<</if>>
<<elseif _attitude is "friend">>
<<anonorfullnamerelc _eventnpc>> grins at you. "Did you have fun?"
<<run _pcactions.push("acknowledge")>>
<<elseif _attitude is "hatefuck">>
<<anonorfullnamerelc _eventnpc>> glances at you, then looks away and says nothing.
<</if>>
<br><br>
<<else>>
<<advtime 5 Attention Relaxation>>
<</if>>
<<if $aftercare.rounds is 1>>
<<set $lastnpcref to setup.people.get_name($aftercare.partner)>>
<<encounterrating $aftercare.rating>>
<br><br>
<</if>>
<<if _pcaction>>
<<switch _pcaction>>
<<case "reassure">>
You reassure <<po _eventnpc>> that <<ps>> did a good job. <<psc>> <<conj smile>>.
<<romance _eventnpc 5>>
<<case "acknowledge">>
You nod, and tell <<po _eventnpc>> that you did indeed have fun. <<psc>> <<conj grin>>.
<<lust _eventnpc 5>>
<<case "hadfun">>
You let <<po _eventnpc>> that you had fun. <<psc>> <<conj smile>>.
<<lust _eventnpc 5>>
<<case "love">>
You smile at <<po _eventnpc>>. "I love you too."
<<romance _eventnpc 10>>
<<case "didnthavefun">>
You tell <<po _eventnpc>> that you didn't enjoy what just happened very much.
<br><br>
<<switch _attitude>>
<<case "dominant">>
<<psc>> <<conj frown>>. "Sorry. I meant it to be fun for you too. I hope you'll let me try again."
<<case "submissive">>
<<psc>> <<conj frown>>. "I'm sorry. I'll try to do better next time, if there is a next time."
<<control _eventnpc -5>>
<<case "romantic" "friend">>
<<psc>> <<conj frown>>. "I'm sorry, <<dfirstname $pc>>."
<<case "hatefuck">>
<<psc>> <<conj smirk>>. "Oh well, I guess."
<<friendship _eventnpc -25>>
<</switch>>
<<case "cuddle">>
You cuddle up to <<po>>.
<<case "massage">>
You massage <<po>>, working your fingers into <<pp>> sore muscles.
<<case "kiss">>
You kiss <<po>> on the lips.
<<if !$aftercare.pcactions.includes("kiss")>>
<<romance _eventnpc 25>>
<</if>>
<<run setup.record_sex_memory(_eventnpc, "kissed")>>
<<case "secondround">>
You grin and ask <<po>> if <<ps>>'d like to go again. <<psc>> <<conj grin>> back and <<conj nod>>.
<<set _secondround to true>>
<<case "end">>
<<if $aftercare.npcactions.includes("end")>>
You agree with <<po>> that it's probably time to move on.
<<else>>
You tell <<po>> that it's probably time to move on.
<</if>>
<<set _ending to true>>
<</switch>>
<br><br>
<<run $aftercare.pcactions.push(_pcaction)>>
<</if>>
<<if $pc.pain() gt 0 and !$aftercare.npcactions.includes("massage") and _attitude isnot "hatefuck">>
<<set _npcaction to "massage">>
<<elseif _attitude is "dominant" and !$aftercare.npcactions.includes("praise")>>
<<set _npcaction to "praise">>
<<elseif $pc.humiliation() gt 0 and !$aftercare.npcactions.includes("cuddle") and _attitude isnot "hatefuck">>
<<set _npcaction to "cuddle">>
<<elseif $pc.humiliation() gt 0 and !$aftercare.npcactions.includes("reassure") and _attitude isnot "hatefuck">>
<<set _npcaction to "reassure">>
<<elseif ($aftercare.rounds gte 3 or _attitude is "friend") and !$aftercare.npcactions.includes("end") and !_ending>>
<<set _npcaction to "end">>
<<elseif _attitude isnot "hatefuck">>
<<set _npcaction to "cuddle">>
<</if>>
<<if _npcaction and !_secondround and !_ending>>
<<switch _npcaction>>
<<case "massage">>
<<psc _eventnpc>> <<conj massage>> you, soothing away the hurt.
<<if !$aftercare.npcactions.includes("massage")>>
<<set _pain to -Math.min(250, $pc.pain())>>
<<if _pain gt 0>>
<<dalterneed Pain _pain true>>
<<else>>
<<dalterneed Relaxation 15 true>>
<</if>>
<</if>>
<<case "praise">>
<<psc _eventnpc>> <<conj smile>> at you. "You did so good. Such a good <<pet $pc>>."
<<if !$aftercare.npcactions.includes("massage")>>
<<set _humil to -Math.min(250, $pc.humiliation())>>
<<if _humil gt 0>>
<<dalterneed Humiliation _humil true>>
<<else>>
<<dalterneed Attention 15 true>>
<</if>>
<</if>>
<<case "reassure">>
<<psc _eventnpc>> <<conj reassure>> you. "You did great."
<<if !$aftercare.npcactions.includes("reassure")>>
<<set _humil to -Math.min(250, $pc.humiliation())>>
<<if _humil gt 0>>
<<dalterneed Humiliation _humil true>>
<<else>>
<<dalterneed Attention 15 true>>
<</if>>
<</if>>
<<case "cuddle">>
<<psc _eventnpc>> <<conj nestle>> in against you, cuddling with you warmly.
<<if !$aftercare.npcactions.includes("cuddle")>>
<<set _pain to -Math.min(250, $pc.pain())>>
<<if _pain gt 0>>
<<dalterneed Pain _pain true>>
<<else>>
<<dalterneed Relaxation 15 true>>
<</if>>
<<set _humil to -Math.min(250, $pc.humiliation())>>
<<if _humil gt 0>>
<<dalterneed Humiliation _humil true>>
<<else>>
<<dalterneed Attention 15 true>>
<</if>>
<</if>>
<<case "kiss">>
<<psc _eventnpc>> <<conj lean>> in close and <<conj kiss>> you.
<<if !$aftercare.npcactions.includes("kiss")>>
<<dalterneed Relaxation 15 true>>
<<dalterneed Attention 15 true>>
<</if>>
<<run setup.record_sex_memory(_eventnpc, "kissed")>>
<<case "end">>
<<psc _eventnpc>> <<conj look>> at you. "All good? It's probably about time to move along..."
<</switch>>
<br><br>
<<run $aftercare.npcactions.push(_npcaction)>>
<</if>>
<<if _secondround>>
<<link "Next" EncounterRound>>
<<run setup.encounter_from_aftercare()>>
<<unset _eventnpc>>
<</link>>
<<elseif _ending>>
<<switch _attitude>>
<<case "romantic" "dominant" "submissive">>
<<psc _eventnpc>> <<conj smile>> and <<conj press>> a kiss to your lips, then <<conj nod>>.
<<run setup.record_sex_memory(_eventnpc, "kissed")>>
<<case "hatefuck">>
<<psc _eventnpc>> <<conj nod>>. "Yeah, I got places to be."
<<default>>
<<psc _eventnpc>> <<conj nod>>. "Yeah, probably."
<</switch>>
<br><br>
<<set _link to {text: "Continue", link: $aftercare.postpassage, noemoji: true}>>
<<link _link>><<unset _eventnpc>><<run $pc.fix_clothing(true)>><<unset $aftercare>><</link>>
<<else>>
<<if !$aftercare.pcactions.includesAny(["reassure", "acknowledge", "hadfun", "didnthavefun"])>>
<<if _pcactions.includes("reassure")>>
<<link "Reassure <<po _eventnpc>> that <<ps>> did well" Aftercare>><<set $aftercare.pcaction to "reassure">><</link>>
<br>
<<elseif _pcactions.includes("acknowledge")>>
<<link "Reply that you did in fact have fun" Aftercare>><<set $aftercare.pcaction to "acknowledge">><</link>>
<br>
<<elseif _pcactions.includes("hadfun")>>
<<link "Tell <<po _eventnpc>> that you liked it" Aftercare>><<set $aftercare.pcaction to "hadfun">><</link>>
<br>
<<elseif _pcactions.includes("love")>>
<<link "Say it back" Aftercare>><<set $aftercare.pcaction to "love">><</link>>
<br>
<</if>>
<<link "Tell <<po _eventnpc>> that you didn't like it" Aftercare>><<set $aftercare.pcaction to "didnthavefun">><</link>>
<br><br>
<</if>>
<<link "Kiss <<po _eventnpc>>" Aftercare>><<set $aftercare.pcaction to "kiss">><</link>>
<br>
<<link "Cuddle with <<po _eventnpc>>" Aftercare>><<set $aftercare.pcaction to "cuddle">><</link>>
<br>
<<link "Massage <<po _eventnpc>>" Aftercare>><<set $aftercare.pcaction to "massage">><</link>>
<br><br>
<<if !$aftercare.secondround>>
<<link "Ask about going again" Aftercare>><<set $aftercare.pcaction to "secondround">><</link>>
<br><br>
<</if>>
<<link "Move on" Aftercare>><<set $aftercare.pcaction to "end">><</link>>
<</if>><<if ndef $BulletinBoards>>
<<set $BulletinBoards to new Map()>>
<</if>><<include SetupBulletinBoards>>
<<set _board to setup.BulletinBoard.get_board_from($BulletinBoards, "residental")>>
<<set _text to _board.get_bulletin_preview(["board"])>>
<div>
A cork bulletin board hangs on the wall, plastered with different flyers, notes, and other stuff.
Hung on the board _text
<br>
<<link "Go look at it" BulletinBoardInspect>><</link>>
</div><<include SetupBulletinBoards>>
<div>
<<if ndef $BulletinBoards>>
<<set $BulletinBoards to new Map()>>
<</if>>
<<set _board to setup.BulletinBoard.get_board_from($BulletinBoards, "residental")>>
<<run _board.update_bulletins(["board"])>>
<<set _events to _board.get_bulletin_events_and_see()>>
<<if _events.length gt 0>>
<<for _event range _events>>
<<include _event.passage >>
<br>
<<if _event isnot _events[_events.length - 1]>>
<br>
<</if>>
<</for>>
<<else>>
There is currently nothing of interest on the board.
<</if>>
</div>
<br>
<<continuelink>><<include SetupBulletinBoards>>
<<set _board to setup.BulletinBoard.get_board_from($BulletinBoards, "stallroom")>>
<<set _text to _board.get_bulletin_preview(["stallroom"])>>
<div>
While being in the bathroom, you notice the various scribbles and carvings on the stall wall.
<<if _board.bulletin_amount gt 0>>
Marked on the wall _text
<br>
<<link "Inspect the wall" StallRoomWallInspect>><</link>>
<<else>>
However, beyond the usual "clever" limericks, there is nothing particularly interesting there.
<</if>>
</div><<include SetupBulletinBoards>>
<<set _board to setup.BulletinBoard.get_board_from($BulletinBoards, "graffiti")>>
<<set _text to _board.get_bulletin_preview(["graffiti"])>>
<div>
You walk by a wall decorated with various graffiti tags and art.
<<if _board.bulletin_amount gt 0>>
Visible on the wall _text
<br>
<<link "Inspect the wall" StallRoomWallInspect>><</link>>
<<else>>
However, beyond the usual "gang" tags, there is nothing particularly interesting there.
<</if>>
</div><div>
<<include SetupBulletinBoards>>
<<set _board to setup.BulletinBoard.get_board_from($BulletinBoards, "stallroom")>>
<<run _board.update_bulletins(["stallroom"])>>
<<set _events to _board.get_bulletin_events_and_see()>>
<<if _events.length gt 0>>
<<for _event range _events>>
<<include _event.passage >>
<br>
<</for>>
<<else>>
There is currently nothing of interest on the wall.
<</if>>
</div>
<br>
<<continuelink>>
<!-- Events for Board -->A colorful ad flyer is hanging on the board. A burger place is hiring.
<br>
<<link "Check it out" BulletinQuickieBurgerInspect>><</link>><<set _p to $niches["The QuickieBurger Franchise Owner"]>>\
<h2 class="bulletin-headline">HIRING</h2>\
Are you a young and energetic worker?
Do you want some real life experience doing a real job?
Do you like to help people and make their day better?
Yes?
Then come work for the world-renowned QuickieBurger restaurant at your local franchise in the beautiful town of Riverside!
We are searching for motivated and attractive people between the ages of 18 and 20 who won't shy away from giving their all.
We're looking for independent self-starters who will work flexible hours at a competitive hourly wage.
Come join our family and work for a better future!
Ask for <<dfullname _p>> in the QuickieBurger restaurant on Nutmeg Street if you are interested.
[[Back|BulletinBoardInspect]]An evocative recruiting flyer is hanging on the board. The Cheerleading Team is recruiting.
<br>
<<link "Check it out" BulletinCheerleadingRecruitInspect>><</link>><<set _p to $niches["The Cheerleading Coach"]>>\
<h2 class="bulletin-headline">CHEER TRYOUTS</h2>\
<b>Are you fearless?</b> Do you have Spirit? Let's hear it!
The FKU Cheerleading Team is hosting cheer auditions, open to all students.
Applicants must be team-loyal and capable of performing under pressure, both on and off the field! All skill levels are welcome.
Acceptance into the team will be based on Appearance, Showmanship, Body Control, Strength, Learning Capability, Overall Technique, Execution, Attitude, and Stage Presence. Special consideration is given to those who have previous experience in Dance, Jumps, or Tumbling.
Show some spirit!
Signup at the Blodgett Gym Recreation Office, or ask for Coach <<dfullname _p>>!
[[Back|BulletinBoardInspect]]A glossy, full-color recruiting flyer is hanging on the board. The Esports Team seeking new members.
<br>
<<link "Check it out" BulletinEsportsRecruitInspect>><</link>><<set _p to $niches["The Esports Coach"]>>\
<h2 class="bulletin-headline">ESPORTS TRYOUTS</h2>\
<b>Calling all heroes!</b>
The largest competitive Esports community on FKU campus is hosting open tryouts.
We're seeking skilled league and solo players to join us. Will you rise to meet the challenge and become part of this elite group?
Coach <<dfullname _p>> and the team utilize their unique backgrounds and a hands-on approach to elevate every team member - pushing everyone to reach their full potential.
All applicants must be currently enrolled as an FKU student and have a Niche.tv account in good standing to participate. No toxic players of any sort are permitted!
It's dangerous to go alone!
Submit your interest form at the Blodgett Gym Recreation Office, and let the games begin!
[[Back|BulletinBoardInspect]]A large, bold sports team flyer is hanging on the board. The Football Team is recruiting.
<br>
<<link "Check it out" BulletinFootballRecruitInspect>><</link>><<set _p to $niches["The Football Coach"]>>\
<h2 class="bulletin-headline">FOOTBALL WALK-ON TRYOUTS</h2>\
<b>Do you have what it takes?</b>
Coach <<dfullname _p>> and the Fighting Elks athletic club are looking for the next generation of champions!
Walk-On tryouts for the Fighting Elks Football Team are open to all enrolled FKU students!
<b>Get jacked! Get pumped! Get ready to be drilled:</b>
<span>•</span> Ball Handling
<span>•</span> Shooting the Gap
<span>•</span> Bump & Runs
<span>•</span> Finding the Hole
<span>•</span> Delivering Slobberknockers
Participants must bring proof of current insurance, proof of current physical, and class schedule. A GPA of 2.5 or higher is required.
Get in the game by signing up at the Blodgett Gym Recreation Office!
<b>GO FIGHTING ELKS!</b>
[[Back|BulletinBoardInspect]]A majestic sports team advertisement flyer is hanging on the board. The Swim Team is recruiting.
<br>
<<link "Check it out" BulletinSwimRecruitInspect>><</link>><<set _p to $niches["The Swim Coach"]>>\
<h2 class="bulletin-headline">SWIM TEAM TRYOUTS</h2>\
<b>Join the Fighting Elks Swim Team, and make a splash!</b>
FUN! | POSITIVE! | EXERCISE! | COMPETITION!
Beginners are welcome, but basic swim experience <b>is</b> required.
Must be able to swim 100 yards nonstop without assistance.
Coach <<dfullname _p>> emphasizes competitive intensity, technique, physique, and form - including:
<span>•</span> Freestyle
<span>•</span> Backstroke
<span>•</span> <u>Breaststroke</u>
<span>•</span> Butterfly
Signup at the Recreation Office at Blodgett Gym!
<i>A clever vandal has boldly underscored the word "Breaststroke" with a marker.</i>
[[Back|BulletinBoardInspect]]<<if $leavebulletinnakedphoto>>
You left the photograph of you in full frontal nudity hanging on the board, so that everyone can admire it.
<<else>>
There is a photograph of a person, naked... They look familiar.
<br>
<<link "Take a look" BulletinNakedPhotoInspect>><</link>>
<</if>><<set _parts to $pc.naked_bits()>>\
It's you... totally naked with your <<if $pc.has_part("vagina")>><<dpussy $pc>><<else>>cock<</if>> as the centerpiece of the image.
At the bottom of the image, "SLUT" has been scribbled with a pen.
Where the hell did they get this photo?!
Then you recognize your dorm room. Fuck. It's from one of your CollegeCams streams. Somebody here must have recognized you in the streams.
How long has it been here? How many people have seen it already?! <<= setup.Events.exhibitionism(_parts, "naked", "photo", false, []).dalterneed>>
<<skillgate Exhibitionism 5 "Leave it hanging" BulletinNakedPhotoLeave>><<run $leavebulletinnakedphoto = true>><</skillgate>>
<<link "Tear it down" BulletinNakedPhotoRemove>> <<run setup.BulletinBoard.get_board_from($BulletinBoards, "residental").remove_bulletin_by_passage("BulletinNakedPhotoNotice")>><</link>> <<dalterneed Humiliation 200>>Your cheeks burn. You position your body to block the photo from view as you grab it and tear it from the pin. <<dalterneed Humiliation 200 true>>
You rip the photo in tiny pieces and throw its remains in to the nearest garbage bin.
[[Back|BulletinBoardInspect]]<<set _parts to $pc.naked_bits()>>\
How many eyes have already wandered over your naked body? How many students are there who don't even know your name, yet know what you look like without your clothes on?
And yet... something about that thought excites you. You can't bring yourself to tear it down.
You walk away, leaving the photo hanging, secretly hoping that many more eyes will ogle your nude body before somebody tears it down or covers it up. <<= setup.Events.exhibitionism(_parts, "naked", "photo", true, []).dalterneed>>
[[Back|BulletinBoardInspect]]
/* conspiracy guy */There is a long paper tacked to the board. It's covered with hastily scribbled text.
<br>
<<link "Read it" BulletinConspiracyInspect>><</link>>You are looking at a sort of handmade pamphlet.
It is difficult to read, though, as in many places the ink has been smeared or crossed out where the author apparently decided to change the text. Their handwriting is so atrocious that even the unrevised text is barely legible.
There are some readable sections though. Like:
<div class="indent">
▓▓▓▒ noticed you don't see any pregnant people anywhere!? Open your eyes sheeple!!
...
It's in the water!!!!! They put chemicals in there like ▓▓▓ beware of your drinks!! Eat charcoal if you must drink some of them to fit in so they dont notice you ▒▒▒ to detoxify yourself from the chemicals.
...
Major and ==the FKU director== are in on it dont trust anyone▓▓▓
...
Buy gold or crypto! Governemnt paper will be worth nothing after ▓▓▓▒ happens!
</div>
You bet this person is a hit at parties.
[[Back|BulletinBoardInspect]]There is a long paper tacked to the board. It's covered with hastily scribbled text.
<br>
<<link "Read it" BulletinConspiracyInspect2>><</link>>There's another disorderly screed tacked up next to the one you've read before.
<div class="indent">
Travelers from another dimension? Aliens? THE INTERNAL REVENUE SERVICE?! Something, or someone, is out there!
You see them now and then, among the rest of the crowds on campus. And they see you, too. You can always tell when you lock eyes with one of them from across a crowd. They'll take off, quick as they can! And no matter how quick you follow, you'll never catch up! They'll pass through a doorway, or around a corner, and BAM! Not even a trace!
Well, I'm not buying it. I'm going to keep trying. As long as it takes. I'm stocking up on tinfoil, and I suggest you do as well, whoever is reading this.
</div>
Below the text, there's a diagram for how to fold a paper hat.
[[Back|BulletinBoardInspect]]There is a long paper tacked to the board. It's covered with hastily scribbled text.
<br>
<<link "Read it" BulletinConspiracyInspect3>><</link>>There's yet another screed next to the other two. Whoever's leaving them sure has a lot of time on their hands!
<div class="indent">
You can feel them, can't you? Watching us, from the shadows. Hands dancing over strings connected to the backs of everyone in charge on campus.
Fifteen of Them. Plus One. The one is Nobody, the fifteen are Them.
They're watching you. The cameras on your phone never turn off, you know.
Fifteen pairs of eyes, watching through the screen. One pair of eyes, from an observer unseen.
I know that's what's happening. Every time I've tried to look into it... something's not right. Like someone's a step ahead of me.
15 of Them. 1 Nobody. Open your eyes.
</div>
You throw a glance over your shoulder. There's nobody there.
[[Back|BulletinBoardInspect]]There's a transcript from something hanging on the board next to the collection of unhinged rants.
<br>
<<link "Read it" BulletinConspiracyInspect4>><</link>><<set _lib to $niches["The Librarian"]>>\
You lean closer, inspecting the transcript. Is this from a... podcast?
<div class="indent monospace">
[EYEBALL]: Good evening, dear listeners, and welcome back to FK-Uncovered, the best and only podcast documenting the many strange things happening around our campus. I'm Eyeball, your host, and with me this evening is...
[TRUTHSEEKER]: TruthS33K3R — that's pronounced "truth-seeker" — from the FK-Un Elkbook community! Thanks for having me on the show, Eyeball.
[EYEBALL]: Of course! I just knew you had to be one of my first guests once I got the equipment set up. Let's see... [FLIPPING THROUGH NOTES] ...oh, here's a good one. Recently, you've been investigating the library, right?
[TRUTHSEEKER]: That's right, Eyeball. Picture this: students, going into the back rooms of the library, coming out about forty-five minutes later, blissed out and covered in bandages. What's that sound like to you?
[EYEBALL]: ...That they're doing drugs?
[TRUTHSEEKER]: Close, but there's no cigars back there. [LEANING IN CONSPIRATORIALLY] Two words: Sex. Cult.
[EYEBALL]: That's insane. [LAUGHTER. PAUSES FOR A MOMENT TO CATCH BREATH.] How do you know that? Going down there yourself after classes?
[TRUTHSEEKER]: Last week, I was in there doing some research for something else, right? Kid about our age walks up to the counter, talks to the librarian, goes into the back with <<po _lib>>. 'Nothing weird,' I thought, right? Maybe they were looking for a book, or old newspaper archives, or something.
[EYEBALL]: Right. Normal stuff.
[TRUTHSEEEKER]: So imagine my shock when the two of them came back out, that same student covered in band-aids, with a distant, dopey expression on their face.
[EYEBALL]: Oh my god.
[TRUTHSEEEKER]: Right? But that's not all. The librarian waved them off, sat back down behind <<pp>> desk, and... another student walked up, just like the first one!
[EYEBALL]: You know, I've heard <<ps>> <<conj keep>> the lights on super late there, too. Think that's related?
[TRUTHSEEKER]: My friend, you know I don't believe in coincidences. Of course it's related. You know what else is related? That same day, while I was sitting in that library, doing my own research, a package came for the librarian.
[EYEBALL]: Oh shit. You didn't tamper with it, right?
[TRUTHSEEKER]: Of course not. That's a federal offense! Anyway, so <<ps>> <<conj come>> out from the back, brandishing a box cutter with suspiciously-practiced ease, and guess what's in the box?
[EYEBALL]: Cult paraphernalia? Chalk? Candles, maybe?
[TRUTHSEEEKER]: Candles, that's right. Unscented, plain, unjarred candles. In an age of scented candles and flashlights, there's only one thing those could be used for: occult rituals. Lining the edges of a pentagram.
[EYEBALL]: Wow, man. That's crazy. Hey, I'd love to talk to you more, but we've gotta move on. Great having you on the show. This podcast has been brought to you by MANJELLY, the only JELLY for MEN who [...]
</div>
The transcription ends there, almost as if whoever transcribed it only cared about this segment.<<if $librarystory and $librarystory.tested>><br><br>...They weren't talking about <i>you,</i> were they?<</if>>
[[Back|BulletinBoardInspect]]There's a sticky note next to the podcast transcript.
<br>
<<link "Read it" BulletinConspiracyInspect5>><</link>>You squint at the sticky note.
<div class="indent">
FK-UN HAS GOTTEN A LOT OF ATTENTION SINCE THIS EPISODE WENT LIVE.
THANK YOU FOR YOUR SUPPORT.
PLEASE STOP JOINING THE FK-UNCOVERED ELKBOOK COMMUNITY TO POST YOUR BARE BREASTS OR PENIS. IT ISN'T FUNNY. SERIOUSLY, KNOCK IT OFF.
</div>
You chuckle a bit to yourself. <i>Surely</i> telling people to stop will actually make them stop.
[[Back|BulletinBoardInspect]]A new scrawled screed has arrived.
<br>
<<link "Read it" BulletinConspiracyInspect6>><</link>>You lean in to examine the note. Here we go again...
<div class="indent">
You know what? I'm just going to come out and say it: clothing was invented by washer and dryer companies.
Think about it! A long time ago, our ancestors used to walk around naked all the time, and nobody cared! Everybody did it! The only time they would cover up was when it was cold out.
But then? Somebody came up with the idea that you have to "wash" your mammoth furs and dinosaur leathers! Can you believe that? Our ancestors were smart, though; they laughed in the face of this revelation, because they knew the truth: it was too much work.
But over the years, certain individuals from the FABRICS distribution networks (which is a topic for another day, believe me!) slowly convinced people to wear more and more clothes.
Like any other kind of scammer, they introduced a problem (lots of clothes to wash) and then sold you the solution: washing machines and dryers. And they make them so shoddily, both the machines and the clothes, that you have to keep replacing them! Our ancestors didn't have to replace their natural, life-affirming flesh, I can tell you that much.
The government's in on it, too. Big Fabrics lobbied and bribed and extorted so much that it's illegal not to wear their filthy rags. But no more! We have nothing to lose but our detergents!
Join me in protesting this grave injustice! Naked, just like our forefathers would've wanted!
</div>
...You can't help but notice that whoever wrote this didn't specify when or where their protest would be taking place. It'll probably be both in and on the news, though.
[[Back|BulletinBoardInspect]]
/* body count guy */<<include BulletinCaptainBodyCountNotice>>There's a carefully typed paper pinned to the board. The bottom edge of it looks roughly torn.
<br>
<<link "Read it" BulletinCaptainBodyCountInspect>><</link>>There's a carefully typed paper pinned to the board. The bottom edge of it looks roughly torn.
<div class="indent">
LADIES! GENTLEMEN! NON-BINARY FOLKS!
My name is not important. I am, truthfully, but a man with a humble dream, one I came to our esteemed Fitzcummings-Knueppel University to make real.
I want to have sex with at least one person a day, every day, until I graduate. On average, at least.
As the legend goes, the current record was set by a member of this very college's first class of students; she maintained it until the very last week of classes, whereupon she fell in love and gave it up.
A touching story, to be sure, but I'm built different. I'm going to take that record for myself.
I've already had lots of experience; I've never gotten any complaints.
Take a number below and get in touch... I'll be waiting. ;)
</div>
Ugh, seriously? As if people would go for that...
...is what you were thinking, until you realize all the numbers that were presumably attached to the bottom of the page have already been taken.
Hm.
[[Back|BulletinBoardInspect]]There's an official-looking printout taped to the board. The giant letters saying "MASTURBATING" immediately draw your eye.
<br>
<<link "Read it" BulletinJanitorMastNoticeInspect>><</link>>There's an official-looking printout taped to the board. The giant letters saying "MASTURBATING" immediately draw your eye.
<div class="indent">
MASTURBATING IN THE SHOWERS IS AN HONOR CODE VIOLATION
Pipes in the showers are only rated to handle so much semen and vaginal fluid
Masturbation-related pipe repairs run into the thousands of dollars every year
Please masturbate in your own rooms instead <<highlight bad>>DO NOT —RA<</highlight>>
--FKU Janitorial Department
</div>
Thousands, huh? Part of you wonders if you could rack those damages up even further. Like a high score.
...Wait, did that say the pipes were <i>>rated</i> for a certain amount of semen?
[[Back|BulletinBoardInspect]]<!-- Currently for teasing 0.5 -->
A blue speed dating poster is tacked to the board.
However, the bottom half is torn off.
<br>
[[Read what remains of it|BulletinSpeedDateAdInspect]]The background color of the poster is dark blue.
Featured prominently in the middle are silhouettes of two persons dressed in evening attire, sitting at a table across each other.
Of course, pink hearts are shooting between them.
--
<h2>FKU SPEED DATING</h2>
Your chance to find the love of your live
Strict dress code
Entry only with reservation
20 dollar entry fee, includes food and drinks
The event will take place in room O 5 in building-
--
The rest is torn off. Well, gotta wait until the organisers hang up a new poster.
[[Back|BulletinBoardInspect]]
<!-- Events for StallWall -->A number is written on the wall with a black sharpie, and below it, a small note has been written.
<br><br>
It says, "Rick wants to roll in the hay with you."
<br><br>
[[Call it|StallTrollInspect]]You dial the number on your mobile phone and put the phone to your ear. You're not entirely sure what to expect, but you're curious what sort of adventure this will be.
It rings once, then the second time.
You hear a click. Somebody is answering the phone.
You wait for a moment. As soon as you start to feel like maybe you should speak up first, sound comes through the speaker.
"Never gonna give you—"
You hang up as fast as possible. "Goddammit," you mutter under your breath.
You try to forget what happened here.
<<link "Back" StallRoomWallInspect>> <<run setup.Events.register_event("StallTrollNotice")>> <<run setup.BulletinBoard.get_board_from($BulletinBoards, "stallroom").make_stale()>><</link>>There's a phone number written on the wall.
<br><br>
"CALL FOR A GOOD TIME" it declares, and next to it... hey, wait a second! That's <i>your</i> number. Rude!
<br><br>
<<link "Back" StallRoomWallInspect>> <<run setup.Events.register_event("StallMyNumber")>> <<run setup.BulletinBoard.get_board_from($BulletinBoards, "stallroom").make_stale()>><</link>>
/* meat glacier did this */There's a neatly-written note tacked to the board. It has a cute little drawing of a pumpkin towards the bottom.
<br>
<<link "Read it" BulletinGourdmanInspect>><</link>><div class="indent">
Hey dormies!
Any of you carving pumpkins this year? Do you know if there are any local pumpkin patches nearby? I would look it up but I'm not allowed to Woogle anything related to pumpkins hahaha
</div>
...And below it, there's a cute little cartoon drawing of a pumpkin. Where would you even put a Jack-o-Lantern in a dorm, anyway?
[[Back|BulletinBoardInspect]]There's a reply tacked below the note with the pumpkin drawing.
<br>
<<link "Read it" BulletinGourdmanInspect2>><</link>><div class="indent">
yeah there's one in riverside, kinda near saffron street, short walk out of town
what do you mean you can't woogle pumpkins, literally just go to the website and type it in
</div>
That is a little strange, now that... whoever wrote this mentions it. Maybe they have a phobia of festive orange gourds?
[[Back|BulletinBoardInspect]]There's another reply below the reply below the note with the pumpkin drawing.
<br>
<<link "Read it" BulletinGourdmanInspect3>><</link>><div class="indent">
Whatever you do don't Woogle "The Worst Harvest Eve Special Ever" and ESPECIALLY DO NOT click on the news article titled "GourdHub Video Reenactor In Emergency Room"
Anyway, UNRELATED TO THAT INCIDENT, and ESPECIALLY UNRELATED to the news story you might also have read titled "Local Pervert Gets Served Restraining Order by Pumpkins, Like In General" I'm not allowed to even be near them anymore, crazy right haha ha ha
</div>
<<nobr>>
<<if $pc.has_phone()>>
Obviously, you pull out your phone and look it up real quick, and...
<br><br>
...Oh. Oh, that's porn of someone... and a pumpkin...
<br><br>
How festive. And a concerning breach of food safety.
<<else>>
You're sort of glad you don't have your phone with you. You doubt you could resist the urge to look it up.
<</if>>
<</nobr>>
[[Back|BulletinBoardInspect]]There's an index card taped to the board with a query written on it.
<br>
<<link "Read it" BulletinBirthControlInspect>><</link>><div class="indent">
Hey, does anyone know if the campus clinic also doubles as a pharmacy? I can't find information about it online and am too embarrassed to just walk in and ask! I'm running low on my birth control...
</div>
<<if !$firsttime.clinicbc>>You're... not sure, honestly? Good thing you don't have any prescriptions.<<else>>You happen to know there is. Hopefully this person figures it out soon!<</if>>
[[Back|BulletinBoardInspect]]There are a couple of sticky notes posted below the index card asking about birth control.
<br>
<<link "Read it" BulletinBirthControlReplyInspect>><</link>><div class="indent">
BIRTH CONTROL?! Ha! Nobody's ever gotten pregnant here, despite all of the sex. They're putting it in the water, or maybe in the air — they have some kind of aerosolizing device in one of the labs in Hallowell, but I'm not allowed in there anymore. Probably connects into the campus water supply. Or worse, it's being pumped into the air. Ever seen the trails of
</div>
...and it gets cut off, the author having run out of space. It continues on the second sticky note:
<div class="indent">
vapor the planes leave behind when they fly? Probably straight from the lab on campus, shipped to government planes, and then deployed. Nobody's ever gotten pregnant in Riverside, either. What other explanation for this could there possibly be!? You don't need birth control — you need answers! YOU NEED THE TRUTH! WE ALL DO!
</div>
The idea that whoever wrote this got through one sticky note and then thought "nah, I'd better keep going" instead of developing a sense of shame is <i>>really</i> funny.
[[Back|BulletinBoardInspect]]There's another index card beneath the pair of sticky notes.
<br>
<<link "Read it" BulletinBirthControlReplyReplyInspect>><</link>><div class="indent">
Um... okay, thanks! You've given me the courage to walk in there myself and ask, because no matter how embarrassed I'll be, at least it's not as embarrassing as you taking the time to write that and stick it to the board. You've got such a vivid imagination!
</div>
Well, that's certainly one way to look at it.
[[Back|BulletinBoardInspect]]There's an announcement of a Stealthy Sionnach event at the residence hall this week, culminating in a gift exchange on Saturday. You could get a gift! The downside is, you'd be obligated to buy a gift in return. There's a QR code to scan.
<<nobr>>
<<if $stealthysionnach>>
You've already signed up.
<<elseif !$pc.has_phone()>>
You'll need to grab your phone to scan it.
<<else>>
<<link "Scan it" BulletinStealthySionnachSignupScan>><</link>>
<</if>>
<</nobr>>You scan the QR code and get forwarded to a website that's handling the signups and organization. The future is here!
<div class="indent">
Welcome to this year's Stealthy Sionnach!
Whether you've been good or bad this year is between you and ol' Father Fox — but one of your hallmates can secretly weigh in too if you participate in this event!
Each participant will be randomly assigned a hallmate to buy a gift for (nothing expensive!) and you'll get a gift from one of your hallmates in return! It's that simple!
</div>
<<link "Sign up" BulletinStealthySionnachSignupDo>><</link>>
[[Back|BulletinBoardInspect]]<<set _students to setup.people.people_of_type("student")>>
<<set _target to setup.Events.pick_person({attitudes: [], residence: "Chicory Hall"}, _students)>>
<<set _giver to setup.Events.pick_person({attitudes: [], residence: "Chicory Hall", exclude: [_target]}, _students)>>
<<if ["friendship", "romantic"].includes(setup.Relationships.relationship_type_with(_giver))>>
<<set _gift to setup.Gifts.pick_gift_for_pc(_giver, -1, 50) || setup.Gifts.pick_gift_for_pc(_giver, -1, 100) || setup.Gifts.pick_gift_for_pc(_giver)>>
<<elseif setup.Relationships.relationship_type_with(_giver) is "enemy">>
<<set _gift to null>>
<<elseif setup.people.get_attitude(_giver) lte -100 and setup.people.is_known(_giver)>>
<<set _gift to null>>
<<elseif setup.people.get_attitude(_giver) gte 100 and setup.people.is_known(_giver)>>
<<set _gift to setup.Gifts.pick_gift_for_pc(_giver, -1, 25) || setup.Gifts.pick_gift_for_pc(_giver, -1, 50) || setup.Gifts.pick_gift_for_pc(_giver, -1, 75)>>
<<else>>
<<set _gift to setup.Gifts.pick_gift_for_pc(_giver, -1, 15) || setup.Gifts.pick_gift_for_pc(_giver, -1, 25) || setup.Gifts.pick_gift_for_pc(_giver, -1, 50)>>
<</if>>
<<set $stealthysionnach to {target: _target, giver: _giver, pcgift: _gift}>>
You go through the quick signup process, giving your name, residence hall, and some basic info about what you're into.
<br><br>
After you submit it all, the site processes for a moment and then displays the name of the person you'll have to buy a gift for:
<<if !setup.people.is_known(_target)>>
<<highlight>><<dfullname _target>><</highlight>>. Who the hell is that?
<<else>>
<<fullname _target>>.
<<if setup.people.get_attitude(_target) lt 0>>
Well, at least you know who that is. Unfortunately.
<<elseif ["friendship", "romantic"].includes(setup.Relationships.relationship_type_with(_target))>>
You definitely know who that is!
<<elseif setup.people.get_attitude(_target) gte 100>>
You know <<po>> reasonably well, you suppose.
<<else>>
At least you know <<po>>. Kinda.
<</if>>
<</if>>
<<psc>> <<conj seem>> to have told the site <<pss>> into <<= setup.people.biggest_hobby(_target)>>.
<br><br>
Seems you have a gift to buy. Probably. The site says that when you have something, you should put it under the tree in the lounge.
<br><br>
[[Back|BulletinBoardInspect]]There's a notice announcing a free Renewal Festival feast Saturday evening.
<<link "Read it" BulletinRenFeastRead>><</link>>You lean in closer to read the notice.
<div class="indent">
Far from home and yearning for a good hot meal this holiday? Join your hallmates Saturday evening for a COMPLETELY FREE RenFeast!
Food will be available till midnight to allow our residents to ring in the new year with full bellies!
Participating in Stealthy Sionnach? This is when you can open your gift! If you're not participating... sign up now!
We'll see you on Saturday!
</div>
Well, that's nice of them.
[[Back|BulletinBoardInspect]]<<set _courseinfo to setup.School.courses[$inclass]>><<set _prof to setup.School.professor_of_course($inclass)>>\
<<= _courseinfo["classroom description"]>>
<<set _late to setup.School.current_class().late>>\
<<if $tellseatedwith and $seatedwith.length gt 0 and !_late>><br><<classmateswithrels $seatedwith "As everyone takes their seats, you end up sitting with %people.">><<unset $tellseatedwith>><br><</if>>\
<<if setup.School.times_attended($inclass) is 1>><br>The professor, <<anonname _prof "aoran">>, introduces <<pr _prof>> as <span class="notice">Professor <<dlastname _prof>></span>.<br><</if>><<run setup.people.become_known(_prof)>>\
<<set _exam to setup.School.is_exam_day($inclass)>>\
<<if _exam>><br><<run setup.School.init_exam($inclass)>><<if _late>><span class="bad">Shit, you're late for a test. That's not good.</span><<else>><span class="ungood">It's <<= setup.School.is_exam_week()>> time.</span> <<professor>> tells everyone to put their books away and turn their phones off.<</if>><br><</if>>\
<<include ClassroomMenu>><<if !$inclass>>
<<continuelink>>
<<else>>
<<if setup.School.times_attended($inclass) is 1 and Object.keys($classesattended).length is 1>>
<div class="rounded-border">
Time for you to decide what kind of student you're going to be!<br>
<br>
You can <span class="notice">pay attention</span>, which means you'll have to do a lot less studying outside of class, but may tax you a little.<br>
<br>
You can <span class="notice">socialize</span>, which may improve your relationship with other students around you and increase your Attention need.<br>
<br>
Or you can <span class="notice">goof off</span>, whereupon you will doodle in your notebook, play with your calculator, and do other things that are minimally entertaining, slightly improving your Relaxation need.<br>
<br>
Each class will (usually) issue homework that you should complete for a portion of your grade. You can also review the material covered for a chance to improve your next quiz or exam grade.
<br>
<br>
(This message will disappear after your first class.)<br>
</div>
<br>
<</if>>
<<set _scheduleblock to setup.Time.schedule_block_today(setup.School.courses[$inclass].schedule)>>
<<if !_scheduleblock>>
<<unset $inclass>>
<<continuelink>>
<<else>>
<<set _endhour to _scheduleblock.hour + _scheduleblock.length>>
<<set _exam to setup.School.is_exam_day($inclass)>>
<<set $failedexam to false>>
<<if $hour gte _endhour>>
Class is over, and the professor dismisses you.
<<if _exam>>
/* <span class="notice">Your <<= setup.School.is_exam_week()>> score is <<= Math.floor($exams[$inclass].performance * 100.0)>>%.</span> */
<<set _grade to setup.School.find_grade(Math.floor($exams[$inclass].performance * 100.0))>>
<<set _hl to "grade-"+_grade[0]>>
<<highlight>>Your <<= setup.School.is_exam_week()>> grade is<</highlight>> <<highlight _hl>><<= _grade>><</highlight>><<highlight>>.<</highlight>>
<<run $exams[$inclass].scores.push($exams[$inclass].performance)>>
<<set $exams[$inclass].usedfavor to false>>
<<unset $examboost>>
<<set _favor to setup.School.grades[_grade].favor[1]>>
<<favor $professor _favor>>
<<set _composure to setup.School.grades[_grade].composure>>
<<if _composure and _composure[1]>><<set _composure to _composure[1]>><<dalterneed Composure _composure true>><<friendship $professor 15>><</if>>
<<if _grade is "F">><<set $failedexam to true>><</if>>
<<set _studiousness to setup.School.grades[_grade].studiousness[1]>>
<<if _studiousness isnot 0>>
<<groupalterrumor "studiousness" _studiousness $peopleatlocation>>
<</if>>
<</if>>
<<set _cinfo to setup.School.courses[$inclass]>>
<<set _newhomework to setup.School.assign_work($inclass)>>
<<set $failedhw to false>>
<<if ("lastscore" in $homework[$inclass]) && $homework[$inclass].lastscore gte 0 && $homework[$inclass].lastscore isnot null>>
/* Your score on the previous homework assignment is <<= Math.floor($homework[$inclass].lastscore * 100.0)>>%. */
<<set _grade to setup.School.find_grade(Math.floor($homework[$inclass].lastscore * 100.0))>>
<<set _hl to "grade-"+_grade[0]>>
Your grade on the previous homework assignment is <<highlight _hl>><<= _grade>><</highlight>>.
<<set $homework[$inclass].lastscore to -1>>
<<set $homework[$inclass].usedfavor to false>>
<<set _favor to setup.School.grades[_grade].favor[0]>>
<<favor $professor _favor>>
<<set _composure to setup.School.grades[_grade].composure>>
<<if _composure and _composure[0]>><<set _composure to _composure[0]>><<dalterneed Composure _composure true>><<friendship $professor 5>><</if>>
<<if _grade is "F">><<set $failedhw to true>><</if>>
<<set _skillraisefactor to setup.School.grades[_grade].skillraisefactor>>
<<if _skillraisefactor>>
<<set _skills to setup.School.courses[$inclass].skills>>
<<for _skill range _skills>>
<<set _amt to setup.Skills.daily_caps[$pc.skill_level(_skill)] * _skillraisefactor>>
<<run $pc.raise_skill(_skill, _amt)>>
<</for>>
<</if>>
<<set _studiousness to setup.School.grades[_grade].studiousness[0]>>
<<if _studiousness isnot 0>>
<<groupalterrumor "studiousness" _studiousness $peopleatlocation>>
<</if>>
<</if>>
<<if _newhomework is 0>>
You haven't been assigned any new homework!
<<else>>
You've been assigned about <<engnum _newhomework>> minutes of homework.
<</if>>
<<set _reaction to setup.people.professor_reaction($professor)>>
<<if ($failedhw or $failedexam) and (_reaction is "Married Professor" or _reaction is "Disciplinarian Professor") and State.random() lte 0.667>>
<br><br>
"<<mrmiss $pc>> <<dlastname $pc>>, perhaps you'd like to stay after class to discuss your grade?" <<professor>> says.
<</if>>
<<if _exam>>
<<run setup.School.end_unit($inclass)>>
<</if>>
<br>
<br>
<<link "Talk to <<dprofessor>>" AfterClassTalk>>
<<set $eventnpc to $professor>>
<<run setup.School.leave_class()>>
<</link>>
<<if !$profpunishmentdue>>
<br>
<<link "Leave class">>
<<unset $failedhw>>
<<unset $failedexam>>
<<run setup.School.leave_class()>>
<<if State.random() lte (setup.Events.base_event_chance() * 2) or setup.mpl_unlock_due()>>
<<set _leavepassage to setup.Events.passage(["leaving class"])>>
<</if>>
<<if _leavepassage>>
<<run setup.Events.register_event(_leavepassage)>>
<<egoto _leavepassage>>
<<else>>
<<set $peopleatlocation to setup.people_at_location()>>
<<egoto $lastlocpassage>>
<</if>>
<</link>>
<</if>>
<<elseif _exam>>
<<set _examtype to setup.School.is_exam_week()>>
<span class="status-meter-label" style="margin-bottom: 0.1em;"><<cap _examtype>> progress</span><br>
<<set _perc to $exams[$inclass].performance>>
<<= Meter(_perc*1000, 1000, "hzStudybarexam", true);>>
<br><br>
<<set $examboost to 0>>
<<link "Apply yourself">>
<<alterneed Relaxation -20>>
<<set $examboost to 1>>
<<set _eventpassage to setup.Events.passage(["classroom", "exam"])>>
<<egoto _eventpassage>>
<</link>> <<dalterneed Relaxation -20>>
<br>
<<link "Go at a steady pace">>
<<set _eventpassage to setup.Events.passage(["classroom", "exam"])>>
<<egoto _eventpassage>>
<</link>>
<<if $seatedwith and $seatedwith.length gt 0 and !$profpunishmentdue>>
<br>
<<link "Cheat">>
<<set _eventpassage to setup.Events.passage(["classroom", "cheat exam"])>>
<<egoto _eventpassage>>
<</link>>
<</if>>
<<else>>
/* handle specific event overrides */
<<if $rmpbully and $rmpbully.dare == "EventRMPDareSkirt" and $inclass is $pccourses[2]>>
<<set _classevents to []>>
<<set _eventpassage to "EventRMPDareSkirtProve">>
<<else>>
<<set _classevents to $classevents || []>>
<<set _eventpassage to setup.Events.passage(["classroom"], _classevents) || setup.Events.passage(["classroom"])>>
<</if>>
<<set _link to {text: "Pay attention", link: _eventpassage, emoji: '📖'}>>
<<link _link>>
<<run setup.School.advance_class()>>
<<run setup.Needs.stress(-15)>>
<<run setup.School.pay_attention($inclass)>>
<<run _classevents.push(_eventpassage)>>
<<set $classevents to _classevents>>
<</link>> <<dalterneed Relaxation -15>>
<br>
<<set _link to {text: "Socialize", emoji: '💬'}>>
<<link _link>>
<<set $pausedneeds to ["Attention"]>>
<<run setup.School.advance_class()>>
<<unset $pausedneeds>>
<<set _socialpartner to setup.randel($seatedwith)>>
<<run setup.School.pay_no_attention($inclass)>>
<<likes _socialpartner>>
<<run setup.Needs.socialize(30)>>
<<friendship _socialpartner 15 25>>
<<if !setup.people.is_known(_socialpartner)>>
<<set _lvl to setup.people.likability_factor(_socialpartner)>>
<<raiseskill Charisma _lvl>>
<<set $classheader to "Whenever the professor isn't paying attention, you hold a whispered conversation with <<anonname \"" + _socialpartner + "\" \"aoran\">>.">>
<<if setup.people.get_attitude(_socialpartner, "friendship") gte setup.people.intro_threshold>>
<<set $classheader to $classheader + " <<psc \"" + _socialpartner + "\">> <<conj \"" + _socialpartner + "\" let>> you know that <<pp \"" + _socialpartner + "\">> name is <span class=\"notice\"><<dfullname \"" + _socialpartner + "\">></span>.">>
<<run setup.people.become_known(_socialpartner)>>
<</if>>
<<if setup.people.get_attitude(_socialpartner, "friendship") gte setup.people.intro_threshold * 1.5 and setup.people.valid_phone_contact(_socialpartner) and setup.people.is_known(_socialpartner)>>
<<set $classheader to $classheader + " <<psc \"" + _socialpartner + "\">> <<conj \"" + _socialpartner + "\" give>> you <<pp \"" + _socialpartner + "\">> phone number.">>
<<run setup.people.learn_number(_socialpartner)>>
<</if>>
<<set $classheader += " <<dalterneed Friendship 25>>">>
<<else>>
<<set $classheader to "Whenever the professor isn't paying attention, you hold a whispered conversation with <<fullname \"" + _socialpartner + "\">>. <<dalterneed Friendship 25>>">>
<</if>>
<<dislikes>>
<<set $classheader to "When the professor isn't paying attention, you whisper to <<anonorfullname \"" + _socialpartner + "\">> but <<ps \"" + _socialpartner + "\">> quickly <<conj \"" + _socialpartner + "\" shush>> you. <<dalterneed Friendship -15>>">>
<<friendship _socialpartner -15 -20>>
<</likes>>
<<set _caughtevent to setup.Events.passage(["classroom caught talking"], _classevents)>>
<<if _caughtevent and State.random() lte 1.0/8.0>>
<<set _eventpassage to _caughtevent>>
<</if>>
<<run _classevents.push(_eventpassage)>>
<<set $classevents to _classevents>>
<<playerinitsocializing>>
<<egoto _eventpassage>>
<</link>> <<dalterneed Attention 30>>
<br>
<<set _link to {text: "Goof off", emoji: '📱'}>>
<<link _link>>
<<set $pausedneeds to ["Relaxation"]>>
<<run setup.School.advance_class()>>
<<unset $pausedneeds>>
<<run setup.Needs.enjoy(25)>>
<<run setup.School.pay_no_attention($inclass)>>
<<set _activities to [
"You doodle in your notebook, not really paying attention.",
"You mess around on your phone, paying very little attention.",
]>>
<<if $pc.has_textbooks()>>
<<run _activities.push("You flip randomly through your textbook, trying to find something remotely entertaining, like maybe an unintentionally amusing illustration.")>>
<</if>>
<<set $classheader to setup.randel(_activities)>>
<<set _caughtevent to setup.Events.passage(["classroom caught phone"], _classevents)>>
<<if _caughtevent and State.random() lte 1.0/8.0>>
<<set _eventpassage to _caughtevent>>
<</if>>
<<run _classevents.push(_eventpassage)>>
<<set $classevents to _classevents>>
<<egoto _eventpassage>>
<</link>> <<dalterneed Relaxation 25>>
<<if $homework and $homework[$inclass] and $homework[$inclass].completed lt $homework[$inclass].assigned>>
<br>
<<set _link to {text: "Rush through the homework that's due this class", emoji: '📓'}>>
<<link _link>>
<<alterneed Relaxation -50>>
<<set $homework[$inclass].completed = Math.min($homework[$inclass].assigned, $homework[$inclass].completed + setup.School.time_in_class_segment())>>
<<run setup.School.advance_class()>>
<<unset $pausedneeds>>
<<run setup.School.pay_no_attention($inclass)>>
<<set _activities to [
"You tune out the professor and try to hurry through your homework.",
"You have homework due at the end of class! Tuning out the professor, you try to hurry through it.",
]>>
<<set $classheader to setup.randel(_activities)>>
<<set _caughtevent to setup.Events.passage(["classroom caught homework"], _classevents)>>
<<if _caughtevent and State.random() lte 1.0/8.0>>
<<set _eventpassage to _caughtevent>>
<</if>>
<<run _classevents.push(_eventpassage)>>
<<set $classevents to _classevents>>
<<egoto _eventpassage>>
<</link>> <<dalterneed Relaxation -50>>
<</if>>
<</if>>
<</if>>
<</if>>You head into the room early. <<if $minute gte 50>>Class will start soon, but you have time to socialize during the general ruckus of students arriving.<<else>>It'll be a little while till class starts. You have time to study or do homework. Or, you know, none of those things.<</if>>
<<set _mins to 60 - $minute>>\
<<if $minute lt 50>><<link "Study" Study>><</link>> <<dtime _mins>><br><</if>>\
<<link "Socialize" ClassroomSocialize>><</link>> <<dtime _mins>>
<<link "Goof off" ClassroomGoof>><</link>> <<dtime _mins>><<set _mins to 60 - $minute>>\
<<set _relax to 50.0 * (_mins / 30.0)>>\
You play around on your phone, wasting time till class starts.<<advtime _mins>> <<dalterneed Relaxation _relax>><<alterneed Relaxation _relax>>
<<link "Continue" Classroom>><<run setup.School.attend_class()>><</link>>You spend the time before class trying to catch people's eye and have a few quick conversations.<br>
<br>
<<set _mins to 60 - $minute>><<set _count to Math.max(1, _mins / 8)>>
<<set _students to setup.enrolled(setup.School.current_class().course)>>
<<set _people to setup.Events.pick_several({type: "student"}, _count, _students)>>
<<set _likes to []>><<set _dislikes to []>>
<<for _person range _people>>
<<likes _person>>
<<friendship _person 15 25>>
<<run _likes.push(_person)>>
<<anonorfullnamec _person>> <<= setup.randel(["stops by to chat", "pauses and exchanges a few words", "chats with you for a minute", "exchanges small talk"])>>.
<<introduction _person>>
<<learngendermini _person>>
<<maybegetnumber _person>>
<<dalterneed Friendship 20>>
<<dislikes>>
<<friendship _person -15 -25>>
<<run _dislikes.push(_person)>>
<<if setup.people.scared_of_pc(_person)>>
<<anonorfullnamec _person>> <<= setup.randel(["gives you a look and then hurries by", "looks away", "looks at you, then hurries onward"])>>.
<<else>>
<<anonorfullnamec _person>> <<= setup.randel(["gives you a look and passes by without pausing", "doesn't return your greeting", "looks at you, says something to a friend, then laughs and keeps walking", "completely ignores you"])>>.
<</if>>
<<introduction _person>>
<<dalterneed Friendship -20>>
<</likes>><br>
<br>
<<playerinitsocializing>>
<</for>>
<<set _attention to Math.min(20 * _likes.length, 60)>>
Then it's time for class to start. <<dalterneed Attention _attention>><<socialize _attention>><br>
<br>
<<advtime _mins>>
<<link "Continue" Classroom>><<run setup.School.attend_class()>><</link>><<set _segmentmins to setup.School.time_in_class_segment()>>
<<set _understand to setup.School.unit_understanding($inclass)>>
<<set _portion to _segmentmins / (setup.School.current_class().length * 60)>>
<<set _progress to _portion * _understand>>
<<set _roll to 0.7 + (0.3 * State.random())>>
<<set _roll += 0.1 * $examboost>>
<<set _progress *= _roll>>
<<set _success to _progress / _portion>>
<<if _success lt 0.25>>
You're pretty sure you totally bombed that section...
<<elseif _success lt 0.5>>
Ugh, you definitely got that last section more wrong than right.
<<elseif _success lt 0.75>>
That last section was rough but you're pretty sure you did okay. Kind of.
<<elseif _success lt 0.9>>
You think you got that last section mostly right.
<<else>>
You're pretty sure you aced that last section.
<</if>>
<<set $exams[$inclass].performance to Math.min($exams[$inclass].performance + _progress, 1.0)>><<run setup.School.advance_class()>>
<br><br>
<<include ClassroomMenu>><<if ndef $makeupprofiles>><<set $makeupprofiles to {}>><</if>>
You set down your cosmetics bag and look at yourself in the mirror.
<br><br>
<<if !$makeup>><<set $makeup to {}>><</if>>
<<if !$makeupprofiles>><<set $makeupprofiles to {}>><</if>>
<<set _slots to {}>>
<<for _item range Object.keys($makeup)>>
<<set _info to $makeup[_item]>>
<<for _slot range _info.slots>>
<<if !_slots[_slot]>>
<<set _slots[_slot] to [_info.applied]>>
<<else>>
<<run _slots[_slot].push(_info.applied)>>
<</if>>
<</for>>
<</for>>
<<for _slot range Object.keys(_slots)>>
<div class="two-column-container">
<div class="two-column">
<<cap _slot>>:
</div>
<div class="two-column">
<<set _var to "_selectedmakeup" + _slot.replaceAll(' ', '_')>>
<<if $pc.makeup[_slot]>>
<<run State.setVar(_var, $pc.makeup[_slot])>>
<<else>>
<<run State.setVar(_var, "none")>>
<</if>>
<<run _slots[_slot].push("none")>>
<<listbox _var autoselect>>
<<optionsfrom _slots[_slot]>>
<</listbox>>
</div>
</div>
<br>
<</for>>
<<set _currentprofile to setup.current_makeup_profile() || "New Makeup " + (Object.keys($makeupprofiles).length + 1).toString()>>
<br>
<<link "Save current makeup" Makeup>>
<<set _newmakeupname to Util.escapeMarkup(_newmakeupname.trim())>>
<<set $makeupprofiles[_newmakeupname] to {}>>
<<for _slot range Object.keys(_slots)>>
<<set _var to "_selectedmakeup" + _slot.replaceAll(' ', '_')>>
<<set _val to State.getVar(_var)>>
<<if _val is "none" or !_val>>
<<run delete $makeupprofiles[_newmakeupname][_slot]>>
<<else>>
<<set $makeupprofiles[_newmakeupname][_slot] to _val>>
<</if>>
<</for>>
<<set $pc.makeup to Object.assign({}, $makeupprofiles[_newmakeupname])>>
<</link>>
<<textbox "_newmakeupname" _currentprofile>>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
<br>
<<link "Remove all makeup" Makeup>>
<<set $pc.makeup to {}>>
<</link>>
<<if Object.keys($makeupprofiles).length gt 0>>
<br><br>
<<for _makeupprofile range Object.keys($makeupprofiles)>>
<<capture _makeupprofile>>
<div class="outfit-menu-container nokeys">
<div class="outfit-menu-col-1 nokeys">
<div class="outfit-menu-header">
<div class="outfit-menu-name">_makeupprofile</div>
</div>
<span style="font-size: 75%; line-height: 0.75;">
<<set _tell to []>>
<<for _selection range Object.values($makeupprofiles[_makeupprofile])>>
<<if !_tell.includes(_selection)>>
<<run _tell.push(_selection)>>
<</if>>
<</for>>
<<if _tell.length is 0>>
(none)
<<else>>
<<= setup.and(_tell)>>
<</if>>
</span>
</div>
<div class="outfit-menu-col-2 outfit-menu-buttons">
<div class="outfit-menu-button nokeys">
<<set _link to {text: "Wear", link: "Makeup", noemoji: true}>>
<<link _link>>
<<set $pc.makeup to Object.assign({}, $makeupprofiles[_makeupprofile])>>
<</link>>
</div>
<div class="outfit-menu-button nokeys">
<<set _link to {text: "Overwrite", link: "Makeup", noemoji: true}>>
<<link _link>>
<<for _slot range Object.keys(_slots)>>
<<set _var to "_selectedmakeup" + _slot>>
<<set _val to State.getVar(_var)>>
<<if _val is "none" or !_val>>
<<run delete $makeupprofiles[_makeupprofile][_slot]>>
<<else>>
<<set $makeupprofiles[_makeupprofile][_slot] to _val>>
<</if>>
<</for>>
<<set $pc.makeup to Object.assign({}, $makeupprofiles[_makeupprofile])>>
<</link>>
</div>
<div class="outfit-menu-button nokeys">
<<set _link to {text: "Delete", link: "Makeup", noemoji: true}>>
<<link _link>>
<<run delete $makeupprofiles[_makeupprofile]>>
<</link>>
</div>
</div>
</div>
<</capture>>
<</for>>
<<else>>
<br>
<</if>>
<br>
<<set _link to {text: "Done", link: $location, noemoji: true}>>
<<link _link>>
<<for _slot range Object.keys(_slots)>>
<<set _var to "_selectedmakeup" + _slot.replaceAll(' ', '_')>>
<<set _val to State.getVar(_var)>>
<<if _val is "none" or !_val>>
<<run delete $pc.makeup[_slot]>>
<<else>>
<<set $pc.makeup[_slot] to _val>>
<</if>>
<</for>>
<</link>><<if $piercings and Object.keys($piercings).length gt 0>>
You examine your collection of piercings.
<br><br>
<<set _piercings to Object.keys($piercings)>>
<<set _slots to {}>>
<<for _slot range Object.keys($pc.pierced)>>
<<set _slotinfo to setup.Cosmetics.piercing_slots[_slot]>>
<<for _piercing range _piercings>>
<<set _piercinginfo to setup.Cosmetics.piercings[$piercings[_piercing].item]>>
<<if _slotinfo.types.includes(_piercinginfo.type)>>
<<for _i to 0; _i lt $piercings[_piercing].quantity; _i++>>
<<if !_slots[_slot]>>
<<set _slots[_slot] to [_piercing]>>
<<else>>
<<run _slots[_slot].push(_piercing)>>
<</if>>
<</for>>
<</if>>
<</for>>
<</for>>
<<for _slot range Object.keys(_slots)>>
<div class="two-column-container">
<div class="two-column">
<<cap _slot>>:
</div>
<div class="two-column">
<<set _var to "_selectedpiercing" + _slot.split(' ').join('_')>>
<<run _slots[_slot].unshift("none")>>
<<if $pc.pierced[_slot]>>
<<run State.setVar(_var, $pc.pierced[_slot])>>
<<else>>
<<run State.setVar(_var, "none")>>
<</if>>
<<listbox _var autoselect>>
<<optionsfrom _slots[_slot]>>
<</listbox>>
</div>
</div>
<br>
<</for>>
<<set _availpiercings to []>>
<<for _piercing range Object.keys($piercings)>>
<<for _i to 0; _i lt $piercings[_piercing].quantity; _i++>>
<<run _availpiercings.push(_piercing)>>
<</for>>
<</for>>
<br>
<<link "Done">>
<<set _notfound to []>>
<<for _slot range Object.keys(_slots)>>
<<set _var to "_selectedpiercing" + _slot.split(' ').join('_')>>
<<set _val to State.getVar(_var)>>
<<if _val is "none" or !_val>>
<<set $pc.pierced[_slot] to null>>
<<elseif !_availpiercings.includes(_val)>>
<<if !_notfound.includes(_val)>>
<<run _notfound.push(_val)>>
<</if>>
<<set $pc.pierced[_slot] to null>>
<<else>>
<<set $pc.pierced[_slot] to _val>>
<<run _availpiercings.splice(_availpiercings.indexOf(_val), 1)>>
<</if>>
<</for>>
<<if _notfound.length gt 0>>
<<set $header to "You're lacking enough piercings for some of your choices: " + setup.and(_notfound) + ". You'll need to buy more of those or choose something else.">>
<<egoto AdjustPiercings>>
<<else>>
<<egoto $location>>
<</if>>
<</link>>
<<else>>
You look at yourself in the mirror. Should you get something pierced? You've heard there's a place in town that'll do it.
<br><br>
<<set _link to {text: "Done", link: $location, noemoji: true}>>
<<link _link>><</link>>
<</if>>/* Legacy Passage to prevent old saves not loading */
<<include StylePubesBeards>><div class="nokeys">
<<if $pc.pubic_style is "smooth">><<set $pc.pubic_style to "shaved">><</if>>
<<if $pc.grows_beard>>
<<set _beard_style to $pc.beard_style>>
<<set _beard_styleinfo to setup.Cosmetics.beard_styles[_beard_style]>>
<<set _beard_length to $pc.beard_length>>
<<set _current_hair_desc to $pc.beard_descriptor()>>
Your _current_hair_desc
<<set _avail_beards to []>>
<<for _newbeardstyle range Object.keys(setup.Cosmetics.beard_styles)>>
<<set _newbeardinfo to setup.Cosmetics.beard_styles[_newbeardstyle]>>
<<if !("min_length" in _newbeardinfo) or (_newbeardinfo.min_length lte _beard_length)>>
<<if _beard_length neq 0 and _newbeardstyle isnot $pc.beard_style>><<run _avail_beards.push(_newbeardstyle)>><</if>>
<</if>>
<</for>>
<<if _avail_beards.length is 0>>
<br>
There isn't anything else you can do with it at the moment. Better wait for it to grow out if you want a change.
<<else>>
Style beard:
<br>
<<for _newbeardstyle range _avail_beards>>
<<capture _newbeardstyle>>
<<link _newbeardstyle StylePubesBeards>>
<<set $pc.beard_style to _newbeardstyle>>
<<set _newbeard_styleinfo to setup.Cosmetics.beard_styles[_newbeardstyle]>>
<<if "max_length" in _newbeard_styleinfo and $pc.beard_length gt _newbeard_styleinfo.max_length>><<set $pc.beard_length to _newbeard_styleinfo.max_length>><</if>>
<<set $lastbeardgrowth to $gameday>>
<<set $header to "You grab a trimmer and a razor and get to work.">>
<<advtime 10>>
<</link>>
<</capture>>
<<if _newbeardstyle isnot _avail_beards[_avail_beards.length - 1]>>
|
<</if>>
<</for>>
<</if>>
<br><br>
<</if>>
<<set _style to $pc.pubic_style>>
<<set _styleinfo to setup.Cosmetics.pubic_styles[_style]>>
<<set _highestshave to _styleinfo.shavelevel>>
<<for _bodyhair range Object.keys($pc.body_hair)>>
<<set _lookup to _bodyhair + "_hair_styles">>
<<set _thisshavelevel to setup.Cosmetics[_lookup][$pc.body_hair[_bodyhair]].shavelevel>>
<<if _thisshavelevel > _highestshave>>
<<set _highestshave to _thisshavelevel>>
<</if>>
<</for>>
<<if $pc.body_hair_level().value != 0>>
<<if $optextrabodyhair>>
Overall, you'd say your body is <<=$pc.body_hair_level().descriptor>>.
Style all:
<br>
<<set _buttons to ["smooth", "stubble", "some hair", "hairy", "very hairy"]>>
<<for _newstyle range _buttons>>
<<set _option_shave_level to _buttons.indexOf(_newstyle)>>
<<if _option_shave_level gte _highestshave>><<continue>><</if>>
<<capture _newstyle, _option_shave_level>>
<<link _newstyle StylePubesBeards>>
<<run $pc.bulk_shave(_option_shave_level)>>
<<set $header to "You grab a razor and a tiny pair of scissors and get to work.">>
<<advtime 10>>
<</link>>
<</capture>>
<<if _newstyle isnot _buttons[_buttons.length - 1] && _option_shave_level + 1 lt _highestshave>>
|
<</if>>
<</for>>
<br>
<br>
<</if>>
Your pubic hair is currently <<= _styleinfo.descriptor>>. <<if $groommemory is not undefined>> Saved style is <<=$groommemory["pubic"]>>. <</if>>
<<set _avail to []>>
<<for _newstyle range Object.keys(setup.Cosmetics.pubic_styles)>>
<<set _newinfo to setup.Cosmetics.pubic_styles[_newstyle]>>
<<if _newinfo.shavelevel lt _styleinfo.shavelevel and _newstyle isnot _style>>
<<run _avail.push(_newstyle)>>
<</if>>
<</for>>
<<if _avail.length is 0>>
<br>
There isn't anything else you can do with it at the moment. Better wait for it to grow out if you want a change.
<<else>>
Style pubes:
<br>
<<for _newstyle range _avail>>
<<capture _newstyle>>
<<link _newstyle StylePubesBeards>>
<<set $pc.pubic_style to _newstyle>>
<<set $lastpubicstyle to $gameday>>
<<set $header to "You grab a razor and a tiny pair of scissors and get to work.">>
<<advtime 10>>
<</link>>
<</capture>>
<<if _newstyle isnot _avail[_avail.length - 1]>>
|
<</if>>
<</for>>
<</if>>
<br><br>
<<if $optextrabodyhair>>
<<for _hairtype range Object.keys($pc.body_hair)>>
<<set _lookup to _hairtype + "_hair_styles">>
<<set _thishair to setup.Cosmetics[_lookup][$pc.body_hair[_hairtype]]>>
Your <<=_hairtype>> hair is currently <<=_thishair.descriptor.replaceAll("%pp", "your")>>. <<if $groommemory is not undefined>> Saved style is <<=$groommemory[_hairtype]>>. <</if>>
<<set _avail to []>>
<<for _newstyle range Object.keys(setup.Cosmetics[_lookup])>>
<<set _newinfo to setup.Cosmetics[_lookup][_newstyle]>>
<<if _newinfo.shavelevel lt _thishair.shavelevel and _newstyle isnot _style>>
<<run _avail.push(_newstyle)>>
<</if>>
<</for>>
<<if _avail.length is 0>>
<br>
There isn't anything else you can do with it at the moment. Better wait for it to grow out if you want a change.
<<else>>
Style <<=_hairtype>> hair:
<br>
<<for _newstyle range _avail>>
<<capture _newstyle, _hairtype>>
<<link _newstyle StylePubesBeards>>
<<script>>
if (!V.lastbodyhairstyles){
let day = V.gameday;
State.setVar("$lastbodyhairstyles",
{
"butt": day,
"armpit": day,
"tummy": day,
"leg": day,
"arm": day,
});
}
<</script>>
<<set $pc.body_hair[_hairtype] to _newstyle>>
<<set $lastbodyhairstyles[_hairtype] to $gameday>>
<<set $header to "You grab a razor and a tiny pair of scissors and get to work.">>
<<advtime 10>>
<</link>>
<</capture>>
<<if _newstyle isnot _avail[_avail.length - 1]>>
|
<</if>>
<</for>>
<</if>>
<br><br>
<</for>>
<</if>>
<<if $groommemory is not undefined>>
<<link "Trim your hair to saved hair styles." StylePubesBeards>>
<<set _target_pube_info to setup.Cosmetics.pubic_styles[$groommemory["pubic"]]>>
<<set _current_pupe_info to setup.Cosmetics.pubic_styles[$pc.pubic_style]>>
<<if _target_pube_info.shavelevel lt _current_pupe_info.shavelevel>>
<<set $pc.pubic_style to $groommemory["pubic"]>>
<</if>>
<<set _target_butt_info to setup.Cosmetics.butt_hair_styles[$groommemory["butt"]]>>
<<set _current_butt_info to setup.Cosmetics.butt_hair_styles[$pc.body_hair["butt"]]>>
<<if _target_butt_info.shavelevel lt _current_butt_info.shavelevel>>
<<set $pc.body_hair["butt"] to $groommemory["butt"]>>
<</if>>
<<set _target_armpit_info to setup.Cosmetics.armpit_hair_styles[$groommemory["armpit"]]>>
<<set _current_armpit_info to setup.Cosmetics.armpit_hair_styles[$pc.body_hair["armpit"]]>>
<<if _target_armpit_info.shavelevel lt _current_armpit_info.shavelevel>>
<<set $pc.body_hair["armpit"] to $groommemory["armpit"]>>
<</if>>
<<set _target_tummy_info to setup.Cosmetics.tummy_hair_styles[$groommemory["tummy"]]>>
<<set _current_tummy_info to setup.Cosmetics.tummy_hair_styles[$pc.body_hair["tummy"]]>>
<<if _target_tummy_info.shavelevel lt _current_tummy_info.shavelevel>>
<<set $pc.body_hair["tummy"] to $groommemory["tummy"]>>
<</if>>
<<set _target_leg_info to setup.Cosmetics.leg_hair_styles[$groommemory["leg"]]>>
<<set _current_leg_info to setup.Cosmetics.leg_hair_styles[$pc.body_hair["leg"]]>>
<<if _target_leg_info.shavelevel lt _current_leg_info.shavelevel>>
<<set $pc.body_hair["leg"] to $groommemory["leg"]>>
<</if>>
<<set _target_arm_info to setup.Cosmetics.arm_hair_styles[$groommemory["arm"]]>>
<<set _current_arm_info to setup.Cosmetics.arm_hair_styles[$pc.body_hair["arm"]]>>
<<if _target_arm_info.shavelevel lt _current_arm_info.shavelevel>>
<<set $pc.body_hair["arm"] to $groommemory["arm"]>>
<</if>>
<<if "chest" in $pc.body_hair>>
<<set _target_chest_info to setup.Cosmetics.chest_hair_styles[$groommemory["chest"]]>>
<<set _current_chest_info to setup.Cosmetics.chest_hair_styles[$pc.body_hair["chest"]]>>
<<if _target_chest_info.shavelevel lt _current_chest_info.shavelevel>>
<<set $pc.body_hair["chest"] to $groommemory["chest"]>>
<</if>>
<</if>>
<<advtime 10>>
<</link>>
<br>
<</if>>
<<else>>
Your body is completely smooth. There's nothing to shave right now.
<br><br>
<</if>>
<br>
<<link "Save current body hair style for future grooming." StylePubesBeards>>
<<set $groommemory to {"pubic": $pc.pubic_style, "butt": $pc.body_hair["butt"], "armpit": $pc.body_hair["armpit"],
"tummy": $pc.body_hair["tummy"],"leg": $pc.body_hair["leg"],"arm": $pc.body_hair["arm"], "chest": $pc.body_hair["chest"]}>> <!-- pubes, beard, butt, armpit, tummy, leg, arm -->
<</link>>
<br><br>
</div>
<<link "Done">>
<<if $location is "ResidenceShowers">>
<<egoto ShowerStall>>
<<else>>
<<egoto $location>>
<</if>>
<</link>><<set _dinc to setup.randel(setup.inclinations.dreamable())>>
<<set _info to setup.inclinations.get(_dinc)>>
<<run V.inclinationsunlocked[_dinc].dreamed = true>>
<<= _info.dream>>
<br><br>
Unlocked inclination <span class="notice"><<= _dinc>></span>: <<= _info.description>> (<<= _info.effects>>)
<br><br>
<<set _opposing to $pc.inclinations_opposing(_dinc)>>
<<if _opposing.length gt 0>>
This inclination opposes <<and _opposing>>, so you cannot embrace it right now.
<br>
<<link "Continue" WakeUp>>
<<run setup.add_notification('You\'ve unlocked the <span class="notice">' + _dinc + '</span> inclination, but it opposes currently embraced inclinations. You can embrace it later by using the Inclinations button to the left and first rejecting any opposing inclinations.')>>
<</link>>
<<else>>
<<link "Embrace it..." WakeUp>>
<<run setup.add_notification('You\'ve unlocked and added the <span class="notice">' + _dinc + '</span> inclination!')>><<run setup.add_inclination(_dinc)>>
<</link>>
<br>
<<link "That's not me!" WakeUp>>
<<run setup.add_notification('You\'ve unlocked the <span class="notice">' + _dinc + '</span> inclination, but rejected it. You can embrace it later using the Inclinations button to the left if you choose.')>>
<</link>>
<</if>>/* welcome to hell!
turns out generating natural language through story markup is complicated */
<<set _partners to $encounter.partners(true)>>
<<if $encounter.failedabort>>
<<highlight bad>>You struggle to escape, but to no avail!<</highlight>>
<<run delete $encounter.failedabort>>
<br><br>
<</if>>
<<if !$encounter.abort>>
<<for _i to 0; _i lt _partners.length; _i++>>
/* iterating through people the pc is interacting with, with logic to make pc-to-pc interactions last */
<<set _partner to _partners[_i]>>
<<if _i gte 1 and _i lt _partners.length - 1>><br><br><</if>>
/* <<run console.log("current partner: " + _partner.name)>> */
<<set _pos to $pc.position_with(_partner)>>
<<set _role to $pc.role_with(_partner)>>
<<if _partner.name_known and !$encounter.anonymous and !_partner.is_anonymous()>><<set _pn to _partner.firstname()>><<else>><<set _pn to setup.a_or_an(_partner.anonymous_name) + " " + _partner.anonymous_name>><</if>>
/* display clothing changes -- things displaced, removed, replaced */
<<for _j to 0; _j lt $encounter.clothing_changes.length; _j++>>
<<set _subject to $encounter.pobj($encounter.clothing_changes[_j].subject)>>
<<set _object to $encounter.pobj($encounter.clothing_changes[_j].object)>>
<<if $encounter.clothing_changes[_j].uncovered.indexOf("penis") isnot -1 or $encounter.clothing_changes[_j].uncovered.indexOf("vagina") isnot -1 or ($encounter.clothing_changes[_j].uncovered.indexOf("nipples") isnot -1 and _object.has_breasts()) or $encounter.clothing_changes[_j].uncovered.indexOf("butt") isnot -1>>
/* this change uncovered a naughty bit, so we'll want to take a moment to mention it once we're actually generating text
(the terrible truth is this entire conditional just exists to see if one single period should be a comma instead) */
<<set _bits to true>>
<<else>>
<<set _bits to false>>
<</if>>
<<highlight "narrate-sexact-clothes">>
<<if _subject.equals(_partner) and !$pc.equals(_subject)>>
<<encounternamec _partner>>
/* the cap widget capitalizes the first letter, it is very nice at the beginning of a sentence
and necessary since _pn (partner name) might be "a slim man" or some such rather than a proper name
so please use the cap widget, call him Mister Cappy */
<<if $encounter.clothing_changes[_j].action is "remove all">>
<<conjname _partner take>> off all of
<<elseif $encounter.clothing_changes[_j].action is "remove">>
<<conjname _partner take>> off
<<elseif $encounter.clothing_changes[_j].action is "fix">>
fixes
<<elseif _partner.ps is "they">>
<<= $encounter.clothing_changes[_j].action>>
<<else>>
/* use a widget that determines the proper 3rd person verb form for displacing this item */
<<displace3rd $encounter.clothing_changes[_j].action>>
<</if>>
<<if _object.equals(_partner)>>
<<pp>>
<<elseif _object.equals($pc)>>
your
<<elseif _object.name_known and !$encounter.anonymous and !_object.is_anonymous()>>
<<= _object.fullname()>>
<<else>>
<<= setup.a_or_an(_object.anonymous_name) + " " + _object.anonymous_name>>
<</if>>
<<if $encounter.clothing_changes[_j].action is "remove all">>clothes<<else>><<= $encounter.clothing_changes[_j].clothing>><</if>><<if _bits is true>>,<<else>>.<</if>>
<<elseif _subject.equals($pc) and _object.equals(_partner) and !_object.equals($pc)>>
You
<<if $encounter.clothing_changes[_j].action is "remove all">>
take off all of
<<elseif $encounter.clothing_changes[_j].action is "remove">>
take off
<<elseif $encounter.clothing_changes[_j].action is "fix">>
fix
<<else>>
<<= $encounter.clothing_changes[_j].action>>
<</if>>
<<encounternamepp _partner>> <<if $encounter.clothing_changes[_j].action is "remove all">>clothes<<else>><<= $encounter.clothing_changes[_j].clothing>><</if>><<if _bits is true>>,<<else>>.<</if>>
<<elseif _subject.equals($pc) and _object.equals($pc) and _partner.equals($pc)>>
You
<<if $encounter.clothing_changes[_j].action is "remove all">>
take off all of
<<elseif $encounter.clothing_changes[_j].action is "remove">>
take off
<<elseif $encounter.clothing_changes[_j].action is "fix">>
fix
<<else>>
<<= $encounter.clothing_changes[_j].action>>
<</if>>
your <<if $encounter.clothing_changes[_j].action is "remove all">>clothes<<else>><<= $encounter.clothing_changes[_j].clothing>><</if>><<if _bits is true>>,<<else>>.<</if>>
<<else>>
<<continue>>
<</if>>
<<if $encounter.clothing_changes[_j].uncovered.indexOf("penis") isnot -1>>
exposing <<if _object.equals($pc)>>your<<else>><<= _object.pp>><</if>>
<<cock _object>>.
<<if _object.equals($pc) and $partner1 and !$pc.equals($partner1)>>
<<dirtytalkcock $partner1>>
<</if>>
<<elseif $encounter.clothing_changes[_j].uncovered.indexOf("vagina") isnot -1>>
exposing <<if _object.equals($pc)>>your<<else>><<= _object.pp>><</if>>
<<pussy _object>><<if $encounter.clothing_changes[_j].uncovered.indexOf("butt") isnot -1>> and <<ass _object>><</if>>.
<<if _object.equals($pc) and $partner1 and !$pc.equals($partner1)>>
<<dirtytalkpussy $partner1>>
<</if>>
<<elseif $encounter.clothing_changes[_j].uncovered.indexOf("nipples") isnot -1 and _object.has_breasts()>>
exposing <<if _object.equals($pc)>>your<<else>><<= _object.pp>><</if>>
<<breasts _object>>.
<<if _object.equals($pc) and $partner1 and !$pc.equals($partner1)>>
<<dirtytalktits $partner1>>
<</if>>
<<elseif $encounter.clothing_changes[_j].uncovered.indexOf("butt") isnot -1>>
exposing <<if _object.equals($pc)>>your<<else>><<= _object.pp>><</if>>
<<ass _object>>.
<</if>>
<</highlight>>
/* that sure was an adventure in managing whitespace */
<</for>>
/* narrate equipping/unequipping toys */
<<highlight "narrate-sexact-toys">>
<<set _removetoyacts to []>>
<<for _toyact range $encounter.toy_acts>>
<<if _partner.equals(_toyact.doer)>>
<<if _partner.equals($pc)>><<set _pp to "your">><<else>><<set _pp to _partner.pp>><</if>>
<<run _removetoyacts.push(_toyact)>>
<<set _toyinfo to setup.sextoys[_toyact.item]>>
<<set _name to _toyact.name>>
<<encounternamec _partner>>
<<if _toyinfo.worn>>
<<if _toyact.actiontype is "unequip toy">>
<<conjname _partner remove>> <<aoran _name>> _name.
<<else>>
<<if _toyinfo.worn is "vagina">>
<<conjname _partner insert>> <<aoran _name>> _name into _pp <<dpussy _partner>>.
<<elseif _toyinfo.worn is "anus">>
<<conjname _partner insert>> <<aoran _name>> _name into _pp ass.
<<elseif _toyinfo.worn is "penis">>
<<conjname _partner put>> <<aoran _name>> _name around _pp <<cock _partner>>.
<<else>>
<<conjname _partner put>> on <<aoran _name>> _name.
<</if>>
<</if>>
<<elseif _toyact.actiontype is "unequip toy">>
<<conjname _partner put>> down the _name.
<<else>>
<<conjname _partner pick>> up <<aoran _name>> _name.
<</if>>
<</if>>
<</for>>
<<for _remove range _removetoyacts>>
<<run $encounter.toy_acts.splice($encounter.toy_acts.indexOf(_remove), 1)>>
<</for>>
<</highlight>>
/* time for the good stuff -- we iterate through sex acts and see if they involve the current partner
and, well, describe them if they do, since that's what we're all here for
these acts come from setup.sexacts and each object there needs a corresponding case here
or else it won't be narrated */
/*
<<run console.log("NEW ROUND")>>
<<run console.log([...V.encounter.acts])>>
*/
<<for _j to 0; _j lt $encounter.acts.length; _j++>>
/*
<<run console.log("act: " + $encounter.acts[_j].name)>>
<<run console.log("sub: " + $encounter.acts[_j].subject.name)>>
<<run console.log("obj: " + $encounter.acts[_j].object.name)>>
*/
<<if !$encounter.acts[_j].narrate>><<continue>><</if>>
<<set _masturbation to false>>
<<set _subject to $encounter.pobj($encounter.acts[_j].subject)>>
<<set _object to $encounter.pobj($encounter.acts[_j].object)>>
<<if _subject.equals(_partner) and _object.equals($pc) and !_partner.equals($pc)>>
/* current partner is the doer of the action... let us set up pronouns and stuff appropriately */
<<set _doer to _partner>>
<<set _target to _object>>
<<if _target.name_known and !$encounter.anonymous and !_target.is_anonymous()>><<set _tn to _target.firstname()>><<else>><<set _tn to setup.a_or_an(_target.anonymous_name) + " " + _target.anonymous_name>><</if>>
<<set _spp to _pn + "'s">><<set _spp2 to _doer.pp>><<set _sps to _doer.ps>>
<<if _target.equals($pc)>><<set _opp to "your">><<set _opp2 to "your">><<else>><<set _opp to _tn + "'s">><<set _opp2 to _target.pp>><<set _opo to _target.po>><</if>>
<<if _target.equals($pc)>><<set _opo to "you">><<set _opo2 to "you">><<else>><<set _opo to _tn>><<set _opo2 to _target.po>><</if>>
<<if _target.equals($pc)>><<set _opq to "yours">><<set _opq2 to "yours">><<else>><<set _opq to _tn + "'s">><<set _opq2 to _target.pq>><</if>>
<<set _dn to _pn>>
<<elseif _subject.equals($pc) and _object.equals($pc) and _partner.equals($pc)>>
/* pc is the doer AND receiver of the action. that's masturbation! */
<<set _doer to $pc>>
<<set _target to $pc>>
<<set _masturbation to true>>
<<set _spp to "your">><<set _spp2 to "your">><<set _sps to "you">>
<<set _opp to "your">><<set _opp2 to "your">>
<<set _opq to "yours">><<set _opq2 to "yours">>
<<set _opo to "you">><<set _opo2 to "you">>
<<set _tn to "you">>
<<set _dn to "you">>
<<elseif _subject.equals($pc) and _object.equals(_partner)>>
/* the pc is the doer of the action and current partner is the receiver */
<<set _doer to $pc>>
<<set _target to _partner>>
<<if _target.name_known and !$encounter.anonymous and !_target.is_anonymous()>><<set _tn to _target.firstname()>><<else>><<set _tn to setup.a_or_an(_target.anonymous_name) + " " + _target.anonymous_name>><</if>>
<<set _spp to "your">><<set _spp2 to "your">><<set _sps to "you">>
<<if _target.equals($lastencountername)>>
<<set _opp to _target.pp>><<set _opp2 to _target.pp>>
<<set _opq to _target.pq>><<set _opq2 to _target.pq>>
<<set _opo to _target.po>><<set _opo2 to _target.po>>
<<else>>
<<set _opp to _tn + "'s">><<set _opp2 to _target.pp>>
<<set _opq to _tn + "'s">><<set _opq2 to _target.pq>>
<<set _opo to _tn>><<set _opo2 to _target.po>>
<</if>>
<<set _dn to "you">>
<<else>>
<<continue>>
<</if>>
<<if _doer is $pc>>
<<set _hlclass to "narrate-sexact-self">>
<<else>>
<<set _hlclass to "narrate-sexact-partner">>
<</if>>
<<set _attitude_shy to setup.people.has_any_inclination(_doer, "sexshy")>>
<<set _attitude_crude to setup.people.has_any_inclination(_doer, "crude")>>
<<set _attitude_dom to setup.people.has_any_inclination(_doer, "dominant")>>
<<set _attitude_sub to !_attitude_dom && setup.people.has_any_inclination(_doer, "submissive")>>
<<if $encounter.acts[_j]["subject skills improved"]>>
<<set _skill to $encounter.acts[_j]["subject skills improved"][0]>>
<<set _skilllvl to setup.people.skill_level(_doer, _skill)>>
<<set _attitude_masterful to _skilllvl >= 8>>
<<set _attitude_experienced to _skilllvl >= 5>>
<<set _attitude_decent to _skilllvl >= 2>>
<<set _attitude_beginner to _skilllvl < 2>>
<<else>>
<<unset _attitude_beginner>>
<<unset _attitude_decent>>
<<unset _attitude_experienced>>
<<unset _attitude_masterful>>
<</if>>
<<set _toy to $encounter.acts[_j].toy>>
<<if _toy>>
<<set _vibe to false>>
<<set _toyinfo to setup.sextoys[_toy.item]>>
<<for _toytype range _toyinfo.types>>
<<if _toytype.indexOf("vibrator") gte 0>>
<<set _vibe to true>>
<<break>>
<</if>>
<</for>>
<<else>>
<<set _vibe to false>>
<</if>>
<<highlight _hlclass>>
<<switch $encounter.acts[_j].name>>
/* this stuff looks like a giant mess (and it kind of is) but
we're using the pronouns we just determined above, the partner's name,
and various widgets that describe body parts in some relevant detail
oh, and the widget that conjugates verbs for us, that one is neat
(it lets us do both "You do this" and "He does this" right here without repeating markup)
I think of the people involved as 'doer'/'subject' and 'target'/'object'
which should mostly explain the variable names used here */
/* reading this months later and lolling at 'looks like a giant mess'
lol every passage looks like this */
<<case "Kiss">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> shyly <<conjname _doer kiss>> _opo on the lips.
<<case 1>><<encounternamec _doer>> <<conjname _doer press>> a soft kiss to _opp lips.
<<default>><<encounternamec _doer>> <<conjname _doer kiss>> _opo shyly.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer kiss>> _opo on the lips.
<<case 1>><<encounternamec _doer>> <<conjname _doer press>> a firm kiss to _opp lips.
<<default>><<encounternamec _doer>> <<conjname _doer kiss>> _opo, tongues mingling.
<</switch>>
<</if>>
<<case "Grope Breasts">>
<<set _covering to _target.outermost_covering("breasts")>>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> timidly <<conjname _doer grope>> _opp <<breasts _target>><<if _covering != null>> through _opp2 <<= _covering.name>><</if>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<breasts _target>> an eager but shy squeeze<<if _covering != null>> through _opp2 <<= _covering.name>><</if>>.
<<default>><<encounternamec _doer>> <<conjname _doer palm>> _opp <<breasts _target>><<if _covering != null>> through _opp2 <<= _covering.name>><</if>>, giving them a squeeze.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> firmly <<conjname _doer grope>> _opp <<breasts _target>><<if _covering != null>> through _opp2 <<= _covering.name>><</if>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<breasts _target>> a firm squeeze<<if _covering != null>> through _opp2 <<= _covering.name>><</if>>.
<<default>><<encounternamec _doer>> <<conjname _doer palm>> _opp <<breasts _target>><<if _covering != null>> through _opp2 <<= _covering.name>><</if>>, giving them a squeeze.
<</switch>>
<</if>>
<<case "Tease Nipples">>
<<if _attitude_shy>>
<<set _firmness_choices = ["shyly ", "timidly ", "", ""]>>
<<else>>
<<set _firmness_choices = ["gently ", ""]>>
<<if _doer.has_inclination("Masochist")>>
<<run _firmness_choices.push("firmly ")>>
<</if>>
<</if>>
<<set _firmness = setup.randomchoice(_firmness_choices)>>
<<switch setup.rir(0, 4)>>
<<case 0>><<encounternamec _doer>> _firmness<<conjname _doer tease>> _opp <<nipples _target>>.
<<case 1>><<encounternamec _doer>> _firmness<<conjname _doer pull>> _opp <<nipples _target>>.
<<case 2>><<encounternamec _doer>> _firmness<<conjname _doer flick>> _opp <<nipples _target>>.
<<default>><<encounternamec _doer>> _firmness<<conjname _doer circle>> _opp <<nipples _target>>.
<</switch>>
<<case "Kiss Nipple">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer press>> _spp2 lips to _opp <<nipple _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<nipple _target>> a firm kiss.
<<default>><<encounternamec _doer>> <<conjname _doer kiss>> _opp <<nipple _target>>.
<</switch>>
<<case "Lick Nipple">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer lick>> _opp <<nipple _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer drag>> _spp2 tongue over _opp <<nipple _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer flick>> _spp2 tongue against _opp <<nipple _target>>.
<</switch>>
<<case "Suck Nipple">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer suck>> on _opp <<nipple _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<nipple _target>> between _spp2 lips.
<<default>><<encounternamec _doer>> <<conjname _doer suck>> firmly on _opp <<nipple _target>>.
<</switch>>
<<case "Rub Pussy">>
<<if _attitude_masterful>>
<<set _adverb to setup.randomchoice(["expertly ", "masterfully ", "skillfully "])>>
<<elseif _attitude_experienced>>
<<set _adverb to setup.randomchoice(["expertly", "skillfully ", "skillfully "])>>
<<elseif _attitude_decent>>
<<set _adverb to setup.randomchoice(["", "", "skillfully "])>>
<<elseif _attitude_shy>>
<<set _adverb to setup.randomchoice(["", "", "somewhat awkwardly ", "timidly ", "shyly "])>>
<<else>>
<<set _adverb to setup.randomchoice(["", "", "somewhat awkwardly "])>>
<</if>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> _adverb<<conjname _doer rub>> _opp <<pussy _target>> with _spp2 fingertips.
<<case 1>><<encounternamec _doer>> _adverb<<conjname _doer stroke>> _spp2 fingers up and down along _opp <<pussy _target>> lips.
<<default>><<encounternamec _doer>> _adverb<<conjname _doer stroke>> the folds of _opp <<pussy _target>>.
<</switch>>
<<case "Pull Hand To Pussy">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp hand and <<conj _doer pull>> it to _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _opp hand to _spp2 <<pussy _doer>> and <<conj _doer hump>> it.
<</switch>>
<<case "Rub Pussy Against Leg">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 <<pussy _doer>> against _opp leg.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<pussy _doer>> into _opp leg.
<</switch>>
<<case "Rub Leg Against Pussy">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 leg against _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 leg, grinding it against _opp <<pussy _target>>.
<</switch>>
<<case "Rub Cock Against Leg">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 <<cock _doer>> against _opp leg.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<cock _doer>> into _opp leg.
<</switch>>
<<case "Rub Leg Against Cock">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 leg against _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 leg, grinding it against _opp <<cock _target>>.
<</switch>>
<<case "Finger Pussy">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 4)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer plunge>> a pair of fingers into _opp <<pussy _target>>, hitting just the right spot.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _spp2 fingers in and out of _opp <<pussy _target>>.
<<case 2>><<encounternamec _doer>> expertly <<conjname _doer push>> _spp2 fingers in and out of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> firmly <<conjname _doer fingerfuck>> _opp <<pussy _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 4)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer slip>> a pair of fingers into _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> somewhat awkwardly <<conjname _doer push>> _spp2 fingers in and out of _opp <<pussy _target>>.
<<case 2>><<encounternamec _doer>> <<conjname _doer push>> _spp2 fingers in and out of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer fingerfuck>> _opp <<pussy _target>>.
<</switch>>
<</if>>
<<case "Rub Clit">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 4)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer press>> _spp2 thumb to _opp <<clit _target>> and <<conjname _doer roll>> it expertly.
<<case 1>><<encounternamec _doer>> expertly <<conjname _doer roll>> _opp <<clit _target>> around with _spp2 fingertip.
<<case 2>><<encounternamec _doer>> <<conjname _doer flick>> _opp <<clit _target>> with a pair of fingertips.
<<default>><<encounternamec _doer>> <<conjname _doer jiggle>> _opp <<clit _target>> with a pair of fingertips.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer search>> around for _opp <<clit _target>> for a moment, then <<conjname _doer rub>> it.
<<case 1>><<encounternamec _doer>> somewhat awkwardly <<conjname _doer roll>> _opp <<clit _target>> around with _spp2 fingertip.
<<default>><<encounternamec _doer>> <<conjname _doer rub>> _opp <<clit _target>> with a pair of fingertips.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer press>> _spp2 thumb to _opp <<clit _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer roll>> _opp <<clit _target>> around with _spp2 fingertip.
<<default>><<encounternamec _doer>> <<conjname _doer flick>> _opp <<clit _target>> with a pair of fingertips.
<</switch>>
<</if>>
<<case "Lick Pussy">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> expertly <<conjname _doer tease>> _spp2 tongue along _opp <<slit _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer flick>> _spp2 tongue over the folds of _opp <<pussy _target>>, gently parting and teasing them.
<<default>><<encounternamec _doer>> <<conjname _doer lick>> along _opp <<slit _target>> and <<conjname _doer tease>> _opp2 <<clit _target>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> timidly <<conjname _doer tease>> _spp2 tongue along _opp <<slit _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer flick>> _spp2 tongue over the folds of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer lick>> along _opp <<slit _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer drag>> _spp2 tongue along _opp <<slit _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer flick>> _spp2 tongue over the folds of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer lick>> _opp <<slit _target>> up to _opp2 <<clit _target>>.
<</switch>>
<</if>>
<<case "Suck Clit">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer suck>> on _opp <<clit _target>>, expertly working it between _spp2 lips.
<<case 1>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<clit _target>> between _spp2 lips and skillfully <<conj _doer flick>> it with the tip of _spp2 tongue.
<<default>><<encounternamec _doer>> intensely <<conjname _doer suck>> _opp <<clit _target>> while skillfully teasing it with _spp2 tongue.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> tentatively <<conjname _doer suck>> on _opp <<clit _target>>.
<<case 1>><<encounternamec _doer>> <<conj _doer flick>> it with _spp2 tongue.
<<default>><<encounternamec _doer>> <<conjname _doer suck>> _opp <<clit _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer suck>> on _opp <<clit _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<clit _target>> between _spp2 lips and <<conj _doer flick>> it with the tip of _spp2 tongue.
<<default>><<encounternamec _doer>> <<conjname _doer suck>> _opp <<clit _target>> while teasing it with _spp2 tongue.
<</switch>>
<</if>>
<<case "Ride Face">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<pussy _doer>> on _opp face.
<<case 1>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 <<pussy _doer>> all over _opp face.
<<default>><<encounternamec _doer>> <<conjname _doer ride>> _spp2 <<pussy _doer>> up and down on _opp face.
<</switch>>
<<case "Stop Fingering">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer slip>> _spp2 fingers from _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer tug>> _spp2 fingers from _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer remove>> _spp2 fingers from _opp <<pussy _target>>.
<</switch>>
<<case "Pull Off Of Finger">>
<<encounternamec _doer>> <<conjname _doer ease>> _spp2 <<pussy _doer>> away from _opp fingers.
<<case "Fondle Balls">>
<<set _covering to _target.outermost_covering("balls")>>
<<if _covering is null>>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer cup>> _opp <<balls _target>> in _spp2 palm and <<conjname _doer knead>> them skillfully.
<<case 1>><<encounternamec _doer>> gently <<conjname _doer squeeze>> _opp <<balls _target>> in _spp2 hand and <<conjname _doer knead>> them expertly.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _opp <<balls _target>> around in _spp2 fingers.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> tentatively <<conjname _doer cup>> _opp <<balls _target>> in _spp2 palm.
<<case 1>><<encounternamec _doer>> gently <<conjname _doer squeeze>> _opp <<balls _target>> in _spp2 hand.
<<default>><<encounternamec _doer>> <<conjname _doer explore>> _opp <<balls _target>> with _spp2 fingers.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer cup>> _opp <<balls _target>> in _spp2 palm.
<<case 1>><<encounternamec _doer>> gently <<conjname _doer squeeze>> _opp <<balls _target>> in _spp2 hand.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _opp <<balls _target>> around in _spp2 fingers.
<</switch>>
<</if>>
<<else>>
<<encounternamec _doer>> <<conjname _doer cup>> _opp <<balls _target>> through _opp2 <<= _covering.name>>.
<</if>>
<<case "Lick Balls">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> timidly <<conjname _doer drag>> _spp2 tongue over _opp <<balls _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<balls _target>> a lick as a blush warms _spp2 cheeks.
<<default>><<encounternamec _doer>> tentatively <<conjname _doer slide>> _spp2 tongue over _opp <<balls _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer drag>> _spp2 tongue over _opp <<balls _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<balls _target>> a broad lick.
<<default>><<encounternamec _doer>> <<conjname _doer swirl>> _spp2 tongue over _opp <<balls _target>>.
<</switch>>
<</if>>
<<case "Lick Ass">>
<<if _attitude_shy>>
<<switch setup.rir(0, 3)>>
<<case 0>>Blushing fiercely, <<encountername _doer>> <<conjname _doer tease>> _spp2 tongue around _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<anus _target>> a firm lick with a warm blush on _spp2 face.
<<default>>Blushing, <<encountername _doer>> <<conjname _doer tongue>> _opp <<anus _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer tease>> _spp2 tongue around _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<anus _target>> a firm lick.
<<default>><<encounternamec _doer>> <<conjname _doer tongue>> _opp <<anus _target>>.
<</switch>>
<</if>>
<<case "Suck Balls">>
<<if _attitude_shy>>
<<switch setup.rir(0, 3)>>
<<case 0>>Blushing, <<encountername _doer>> <<conjname _doer suck>> one of _opp <<balls _target>> into _spp2 mouth.
<<case 1>><<encounternamec _doer>> shyly <<conjname _doer take>> one of _opp <<balls _target>> between _spp2 lips.
<<default>><<encounternamec _doer>> <<conjname _doer suck>> on one of _opp <<balls _target>>, tentatively stroking it with _spp2 tongue.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer suck>> one of _opp <<balls _target>> into _spp2 mouth.
<<case 1>><<encounternamec _doer>> <<conjname _doer tug>> one of _opp <<balls _target>> between _spp2 lips.
<<default>><<encounternamec _doer>> <<conjname _doer suck>> on one of _opp <<balls _target>>, teasing it with _spp2 tongue.
<</switch>>
<</if>>
<<case "Lick Cock">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> shyly <<conjname _doer drag>> _spp2 tongue along _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> timidly <<conjname _doer give>> _opp <<cock _target>> a long lick.
<<default>><<encounternamec _doer>> <<conjname _doer flick>> _spp2 tongue against the head of _opp <<cock _target>> with a blush on _spp2 face.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer drag>> _spp2 tongue along _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<cock _target>> a long lick.
<<default>><<encounternamec _doer>> <<conjname _doer swirl>> _spp2 tongue over the head of _opp <<cock _target>>.
<</switch>>
<</if>>
<<case "Rub Cock On Face">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer drag>> _spp2 <<cock _doer>> along _opp face.
<<case 1>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 <<cock _doer>> over _opp face and lips.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> the tip of _spp2 <<cock _doer>> over _opp cheek and lips.
<</switch>>
<<case "Tease Cock With Fingers">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer trail>> _spp2 fingers up and down along _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer tease>> the underside of _opp <<cock _target>> with _spp2 fingertips.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> the shaft of _opp <<cock _target>> with one fingertip.
<</switch>>
<<case "Rub Cock Against Hand">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp hand and <<conj _doer rub>> _spp2 <<cock _doer>> against it.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _opp hand against _spp2 <<cock _doer>> and <<conj _doer rub>> against it.
<</switch>>
<<case "Tease Cock With Feet">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer brush>> _spp2 feet against _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<cock _target>> with _spp2 feet.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> the shaft of _opp <<cock _target>> with _spp2 foot.
<</switch>>
<<case "Rub Cock Against Feet">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp ankle and <<conj _doer rub>> _spp2 <<cock _doer>> against _opp2 foot.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _opp foot against _spp2 <<cock _doer>> and <<conj _doer rub>> against it.
<</switch>>
<<case "Tease Pussy With Feet">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer brush>> _spp2 feet against _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<pussy _target>> with _spp2 feet.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<pussy _target>> with _spp2 foot.
<</switch>>
<<case "Rub Pussy Against Feet">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp ankle and <<conj _doer rub>> _spp2 <<pussy _doer>> against _opp2 foot.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _opp foot against _spp2 <<pussy _doer>> and <<conj _doer rub>> against it.
<</switch>>
<<case "Wrap Hand Around Cock">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp hand and <<conj _doer wrap>> it around _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer take>> _opp hand and wrap _opp2 fingers around _spp2 <<cock _doer>>.
<</switch>>
<<case "Grip Cock">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer take>> _opp <<cock _target>> into _spp2 hand.
<<case 1>><<encounternamec _doer>> <<conjname _doer wrap>> _spp2 fingers around the shaft of _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer take>> a firm hold of _opp <<cock _target>>.
<</switch>>
<<case "Grip Cock With Feet">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> _spp2 feet up and <<conjname _doer wrap>> them around _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer clamp>> _spp2 feet around _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer press>> _spp2 feet around _opp <<cock _target>>.
<</switch>>
<<case "Pull Feet Around Cock">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp feet and <<conj _doer wrap>> them around _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer take>> _opp ankles in hand and wrap _opp2 feet around _spp2 <<cock _doer>>.
<</switch>>
<<case "Rub With Feet">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> _spp2 feet up and against _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer press>> _spp2 feet to _opp <<pussy _target>>.
<</switch>>
<<case "Pull Feet To Pussy">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> _opp feet and <<conj _doer press>> them to _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer take>> _opp ankles in hand and push _opp2 feet against _spp2 <<pussy _doer>>.
<</switch>>
<<case "Take Cock Between Lips">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer suck>> the head of _opp <<cock _target>> between _spp2 lips.
<<case 1>><<encounternamec _doer>> <<conjname _doer plunge>> _spp2 mouth down onto _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer take>> _opp <<cock _target>> between _spp2 lips.
<</switch>>
<<if _target.is_pc>>
<<cockentersmouth _target _doer $encounter.consensual>>
<<elseif _doer.is_pc>>
<<cockentersmouth _target _doer true>>
<</if>>
<<case "Enter Mouth">>
<<switch setup.rir(0, 3)>>
<<case 0>>
<<if $encounter.lockposition>>
<<encounternamec _doer>> <<conjname _doer thrust>> <<conj _doer push>> _spp2 <<cock _doer>> into _opp2 mouth.
<<else>>
<<encounternamec _doer>> <<conjname _doer cup>> the back of _opp head and <<conj _doer push>> _spp2 <<cock _doer>> into _opp2 mouth.
<</if>>
<<case 1>><<encounternamec _doer>> <<conjname _doer part>> _opp lips with the tip of _spp2 <<cock _doer>>, then <<conj _doer slide>> it in.
<<default>><<encounternamec _doer>> <<conjname _doer push>> _spp2 <<cock _doer>> into _opp mouth.
<</switch>>
<<if _target.is_pc>>
<<cockentersmouth _doer _target $encounter.consensual>>
<<elseif _doer.is_pc>>
<<cockentersmouth _doer _target true>>
<</if>>
<<case "Stroke Shaft">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer slide>> _spp2 hand up and down along _opp <<cock _target>>, expertly working the shaft.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _opp <<cock _target>> up and down, working the shaft skillfully.
<<default>><<encounternamec _doer>> <<conjname _doer slip>> _spp2 fingers pleasingly along the length of _opp <<cock _target>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> somewhat awkwardly <<conjname _doer slide>> _spp2 hand up and down along _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _opp <<cock _target>> up and down, almost maintaining a regular rhythm.
<<default>><<encounternamec _doer>> <<conjname _doer slide>> _spp2 fingers along the length of _opp <<cock _target>>, fumbling the rhythm occasionally.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer slide>> _spp2 hand up and down along _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _opp <<cock _target>> up and down.
<<default>><<encounternamec _doer>> <<conjname _doer slip>> _spp2 fingers along the length of _opp <<cock _target>>.
<</switch>>
<</if>>
<<case "Pump Shaft">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<cock _target>> in _spp2 hand and <<conj _doer pump>> it.
<<case 1>><<encounternamec _doer>> <<conjname _doer work>> _opp <<cock _target>> with a tight fist.
<<default>><<encounternamec _doer>> firmly <<conjname _doer pump>> the shaft of _opp <<cock _target>>.
<</switch>>
<<case "Fuck Fist">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, fucking _opp fist with _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, thrusting _spp2 <<cock _doer>> into _opp tight fist.
<</switch>>
<<case "Tease Frenulum">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer tease>> the sensitive spot on the underside of the head of _opp <<cock _target>> with one fingertip.
<<case 1>><<encounternamec _doer>> <<conjname _doer roll>> a fingertip around the underside of the head of _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer rub>> the underside of the head of _opp <<cock _target>> with _spp2 thumb.
<</switch>>
<<case "Stroke Shaft With Feet">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer slide>> _spp2 feet up and down along the sides of _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer curl>> _spp2 toes around <<cock _target>> and <<conj _doer slip>> them up and down.
<<default>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 feet along the length of _opp <<cock _target>>.
<</switch>>
<<case "Fuck Feet">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, fucking _opp feet with _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, thrusting _spp2 <<cock _doer>> between _opp feet.
<</switch>>
<<case "Stroke Pussy With Feet">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer slide>> _spp2 feet up and down against _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 feet against _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 feet up and down against _opp <<pussy _target>>.
<</switch>>
<<case "Rub Against Feet">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, rubbing _spp2 <<pussy _doer>> against _opp feet.
<<case 1>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, grinding _spp2 <<pussy _doer>> on _opp feet.
<</switch>>
<<case "Suck Cock">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> expertly <<conjname _doer work>> _opp <<cock _target>>, sucking _spp2 mouth tightly around it.
<<case 1>><<encounternamec _doer>> <<conjname _doer bob>> _spp2 head on _opp <<cock _target>>, working it expertly.
<<default>><<encounternamec _doer>> <<conjname _doer slurp>> and <<conj _doer suck>> on _opp <<cock _target>>, _spp2 drool coating the shaft.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> tentatively <<conjname _doer suck>> _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer bob>> _spp2 head on _opp <<cock _target>>, doing _spp2 best to keep the rhythm.
<<default>><<encounternamec _doer>> <<conjname _doer slurp>> and <<conj _doer suck>> on _opp <<cock _target>> with awkward noises.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer work>> _opp <<cock _target>> with _spp2 mouth, _spp2 cheeks sucking inward.
<<case 1>><<encounternamec _doer>> <<conjname _doer bob>> _spp2 head on _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer slurp>> and <<conj _doer suck>> on _opp <<cock _target>>.
<</switch>>
<</if>>
<<case "Deepthroat">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> expertly <<conjname _doer take>> _opp <<cock _target>> deep into _spp2 throat.
<<case 1>><<encounternamec _doer>> <<conjname _doer make>> obscene gurgling noises as _sps expertly <<conj _doer work>> _opp <<cock _target>> deep in _spp2 throat.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the head of _opp <<cock _target>> in and out of _spp2 throat, swallowing it skillfully.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer plunge>> _opp <<cock _target>> into _spp2 throat.
<<case 1>><<encounternamec _doer>> <<conjname _doer make>> obscene gurgling noises as _sps <<conj _doer work>> _opp <<cock _target>> deep in _spp2 throat.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the head of _opp <<cock _target>> in and out of _spp2 throat.
<</switch>>
<</if>>
<<case "Fuck Mouth">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer hold>> the back of _opp head and <<conj _doer push>> _spp2 <<cock _doer>> in and out of _opp2 mouth.
<<case 1>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 <<cock _doer>> in and out of _opp mouth.
<<default>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> up and down along _opp tongue.
<</switch>>
<<case "Release Cock">>
<<encounternamec _doer>> <<conjname _doer 'let'>> go of _opp <<cock _target>>.
<<case "Tug Cock Free">>
<<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<cock _doer>> out of _opp hand.
<<case "Release Cock From Feet">>
<<encounternamec _doer>> <<conjname _doer remove>> _spp2 feet from _opp <<cock _target>>.
<<case "Tug Cock Free Of Feet">>
<<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<cock _doer>> away from _opp feet.
<<case "Move Feet Away From Pussy">>
<<encounternamec _doer>> <<conjname _doer pull>> _spp2 feet away from _opp <<pussy _target>>.
<<case "Pull Away From Feet">>
<<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<pussy _doer>> away from _opp feet.
<<case "Pull Out Of Mouth">>
<<encounternamec _doer>> <<conjname _doer tug>> _spp2 <<cock _doer>> out of _opp mouth.
<<case "Pull Mouth Off Of Cock">>
<<encounternamec _doer>> <<conjname _doer slide>> _opp <<cock _target>> out of _spp2 mouth.
<<case "Tease Pussy With Cock">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> shyly <<conjname _doer probe>> at the soft folds of _opp <<pussy _target>> with the head of _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> timidly <<conjname _doer rub>> the head of _spp2 <<cock _doer>> against _opp <<slit _target>>.
<<default>><<encounternamec _doer>> tentatively <<conjname _doer probe>> the entrance of _opp <<pussy _target>> with the tip of _spp2 <<cock _doer>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer nudge>> at the soft folds of _opp <<pussy _target>> with the head of _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rub>> the head of _spp2 <<cock _doer>> up and down along _opp <<slit _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> the entrance of _opp <<pussy _target>> with the tip of _spp2 <<cock _doer>>.
<</switch>>
<</if>>
<<case "Cocktease With Pussy">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, shyly teasing _opp <<cock _target>> with _spp2 <<slit _doer>>.
<<case 1>><<encounternamec _doer>> tentatively <<conjname _doer push>> _spp2 <<slit _doer>> against the tip of _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, shyly teasing _opp <<cock _target>> with _spp2 <<slit _doer>> with a warm blush.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, teasing _opp <<cock _target>> with _spp2 <<slit _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _spp2 <<slit _doer>> teasingly against the tip of _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, teasing _opp <<cock _target>> with _spp2 <<slit _doer>>.
<</switch>>
<</if>>
<<case "Enter Pussy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> as _sps <<conj _doer push>> _spp2 <<cock _doer>> slowly into _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the head of _spp2 <<cock _doer>> into _opp <<slit _target>>, then <<conj _doer thrust>> in deeper.
<<default>><<encounternamec _doer>> <<conjname _doer line>> up with _opp <<slit _target>>, then <<conj _doer push>> _spp2 <<cock _doer>> deep into _opp2 <<pussy _target>>.
<</switch>>
<<if _target.is_pc>>
<<cockenterspussy _doer _target $encounter.consensual>>
<<elseif _doer.is_pc>>
<<cockenterspussy _doer _target true>>
<</if>>
<<case "Push Cock In">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer reach>> down with _spp2 fingers to push the head of _opp <<cock _target>> into _spp2 <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, pushing _spp2 <<pussy _doer>> onto _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and <<conj _doer work>> _opp <<cock _target>> into _spp2 <<pussy _doer>>.
<</switch>>
<<if _target.is_pc>>
<<cockenterspussy _target _doer $encounter.consensual>>
<<elseif _doer.is_pc>>
<<cockenterspussy _target _doer true>>
<</if>>
<<case "Fuck Pussy">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 <<cock _doer>> rhythmically in and out of _opp <<pussy _target>>, hitting all the right spots.
<<case 1>><<encounternamec _doer>> smoothly <<conjname _doer stroke>> _spp2 <<cock _doer>> in and out of _opp <<pussy _target>> with delicious friction.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, expertly stroking _spp2 <<cock _doer>> in and out of _opp <<pussy _target>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> _spp2 <<cock _doer>> in and out of _opp <<pussy _target>>, panting softly.
<<case 1>><<encounternamec _doer>> <<conjname _doer shove>> _spp2 <<cock _doer>> rhythmically into _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, driving _spp2 <<cock _doer>> in and out of _opp <<pussy _target>> with slightly off-rhythm enthusiasm.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 <<cock _doer>> rhythmically in and out of _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> in and out of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, driving _spp2 <<cock _doer>> in and out of _opp <<pussy _target>>.
<</switch>>
<</if>>
<<case "Take Cock">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pant>> as _sps <<conj _doer take>> _opp <<cock _target>> in _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, letting _opp <<cock _target>> plunge deep into _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer squirm>> _spp2 hips as _opp <<cock _target>> pumps _spp2 <<pussy _doer>>.
<</switch>>
<<case "Hump Back">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 hips, working _opp <<cock _target>> with _spp2 <<pussy _doer>> with expert rhythm.
<<case 1>><<encounternamec _doer>> expertly <<conjname _doer rock>> _spp2 hips, deeply grinding on _opp <<cock _target>> as it pumps _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> lithely <<conjname _doer undulate>> _spp2 body, taking _opp <<cock _target>> deep into _spp2 <<pussy _doer>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 hips, working _opp <<cock _target>> with _spp2 <<pussy _doer>> with enthusiastic if not perfect rhythm.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, moving with _opp <<cock _target>> as it pumps _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer wriggle>> _spp2 hips, doing _spp2 best to take _opp <<cock _target>> deep inside _spp2 <<pussy _doer>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 hips, working _opp <<cock _target>> with _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, grinding on _opp <<cock _target>> as it pumps _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer undulate>> _spp2 body, taking _opp <<cock _target>> deep into _spp2 <<pussy _doer>>.
<</switch>>
<</if>>
<<case "Ride Cock">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer bounce>> on _opp <<cock _target>> with expert rhythm, working it with _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> expertly and enthusiastically <<conjname _doer ride>> _opp <<cock _target>> with _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer bounce>> _spp2 hips expertly, pumping _opp <<cock _target>> with _spp2 <<pussy _doer>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> tentatively <<conjname _doer bounce>> on _opp <<cock _target>>, doing _spp2 best to work it with _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer ride>> _opp <<cock _target>> with _spp2 <<pussy _doer>>, doing _spp2 best to follow _opp2 rhythm.
<<default>><<encounternamec _doer>> <<conjname _doer bounce>> _spp2 hips, working _opp <<cock _target>> with _spp2 <<pussy _doer>>, trying to keep up with the rhythm.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer bounce>> on _opp <<cock _target>>, working it with _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer ride>> _opp <<cock _target>> with _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer bounce>> _spp2 hips, pumping _opp <<cock _target>> with _spp2 <<pussy _doer>>.
<</switch>>
<</if>>
<<case "Squeeze Cock">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer clench>> _spp2 inner muscles, squeezing _opp <<cock _target>> deep inside _spp2 <<pussy _doer>>.
<<case 1>><<cap _spp>> ab muscles bunch as _sps <<conjname _doer squeeze>> _opp <<cock _target>> with _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer squeeze>> _spp2 <<pussy _doer>> around _opp <<cock _target>>.
<</switch>>
<<case "Rabbitfuck">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> _opp <<pussy _target>> hard and fast with _spp2 <<cock _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer speed>> _spp2 rhythm, pumping _opp <<pussy _target>> fast with _spp2 <<cock _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer hammer>> _opp <<pussy _target>> with _spp2 <<cock _doer>>, fast and hard.
<</switch>>
<<case "Deep Stroke">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> deep in and out of _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer thrust>> _spp2 <<cock _doer>> deep into _opp <<pussy _target>>, then <<conj _doer pull>> back slowly just to thrust in deep and hard again.
<<default>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> slow and deep in and out of _opp <<pussy _target>>.
<</switch>>
<<case "Pull Out">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<cock _doer>> out of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<cock _doer>> out of _opp <<slit _target>>.
<</switch>>
<<case "Pull Off">>
<<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and <<conj _doer pull>> off of _opp <<cock _target>>.
<<case "Frot">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 <<cock _doer>> against _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<cock _doer>> up and down against _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> slowly against _opp <<cock _target>>.
<</switch>>
<<case "Trib">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> _spp2 <<pussy _doer>> against _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<clit _doer>> into _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer undulate>> _spp2 body, rubbing _spp2 <<pussy _doer>> against _opp <<pussy _target>>.
<</switch>>
<<case "Tease Ass With Cock">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer nudge>> the head of _spp2 <<cock _doer>> against _opp <<anus _target>>, wide-eyed at _spp2 own actions.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<cock _doer>> between the cheeks of _opp <<ass _target>>, blushing and taking tight breaths.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<anus _target>> with the tip of _spp2 <<cock _doer>>, blushing all the while.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer nudge>> the head of _spp2 <<cock _doer>> against _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<cock _doer>> between the cheeks of _opp <<ass _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<anus _target>> with the tip of _spp2 <<cock _doer>>.
<</switch>>
<</if>>
<<case "Cocktease With Ass">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> shyly <<conjname _doer tease>> _opp <<cock _target>> with _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> tentatively <<conjname _doer push>> back against _opp <<cock _target>>, shyly teasing it with _spp2 <<anus _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer bite>> _spp2 lip and <<conjname _doer arch>> _spp2 hips, blushing and spressing _spp2 <<anus _doer>> against the head of _opp <<cock _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, teasing _opp <<cock _target>> with _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> back against _opp <<cock _target>>, teasing it with _spp2 <<anus _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, pressing _spp2 <<anus _doer>> against the head of _opp <<cock _target>>.
<</switch>>
<</if>>
<<case "Rub Butthole">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rub>> a fingertip against _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rim>> _opp <<anus _target>> with a fingertip.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<anus _target>> with the tip of _spp2 finger, pressing gently.
<</switch>>
<<case "Enter Ass">>
<<if _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> awkwardly <<conjname _doer push>> _spp2 <<cock _doer>> into _opp <<ass _target>>, moving carefully.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the head of _spp2 <<cock _doer>> into _opp <<anus _target>>, <<conjname _doer hesitate>>, then slowly <<conj _doer push>> it into _opp2 <<ass _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the tip of _spp2 <<cock _doer>> against _opp <<anus _target>>, then slowly, carefully, and somewhat awkwardly <<conj _doer thrust>> in, filling _opp2 <<ass _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> deeply as _sps push _spp2 <<cock _doer>> slowly into _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the head of _spp2 <<cock _doer>> into _opp <<anus _target>>, then slowly <<conj _doer fill>> _opp2 <<ass _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the tip of _spp2 <<cock _doer>> against _opp <<anus _target>>, then slowly <<conj _doer thrust>> in, filling _opp2 <<ass _target>>.
<</switch>>
<</if>>
<<if _target.is_pc>>
<<cockentersass _doer _target $encounter.consensual>>
<<elseif _doer.is_pc>>
<<cockentersass _doer _target true>>
<</if>>
<<case "Push Cock In Ass">>
<<if _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer reach>> down with _spp2 fingers, awkwardly pushing the head of _opp <<cock _target>> into _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, managing to push _spp2 <<ass _doer>> onto _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and eventually <<conj _doer work>> _opp <<cock _target>> into _spp2 <<ass _doer>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer reach>> down with _spp2 fingers to push the head of _opp <<cock _target>> into _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, pushing _spp2 <<ass _doer>> onto _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and <<conj _doer work>> _opp <<cock _target>> into _spp2 <<ass _doer>>.
<</switch>>
<</if>>
<<if _target.is_pc>>
<<cockentersass _target _doer $encounter.consensual>>
<<elseif _doer.is_pc>>
<<cockentersass _target _doer true>>
<</if>>
<<case "Finger Ass">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> skillfully <<conjname _doer pump>> _spp2 finger in and out of _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _spp2 finger into _opp <<anus _target>>, stroking it in and out skillfully.
<<default>><<encounternamec _doer>> skillfully <<conjname _doer thrust>> a finger in and out of _opp <<ass _target>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> somewhat tentatively <<conjname _doer push>> _spp2 finger in and out of _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer shove>> _spp2 finger into _opp <<anus _target>> with enthusiasm if not much skill.
<<default>><<encounternamec _doer>> <<conjname _doer push>> a finger in and out of _opp <<ass _target>> a little clumsily.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer plunge>> _spp2 finger in and out of _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _spp2 finger into _opp <<anus _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer thrust>> a finger in and out of _opp <<ass _target>>.
<</switch>>
<</if>>
<<case "Fuck Ass">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer thrust>> _spp2 <<cock _doer>> slowly and skillfully in and out of _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> in and out of _opp <<anus _target>> with delicious friction.
<<default>><<encounternamec _doer>> skillfully <<conjname _doer work>> _spp2 <<cock _doer>> slowly in and out of _opp <<ass _target>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer thrust>> _spp2 <<cock _doer>> slowly in and out of _opp <<ass _target>>, doing _spp2 best to keep the rhythm.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> in and out of _opp <<anus _target>>, barely keeping it together.
<<default>><<encounternamec _doer>> <<conjname _doer work>> _spp2 <<cock _doer>> slowly in and out of _opp <<ass _target>> as _sps <<conj _doer pant>> for breath.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer thrust>> _spp2 <<cock _doer>> slowly and rhythmically in and out of _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> in and out of _opp <<anus _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer work>> _spp2 <<cock _doer>> slowly in and out of _opp <<ass _target>>.
<</switch>>
<</if>>
<<case "Take Cock In Ass">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer whimper>> and <<conjname _doer blush>> as _sps <<conj _doer take>> _opp <<cock _target>> in _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer whimper>> shyly as _opp <<cock _target>> pumps deep into _spp2 <<ass _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer squirm>> _spp2 backside shyly as _opp <<cock _target>> slowly strokes in and out of _spp2 <<anus _doer>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer whimper>> as _sps <<conj _doer take>> _opp <<cock _target>> in _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer gasp>> as _opp <<cock _target>> pumps deep into _spp2 <<ass _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer squirm>> _spp2 backside as _opp <<cock _target>> slowly strokes in and out of _spp2 <<anus _doer>>.
<</switch>>
<</if>>
<<case "Hump Ass Back">>
<<if _attitude_experienced>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<ass _doer>> onto _opp <<cock _target>>, skillfully taking it deep inside _spp2 <<anus _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, working _spp2 <<ass _doer>> on _opp <<cock _target>> with skill.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, skillfully working _opp <<cock _target>> as it strokes deep into _spp2 <<ass _doer>>.
<</switch>>
<<elseif _attitude_beginner>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<ass _doer>> onto _opp <<cock _target>>, biting _spp2 lip as _sps <<conj _doer take>> it deep inside _spp2 <<anus _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips with enthusiasm if not much skill, working _spp2 <<ass _doer>> on _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, gasping as _sps <<conj _doer 'let'>> _opp <<cock _target>> stroke deep into _spp2 <<ass _doer>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<ass _doer>> onto _opp <<cock _target>>, taking it deep inside _spp2 <<anus _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, working _spp2 <<ass _doer>> on _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, letting _opp <<cock _target>> stroke deep into _spp2 <<ass _doer>>.
<</switch>>
<</if>>
<<case "Pull Out Of Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<cock _doer>> out of _opp <<anus _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pull>> _spp2 <<cock _doer>> out of _opp <<ass _target>>.
<</switch>>
<<case "Pull Ass Off Of Cock">>
<<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 rear and <<conjname _doer pull>> off of _opp <<cock _target>>.
<<case "Stop Fingering Ass">>
<<encounternamec _doer>> <<conjname _doer tug>> _spp2 fingers from _opp <<anus _target>>.
<<case "Pull Ass Off Of Finger">>
<<encounternamec _doer>> <<conjname _doer ease>> _spp2 <<ass _doer>> away from _opp finger.
<<case "Fuck Tits">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<tits _target>> around _spp2 <<cock _doer>> as _sps <<conj _doer fuck>> them enthusiastically, gasping and blushing.
<<case 1>><<encounternamec _doer>> shyly <<conjname _doer push>> _opp <<tits _target>> together around _spp2 <<cock _doer>> as _sps <<conj _doer pump>> eagerly between them.
<<default>><<encounternamec _doer>> shyly <<conjname _doer squeeze>> _opp <<tits _target>> around _spp2 <<cock _doer>> and <<conj _doer fuck>> them firmly, _spp2 eyes wide.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<tits _target>> around _spp2 <<cock _doer>> as _sps <<conj _doer fuck>> them enthusiastically.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _opp <<tits _target>> together around _spp2 <<cock _doer>> as _sps <<conj _doer pump>> between them.
<<default>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp <<tits _target>> around _spp2 <<cock _doer>> and <<conj _doer fuck>> them firmly, making them bounce.
<</switch>>
<</if>>
<<case "Use Tits On Cock">>
<<if _attitude_shy or _attitude_sub>>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 body as _sps <<conj _doer squeeze>> _spp2 <<tits _doer>> around _opp <<cock _target>>, blushing all the while.
<<case 1>><<encounternamec _doer>> shyly <<conjname _doer squeeze>> _spp2 <<tits _doer>> around _opp <<cock _target>>.
<</switch>>
<<else>>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 body as _sps <<conj _doer squeeze>> _spp2 <<tits _doer>> around _opp <<cock _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer squeeze>> _spp2 <<tits _doer>> around _opp <<cock _target>>.
<</switch>>
<</if>>
<<case "Hotdog">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer squeeze>> the cheeks of _opp <<ass _target>> around _spp2 <<cock _doer>> as _sps <<conj _doer fuck>> them.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the cheeks of _opp <<ass _target>> together around _spp2 <<cock _doer>> as _sps <<conj _doer thrust>> between them.
<<default>><<encounternamec _doer>> <<conjname _doer squeeze>> the cheeks of _opp <<ass _target>> around _spp2 <<cock _doer>> and <<conj _doer fuck>> them firmly, making the flesh jiggle.
<</switch>>
<<case "Rub Ass On Cock">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, rubbing _opp <<cock _target>> between the cheeks of _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<ass _doer>> against _opp <<cock _target>>, letting the shaft pump between _spp2 cheeks.
<</switch>>
<<case "Spank">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer give>> _opp <<ass _target>> a firm spank.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> _opp <<ass _target>> a resounding slap.
<<default>><<encounternamec _doer>> <<conjname _doer slap>> _opp <<ass _target>>.
<</switch>>
<<case "Spank Breast">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer give>> _opp <<tit _target>> a firm slap.
<<case 1>><<encounternamec _doer>> <<conjname _doer spank>> _opp <<tit _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer slap>> one of _opp <<tits _target>>.
<</switch>>
<<case "Spank Balls">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer give>> _opp balls a firm slap.
<<case 1>><<encounternamec _doer>> <<conjname _doer spank>> _opp balls.
<<default>><<encounternamec _doer>> <<conjname _doer slap>> _opp balls.
<</switch>>
<<case "Dickslap Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer smack>> _spp2 <<cock _doer>> against _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer spank>> _opp <<ass _target>> with _spp2 <<cock _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer slap>> _opp <<ass _target>> with _spp2 <<cock _doer>>.
<</switch>>
<<case "Dickslap Breast">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer smack>> _spp2 <<cock _doer>> against _opp <<tit _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer spank>> _opp <<tit _target>> with _spp2 <<cock _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer slap>> _opp <<tit _target>> with _spp2 <<cock _doer>>, making _opp2 flesh jiggle.
<</switch>>
<<case "Dickslap Face">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> lewdly <<conjname _doer tap>> _spp2 <<cock _doer>> against _opp face.
<<case 1>><<encounternamec _doer>> <<conjname _doer smack>> _opp face with _spp2 <<cock _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer slap>> _spp2 <<cock _doer>> against _opp face.
<</switch>>
<<case "Squeeze Neck">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer put>> _spp2 hand around _opp neck and <<conj _doer squeeze>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer wrap>> _spp2 hand around _opp neck.
<<default>><<encounternamec _doer>> <<conjname _doer squeeze>> _opp throat.
<</switch>>
<<case "Scratch Back">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer drag>> _spp2 nails down _opp back.
<<case 1>><<encounternamec _doer>> <<conjname _doer leave>> scratches down _opp back.
<<default>><<encounternamec _doer>> <<conjname _doer dig>> _spp2 fingernails into _opp back.
<</switch>>
<<case "Suck Neck">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer plant>> _spp2 mouth against the side of _opp neck and <<conj _doer suck>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer bite>> _opp neck and <<conjname _doer suck>> at _opp2 skin.
<<default>><<encounternamec _doer>> <<conjname _doer suck>> firmly at _opp neck, teeth grazing _opp2 skin.
<</switch>>
<<case "Bite Shoulder">>
<<switch setup.rir(0, 2)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer bite>> at _opp shoulder, teeth grazing _opp2 skin.
<<default>><<encounternamec _doer>> <<conjname _doer bite>> down where _opp neck meets _opp2 shoulder.
<</switch>>
<<case "Spank Ass With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer give>> _opp <<ass _target>> a firm spank with the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer smack>> _opp <<ass _target>> with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer give>> _opp <<ass _target>> a spank with the <<= _toy.name>>.
<</switch>>
<<case "Spank Breast With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer give>> _opp <<tit _target>> a slap with the <<= _toy.name>>, making the flesh bounce.
<<case 1>><<encounternamec _doer>> <<conjname _doer spank>> _opp <<tit _target>> with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> firmly <<conjname _doer strike>> one of _opp <<tits _target>> with the <<= _toy.name>>.
<</switch>>
<<case "Spank Thigh With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer smack>> the meat of _opp thigh with the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer spank>> _opp thigh with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> firmly <<conjname _doer strike>> one of _opp thighs with the <<= _toy.name>>.
<</switch>>
<<case "Whip Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer whip>> _opp <<ass _target>> with <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer strike>> _opp <<ass _target>> with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer whip>> the cheek of _opp <<ass _target>> with the <<= _toy.name>>.
<</switch>>
<<case "Whip Breast">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer whip>> _opp <<tit _target>> with the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> firmly <<conjname _doer whip>> _opp <<breast _target>> with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer strike>> one of _opp <<tits _target>> with the <<= _toy.name>>.
<</switch>>
<<case "Whip Thigh">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer whip>> _opp thigh with the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> firmly <<conjname _doer strike>> _opp thighs with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> firmly <<conjname _doer strike>> one of _opp thighs with the <<= _toy.name>>.
<</switch>>
<<case "Place Sucker On Nipple">>
<<encounternamec _doer>> firmly <<conjname _doer press>> the <<= _toy.name>> to _opp <<nipple _target>>, <<conjname _doer squeeze>> it, then <<conjname _doer release>> it. The sucker takes hold, engorging the nipple.
<<case "Clamp Nipple">>
<<encounternamec _doer>> firmly <<conjname _doer clamp>> _opp <<nipple _target>> with the <<= _toy.name>>.
<<case "Tug Clamped Nipple">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer tug>> on the clamp attached to _opp <<nipple _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer give>> the clamp attached to _opp <<nipple _target>> a slow pull.
<<default>><<encounternamec _doer>> <<conjname _doer tug>> and <<conjname _doer twist>> the clamp attached to _opp <<nipple _target>>.
<</switch>>
<<case "Pull Hair">>
<<if _target.has_long_hair()>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer wrap>> _opp long hair around _spp2 fist and <<conjname _doer give>> it a yank.
<<case 1>><<encounternamec _doer>> <<conjname _doer grab>> _opp long hair and <<conjname _doer give>> it a pull.
<<default>><<encounternamec _doer>> <<conjname _doer grab>> _opp long hair and <<conjname _doer pull>> it hard.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grab>> a fistful of _opp short hair and <<conjname _doer give>> it a yank.
<<case 1>><<encounternamec _doer>> <<conjname _doer get>> a handful of _opp short hair and <<conjname _doer give>> it a pull.
<<default>><<encounternamec _doer>> <<conjname _doer grab>> _opp short hair and <<conjname _doer pull>> it hard.
<</switch>>
<</if>>
<<case "Rub Pussy With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> teasingly <<conjname _doer rub>> the <<if _vibe>>humming <</if>><<= _toy.name>> against _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rub>> _opp <<pussy _target>> with the <<if _vibe>>buzzing <</if>><<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer press>> the <<if _vibe>>humming <</if>><<= _toy.name>> to _opp <<pussy _target>>.
<</switch>>
<<case "Insert Toy Into Pussy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> inside _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer ease>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> into _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> into _opp <<pussy _target>>.
<</switch>>
<<case "Fuck Pussy With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer plunge>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> in and out of _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer fuck>> _opp <<pussy _target>> with the <<if _vibe>>vibrating <</if>><<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _opp <<pussy _target>> with the <<if _vibe>>vibrating <</if>><<= _toy.name>>.
<</switch>>
<<case "Rub Clit With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<clit _target>> with the <<if _vibe>>humming <</if>><<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer press>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> to _opp <<clit _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer rub>> _opp <<clit _target>> with the <<if _vibe>>buzzing <</if>><<= _toy.name>>.
<</switch>>
<<case "Rub Nipple With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<nipple _target>> with the <<if _vibe>>humming <</if>><<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer press>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> to _opp <<nipple _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer rub>> _opp <<nipple _target>> with the <<if _vibe>>buzzing <</if>><<= _toy.name>>.
<</switch>>
<<case "Pull Toy From Pussy">>
<<encounternamec _doer>> <<conjname _doer slip>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> from _opp <<pussy _target>>.
<<case "Rub Ass With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> teasingly <<conjname _doer rub>> the <<if _vibe>>humming <</if>><<= _toy.name>> against _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rub>> _opp <<anus _target>> with the <<if _vibe>>buzzing <</if>><<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer press>> the <<if _vibe>>humming <</if>><<= _toy.name>> to _opp <<anus _target>>.
<</switch>>
<<case "Insert Toy Into Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> inside _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer ease>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> into _opp <<anus _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> into _opp <<anus _target>>.
<</switch>>
<<case "Fuck Ass With Toy">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer plunge>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> in and out of _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer fuck>> _opp <<anus _target>> with the <<if _vibe>>vibrating <</if>><<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _opp <<anus _target>> with the <<if _vibe>>vibrating <</if>><<= _toy.name>>.
<</switch>>
<<case "Pull Toy From Ass">>
<<encounternamec _doer>> <<conjname _doer slip>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> from _opp ass.
<<case "Vibe G-spot">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer press>> the <<if _vibe>>humming <</if>><<= _toy.name>> to _opp G-spot.
<<case 1>><<encounternamec _doer>> <<conjname _doer find>> _opp G-spot with the <<if _vibe>>vibrating <</if>><<= _toy.name>> and <<conjname _doer hold>> it there.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the <<if _vibe>>humming <</if>><<= _toy.name>> against _opp G-spot, letting the vibrations radiate into it.
<</switch>>
<<case "Tease Cock With Cocksleeve">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<cock _target>> with the lubed-up slit of the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the lubed-up slit of the <<= _toy.name>> teasingly against the tip of _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<cock _target>> with the lubed-up slit of the <<= _toy.name>>.
<</switch>>
<<case "Push Cocksleeve Onto Cock">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> _opp <<cock _target>> into the lubed <<if _vibe>>humming <</if>>hole of <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer plunge>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> down onto _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer slip>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> over _opp <<cock _target>>.
<</switch>>
<<case "Fuck Cock With Cocksleeve">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> _opp <<cock _target>> with the <<if _vibe>>buzzing <</if>> <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> up and down along _opp <<cock _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> rhythmically on _opp <<cock _target>>.
<</switch>>
<<case "Fuck Cocksleeve">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 <<cock _doer>> rhythmically in and out of the <<if _vibe>>vibrating <</if>><<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> _spp2 <<cock _doer>> in and out of the <<if _vibe>>vibrating <</if>><<= _toy.name>>, groaning as _sps <<conjname _doer feel>> the soft lubed-up sleeve on _spp2 shaft.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, driving _spp2 <<cock _doer>> in and out of the <<if _vibe>>vibrating <</if>><<= _toy.name>>.
<</switch>>
<<case "Pull Cocksleeve Off Of Cock">>
<<encounternamec _doer>> <<conjname _doer pull>> the <<if _vibe>>vibrating <</if>><<= _toy.name>> off of _opp <<cock _target>>.
<<case "Tease Pussy With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer nudge>> at the soft folds of _opp <<pussy _target>> with the head of the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rub>> the head of the <<= _toy.name>> up and down along _opp <<slit _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> the entrance of _opp <<pussy _target>> with the tip of the <<= _toy.name>>.
<</switch>>
<<case "Enter Pussy With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> the <<= _toy.name>> slowly into _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the head of the <<= _toy.name>> into _opp <<slit _target>>, then <<conj _doer thrust>> in deeper.
<<default>><<encounternamec _doer>> <<conjname _doer line>> up with _opp <<slit _target>>, then <<conj _doer push>> the <<= _toy.name>> deep into _opp2 <<pussy _target>>.
<</switch>>
<<if _target.is_pc>>
<<strapenterspussy _doer _target $encounter.consensual>>
<<elseif _doer.is_pc>>
<<strapenterspussy _doer _target true>>
<</if>>
<<case "Push Strap-on In">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer reach>> down with _spp2 fingers to push the head of the <<= _toy.name>> into _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, pushing _spp2 <<pussy _doer>> onto the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and <<conj _doer work>> the <<= _toy.name>> into _spp2 <<pussy _doer>>.
<</switch>>
<<if _target.is_pc>>
<<strapenterspussy _target _doer $encounter.consensual>>
<<elseif _doer.is_pc>>
<<strapenterspussy _target _doer true>>
<</if>>
<<case "Fuck Pussy With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> the <<= _toy.name>> rhythmically in and out of _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> the <<= _toy.name>> in and out of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips, driving the <<= _toy.name>> in and out of _opp <<pussy _target>>.
<</switch>>
<<case "Take Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pant>> as _sps <<conj _doer take>> the <<= _toy.name>> in _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, letting the <<= _toy.name>> plunge deep into _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer squirm>> _spp2 hips as the <<= _toy.name>> pumps _spp2 <<pussy _doer>>.
<</switch>>
<<case "Hump Back On Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 hips, working the <<= _toy.name>> with _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, grinding on the <<= _toy.name>> as it pumps _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer undulate>> _spp2 body, taking the <<= _toy.name>> deep into _spp2 <<pussy _doer>>.
<</switch>>
<<case "Ride Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer bounce>> on the <<= _toy.name>>, working it with _spp2 <<pussy _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer ride>> the <<= _toy.name>> with _spp2 <<pussy _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer bounce>> _spp2 hips, pumping the <<= _toy.name>> with _spp2 <<pussy _doer>>.
<</switch>>
<<case "Rabbitfuck With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pump>> _opp <<pussy _target>> hard and fast with the <<= _toy.name>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer speed>> _spp2 rhythm, pumping _opp <<pussy _target>> fast with the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer hammer>> _opp <<pussy _target>> with the <<= _toy.name>>, fast and hard.
<</switch>>
<<case "Deep Stroke With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer stroke>> the <<= _toy.name>> deep in and out of _opp <<pussy _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer thrust>> the <<= _toy.name>> deep into _opp <<pussy _target>>, then <<conj _doer pull>> back slowly just to thrust in deep and hard again.
<<default>><<encounternamec _doer>> <<conjname _doer stroke>> the <<= _toy.name>> slow and deep in and out of _opp <<pussy _target>>.
<</switch>>
<<case "Pull Strap-on Out">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pull>> the <<= _toy.name>> out of _opp <<pussy _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pull>> the <<= _toy.name>> out of _opp <<slit _target>>.
<</switch>>
<<case "Pull Off Of Strap-on">>
<<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and <<conj _doer pull>> off of the <<= _toy.name>>.
<<case "Tease Ass With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer nudge>> the head of the <<= _toy.name>> against _opp <<anus _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer grind>> the <<= _toy.name>> between the cheeks of _opp <<ass _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer tease>> _opp <<anus _target>> with the tip of the <<= _toy.name>>.
<</switch>>
<<case "Enter Ass With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> deeply as _sps push the <<= _toy.name>> slowly into _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> the head of the <<= _toy.name>> into _opp <<anus _target>>, then slowly <<conj _doer fill>> _opp2 <<ass _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer push>> the tip of the <<= _toy.name>> against _opp <<anus _target>>, then slowly <<conj _doer thrust>> in, filling _opp2 <<ass _target>>..
<</switch>>
<<if _target.is_pc>>
<<strapentersass _doer _target $encounter.consensual>>
<<elseif _doer.is_pc>>
<<strapentersass _doer _target true>>
<</if>>
<<case "Push Strap-on In Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer reach>> down with _spp2 fingers to push the head of the <<= _toy.name>> into _spp2 <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer arch>> _spp2 hips, pushing _spp2 <<ass _doer>> onto the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 hips and <<conj _doer work>> the <<= _toy.name>> into _spp2 <<ass _doer>>.
<</switch>>
<<if _target.is_pc>>
<<strapentersass _target _doer $encounter.consensual>>
<<elseif _doer.is_pc>>
<<strapentersass _target _doer true>>
<</if>>
<<case "Fuck Ass With Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer thrust>> the <<= _toy.name>> slowly and rhythmically in and out of _opp <<ass _target>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer stroke>> the <<= _toy.name>> in and out of _opp <<anus _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer work>> the <<= _toy.name>> slowly in and out of _opp <<ass _target>>.
<</switch>>
<<case "Take Strap-on In Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer whimper>> as _sps <<conj _doer take>> the <<= _toy.name>> in _spp2 <<ass _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer gasp>> as the <<= _toy.name>> pumps deep into _spp2 <<ass _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer squirm>> _spp2 backside as the <<= _toy.name>> slowly strokes in and out of _spp2 <<anus _doer>>.
<</switch>>
<<case "Hump Ass Back Onto Strap-on">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer grind>> _spp2 <<ass _doer>> onto the <<= _toy.name>>, taking it deep inside _spp2 <<anus _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer rock>> _spp2 hips, working _spp2 <<ass _doer>> on the <<= _toy.name>>.
<<default>><<encounternamec _doer>> <<conjname _doer roll>> _spp2 hips, letting the <<= _toy.name>> stroke deep into _spp2 <<ass _doer>>.
<</switch>>
<<case "Pull Strap-on Out Of Ass">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer pull>> the <<= _toy.name>> out of _opp <<anus _target>>.
<<default>><<encounternamec _doer>> <<conjname _doer pull>> the <<= _toy.name>> out of _opp <<ass _target>>.
<</switch>>
<<case "Pull Ass Off Of Strap-on">>
<<encounternamec _doer>> <<conjname _doer wiggle>> _spp2 rear and <<conjname _doer pull>> off of the <<= _toy.name>>.
<<case "Press Bladder">>
<<encounternamec _doer>> <<conjname _doer press>> _spp2 hand against _opp bladder.
<<if _target.is_pc>>
You feel it begin to stir, piss threatening to release.
<<elseif _doer.is_pc>>
You knead, hoping to encourage the golden liquid inside to escape.
<</if>>
<<case "Lick Foot">>
<<encounternamec _doer>> <<conjname _doer grasp>> _opo by the ankle and <<conjname _doer lick>> _opp2 foot.
<</switch>>
<</highlight>>
<</for>>
/* display attempted things */
<<if !_partner.is_pc>>
<<if _partner.attempted_clothing_act>>
<<set _attempt to _partner.attempted_clothing_act>>
<<if !_attempt.seen>>
<<highlight "narrate-sexact-clothes-initiate">><<cap _pn>> takes hold of your <<= _attempt.clothing>>.<</highlight>>
<<elseif _attempt.denied>>
<<if _attempt.cancelled>>
<<encounternamec _partner>> <span class="unbad"><<conjname _partner seem>> to listen</span> to your request.
<<else>>
<<encounternamec _partner>> <span class="bad"><<conjname _partner 'don\'t'>> seem to care</span> what you want to happen.
<</if>>
<<set _partner.attempted_clothing_act to null>>
<<elseif _attempt.resisted>>
<<if _attempt.fight>>
<<if _attempt.cancelled>>
<<encounternamec _partner>> <span class="unbad"><<conjname _partner give>> in after a struggle</span>, but the fight is wearing you out.
<<else>>
<<encounternamec _partner>> <<conjname _partner growl>>, overcoming your struggles and <span class="bad">forcing you</span>.
<</if>>
<<else>>
<<encounternamec _partner>> <<conjname _partner offer>> no resistance to your struggling, <span class="unbad">immediately relenting</span>.
<</if>>
<<set _partner.attempted_clothing_act to null>>
<<else>>
<<set _partner.attempted_clothing_act to null>>
<</if>>
<<set _attempt.seen to true>>
<</if>>
<<if _partner.attempted_penetration>>
<<set _attempt to _partner.attempted_penetration>>
<<set _act to setup.sexacts[_attempt.sexact]>>
<<if !_attempt.seen>>
<<if _act["subject parts"][0] is "penis">>
<<if _act["object parts"][0] is "mouth">>
<<encounternamec _partner>> <<conjname _partner push>> the tip of <<pp _partner>> cock against your lips, wanting to <span class="sexy bold">take your mouth</span>.
<<elseif _act["object parts"][0] is "vagina">>
<<encounternamec _partner>> <<conjname _partner nudge>> the tip of <<pp _partner>> cock against your <<pussy $pc>>, nestling it at your opening.
<<if !V.kinkcontent.includes("breeding")>>
<span class="sexy bold"><<psc>>'ll be inside you in another moment.</span>
<<elseif setup.Pregnancy.wants_condom(_partner) && !_partner.condom>>
<<if _partner.has_condom()>>
<<set _condom to _partner.condom_types()[0]>>
<<highlight sexy>><<psc _partner>> <<conj pause>> long enough to put on <<aoran _condom>> _condom.<</highlight>>
<<run _partner.wear_condom(_condom)>>
<<run _partner.remove_condom(_condom)>>
<span class="sexy bold"><<psc>>'ll be inside you in another moment.</span>
<<else>>
<<highlight bad>><<psc _partner>> <<conj "want">> to use a condom, but <<ps>> <<conj "don't">> have one.<</highlight>>
<<set _attempt.suspended to true>>
<</if>>
<<elseif !setup.Pregnancy.wants_condom(_partner)>>
<<highlight ungood>><<psc _partner>> <<conj "don't">> care to use a condom.<</highlight>>
<span class="sexy bold"><<psc>>'ll be inside you in another moment.</span>
<</if>>
<<elseif _act["object parts"][0] is "anus">>
<<encounternamec _partner>> <<conjname _partner push>> the tip of <<pp _partner>> cock against your <<anus $pc>>, <span class="sexy bold">wanting to penetrate</span>.
<</if>>
<<elseif _act["object parts"][0] is "penis">>
<<if _act["subject parts"][0] is "mouth">>
<<encounternamec _partner>> <<conjname _partner kiss>> the tip of your cock, <span class="sexy bold">about to take it into <<pp _partner>> mouth</span>.
<<elseif _act["subject parts"][0] is "vagina">>
<<encounternamec _partner>> <<conjname _partner guide>> your cock to <<pp _partner>> <<pussy _partner>>, <span class="sexy bold">about to push you in</span>.
<<if V.kinkcontent.includes("breeding")>>
<<if setup.Pregnancy.wants_condom(_partner)>>
<<if !$pc.condom>>
<<psc>> <<conj pause>> then. <<highlight ungood>><<psc>> <<conj want>> you to use a condom.<</highlight>>
<<set _attempt.request_condom to true>>
<<set _attempt.suspended to true>>
<<else>>
<<psc>> <<conj seem>> to approve of you using a condom.
<<set _attempt.request_condom to true>>
<<set _attempt.suspended to false>>
<</if>>
<<else>>
<<highlight ungood>><<psc>> <<conj "don't">> seem interested in you using a condom.<</highlight>>
<<set _attempt.wants_condom to false>>
<<if setup.Pregnancy.can_get_pregnant(_partner) and (setup.Pregnancy.on_birth_control(_partner) or setup.Pregnancy.has_iud(_partner))>>
<<psc>> <<conj say>> <<pss>> on birth control.
<<elseif !setup.Pregnancy.can_get_pregnant(_partner) and setup.Pregnancy.has_vasectomy(_partner)>>
<<psc>> <<conj say>> <<pshas>> had a vasectomy.
<</if>>
<<if $pc.condom>>
<<set _attempt.suspended to true>>
<</if>>
<</if>>
<</if>>
<<elseif _act["subject parts"][0] is "anus">>
<<encounternamec _partner>> <<conjname _partner guide>> your cock to <<pp _partner>> <<anus _partner>>, <span class="sexy bold">about to shove you in</span>.
<</if>>
<<elseif _act["toys"]>>
<<if _act["object parts"][0] is "mouth">>
<<encounternamec _partner>> <<conjname _partner push>> the tip of <<pp _partner>> toy against your lips, wanting to <span class="sexy bold">take your mouth</span>.
<<elseif _act["object parts"][0] is "vagina">>
<<encounternamec _partner>> <<conjname _partner nudge>> the tip of <<pp _partner>> toy against your <<pussy $pc>>, nestling it at your opening. <span class="sexy bold"><<psc>>'ll be inside you in another moment.</span>
<<elseif _act["object parts"][0] is "anus">>
<<encounternamec _partner>> <<conjname _partner push>> the tip of <<pp _partner>> toy against your <<anus $pc>>, <span class="sexy bold">wanting to penetrate</span>.
<</if>>
<<elseif _act["target toys"]>>
<<if _act["subject parts"][0] is "mouth">>
<<encounternamec _partner>> <<conjname _partner kiss>> the tip of your toy, <span class="sexy bold">about to take it into <<pp _partner>> mouth</span>.
<<elseif _act["subject parts"][0] is "vagina">>
<<encounternamec _partner>> <<conjname _partner guide>> your toy to <<pp _partner>> <<pussy _partner>>, <span class="sexy bold">about to push it in</span>.
<<elseif _act["subject parts"][0] is "anus">>
<<encounternamec _partner>> <<conjname _partner guide>> your toy to <<pp _partner>> <<anus _partner>>, <span class="sexy bold">about to push it in</span>.
<</if>>
<</if>>
<<set _attempt.seen to true>>
<<elseif _attempt.denied>>
<<if _attempt.cancelled>>
<<encounternamec _partner>> <span class="unbad"><<conjname _partner seem>> to listen</span> to your request.
<<else>>
<<encounternamec _partner>> <span class="bad"><<conjname _partner 'don\'t'>> seem to care</span> what you want to happen.
<</if>>
<<set _partner.attempted_penetration to null>>
<<elseif _attempt.resisted>>
<<if _attempt.fight>>
<<if _attempt.cancelled>>
<<encounternamec _partner>> <span class="unbad"><<conjname _partner give>> in after a struggle</span>, but the fight is wearing you out.
<<else>>
<<encounternamec _partner>> <<conjname _partner growl>>, overcoming your struggles and <span class="bad">forcing you</span>.
<</if>>
<<else>>
<<encounternamec _partner>> <<conjname _partner offer>> no resistance to your struggling, <span class="unbad">immediately relenting</span>.
<</if>>
<<set _partner.attempted_penetration to null>>
<<elseif def _attempt.wants_condom and !_attempt.done>>
/* PC response to NPC-initiated penetration */
<<unset _condom>>
<<if _attempt.wants_condom>>
<<if setup.Pregnancy.wants_condom(_partner)>>
<<if !_partner.has_condom() && !_attempt.pick_condom>>
<<highlight ungood>><<psc _partner>> <<conj seem>> agreeable to using a condom, but... <<ps>> <<conj "don't">> have one.<</highlight>>
<<else>>
<<set _condom to _attempt.pick_condom || _partner.condom_types()[0]>>
<<set _attempt.suspended to false>>
<</if>>
<<elseif setup.Pregnancy.reluctantly_uses_condom(_partner)>>
<<if !_partner.has_condom() && !_attempt.pick_condom>>
<<highlight ungood>><<psc _partner>> <<conj seem>> reluctantly agreeable to using a condom, but... <<ps>> <<conj "don't">> have one.<</highlight>>
<<set _attempt.suspended to true>>
<<else>>
<<highlight unbad>><<encounternamec _partner>> reluctantly <<conjname _partner agree>> to use a condom.<</highlight>>
<<set _condom to _attempt.pick_condom || _partner.condom_types()[0]>>
<<set _attempt.suspended to false>>
<</if>>
<<else>>
<<highlight bad>><<encounternamec _partner>> really <<conjname _partner "don't">> want to use a condom.<</highlight>>
<<set _attempt.suspended to true>>
<</if>>
<<else>>
<<if !setup.Pregnancy.wants_condom(_partner)>>
<<set _removecondom to true>>
<<set _attempt.suspended to false>>
<<elseif !setup.Pregnancy.insists_on_condom(_partner)>>
<<highlight unbad>><<encounternamec _partner>> reluctantly <<conjname _partner agree>> not to use a condom.<</highlight>>
<<set _removecondom to true>>
<<set _attempt.suspended to false>>
<<set _attempt.request_condom to false>>
<<else>>
<<highlight bad>><<encounternamec _partner>> really <<conjname _partner insist>> on using a condom.<</highlight>>
<<set _attempt.suspended to true>>
<</if>>
<<if _removecondom>>
<<if $pc.condom>>
You remove your condom.
<<unset $pc.condom>>
<<elseif _partner.condom>>
<<encounternamec _partner>> <<conjname _partner remove>> <<pp>> condom.
<<unset _partner.condom>>
<</if>>
<</if>>
<</if>>
<<if _condom>>
<<if _attempt.pick_condom>>
<<run $pc.remove_condom(_condom)>>
<<else>>
<<run _partner.remove_condom(_condom)>>
<</if>>
<<if $pc.has_part("penis")>>
<<run $pc.wear_condom(_condom)>>
You put on <<aoran _condom>> _condom.
<<else>>
<<run _partner.wear_condom(_condom)>>
<<psc _partner>> <<conj put>> on <<aoran _condom>> _condom.
<</if>>
<</if>>
<<highlight sexy>>The two of you remain poised at the edge of penetration.<</highlight>>
<<else>>
<<set _partner.attempted_penetration to null>>
<</if>>
<</if>>
<<if _partner.attempted_position>>
<<set _attempt to _partner.attempted_position>>
<<if !_attempt.seen>>
<<set _posname to _attempt.button>>
<<set _posname = _posname.replace(" (top)", "")>><<set _posname = _posname.replace(" (bottom)", "")>>
<<set _posname = _posname.replace(" (receiving)", "")>><<set _posname = _posname.replace(" (giving)", "")>>
<<set _posname = _posname.replace(" (dom)", "")>><<set _posname = _posname.replace(" (sub)", "")>>
<<highlight "narrate-sexact-position-initiate">><<encounternamec _partner>> <<conjname _partner seem>> to be attempting to move you into the <<= setup.sexpositions[_posname].label>> position.<</highlight>>
<<set _attempt.seen to true>>
<<elseif _attempt.denied>>
<<if _attempt.cancelled>>
<<encounternamec _partner>> <span class="unbad"><<conjname _partner seem>> to listen</span> to your request.
<<else>>
<<encounternamec _partner>> <span class="bad"><<conjname _partner 'don\'t'>> seem to care</span> what you want to happen.
<</if>>
<<set _partner.attempted_position to null>>
<<elseif _attempt.resisted>>
<<if _attempt.fight>>
<<if _attempt.cancelled>>
<<encounternamec _partner>> <span class="unbad"><<conjname _partner give>> in after a struggle</span>, but the fight is wearing you out.
<<else>>
<<encounternamec _partner>> <<conjname _partner growl>>, overcoming your struggles and <span class="bad">forcing you</span>.
<</if>>
<<else>>
<<encounternamec _partner>> <<conjname _partner offer>> no resistance to your struggling, <span class="unbad">immediately relenting</span>.
<</if>>
<<set _partner.attempted_position to null>>
<<else>>
<<set _partner.attempted_position to null>>
<</if>>
<</if>>
<<if _partner.is_pee_willing == false>> /* explicit check so this doesn't pass if it's null */
/* stuff here */
<</if>>
<<if _partner.equals($partner1) and $encounter.comment_on_roughness>>
<<set $encounter.comment_on_roughness to false>>
You ask <<po _partner>> to be more
<<if $encounter.roughness_level_requested == -1>>
gentle.
<<else>>
rough.
<</if>>
<<if $encounter.roughness_request_denied>>
<<if $partner1.is_dominant()>>
<<psc _partner>> says, "Sorry, that's one thing I can't do."
<<else>>
<<psc _partner>> says, "Sorry... I don't think I can do that."
<</if>>
<<elseif $encounter.roughness_level_requested == -1>>
<<psc _partner>> says, "Of course."
<<elseif _partner.is_dominant()>>
<<psc _partner>> says, "Absolutely."
<<else>>
<<psc _partner>> says, "I'll do my best."
<</if>>
<</if>>
<<unset _spokeidea>>
<<if _partner.equals($partner1) and $encounter.idea>>
<<if $encounter.requested_idea>>
<<= $encounter.requested_idea[1]>>
<<run delete $encounter.requested_idea>>
<</if>>
<<if $encounter.last_idea_switch is $encounter.rounds>>
<<if !$encounter.pc_idea>>
<<dirtytalkidea>>
<<else>>
<<dirtytalkmyidea>>
<</if>>
<<set _spokeidea to true>>
<</if>>
<</if>>
<<if $pc.attempted_pullaway and _partner.equals($pc.attempted_pullaway.target) and $pc.attempted_pullaway.resisted and !$pc.attempted_pullaway.narrated>>
<<if $pc.attempted_pullaway.prevented>>
<<encounternamec _partner>> resists as you try to pull away, <<highlight bad>>keeping you in place<</highlight>>.
<<else>>
<<encounternamec _partner>> resists as you try to pull away, <<highlight unbad>>but gives in after a struggle<</highlight>>.
<</if>>
The fight is wearing you out.
<<set $pc.attempted_pullaway.narrated to true>>
<</if>>
<<if !_partner.is_pc and !_partner.orgasms and _partner.arousal() gte (_partner.max_arousal() - 180) and !_partner.announced_orgasm>>
<<dirtytalkgonnacum _partner>>
<<set _partner.announced_orgasm to true>>
<</if>>
<</if>>
<<if !$pc.equals(_partner) and !_spokeidea and !_partner.announced_orgasm>>
<<dirtytalk _partner>>
<<dirtytalkplayerskillreaction _partner>>
<<elseif $pc.equals(_partner) and $pc.dirtytalkqueued>>
<<dirtytalkpc $pc>>
<<unset $pc.dirtytalkqueued>>
<</if>>
<</for>>
<br><br>
/* narrate peeing that happened this round */
<<for _partner range $encounter.partners(true)>>
<<if _partner.narrate_resisted_pee>>
<<set _name to $pc.equals(_partner) ? "You" : "<<encountername _partner>>">>
<<set _pp to $pc.equals(_partner) ? "your" : "<<pp _partner>>">>
<<if _partner.narrate_resisted_pee.success>>
<<= _name>> <<conj _partner clench>> <<= _pp>> legs together, and <<highlight unbad>>just <<conj _partner manage>> to hold in <<= _pp>> pee!<</highlight>>
<<else>>
<<= _name>> <<conj _partner clench>> <<= _pp>> legs together, attempting to hold back <<= _pp>> pee... <<highlight bad>> but it's coming out!<</highlight>>
<</if>>
<<run delete _partner.narrate_resisted_pee>>
<</if>>
<</for>>
<<if $encounter.peed and $encounter.peed.length gt 0>>
<<for _i to 0; _i lt $encounter.peed.length; _i++>>
<<set _doer to $encounter.pobj($encounter.peed[_i].subject)>>
<<set _target to $encounter.pobj($encounter.peed[_i].object)>>
<<set _loc to $encounter.peed[_i].location>>
<<if _doer.name_known and !$encounter.anonymous and !_doer.is_anonymous()>><<set _dn to _doer.firstname()>><<else>><<set _dn to setup.a_or_an(_doer.anonymous_name) + " " + _doer.anonymous_name>><</if>>
<<if _target.name_known and !$encounter.anonymous and !_target.is_anonymous()>><<set _tn to _target.firstname()>><<else>><<set _tn to setup.a_or_an(_target.anonymous_name) + " " + _target.anonymous_name>><</if>>
<<if _doer.equals($pc)>>
<<set $encounter.has_peed_on to true>>
<<set _dn to "you">>
<<set _spp to "your">><<set _spp2 to "your">><<set _sps to "you">><<set _spo to "you">>
<<else>>
<<set _spp to _dn + "'s">><<set _spp2 to _doer.pp>><<set _sps to _doer.ps>><<set _spo to _doer.po>>
<</if>>
<<if _target.equals($pc)>>
<<set $encounter.been_peed_on to true>>
<<set _tn to "you">>
<<set _opp to "your">><<set _opp2 to "your">><<set _ops to "you">><<set _opo to "you">>
<<else>>
<<set _opp to _tn + "'s">><<set _opp2 to _target.pp>><<set _ops to _target.ps>><<set _opo to _target.po>>
<</if>>
<<highlight "narrate-sexact-pee">>
<<if _doer.has_part("penis")>>
<<encounternamec _doer>> <<conjname _doer take>> _spp2 cock into _spp2 hand.
<<switch _loc>>
<<case "face">>
<<encounternamec _doer>> <<conjname _doer stare>> down at _tn as _sps <<conj _doer piss>> all over _opp2 face.
<<case "mouth">>
<<encounternamec _doer>> <<conjname _doer stick>> _spp2 dick into _opp mouth and <<conj _doer piss>> straight into _opp2 mouth.
<<case "breasts">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp tits, splashing them with warm golden liquid.
<<case "chest">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp chest, splashing it with warm golden liquid.
<<case "butt">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp ass.
<<case "thigh">>
<<encounternamec _doer>> <<conjname _doer piss>> across _opp thighs.
<<case "stomach">>
<<encounternamec _doer>> <<conjname _doer piss>> over _opp belly.
<<case "back">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp back.
<<case "foot">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp feet.
<<case "crotch">>
<<if _target.has_part("penis")>>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp cock and <<balls _target>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp <<pussy _target>>, splashing _opp2 folds and <<slit _target>> with warm golden liquid.
<</if>>
<<case "penis">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp cock and <<balls _target>>.
<<default>>
<<encounternamec _doer>> <<conjname _doer pee>>, urine arcing out in a golden stream.
<</switch>>
<<else>>
<<switch _loc>>
<<case "face">>
<<encounternamec _doer>> <<conjname _doer stare>> down at _tn as _sps <<conj _doer piss>> all over _opp2 face.
<<case "mouth">>
<<encounternamec _doer>> <<conjname _doer push>> _spp2 <<dpussy _doer>> to _opp mouth and <<conj _doer piss>> straight into _opp2 mouth.
<<case "crotch">>
<<if _target.has_part("penis")>>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp cock and <<balls _target>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp <<pussy _target>>, splashing _opp2 folds and <<slit _target>> with warm golden liquid.
<</if>>
<<case "vagina">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp <<pussy _target>>, splashing _opp2 folds and <<slit _target>> with warm golden liquid.
<<case "penis">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp cock and <<balls _target>>.
<<case "foot">>
<<encounternamec _doer>> <<conjname _doer piss>> all over _opp feet.
<<default>>
<<encounternamec _doer>> <<conjname _doer pee>>, urine splashing everywhere.
<</switch>>
<</if>>
<</highlight>>
<</for>>
<br><br>
<</if>>
/* narrate orgasms that happened this round */
<<for _partner range $encounter.partners(true)>>
<<if _partner.previous_arousal>><<set _partner.previous_arousal to 0>><</if>>
<<if _partner.narrate_resisted_orgasm>>
<<set _name to $pc.equals(_partner) ? "You" : "<<encountername _partner>>">>
<<set _pp to $pc.equals(_partner) ? "your" : "<<pp _partner>>">>
<<if _partner.narrate_resisted_orgasm.success>>
<<= _name>> <<conj _partner tense>> <<= _pp>> muscles, and <<highlight unbad>>just <<conj _partner manage>> to hold back <<= _pp>> orgasm!<</highlight>>
<<else>>
<<= _name>> <<conj _partner tense>> <<= _pp>> muscles, struggling to hold back <<= _pp>> orgasm... <<highlight bad>>but it's too much!<</highlight>>
<</if>>
<<run delete _partner.narrate_resisted_orgasm>>
<</if>>
<<set _partner.previous_arousal to _partner.arousal()>>
<</for>>
<<for _i to 0; _i lt $encounter.orgasms.length; _i++>>
<<set _doer to $encounter.pobj($encounter.orgasms[_i].subject)>>
<<set _target to $encounter.pobj($encounter.orgasms[_i].object)>>
<<set _loc to $encounter.orgasms[_i].location>>
<<if _doer and _target and _loc>>
<<if _doer.name_known and !$encounter.anonymous and !_doer.is_anonymous()>><<set _dn to _doer.firstname()>><<else>><<set _dn to setup.a_or_an(_doer.anonymous_name) + " " + _doer.anonymous_name>><</if>>
<<if _target.name_known and !$encounter.anonymous and !_target.is_anonymous()>><<set _tn to _target.firstname()>><<else>><<set _tn to setup.a_or_an(_target.anonymous_name) + " " + _target.anonymous_name>><</if>>
<<if _doer.equals($pc)>>
<<set _dn to "you">>
<<set _spp to "your">><<set _spp2 to "your">><<set _sps to "you">><<set _spo to "you">>
<<else>>
<<set _spp to _dn + "'s">><<set _spp2 to _doer.pp>><<set _sps to _doer.ps>><<set _spo to _doer.po>>
<</if>>
<<if _target.equals($pc)>>
<<set _tn to "you">>
<<set _opp to "your">><<set _opp2 to "your">><<set _ops to "you">><<set _opo to "you">>
<<else>>
<<set _opp to _tn + "'s">><<set _opp2 to _target.pp>><<set _ops to _target.ps>><<set _opo to _target.po>>
<</if>>
<<else>>
<<if _doer.name_known and !$encounter.anonymous and !_doer.is_anonymous()>><<set _dn to _doer.firstname()>><<else>><<set _dn to setup.a_or_an(_doer.anonymous_name) + " " + _doer.anonymous_name>><</if>>
<<if _doer.equals($pc)>>
<<set _dn to "you">>
<<set _spp to "your">><<set _spp2 to "your">><<set _sps to "you">><<set _spo to "you">>
<<else>>
<<set _spp to _dn + "'s">><<set _spp2 to _doer.pp>><<set _sps to _doer.ps>><<set _spo to _doer.po>>
<<set _opp to "your">><<set _opp2 to "your">><<set _ops to "you">><<set _opo to "you">>
<</if>>
<</if>>
<<highlight "narrate-sexact-cum">>
<<if _doer.has_part("penis")>>
<<if !_doer.is_pc and _doer.cum_request and _doer.cum_request isnot "" and _doer.ignore_cum_request>>
<<encounternamec _doer>> <<conj _doer make>> no sign that _sps <<conj _doer care>> where _ops <<conj _target want>> _spo to cum.
<</if>>
/* check if we need to narrate pulling out */
<<if _target and _doer.are_parts_penetrating("penis", _target, "mouth") and _loc isnot "mouth">>
<<if _doer.forced_cum_location_fought and _doer.forced_cum_location_defied>>
/* target attempted to keep penetrated but failed */
<<encounternamec _doer>> <<conjname _doer pull>> _spp2 cock from _opp mouth even as _ops <<conj _target attempt>> to keep it buried in _opp2 throat.
<<elseif _doer.forced_cum_location_fought>>
/* target attempted to force pullout and succeeded */
<<encounternamec _doer>> <<conjname _doer grip>> _opp head, trying to keep _spp cock in _opp2 throat, but _opp <<conj _target manage>> to pull back.
<<elseif _doer.forced_cum_location_attempted>>
/* target attempted to force pullout and was not defied */
<<cap _tn>> <<conjname _target pull>> _opp2 mouth off of _dn's cock.
<<else>>
<<encounternamec _doer>> quickly <<conjname _doer pull>> _spp2 cock from _opp mouth with a wet pop.
<</if>>
<<set _pullout to true>>
<<elseif _target and _doer.are_parts_penetrating("penis", _target, "vagina") and _loc isnot "vagina">>
<<if _doer.forced_cum_location_fought and _doer.forced_cum_location_defied>>
/* target attempted to keep penetrated but failed */
<<encounternamec _doer>> <<conjname _doer tug>> _spp2 cock from _opp <<dpussy _target>> with a gasp, despite _opp2 efforts to keep _spo buried inside _opo.
<<elseif _doer.forced_cum_location_fought>>
/* target attempted to force pullout and succeeded */
<<encounternamec _doer>> <<conjname _doer grip>> _opp hips, trying to keep _spp2 cock buried in _opp2 <<dpussy _target>>, but _opp <<conj _target overcome>> _spo and <<conj _target pull>> off.
<<elseif _doer.forced_cum_location_attempted>>
/* target attempted to force pullout and was not defied */
<<cap _tn>> quickly <<conjname _target pull>> off of _dn's cock.
<<else>>
<<encounternamec _doer>> quickly <<conjname _doer pull>> out of _opp <<dpussy _target>>.
<</if>>
<<set _pullout to true>>
<<elseif _target and _doer.are_parts_penetrating("penis", _target, "anus") and _loc isnot "anus">>
<<if _doer.forced_cum_location_fought and _doer.forced_cum_location_defied>>
/* target attempted to keep penetrated but failed */
<<encounternamec _doer>> <<conjname _doer tug>> _spp2 cock from _opp ass with a gasp, despite _opp2 efforts to keep _spo buried inside _opo.
<<elseif _doer.forced_cum_location_fought>>
/* target attempted to force pullout and succeeded */
<<encounternamec _doer>> <<conjname _doer grip>> _opp hips, trying to keep _spp cock buried in _opp2 ass, but _opp <<conj _target overcome>> _spo and <<conj _target pull>> off.
<<elseif _doer.forced_cum_location_attempted>>
/* target attempted to force pullout and was not defied */
<<cap _tn>> quickly <<conjname _target pull>> off of _dn's cock.
<<else>>
<<encounternamec _doer>> quickly <<conjname _doer tug>> _spp2 cock out of _opp ass.
<</if>>
<<set _pullout to true>>
<<elseif _target and _doer.are_parts_penetrating("penis", _target, "mouth") and _loc is "mouth" and _doer.forced_cum_location_attempted>>
/* target attempted to force cum location, let's narrate that */
<<if _doer.forced_cum_location_fought and !_doer.forced_cum_location_defied>>
/* target attempted to force pullout but failed */
<<encounternamec _doer>> <<conjname _doer grip>> _opp2 head firmly as _ops <<conj _target attempt>> to pull back.
<<elseif _doer.forced_cum_location_fought>>
/* target attempted to force internal cumshot and succeeded */
<<encounternamec _doer>> <<conjname _doer attempt>> to pull _spp cock back as _tn <<conj _target bury>> it in _opp2 throat.
<<else>>
/* target attempted to force internal cumshot and was not defied */
<<cap _tn>> <<conjname _target bury>> _spp cock in _opp2 throat.
<</if>>
<<elseif _target and _doer.are_parts_penetrating("penis", _target, "vagina") and _loc is "vagina" and _doer.forced_cum_location_attempted>>
/* target attempted to force cum location, let's narrate that */
<<if _doer.forced_cum_location_fought and !_doer.forced_cum_location_defied>>
/* target attempted to force pullout but failed */
<<if _target.has_part("vagina")>>
<<encounternamec _doer>> <<conjname _doer grip>> _opp2 hips firmly, trying to push _ops away at the last moment, but to no avail.
<<else>>
<<encounternamec _doer>> <<conjname _doer grip>> _opp2 hips firmly as _ops <<conj _target attempt>> to pull off, driving _spp2 cock hard into _opp2 <<dpussy _target>>.
<</if>>
<<elseif _doer.forced_cum_location_fought>>
/* target attempted to force internal cumshot and succeeded */
<<encounternamec _doer>> <<conjname _doer attempt>> to pull out as _tn <<conj _target drive>> _opp2 hips into _spo, burying _spp2 cock inside _opp2 <<dpussy _target>>.
<<else>>
/* target attempted to force internal cumshot and was not defied */
<<cap _tn>> <<conjname _target drive>> _opp2 hips into _spo, burying _spp2 cock inside _opp2 <<dpussy _target>>.
<</if>>
<<elseif _target and _doer.are_parts_penetrating("penis", _target, "anus") and _loc is "anus" and _doer.forced_cum_location_attempted>>
/* target attempted to force cum location, let's narrate that */
<<if _doer.forced_cum_location_fought and !_doer.forced_cum_location_defied>>
/* target attempted to force pullout but failed */
<<encounternamec _doer>> <<conjname _doer grip>> _opp2 hips firmly as _ops <<conj _target attempt>> to pull off, driving _spp2 cock hard into _opp2 ass.
<<elseif _doer.forced_cum_location_fought>>
/* target attempted to force internal cumshot and succeeded */
<<encounternamec _doer>> <<conjname _doer attempt>> to pull out as _tn <<conj _target drive>> _opp2 hips into _spo, burying _spp2 cock inside _opp2 ass.
<<else>>
/* target attempted to force internal cumshot and was not defied */
<<cap _tn>> <<conjname _target drive>> _opp2 hips into _spo, burying _spp2 cock inside _opp2 ass.
<</if>>
<</if>>
<<switch _loc>>
<<case "face">>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> as _spp2 cock twitches, then <<conj _doer splatter>> _opp face with ropes of <<cum _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer cum>> on _opp face, streaking _opp2 cheek and forehead with ropes of <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer press>> the head of _spp2 cock to _opp cheek and <<conj _doer 'let'>> spurts of <<cum _doer>> surge onto _opp2 face.
<</switch>>
<<set _pullout to true>>
<<case "mouth">>
<<if _doer.attempt_pullout>>
<<if _doer.is_pc>>
Even as you try to pull out, <<highlight bad>>your cock twitches between _opp2 lips<</highlight>> and suddenly it's already too late.
<<else>>
<<encounternamec _doer>> <<conjname _doer seem>> to attempt to pull out, then _spp2 cock twitches between _opp lips.
<</if>>
<</if>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> and <<conj _doer ejaculate>> in _opp mouth, splattering _opp2 tongue with <<cum _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer push>> _spp2 cock into _opp mouth as _sps <<conj _doer pump>> out ropes of <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer groan>> and <<conj _doer flood>> _opp mouth with <<cum _doer>>.
<</switch>>
<<if !_target.is_pc>><<spitorswallow _target>><</if>>
<<case "breasts">>
<<encounternamec _doer>> <<conjname _doer splatter>> _opp <<breasts _target>> with ropes of <<cum _doer>>, thick globs clinging to _opp2 <<nipples _target>>.
<<set _pullout to true>>
<<case "chest">>
<<encounternamec _doer>> <<conjname _doer splatter>> _opp chest with ropes of <<cum _doer>>.
<<set _pullout to true>>
<<case "butt">>
<<encounternamec _doer>> <<conjname _doer splatter>> _opp <<ass _target>> with ropes of <<cum _doer>>.
<<set _pullout to true>>
<<case "thigh">>
<<cap _spp>> <<cock _doer>> spasms and shoots ropes of <<cum _doer>> onto _opp thighs.
<<set _pullout to true>>
<<case "stomach">>
<<encounternamec _doer>> <<conjname _doer splatter>> _opp belly with ropes of <<cum _doer>>.
<<set _pullout to true>>
<<case "back">>
<<encounternamec _doer>> <<conjname _doer shoot>> ropes of <<cum _doer>> along _opp back.
<<set _pullout to true>>
<<case "crotch">>
<<if _target.has_part("penis")>>
<<encounternamec _doer>> lewdly <<conjname _doer spurt>> ropes of <<cum _doer>> over _opp cock and <<balls _target>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer spurt>> ropes of <<cum _doer>> all over _opp <<pussy _target>>, splattering _opp2 folds and <<slit _target>>.
<</if>>
<<set _pullout to true>>
<<case "vagina">>
<<if _doer.attempt_pullout>>
<<if _doer.is_pc>>
You try to pull out, <<highlight bad>>_opp2 <<dpussy _target>> just feels too good<</highlight>> and your orgasm is upon you before you know it.
<<elseif !_doer.forced_cum_location_attempted>>
<<encounternamec _doer>> <<conjname _doer seem>> to attempt to pull out, but _opp <<dpussy _target>> must feel too good and _spp2 orgasm hits _spo suddenly.
<</if>>
<</if>>
<<if _doer.condom>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> and <<conj _doer push>> _spp2 cock deeper into _opp <<pussy _target>> as _sps <<conj _doer spurt>> <<cum _doer>> into _spp2 condom.
<<case 1>><<encounternamec _doer>> <<conjname _doer shove>> _spp2 cock into _opp <<pussy _target>> one last time before pumping _spp2 condom full of <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer thrust>> deep into _opp <<pussy _target>> as _spp2 cock spasms, then <<conj _doer pump>> _spp2 condom full of <<cum _doer>>.
<</switch>>
<<if _doer.condom_broke>>
Something doesn't feel right... Shit, <<highlight bad>>the condom broke!<</highlight>>
<<run delete _doer.condom>>
<<run delete _doer.condom_broke>>
<</if>>
<<elseif _doer.forced_cum_location_attempted>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer gasp>> as cock spasms and <<conj _doer pump>> <<cum _doer>> deep inside _opo.
<<case 1>><<encounternamec _doer>> <<conjname _doer groan>> as _spp2 hips arch uncontrollably, pumping _opp2 <<slit _target>> full of <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer buck>> as _spp2 cock spasms, then <<conj _doer pump>> <<cum _doer>> deep inside _opo.
<</switch>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer groan>> and <<conj _doer push>> _spp2 cock deeper into _opp <<pussy _target>> as _sps <<conj _doer spurt>> <<cum _doer>> deep inside _opo.
<<case 1>><<encounternamec _doer>> <<conjname _doer shove>> _spp2 cock into _opp <<pussy _target>> one last time before pumping _opp2 <<slit _target>> full of <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer thrust>> deep into _opp <<pussy _target>> as _spp2 cock spasms, then <<conj _doer pump>> <<cum _doer>> deep inside _opo.
<</switch>>
<</if>>
<<case "anus">>
<<if _doer.attempt_pullout>>
<<if _doer.is_pc>>
You try to pull out, <<highlight bad>>_opp2 ass just feels too good<</highlight>> and your orgasm is upon you before you know it.
<<else>>
<<encounternamec _doer>> <<conjname _doer seem>> to attempt to pull out, but _opp ass must feel too good and _spp2 orgasm hits _spo suddenly.
<</if>>
<</if>>
<<if _doer.condom>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> _spp2 cock deep into _opp <<ass _target>> and <<conj _doer pump>> _spp2 condom full of <<cum _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer bury>> _spp2 cock in _opp <<anus _target>> and <<conj _doer flood>> _spp2 condom with <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer thrust>> deep into _opp <<ass _target>> as _spp2 cock spasms, then <<conj _doer fill>> _spp2 condom with <<cum _doer>>.
<</switch>>
<<if _doer.condom_broke>>
Something doesn't feel right... Shit, <<highlight bad>>the condom broke!<</highlight>>
<<run delete _doer.condom>>
<<run delete _doer.condom_broke>>
<</if>>
<<else>>
<<switch setup.rir(0, 3)>>
<<case 0>><<encounternamec _doer>> <<conjname _doer push>> _spp2 cock deep into _opp <<ass _target>> and <<conj _doer pump>> _opo full of <<cum _doer>>.
<<case 1>><<encounternamec _doer>> <<conjname _doer bury>> _spp2 cock in _opp <<anus _target>> and <<conj _doer flood>> _opo with <<cum _doer>>.
<<default>><<encounternamec _doer>> <<conjname _doer thrust>> deep into _opp <<ass _target>> as _spp2 cock spasms, then <<conj _doer fill>> _opo with <<cum _doer>>.
<</switch>>
<</if>>
<<case "penis">>
<<encounternamec _doer>> lewdly <<conjname _doer spurt>> ropes of <<cum _doer>> over _opp <<cock _target>> and <<balls _target>>.
<<case "foot">>
<<encounternamec _doer>> <<conjname _doer splatter>> _opp feet with ropes of <<cum _doer>>.
<<set _pullout to true>>
<<default>>
<<encounternamec _doer>> <<conjname _doer groan>> as _spp2 cock spurts ropes of <<cum _doer>>.
<</switch>>
<<if _pullout>>
<<run _doer.end_act_occupying_part("penis")>>
<</if>>
<<else>>
<<switch _loc>>
<<case "face">>
<<if _doer.has_inclination("Squirter")>>
<<encounternamec _doer>> <<conjname _doer cry>> out as _spp2 <<pussy _doer>> spasms, and several distinct streams of <<cum _doer>> squirt onto _opp face as _sps <<conj _doer cum>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer cry>> out as _spp2 <<pussy _doer>> spasms, and _spp2 <<cum _doer>> trickles onto _opp face as _sps <<conj _doer cum>>.
<</if>>
<<case "mouth">>
<<if _doer.has_inclination("Squirter")>>
<<encounternamec _doer>> <<conjname _doer cry>> out as _spp2 <<pussy _doer>> spasms, and spurts of _spp2 <<cum _doer>> spray all over _opp face and into _opp2 mouth as _sps <<conj _doer cum>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer cry>> out as _spp2 <<pussy _doer>> spasms, and _spp2 <<cum _doer>> trickles over _opp face and into _opp2 mouth as _sps <<conj _doer cum>>.
<</if>>
<<case "crotch">>
<<if _doer.has_inclination("Squirter")>>
<<encounternamec _doer>> <<conjname _doer moan>> as _sps <<conj _doer cum>>, _spp2 <<pussy _doer>> squirting streams of <<cum _doer>> all over _opp crotch.
<<else>>
<<encounternamec _doer>> <<conjname _doer moan>> as _sps <<conj _doer cum>>, _spp2 <<pussy _doer>> spilling <<cum _doer>> over _opp crotch.
<</if>>
<<case "vagina">>
<<if _doer.has_inclination("Squirter")>>
<<encounternamec _doer>> <<conjname _doer moan>> as _sps <<conj _doer cum>>, _spp2 <<pussy _doer>> squirting streams of <<cum _doer>> all over _opp <<pussy _target>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer moan>> as _sps <<conj _doer cum>>, _spp2 <<pussy _doer>> spilling <<cum _doer>> over _opp <<pussy _target>>.
<</if>>
<<case "penis">>
<<switch setup.rir(0, 3)>>
<<case 0>><<cap _spp>> <<pussy _doer>> spasms around _opp <<cock _target>>, coating it in _spp2 <<cum _doer>> as _sps <<conj _doer cum>> hard.
<<case 1>><<encounternamec _doer>> <<conjname _doer pump>> _spp2 hips in helpless instinct, moaning as _sps <<conj _doer cum>> on _opp <<cock _target>>, covering it with _spp2 <<cum _doer>>.
<<default>><<cap _spp>> body shudders as _sps <<conj _doer cum>> on _opp <<cock _target>>, panting helplessly as _sps <<conj _doer coat>> the shaft with _spp2 <<cum _doer>>.
<</switch>>
<<if _doer.has_inclination("Squirter")>>
Streams of liquid squirt out with every convulsion of _spp2 body.
<</if>>
<<run _target.add_arousal(100)>>
<<default>>
<<if _doer.has_inclination("Squirter")>>
<<encounternamec _doer>> <<conjname _doer moan>> and <<conj _doer cum>> hard, streams of <<cum _doer>> squirting from _spp2 <<dpussy _doer>>.
<<else>>
<<encounternamec _doer>> <<conjname _doer moan>> and <<conj _doer cum>> hard, <<cum _doer>> trickling from _spp2 <<slit _doer>>.
<</if>>
<</switch>>
<</if>>
<<if $pc.equals(_doer)>>
<<if !$encounter.consensual>>
You burn with humiliation at your unwanted orgasm. <<dalterneed Humiliation 100 true>>
<<else>>
<<dirtytalkcumrequestresult _target>>
<</if>>
<</if>>
<</highlight>>
<</for>>
<</if>>
/* end-of-round maintenance type stuff that needs to happen */
<<set $encounter.clothing_changes to []>>
<<set $encounter.orgasms to []>>
<<set $encounter.peed to []>>
<<run $encounter.calc_fleeting_stats()>>
<<run $encounter.clear_nonongoing_acts()>>/* see if the PC attempted a position change that was resisted */
<<unset $lastencountername>>
<<if $pc.attempted_position && !$pc.attempted_position.seen and $pc.attempted_position.resisted>>
<<set _target to $pc.attempted_position.target>>
<<if $pc.attempted_position.fight>>
<<set $encounter.times_resisted++>>
You attempt to move <<if $encounter.anonymous>><<anonname _target aoran>><<else>><<anonorfirstname _target>><</if>> into the <<= setup.sexpositions[$pc.attempted_position.position].label>> position and <<ps>> <<conj resist>>,
<<if $pc.attempted_position.cancelled>>
<<highlight bad>>forcing you to eventually relent<</highlight>>.
<<else>>
<<highlight unbad>>but you overcome <<po>><</highlight>>.
<</if>>
<</if>>
<<set $pc.attempted_position.seen to true>>
<</if>>
<<for _i to 0; _i lt $encounter.partners().length; _i++>>
<<set _partner to $encounter.partners()[_i]>>
<<if $pc.name isnot _partner.name>>
<<set _pos to $pc.position_with(_partner)>>
<<set _role to $pc.role_with(_partner)>>
<<set _furniture to $pc.on_furniture(_partner)>>
<<if _partner.name_known and !$encounter.anonymous>><<set _pn to _partner.firstname()>><<else>><<set _pn to setup.a_or_an(_partner.anonymous_name) + " " + _partner.anonymous_name>><</if>>
<<if _partner.position_new>>
/* the position has just been selected -- describe transitioning into it */
<<set _prevpos to $pc.previous_position_with(_partner)>>
<<set _prevrole to $pc.previous_role_with(_partner)>>
<<highlight "narrate-sexact-position-change">>
<<if _pos is "Standing">>
<<if _prevpos is "Standing From Behind">>
You and <<encountername _partner>> turn to face each other.
<<elseif _prevpos is "Kneeling">>
<<if _prevrole is "top">>
<<if $pc.position_initiator>>
You pull <<encounternamepo _partner>> to <<= _partner.pp>> feet.
<<else>>
<<encounternamec _partner>> rises to <<= _partner.pp>> feet.
<</if>>
<<else>>
<<if $pc.position_initiator>>
You stand up.
<<else>>
<<encounternamec _partner>> pulls you up to your feet.
<</if>>
<</if>>
<<elseif $pc.position_initiator>>
You stand and pull <<encounternamepo _partner>> up with you.
<<else>>
<<encounternamec _partner>> stands and pulls you up with <<= _partner.po>>.
<</if>>
<<elseif _pos is "Standing From Behind">>
<<if _prevpos is "Standing">>
<<if _role is "bottom">>
<<if $pc.position_initiator>>
You turn to face away from <<encounternamepo _partner>>.
<<else>>
<<encounternamec _partner>> grasps you by the hips and turns you around.
<</if>>
<<else>>
<<if $pc.position_initiator>>
You grasp <<encounternamepo _partner>> by the hips and turn <<= _partner.po>> around.
<<else>>
<<encounternamec _partner>> turns to face away from you.
<</if>>
<</if>>
<<elseif _prevpos is "Kneeling">>
<<if _prevrole is "top" and $pc.position_initiator>>
<<if _role is "top">>
You pull <<encounternamepo _partner>> to <<= _partner.pp>> feet, then grasp <<= _partner.po>> by the hips and turn <<= _partner.po>> to face away from you.
<<else>>
You pull <<encounternamepo _partner>> to <<= _partner.pp>> feet, then turn to face away from <<= _partner.po>>.
<</if>>
<<elseif _prevrole is "top">>
<<if _role is "top">>
<<encounternamec _partner>> rises to <<= _partner.pp>> feet, then turns to face away from you.
<<else>>
<<encounternamec _partner>> rises to <<= _partner.pp>> feet, then grasps you by the hips and turns you to face away from <<= _partner.po>>.
<</if>>
<<elseif _prevrole is "bottom" and $pc.position_initiator>>
<<if _role is "top">>
You rise to your feet, then grasp <<= _partner.po>> by the hips and turn <<= _partner.po>> to face away from you.
<<else>>
You pull to your feet, then turn to face away from <<= _partner.po>>.
<</if>>
<<elseif _prevrole is "bottom">>
<<if _role is "top">>
<<encounternamec _partner>> pulls you to your feet, then turns to face away from you.
<<else>>
<<encounternamec _partner>> pulls you to your feet, then grasps you by the hips and turns you to face away from <<= _partner.po>>.
<</if>>
<</if>>
<<elseif $pc.position_initiator>>
<<if _role is "top">>
You stand, then grasp <<encounternamepo _partner>> by the hips and turn <<= _partner.po>> to face away from you.
<<else>>
You stand, then turn and face away from <<encounternamepo _partner>>.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> stands, then turns to face away from you.
<<else>>
<<encounternamec _partner>> stands, then grasps you by the hips and turns you to face away from <<= _partner.po>>.
<</if>>
<</if>>
<<elseif _pos is "Waiting">>
<<if $pc.position_initiator>>
You move away to one side, continuing to watch the action.
<<else>>
<<encounternamec _partner>> eases away to one side, continuing to watch the action.
<</if>>
<<elseif _pos is "Missionary">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You climb on top of <<encounternamepo _partner>> as <<= _partner.ps>> lies on <<= _partner.pp>> back<<furniturelabel _furniture>>.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> up on top of you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls you up on top of <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and climbs on top of you.
<<if setup.furniture_has_flag(_furniture, "rough")>>
You gasp as your back scrapes against the rough surface.
<<dalterneed Pain 25 true>>
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Laid Across On Back">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and step between <<pp _partner>> thighs.
<<else>>
You lie back<<furniturelabel _furniture>> and <<encountername _partner>> steps between your thighs.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and you step between <<pp _partner>> thighs.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and steps between your thighs.
<<if setup.furniture_has_flag(_furniture, "rough")>>
You gasp as your back scrapes against the rough surface.
<<dalterneed Pain 25 true>>
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Laid Across On Stomach">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push forward <<encounternamepo _partner>> onto <<pp _partner>> chest<<furniturelabel _furniture>> and step up behind <<po _partner>>.
<<else>>
You lie on your stomach<<furniturelabel _furniture>> and <<encountername _partner>> steps up behind you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies on <<pp _partner>> stomach<<furniturelabel _furniture>> and you step up behind <<po _partner>>.
<<else>>
<<encounternamec _partner>> pushes you onto your stomach<<furniturelabel _furniture>> and steps up behind you.
<<if setup.furniture_has_flag(_furniture, "rough")>>
<<if $pc.has_breasts()>>
You gasp as your breasts scrape against the rough surface.
<<dalterneed Pain 50 true>>
<<else>>
You gasp as your chest scrapes against the rough surface.
<<dalterneed Pain 25 true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Laid Across Oral Service">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and step up toward <<pp _partner>> head.
<<else>>
You lie back<<furniturelabel _furniture>> and <<encountername _partner>> steps up towards your head.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and you step up toward <<pp _partner>> head.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and steps towards your head.
<</if>>
<</if>>
<<elseif _pos is "Mounted On X-Cross">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and step up to <<po _partner>>.
<<else>>
You lie back<<furniturelabel _furniture>> and <<encountername _partner>> steps up to you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> leans back<<furniturelabel _furniture>> and you step up to <<po _partner>>.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and steps up to you.
<</if>>
<</if>>
<<elseif _pos is "Mounted On X-Cross Oral Service">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and kneel down.
<<else>>
You lie back<<furniturelabel _furniture>> and <<encountername _partner>> kneels down.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> leans back<<furniturelabel _furniture>> and you kneel down.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and kneels down.
<</if>>
<</if>>
<<elseif _pos is "From Behind">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> onto all fours<<furniturelabel _furniture>> and kneel behind <<= _partner.po>>.
<<else>>
You get down on all fours<<furniturelabel _furniture>> as <<encountername _partner>> kneels behind you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> gets down on all fours<<furniturelabel _furniture>> as you kneel behind <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> pushes you down on all fours<<furniturelabel _furniture>> and kneels behind you.
<</if>>
<</if>>
<<elseif _pos is "Doggy">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> onto all fours<<furniturelabel _furniture>> and kneel behind <<= _partner.po>>.
<<else>>
You get down on all fours<<furniturelabel _furniture>> as <<encountername _partner>> kneels behind you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> gets down on all fours<<furniturelabel _furniture>> as you kneel behind <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> pushes you down on all fours<<furniturelabel _furniture>> and kneels behind you.
<<if setup.furniture_has_flag(_furniture, "rough")>>
You gasp as your knees hit the rough surface.
<<dalterneed Pain 25 true>>
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Bent Over">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You bend <<encounternamepo _partner>> over<<furniturelabel _furniture false>> and step up behind <<= _partner.po>>.
<<else>>
You bend over<<furniturelabel _furniture false>> as <<encountername _partner>> steps up behind you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> bends over<<furniturelabel _furniture>> as you step up behind <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> bends you over<<furniturelabel _furniture>> and steps up behind you.
<</if>>
<</if>>
<<elseif _pos is "Against Wall">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>>.
<<else>>
You lean back<<furniturelabel _furniture>>.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>>.
<<if setup.furniture_has_flag(_furniture, "rough")>>
You gasp as your back hits the rough wall.
<<dalterneed Pain 25 true>>
<</if>>
<<else>>
<<encounternamec _partner>> leans back<<furniturelabel _furniture>>.
<</if>>
<</if>>
<<elseif _pos is "Against Wall From Behind">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> forward<<furniturelabel _furniture>>.
<<else>>
You brace yourself<<furniturelabel _furniture>>.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> pushes you forward<<furniturelabel _furniture>>.
<<if setup.furniture_has_flag(_furniture, "rough")>>
<<if $pc.has_breasts()>>
You gasp as your tits get pressed against the rough wall.
<<dalterneed Pain 50 true>>
<<else>>
You gasp as your chest brushes against the rough wall.
<<dalterneed Pain 50 true>>
<</if>>
<</if>>
<<else>>
<<encounternamec _partner>> braces <<pr _partner>><<furniturelabel _furniture>>.
<</if>>
<</if>>
<<elseif _pos is "Mating Press">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You climb on top of <<encounternamepo _partner>><<furniturelabel _furniture>> and push <<= _partner.pp>> legs back towards <<= _partner.pp>> head.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> up on top of you, then grab your own legs to pull them towards your head.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls you up on top of <<= _partner.po>>, then grabs <<= _partner.pp>> own legs and pulls them towards <<= _partner.pp>> head.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and climbs on top of you, pushing your legs back towards your head.
<</if>>
<</if>>
<<elseif _pos is "Prone Bone">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You roll <<encounternamepo _partner>> onto <<= _partner.pp>> stomach<<furniturelabel _furniture>> and mount <<= _partner.po>>.
<<else>>
You roll onto your stomach<<furniturelabel _furniture>> as <<encountername _partner>> mounts you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> rolls onto <<= _partner.pp>> stomach<<furniturelabel _furniture>> as you mount <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> rolls you over onto your stomach<<furniturelabel _furniture>> and mounts you.
<</if>>
<</if>>
<<elseif _pos is "Spooning">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You roll <<encounternamepo _partner>> onto <<pp _partner>> side and nestle in behind <<= _partner.po>><<furniturelabel _furniture>>.
<<else>>
You roll onto your side as <<encountername _partner>> nestles in behind you<<furniturelabel _furniture>>.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> rolls onto <<pp _partner>> side as you nestle in behind <<= _partner.po>><<furniturelabel _furniture>>.
<<else>>
<<encounternamec _partner>> rolls you onto your side and nestles behind you<<furniturelabel _furniture>>.
<</if>>
<</if>>
<<elseif _pos is "Double Decker">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You wriggle in underneath <<encounternamepp _partner>> back<<furniturelabel _furniture>>.
<<else>>
You let <<encounternamepo _partner>> wriggle in underneath your back<<furniturelabel _furniture>>.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lets you wriggle in under <<pp _partner>> back<<furniturelabel _furniture>>.
<<else>>
<<encounternamec _partner>> wriggles in underneath your back, stretched out beneath you<<furniturelabel _furniture>>.
<</if>>
<</if>>
<<elseif _pos is "Kneeling Between Thighs">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You kneel down between <<encounternamepp _partner>> parted thighs.
<<else>>
You part your thighs as <<encountername _partner>> kneels down between them.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> parts <<pp _partner>> thighs as you kneel down between them.
<<else>>
<<encounternamec _partner>> kneels down between your parted thighs.
<</if>>
<</if>>
<<elseif _pos is "Perched">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You perch <<encounternamepo _partner>><<furniturelabel _furniture>> and step between <<pp _partner>> parted thighs.
<<else>>
You perch<<furniturelabel _furniture>> and <<encountername _partner>> steps in between your thighs.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> perches<<furniturelabel _furniture>> as you step in between <<pp _partner>> thighs.
<<else>>
<<encounternamec _partner>> perches you<<furniturelabel _furniture>> and steps in between your thighs.
<</if>>
<</if>>
<<elseif _pos is "Perched Oral Service">>
<<if $pc.position_initiator>>
<<if _role is "bottom">>
You perch <<encounternamepo _partner>><<furniturelabel _furniture>> and kneel down between <<pp _partner>> parted thighs.
<<else>>
You perch<<furniturelabel _furniture>> and <<encountername _partner>> kneels down between your thighs.
<</if>>
<<else>>
<<if _role is "bottom">>
<<encounternamec _partner>> perches<<furniturelabel _furniture>> as you kneel down between <<pp _partner>> thighs.
<<else>>
<<encounternamec _partner>> perches you<<furniturelabel _furniture>> and kneels down between your thighs.
<</if>>
<</if>>
<<elseif _pos is "Underneath Oral Service">>
<<if $pc.position_initiator>>
<<if _role is "bottom">>
You sit <<encounternamepo _partner>> at<<furniturelabel _furniture false>>, then crawl underneath it and kneel between <<pp _partner>> parted thighs.
<<else>>
You sit at<<furniturelabel _furniture false>>, then <<encountername _partner>> crawls underneath it and kneels between your thighs.
<</if>>
<<else>>
<<if _role is "bottom">>
<<encounternamec _partner>> sits at<<furniturelabel _furniture false>>, then you crawl underneath it and kneel between <<pp _partner>> thighs.
<<else>>
<<encounternamec _partner>> sits you down at<<furniturelabel _furniture false>>, then crawls underneath it and kneels between your thighs.
<</if>>
<</if>>
<<elseif _pos is "Cowgirl">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and mount <<= _partner.po>>.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> on top of you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls you on top of <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and mounts you.
<</if>>
<</if>>
<<elseif _pos is "Reverse Cowgirl">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and mount <<= _partner.po>>, facing away from <<= _partner.po>>.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> on top of you, facing <<= _partner.po>> away from you.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls you on top of <<= _partner.po>>, facing away from <<= _partner.po>>.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and mounts you, facing away from you.
<</if>>
<</if>>
<<elseif _pos is "Astride Lap">>
<<if $pc.position_initiator>>
<<if _role is "top">>
<<if _partner.has_part("penis")>>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and sit on <<= _partner.po>>, straddling <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and sit on <<= _partner.po>>, straddling <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<<else>>
<<if $pc.has_part("penis")>>
You sit down<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> into your lap to straddle your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You sit down<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> into your lap to straddle your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<</if>>
<<else>>
<<if _role is "top">>
<<if _partner.has_part("penis")>>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and sit on <<= _partner.po>>, straddling <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and sit on <<= _partner.po>>, straddling <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<<else>>
<<if $pc.has_part("penis")>>
You sit down<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> into your lap to straddle your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You sit down<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> into your lap to straddle your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Riding Face">>
<<if $pc.position_initiator>>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
You push your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> down onto <<encounternamepp _partner>> face.
<<else>>
You push your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> down onto <<encounternamepp _partner>> face.
<</if>>
<<else>>
<<if _partner.has_part("penis")>>
You pull <<encounternamepp _partner>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> down onto your face.
<<else>>
You pull <<encounternamepp _partner>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> down onto your face.
<</if>>
<</if>>
<<else>>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
<<encounternamec _partner>> pulls your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> down onto <<= _partner.pp>> face.
<<else>>
<<encounternamec _partner>> pulls your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> down onto <<= _partner.pp>> face.
<</if>>
<<else>>
<<if _partner.has_part("penis")>>
<<encounternamec _partner>> pushes <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> down onto your face.
<<else>>
<<encounternamec _partner>> pushes <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> down onto your face.
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Kneeling By Face">>
<<if $pc.position_initiator>>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
You kneel down, your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in <<encounternamepp _partner>> face.
<<else>>
You kneel down, your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in <<encounternamepp _partner>> face.
<</if>>
<<else>>
<<if _partner.has_part("penis")>>
You pull <<encounternamepo _partner>> down so that <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> is in your face.
<<else>>
You pull <<encounternamepo _partner>> down so that <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> is in your face.
<</if>>
<</if>>
<<else>>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
<<encounternamec _partner>> pulls you down so that your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> is in <<= _partner.pp>> face.
<<else>>
<<encounternamec _partner>> pulls you down so that <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> is in <<= _partner.pp>> face.
<</if>>
<<else>>
<<if _partner.has_part("penis")>>
<<encounternamec _partner>> kneels down beside your head, <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in your face.
<<else>>
<<encounternamec _partner>> kneels down beside your head, <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in your face.
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Kneeling">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> down to <<= _partner.pp>> knees in front of you.
<<else>>
You sink down to your knees in front of <<encounternamepo _partner>>.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> sinks down to <<= _partner.pp>> knees in front of you.
<<else>>
<<encounternamec _partner>> pushes you down to your knees in front of <<= _partner.po>>.
<<if setup.furniture_has_flag(_furniture, "rough")>>
You gasp as your knees hit the rough surface.
<<dalterneed Pain 25 true>>
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Squatting Before">>
<<if $pc.position_initiator>>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
You squat down in front of <<encountername _partner>>, your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in <<pp _partner>> face.
<<else>>
You squat down in front of <<encountername _partner>>, your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in <<pp _partner>> face.
<</if>>
<<else>>
<<if _partner.has_part("penis")>>
You pull <<encounternamepo _partner>> down so that <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> is in your face.
<<else>>
You pull <<encounternamepo _partner>> down so that <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> is in your face.
<</if>>
<</if>>
<<else>>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
<<encounternamec _partner>> pulls you down so that your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> is in <<= _partner.pp>> face.
<<else>>
<<encounternamec _partner>> pulls you down so that <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> is in <<= _partner.pp>> face.
<</if>>
<<else>>
<<if _partner.has_part("penis")>>
<<encounternamec _partner>> squats down in front of you, <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in your face.
<<else>>
<<encounternamec _partner>> squats down in front of you, <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in your face.
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Kneeling Over">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You lie back and drag <<encounternamepo _partner>> over to kneel next to you.
<<else>>
You kneel down next to <<encounternamepo _partner>> as <<= _partner.ps>> stretches out on <<= _partner.pp>> back.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> eases you onto your back and kneels down next to you.
<<else>>
<<encounternamec _partner>> stretches out on <<= _partner.pp>> back and pulls you over to kneel next to <<= _partner.po>>.
<</if>>
<</if>>
<<elseif _pos is "Sixty-Nine">>
<<if $pc.position_initiator>>
You pull <<encounternamepo _partner>> over to
<<else>>
<<encounternamec _partner>> pulls you over to
<</if>>
<<if _role is "top">>
lie on top of <<= _partner.po>><<furniturelabel _furniture>>
<<else>>
lie on top of you<<furniturelabel _furniture>>
<</if>>
<<if _partner.has_part("vagina")>>
with <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in your face and
<<else>>
with <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in your face and
<</if>>
<<if $pc.has_part("vagina")>>
your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in <<= _partner.pp>> face.
<<else>>
your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in <<= _partner.pp>> face.
<</if>>
<<elseif _pos is "Straddling Chest">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and straddle <<= _partner.pp>> chest.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepo _partner>> over to straddle your chest.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls you over to straddle <<= _partner.pp>> chest.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and straddles your chest.
<</if>>
<</if>>
<<elseif _pos is "Oral Service">>
<<if $pc.position_initiator>>
<<if _role is "bottom">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and get your face between <<= _partner.pp>> thighs.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepp _partner>> face between your thighs.
<</if>>
<<else>>
<<if _role is "bottom">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls your face between <<= _partner.pp>> thighs.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and gets <<pp _partner>> face between your thighs.
<</if>>
<</if>>
<<elseif _pos is "Prone Oral Service">>
<<if $pc.position_initiator>>
<<if _role is "top">>
You push <<encounternamepo _partner>> back<<furniturelabel _furniture>> and get your face between <<= _partner.pp>> thighs.
<<else>>
You lie back<<furniturelabel _furniture>> and pull <<encounternamepp _partner>> face between your thighs.
<</if>>
<<else>>
<<if _role is "top">>
<<encounternamec _partner>> lies back<<furniturelabel _furniture>> and pulls your face between <<= _partner.pp>> thighs.
<<else>>
<<encounternamec _partner>> pushes you back<<furniturelabel _furniture>> and gets <<pp _partner>> face between your thighs.
<</if>>
<</if>>
<</if>>
<</highlight>>
<<else>>\
/* position is ongoing, this is basically just a reminder to the player */
<<highlight "narrate-sexact-position">>
<<if _pos is "Standing">>
<<encounternamec _partner>> is standing in front of you.
<<elseif _pos is "Standing From Behind">>
<<if _role is "top">>
You are standing behind <<encounternamepo _partner>>.
<<else>>
<<encounternamec _partner>> is standing behind you.
<</if>>
<<elseif _pos is "Missionary">>
<<if _role is "top">>
You are lying on top of <<encounternamepo _partner>><<furniturelabel _furniture>>.
<<else>>
<<encounternamec _partner>> is lying on top of you<<furniturelabel _furniture>>.
<</if>>
<<elseif _pos is "From Behind">>
<<if _role is "top">>
You're behind <<encounternamepo _partner>>, who is on all fours<<furniturelabel _furniture>>.
<<else>>
You're on all fours with <<encounternamepo _partner>> behind you<<furniturelabel _furniture>>.
<</if>>
<<elseif _pos is "Doggy">>
<<if _role is "top">>
You're behind <<encounternamepo _partner>>, who is on all fours<<furniturelabel _furniture>>.
<<else>>
You're on all fours<<furniturelabel _furniture>> with <<encounternamepo _partner>> behind you.
<</if>>
<<elseif _pos is "Bent Over">>
<<if _role is "top">>
You're behind <<encounternamepo _partner>>, who is bent over<<furniturelabel _furniture false>>.
<<else>>
You're bent over<<furniturelabel _furniture false>> with <<encounternamepo _partner>> behind you.
<</if>>
<<elseif _pos is "Against Wall">>
<<if _role is "top">>
You're standing before <<encounternamepo _partner>>, who is pushed back<<furniturelabel _furniture>>.
<<else>>
You're pushed back<<furniturelabel _furniture>> with <<encounternamepo _partner>> before you.
<</if>>
<<elseif _pos is "Against Wall From Behind">>
<<if _role is "top">>
You're standing behind <<encounternamepo _partner>>, who is braced<<furniturelabel _furniture>>.
<<else>>
You're braced<<furniturelabel _furniture>> with <<encounternamepo _partner>> behind you.
<</if>>
<<elseif _pos is "Mating Press">>
<<if _role is "top">>
You're on top of <<encounternamepo _partner>><<furniturelabel _furniture>>, <<= _partner.pp>> legs pushed back towards <<= _partner.pp>> head.
<<else>>
You're on your back<<furniturelabel _furniture>> with <<encounternamepo _partner>> on top of you, your legs pushed back towards your head.
<</if>>
<<elseif _pos is "Prone Bone">>
<<if _role is "top">>
You're on top of <<encounternamepo _partner>><<furniturelabel _furniture>>, who is lying on <<= _partner.pp>> stomach as you mount <<= _partner.po>>.
<<else>>
You're lying flat on your stomach<<furniturelabel _furniture>> as <<encountername _partner>> mounts you.
<</if>>
<<elseif _pos is "Spooning">>
<<if _role is "top">>
You're nestled up against <<encounternamepp _partner>> back, spooning<<furniturelabel _furniture>>.
<<else>>
You're on your side with <<encounternamepo _partner>> nestled up against your back, spooning<<furniturelabel _furniture>>.
<</if>>
<<elseif _pos is "Cowgirl">>
<<if _role is "top">>
You're on top of <<encounternamepo _partner>><<furniturelabel _furniture>>, straddling <<= _partner.pp>> hips.
<<else>>
<<encounternamec _partner>> is on top of you<<furniturelabel _furniture>>, straddling your hips.
<</if>>
<<elseif _pos is "Reverse Cowgirl">>
<<if _role is "top">>
You're on top of <<encounternamepo _partner>><<furniturelabel _furniture>>, straddling <<= _partner.pp>> hips, facing away to give <<= _partner.po>> a view of your ass.
<<else>>
<<encounternamec _partner>> is on top of you<<furniturelabel _furniture>>, straddling your hips, facing away to give you a view of <<= _partner.pp>> ass.
<</if>>
<<elseif _pos is "Astride Lap">>
<<if _role is "top">>
<<encounternamec _partner>> is sitting<<furniturelabel _furniture>> and you're on top of <<= _partner.po>>, straddling <<= _partner.pp>> hips.
<<else>>
You're sitting<<furniturelabel _furniture>> and <<encountername _partner>> is on top of you, straddling your hips.
<</if>>
<<elseif _pos is "Riding Face">>
<<if _role is "top">>
You're straddling <<encounternamepp _partner>> face<<furniturelabel _furniture>>.
<<else>>
<<encounternamec _partner>> is straddling your face<<furniturelabel _furniture>>.
<</if>>
<<elseif _pos is "Kneeling">>
<<if _role is "top">>
<<encounternamec _partner>> is kneeling before you.
<<elseif _partner.has_part("penis")>>
You're kneeling before <<encounternamepo _partner>>, looking up at <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You're kneeling before <<encounternamepo _partner>>, looking up at <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<<elseif _pos is "Kneeling By Face">>
<<if _role is "top">>
You are kneeling next to <<encounternamepp _partner>> head.
<<elseif _partner.has_part("penis")>>
<<encounternamec _partner>> is kneeling beside your head, <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in your face.
<<else>>
<<encounternamec _partner>> is kneeling beside your head, <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in your face.
<</if>>
<<elseif _pos is "Squatting Before">>
<<if _role is "top">>
You are squatting down in front of <<encounternamepo _partner>>.
<<elseif _partner.has_part("penis")>>
<<encounternamec _partner>> is squatting down in front of you, <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in your face.
<<else>>
<<encounternamec _partner>> is squatting down in front of you, <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in your face.
<</if>>
<<elseif _pos is "Double Decker">>
<<if _role is "top">>
You are underneath <<encountername _partner>> as <<ps _partner>> <<conj stretch>> out on <<pp>> back<<furniturelabel _furniture>>.
<<else>>
You are on your back<<furniturelabel _furniture>> atop <<encountername _partner>>.
<</if>>
<<elseif _pos is "Kneeling Between Thighs">>
<<if _role is "top">>
You are kneeling between <<encounternamepp _partner>> parted thighs.
<<else>>
<<encounternamec _partner>> is kneeling between your parted thighs.
<</if>>
<<elseif _pos is "Perched">>
<<if _role is "top">>
You are between <<encounternamepp _partner>> parted thighs as <<pss _partner>> perched<<furniturelabel _furniture>>.
<<else>>
<<encounternamec _partner>> is between your parted thighs as you perch<<furniturelabel _furniture>>.
<</if>>
<<elseif _pos is "Perched Oral Service">>
<<if _role is "bottom">>
You are kneeling down between <<encounternamepp _partner>> parted thighs as <<pss _partner>> perched<<furniturelabel _furniture>>.
<<else>>
<<encounternamec _partner>> is kneeling down between your parted thighs as you perch<<furniturelabel _furniture>>.
<</if>>
<<elseif _pos is "Underneath Oral Service">>
<<if _role is "bottom">>
You are kneeling down between <<encounternamepp _partner>> parted thighs as <<pss _partner>> sitting at<<furniturelabel _furniture false>>.
<<else>>
<<encounternamec _partner>> is kneeling down between your parted thighs as you sit at<<furniturelabel _furniture false>>.
<</if>>
<<elseif _pos is "Kneeling Over">>
<<if _role is "top">>
<<if $pc.has_part("penis")>>
You're lying down<<furniturelabel _furniture>> with <<encounternamepo _partner>> on <<= _partner.pp>> knees next to you, looking down at your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You're lying down<<furniturelabel _furniture>> with <<encounternamepo _partner>> on <<= _partner.pp>> knees next to you, looking down at your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<<elseif _partner.has_part("penis")>>
You're on your knees with <<encounternamepo _partner>> lying beside you<<furniturelabel _furniture>>, looking down at <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>>.
<<else>>
You're on your knees with <<encounternamepo _partner>> lying beside you<<furniturelabel _furniture>>, looking down at <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>>.
<</if>>
<<elseif _pos is "Sixty-Nine">>
<<if _role is "top">>
<<if _partner.has_part("vagina")>>
You're lying<<furniturelabel _furniture>> with <<encounternamepo _partner>>, your face over <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> while you straddle <<= _partner.pp>> face.
<<else>>
You're lying<<furniturelabel _furniture>> with <<encounternamepo _partner>>, your face over <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> while you straddle <<= _partner.pp>> face.
<</if>>
<<else>>
<<if _partner.has_part("vagina")>>
<<if $pc.has_part("vagina")>>
<<encounternamec _partner>> is lying<<furniturelabel _furniture>> with you, <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in your face and your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in <<= _partner.pp>> face.
<<else>>
You're lying<<furniturelabel _furniture>> with <<encounternamepo _partner>>, your face over <<= _partner.pp>> <<if _partner.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> and your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in <<= _partner.pp>> face.
<</if>>
<<else>>
<<if $pc.has_part("vagina")>>
<<encounternamec _partner>> is lying<<furniturelabel _furniture>> with you, <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in your face and your <<if $pc.is_part_accessible("vagina")>>pussy<<else>>crotch<</if>> in <<= _partner.pp>> face.
<<else>>
You're lying<<furniturelabel _furniture>> with <<encounternamepo _partner>>, your face over <<= _partner.pp>> <<if _partner.is_part_accessible("penis")>>cock<<else>>crotch<</if>> and your <<if $pc.is_part_accessible("penis")>>cock<<else>>crotch<</if>> in <<= _partner.pp>> face.
<</if>>
<</if>>
<</if>>
<<elseif _pos is "Straddling Chest">>
<<if _role is "top">>
You're<<furniturelabel _furniture>> straddling <<encounternamepp _partner>> chest.
<<else>>
<<encounternamec _partner>> is<<furniturelabel _furniture>> straddling your chest.
<</if>>
<<elseif _pos is "Oral Service">>
<<if _role is "bottom">>
Your face is between <<encounternamepp _partner>> thighs as <<ps>> <<conj lie>> back<<furniturelabel _furniture>>.
<<else>>
You're lying back<<furniturelabel _furniture>> with <<encounternamepp _partner>> face between your thighs.
<</if>>
<<elseif _pos is "Prone Oral Service">>
<<if _role is "top">>
Your face is between <<encounternamepp _partner>> thighs as <<ps>> <<conj lie>> back<<furniturelabel _furniture>>.
<<else>>
You're lying back<<furniturelabel _furniture>> with <<encounternamepp _partner>> face between your thighs.
<</if>>
<</if>>
<</highlight>>
<</if>>
<</if>>
<<set _partner.position_new to false>>
<<set _partner.position_initiator to false>>
<<set $pc.position_new to false>>
<<set $pc.position_initiator to false>>
<</for>>/*
<<run console.log("encounter round: " + $encounter.rounds + " acts: " + $encounter.acts.length)>>
<<run console.log("pc encounter round: " + $pc.encounter_rounds)>>
<<= $pc.fleeting_stats.arousal>>
<<run console.log(Object.assign({}, $encounter))>>
*/
<<if ndef $encounter.expandedclothes>>
<<set $encounter.expandedclothes to []>>
<</if>>
<<if $encounter.intro_text isnot "">><<= $encounter.intro_text>><<set $encounter.intro_text to "">><br><br><</if>>
<<if !$pc.swallowing_cum and !$pc.spitting_cum>>
<<include EncounterPositions>>
<br><br>
<<include EncounterActs>>
<<elseif $pc.swallowing_cum>>You duck your head and gulp, feeling the warm thickness of the cum as it passes your throat and you swallow it down.<<run delete $pc.swallowing_cum>><br><br>
<<elseif $pc.spitting_cum>>You lean your head to the side and open your mouth, thick ropes of cum dangling from your lips as you spit it out.<<run delete $pc.spitting_cum>><br><br>
<</if>>
<<set _candirtytalk to (!$encounter.wordless && $encounter.partners().length > 0)>>
<<if $encounter.time_to_end()>>
<<if $encounter.aborted>>
<<set _nextpassage to $encounter.abortpassage || $encounter.endpassage>>
<<for _partner range $encounter.partners()>>
<<if _partner.orgasms gt 0>>
<<set _nextpassage to $encounter.endpassage>>
<<break>>
<</if>>
<</for>>
<<else>>
<<set _nextpassage to $encounter.endpassage>>
<<if $encounter.aftercare and $encounter.consensual and $encounter.partners().length is 1>>
<<initaftercare _nextpassage>>
<<set _nextpassage to "Aftercare">>
<<set $eventnpc to $partner1>>
<<if $encounter.secondround>>
<<set $aftercare.secondround to true>>
<</if>>
<<set $aftercare.position to $pc.position_with($partner1)>>
<<set $aftercare.role to $pc.role_with($partner1)>>
<<if $encounter.abortpassage>>
<<set $aftercare.abortpassage to $encounter.abortpassage>>
<</if>>
<<set $aftercare.rating to $partner1.rate_encounter()>>
<</if>>
<<postencountereffects $encounter>>
<br><br>
<</if>>
<<if (!$aftercare or $encounter.aborted) and $partner1>>
<<set _rating to $partner1.rate_encounter()>>
<<set $lastnpcref to $partner1.name>>
<<encounterrating _rating>>
<<else>>
<br><br>
<</if>>
<br><br>
<<link "Next" _nextpassage>><<run setup.end_encounter()>><</link>>
<<else>>
<<if $encounter.about_to_orgasm().length gt 0>>
<<set _partner to $encounter.about_to_orgasm()[0]>>
<<set _cumlocs to _partner.available_cum_locations($pc, true)>>
<<highlight "narrate-sexact-cum">><<if $encounter.anonymous>><<anonnamec _partner aoran>><<else>><<anonorfirstnamec _partner>><</if>> seems to be on the verge of cumming!<</highlight>><br>
<span class="button-sexact-cum">
<<for _j to 0; _j lt _cumlocs.length; _j++>>
<<set _cum to _cumlocs[_j]>>
<<capture _cum, _partner>><<button _cum.button "EncounterRound">><<run _partner.request_cum_location(_cum, $pc)>><</button>><</capture>>
<</for>>
</span>
<<elseif $pc.cum_covering.mouth>>
<<highlight "narrate-sexact-cum">>Your mouth is full of warm, thick, salty-sweet cum!<</highlight>><br>
<span class="button-sexact-cum">
<<button "Spit" "EncounterRound">><<run $pc.spit_cum()>><</button>>
<<button "Swallow" "EncounterRound">><<run $pc.swallow_cum()>><</button>>
</span>
<<elseif $pc.watersports and $pc.watersports.length gt 0>>
<<highlight "narrate-sexact-pee">>
<<if $pc.is_pee_willing>>
You relax your bladder. Your piss is about to flow.
<<else>>
Your piss is about to flow!
<</if>>
<</highlight>><br>
<<set _partner to $pc.engaged_partner() || $partner1>>
<<set _peelocs to $pc.watersports>>
<span class="button-sexact-pee">
<<if !$pc.is_pee_willing>>
<<capture _partner>><<button "Hold it in!" "EncounterRound">><<run $pc.maybe_resist_pee(_partner)>><</button>><</capture>>
<</if>>
<<for _j to 0; _j lt _peelocs.length; _j++>>
<<set _tpartner to _peelocs[_j].target || _partner>>
<<set _pee to _peelocs[_j]>>
<<capture _pee, _tpartner>><<button _pee.button "EncounterRound">><<run $pc.do_pee(_pee.location, _tpartner)>><</button>><</capture>>
<</for>>
</span>
<<run delete $pc.is_pee_willing>>
<<elseif $pc.arousal() gte $pc.max_arousal()>>
<br><br>
<<set _partner to $pc.engaged_partner()>>
<<if $pc.arousal() gte $pc.max_arousal() and _partner and !_partner.madecumrequest>>
/* narrate requests related to PC's impending orgasm */
<<set _cumlocs to $pc.available_cum_locations(_partner)>>
<<if setup.cum_locations_includes(_cumlocs, "vagina")>>
<<dirtytalkcuminside _partner>>
<<elseif setup.cum_locations_includes(_cumlocs, "anus")>>
<<dirtytalkcuminsideass _partner>>
<<elseif !setup.cum_locations_includes(_cumlocs, "mouth") and setup.cum_locations_includes(_cumlocs, "face")>>
<<dirtytalkcumfacial _partner>>
<</if>>
<</if>>
<<set _partner to $pc.engaged_partner()>>
<<set _cumlocs to $pc.available_cum_locations(_partner)>>
<span class="button-sexact-cum">
<<capture _partner>>
<<button "Hold back!" "EncounterRound">><<run $pc.maybe_resist_cum(_partner)>><</button>>
<</capture>>
<<for _j to 0; _j lt _cumlocs.length; _j++>>
<<set _cum to _cumlocs[_j]>>
<<capture _cum,_partner>><<button _cum.button "EncounterRound">><<run $pc.do_cum(_cum, _partner)>><</button>><</capture>>
<</for>>
</span>
<<elseif $pc.attempted_penetration and !$pc.attempted_penetration.seen and $pc.has_part("penis")>>
/* reaction to penis-haver PC penetrating vagina */
<<set _partner to $encounter.pobj($pc.attempted_penetration.target)>>
You're poised to enter <<anonorfirstname _partner>>.
<br><br>
<<if $pc.attempted_penetration.claim_bc>>
<<if $pc.attempted_penetration.believes_bc>>
<<highlight unbad>><<psc>> <<conj believe>> you've had a vasectomy.<</highlight>>
<<else>>
<<highlight bad>><<psc>> <<conj "don't">> trust that you've had a vasectomy.<</highlight>>
<</if>>
<</if>>
<<if $pc.attempted_penetration.reluctantly_not_use_condom>>
<<highlight unbad>><<psc>> reluctantly <<conj agree>> to not use a condom.<</highlight>>
<br><br>
<<set _doact to true>>
<<elseif $pc.attempted_penetration.reluctantly_use_condom>>
<<highlight unbad>><<psc>> <<conj agree>> to let you use a condom.<</highlight>>
<br><br>
<<set _doact to true>>
<<elseif $pc.attempted_penetration.insist_remove_condom>>
<<highlight bad>><<psc>> <<conj "don't">> want to continue with a condom.<</highlight>>
<br><br>
<<elseif $pc.attempted_penetration.insist_condom>>
<<highlight bad>><<psc>> <<conj "don't">> want to continue unless you use a condom.<</highlight>>
<br><br>
<<elseif $pc.attempted_penetration.request_condom and !$pc.condom>>
<<highlight ungood>><<psc>> would like you to use a condom.<</highlight>>
<br><br>
<<if !$pc.condom>>
<<button "Ask not to use condom" EncounterRound>>
<<if setup.Pregnancy.insists_on_condom(_partner)>>
<<set $pc.attempted_penetration.insist_condom to true>>
<<else>>
<<set $pc.attempted_penetration.reluctantly_not_use_condom to true>>
<</if>>
<</button>>
<</if>>
<<if !setup.Pregnancy.thinks_pc_on_bc(_partner)>>
<<if setup.Pregnancy.can_get_pregnant(V.pc)>>
<<set _linkname to "Say you're on birth control">>
<<else>>
<<set _linkname to "Say you've had a vasectomy">>
<</if>>
<<button _linkname EncounterRound>>
<<set $pc.attempted_penetration.claim_bc to true>>
<<if setup.Pregnancy.believes_pc_on_bc(_partner)>>
<<set $pc.attempted_penetration.believes_bc to true>>
<<run setup.Pregnancy.told_pc_on_bc(_partner)>>
<<if setup.Pregnancy.insists_on_condom(_partner)>>
<<set $pc.attempted_penetration.insist_condom to true>>
<<else>>
<<set $pc.attempted_penetration.reluctantly_not_use_condom to true>>
<</if>>
<<else>>
<<set $pc.attempted_penetration.believes_bc to false>>
<</if>>
<</button>>
<</if>>
<<elseif $pc.attempted_penetration.request_remove_condom and ($pc.condom or _partner.condom)>>
<<highlight ungood>><<psc>> <<conj want>> you to remove your condom.<</highlight>>
<<if setup.Pregnancy.can_get_pregnant(_partner)>>
<<if setup.Pregnancy.on_birth_control(_partner)>>
<<psc>> <<conj say>> <<pss>> on the pill.
<<elseif setup.Pregnancy.has_iud(_partner)>>
<<psc>> <<conj say>> <<ps>> <<conj have>> an IUD.
<</if>>
<<elseif setup.Pregnancy.has_vasectomy(_partner)>>
<<psc>> <<conj say>> <<pshas>> had a vasectomy.
<</if>>
<br><br>
<<if !$pc.condom>>
<<set _doact to false>>
<<button "Continue without condom" EncounterRound>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<</button>>
<<button "Ask to use condom" EncounterRound>>
<<if setup.Pregnancy.reluctantly_uses_condom(_partner)>>
<<set $pc.attempted_penetration.reluctantly_use_condom to true>>
<<else>>
<<set $pc.attempted_penetration.insist_remove_condom to true>>
<</if>>
<</button>>
<<else>>
<<button "Agree to remove condom" EncounterRound>>
<<unset $pc.condom>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<</button>>
<</if>>
<<else>>
<<psc>> <<conj await>> your next move.
<br><br>
<<button "Continue" EncounterRound>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<</button>>
<</if>>
<<if _doact>>
<<button "Continue" EncounterRound>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<</button>>
<</if>>
<<button "Withdraw" EncounterRound>>
<<unset $pc.attempted_penetration>>
<</button>>
<<if !$pc.condom>>
<<if $pc.has_condom()>>
<<for _condom range $pc.condom_types()>>
<<capture _condom>>
<<set _link to "Use " + _condom>>
<<button _link EncounterRound>>
<<run $pc.wear_condom(_condom)>>
<</button>>
<</capture>>
<</for>>
<</if>>
<<if _partner.has_condom()>>
<<button "Borrow condom" EncounterRound>>
<<set _condom to _partner.condom_types()[0]>>
<<run $pc.wear_condom(_condom, _partner)>>
<</button>>
<</if>>
<</if>>
<<elseif $pc.attempted_penetration and !$pc.attempted_penetration.seen and $pc.has_part("vagina")>>
/* reaction to vagina-having PC initiating penetration */
<<set _partner to $encounter.pobj($pc.attempted_penetration.target)>>
You have <<anonorfirstname _partner>> poised to enter you.
<br><br>
<<if $pc.attempted_penetration.claim_bc>>
<<if $pc.attempted_penetration.believes_bc>>
<<highlight unbad>><<psc>> <<conj believe>> you're protected.<</highlight>>
<<else>>
<<highlight bad>><<psc>> <<conj "don't">> trust that you're protected.<</highlight>>
<</if>>
<</if>>
<<if $pc.attempted_penetration.reluctantly_not_use_condom>>
<<highlight unbad>><<psc>> reluctantly <<conj agree>> to not use a condom.<</highlight>>
<<if _partner.condom>>
<<psc>> <<conj take>> it off.
<<run delete _partner.condom>>
<</if>>
<br><br>
<<set _doact to true>>
<<elseif $pc.attempted_penetration.reluctantly_use_condom>>
<<highlight unbad>><<psc>> <<conj agree>> to use a condom.<</highlight>>
<<if $pc.attempted_penetration.offered_condom>>
<<psc>> <<conj wear>> the offered <<= $pc.attempted_penetration.offered_condom>>.
<<run _partner.wear_condom($pc.attempted_penetration.offered_condom)>>
<<set _doact to true>>
<<elseif _partner.has_condom()>>
<<set _condom to _partner.condom_types()[0]>>
<<psc>> <<conj wear>> <<aoran _condom>> _condom.
<<run _partner.wear_condom(_condom)>>
<<set _doact to true>>
<<else>>
<<psc>> <<conj agree>>, but <<ps>> <<conj "don't">> have a condom.
<</if>>
<br><br>
<<set _doact to true>>
<<elseif $pc.attempted_penetration.insist_remove_condom>>
<<highlight bad>><<psc>> really <<conj want>> to remove the condom.<</highlight>>
<br><br>
<<elseif $pc.attempted_penetration.insist_condom>>
<<highlight bad>><<psc>> <<conj "don't">> want to continue unless <<ps>> can use a condom.<</highlight>>
<br><br>
<</if>>
<<if _doact>>
<<button "Continue" EncounterRound>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<</button>>
<<else>>
<<if $pc.attempted_penetration.request_condom and !$pc.attempted_penetration.insist_condom>>
<<if !_partner.condom>>
<<if _partner.has_condom()>>
<<psc>> <<conj intend>> to use a condom.
<<else>>
<<psc>> <<conj want>> to use a condom, but <<conj "don't">> have one.
<</if>>
<br><br>
<<else>>
<<pssc>> wearing <<aoran _partner.condom>> <<= _partner.condom>>.
<br><br>
<</if>>
<<elseif !$pc.attempted_penetration.request_condom and !$pc.attempted_penetration.insist_remove_condom>>
<<psc>> <<conj "don't">> care to use a condom.
<<if setup.Pregnancy.can_get_pregnant(_partner)>>
<<if setup.Pregnancy.on_birth_control(_partner)>>
<<psc>> <<conj say>> <<pss>> on the pill.
<<elseif setup.Pregnancy.has_iud(_partner)>>
<<psc>> <<conj say>> <<ps>> <<conj have>> an IUD.
<</if>>
<<elseif setup.Pregnancy.has_vasectomy(_partner)>>
<<psc>> <<conj say>> <<pshas>> had a vasectomy.
<</if>>
<br><br>
<</if>>
<<if ($pc.attempted_penetration.request_condom and _partner.condom) or (!$pc.attempted_penetration.request_condom and !_partner.condom)>>
<<button "Continue" EncounterRound>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<</button>>
<</if>>
<<if !$pc.attempted_penetration.insist_condom>>
<<button "Go without condom" EncounterRound>>
<<if !$pc.attempted_penetration.request_condom>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<<elseif setup.Pregnancy.insists_on_condom(_partner)>>
<<set $pc.attempted_penetration.insist_condom to true>>
<<else>>
<<set $pc.attempted_penetration.reluctantly_not_use_condom to true>>
<</if>>
<</button>>
<<if !setup.Pregnancy.thinks_pc_on_bc(_partner)>>
<<if setup.Pregnancy.can_get_pregnant(V.pc)>>
<<set _linkname to "Say you're on birth control">>
<<else>>
<<set _linkname to "Say you've had a vasectomy">>
<</if>>
<<button _linkname EncounterRound>>
<<set $pc.attempted_penetration.claim_bc to true>>
<<if setup.Pregnancy.believes_pc_on_bc(_partner)>>
<<set $pc.attempted_penetration.believes_bc to true>>
<<run setup.Pregnancy.told_pc_on_bc(_partner)>>
<<if !setup.Pregnancy.wants_condom(_partner)>>
<<set $pc.attempted_penetration.request_condom to false>>
<<else>>
<<if setup.Pregnancy.insists_on_condom(_partner)>>
<<set $pc.attempted_penetration.insist_condom to true>>
<<else>>
<<set $pc.attempted_penetration.reluctantly_not_use_condom to true>>
<</if>>
<</if>>
<<else>>
<<set $pc.attempted_penetration.believes_bc to false>>
<</if>>
<</button>>
<</if>>
<</if>>
<<if !$pc.attempted_penetration.insist_remove_condom>>
<<if _partner.has_condom()>>
<<button "Have <<po _partner>> use <<pp>> condom" EncounterRound>>
<<if $pc.attempted_penetration.request_condom>>
<<set _condom to _partner.condom_types()[0]>>
<<run _partner.wear_condom(_condom)>>
<<run _partner.remove_condom(_condom)>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<<elseif !setup.Pregnancy.reluctantly_uses_condom(_partner)>>
<<set $pc.attempted_penetration.insist_remove_condom to true>>
<<else>>
<<run _partner.wear_condom(_partner.condom_types()[0])>>
<<set $pc.attempted_penetration.reluctantly_use_condom to true>>
<</if>>
<</button>>
<</if>>
<<if $pc.has_condom()>>
<<for _condom range $pc.condom_types()>>
<<capture _condom>>
<<set _link to "Lend " + _condom>>
<<button _link EncounterRound>>
<<set $pc.attempted_penetration.offered_condom to _condom>>
<<if $pc.attempted_penetration.request_condom>>
<<run _partner.wear_condom(_condom)>>
<<run $pc.remove_condom(_condom)>>
<<run $pc.add_act($pc.attempted_penetration.sexact, _partner)>>
<<unset $pc.attempted_penetration>>
<<elseif !setup.Pregnancy.reluctantly_uses_condom(_partner)>>
<<set $pc.attempted_penetration.insist_remove_condom to true>>
<<else>>
<<run _partner.wear_condom(_condom)>>
<<run $pc.remove_condom(_condom)>>
<<set $pc.attempted_penetration.reluctantly_use_condom to true>>
<</if>>
<</button>>
<</capture>>
<</for>>
<</if>>
<</if>>
<</if>>
<<button "Withdraw" EncounterRound>>
<<unset $pc.attempted_penetration>>
<</button>>
<<else>>
<<for _partner range $encounter.partners()>>
<<if _partner.name_known and !_partner.is_anonymous()>>
<<set _pn to _partner.fullname()>>
<<else>>
<<set _pn to setup.a_or_an(_partner.anonymous_name) + " " + _partner.anonymous_name>>
<</if>>
<h3>Do with <<print _pn>>...</h3>
<<set _acts to $pc.available_acts(_partner)>>
<<for _j to 0; _j lt _acts.length; _j++>>
<<set _act to _acts[_j]>>
<<set _actname to $pc.act_name_for(_act, _partner)>>
<<set _class to setup.encounter_button_class(_act)>>
<<capture _act, _partner>><<highlight _class>><<button _actname "EncounterRound">><<run $pc.do_act(_act, _partner)>><</button>><</highlight>><</capture>>
<</for>>
<<encounterdirtytalkmenu _partner>>
<<encounterclothactmenu>>
<</for>>
<br>
<h3>Do with yourself...</h3>
<<set _acts to $pc.available_acts($pc)>>
<<for _i to 0; _i lt _acts.length; _i++>>
<<set _act to _acts[_i]>>
<<set _actname to $pc.act_name_for(_act, $pc)>>
<<set _class to setup.encounter_button_class(_act)>>
<<capture _act>><<highlight _class>><<button _actname "EncounterRound">><<run $pc.do_act(_act, $pc)>><</button>><</highlight>><</capture>>
<</for>>
<<if $partner1>>
<<encounterdirtytalkmenu $pc>>
<</if>>
<<encounterclothactmenu $pc>>
<<encountertoysmenu>>
<<if "partner1" in State.variables and !$encounter.lockposition>>
<<for _i to 0; _i < $encounter.partners().length; _i++>>
<<if $encounter.partners()[_i].equals($partner1)>>
<<set _partner to $encounter.partners()[_i]>>
<<break>>
<</if>>
<</for>>
<<if !_partner.attempted_position or !$pc.equals(_partner.attempted_position.target)>>
<<set _ideas to $pc.all_possible_group_ideas(_partner)>>
<<if _ideas.length gt 0>>
<br>
<h3>Ask group for...</h3>
<<for _idea range _ideas>>
<<capture _idea>>
<<set _requesttext to setup.groupsexideas[_idea].requesttext || _idea>>
<<set _btnlabel to _requesttext.toUpperFirst()>>
<<button _btnlabel "EncounterRound">><<run $pc.request_idea(_idea, _partner)>><</button>>
<</capture>>
<</for>>
<</if>>
<<set _ideas to $pc.all_possible_ideas(_partner)>>
<<if Object.keys(_ideas).length gt 0>>
<br>
<h3>Ask to...</h3>
<<if $encounter.roughness_level == 0 && $encounter.consensual and !$encounter.roughness_request_denied>>
<<button "Be more rough" "EncounterRound">><<run $pc.request_roughness(1, _partner)>><</button>>
<<button "Be more gentle" "EncounterRound">><<run $pc.request_roughness(-1, _partner)>><</button>>
<</if>>
<<set _roles to ["equal", "giving", "receiving"]>>
<<for _role range _roles>>
<<if _ideas[_role]>>
<<if _role isnot "equal">>
<br><br>
<<if _role is "receiving">>
Receiving...
<<else>>
Giving...
<</if>>
<br>
<</if>>
<<for _idea range _ideas[_role]>>
<<set _npcidea to $pc.find_inverted_idea(_idea)>>
<<if !_npcidea and setup.sexideas[_idea].positions.includes("Sixty-Nine")>><<set _npcidea to _idea>><</if>>
/* <<run console.log(_idea + " to " + _npcidea)>> */
<<if _npcidea>>
<<capture _idea,_npcidea>>
<<set _requesttext to setup.sexideas[_idea].requesttext || _idea>>
<<set _btnlabel to _requesttext.toUpperFirst()>>
<<set _ideadisinhibchance to _partner.disinhibition_allowed_likelihood(_npcidea)>>
<<if _ideadisinhibchance gte 100>>
<<set _buttonclass to "button-idea-certain">>
<<elseif _ideadisinhibchance gte 80>>
<<set _buttonclass to "button-idea-likely">>
<<elseif _ideadisinhibchance gt 50>>
<<set _buttonclass to "button-idea-unlikely">>
<<elseif _ideadisinhibchance gt 0>>
<<set _buttonclass to "button-idea-very-unlikely">>
<<else>>
<<set _buttonclass to "button-idea-impossible">>
<</if>>
<<highlight _buttonclass>><<button _btnlabel "EncounterRound">><<run $pc.request_idea(_npcidea, _partner)>><</button>><</highlight>>
<</capture>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<br>
<h3>Change position...</h3>
<span id="changepositionmenu"><<encounterchangepositionmenu>></span>
<</if>>
<</if>>
<</if>>
<</if>><<widget "encounterchangepositionmenu">>
<<set _partner to $encounter.pobj(_args[0] || _partner)>>
<<for _position range $pc.positions>>
<<if _partner.equals(_position.partner)>>
<<set _currentfurniture to _position.furniture>>
<</if>>
<</for>>
<<if ndef _selectedfurniture>><<set _selectedfurniture to _currentfurniture>><</if>>
<<set _poscats to $pc.sort_available_positions(_partner)>>
<span class="button-sexact-position">
<<for _cat range Object.keys(_poscats)>>
<<if Object.keys(_poscats[_cat]).length gt 0>>
<<if _cat is "none" or _cat is _selectedfurniture>>
<<for _role range Object.keys(_poscats[_cat])>>
<<if _poscats[_cat][_role].length is 0>><<continue>><</if>>
<<if _cat isnot "none">>
<<= setup.capitalize($pc.furniture_label(_cat))>>,
<<if _role is "top">>
as a top...
<<elseif _role is "bottom">>
as a bottom...
<<elseif _role is "equal">>
mutual...
<</if>>
<<else>>
<<if _role is "top">>
As a top...
<<elseif _role is "bottom">>
As a bottom...
<<elseif _role is "equal">>
Mutual...
<</if>>
<</if>>
<br>
<<for _pos range _poscats[_cat][_role]>>
<<set _furniture to _cat == "none" ? null : _cat>>
<<capture _pos,_partner,_furniture>><<button _pos.button "EncounterRound">><<run $pc.do_position(_pos, _partner, _furniture)>><</button>><</capture>>
<</for>>
<br><br>
<</for>>
<</if>>
<</if>>
<</for>>
</span>
<<for _cat range Object.keys(_poscats)>>
<<if Object.keys(_poscats[_cat]).length gt 0>>
<<if _cat is "none" or _cat is _selectedfurniture>>
<<else>>
<<capture _cat>>
<<set _btnlabel to "Relocate to " + $pc.furniture_label(_cat) + "...">>
<<button _btnlabel>>
<<set _selectedfurniture to _cat>>
<<replace "#changepositionmenu">><<encounterchangepositionmenu _partner>><</replace>>
<</button>>
<</capture>>
<</if>>
<</if>>
<</for>>
<</widget>>
<<widget "encounterclothactmenu">>
<<set _clothpartner to _args[0] || _partner>>
<<set _clothactid to "clothact" + _clothpartner.name.replaceAll("'", "_").replaceAll(" ", "_")>>
<span @id="_clothactid">
<<set _clothacts to $pc.available_clothing_actions(_clothpartner)>>
<<set _offeredexpansion to false>>
<<highlight "button-sexact-clothes">>
<<for _j to 0; _j lt _clothacts.length; _j++>>
<<set _clothact to _clothacts[_j]>>
<<capture _clothact,_clothpartner,_partner,_clothactid>>
<<if _clothact.action is "remove all" or $encounter.expandedclothes.includes(_clothpartner.name) or !_offeredexpansion>>
<<if _clothact.action isnot "remove all" && !$encounter.expandedclothes.includes(_clothpartner.name)>>
<<button "Displace clothes...">>
<<set _btnclothactid to "#"+_clothactid>>
<<run $encounter.expandedclothes.push(_clothpartner.name)>>
<<replace _btnclothactid>><<encounterclothactmenu _clothpartner>><</replace>>
<</button>>
<<break>>
<<else>>
<<button _clothact.button "EncounterRound">><<run $pc.do_clothing_act(_clothact, _clothpartner)>><</button>>
<</if>>
<</if>>
<</capture>>
<</for>>
<</highlight>>
</span>
<</widget>>
<<widget "encounterdirtytalkmenu">>
<<if _candirtytalk>>
<<set _talkpartner to _args[0] || _partner>>
<<set _dirtytalkid to "dirtytalk" + _talkpartner.name.replace("'", "_").replace(" ", "_")>>
<span @id="_dirtytalkid">
<<set _anytalk to setup.Dialogue.encounter_lines($pc).length > 0>>
<<if setup.Dialogue.can_talk_submissively()>>
<<set $pc.encounter_dialogue_tags to ["pc", "be submissive"]>>
<<set _subtalk to setup.Dialogue.encounter_lines($pc).length > 0>>
<<else>>
<<set _subtalk to false>>
<</if>>
<<if setup.Dialogue.can_talk_dominantly()>>
<<set $pc.encounter_dialogue_tags to ["pc", "be dominant"]>>
<<set _domtalk to setup.Dialogue.encounter_lines($pc).length > 0>>
<<else>>
<<set _domtalk to false>>
<</if>>
<<unset $pc.encounter_dialogue_tags>>
<<if (_anytalk + _subtalk + _domtalk) gt 1 and !_dirtytalkexpanded>>
<<set _btndirtytalkexpandid to "#"+_dirtytalkid>>
<<capture _btndirtytalkexpandid,_talkpartner>>
<span class="button-sexact-talk">
<<button "Dirty talk...">>
<<set _dirtytalkexpanded to true>>
<<replace _btndirtytalkexpandid>>
<<encounterdirtytalkmenu _talkpartner>>
<</replace>>
<</button>>
</span>
<</capture>>
<<else>>
<<capture _talkpartner>>
<<if _subtalk>>
<span class="button-sexact-talk button">
<<button "Talk submissively" EncounterRound>>
<<set $pc.encounter_dialogue_tags to ["pc", "be submissive"]>>
<<set $pc.dirtytalkqueued to [_partner.name, []]>>
<<if !$pc.skillleveled("Submission", 3)>>
<<script>>
let enc = V.encounter;
let skill = "Submission";
if (!(skill in enc.skills_used))
enc.skills_used[skill] = 1;
else
enc.skills_used[skill]++;
<</script>>
<<run $encounter.advance_round()>>
<</if>>
<</button>>
</span>
<</if>>
<<if _domtalk>>
<span class="button-sexact-talk button">
<<button "Talk dominantly" EncounterRound>>
<<set $pc.encounter_dialogue_tags to ["pc", "be dominant"]>>
<<set $pc.dirtytalkqueued to [_partner.name, []]>>
<<if !$pc.skillleveled("Dominance", 3)>>
<<script>>
let enc = V.encounter;
let skill = "Dominance";
if (!(skill in enc.skills_used))
enc.skills_used[skill] = 1;
else
enc.skills_used[skill]++;
<</script>>
<<run $encounter.advance_round()>>
<</if>>
<</button>>
</span>
<</if>>
<<if _anytalk>>
<span class="button-sexact-talk button">
<<button "Dirty talk" EncounterRound>>
<<set $pc.dirtytalkqueued to [_partner.name, []]>>
<<run $encounter.advance_round()>>
<</button>>
</span>
<</if>>
<</capture>>
<</if>>
</span>
<</if>>
<</widget>><<widget "encountername">><<set _encperson to $encounter.pobj(_args[0])>><<if $pc.equals(_encperson)>>you<<elseif _encperson.equals($lastencountername)>><<ps _encperson>><<else>><<if $encounter.anonymous>><<anonname _encperson aoran>><<else>><<danonorfirstname _encperson aoran>><</if>><<set $lastencountername to _encperson>><</if>><</widget>>
<<widget "encounternamec">><<set _encperson to $encounter.pobj(_args[0])>><<if $pc.equals(_encperson)>>You<<elseif _encperson.equals($lastencountername)>><<psc _encperson>><<else>><<if $encounter.anonymous>><<anonnamec _encperson aoran>><<else>><<danonorfirstnamec _encperson aoran>><</if>><<set $lastencountername to _encperson>><</if>><</widget>>
<<widget "encounternamepp">><<set _encperson to $encounter.pobj(_args[0])>><<if $pc.equals(_encperson)>>your<<elseif _encperson.equals($lastencountername)>><<pp _encperson>><<else>><<danonorfirstname _encperson aoran>>'s<<set $lastencountername to _encperson>><</if>><</widget>>
<<widget "encounternamepo">><<set _encperson to $encounter.pobj(_args[0])>><<if $pc.equals(_encperson)>>your<<elseif _encperson.equals($lastencountername)>><<po _encperson>><<else>><<danonorfirstname _encperson aoran>><<set $lastencountername to _encperson>><</if>><</widget>>
<<widget "cockenterspussy">>
<<run setup.fixBadArray($virginity)>>
<<set _doer to _args[0]>> /* the cock-haver */
<<set _target to _args[1]>> /* the pussy-haver */
<<set _consent to _args[2]>>
<<if _doer.is_pc>> /* pc's cock entering pussy */
<<if _consent>>
You groan with pleasure as you feel your <<cock $pc>> being <<highlight sexy>>enveloped by the slippery wet warmth of <<pp _target>> <<dpussy _target>><</highlight>><<if $kinkcontent.includes("breeding")>><<if $pc.condom>> through a thin layer of <<highlight notice>>latex<</highlight>><<else>>, <<pp>> wetness coating your <<highlight sexy>>bare<</highlight>> shaft<</if>><</if>>.
<<else>>
You never planned for this, but you can't help feeling the unwanted, sheer physical pleasure of your <<cock $pc>> being <<highlight sexy>>enveloped by the slippery wet warmth of <<pp _target>> <<dpussy _target>><</highlight>>. <<dalterneed Composure -400 true>>
<</if>>
<<if $virginity.includes("penis")>>
As you fully hilt your cock inside a soft slick <<dpussy _target>> for the first time, you realize you're <span class="sexy">no longer a virgin</span>.
<<run $pc.lose_virginity("penis", _target)>>
<<if !_consent>><<set $virginityassaulted to true>><</if>>
<</if>>
<<if setup.people.virginity_includes(_target, "vagina")>>
<<danonorfirstnamec _target>> lets out a little surprised sound of something between pleasure and pain, and you realize you've just <<highlight sexy>>taken <<pp>> virginity<</highlight>>.
<<else>>
<<dirtytalkpussytakescock _target>>
<</if>>
<<run _target.lose_virginity("vagina", $pc)>>
<<else>> /* pc's pussy being penetrated */
<<if $virginity.includes("vagina")>>
<<if _consent>>
You force yourself to relax and let a hard cock inside you for the first time. You feel a pain as <<highlight sexy>>you give <<po _doer>> your virginity<</highlight>>, but it soon subsides into a milder burning sensation that dissolves into the pleasure of feeling so filled.
<<else>>
You're tensed up, which only makes it hurt more as the hard cock thrusts inside and, with a sharp pain, <<highlight sexy>><<ps _doer>> takes your virginity<</highlight>>. <<dalterneed Composure -600 true>>
<<set $virginityassaulted to true>>
<</if>>
<<run $pc.lose_virginity("vagina", _doer)>><<dalterneed Pain 100 true>>
<<else>>
<<if _consent>>
You moan with pleasure as you feel your <<dpussy $pc>> <<highlight sexy>>stretching for <<pp _doer>> hard cock<</highlight>>, feeling it filling you.
<<else>>
You whimper as <<ps _doer>> <<highlight sexy>><<conj push>> <<pr>> inside you<</highlight>>, carving your <<dpussy _$pc>> into the shape of <<pp>> hard cock as <<ps>> <<conj thrust>> in. <<dalterneed Composure -400 true>>
<</if>>
<</if>>
<<if $kinkcontent.includes("breeding")>>
<<if _doer.condom>>
<<ppc _doer>> <<highlight notice>>latex-covered<</highlight>> cock sinks deep inside you.
<<else>>
<<ppc _doer>> <<highlight sexy>>bare<</highlight>> cock sinks deep inside you.
<</if>>
<</if>>
<<if setup.people.virginity_includes(_doer, "penis")>>
<<danonorfirstnamec _doer>> lets out a surprised groan, <<pp>> eyes widening, and you realize you've just <<highlight sexy>>taken <<pp>> virginity<</highlight>>.
<<else>>
<<dirtytalkcockenterspussy _doer>>
<</if>>
<<run _doer.lose_virginity("penis", $pc)>>
<</if>>
<</widget>>
<<widget "cockentersass">>
<<run setup.fixBadArray($virginity)>>
<<set _doer to _args[0]>> /* the cock-haver */
<<set _target to _args[1]>> /* the ass-haver */
<<set _consent to _args[2]>>
<<if _doer.is_pc>> /* pc's cock entering ass */
<<if _consent>>
You can't believe how tight it feels as you <<highlight sexy>>sink your <<cock $pc>> into <<pp _target>> <<ass _target>><</highlight>>.
<<else>>
You can't believe this is happening as your hard cock is <<highlight sexy>>shoved inside <<pp _target>> <<ass _target>><</highlight>>. <<dalterneed Composure -400 true>>
<</if>>
<<if $virginity.includes("penis")>>
As you fully hilt your cock inside a warm, tight ass for the first time, you realize you're <<highlight sexy>>no longer a virgin<</highlight>>.
<<run $pc.lose_virginity("penis", _target)>>
<</if>>
<<if setup.people.virginity_includes(_target, "anus")>>
<<danonorfirstnamec _target>> breathes shallowly, eyes wide as <<ps>> <<conj experience>> an all new feeling, and you realize you've just <<highlight sexy>>taken <<pp>> anal virginity<</highlight>>.
<</if>>
<<run _target.lose_virginity("anus", $pc)>>
<<else>> /* pc's ass being penetrated */
<<if $virginity.includes("anus")>>
<<if _consent>>
You can't believe how huge <<pp _doer>> cock feels as it fills your ass. It hurts, and you're sure you can't take something this big. But slowly, the pain subsides into warm pleasure, and you realize you've <<highlight sexy>>lost your anal virginity<</highlight>>.
<<else>>
You're tensed up, which only makes it hurt more as the hard cock thrusts deep into your ass <<highlight sexy>><<ps _doer>> takes your anal virginity<</highlight>>. <<dalterneed Composure -600 true>>
<</if>>
<<run $pc.lose_virginity("anus", _doer)>><<dalterneed Pain 200 true>>
<<else>>
<<if _consent>>
You groan with a mix of pain and pleasure as you feel <<pp _doer>> hard cock <<highlight sexy>>pushing into your ass<</highlight>>. It always feels for a moment like you can't possibly take something that big, until you do.
<<else>>
You whimper as <<ps _doer>> <<highlight sexy>><<conj push>> <<pr>> inside you<</highlight>>, stretching your ass around <<pp>> hard cock as <<ps>> <<conj hilt>> inside your hole. <<dalterneed Composure -400 true>>
<</if>>
<<dalterneed Pain 100 true>>
<</if>>
<<if setup.people.virginity_includes(_doer, "penis")>>
<<danonorfirstnamec _doer>> lets out a surprised groan, <<pp>> eyes widening, and you realize you've just <<highlight sexy>>taken <<pp>> virginity<</highlight>>.
<</if>>
<<run _doer.lose_virginity("penis", $pc)>>
<</if>>
<</widget>>
<<widget "cockentersmouth">>
<<run setup.fixBadArray($virginity)>>
<<set _doer to _args[0]>> /* the cock-haver */
<<set _target to _args[1]>> /* the mouth-haver */
<<set _consent to _args[2]>>
<<if _doer.is_pc>> /* pc's cock entering mouth */
<<run _target.lose_virginity("mouth", $pc)>>
<<else>> /* pc's mouth being penetrated */
<<run $pc.lose_virginity("mouth", _doer)>>
<<if _consent>>
<<else>>
You burn with humiliation as <<ps _doer>> <<conj shove>> <<pp>> cock into your mouth. <<dalterneed Composure -200 true>>
<</if>>
<</if>>
<</widget>>
<<widget "strapenterspussy">>
<<set _doer to _args[0]>> /* the cock-haver */
<<set _target to _args[1]>> /* the pussy-haver */
<<set _consent to _args[2]>>
<<if _doer.is_pc>> /* pc's cock entering pussy */
<<if setup.people.virginity_includes(_target, "vagina")>>
<<danonorfirstnamec _target>> lets out a little surprised sound of something between pleasure and pain, and you realize you've just <<highlight sexy>>taken <<pp>> virginity<</highlight>>.
<<run _target.lose_virginity("vagina", $pc)>>
<</if>>
<<else>> /* pc's pussy being penetrated */
<<if $virginity.includes("vagina")>>
<<if _consent>>
You force yourself to relax and let yourself be fully penetrated for the first time. You feel a pain as <<highlight sexy>>you give <<po _doer>> your virginity<</highlight>>, but it soon subsides into a milder burning sensation that dissolves into the pleasure of feeling so filled.
<<else>>
You're tensed up, which only makes it hurt more as the strap-on thrusts inside and, with a sharp pain, <<highlight sexy>><<ps _doer>> takes your virginity<</highlight>>. <<dalterneed Composure -600 true>>
<<set $virginityassaulted to true>>
<</if>>
<<run $pc.lose_virginity("vagina", _doer)>><<dalterneed Pain 100 true>>
<<else>>
<<if _consent>>
You moan with pleasure as you feel your <<dpussy $pc>> <<highlight sexy>>stretching for the strap-on<</highlight>>, feeling it filling you.
<<else>>
You whimper as <<ps _doer>> <<highlight sexy>><<conj push>> <<pr>> inside you<</highlight>>, carving your <<dpussy _$pc>> into the shape of the strap-on as <<ps>> <<conj thrust>> in. <<dalterneed Composure -400 true>>
<</if>>
<</if>>
<</if>>
<</widget>>
<<widget "strapentersass">>
<<set _doer to _args[0]>> /* the cock-haver */
<<set _target to _args[1]>> /* the ass-haver */
<<set _consent to _args[2]>>
<<if _doer.is_pc>> /* pc's cock entering ass */
<<if setup.people.virginity_includes(_target, "anus")>>
<<danonorfirstnamec _target>> breathes shallowly, eyes wide as <<ps>> <<conj experience>> an all new feeling, and you realize you've just <<highlight sexy>>taken <<pp>> anal virginity<</highlight>>.
<<run _target.lose_virginity("anus", $pc)>>
<</if>>
<<else>> /* pc's ass being penetrated */
<<if $virginity.includes("anus")>>
<<if _consent>>
You can't believe how huge the strap-on feels as it fills your ass. It hurts, and you're sure you can't take something this big. But slowly, the pain subsides into warm pleasure, and you realize you've <<highlight sexy>>lost your anal virginity<</highlight>>.
<<else>>
You're tensed up, which only makes it hurt more as the strap-on thrusts deep into your ass <<highlight sexy>><<ps _doer>> takes your anal virginity<</highlight>>. <<dalterneed Composure -600 true>>
<</if>>
<<run $pc.lose_virginity("anus", _doer)>><<dalterneed Pain 200 true>>
<<else>>
<<if _consent>>
You groan with a mix of pain and pleasure as you feel the strap-on <<highlight sexy>>pushing into your ass<</highlight>>. It always feels for a moment like you can't possibly take something that big, until you do.
<<else>>
You whimper as <<ps _doer>> <<highlight sexy>><<conj push>> <<pr>> inside you<</highlight>>, stretching your ass around the strap-on as <<ps>> <<conj hilt>> inside your hole. <<dalterneed Composure -400 true>>
<</if>>
<<dalterneed Pain 100 true>>
<</if>>
<</if>>
<</widget>>
<<widget "strapkentersmouth">>
<<set _doer to _args[0]>> /* the cock-haver */
<<set _target to _args[1]>> /* the mouth-haver */
<<set _consent to _args[2]>>
<<if _doer.is_pc>> /* pc's cock entering mouth */
<<run _target.lose_virginity("mouth", $pc)>>
<<else>> /* pc's mouth being penetrated */
<<run $pc.lose_virginity("mouth", _doer)>>
<<if _consent>>
Sucking something that can't even feel physical pleasure just so your partner can enjoy watching you do it makes you feel objectified, but also sexy. <<dalterneed Humiliation 100 true>> <<dalterneed Arousal 50>><<alterneed Arousal 50 300>>
<<else>>
You burn with humiliation as <<ps _doer>> <<conj push>> <<pp>> strap-on into your mouth. <<dalterneed Composure -200 true>>
<</if>>
<</if>>
<</widget>>
<<widget "postencountereffects">>
<<unset $lastencountername>>
<<set _enc to _args[0]>>
<<if !_enc.abort>>
<<set _consent to _enc.consensual>>
<<set _solo to _enc.partners().length == 0>>
<<set _paid to _enc.paid>>
<<set _coerced to _enc.coerced>>
<<set _freeuse to _enc.freeuse>>
<<set _witnesses to _enc.witnesses>><<set _witnessed to _witnesses.length gt 0>>
<<set _has_peed_on to _enc.has_peed_on>><<set _been_peed_on to _enc.been_peed_on>>
<<set _anon to $partner1 && setup.people.is_anonymous($partner1)>>
<<if "Dominance" in _enc.skills_used>><<set _enc.leadtaken to true>><</if>>
<br>
<<if !_solo>>
<<set $lastsexday to $gameday>>
<<set _p to _enc.partners()[0]>>
<<set _stranger to !setup.people.is_known(_p)>>
<<set _rompartner to setup.Relationships.partner("PC")>>
<<set _ispartner to setup.Relationships.partner(_p) == "PC">>
<<set _cheating to _rompartner && setup.Relationships.is_cheating(_p) && !_enc.includesPerson(_rompartner)>>
<<set _helpingcheat to !_ispartner && setup.Relationships.in_exclusive_relationship(_p)>>
<<set _crush to setup.people.is_crush(_p)>>
<<set _rival to setup.people.is_hater(_p)>>
<<set _friend to setup.people.is_friend(_p)>>
<<set _anyunsatisfied to false>>
<<for _encpartner range _enc.partners()>>
<<if !_encpartner.orgasms>>
<<set _anyunsatisfied to true>>
<<break>>
<</if>>
<</for>>
<<if _anon>>
<br>
If only you were quite entirely sure who that was...
<br><br>
<<elseif !_consent>>
<br>
<<psc $partner1>> <<conj shove>> you away, apparently done with you.<<run setup.add_to_sex_stats("assaulted")>>
<br><br>
<<elseif _paid>>
<br>
<<if !$pc.has_inclination("Whore")>>
You just did all that. Just for money. <i>What does that make me?</i> you can't help but wonder. <<dalterneed Humiliation 200 true>>
<<run setup.inclinations.unlock_with_req("Whore")>>
<<else>>
There are definitely worse ways to earn a payday. <<dalterneed Satisfaction 100 true>>
<</if>>
<<run setup.add_to_sex_stats("whored")>>
<br><br>
<<elseif _coerced>>
<br>
<<if $pc.has_inclination("Target")>>
Secretly, you kind of enjoy that you had little choice about what you just did. <<dalterneed Satisfaction 100 true>>
<<else>>
You don't enjoy that you just kinda didn't have a choice about that. <<if _rival>>And with <<po $partner1>>, no less. <<dalterneed Humiliation 300 true>><<else>><<dalterneed Humiliation 200 true>><</if>>
<<run setup.inclinations.unlock("Target")>>
<</if>>
<<run setup.add_to_sex_stats("coerced")>>
<br><br>
<<elseif _rival and !$pc.has_inclination("Hatefuck") and !$encounter.anonymous>>
<br>
You find yourself wondering if you should have done all that with somebody who clearly doesn't like you. That was probably a bad idea.<<dalterneed Humiliation 300 true>>
<<run setup.inclinations.unlock_with_req("Hatefuck")>>
<<run setup.add_to_sex_stats("hatefuck")>>
<br><br>
<<elseif _ispartner and !$encounter.anonymous>>
<br>
It's always good to feel closer to your <<rellabel _p>> in this way. <<dalterneed Relaxation 75 true>>
<br><br>
<<elseif _crush and setup.people.get_attitude(_p, "friendship") gt 0 and !$encounter.anonymous>>
<br>
It feels good to find physical pleasure when deeper feelings are involved too. <<dalterneed Relaxation 67 true>>
<br><br>
<<elseif $pc.has_inclination("Slut")>>
<br>
It's so fun to be a slut. <<dalterneed Relaxation 50 true>>
<<if _friend and $pc.has_inclination("Fuckbuddy")>>
Especially for a friend.
<<dalterneed Relaxation 50 true>>
<<run setup.add_to_sex_stats("fuckbuddy")>>
<<elseif _friend>>
<<run setup.inclinations.unlock_with_req("Fuckbuddy")>>
<<elseif (!_friend or _stranger) and $pc.has_inclination("Casual Hookup")>>
Nothing like fucking somebody you barely know.
<<dalterneed Relaxation 25 true>>
<<run setup.add_to_sex_stats("casual sex")>>
<<elseif (!_friend or _stranger)>>
<<run setup.inclinations.unlock_with_req("Casual Hookup")>>
<<run setup.add_to_sex_stats("casual sex")>>
<<elseif _freeuse and $pc.has_inclination("Free Use")>>
Especially when you're just being used.
<<dalterneed Satisfaction 100 true>>
<<run setup.add_to_sex_stats("free use")>>
<<else>>
<<run setup.add_to_sex_stats("free use")>>
<</if>>
<br><br>
<<elseif _friend and $pc.has_inclination("Fuckbuddy") and !$encounter.anonymous>>
<br>
It feels good to find pleasure with your friends. <<dalterneed Relaxation 50 true>>
<<run setup.add_to_sex_stats("fuckbuddy")>>
<br><br>
<<elseif _freeuse && $pc.has_inclination("Free Use")>>
<br>
It feels good to be of use when somebody is in need of relief. <<dalterneed Satisfaction 100 true>>
<<run setup.add_to_sex_stats("free use")>>
<br><br>
<<elseif _freeuse>>
<br>
You were just straight up used for somebody else's relief, you realize. No romance, not even a payday. Like you're a fucktoy. <<dalterneed Humiliation 250 true>>
<<run setup.inclinations.unlock_with_req("Free Use")>>
<<run setup.add_to_sex_stats("free use")>>
<br><br>
<<elseif _friend and !$encounter.anonymous>>
<br>
A small voice in your head asks if you really should have done that with somebody you're not dating. <<dalterneed Humiliation 100 true>>
<<run setup.inclinations.unlock_with_req("Fuckbuddy")>>
<<elseif !_friend || _stranger || $encounter.anonymous>>
<br>
<<if !$pc.has_inclination("Casual Hookup")>>
<<if _stranger>>
You realize you did all this without even exchanging names, and feel a little ashamed. <<dalterneed Humiliation 200 true>>
<<else>>
You barely know this person. You wonder if you really should have done all that... <<dalterneed Humiliation 100 true>>
<</if>>
<<run setup.add_to_sex_stats("casual sex")>>
<<run setup.inclinations.unlock_with_req("Casual Hookup")>>
<<else>>
That was fun. Basically meaningless, but fun. <<dalterneed Relaxation 25 true>>
<</if>>
<br><br>
<</if>>
<<if _been_peed_on>>
The smell of <<encountername _p>>'s piss fills the air.
<<if $pc.has_inclination("Golden Showerer")>>
You sniff it in deeper. <<dalterneed Satisfaction 50 true>>
<<else>>
You wrinkle your nose. <<dalterneed Relaxation -20 true>>
<<run setup.inclinations.unlock_with_req("Golden Showerer")>>
<</if>>
<br><br>
<<elseif _has_peed_on>>
The scent of your piss fills the air.
<<if $pc.has_inclination("Watersports Enthusiast")>>
You revel in it. <<dalterneed Satisfaction 50 true>>
<<else>>
Did you really just do that? <<dalterneed Humiliation 100 true>>
<<run setup.inclinations.unlock_with_req("Watersports Enthusiast")>>
<</if>>
<br><br>
<</if>>
<<if _p.body_hair_level().value > (setup.people.is_masc(_p) ? 12 : 11) and $optextrabodyhair>>
<<run setup.inclinations.unlock_with_req("Trichophilia")>>
<</if>>
<</if>>
<<if _consent>>
<<if $pc.has_inclination("Chaste") and !_solo>>
Should you be doing stuff like this? It feels good, but... it's not really in your nature.
<<dalterneed Relaxation 100 true>>
<<else>>
You feel the warm glow of lingering physical pleasure. <<if _solo>><<dalterneed Relaxation 50 true>><<else>><<dalterneed Relaxation 200 true>> <<dalterneed Attention 200>><<run setup.Needs.sexual_attention(200)>><</if>>
<</if>>
<<if $pc.cumshot_this_encounter>>
<<if $pc.has_inclination("Cumslut")>>
Your skin tingles with the warm, sticky cum left on your body. <<dalterneed Satisfaction 150 true>>
<<else>>
<<run setup.inclinations.unlock_with_req("Cumslut")>>
<</if>>
<</if>>
<<if $pc.creampie_this_encounter>>
<<if $pc.has_inclination("Risktaker")>>
You feel cum beginning to ooze from your <<dpussy $pc>> and shiver with pleasure. <<dalterneed Satisfaction 150 true>>
<</if>>
<</if>>
<<if $pc.did_creampie_this_encounter>>
<<if $pc.has_inclination("Risktaker")>>
You feel a sense of satisfaction at having left your cum inside your partner. <<dalterneed Satisfaction 150 true>>
<</if>>
<</if>>
<<if !_solo and !_anyunsatisfied>>
<<if $pc.has_inclination("Attentive Lover")>>
Nothing pleases you more than pleasing your lover. <<dalterneed Satisfaction 150 true>>
<<elseif !$pc.orgasms>>
<<run setup.inclinations.unlock_with_req("Attentive Lover")>>
<</if>>
<<if "Oral" in $encounter.skills_used and $pc.has_inclination("Oral Fixation")>>
You love oral sex. <<dalterneed Satisfaction 100 true>>
<</if>>
<</if>>
<<if !_solo and _enc.pobj(_p).pain() gte 500 and $pc.orgasms gt 0 && $pc.has_inclination("Sadist")>>
It's so satisfying to mix pleasure with pain for your lover. <<dalterneed Satisfaction 150 true>>
<</if>>
<<if !_solo and _enc.pobj(_p).humiliation() gte 500 and $pc.orgasms gt 0 && $pc.has_inclination("Breaker")>>
You love to break someone down, mixing humiliation into their pleasure. <<dalterneed Satisfaction 150 true>>
<</if>>
<<if !_solo and _enc.leadtaken && $pc.has_inclination("Forward")>>
You enjoy taking the lead. <<dalterneed Satisfaction 100 true>>
<</if>>
<<elseif $pc.has_inclination("Target")>>
You're not sure why, but on some level... you enjoyed that aggression. <<dalterneed Satisfaction 100 true>>
<<set _consent to true>>
<<set _cheating to false>>
<<else>>
You're not sure how much you enjoyed what just happened. <<dalterneed Relaxation -300 true>> <<dalterneed Composure -200 true>>
<<run setup.inclinations.unlock("Target")>>\
<</if>>
<<if _witnessed>>
<<if !_consent>>
What's even worse is that you were watched. <<dalterneed Humiliation 400 true>>
<<else>>
<br><br>
<<if $pc.has_inclination("Dogging Enthusiast")>>
You were watched, too, which makes it all even better. <<dalterneed Satisfaction 100 true>> <<dalterneed Attention 100>><<sexattention 100>>
<<else>>
You were watched, too. That's kind of exciting, but also embarrassing... <<dalterneed Humiliation 200 true>> <<dalterneed Attention 100>><<sexattention 100>>
<<run setup.inclinations.unlock_with_req("Dogging Enthusiast")>>
<</if>>
<</if>>
<</if>>
<<if _cheating and _consent and !_anon>>
<<run setup.add_to_sex_stats("cheated")>>
<<run setup.record_sex_memory(_p, "cheated with", $encounter.anonymous)>>
<<run setup.record_sex_memory(_rompartner, "cheated on", $encounter.anonymous)>>
<br><br>
<<if $pc.has_inclination("Cheater")>>
Privately and perversely, you exult. Once again you've gotten a taste of what's meant to be forbidden. <<dalterneed Satisfaction 200 true>>
<<elseif $pc.has_inclination("Loyal")>>
Then the guilt hits you. What have you done? How could you do this to your <<rellabel _rompartner>>? This isn't you! <<dalterneed Composure -500 true>>
<<else>>
Then the guilt hits you. You just cheated on your <<rellabel _rompartner>>... <<dalterneed Composure -50 true>>
<<if $sexstats["cheated"] gte 5>>
<<run setup.inclinations.unlock_with_req("Cheater")>>
<</if>>
<</if>>
<<if _witnesses.includes(_rompartner)>>
<br><br>
And <<ps>> saw everything. That probably won't go over well.
<<anger _rompartner 1000>>
<<addcheatingconfirmed _rompartner _p>>
<</if>>
<<elseif _ispartner and _consent and setup.Relationships.in_exclusive_relationship() and (!$sexmemory or !$sexmemory[_p] or !$sexmemory[_p]["cheated on"] or $sexmemory[_p]["cheated on"] is 0) and $gameday - _p.partneredday gte 60 and !_anon>>
<<run setup.inclinations.unlock_with_req("Loyal")>>
<</if>>
<<if _helpingcheat and setup.people.partner_known(_p) and !$encounter.anonymous and setup.Relationships.npc_is_cheating(_p)>>
<<run setup.add_to_sex_stats("helped cheat")>>
<<run setup.record_sex_memory(_p, "helped cheat")>>
<</if>>
<<script>>
let satis = V.pc.satisfaction();
if (satis > 0)
{
let halfsatis = Math.round(satis / 2);
if (halfsatis)
{
setup.Needs.decay_need("Satisfaction", halfsatis);
}
}
<</script>>
<</if>>
<</widget>>
<<widget "dirtytalkidea">>
<<if !$encounter or !$encounter.wordless>>
<<set _p to _args[0] || $partner1>>
<<set _passive to _p.sexually_passive()>>
<<set _forceful to _p.is_forceful()>>
<<set _idea to $encounter.idea>>
<<set _msgs to []>>
<<switch _idea>>
<<case "give handjob">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna jack you off," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Can I touch your cock? I want to," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Let me jerk you off," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get handjob">>
<<if _forceful>>
<<arrappend _msgs '"Now jack me off," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Will you... touch my cock, please?" <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Jerk me off," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Touch my cock," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "give titfuck">>
<<if _forceful>>
<<arrappend _msgs '"Fuck my fucking tits," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please fuck my tits," <<ps _p>> <<conj murmur>>.'>>
<<else>>
<<arrappend _msgs '"Fuck my tits," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get titfuck">>
<<if _forceful>>
<<arrappend _msgs '"Gonna use your fucking tits," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I want to... I want to fuck your... your tits," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Let me use those tits," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I wanna fuck your tits," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "finger">>
<<if _forceful>>
<<arrappend _msgs '"Take my fingers inside you," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Can I touch your <<dpussy $pc>>? I want to," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Let me touch you," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "fuck with dildo">>
<<if _forceful>>
<<arrappend _msgs '"Take this toy," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Can I use this on your <<dpussy $pc>>?" <<ps _p>> <<conj murmur>>.'>>
<<else>>
<<arrappend _msgs '"I\'m gonna use this toy on your <<dpussy $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get fingered">>
<<if _forceful>>
<<arrappend _msgs '"Go on, fingerfuck me," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please touch me," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Go on, touch me," <<ps _p>> <<conj murmur>>.'>>
<</if>>
<<case "give blowjob">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna suck you off," <<ps _p>> <<conj state>> matter-of-factly.'>>
<<elseif _passive>>
<<arrappend _msgs '"Can I suck your cock?" <<ps _p>> <<conj murmur>>.'>>
<<else>>
<<arrappend _msgs '"I\'m gonna suck you off," <<ps _p>> <<conj murmur>>.'>>
<</if>>
<<case "get blowjob">>
<<if _forceful>>
<<arrappend _msgs '"Suck my cock, bitch," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I want to feel your mouth," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to feel your mouth," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want your mouth on my cock," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Suck me," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "eat pussy">>
<<if _forceful>>
<<arrappend _msgs '"Gonna eat your <<dpussy $pc>>," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I need to taste you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to lick that <<dpussy $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get pussy eaten">>
<<if _forceful>>
<<arrappend _msgs '"Suck my fucking <<clit _p>>," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please lick me," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Lick my <<dpussy _p>>," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Come suck my <<clit _p>>," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "suck each other" "eat each other" "suck and lick each other" "lick and suck each other">>
<<if _forceful>>
<<arrappend _msgs '"Come here, let\'s taste each other," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Let\'s taste each other," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Come here, let\'s taste each other," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "fuck pussy">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you so hard," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m going to ruin your <<dpussy $pc>>," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I need to destroy that <<dpussy $pc>>," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I... I want to be inside you," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to fuck you," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"I need your <<dpussy $pc>>," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to fuck you," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Fuck, I want you," <<ps _p>> <<conj groan>>.'>>
<<known _p>>
<<arrappend _msgs '"I want to fuck you, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "fuck with strap-on">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you so hard with this," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m going to ruin your <<dpussy $pc>> with this strap-on," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I... I want to use this strap-on on you," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to be inside you with this strap-on," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to fuck you," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"I want to fuck you," <<ps _p>> <<conj murmur>>.'>>
<<known _p>>
<<arrappend _msgs '"I want to fuck you, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "get pussy fucked">>
<<if _forceful>>
<<arrappend _msgs '"Give me that fucking cock," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"You\'re gonna give it to me," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please fuck me," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Fuck me," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Come on, fuck me," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get fucked with strap-on">>
<<if _forceful>>
<<arrappend _msgs '"Give me that fucking strap-on," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"You\'re gonna give it to me," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please fuck me with the strap-on," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Fuck me with the strap-on," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Come on, fuck me with the strap-on," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "fuck ass">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you in the ass," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"Your ass is mine," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna fucking destroy your ass," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Can I... put it in your ass?" <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to be in you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to fuck you in the ass," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"I need to fuck your ass," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want that tight ass," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Fuck, I want your ass," <<ps _p>> <<conj groan>>.'>>
<<known _p>>
<<arrappend _msgs '"I want to fuck your ass, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "get ass fucked">>
<<if _forceful>>
<<arrappend _msgs '"Now fuck my fucking ass," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"You\'re gonna give it to me," <<ps _p>> <<conj growl>>. "Right in the ass."'>>
<<elseif _passive>>
<<arrappend _msgs '"Please fuck my ass," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Fuck my ass," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Come on, fuck my ass," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get footjob">>
<<if _forceful>>
<<arrappend _msgs '"Use your fucking feet on me," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna fuck your feet," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please use your feet," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Use your feet," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Come on, give me a footjob," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "give footjob">>
<<if _forceful>>
<<arrappend _msgs '"Gonna use my feet on you," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna get you off with my feet," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Let me use my feet on you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Use my feet," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I wanna give you a footjob," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get pussy footjob">>
<<if _forceful>>
<<arrappend _msgs '"Use your fucking feet on me," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna use your feet," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Please use your feet," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Use your feet," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Come on, give me a footjob," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "give pussy footjob">>
<<if _forceful>>
<<arrappend _msgs '"Gonna use my feet on you," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna get you off with my feet," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Let me use my feet on you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Use my feet," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I wanna give you a footjob," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<</switch>>
<<if _msgs.length gt 0>>
<<set _msg to setup.randomchoice(_msgs)>>
<<= _msg>>
<<registerencounterspeech _p>>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkmyidea">>
<<if !$encounter or !$encounter.wordless>>
<<set _p to _args[0] || $partner1>>
<<set _passive to _p.sexually_passive()>>
<<set _forceful to _p.is_forceful()>>
<<set _idea to $encounter.idea>>
<<set _msgs to []>>
<<switch _idea>>
<<case "give handjob">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna jack you off," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"You want me to touch your cock?" <<ps _p>> <<conj ask>>.'>>
<<else>>
<<arrappend _msgs '"You want me to jerk you off?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get handjob">>
<<if _forceful>>
<<arrappend _msgs '"Jerk me off then," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck, do you want to touch my cock?" <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Yes, jerk me off," <<ps _p>> <<conj groan>>.'>>
<<arrappend _msgs '"Go on, touch my cock," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "give titfuck">>
<<if _forceful>>
<<arrappend _msgs '"Ugh, fuck," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"You want to use my tits?" <<ps _p>> <<conj ask>>.'>>
<<else>>
<<arrappend _msgs '"You want to fuck my tits?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get titfuck">>
<<if _forceful>>
<<arrappend _msgs '"You want your tits used, don\'t you?" <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck, do you want your tits fucked?" <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Yes, let me use your tits," <<ps _p>> <<conj groan>>.'>>
<<arrappend _msgs '"Yeah, I wanna fuck your tits," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "finger">>
<<if _forceful>>
<<arrappend _msgs '"Take my fingers inside you," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh yes, let me touch your <<dpussy $pc>>," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"You want me to touch your <<dpussy $pc>>?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "fuck with dildo">>
<<if _forceful>>
<<arrappend _msgs '"Gonna fuck you with this toy," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh yes, let me use this toy on your <<dpussy $pc>>," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"You want me to use this toy on your <<dpussy $pc>>?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get fucked with dildo">>
<<if _forceful>>
<<arrappend _msgs '"Don\'t you dare," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Yeah, use that toy on my <<dpussy _p>>," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"You want to use that toy on my <<dpussy _p>>?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "fuck ass with dildo">>
<<if _forceful>>
<<arrappend _msgs '"Gonna fuck your ass with this toy," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh yes, let me use this toy on your ass," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"You want me to use this toy on your ass?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get ass fucked with dildo">>
<<if _forceful>>
<<arrappend _msgs '"Don\'t you <i>fucking</i> dare," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Fuck, yeah, use that toy on my ass," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"You want to use that toy on my ass?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get fingered">>
<<if _forceful>>
<<arrappend _msgs '"Fingerfuck me then," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Yesss, please touch me," <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Go on, touch me," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Yesss, finger me," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "give blowjob">>
<<if _forceful>>
<<arrappend _msgs '"Fine. See if you can resist this, then," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Fuck, you want me to suck it, don\'t you?" <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Oh yes, you want me to suck it?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get blowjob">>
<<if _forceful>>
<<arrappend _msgs '"Suck my cock then, bitch," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck, yes, please suck me," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Yesss, suck it," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Yesss, suck my cock," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Suck me," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "eat pussy">>
<<if _forceful>>
<<arrappend _msgs '"Fine. See if you can resist this, then," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Yes, I need to taste you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"You want me to lick your <<dpussy $pc>>, don\'t you?" <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "get pussy eaten">>
<<if _forceful>>
<<arrappend _msgs '"Suck my fucking <<clit _p>> then," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck yes, please lick me," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"That\'s it, lick my <<dpussy _p>>," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"There you go, you want to suck my <<clit _p>>, don\'t you," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "suck each other" "eat each other" "suck and lick each other" "lick and suck each other">>
<<if _forceful>>
<<arrappend _msgs '"Come on then, let\'s suck each other," <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Yesss, let\'s taste each other," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"Yes, let\'s taste each other," <<ps _p>> <<conj whisper>>.'>>
<</if>>
<<case "fuck pussy">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you so hard," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"You want your <<dpussy $pc>> ruined, don\'t you," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna destroy that <<dpussy $pc>>," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck yes, thank you," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"Yesss, you know I want you," <<ps _p>> <<conj whisper>>.'>>
<<known _p>>
<<arrappend _msgs '"Oh fuck, here I come, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<<else>>
<<arrappend _msgs '"I\'m gonna fuck you now," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Oh fuck yes, I need your <<dpussy $pc>>," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to fuck you," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Fuck, I want you," <<ps _p>> <<conj groan>>.'>>
<<known _p>>
<<arrappend _msgs '"Oh yes, I need to fuck you, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "fuck with strap-on">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you so hard," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"You want your <<dpussy $pc>> ruined, don\'t you," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m gonna destroy that <<dpussy $pc>>," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck yes, thank you," <<ps _p>> <<conj whisper>>.'>>
<<known _p>>
<<arrappend _msgs '"Oh fuck, here I come, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<<else>>
<<arrappend _msgs '"I\'m gonna fuck you now," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Oh fuck yes, I need to fuck your <<dpussy $pc>>," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to fuck you," <<ps _p>> <<conj murmur>>.'>>
<<known _p>>
<<arrappend _msgs '"Oh yes, I need to fuck you, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "get pussy fucked">>
<<if _forceful>>
<<arrappend _msgs '"What do you think you\'re doing?" <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<arrappend _msgs '"Oh fuck, you\'re about to..." <<ps _p>> <<conj breathe>>.'>>
<</if>>
<<case "get fucked with strap-on">>
<<if _forceful>>
<<arrappend _msgs '"What do you think you\'re doing?" <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<arrappend _msgs '"Oh fuck, you\'re about to..." <<ps _p>> <<conj breathe>>.'>>
<</if>>
<<case "fuck ass">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you in the ass," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"Whatever. Your ass is mine," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m still gonna fucking destroy your ass," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I... I want to put it in your ass," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to be in you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to fuck you in the ass," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"I need to fuck your ass," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want that tight ass," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Fuck, I want your ass," <<ps _p>> <<conj groan>>.'>>
<<known _p>>
<<arrappend _msgs '"I want to fuck your ass, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "get ass fucked">>
<<if _forceful>>
<<arrappend _msgs '"What the fuck do you think you\'re doing?" <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<arrappend _msgs '"Oh fuck, you\'re about to..." <<ps _p>> <<conj breathe>>.'>>
<</if>>
<<case "fuck ass with strap-on">>
<<if _forceful>>
<<arrappend _msgs '"I\'m gonna fuck you in the ass," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"Whatever. Your ass is mine," <<ps _p>> <<conj growl>>.'>>
<<arrappend _msgs '"I\'m still gonna fucking destroy your ass," <<ps _p>> <<conj grunt>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"I... I want to put it in your ass," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want to be in you," <<ps _p>> <<conj whisper>>.'>>
<<else>>
<<arrappend _msgs '"I want to fuck you in the ass," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"I need to fuck your ass," <<ps _p>> <<conj whisper>>.'>>
<<arrappend _msgs '"I want that tight ass," <<ps _p>> <<conj murmur>>.'>>
<<arrappend _msgs '"Fuck, I want your ass," <<ps _p>> <<conj groan>>.'>>
<<known _p>>
<<arrappend _msgs '"I want to fuck your ass, <<firstname $pc>>," <<ps _p>> <<conj whisper>>.'>>
<</known>>
<</if>>
<<case "get ass fucked with strap-on">>
<<if _forceful>>
<<arrappend _msgs '"What the fuck do you think you\'re doing?" <<ps _p>> <<conj growl>>.'>>
<<elseif _passive>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<else>>
<<arrappend _msgs '"Oh fuck..." <<ps _p>> <<conj breathe>>.'>>
<<arrappend _msgs '"Oh fuck, you\'re about to..." <<ps _p>> <<conj breathe>>.'>>
<</if>>
<</switch>>
<<if _msgs.length gt 0>>
<<set _msg to setup.randomchoice(_msgs)>>
<<registerencounterspeech _p>>
<<= _msg>>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalktits">>
<<set _p to _args[0] || $partner1>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or (!$encounter.wordless and !$encounter.lockposition)) and !_shy and $pc.has_breasts() and State.random() lte _chance>>
<<set _breastmsg to setup.Dialogue.pick(["dirty talk", "breasts"], _p)>>
<<set _nipplemsg to setup.Dialogue.pick(["dirty talk", "nipples"], _p)>>
<<if _breastmsg and _nipplemsg>>
<<set _msg to setup.Dialogue.parse(_breastmsg, _p).line + ". " + setup.Dialogue.parse(_nipplemsg, _p).line>>
<<elseif _breastmsg>>
<<set _msg to setup.Dialogue.parse(_breastmsg, _p).line>>
<<else>>
<<set _msg to setup.Dialogue.parse(_nipplemsg, _p).line>>
<</if>>
<<= '"' + _msg + '," <<ps _p>> <<conj say>>.'>>
<<registerencounterspeech _p>>
<<set _turnons to setup.people.turnons(_p)>>
<<set _chars to $pc.turnon_characteristics()>>
<<for _turnon range _turnons>>
<<if _turnon.indexOf(" tits") >= 0 && _chars.includes(_turnon)>>
<<run setup.people.learn_turnon(_p, _turnon)>>
<<break>>
<</if>>
<</for>>
<</if>>
<</widget>>
<<widget "dirtytalkcock">>
<<set _p to _args[0] || $partner1>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or (!$encounter.wordless and !$encounter.lockposition)) and !_shy and $pc.has_part("penis") and State.random() lte _chance>>
<<set _msg to setup.Dialogue.pick(["dirty talk", "cock"], _p)>>
<<if _msg>>
<<set _msg to setup.Dialogue.parse(_msg, _p).line>>
<<= '"' + _msg + '," <<ps _p>> <<conj say>>.'>>
<<registerencounterspeech _p>>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkpussy">>
<<set _p to _args[0] || $partner1>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or (!$encounter.wordless and !$encounter.lockposition)) and !_shy and $pc.has_part("vagina") and setup.people.is_femme($pc) and State.random() lte _chance>>
<<set _msg to setup.Dialogue.pick(["dirty talk", "pussy"], _p)>>
<<if _msg>>
<<set _msg to setup.Dialogue.parse(_msg, _p).line>>
<<= '"' + _msg + '," <<ps _p>> <<conj say>>.'>>
<<registerencounterspeech _p>>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkcockenterspussy">>
<<set _p to _args[0] || $partner1>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<elseif _shy>>
<<set _chance to 0.25>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or !$encounter.wordless) and $pc.has_part("vagina") and setup.people.is_femme($pc) and State.random() lte _chance>>
<<set _msg to setup.Dialogue.pick(["dirty talk", "cock enters pussy"], _p)>>
<<set _msg to setup.Dialogue.parse(_msg, _p).line>>
<<= '"' + _msg + '," <<ps _p>> <<conj say>>.'>>
<<registerencounterspeech _p>>
<</if>>
<</widget>>
<<widget "dirtytalkpussytakescock">>
<<set _p to _args[0] || $partner1>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<elseif _shy>>
<<set _chance to 0.25>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or !$encounter.wordless) and State.random() lte _chance>>
<<set _msg to setup.Dialogue.pick(["dirty talk", "pussy takes cock"], _p)>>
<<set _msg to setup.Dialogue.parse(_msg, _p).line>>
<<= '"' + _msg + '," <<ps _p>> <<conj say>>.'>>
<<registerencounterspeech _p>>
<</if>>
<</widget>>
<<widget "dirtytalkgonnacum">>
<<set _p to _args[0] || $partner1>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<elseif _shy>>
<<set _chance to 0.25>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or !$encounter.wordless) and State.random() lte _chance>>
<<set _msg to setup.Dialogue.pick(["dirty talk", "gonna cum"], _p)>>
<<set _msg to setup.Dialogue.parse(_msg, _p).line>>
<<= '"' + _msg + '," <<ps _p>> <<conj say>>.'>>
<</if>>
<</widget>>
<<widget "dirtytalkcuminside">>
<<if (!$encounter or !$encounter.wordless) and $pc.has_part("penis") and !$pc.condom>>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<if !_p.can_force_cum_location()>>
<<set _rng to setup.newRNG(_p.person)>>
<<set _p.madecumrequest to true>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<set _cumslut to setup.people.has_any_inclination(_p, "cumslut")>>
<<set _breeder to setup.people.has_inclination(_p, "Breeding Kink")>>
<<set _risktaker to setup.people.has_inclination(_p, "Risktaker")>>
<<set _desrel to setup.people.desired_relationship(_p)>>
<<set _wantinside to setup.Pregnancy.wants_risky_load(_p)>>
<<set _msgs to []>>
<<if _shy>>
<<if _wantinside>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Please... cum inside me..."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Do it... cum inside me."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Yes... cum in me..."'>>
<<else>>
<<arrappend _msgs '<<psc _p>> <<conj look>> up at you, eyes wide.'>>
<<arrappend _msgs '<<psc _p>> <<conj open>> <<pp>> mouth as if to say something, then <<conj close>> it again.'>>
<<arrappend _msgs '<<psc _p>> <<conj whisper>>, "Be careful... please..."'>>
<</if>>
<<elseif _crude>>
<<if _wantinside>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Do it, cum in my fucking <<dpussy _p>>."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Blow your load inside me."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Fill me up with your fucking cum."'>>
<<else>>
<<if setup.people.has_any_inclination(_p, "dominant")>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Don\'t cum inside me or I\'ll rip your balls off."'>>
<</if>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Don\'t even think about it."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Not fucking inside."'>>
<</if>>
<<else>>
<<if _wantinside>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Do it, cum inside me."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Cum in my <<dpussy _p>>!"'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Cum inside me."'>>
<<else>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Not inside, please."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Pull out, please."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Don\'t cum inside me."'>>
<</if>>
<</if>>
<<if _wantinside>>
<<run $pc.request_cum_location("vagina", _p)>>
<<else>>
<<run $pc.request_cum_location("pull out", _p)>>
<</if>>
<<set _msg to setup.randomchoice(_msgs)>>
<<= _msg>>
<br><br>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkcuminsideass">>
<<if (!$encounter or !$encounter.wordless) and $pc.has_part("penis")>>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<if !_p.can_force_cum_location()>>
<<set _p.madecumrequest to true>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<set _cumslut to setup.people.has_any_inclination(_p, "cumslut")>>
<<set _anal to setup.people.has_inclination(_p, "Anal Fetish")>>
<<set _desrel to setup.people.desired_relationship(_p)>>
<<if _anal or _cumslut>>
<<set _wantinside to true>>
<<elseif _desrel is "hatefuck">>
<<set _wantinside to false>>
<<else>>
<<set _wantinside to State.random() lt 0.3>>
<</if>>
<<set _msgs to []>>
<<if _shy>>
<<if _wantinside>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Please... cum inside me..."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Do it... cum inside me."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Yes... cum in me..."'>>
<<else>>
<<arrappend _msgs '<<psc _p>> <<conj look>> up at you, eyes wide.'>>
<<arrappend _msgs '<<psc _p>> <<conj open>> <<pp>> mouth as if to say something, then <<conj close>> it again.'>>
<<arrappend _msgs '<<psc _p>> <<conj whisper>>, "Oh... not in my..."'>>
<</if>>
<<elseif _crude>>
<<if _wantinside>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Do it, cum in my fucking ass."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Shoot your load right up my ass."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Fill my ass with your fucking cum."'>>
<<else>>
<<if setup.people.has_any_inclination(_p, "dominant")>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Don\'t cum in my ass or I\'ll rip your balls off."'>>
<</if>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Don\'t you dare fucking cum in my ass."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Not happening. Pull the fuck out."'>>
<</if>>
<<else>>
<<if _wantinside>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Do it, cum inside my ass."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Cum inside my ass!"'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Fill my ass with your cum."'>>
<<else>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Not inside, please."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Pull out, please."'>>
<<arrappend _msgs '<<psc _p>> <<conj say>>, "Don\'t cum in my ass..."'>>
<</if>>
<</if>>
<<if _wantinside>>
<<run $pc.request_cum_location("anus", _p)>>
<<else>>
<<run $pc.request_cum_location("pull out", _p)>>
<</if>>
<<set _msg to setup.randomchoice(_msgs)>>
<<= _msg>>
<br><br>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkcumfacial">>
<<if $pc.has_part("penis")>>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<elseif _shy>>
<<set _chance to 0.25>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if setup.people.desired_relationship(_p) is "hatefuck">>
<<set _chance to 0>>
<</if>>
<<if (!$encounter or !$encounter.wordless) and State.random() lte _chance>>
<<set _p.madecumrequest to true>>
<<set _target to "face">>
<<if _p.has_breasts() and State.random() lte 0.5>>
<<set _target to "breasts">>
<</if>>
<<set _msgs to []>>
<<if _target is "face">>
<<if _crude>>
<<arrappend _msgs "Cum on my fucking face,">>
<<arrappend _msgs "Do it, cum on my face,">>
<</if>>
<<arrappend _msgs "Please cum on my face,">>
<<arrappend _msgs "All over my face, please,">>
<<if _shy>>
<<arrappend _msgs "Do it on my face,">>
<<arrappend _msgs "Will you... on my face...">>
<</if>>
<<elseif _target is "breasts">>
<<if _crude>>
<<arrappend _msgs "Cum all over my fucking tits,">>
<<arrappend _msgs "Yeah, cum all over my tits,">>
<</if>>
<<arrappend _msgs "Please cum on my breasts,">>
<<arrappend _msgs "Cum on my breasts,">>
<<if _shy>>
<<arrappend _msgs "On my breasts, please...">>
<<arrappend _msgs "Will you... on my... breasts...">>
<</if>>
<</if>>
<<run $pc.request_cum_location(_target, _p)>>
<<if _msgs.length gt 0>>
<<set _msg to setup.randomchoice(_msgs)>>
<<= '"' + _msg + '" <<ps _p>> <<conj say>>.'>>
<br><br>
<</if>>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkcumrequestresult">>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<if $pc.cum_request != "" && _p.equals($pc.cum_request_by)>>
<<set _msgs to []>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if $pc.ignore_cum_request and setup.Relationships.relationship_with(_p) isnot "submissive">>
<<if $pc.cum_request is "pull out">>
<<set _p.pullout_request_was_ignored to true>>
<<if _shy and !$pc.attempt_pullout>>
<<arrappend _msgs '<<psc _p>> <<conj look>> upset.'>>
<<elseif _crude>>
<<arrappend _msgs '"I fucking told you to pull out," <<ps _p>> <<conj grumble>>.'>>
<<arrappend _msgs '"What did you just do?" <<ps _p>> <<conj demand>>.'>>
<</if>>
<<arrappend _msgs '"Did you just cum inside me?" <<ps _p>> <<conj ask>> rather pointedly.'>>
<<arrappend _msgs '"Did you just... cum inside me?" <<ps _p>> <<conj ask>>.'>>
<<if !_shy>>
<<arrappend _msgs '"I told you to pull out," <<ps _p>> <<conj complain>>.'>>
<<arrappend _msgs '"Didn\'t I tell you to pull out?" <<ps _p>> <<conj ask>>.'>>
<<if $pc.attempt_pullout>>
<<arrappend _msgs '"Oh fuck, did you just..." <<ps _p>> <<conj breathe>>, then <<ps>> <<conj groan>>.'>>
<<arrappend _msgs '"Fuck. Pull out a little earlier next time, huh?" <<ps _p>> <<conj grumble>>.'>>
<<arrappend _msgs '"Ah... fuck... you didn\'t pull out in time, did you?" <<ps _p>> <<conj groan>>.'>>
<</if>>
<</if>>
<<if _msgs.length gt 0>>
<<= setup.randomchoice(_msgs)>>
<<if $pc.attempt_pullout>>
<<control $eventnpc -10>>
<<if setup.people.has_any_inclination(_p, "breedingkink")>>
<<lust $eventnpc 10>>
<</if>>
<<else>>
<<dalterneed Friendship -25>>
<<friendship $eventnpc -25>>
<<control $eventnpc -25>>
<<romance $eventnpc -25>>
<<if setup.people.has_any_inclination(_p, "submissive") or setup.people.has_any_inclination(_p, "breedingkink")>>
<<lust $eventnpc 25>>
<</if>>
<</if>>
<<if !$pc.skillleveled("Dominance", 3)>>
<<script>>
let enc = V.encounter;
let skill = "Dominance";
if (!(skill in enc.skills_used))
enc.skills_used[skill] = 1;
else
enc.skills_used[skill]++;
<</script>>
<</if>>
<br><br>
<</if>>
<</if>>
<</if>>
<<set $pc.cum_request to "">>
<</if>>
<</widget>>
<<widget "dirtytalk">>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<if !_p.last_spoke or $encounter.rounds - _p.last_spoke gte 3>>
<<set _shy to setup.people.has_any_inclination(_p, "shy")>>
<<set _crude to setup.people.has_any_inclination(_p, "crude")>>
<<if _crude>>
<<set _chance to 0.8>>
<<elseif _shy>>
<<set _chance to 0.25>>
<<else>>
<<set _chance to 0.5>>
<</if>>
<<if (!$encounter or !$encounter.wordless) and State.random() lte _chance>>
<<set _line to setup.Dialogue.encounter_line(_p)>>
<<if _line>>
<<set _wrapper to _line.line.indexOf("%N") >= 0 ? '%dialogue' : '"%dialogue" <<encountername _p>> <<conjname _p say>>.'>>
<<set _parsed to setup.Dialogue.parse(_line, _p)>>
<<dialoguewrapper _parsed _wrapper>>
<<registerencounterspeech _p>>
<<run delete _p.encounter_dialogue_tags>>
<</if>>
<</if>>
<</if>>
<</widget>>
<<widget "dirtytalkpc">>
<<set _p to $pc>>
<<set $pcdialoguetarget to $pc.dirtytalkqueued[0]>>
<<set _line to setup.Dialogue.encounter_line(_p)>>
<<if _line>>
<<set _wrapper to _line.line.indexOf("%N") >= 0 ? '%dialogue' : '"%dialogue" <<encountername _p>> <<conjname _p say>>.'>>
<<set _parsed to setup.Dialogue.parse(_line, _p)>>
<<dialoguewrapper _parsed _wrapper>>
<<run delete _p.encounter_dialogue_tags>>
<<unset $pcdialoguetarget>>
<</if>>
<</widget>>
<<widget "dirtytalkplayerskillreaction">>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<if $encounter.last_player_skill_reaction != $encounter.rounds>>
<<set _highestlvl to $pc.highest_skill_level_used_on(_p)>>
<<if def _highestlvl>>
<<if _highestlvl lt 2>>
<<set _skillresponse to "beginner">>
<<elseif _highestlvl lt 6>>
<<set _skillresponse to "decent">>
<<elseif _highestlvl lt 9>>
<<set _skillresponse to "experienced">>
<<else>>
<<set _skillresponse to "masterful">>
<</if>>
<<set _line to setup.Dialogue.pick(["encounter", "dirty talk", "skill response", _skillresponse], _p).line>>
<<if _line>>
<<set _wrapper to _line.indexOf("%N") >= 0 ? '%dialogue' : '"%dialogue" <<encountername _p>> <<conjname _p say>>.'>>
<<set _parsed to setup.Dialogue.parse(_line, _p)>>
<<dialoguewrapper _parsed _wrapper>>
<<set $encounter.last_player_skill_reaction to $encounter.rounds>>
<</if>>
<</if>>
<</if>>
<</widget>>
<<widget "registerencounterspeech">>
<<silently>>
<<if def $encounter>>
<<set _pobj to $encounter.pobj(_args[0])>>
<<set _pobj.last_spoke to $encounter.rounds>>
<</if>>
<</silently>>
<</widget>>
<<widget "spitorswallow">>
<<set _p to $encounter.pobj(_args[0] || $partner1)>>
<<if _p.cum_covering and "mouth" in _p.cum_covering>>
<<set _swallowchance to 0.6>>
<<if setup.people.has_any_inclination(_p, "submissive")>>
<<set _swallowchance to 1>>
<<elseif setup.people.has_any_inclination(_p, "cumslut")>>
<<set _swallowchance to 1>>
<<elseif setup.people.has_any_inclination(_p, "chaste")>>
<<set _swallowchance to 0.1>>
<<elseif setup.people.has_any_inclination(_p, "shy")>>
<<set _swallowchance to 0.4>>
<</if>>
<<if setup.people.desired_relationship(_p) is "hatefuck">>
<<set _swallowchance to 0>>
<<elseif setup.people.desired_relationship(_p) is "date">>
<<set _swallowchance += 0.4>>
<</if>>
<<if State.random() lt _swallowchance>>
<<psc _p>> <<conj swallow>> your load with a gulp.
<<run _p.swallow_cum()>>
<<else>>
<<psc _p>> <<conj spit>> out your cum.
<<run _p.spit_cum()>>
<</if>>
<</if>>
<</widget>>
<<widget "furniturelabel">><<set _furn to _args[0]>><<if ndef _args[1]>><<set _prep to true>><<else>><<set _prep to _args[1]>><</if>><<if _furn>><<= ' ' + $pc.furniture_label(_furn, _prep)>><</if>><</widget>>
<<widget "encountertoysmenu">>
<span id="encounter-toys-menu">
<<set _toyacts to $pc.available_toy_actions($pc)>>
<<set _firstequip to false>>
/* equip toys */
<<for _k to 0; _k lt _toyacts.length; _k++>>
<<set _toyact to _toyacts[_k]>>
<<set _hl to (_toyact.actiontype == "equip toy" ? "button-sexact-equiptoy" : "button-sexact-unequiptoy")>>
<<if _toyact.actiontype == "equip toy">>
<<if !$encounter.show_toy_actions>>
<<if !_firstequip>>
<<set _firstequip to true>>
<<highlight _hl>>
<<button "Equip toy...">>
<<set $encounter.show_toy_actions to true>>
<<replace "#encounter-toys-menu">><<encountertoysmenu>><</replace>>
<</button>>
<</highlight>>
<</if>>
<<else>>
<<highlight _hl>>
<<capture _toyact>><<button _toyact.action "EncounterRound">><<set $encounter.show_toy_actions to false>><<run $pc.do_toy_action(_toyact, $pc)>><</button>><</capture>>
<</highlight>>
<</if>>
<</if>>
<</for>>
/* unequip toys */
<<for _k to 0; _k lt _toyacts.length; _k++>>
<<set _toyact to _toyacts[_k]>>
<<set _hl to (_toyact.actiontype == "equip toy" ? "button-sexact-equiptoy" : "button-sexact-unequiptoy")>>
<<if _toyact.actiontype != "equip toy">>
<<highlight _hl>>
<<capture _toyact>><<button _toyact.action "EncounterRound">><<run $pc.do_toy_action(_toyact, $pc)>><</button>><</capture>>
<</highlight>>
<</if>>
<</for>>
</span>
<</widget>>
<<widget "encounterrating">>
<<set _partner to $encounter ? $partner1 : $aftercare.partner>>
<<set _partnername to setup.people.get_name(_partner)>>
<<set _rating to _args[0]>>
<<if _rating>>
<<for _critique range _rating[1]>>
<<= _critique>>
<</for>>
<<if ndef $encounterstoday or !$encounterstoday.includes(_partnername)>>
<<if _rating[2] != 0 && _attitude isnot "hatefuck">>
<<friendship $partner1 _rating[2]>>
<<dalterneed Friendship _rating[2]>>
<</if>>
<<if _rating[3] != 0>>
<<friendship $partner1 _rating[3]>>
<<dalterneed Lust _rating[3]>>
<</if>>
<<if _rating[4] != 0 && ["friend", "date", "fuckbuddy"].includes(_desrel)>>
<<romance $partner1 _rating[4]>>
<<dalterneed Romance _rating[4]>>
<</if>>
<<if ndef $encounterstoday>><<set $encounterstoday to []>><</if>>
<<run $encounterstoday.push(_partnername)>>
<</if>>
<</if>>
<</widget>><<loclabel>>
<<set _map to setup.Maps[$locationblock]>>
<<if $location in _map.nodes>>
<<if $locationblock is "Campus" and setup.School.current_class()>>
<<set _course to setup.School.current_class().course>>
<<set _classmap to setup.Maps[setup.School.class_location(_course)]>>
<<if _course in setup.School.sports and setup.School.sports[_course].outside>>
<<set _classloc to setup.School.sports[_course].outside>>
<<else>>
<<set _classloc to _classmap.outside>>
<</if>>
<<elseif $locationblock is "Campus" and setup.School.current_game(true)>>
<<set _game to setup.School.current_game()>>
<<set _gameloc to setup.School.sports[_game.type].outside>>
<</if>>
<<if $planneddate>>
<<for _planneddate range $planneddate>>
<<if _planneddate and _planneddate.location is $location and _planneddate.day is $gameday and $hour gte _planneddate.time and !$exhibitionsneak>>
<<set _date to _planneddate.type.toUpperFirst()>>
<<set _dateloc to _planneddate.location>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if setup.is_quad_party_time()>>
<<set _partyloc to "HannaRdS">>
<<elseif setup.is_harvesteve_party_time()>>
<<set _partyloc to "ChamberlainHall">>
<</if>>
<<set _category to "">>
<<set _node to _map.nodes[$location]>>
<<set _onodes to []>>
<<for _onode range Object.keys(_map.nodes)>>
<<set _onodeinfo to _map.nodes[_onode]>>
<<if _onodeinfo.exits>>
<<set _path to setup.Maps.pathfind($locationblock, $location, _onode)>>
<<if _path>>
<<if _onodeinfo.category and _onodeinfo.category isnot _category>>
<<if _category>><br><</if>>
<<set _category to _onodeinfo.category>>
<<= _category>>:
<br>
<</if>>
<<set _pathlength to _path.length - 1>>
<<set _onodename to _onodeinfo.name>>
<<if "features" in _onodeinfo>><<set _onodename to _onodename + " (" + _onodeinfo.features + ")">><</if>>
<<if "passage" in _onodeinfo>><<set _onodepassage to _onodeinfo.passage>><<else>><<set _onodepassage to _onode>><</if>>
<<if "time" in _onodeinfo>><<set _onodetime to _onodeinfo.time>><<else>><<set _onodetime to setup.travel_time(_onodepassage)>><</if>>
<<set _time to _onodetime * _pathlength>>
<<capture _onodename,_onodepassage,_time,_pathlength,_path>>
<<if _onodename is $location>>
<<link _onodename $lastlocpassage>>
<<set $nextbaseeventchance to 0>>
<</link>>
<<else>>
<<link _onodename _onodepassage>>
<<advtime _time>>
<<set $fasttravelpath to _path>>
<<set $nextbaseeventchance to setup.Events.base_event_chance() * _pathlength>>
<</link>> <<dtime _time>>
<span class="fast-travel-marker">
<<if _onode is "HannaRdN">>
<<highlight>>Home<</highlight>>
<<elseif _onode is _classloc>>
<<if _course in setup.School.sports>>
<<highlight>>Practice<</highlight>>
<<else>>
<<highlight>>Class<</highlight>>
<</if>>
<<elseif _onode is _gameloc>>
<<highlight>>Game<</highlight>>
<<elseif _onode is _dateloc>>
<<highlight>>_date<</highlight>>
<<elseif _onode is _partyloc>>
<<highlight>>Party<</highlight>>
<</if>>
</span>
<</if>>
<</capture>>
<br>
<</if>>
<</if>>
<</for>>
<</if>>
<br>
<<set _cancel to {text: "Cancel", link: $lastlocpassage, emoji: '❌'}>>
<<link _cancel>>
<<set $nextbaseeventchance to 0>>
<</link>>
<<map>><<fixhair>>
<<if $pendinghairstyle>>
<<set $pchairstyle to $pendinghairstyle>>
<<set $pc["hair style"] to $pendinghairstyle>>
<<unset $pendinghairstyle>>
<<set _styleinfo to setup.hairstyles[$pchairstyle]>>
<<if "maximum length" in _styleinfo>>
<<set _tlen to setup.hairlengths.indexOf(_styleinfo["maximum length"])>>
<<set _len to setup.hairlengths.indexOf($pchairlength)>>
<<if _len gt _tlen>>
<<set $pchairlength to _styleinfo["maximum length"]>>
<<set $pc["hair length"] to $pchairlength>>
<</if>>
<</if>>
<<set $lasthairgrowthday to $gameday>>
A stylist works with your hair until it's $pchairstyle.
<br><br>
<</if>>
<<if $pendinghaircolor>>
<<set $pchaircolor to $pendinghaircolor>>
<<set $pc["hair color"] to $pendinghaircolor>>
<<unset $pendinghaircolor>>
A stylist dyes your hair $pchaircolor.
<br><br>
<</if>>
<<if $pendinghairlength>>
<<set $pchairlength to $pendinghairlength>>
<<set $pc["hair length"] to $pendinghairlength>>
<<unset $pendinghairlength>>
A stylist gives you a trim, snipping your hair till it's $pchairlength.
<br><br>
<</if>>
<<set _shaved to setup.hairstyles[$pchairstyle].shaved>>
<<if _shaved>>
Your head is shaved. That probably doesn't really leave you with a lot of options here.
<<else>>
Your $pchairlength $pchaircolor hair is $pchairstyle.
<</if>>
<br><br>
<<link "Get a trim" HairLengthMenu>><</link>> ($20)<br>
<<link "Get your hair styled" HairStyleMenu>><</link>> ($40)<br>
<<link "Have your hair colored" HairDyeMenu>><</link>> ($40)<br>
<br>
<<link "Done" $lastlocpassage>><</link>><<set _cost to 20>>
<div class="nokeys">
<<if $pcmoney lt _cost>>
You can't afford a trim.
<<else>>
<<set _shaved to setup.hairstyles[$pchairstyle].shaved>>
<<set _hairlengths to []>>
<<set _maxlength to setup.hairlengths.indexOf($pchairlength)>>
<<if "maximum length" in setup.hairstyles[$pchairstyle]>>
<<set _maxlength to Math.min(_maxlength, setup.hairlengths.indexOf(setup.hairstyles[$pchairstyle]["maximum length"]))>>
<</if>>
<<set _minlength to 0>>
<<if "minimum length" in setup.hairstyles[$pchairstyle]>>
<<set _minlength to setup.hairlengths.indexOf(setup.hairstyles[$pchairstyle]["minimum length"])>>
<</if>>
<<for _i to _minlength; _i lt _maxlength; _i++>>
<<run _hairlengths.push(setup.hairlengths[_i])>>
<</for>>
<<if _hairlengths.length is 0>>
You'll have to change style if you want your hair cut any shorter.
<<else>>
You can just get a trim, keeping the same hairstyle. It'll cost you <<highlight cash>>$<<= _cost>><</highlight>>.
<br><br>
<<for _i to 0; _i < _hairlengths.length; _i++>>
<<set _length to _hairlengths[_i]>>
<<set _linkname to _length.toUpperFirst()>>
<<capture _length>><<link _linkname "HairMenu">><<set $pendinghairlength to _length>><<spend _cost>><</link>><</capture>>
<br>
<</for>>
<</if>>
<</if>>
</div>
<br>
[[Back|HairMenu]]<<set _cost to 40>>
<div class="nokeys">
<<if $pcmoney lt _cost>>
You can't afford a new style.
<<else>>
<<set _shaved to setup.hairstyles[$pchairstyle].shaved>>
<<set _styles to setup.available_hairstyles()>>
<<if _styles.length is 0>>
There's nothing you can do with your hair right now. Better grow it out some!
<<else>>
You can restyle your hair. It'll cost you <<highlight cash>>$<<= _cost>><</highlight>>.
<br><br>
<div class="nokeys">
<<for _i to 0; _i lt _styles.length; _i++>>
<<set _style to _styles[_i]>>
<<set _linkname to _style.toUpperFirst()>>
<<capture _style>>
<<link _linkname "HairMenu">><<set $pendinghairstyle to _style>><<spend _cost>><</link>>
<</capture>>
<<set _styleinfo to setup.hairstyles[_style]>>
<<if "maximum length" in _styleinfo>>
<<set _tlen to setup.hairlengths.indexOf(_styleinfo["maximum length"])>>
<<set _len to setup.hairlengths.indexOf($pchairlength)>>
<<if _len gt _tlen>>Your hair will be cut <<= setup.hairlengths_updo[_tlen]>> to achieve this style.<</if>>
<</if>>
<br>
<</for>>
</div>
<</if>>
<</if>>
</div>
<br>
[[Back|HairMenu]]<<set _cost to 40>>
<div class="nokeys">
<<if $pcmoney lt _cost>>
You can't afford to have your hair dyed.
<<else>>
<<set _shaved to setup.hairstyles[$pchairstyle].shaved>>
<<if !_shaved>>
You can have your hair dyed in either natural or more vibrant colors. It'll cost you <<highlight cash>>$<<= _cost>><</highlight>>.
<br><br>
<<for _i to 0; _i < setup.hair_colors.length; _i++>>
<<set _color to setup.hair_colors[_i]>>
<<if _color isnot $pchaircolor>>
<<set _linkname to _color.toUpperFirst()>>
<<capture _color>><<link _linkname "HairMenu">><<set $pendinghaircolor to _color>><<spend _cost>><</link>><</capture>>
<br>
<</if>>
<</for>>
<<for _i to 0; _i < setup.dye_hair_colors.length; _i++>>
<<set _color to setup.dye_hair_colors[_i]>>
<<if _color isnot $pchaircolor>>
<<set _linkname to _color.toUpperFirst()>>
<<capture _color>><<link _linkname "HairMenu">><<set $pendinghaircolor to _color>><<spend _cost>><</link>><</capture>>
<br>
<</if>>
<</for>>
<</if>>
<</if>>
</div>
<br>
[[Back|HairMenu]]<<fixhair>>
<<if $pendinghairstyle>>
<<set $pchairstyle to $pendinghairstyle>>
<<set $pc["hair style"] to $pendinghairstyle>>
<<unset $pendinghairstyle>>
<<set _styleinfo to setup.hairstyles[$pchairstyle]>>
<<if "maximum length" in _styleinfo>>
<<set _tlen to setup.hairlengths.indexOf(_styleinfo["maximum length"])>>
<<set _len to setup.hairlengths.indexOf($pchairlength)>>
<<if _len gt _tlen>>
<<set $pchairlength to _styleinfo["maximum length"]>>
<<set $pc["hair length"] to $pchairlength>>
<<set $lasthairgrowthday to $gameday>>
<</if>>
<</if>>
You work with your hair until it's $pchairstyle.
<br><br>
<</if>>
<<set _shaved to setup.hairstyles[$pchairstyle].shaved>>
<<if _shaved>>
You study your bald head in the mirror for a moment. You reckon it's already about as styled as it's gonna be.
<<else>>
Your $pchairlength $pchaircolor hair is $pchairstyle.
<br><br>
<<set _styles to setup.available_hairstyles(true)>>
<<if _styles.length is 0>>
There's nothing you can do with your hair right now. Better grow it out some, or see what the salon in town can do with it.
<br>
<<else>>
You can restyle your hair, as long as you keep it simple. For anything else, you'll need to visit the salon in town.
<br><br>
<div class="nokeys">
<<for _i to 0; _i lt _styles.length; _i++>>
<<set _style to _styles[_i]>>
<<set _linkname to _style.toUpperFirst()>>
<<capture _style>>
<<link _linkname HairMenuSelf>><<set $pendinghairstyle to _style>><</link>>
<</capture>>
<<set _styleinfo to setup.hairstyles[_style]>>
<<if "maximum length" in _styleinfo>>
<<set _tlen to setup.hairlengths.indexOf(_styleinfo["maximum length"])>>
<<set _len to setup.hairlengths.indexOf($pchairlength)>>
<<if _len gt _tlen>>Your hair will be cut <<= setup.hairlengths_updo[_tlen]>> to achieve this style.<</if>>
<</if>>
<br>
<</for>>
</div>
<</if>>
<</if>>
<br>
<<link "Done" $lastlocpassage>><</link>>As you begin to approach <<firstname $eventnpc>>, <<ps>> <<conj smile>> happily to see you. It occurs to you that maybe you've made a friend!
<br><br>
<<link "Definitely!" EventInPersonAddFriendDo>>
<<changerelationship $eventnpc 'friend'>>
<</link>> <<dchangerelationship $eventnpc 'friend'>>
<br>
<<link "Nah, keep it casual" EventInPersonAddFriendNo>>
<<rejectrelationship $eventnpc 'friend'>>
<</link>>You return <<firstname $eventnpc>>'s smile, warming to <<po>> even more. It's nice to have a friend.
<br><br>
<<include InPersonDialogueMenu>>Nah, you're not a collector. It's enough that to know <<firstname $eventnpc>> is somebody who won't give you a hard time.
<br><br>
<<include InPersonDialogueMenu>>As you begin to approach <<firstname $eventnpc>>, <<ps>> <<conj meet>> your eyes with a glare. You're not even sure why you want to talk to <<po>>. In fact...
<br><br>
<<link "You really, really hate <<po>>" EventInPersonAddRivalDo>>
<<changerelationship $eventnpc 'rival'>>
<</link>> <<dchangerelationship $eventnpc 'rival'>>
<br>
<<link "...maybe you can patch things up!" EventInPersonAddRivalNo>>
<<rejectrelationship $eventnpc 'rival'>>
<</link>>You glare right back at <<firstname $eventnpc>>. There's no love lost between you two, that's for sure.
<br><br>
<<include InPersonDialogueMenu>>You realize you're glaring back at <<firstname $eventnpc>> and you try to soften your expression. No reason to do anything you can't take back.
<br><br>
<<include InPersonDialogueMenu>>As you begin to approach <<firstname $eventnpc>>, <<ps>> <<conj smile>> at you, and you find yourself smiling back.
<br><br>
Perhaps it's time to discuss what's going on between you two.
<br><br>
<<link "Discuss your relationship with <<po>>" EventInPersonDiscussRelationship>><</link>>
<br>
<<link "Nah, you're only after a casual chat" EventInPersonAddPartnerNo>><</link>><i>A heavy conversation like that can wait,</i> you decide as you approach <<firstname $eventnpc>>.
<br><br>
<<include InPersonDialogueMenu>>"Hey," you say. "I want to talk about what's been going on with us."
<br><br>
<<psc>> <<conj seem>> to agree, looking eager to talk about it.
<br><br>
<<link "Next" EventDiscussRelationship>><</link>><<firstname $eventnpc>> watches you approach. You expect a smile, but <<ps>> <<conj seem>> troubled.
<br><br>
Hmm... what's wrong?
<br><br>
<<link "Next" EventPartnerInitBreakup>><</link>><<unset $attemptednavigation>>
<<set _event to setup.Events.passage(["in person dialogue"])>>
<<if _event>>
<<run setup.Events.register_event(_event)>>
<<include _event>>
<<else>>
<<set _alone to $peopleatlocation.length == 1>>
<<if setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<</if>>
<<if $eventnpc is $niches['The Roommate'] and ($hour gt 22 or $hour lte 6) and $location is "YourDorm">>
<<firstname $eventnpc>> appears to be asleep.
<br><br>
<<continuelink>>
<<else>>
<<if $eventnpc is $crush and !setup.people.is_romantic_partner($eventnpc) and !setup.people.is_sexpartner($eventnpc)>>
You take a deep breath as you approach your crush.
<br><br>
<</if>>
<<set _rel to setup.Relationships.relationship_with($eventnpc)>>
<<set _desrel to setup.people.desired_relationship($eventnpc)>>
/* storyline greets */
<<if $eventnpc is $niches['The Classroom Admirer']>>
<<anonorfullnamec $eventnpc>> smiles at you shyly.
<<if $unlockquadtabletop and $lastadmirerquadevent isnot $gameday and $hour lt 22>>
"I hope you'll stop by for tabletop time later."
<</if>>
<<elseif $eventnpc is $niches['The Classroom Harasser']>>
<<anonorfullnamec $eventnpc>> gives you an inscrutable look, eyes heavy-lidded.
<<if $unlockemersonmpl and $lastharassermplevent isnot $gameday and $hour lt 22>>
"Gonna grace me with your presence at the Media Production Lab?"
<</if>>
/* generic-ish greets */
<<elseif setup.people.get_type($eventnpc) is "faculty" and (!_alone || !setup.Relationships.relationship_with($eventnpc))>>
<<known $eventnpc>>
"Yes, <<mrmiss $pc>> <<dlastname $pc>>?" <<anonorfullname $eventnpc>> says.
<<unknown>>
<<anonorfullnamec $eventnpc>> looks at you. "Yes?"
<</known>>
<<elseif setup.people.is_professor($eventnpc)>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<professor $eventnpc>> <<conj study>> you as you approach.
<<default>>
<<anonorfullnamec $eventnpc>> <<conj stop>> as you approach.
<</switch>>
<<known $eventnpc>>
"Yes, <<mrmiss $pc>> <<dlastname $pc>>?" <<anonorfullname $eventnpc>> says.
<<unknown>>
"Yes?"
<</known>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<anonorfullnamec $eventnpc>> greets you with a quick kiss. "Hi <<nickname $pc>>," <<ps $eventnpc>> <<conj say>>.
<<elseif _rel is "fuckbuddy">>
<<anonorfullnamec $eventnpc>> grins at you. "Hey <<nickname $pc>>," <<ps $eventnpc>> <<conj say>>.
<<elseif _rel is "hatefuck">>
"What is it?" <<anonorfullnamec $eventnpc>> smirks at you. "Looking to burn off some frustration?"
<<elseif setup.people.is_friend($eventnpc)>>
<<anonorfullnamec $eventnpc>> smiles at you. "Hey <<nickname $pc>>," <<ps $eventnpc>> <<conj say>>.
<<elseif setup.people.is_ex($eventnpc)>>
<<anonorfullnamec $eventnpc>> watches you as you approach. "What is it, <<firstname $pc>>?" <<ps $eventnpc>> <<conj ask>>.
<<elseif setup.people.is_friendly($eventnpc) or _desrel is "friend" or _desrel is "fuckbuddy">>
<<known $eventnpc>>
<<anonorfullnamec $eventnpc>> smiles at you. "Hey <<firstname $pc>>," <<ps $eventnpc>> <<conj say>>.
<<unknown>>
<<anonorfullnamec $eventnpc>> smiles at you. "Hey there."
<</known>>
<<elseif setup.people.is_rival($eventnpc)>>
"You," <<anonorfirstname $eventnpc>> growls. "What do you want?"
<<elseif setup.people.is_hater($eventnpc) or _desrel is "rival">>
"What do you want?" <<anonorfirstname $eventnpc>> says dismissively.
<<elseif _desrel is "date">>
<<known $eventnpc>>
<<anonorfullnamec $eventnpc>> smiles at you. "Hi <<firstname $pc>>," <<ps $eventnpc>> <<conj say>>.
<<unknown>>
<<anonorfullnamec $eventnpc>> smiles at you. "Hi."
<</known>>
<<elseif _desrel is "hatefuck">>
"What do you want?" <<anonorfirstname $eventnpc>> says, looking you up and down.
<<elseif setup.people.is_known($eventnpc)>>
"Hey," <<anonorfirstname $eventnpc>> says.
<<if setup.people.get_attitude($eventnpc, "friendship") lt 100>>
"<<firstname $pc>>, right?"
<<else>>
"What can I do for you, <<firstname $pc>>?"
<</if>>
<<else>>
<<anonorfullnamec $eventnpc>> glances over you indifferently. "Yes?"
<</if>>
<br><br>
<<include InPersonDialogueMenu>>
<</if>>
<</if>>You're talking with <<anonorfullnamerel $eventnpc>>.
<br><br>
<<include InPersonDialogueMenu>><<if !$interactionstoday>><<set $interactionstoday to {}>><</if>>
<<if !$interactionstoday[$eventnpc]>><<set $interactionstoday[$eventnpc] to []>><</if>>
<<set _talktime to 10>>
<<set _valid to ["student", "townie"].includes(setup.people.get_type($eventnpc))>>
<<if !setup.people.is_known($eventnpc)>>
<<link "Ask <<pp $eventnpc>> name" InPersonDialogueAskName '📛'>><<advtime 2>><</link>> <<dtime 2>>
<br>
<</if>>
<<if setup.people.is_known($eventnpc) and $crush is $eventnpc and !$crushconfessed>>
<<link "Confess your crush" InPersonDialogueConfessCrush '💗'>><<set $crushconfessed to true>><<playerinitsocializing>><<advtime 5>><</link>> <<dtime 5>>
<br>
<</if>>
<<if !$interactionstoday[$eventnpc].includes("number")>>
<<if setup.people.is_known($eventnpc) and !setup.people.has_number($eventnpc) and setup.people.valid_phone_contact($eventnpc)>>
<<link "Ask for <<pp $eventnpc>> number" InPersonDialogueAskNumber '📱'>>
<<run $interactionstoday[$eventnpc].push("number")>>
<<advtime 2>>
<</link>> <<dtime 2>>
<br>
<</if>>
<</if>>
<<if !$interactionstoday[$eventnpc].includes("chat")>>
<<set _link to {text: "Chat", emoji: '💬'}>>
<<link _link>>
<<run $interactionstoday[$eventnpc].push("chat")>>
<<advtime _talktime>>
<<set _passages to ["InPersonDialogueHobbies", 100]>>
<<if setup.people.get_attitude($eventnpc) gte 100 and (["student", "townie"].includes(setup.people.get_type($eventnpc)) or (setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gt 0))>>
<<run _passages.push("InPersonDialogueLikes", 60000)>>
<</if>>
<<set _passage to setup.randomrelfreq(_passages)>>
<<playerinitsocializing>>
<<go _passage>>
<</link>> <<dtime _talktime>>
<br>
<</if>>
<<if !$interactionstoday[$eventnpc].includes("flirt")>>
<<link "Flirt" InPersonDialogueFlirt '🫦'>>
<<run $interactionstoday[$eventnpc].push("flirt")>>
<<playerinitsocializing>>
<<advtime _talktime Attention>>
<</link>> <<dtime _talktime>>
<br>
<</if>>
<<if !$interactionstoday[$eventnpc].includes("insult")>>
<<link "Insult" InPersonDialogueInsult '💢'>>
<<run $interactionstoday[$eventnpc].push("insult")>>
<<advtime _talktime Attention>>
<</link>> <<dtime _talktime>>
<br>
<</if>>
<<if _valid and (!$hangoutstoday or !$hangoutstoday.includes($eventnpc))>>
<<if !setup.people.planned_date_with($eventnpc) and setup.people.is_known($eventnpc)>>
<<link "Offer to hang out later" InPersonDialogueScheduleHangout '📆'>><<advtime _talktime Attention>><</link>> <<dtime _talktime>>
<br>
<<if setup.people.get_attitude($eventnpc, "friendship") gt 0>>
<<link "Ask <<po $eventnpc>> out on a date" InPersonDialogueScheduleDate '💐'>><<advtime _talktime Attention>><</link>> <<dtime _talktime>>
<br>
<</if>>
<</if>>
<</if>>
<<if setup.people.is_romantic_partner($eventnpc)>>
<<if !$interactionstoday[$eventnpc].includes("pda")>>
<<link "Show some affection" InPersonActionAffection '❤️'>>
<<run $interactionstoday[$eventnpc].push("pda")>>
<<playerinitsocializing>>
<</link>>
<br>
<</if>>
<<link "Discuss your relationship" EventDiscussOngoingRelationship '❤️🩹'>><<advtime _talktime Attention>><</link>> <<dtime _talktime>>
<br>
<<elseif setup.people.is_dating($eventnpc) and !setup.Relationships.is_recent_ex($eventnpc) and !setup.Relationships.in_exclusive_relationship() and setup.people.allow_free_interaction($eventnpc) and !setup.Relationships.partner($eventnpc)>>
<<link "Propose a relationship" EventPlayerInitDiscussRelationship '❤️'>><<playerinitsocializing>><<advtime _talktime Attention>><</link>> <<dtime _talktime>>
<br>
<<elseif setup.Relationships.partner($eventnpc) and !setup.people.is_special($eventnpc) and !$interactionstoday[$eventnpc].includes("convincebreakup") and setup.people.is_known($eventnpc) and setup.people.partner_known($eventnpc)>>
<<link "Convince <<po>> to break up with <<pp>> partner" InPersonDialogueConvinceBreakup '💔'>>
<<run $interactionstoday[$eventnpc].push("convincebreakup")>>
<<advtime _talktime Attention>>
<</link>> <<dtime _talktime>>
<br>
<</if>>
<<if !$interactionstoday[$eventnpc].includes("gift") and setup.Gifts.available_gifts().length gt 0>>
<<link "Offer a gift" InPersonDialogueGiveGift '🎁'>><<playerinitsocializing>><</link>> <<dtime 5>>
<br>
<</if>>
<<if setup.Relationships.can_adjust_subrules($eventnpc)>>
<<link "Discuss a change of rules" SetSubRules '📜'>><</link>>
<br>
<</if>>
<br>
<<set _link to {text: "Done", emoji: '👋'}>>
<<link _link>>
<<set $peopleatlocation to setup.people_at_location()>>
<<set $predeterminedpeopleatlocation to true>>
<<if $peopleatlocation.includes($eventnpc)>>
<<set $header to "You finish your conversation with <<anonorfullname $eventnpc>>.">>
<<else>>
<<set $header to "You finish your conversation with <<anonorfullname $eventnpc>> and <<ps>> <<conj walk>> away.">>
<</if>>
<<continuegoto>>
<</link>>You ask the <<manwoman $eventnpc>> <<pp $eventnpc>> name.
<<set _desrel to setup.people.desired_relationship($eventnpc)>>
<<if ["friend", "date", "fuckbuddy"].includes(_desrel)>>
"It's <<highlight>><<dfirstname $eventnpc>><</highlight>>," <<ps>> <<conj say>>, smiling. "Yours?"
<<elseif ["rival", "hatefuck"].includes(_desrel)>>
"What do you care?" <<ps $eventnpc>> <<conj huff>>. "It's <<highlight>><<dfirstname $eventnpc>><</highlight>>, alright?"
<<else>>
<<likes $eventnpc>>
"I'm <<highlight>><<dfirstname $eventnpc>><</highlight>>," <<ps $eventnpc>> <<conj say>>. "You?"
<<dislikes>>
<<psc $eventnpc>> <<conj look>> at you askance. "<<highlight>><<dfirstname $eventnpc>><</highlight>>," <<ps>> <<conj say>>, somewhat reluctantly, it seems to you. "You?"
<</likes>>
<</if>>
<br><br>
<<run setup.people.become_known($eventnpc)>>
You tell <<po>> your name as well.
<br><br>
<<include InPersonDialogueMenu>>You ask <<firstname $eventnpc>> for <<pp>> number.
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc)>>
<<if setup.people.is_romantic_partner($eventnpc)>>
<<psc>> <<conj blink>> at you. "Wait, you don't have my number?" <<givenumber $eventnpc>>
<<else>>
<<if setup.people.is_faculty($eventnpc)>>
<<if setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gte 2>>
<<psc>> <<conj look>> at you and <<conj sigh>> deeply. "I... I really shouldn't... but... okay, just keep it to yourself." <<givenumber $eventnpc>>
<<else>>
<<psc>> <<conj look>> at you for a moment. "I don't think that would be appropriate," <<ps>> <<conj say>> finally.
<</if>>
<<else>>
<<switch _desrel>>
<<case "friend" "date" "fuckbuddy">>
"Yeah, of course," <<ps>> <<conj say>>. <<givenumber $eventnpc>>
<<case "hatefuck">>
<<if setup.people.allow_free_interaction($eventnpc)>>
"Well... I guess so, but only use it for booty calls," <<ps>> <<conj say>>. "I don't actually want to talk to you." <<givenumber $eventnpc>>
<<else>>
<<firstname $eventnpc>> laughs. "Why? Not a chance."
<</if>>
<<case "rival">>
<<firstname $eventnpc>> laughs. "Why? Not a chance."
<<default>>
<<likes $eventnpc>>
"My number? Well... sure, I guess," <<ps>> <<conj say>>. <<givenumber $eventnpc>>
<<dislikes>>
"Uhh... sorry, I don't really like to give it out," <<ps>> <<conj say>>.
<<friendship $eventnpc -10>>
<</likes>>
<</switch>>
<</if>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>><<set _hobby to setup.people.find_hobby_with($eventnpc)>>
You start a chat about _hobby.
<br><br>
<<if setup.people.has_hobby($eventnpc, _hobby)>>
<<likes $eventnpc>>
<<psc $eventnpc>> <<conj smile>> and enthusiastically <<conj dive>> into the conversation.
<<friendship $eventnpc 30>>
<<dalterneed Attention 50>>
<<socialize 50>>
<<dislikes>>
<<psc $eventnpc>> <<conj 'don\'t'>> say much, but you think you detect a flicker of interest despite everything.
<<friendship $eventnpc 15>>
<</likes>>
<<else>>
<<likes $eventnpc>>
<<psc $eventnpc>> <<conj make>> polite noises but <<conj 'don\'t'>> seem all that interested.
<<friendship $eventnpc -5 -10>>
<<dislikes>>
<<psc $eventnpc>> <<conj roll>> <<pp>> eyes, not bothering to hide <<pp>> lack of interest.
<<friendship $eventnpc -30>>
<</likes>>
<</if>>
<<introduction $eventnpc>>
<br><br>
<<include InPersonDialogueMenu>><<set _turnons to setup.people.turnons($eventnpc)>>
<<set _turnoffs to setup.people.turnoffs($eventnpc)>>
<<set _pcchars to $pc.turnon_characteristics()>>
You and <<anonorfirstname $eventnpc>> get into a conversation about your likes and dislikes when it comes to other people.
<br><br>
<<if _turnons.length is 0 and _turnoffs.length is 0>>
<<psc $eventnpc>> <<conj look>> at you seriously. "It's gotta be said... I don't really care about anything one way or the other."
<br><br>
You nod slowly. Cool!
<<elseif _turnons.length gt 0 and (State.random() lte 0.5 or _turnoffs.length is 0)>>
<<set _turnon to setup.randomchoice(_turnons)>>
"I kinda really like <<= setup.randomchoice(setup.turnons[_turnon].generaldesc)>>..." <<ps>> <<conj say>>.
<<if _turnon is "big butt">>
<<psc>> <<conj trail>> off, and you look at each other. Is one of you going to say it? No? Well, that's probably for the best really.
<<elseif _pcchars.includes(_turnon) and setup.people.mutual_attraction($eventnpc)>>
<br><br>
<<likes $eventnpc>>
<<psc>> <<conj give>> you a small smile, and you realize <<ps>> <<conj include>> you in that description.
<<dislikes>>
<<psc>> <<conj pause>>, then <<conj frown>> as <<ps>> <<conj glance>> at you, and you realize you fit that description.
<</likes>>
<</if>>
<<run setup.people.learn_turnon($eventnpc, _turnon)>>
<<else>>
<<set _turnoff to setup.randomchoice(_turnoffs)>>
"I don't really like <<= setup.randomchoice(setup.turnons[_turnoff].generaldesc)>>..." <<ps>> <<conj say>>.
<<if _pcchars.includes(_turnoff) and setup.people.mutual_attraction($eventnpc)>>
<br><br>
<<likes $eventnpc>>
<<psc>> <<conj seem>> to belatedly realize what <<ps>> said and <<conj give>> you an apologetic smile, and you realize <<ps>> <<conj include>> you in that description.
<<dislikes>>
<<psc>> <<conj give>> you a small smirk, and you realize you fit that description.
<</likes>>
<</if>>
<<run setup.people.learn_turnon($eventnpc, _turnoff)>>
<</if>>
<<friendship $eventnpc 25>>
<<introduction $eventnpc>>
<br><br>
<<include InPersonDialogueMenu>>You look speculatively at <<anonorfirstname $eventnpc>>. How should you flirt with <<po>>?
<br><br>
<<if setup.people.has_any_inclination($eventnpc, "dominant")>>
<<skillgate Submission 2 "Flirt submissively" InPersonDialogueFlirtSub 0 '<<dalterneed Lust 50>>'>><</skillgate>>
<</if>>
<<if setup.people.has_any_inclination($eventnpc, "submissive")>>
<<skillgate Dominance 2 "Flirt dominantly" InPersonDialogueFlirtDom 0 '<<dalterneed Lust 50>>'>><</skillgate>>
<</if>>
<<skillgate Disinhibition 3 "Flirt brazenly" InPersonDialogueFlirtBrazen 0 '<<dalterneed Lust 50>>'>><</skillgate>>
<<skillgate Exhibitionism 3 "Flirt exhibitionistically" InPersonDialogueFlirtExhib 0 '<<dalterneed Lust 50>>'>><</skillgate>>
<<skillgate Disinhibition 1 "Flirt shyly" InPersonDialogueFlirtShy 0 '<<dalterneed Lust 25>>'>><</skillgate>>
<<link "Flirt sweetly" InPersonDialogueFlirtSweet>><</link>> <<dalterneed Romance 25>><br>
<<link "Never mind" InPersonDialogueOngoing>><</link>>/* let's not confuse ourselves... this is the passage where the PC acts submissive to encourage the NPC to be dom */
You murmur suggestively to <<anonorfirstname $eventnpc>>, basically promising that you'll do anything <<ps>> <<conj want>>.
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if setup.people.get_type($eventnpc) is "faculty" and !_alone>>
<<if setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gt 0>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>, glancing around.
<<else>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>.
<</if>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "hatefuck">>
<<control $eventnpc 25 50>>
<<lust $eventnpc 15 30>>
<<default>>
<<control $eventnpc 5 15>>
<<lust $eventnpc 5 15>>
<</switch>>
<<elseif setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<professor $eventnpc>> just <<conj watch>> you, eyes narrowing.
<<control $eventnpc 25 50>>
<<lust $eventnpc 15 30>>
<<default>>
<<anonorfullnamec $eventnpc>> <<conj shake>> <<pp>> head. "<<mrmiss>> <<dlastname $pc>>..." <<ps $eventnpc>> <<conj say>>, trailing off.
<<lust $eventnpc 5 15>>
<</switch>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "friend">>
<<psc>> <<conj grin>> at you. "You know I might just take you up on that."
<<control $eventnpc 25 50>>
<<lust $eventnpc 15 30>>
<<case "hatefuck">>
<<psc>> <<conj laugh>>. "Careful. I might make you prove it."
<<control $eventnpc 25 50>>
<<lust $eventnpc 15 30>>
<<default>>
<<psc>> <<conj arch>> an eyebrow at you. "Is that so?"
<<control $eventnpc 5 15>>
<<lust $eventnpc 5 15>>
<</switch>>
<<else>>
<<switch _desrel>>
<<case "friend">>
<<psc>> <<conj chuckle>> uneasily. "Well, I appreciate it, but... you know I don't think of you that way."
<<control $eventnpc 5 10>>
<<case "rival">>
<<psc>> <<conj roll>> <<pp>> eyes. "Now that is pathetic."
<<control $eventnpc 5 10>>
<<friendship $eventnpc -10>>
<<case "date" "fuckbuddy">>
<<psc>> <<conj grin>> at you. "You know I might just take you up on that."
<<control $eventnpc 25 50>>
<<lust $eventnpc 15 30>>
<<case "hatefuck">>
<<psc>> <<conj laugh>>. "Careful. I might make you prove it."
<<control $eventnpc 25 50>>
<<lust $eventnpc 15 30>>
<<default>>
<<psc>> just <<conj raise>> an eyebrow as <<ps>> <<conj listen>>.
<<control $eventnpc 5 15>>
<<lust $eventnpc 5 15>>
<</switch>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>>You murmur suggestively to <<anonorfirstname $eventnpc>>, hinting at things you'd love to make <<po>> do.
<<beconfident>>
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if setup.people.get_type($eventnpc) is "faculty" and !_alone>>
<<if setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gt 0>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>, glancing around.
<<else>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>.
<</if>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "hatefuck">>
<<control $eventnpc -25 -50>>
<<lust $eventnpc 15 30>>
<<default>>
<<control $eventnpc -5 -10>>
<<lust $eventnpc 5 15>>
<</switch>>
<<elseif setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<professor $eventnpc>> <<conj laugh>>. "Who do you think you're talking to, <<mrmiss>> <<dlastname $pc>>?"
<<lust $eventnpc 5 15>>
<<default>>
<<anonorfullnamec $eventnpc>> just <<conj look>> at you, shifting uncomfortably, but you feel like maybe you struck something of a nerve.
<<control $eventnpc -25 -50>>
<<lust $eventnpc 15 30>>
<</switch>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "friend">>
<<psc>> <<conj smile>> at you. "You only have to ask, you know."
<<control $eventnpc -25 -50>>
<<lust $eventnpc 15 30>>
<<case "hatefuck">>
<<psc>> <<conj glare>> at you. "You can try and make me."
<<control $eventnpc -25 -50>>
<<lust $eventnpc 15 30>>
<<default>>
<<psc>> <<conj arch>> an eyebrow at you. "Is that so?"
<<control $eventnpc -5 -10>>
<<lust $eventnpc 5 15>>
<</switch>>
<<else>>
<<switch _desrel>>
<<case "friend">>
<<psc>> <<conj blush>>. "I mean... I don't know if..." <<psc>> <<conj trail>> off.
<<control $eventnpc -5 -15>>
<<case "rival">>
<<psc>> <<conj snort>>. "That's not going to happen."
<<control $eventnpc -5 -10>>
<<friendship $eventnpc -10>>
<<case "date" "fuckbuddy">>
<<psc>> <<conj smile>> at you. "You only have to ask, you know."
<<control $eventnpc -25 -50>>
<<lust $eventnpc 15 30>>
<<case "hatefuck">>
<<psc>> <<conj glare>> at you. "You can try and make me."
<<control $eventnpc -25 -50>>
<<lust $eventnpc 15 30>>
<<default>>
<<psc>> just <<conj raise>> an eyebrow as <<ps>> <<conj listen>>.
<<control $eventnpc -5 -10>>
<<lust $eventnpc 5 15>>
<</switch>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>>You murmur some brazen suggestions to <<anonorfirstname $eventnpc>>, holding nothing back about the dirty things you'd like to do with <<po>>.
<<beconfident>>
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if setup.people.is_romantic_partner($eventnpc)>>
<<psc>> <<conj grin>> at you. "You know I might just take you up on that."
<<lust $eventnpc 25 50>>
<<elseif setup.people.get_type($eventnpc) is "faculty" and !_alone>>
<<if setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gt 0>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>, glancing around.
<<else>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>.
<</if>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "hatefuck">>
<<lust $eventnpc 25 50>>
<<default>>
<<lust $eventnpc 5 10>>
<</switch>>
<<elseif setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<<if setup.people.professor_intimacy($eventnpc) gt 0>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<psc $eventnpc>> <<conj listen>> to you calmly, a smirk growing on <<pp>> face.
<<default>>
<<psc $eventnpc>> <<conj blink>> at you as <<ps>> <<conj listen>>.
<</switch>>
<<lust $eventnpc 15 30>>
<<else>>
"This isn't appropriate, <<mrmiss>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>> quietly.
<<lust $eventnpc 5 10>>
<</if>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "friend">>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj grin>> at you. "You know I might just take you up on that."
<<lust $eventnpc 25 50>>
<<else>>
<<psc>> <<conj shift>> uncomfortably. "Wow. Umm, I'm not sure I'm ready, but..." <<psc>> <<conj trail>> off.
<<lust $eventnpc 25 50>>
<</if>>
<<case "hatefuck">>
<<psc>> <<conj laugh>>. "It's just that easy, huh? Kind of pathetic."
<<lust $eventnpc 25 50>>
<<default>>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj grin>> at you. "You know I might just take you up on that."
<<lust $eventnpc 25 50>>
<<else>>
<<psc>> <<conj shift>> uncomfortably. "Wow. Umm, I'm not sure I'm ready, but..." <<psc>> <<conj trail>> off.
<<lust $eventnpc 25 50>>
<</if>>
<</switch>>
<<else>>
<<switch _desrel>>
<<case "friend">>
<<psc>> <<conj chuckle>> uneasily. "Well, I appreciate it, but... you know I don't think of you that way."
<<lust $eventnpc 5 10>>
<<case "rival">>
<<psc>> <<conj roll>> <<pp>> eyes. "Now that is pathetic."
<<lust $eventnpc 15 25>>
<<case "date">>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj grin>> at you. "You know I might just take you up on that."
<<lust $eventnpc 25 50>>
<<else>>
<<psc>> <<conj shift>> uncomfortably. "Wow. Umm, I'm not sure I'm ready, but..." <<psc>> <<conj trail>> off.
<<lust $eventnpc 25 50>>
<</if>>
<<case "fuckbuddy">>
<<psc>> <<conj grin>> at you. "Wow. I definitely see nothing wrong with any of that."
<<lust $eventnpc 25 50>>
<<case "hatefuck">>
<<psc>> <<conj laugh>>. "It's just that easy, huh? Kind of pathetic."
<<lust $eventnpc 25 50>>
<<default>>
<<psc>> just <<conj raise>> an eyebrow as <<ps>> <<conj listen>>.
<<lust $eventnpc 15 25>>
<</switch>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>>You lean in closer to <<anonorfirstname $eventnpc>>, angling to draw <<pp>> gaze to you...
<<set _appeal to 0>>
<<if $pc.is_showing_cleavage()>>the <<cleavage $pc>> you're displaying...<<set _appeal++>><</if>>
<<if $pc.nipple_erectness_visible() and !$pc.wearing_bra()>>your <<breasts $pc braless>>...<<set _appeal++>><</if>>
<<if $pc.nipple_erectness_visible() and $pc.nipples_hard()>>your hard nipples showing through your <<shortshirt $pc>>...<<set _appeal++>><</if>>
<<if $pc.is_upskirt_exhibitionist()>>the hem of your <<shortpants $pc>>...<<set _appeal++>><</if>>
<<if $pc.has_visible_muscles()>><<set _shirt to $pc.shirt_equiv()>><<if _shirt>>your muscles bulging in your <<clothingshortname _shirt>>...<<else>>your bulging muscles...<</if>><<set _appeal++>><</if>>
<<if $pc.bulge_visible()>>the outline of your <<cock $pc>> through your <<shortpants $pc>>...<<set _appeal++>><</if>>
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if setup.people.get_type($eventnpc) is "faculty" and !_alone>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "hatefuck">>
<<psc $eventnpc>> <<conj pretend>> not to stare.
<<set _lust to 5 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<<default>>
<<psc $eventnpc>> pointedly <<conj ignore>> your display.
<<set _lust to 2 * _appeal>>
<<set _lust2 to _lust + 3>>
<<lust $eventnpc _lust _lust2>>
<</switch>>
<<elseif setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<psc>> <<conj look>> at you, eyes wandering your body.
<<default>>
<<psc>> <<conj stare>> at you, shifting uncomfortably.
<</switch>>
<<set _lust to 5 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "friend">>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj look>> you up and down deliberately, grinning at you.
<<else>>
<<psc>> <<conj shift>> uncomfortably, blushing as <<pp>> eyes are drawn to your body.
<</if>>
<<set _lust to 5 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<<case "hatefuck">>
<<psc>> <<conj smirk>> and <<conj 'let'>> <<pp>> eyes roam over your body.
<<set _lust to 5 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<<default>>
<<psc>> <<conj clear>> <<pp>> throat, giving you a once-over.
<<set _lust to 3 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<</switch>>
<<else>>
<<switch _desrel>>
<<case "friend">>
<<ppc>> eyes widen somewhat, though <<ps>> <<conj seem>> reluctant to rise to the bait.
<<set _lust to 2 * _appeal>>
<<set _lust2 to _lust + 3>>
<<lust $eventnpc _lust _lust2>>
<<case "rival">>
<<psc>> <<conj stare>> at you, <<pp>> lip curling.
<<set _lust to 2 * _appeal>>
<<set _lust2 to _lust + 3>>
<<lust $eventnpc _lust _lust2>>
<<case "date" "fuckbuddy">>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj look>> you up and down deliberately, grinning at you.
<<else>>
<<psc>> <<conj shift>> uncomfortably, blushing as <<pp>> eyes are drawn to your body.
<</if>>
<<set _lust to 5 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<<case "hatefuck">>
<<psc>> <<conj smirk>> and <<conj 'let'>> <<pp>> eyes roam over your body.
<<set _lust to 5 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<<default>>
<<psc>> <<conj clear>> <<pp>> throat, giving you a once-over.
<<set _lust to 3 * _appeal>>
<<set _lust2 to _lust + 5>>
<<lust $eventnpc _lust _lust2>>
<</switch>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>>You murmur suggestively to <<anonorfirstname $eventnpc>>, your face warming as you couch your ideas in somewhat awkward metaphor.
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<set _actdesrel to setup.people.desired_relationship($eventnpc)>>
<<if _actdesrel is "fuckbuddy">><<set _desrel to "fuckbuddy">><</if>>
<<if setup.people.get_type($eventnpc) is "faculty" and !_alone>>
<<if setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gt 0>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>, glancing around.
<<else>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>.
<</if>>
<<switch _desrel>>
<<case "date" "fuckbuddy" "hatefuck">>
<<lust $eventnpc 15 30>>
<<default>>
<<lust $eventnpc 5 12>>
<</switch>>
<<elseif setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<<if setup.people.professor_intimacy($eventnpc) gt 0>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<psc $eventnpc>> <<conj listen>> to you calmly, a smirk growing on <<pp>> face.
<<default>>
<<psc $eventnpc>> <<conj blink>> at you as <<ps>> <<conj listen>>.
<</switch>>
<<lust $eventnpc 15 30>>
<<else>>
"This isn't appropriate, <<mrmiss>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>> quietly.
<<lust $eventnpc 5 10>>
<</if>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<switch _desrel>>
<<case "date">>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj smile>> at you. "Maybe we can explore this later..."
<<lust $eventnpc 15 30>>
<<else>>
<<psc>> <<conj smile>> at you. "I'm... I'm not sure I'm ready, but it is fun to talk about."
<<lust $eventnpc 15 25>>
<</if>>
<<case "fuckbuddy" "friend">>
<<psc>> <<conj smile>> at you. "I like the way you think."
<<lust $eventnpc 15 30>>
<<case "hatefuck" "rival">>
<<psc>> <<conj laugh>>. "Come on, say what you mean. Or I can show you later."
<<lust $eventnpc 15 30>>
<<default>>
<<psc>> just <<conj raise>> an eyebrow as <<ps>> <<conj listen>>.
<<lust $eventnpc 5 12>>
<</switch>>
<<else>>
<<switch _desrel>>
<<case "friend">>
<<psc>> <<conj chuckle>> uneasily. "Aw, sorry... I, um... I don't really think of you that way."
<<lust $eventnpc 2 7>>
<<case "rival">>
<<psc>> <<conj laugh>>. "Wow. Are you high or something?"
<<lust $eventnpc 5 12>>
<<case "date">>
<<if setup.people.willing_sex($eventnpc)>>
<<psc>> <<conj smile>> at you. "Maybe we can explore this later..."
<<lust $eventnpc 15 30>>
<<else>>
<<psc>> <<conj smile>> at you. "I'm... I'm not sure I'm ready, but it is fun to talk about."
<<lust $eventnpc 15 25>>
<</if>>
<<case "fuckbuddy">>
<<psc>> <<conj smile>> at you. "I like the way you think."
<<lust $eventnpc 15 30>>
<<case "hatefuck">>
<<psc>> <<conj laugh>>. "Come on, say what you mean. Or I can show you later."
<<lust $eventnpc 15 30>>
<<default>>
<<psc>> just <<conj raise>> an eyebrow as <<ps>> <<conj listen>>.
<<lust $eventnpc 5 12>>
<</switch>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>>You murmur sweet things to <<anonorfirstname $eventnpc>>, your words really more romantic than sexual.
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if setup.people.is_romantic_partner($eventnpc)>>
<<psc>> <<conj smile>> at you.
<<romance $eventnpc 15 30>>
<<elseif setup.people.get_type($eventnpc) is "faculty" and !_alone>>
<<if setup.people.is_professor($eventnpc) and setup.people.professor_intimacy($eventnpc) gt 0>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>, glancing around.
<<else>>
"This isn't appropriate, <<mrmiss $pc>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>>.
<</if>>
<<switch _desrel>>
<<case "date" "fuckbuddy">>
<<romance $eventnpc 8 20>>
<<default>>
<<romance $eventnpc 5 12>>
<</switch>>
<<elseif setup.people.is_professor($eventnpc)>>
<<set _profreact to setup.people.professor_reaction($eventnpc)>>
<<if setup.people.professor_intimacy($eventnpc) gt 0>>
<<switch _profreact>>
<<case "Disciplinarian Professor" "Intense Professor">>
<<psc $eventnpc>> <<conj shake>> <<pp>> head. "You have the wrong idea about what's happening here."
<<default>>
<<psc $eventnpc>> <<conj clear>> <<pp>> throat. "Whatever you're imagining... it... it can't happen."
<</switch>>
<<romance $eventnpc 8 12>>
<<else>>
"This isn't appropriate, <<mrmiss>> <<dlastname $pc>>," <<ps $eventnpc>> <<conj say>> quietly.
<<romance $eventnpc 2 5>>
<</if>>
<<elseif setup.people.is_romantic_partner($eventnpc)>>
<<switch _desrel>>
<<case "date" "friend" "fuckbuddy">>
<<psc>> <<conj smile>> at you. "You know... I feel the same way."
<<romance $eventnpc 15 25>>
<<default>>
<<psc>> <<conj nod>> along to your words, but says little.
<<romance $eventnpc 10 18>>
<</switch>>
<<else>>
<<switch _desrel>>
<<case "friend">>
<<psc>> <<conj chuckle>> uneasily. "Aw, sorry... I, um... I don't really think of you that way."
<<romance $eventnpc 2 5>>
<<case "rival">>
<<psc>> <<conj stare>> at you. "What the hell are you talking about?"
<<case "date">>
<<psc>> <<conj smile>> at you. "You know... I feel the same way."
<<romance $eventnpc 15 25>>
<<case "fuckbuddy">>
<<psc>> <<conj chuckle>> softly. "I'm not sure I feel quite the same way, but... I do think we could have fun together, you know?"
<<romance $eventnpc 4 8>>
<<lust $eventnpc 8 12>>
<<case "hatefuck">>
<<psc>> <<conj laugh>> unkindly. "You're really barking up the wrong tree."
<<default>>
<<psc>> just <<conj stare>> at you as <<ps>> <<conj listen>>.
<<romance $eventnpc 1 3>>
<</switch>>
<</if>>
<br><br>
<<include InPersonDialogueMenu>><<set _turnoff to setup.people.pc_pick_turnoff($eventnpc, false, true)>>
"I hate your _turnoff," you tell <<anonorfirstname $eventnpc>>. Brutal!
<br><br>
<<friendship $eventnpc -50 -75>>
<<romance $eventnpc -75 -100>>
<<if setup.Relationships.relationship_with($eventnpc) == "dominant">>
"You think you can talk that way to me?" <<ps>> <<conj say>>. "You might regret that."
<<anger $eventnpc 200>>
<<elseif setup.Relationships.relationship_with($eventnpc) == "submissive">>
<<psc>> <<conj look>> hurt, and <<conj lower>> <<pp>> eyes.
<<elseif setup.Relationships.relationship_type_with($eventnpc) == "romantic">>
<<psc>> <<conj stare>> at you, shocked. "What? Why... why would you say that?"
<<elseif setup.Relationships.relationship_type_with($eventnpc) == "friendship">>
<<psc>> <<conj stare>> at you. "That's... not cool, <<dfirstname $pc>>. What's up with you?"
<<elseif setup.Relationships.relationship_type_with($eventnpc) == "enemy">>
<<psc>> <<conj laugh>>. "Is that the best you've got?"
<<elseif setup.people.likes_pc($eventnpc)>>
<<psc>> <<conj look>> hurt, then angry. "Seems a little uncalled for..."
<<else>>
<<psc>> <<conj glare>> at you. "Fuck you."
<</if>>
<br><br>
<<include InPersonDialogueMenu>>"Wanna hang out sometime?" you ask.
<br><br>
<<set _agree to false>>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if _desrel is "fuckbuddy" or _desrel is "date" or _desrel is "friend" or setup.people.is_romantic_partner($eventnpc)>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($eventnpc, "hangout")>>
<<if !_activityresponse[0]>>
<<set _msg to _activityresponse[1]>>
<<unset $proposeddate>>
"_msg," <<ps $eventnpc>> <<conj say>>.
<br><br>
Hmm. Well, that's a shame.
<<else>>
<<anonorfirstnamec $eventnpc>> smiles. "Sure. What do you want to do?"
<<set _agree to true>>
<</if>>
<<elseif setup.people.is_niche($eventnpc, "The Classroom Harasser")>>
<<anonorfirstnamec $eventnpc>> laughs. Hard. "Oh, were you serious?" <<ps>> <<conj ask>> after managing to rein it in. "Absolutely not. Fuck off."
<<elseif _desrel is "hatefuck" or _desrel is "rival">>
<<anonorfirstnamec $eventnpc>> laughs. "Hang out... with you? Yeah, no."
<<friendship $eventnpc -10>>
<<else>>
<<anonorfirstnamec $eventnpc>> blinks at you. "Oh, uh... no, I'm gonna be busy, sorry."
<<friendship $eventnpc -5>>
<</if>>
<br><br>
<<if _agree>>
<<set $proposeddate to {type: "hangout", partner: $eventnpc}>>
<<include InPersonDialogueHangoutPlanning>>
<<else>>
<<include InPersonDialogueMenu>>
<</if>>"Hey... what do you think about a date sometime?" you ask.
<br><br>
<<if setup.people.willing_date($eventnpc)>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($eventnpc, "date")>>
<<if !_activityresponse[0]>>
<<set _msg to _activityresponse[1]>>
<<unset $proposeddate>>
"_msg," <<ps $eventnpc>> <<conj say>>.
<br><br>
Hmm. Well, that's a shame.
<<else>>
<<anonorfirstnamec $eventnpc>> smiles. "Yes! Sounds fun. What should we do?"
<<set _agree to true>>
<</if>>
<<elseif setup.people.is_niche($eventnpc, "The Classroom Harasser")>>
<<anonorfirstnamec $eventnpc>> shoots you a look. "The only date we're going to be on involves my foot and your ass. Fuck off."
<<elseif _desrel is "fuckbuddy">>
<<anonorfirstnamec $eventnpc>> looks at you. "I kind of want to just keep this casual, you know?"
<<elseif _desrel is "friend">>
"Oh, uh..." <<anonorfirstnamec $eventnpc>> scratches <<pp>> cheek. "I... I don't want you to have the wrong idea... I just... kind of don't think of you that way. Sorry..."
<<elseif _desrel is "hatefuck">>
<<anonorfirstnamec $eventnpc>> laughs. "What? Uh... no, I don't want to date you."
<<friendship $eventnpc -15>>
<<elseif _desrel is "rival">>
<<anonorfirstnamec $eventnpc>> stares at you. "What are you, drunk?"
<<friendship $eventnpc -25>>
<<else>>
<<anonorfirstnamec $eventnpc>> blinks at you. "Oh, uh... no, I'm gonna be busy, sorry."
<<friendship $eventnpc -5>>
<</if>>
<br><br>
<<if _agree>>
<<set $proposeddate to {type: "date", partner: $eventnpc}>>
<<include InPersonDialogueHangoutPlanning>>
<<else>>
<<include InPersonDialogueMenu>>
<</if>><<gethangoutactivities>>
<<for _choice range Object.keys(_activities)>>
<<if (!_activities[_choice].studentonly or setup.people.get_type($eventnpc) is "student") and (!_activities[_choice].relationships or _activities[_choice].relationships.includes(setup.Relationships.relationship_with($eventnpc)) and (!_activities[_choice].types or _activities[_choice].types.includes($proposeddate.type))) and (!_activities[_choice].group or !setup.group_hangout_scheduled())>>
<<capture _choice>>
<<set _linkname to _choice.toUpperFirst()>>
<<link _linkname InPersonDialogueHangoutPlanningTime>>
<<if !_activities>>
<<gethangoutactivities>>
<</if>>
<<set _activityinfo to _activities[_choice]>>
<<set $header to "You suggest that you " + _choice + ".">>
<<set $proposeddate.activity to _choice>>
<<set $proposeddate.location to _activityinfo.location>>
<<set $proposeddate.locmsg to _activityinfo.locmsg>>
<<set $proposeddate.daytime to _activityinfo.daytime>>
<</link>><br>
<</capture>>
<</if>>
<</for>>
<<link "Never mind" InPersonDialogueOngoing>>
<<set $header to "No good ideas come to mind. You ask <<po $eventnpc>> to forget you said anything.">>
<<unset $proposeddate>>
<</link>><<gethangoutactivities>>
<<set _activityinfo to _activities[$proposeddate.activity]>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($proposeddate.partner, $proposeddate.type, _activityinfo)>>
<<if !_activityresponse[0]>>
<<set _msg to _activityresponse[1]>>
<<unset $proposeddate>>
"_msg," <<ps $eventnpc>> <<conj say>>.
<br><br>
Hmm. Well, that's a shame.
<br><br>
<<include InPersonDialogueMenu>>
<<else>>
"Okay, what time?" <<ps $eventnpc>> <<conj ask>>.
<br><br>
<<if $proposeddate.daytime>>
<<set $proposeddate.time to 11>>
<<set $proposeddate.endtime to 20>>
<<set _todayhour to 18>>
<<set _todaylink to "Today">>
<<set _tomorrowlink to "Tomorrow">>
<<else>>
<<set $proposeddate.time to 18>>
<<set $proposeddate.endtime to 24>>
<<set _todayhour to 23>>
<<set _todaylink to "Tonight">>
<<set _tomorrowlink to "Tomorrow night">>
<</if>>
<<set _hour to $proposeddate.time gt 12 ? $proposeddate.time - 12 : $proposeddate.time>>
<<if $hour lt _todayhour>>
<<link _todaylink InPersonDialogueOngoing>>
<<set $proposeddate.day to $gameday>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($proposeddate.partner, $proposeddate.type, _activityinfo, $proposeddate.day)>>
<<if !_activityresponse[0]>>
<<set $header to '<<anonorfirstnamec $eventnpc>> considers. "' + _activityresponse[1] + '."'>>
<<else>>
<<if $hour gte _todayhour and $hour lt $proposeddate.endtime>>
<<set $header to '<<anonorfirstnamec $eventnpc>> considers. "Short notice but... sure, I\'m not doing much. '>>
<<else>>
<<set $header to '<<anonorfirstnamec $eventnpc>> considers. "Sure, I can do it anytime after ' + _hour + '. '>>
<</if>>
<<set _msg to $proposeddate.locmsg>>
<<if !/[!.,?]$/.test(_msg)>>
<<set _msg += ".">>
<</if>>
<<set $header += _msg + '" <<getnumber $eventnpc>>'>>
<<if !$planneddate>>
<<set $planneddate to [$proposeddate]>>
<<else>>
<<run $planneddate.push($proposeddate)>>
<</if>>
<</if>>
<<unset $proposeddate>>
<</link>><br>
<</if>>
<<link _tomorrowlink InPersonDialogueOngoing>>
<<set $proposeddate.day to $gameday + 1>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($proposeddate.partner, $proposeddate.type, _activityinfo, $proposeddate.day)>>
<<if !_activityresponse[0]>>
<<set $header to '<<anonorfirstnamec $eventnpc>> considers. "' + _activityresponse[1] + '."'>>
<<else>>
<<set $header to '<<anonorfirstnamec $eventnpc>> says, "Sounds great, I\'m free anytime after ' + _hour + '. '>>
<<set _msg to $proposeddate.locmsg>>
<<if !/[!.,?]$/.test(_msg)>>
<<set _msg += ".">>
<</if>>
<<set $header += _msg + '" <<getnumber $eventnpc>>'>>
<<if !$planneddate>>
<<set $planneddate to [$proposeddate]>>
<<else>>
<<run $planneddate.push($proposeddate)>>
<</if>>
<</if>>
<<unset $proposeddate>>
<</link>><br>
<<set _weekday to setup.Time.weekday()>>
<<set _plusweekday to ["Friday", "Thursday", "Wednesday", "Tuesday", "Monday"].indexOf(_weekday)>>
<<if ["Monday", "Tuesday", "Wednesday"].includes(_weekday)>>
<<link "Friday" InPersonDialogueOngoing>>
<<set $proposeddate.day to $gameday + _plusweekday>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($proposeddate.partner, $proposeddate.type, _activityinfo, $proposeddate.day)>>
<<if !_activityresponse[0]>>
<<set $header to '<<anonorfirstnamec $eventnpc>> considers. "' + _activityresponse[1] + '."'>>
<<else>>
<<set $header to '<<anonorfirstnamec $eventnpc>> says, "Friday it is! Let\'s plan for sometime after ' + _hour + '. '>>
<<set _msg to $proposeddate.locmsg>>
<<if !/[!.,?]$/.test(_msg)>>
<<set _msg += ".">>
<</if>>
<<set $header += _msg + '" <<getnumber $eventnpc>>'>>
<<if !$planneddate>>
<<set $planneddate to [$proposeddate]>>
<<else>>
<<run $planneddate.push($proposeddate)>>
<</if>>
<</if>>
<<unset $proposeddate>>
<</link>><br>
<</if>>
<<if ["Monday", "Tuesday", "Wednesday", "Thursday"].includes(_weekday)>>
<<link "Saturday" InPersonDialogueOngoing>>
<<set $proposeddate.day to $gameday + _plusweekday + 1>>
<<set _activityresponse to setup.Relationships.react_to_activity_proposal($proposeddate.partner, $proposeddate.type, _activityinfo, $proposeddate.day)>>
<<if !_activityresponse[0]>>
<<set $header to '<<anonorfirstnamec $eventnpc>> considers. "' + _activityresponse[1] + '."'>>
<<else>>
<<set $header to '<<anonorfirstnamec $eventnpc>> says, "Saturday it is! Let\'s plan for sometime after ' + _hour + '. '>>
<<set _msg to $proposeddate.locmsg>>
<<if !/[!.,?]$/.test(_msg)>>
<<set _msg += ".">>
<</if>>
<<set $header += _msg + '" <<getnumber $eventnpc>>'>>
<<if !$planneddate>>
<<set $planneddate to [$proposeddate]>>
<<else>>
<<run $planneddate.push($proposeddate)>>
<</if>>
<</if>>
<<unset $proposeddate>>
<</link>><br>
<</if>>
<<link "Never mind" InPersonDialogueOngoing>>
<<set $header to "On second thought, you'll probably be busy. You ask <<po $eventnpc>> to forget you said anything.">>
<<unset $proposeddate>>
<</link>>
<</if>>You clear your throat, your face already feeling warm. "I... I kind of have a crush," you begin.
<br><br>
You confess your budding feelings to <<firstname $eventnpc>>, telling <<po>> exactly how you feel.
<<beconfident>>
<br><br>
<<set _desrel to setup.people.desired_relationship($eventnpc, false)>>
<<if setup.people.willing_date($eventnpc) or _desrel is "date">>
<<set _hasdate to false>>
<<if $planneddate>>
<<for _date range $planneddate>>
<<if _date.partner is $eventnpc and _date.activity.indexOf("hang out") < 0>>
<<if _date.type is "date">>
<<anonorfirstnamec $eventnpc>> smiles. "I... I like you too, actually. I'm really looking forward to our date."
<<set _hasdate to true>>
<<break>>
<<else>>
<<anonorfirstnamec $eventnpc>> smiles. "I... I like you too, actually. Hey... let's just say our current plans are a date... and we can see how that goes."
<<set _hasdate to true>>
<<set _date.type to "date">>
<<break>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if !_hasdate>>
<<anonorfirstnamec $eventnpc>> smiles. "I... I like you too, actually. Hey... let's go out to dinner... say, tomorrow night... and we'll see how things go."
<br><br>
<<romance $eventnpc 100>>
<<link "Yes" InPersonDialogueConfessCrushDate>><</link>>
<br>
<<link "No" InPersonDialogueConfessCrushNoDate>><</link>>
<<set _date to true>>
<<else>>
<br><br>
<<include InPersonDialogueMenu>>
<</if>>
<<elseif _desrel is "fuckbuddy">>
<<anonorfirstnamec $eventnpc>> smiles at you. "You're sweet. I don't want anything serious, I'm afraid... but I do like you, <<firstname $pc>>. You're fun."
<<romance $eventnpc 50>>
<<friendship $eventnpc 25>>
<<elseif _desrel is "friend">>
"Oh? Uh..." <<anonorfirstnamec $eventnpc>> shifts around a bit. "I... I don't feel the same. I'm sorry. But... I would like to be your friend."
<<romance $eventnpc 20>>
<<friendship $eventnpc 25>>
<<elseif _desrel is "hatefuck">>
<<anonorfirstnamec $eventnpc>> laughs for a long time. <<psc>> finally <<conj stop>>, <<conj look>> at you for a moment, then <<conj 'continue'>> laughing.
<br><br>
After a while, <<pss>> had enough. Wiping a tear from <<pp>> eye, <<ps>> <<conj say>>, "Yeah... whatever the hell you've been dreaming up, forget it. But hey... I'm always good for a fuck." <<psc>> <<conj smirk>>.
<<friendship $eventnpc -15>>
<<lust $eventnpc 25>>
<<elseif _desrel is "rival">>
<<anonorfirstnamec $eventnpc>> glares at you. "What the fuck are you telling me this for? I don't like you. Simple as that."
<<friendship $eventnpc -25>>
<<else>>
<<likes $eventnpc>>
<<anonorfirstnamec $eventnpc>> smiles sadly at you. "Sorry. I... don't feel the same way. But... I mean, you seem nice, so... maybe we can be friends."
<<friendship $eventnpc 10>>
<<dislikes>>
<<anonorfirstnamec $eventnpc>> blinks at you. "Sorry, but... I definitely don't feel the same way."
<<friendship $eventnpc -10>>
<</likes>>
<</if>>
<<if !_date>>
<br><br>
You blush, mortified. "Sorry," you mutter. <<dalterneed Humiliation 200 true>>
<br><br>
<<include InPersonDialogueMenu>>
<</if>>"Umm... sorry, no," you murmur.
<br><br>
<<anonorfirstnamec $eventnpc>> laughs. "Really giving me some mixed signals here. I guess... let me know if you figure it out."
<<romance $eventnpc -50>>
<br><br>
<<include InPersonDialogueMenu>>"Yes!" you reply.
<br><br>
<<anonorfirstnamec $eventnpc>> smiles. "Cool. We'll hit up The Legislator, just past QuickieBurger. Meet me there tomorrow evening."
<<set $proposeddate to {type: "date", partner: $eventnpc}>>
<<gethangoutactivities>>
<<set _choice to "have dinner">>
<<set _activityinfo to _activities[_choice]>>
<<set $proposeddate.activity to _choice>>
<<set $proposeddate.location to _activityinfo.location>>
<<set $proposeddate.locmsg to _activityinfo.locmsg>>
<<set $proposeddate.daytime to _activityinfo.daytime>>
<<set $proposeddate.day to $gameday + 1>>
<<set $proposeddate.time to 18>>
<<set $proposeddate.endtime to 24>>
<<if $planneddate>>
<<run $planneddate.push($proposeddate)>>
<<else>>
<<set $planneddate to [$proposeddate]>>
<</if>>
<<unset $proposeddate>>
<br><br>
<<include InPersonDialogueMenu>>You smile warmly at <<anonorfullnamerel $eventnpc>>. How do you want to show your affection toward <<po>>?
<br><br>
<<link "Give a hug" InPersonActionAffectionHug>><</link>>
<br>
<<if setup.people.get_attitude($eventnpc, "romance") gte 333>>
<<link "Give a kiss" InPersonActionAffectionKiss>><</link>>
<br>
<</if>>
/*
<<if setup.people.get_attitude($eventnpc, "romance") gte 666>>
<<link "Ask to make out" InPersonActionAffectionMakeout>><</link>>
<br>
<</if>>
*/
/*
<<if setup.Relationships.relationship_with($eventnpc) is "dominant">>
<<link "Ask for aftercare" InPersonActionAffectionAftercare>><</link>>
<br>
<</if>>
*/
/*
<<link "Talk about something <<ps>> <<conj like>>" InPersonActionAffectionInfodump>><</link>>
<br>
*/
/*
<<link "Give a gift" InPersonActionAffectionGift>><</link>>
<br>
*/
<<link "Never mind" InPersonDialogueOngoing>>
<<set $header to "You decide not to say anything.">>
<</link>>"Can I get a hug?" you ask.
<br><br>
<<if setup.people.get_attitude($eventnpc, "romance") lt 100 or setup.people.get_attitude($eventnpc, "suspicion") gte 250>>
<<psc $eventnpc>> <<conj purse>> <<pp>> lips. "Um, sorry... Maybe later?"
<br><br>
You try to keep smiling. "Oh, y-yeah. Sure, later."
<br><br>
An awkward silence passes between you, and you have a feeling you should go. <<dalterneed Relaxation -20 true>> <<romance $eventnpc -10>>
<<elseif setup.people.has_any_inclination($eventnpc, "forward")>>
"Of course! There's no need to ask," <<ps $eventnpc>> <<conj say>> as <<ps>> <<conj pull>> you in for a big hug.
<br><br>
You relax into <<pp>> embrace, hugging <<po>> back. "Thanks... I really needed that." <<dalterneed Relaxation 15 true>> <<dalterneed Attention 15>><<socialize 15>> <<romance $eventnpc 10>>
<br><br>
<<dfirstname $egventnpc>> gives you a kiss on the temple as you pull away. "Anytime."
<<elseif setup.people.has_any_inclination($eventnpc, "shy") or setup.people.has_any_inclination($eventnpc, "submissive")>>
"Yeah, that sounds nice." <<psc $eventnpc>> <<conj give>> you a shy smile as you come in for a hug.
<br><br>
You put your arms around <<dfirstname $eventnpc>>, squeezing <<po>> close. <<dalterneed Relaxation 15 true>> <<dalterneed Attention 15>><<socialize 15>> <<romance $eventnpc 10>>
<br><br>
<<psc>> <<conj pull>> away reluctantly after a few moments. "I think we both needed that..."
<<else>>
"Sure! I'm always free for a hug." <<psc $eventnpc>> <<conj give>> you a warm smile as you step in for a hug.
<br><br>
<<psc>> <<conj squeeze>> you close, and you melt into the embrace. <<dalterneed Relaxation 15 true>> <<dalterneed Attention 15>><<socialize 15>> <<romance $eventnpc 10>>
<br><br>
After a few moments have passed, <<ps>> <<conj 'let'>> you pull away when you're ready.
<br><br>
"How was that?" <<dfirstname $eventnpc>> asks.
<br><br>
"Perfect," you sigh.
<</if>>
<br><br>
<<link "Continue" InPersonDialogueOngoing>><</link>>You stare at <<firstname $eventnpc>>'s lips. "Can I kiss you?"
<br><br>
<<if setup.people.get_attitude($eventnpc, "romance") lt 100 or setup.people.get_attitude($eventnpc, "suspicion") gte 250>>
<<psc>> <<conj purse>> <<pp>> lips. "Um, sorry... Maybe later?"
<br><br>
You try to keep smiling. "Oh, y-yeah. Sure, later."
<br><br>
An awkward silence passes between you, and you have a feeling you should go. <<dalterneed Relaxation -20 true>> <<romance $eventnpc -10>>
<<elseif setup.people.has_any_inclination($eventnpc, "forward")>>
<<psc>> <<conj grin>> and <<conj lean>> towards you to meet you in the kiss. Warm hands cup your face, and you melt into them. <<dalterneed Relaxation 15 true>> <<dalterneed Attention 15>><<socialize 15>> <<romance $eventnpc 15>>
<br><br>
Eventually, you have to split apart, but you do so with a smile. "Thanks."
<br><br>
<<dfirstname $eventnpc>>'s hands leave your face as <<ps>> <<conj hum>>, "Yeah. Anytime."
<<elseif setup.people.has_any_inclination($eventnpc, "shy") or setup.people.has_any_inclination($eventnpc, "submissive")>>
"Yeah, that sounds nice." <<psc>> <<conj give>> you a shy smile, then <<conj lean>> in to meet you for a soft kiss. <<dalterneed Relaxation 15 true>> <<dalterneed Attention 15>><<socialize 15>> <<romance $eventnpc 15>>
<<else>>
"Aw, <<nickname $pc>>, you don't have to ask." <<psc $eventnpc>> <<conj smile>> at you and <<conj lean>> in, and you share a kiss. <<dalterneed Relaxation 15 true>> <<dalterneed Attention 15>><<socialize 15>> <<romance $eventnpc 15>>
<</if>>
<br><br>
<<link "Continue" InPersonDialogueOngoing>><</link>>You go on an extended rumination about how <<firstname $eventnpc>> should probably break up with <<pp>> partner.
<br><br>
<<likes $eventnpc>>
<<if setup.Relationships.is_cheating($eventnpc)>>
<<psc>> <<conj look>> at you. "Why would I do that?"
<br><br>
Hmm. Why indeed. It's not like you're in any position to replace <<pp>> partner.
<br><br>
<<include InPersonDialogueMenu>>
<<else>>
<<if setup.people.get_attitude($eventnpc, "romance") gte 600 or setup.people.get_attitude($eventnpc, "lust") gte 600>>
<<if State.random() lte 0.6>>
<<psc>> <<conj sigh>> deeply. "Maybe... but... that's a pretty big deal, you know?"
<br><br>
Seems like <<ps>> <<conj 'aren\'t'>> ready to break up...
<br><br>
<<include InPersonDialogueMenu>>
<<else>>
<<set _partner to setup.Relationships.partner($eventnpc)>>
<<psc>> <<conj take>> a breath. "I... yeah. Y-you... make a good argument... I guess I should talk to <<po _partner>>..."
<br><br>
<<psc $eventnpc>> <<conj walk>> away. Huh.
<<breakup $eventnpc>>
<<run $peopleatlocation.delete($eventnpc)>>
<<friendship _partner -800>>
<<romance _partner -1000>>
<br><br>
<<continuelink>>
<</if>>
<<else>>
<<psc>> <<conj look>> at you. "Why would I do that?"
<br><br>
Hmm. Why indeed. <<psc>> might need to be a bit more interested in <i>you</i> first.
<br><br>
<<include InPersonDialogueMenu>>
<</if>>
<</if>>
<<dislikes>>
<<psc>> <<conj stare>> at you. "What the hell are you talking about?"
<<friendship $eventnpc -50>>
<br><br>
<<include InPersonDialogueMenu>>
<</likes>>What gift do you want to give <<anonorfullnamerel $eventnpc>>?
<br><br>
<<selectgift $eventnpc>>The following passage(s) may have content falling under this tag:
<br><br>
<<set _kinfo to setup.kink_content[$kinkconfirm.kink]>>
<b><<= _kinfo.name>></b>: <<= _kinfo.description>>
<br><br>
Do you wish to continue?
<br>
<<set _link to {text: "Proceed", link: $kinkconfirm.passage, emoji: '✔️'}>>
<<link _link>><<unset $kinkconfirm>><</link>>
<br>
<<set _link to {text: "Abort", link: $lastlocpassage, emoji: '❌'}>>
<<link _link>>
<<set $nextbaseeventchance to 0>>
<<unset $kinkconfirm>>
<<if $lasteventtags and $lasteventtags.includes("retrieve laundry")>>
<<set $header to "You grab your warm, dry, freshly cleaned clothes.">>
<<run setup.retrieve_laundry()>>
<</if>>
<</link>><<set $makeout.rounds++>>
<<set _p to $makeout.partner>>
<<if !$makeout.partner_expanded>>
<<set $makeout.partner_expanded to new Person({person: _p})>>
<</if>>
<<set _pe to $makeout.partner_expanded>>
<<if $makeout.pcact is "">>
You and <<anonorfullname _p>> get very close, the heat of your bodies mingling.
<<if !setup.people.gender_known(_p)>>
<<set _gender to $people[setup.people.get_name(_p)].species[1]>>
<<if _gender is "transgender female">>
<<highlight sexy>>As you're pressed up against <<po>>, it's clear <<pss>> a trans girl.<</highlight>>
<<elseif _gender is "transgender male">>
<<highlight sexy>>As you're pressed up against <<po>>, it's clear <<pss>> a trans guy.<</highlight>>
<</if>>
<<run setup.people.learn_gender(_p)>>
<</if>>
<<elseif $makeout.pcact is "name">>
You ask <<anonorfullname _p>> <<pp>> name.
<<if setup.people.desired_relationship(_p) is "hatefuck" or setup.people.desired_relationship(_p) is "rival">>
<<psc _p>> laughs. "Who cares? I sure don't give a fuck what your name is."
<<elseif setup.people.desired_relationship(_p) is "date">>
<<psc _p>> <<conj smile>>. "<<highlight>><<dfirstname _p>><</highlight>>," <<ps>> <<conj tell>> you. "Yours?" You tell <<po>>, and <<ps>> softly <<conj repeat>>, "<<dfirstname $pc>>..."<<run setup.people.become_known(_p)>>
<<else>>
<<psc>> <<conj grin>>. "Oh yeah. Almost left that too late, huh? I'm <<highlight>><<dfirstname _p>><</highlight>>." You tell <<po>> your name too.<<run setup.people.become_known(_p)>><<set $makeout.partner_expanded.name_known to true>>
<</if>>
<<elseif $makeout.pcact is "kiss">>
You press a kiss to <<anonorfullname _p>>'s lips.
<<run setup.record_sex_memory(_p, "kissed")>>
<<elseif $makeout.pcact is "grope">>
You run your hands over <<anonorfullname _p>>'s body.
<<if $makeout.npcarousal lt 100>>
<<run _pe.add_arousal(100, 900)>>
<<set $makeout.npcarousal to 100>>
<<if setup.people.has_part(_p, "penis")>>
You can feel <<pp>> cock getting hard.
<</if>>
<</if>>
<<elseif $makeout.pcact is "grind">>
You rub yourself against <<anonorfullname _p>>.
<<if $makeout.npcarousal lt 100>>
<<set $makeout.npcarousal to 100>>
<<run _pe.add_arousal(100, 900)>>
<<if setup.people.has_part(_p, "penis")>>
You can feel <<pp>> cock getting hard.
<</if>>
<<run setup.people.learn_gender(_p)>>
<<else>>
<<run _pe.add_arousal(100, 900)>>
<<set $makeout.npcarousal to 200>>
<</if>>
<<elseif $makeout.pcact is "remove own top">>
<<highlight narrate-sexact-clothes>>You take off your <<shirt $pc>><<if $pc.has_breasts() and !$pc.wearing_bra()>>, exposing your <<breasts $pc>><</if>>.<</highlight>>
<<for _i to 0; _i lt 3; _i++>>
<<if $pc.shirt_equiv()>>
<<run $pc.remove_clothing($pc.shirt_equiv())>>
<</if>>
<</for>>
<<if $pc.has_breasts() && !$pc.is_part_covered("breasts")>>
<<dirtytalktits _p>>
<</if>>
<<elseif $makeout.pcact is "remove own bra">>
<<highlight narrate-sexact-clothes>>You remove your <<bra $pc>><<if $pc.has_breasts()>>, exposing your <<breasts $pc>><</if>>.<</highlight>>
<<run $pc.remove_clothing($pc.underwear_covering("chest"))>>
<<if $pc.has_breasts() && !$pc.is_part_covered("breasts")>>
<<dirtytalktits _p>>
<</if>>
<<elseif $makeout.pcact is "remove own pants">>
<<highlight narrate-sexact-clothes>>You take off your <<pants $pc>><<if !$pc.wearing_underwear()>>, exposing your <<if $pc.has_part("vagina")>><<pussy $pc>><<else>><<cock $pc>><</if>><</if>>.<</highlight>>
<<run $pc.remove_clothing($pc.pants_equiv())>>
<<if !$pc.is_part_covered("crotch")>>
<<if $pc.has_part("vagina")>>
<<dirtytalkpussy _p>>
<<else>>
<<dirtytalkcock _p>>
<</if>>
<</if>>
<<elseif $makeout.pcact is "remove own underwear">>
<<highlight narrate-sexact-clothes>>You pull down your <<underwear $pc>>, exposing your <<if $pc.has_part("vagina")>><<pussy $pc>><<else>><<cock $pc>><</if>>.<</highlight>>
<<run $pc.remove_clothing($pc.underwear_covering("crotch"))>>
<<if !$pc.is_part_covered("crotch")>>
<<if $pc.has_part("vagina")>>
<<dirtytalkpussy _p>>
<<else>>
<<dirtytalkcock _p>>
<</if>>
<</if>>
<<elseif $makeout.pcact is "remove partner top">>
<<highlight narrate-sexact-clothes>>You take off <<pp _pe>> <<shirt _pe>><<if _pe.has_breasts() and !_pe.wearing_bra()>>, exposing <<pp>> <<breasts _pe>><</if>>.<</highlight>>
<<for _i to 0; _i lt 3; _i++>>
<<if _pe.shirt_equiv()>>
<<run _pe.remove_clothing(_pe.shirt_equiv())>>
<</if>>
<</for>>
<<elseif $makeout.pcact is "remove partner bra">>
<<highlight narrate-sexact-clothes>>You remove <<pp _pe>> <<bra _pe>><<if _pe.has_breasts()>>, exposing <<pp>> <<breasts _pe>><</if>>.<</highlight>>
<<run _pe.remove_clothing(_pe.underwear_covering("chest"))>>
<<elseif $makeout.pcact is "remove partner pants">>
<<highlight narrate-sexact-clothes>>You take off <<pp _pe>> <<pants _pe>><<if !_pe.wearing_underwear()>>, exposing <<pp>> <<if _pe.has_part("vagina")>><<pussy _pe>><<else>><<cock _pe>><</if>><</if>>.<</highlight>>
<<run _pe.remove_clothing(_pe.pants_equiv())>>
<<elseif $makeout.pcact is "remove partner underwear">>
<<highlight narrate-sexact-clothes>>You pull down <<pp _pe>> <<underwear _pe>>, exposing <<pp>> <<if _pe.has_part("vagina")>><<pussy _pe>><<else>><<cock _pe>><</if>>.<</highlight>>
<<run _pe.remove_clothing(_pe.underwear_covering("crotch"))>>
<</if>>
<<set _attitude to "normal">>
<<if setup.people.has_any_inclination(_p, setup.archetypes.inclination_sets.forceful) or setup.people.desired_relationship(_p) is "hatefuck">>
<<set _attitude to "forceful">>
<<elseif setup.people.has_any_inclination(_p, setup.archetypes.inclination_sets.dominant)>>
<<set _attitude to "dominant">>
<<elseif setup.people.has_any_inclination(_p, setup.archetypes.inclination_sets.submissive)>>
<<set _attitude to "submissive">>
<<elseif setup.people.has_any_inclination(_p, setup.archetypes.inclination_sets.passive)>>
<<set _attitude to "shy">>
<<elseif setup.people.has_any_inclination(_p, setup.archetypes.inclination_sets.active)>>
<<set _attitude to "active">>
<</if>>
<<set _aboost to false>>
<<if _attitude is "forceful">>
<<psc _p>> <<conj run>> <<pp>> hands over your body, firmly groping you, almost claiming you. You get the distinct impression that if you take this much further, <<highlight ungood>>you may not be in control<</highlight>>.
<<set _aboost to true>>
<<elseif (_attitude is "dominant" or _attitude is "active") and $makeout.rounds gte 1>>
<<psc _p>> <<conj run>> <<pp>> hands over your body, groping you, exploring you.
<<set _aboost to true>>
<<elseif (_attitude is "normal" or _attitude is "dominant" or _attitude is "active") and ($makeout.pcact is "grope" or $makeout.pcact is "grind")>>
<<psc _p>> <<conj run>> <<pp>> hands over your body, groping you, exploring you.
<<set _aboost to true>>
<<elseif setup.people.sexually_passive(_p)>>
<<psc _p>> <<conj kiss>> you, <<pp>> tongue exploring your lips. <<psc>> <<conj seem>> a bit shy... <<highlight ungood>>you'll probably have to take the lead<</highlight>> to get this to go anywhere.
<<run setup.record_sex_memory(_p, "kissed")>>
<<else>>
<<psc _p>> <<conj kiss>> you, <<pp>> tongue delving into your mouth.
<<run setup.record_sex_memory(_p, "kissed")>>
<</if>>
<<if $makeout.rounds gt 1>>
<<if (_attitude is "dominant" or _attitude is "forceful" or _attitude is "active" or State.random() lt 0.5) and _attitude isnot "shy" and _attitude isnot "submissive">>
<<if $pc.wearing_top() and _pe.skillleveled("Disinhibition", 2)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj take>> off your <<shirt $pc>><<if $pc.has_breasts() and !$pc.wearing_bra()>>, exposing your <<breasts $pc>><</if>>.<</highlight>>
<<for _i to 0; _i lt 3; _i++>>
<<if $pc.shirt_equiv()>>
<<run $pc.remove_clothing($pc.shirt_equiv())>>
<</if>>
<</for>>
<<if $pc.has_breasts() && !$pc.is_part_covered("breasts")>>
<<dirtytalktits _p>>
<</if>>
<<elseif $pc.wearing_bra() and _pe.skillleveled("Disinhibition", 4)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj remove>> your <<bra $pc>><<if $pc.has_breasts()>>, exposing your <<breasts $pc>><</if>>.<</highlight>>
<<run $pc.remove_clothing($pc.underwear_covering("chest"))>>
<<if $pc.has_breasts() && !$pc.is_part_covered("breasts")>>
<<dirtytalktits _p>>
<</if>>
<<elseif $pc.wearing_pants() and _pe.skillleveled("Disinhibition", 3)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj take>> off your <<pants $pc>><<if !$pc.wearing_underwear()>>, exposing your <<if $pc.has_part("vagina")>><<pussy $pc>><<else>><<cock $pc>><</if>><</if>>.<</highlight>>
<<run $pc.remove_clothing($pc.pants_equiv())>>
<<if !$pc.is_part_covered("crotch")>>
<<if $pc.has_part("vagina")>>
<<dirtytalkpussy _p>>
<<else>>
<<dirtytalkcock _p>>
<</if>>
<</if>>
<<elseif $pc.wearing_underwear() and _pe.skillleveled("Disinhibition", 5)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj pull>> down your <<underwear $pc>>, exposing your <<if $pc.has_part("vagina")>><<pussy $pc>><<else>><<cock $pc>><</if>>.<</highlight>>
<<run $pc.remove_clothing($pc.underwear_covering("crotch"))>>
<<if !$pc.is_part_covered("crotch")>>
<<if $pc.has_part("vagina")>>
<<dirtytalkpussy _p>>
<<else>>
<<dirtytalkcock _p>>
<</if>>
<</if>>
<</if>>
<<elseif (_attitude is "submissive" or State.random() lt 0.5) and _attitude isnot "shy">>
<<if _pe.wearing_top() and _pe.skillleveled("Disinhibition", 2)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj take>> off <<pp _pe>> <<shirt _pe>><<if _pe.has_breasts() and !_pe.wearing_bra()>>, exposing <<pp>> <<breasts _pe>><</if>>.<</highlight>>
<<for _i to 0; _i lt 3; _i++>>
<<if _pe.shirt_equiv()>>
<<run _pe.remove_clothing(_pe.shirt_equiv())>>
<</if>>
<</for>>
<<elseif _pe.wearing_bra() and _pe.skillleveled("Disinhibition", 4)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj remove>> <<pp _pe>> <<bra _pe>><<if _pe.has_breasts()>>, exposing <<pp>> <<breasts _pe>><</if>>.<</highlight>>
<<run _pe.remove_clothing(_pe.underwear_covering("chest"))>>
<<elseif _pe.wearing_pants() and _pe.skillleveled("Disinhibition", 3)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj take>> off <<pp _pe>> <<pants _pe>><<if !_pe.wearing_underwear()>>, exposing <<pp>> <<if _pe.has_part("vagina")>><<pussy _pe>><<else>><<cock _pe>><</if>><</if>>.<</highlight>>
<<run _pe.remove_clothing(_pe.middlewear_covering("crotch") || _pe.outerwear_covering("crotch"))>>
<<elseif _pe.wearing_underwear() and _pe.skillleveled("Disinhibition", 5)>>
<<highlight narrate-sexact-clothes>><<psc _pe>> <<conj pull>> down <<pp _pe>> <<underwear _pe>>, exposing <<pp>> <<if _pe.has_part("vagina")>><<pussy _pe>><<else>><<cock _pe>><</if>>.<</highlight>>
<<run _pe.remove_clothing(_pe.underwear_covering("crotch"))>>
<</if>>
<</if>>
<</if>>
<<if $pc.has_breasts() and !$pc.is_part_covered("breasts") and _attitude isnot "shy">>
<<psc>> <<conj palm>> one of your breasts, squeezing it.
<<run $pc.add_arousal(50, 800)>>
<</if>>
<<if _aboost>>
<<set _adiff to 100 - $pc.arousal()>>
<<if _adiff gt 0>>
<<alterneed Arousal _adiff>> <<dalterneed Arousal 100>>
<<if $pc.has_part("penis")>>
Your cock thickens, growing hard. <<if $pc.virgin() and $virginity.includes("anus")>>You feel nervous excitement as you wonder if you're about to lose your virginity.<</if>>
<<else>>
You feel an ache between your legs, your <<dpussy $pc>> getting wet. <<if $pc.virgin() and setup.people.has_part(_p, "penis")>>With a nervous, naughty thrill, you realize you could be losing your virginity in a matter of moments, if you wanted.<</if>>
<</if>>
<<if setup.people.is_virgin(_p) and !setup.people.has_told_virgin(_p)>>
<<switch _attitude>>
<<case "shy" "submissive">>
"This... this is my first time," <<ps _p>> <<conj whisper>>.
<<case "active" "normal">>
"This is my first time," <<ps _p>> <<conj murmur>>.
<</switch>>
<<set _pname to setup.people.get_name(_p)>>
<<run setup.people.set_told_virgin(_p)>>
<</if>>
<</if>>
<</if>>
<br><br>
<<if $makeout.rounds gte 3 and _attitude isnot "shy">>
<<ppc _p>> touch is getting more intimate as <<ps>> <<conj try>> to take things further.<br>
<br>
<<link "Go with it" EncounterRound>><<run setup.encounter_from_makeout()>><</link>><br>
<<else>>
<<set _pronouns to setup.people.pronouns(_p)>><<set _po to _pronouns.po>>
<<if !setup.people.is_known(_p)>>
<<set _linkname to "Ask " + _pronouns.pp + " name">>
<<link _linkname Makeout>><<set $makeout.pcact to "name">><</link>>
<br>
<</if>>
<<if $makeout.rounds lte 3>>
<<set _linkname to "Kiss " + _po>>
<<skillgate Disinhibition 1 _linkname Makeout>><<set $makeout.pcact to "kiss">><</skillgate>>
<<set _linkname to "Grope " + _po>>
<<skillgate Disinhibition 2 _linkname Makeout>><<set $makeout.pcact to "grope">><</skillgate>>
<</if>>
<<if $makeout.rounds gt 0>>
<<if $makeout.rounds lte 3>>
<<set _linkname to "Grind on " + _po>>
<<skillgate Disinhibition 3 _linkname Makeout>><<set $makeout.pcact to "grind">><</skillgate>>
<</if>>
<<set _remopt to false>>
<<if $pc.wearing_dress()>>
<<set _disinhib to 3>>
<<if !$pc.wearing_underwear()>><<set _disinhib to 5>><<elseif $pc.has_breasts() and !$pc.wearing_bra()>><<set _disinhib to 4>><</if>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove your " + $pc.clothing_shortname($pc.shirt_equiv())>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove own top">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<<elseif $pc.wearing_top()>>
<<if !$pc.has_breasts() or $pc.wearing_bra()>><<set _disinhib to 2>><<else>><<set _disinhib to 4>><</if>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove your " + $pc.clothing_shortname($pc.shirt_equiv())>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove own top">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<<elseif $pc.wearing_bra()>>
<<set _disinhib to 4>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove your " + $pc.clothing_shortname($pc.underwear_covering("chest"))>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove own bra">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<</if>>
<<if !$pc.wearing_dress()>>
<<if $pc.wearing_pants()>>
<<if $pc.wearing_underwear()>><<set _disinhib to 3>><<else>><<set _disinhib to 5>><</if>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove your " + $pc.clothing_shortname($pc.pants_equiv())>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove own pants">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<<elseif $pc.wearing_underwear() and ($pc.underwear_covering("crotch") != $pc.underwear_covering("chest"))>>
<<set _disinhib to 5>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove your " + $pc.clothing_shortname($pc.underwear_covering("crotch"))>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove own underwear">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<</if>>
<</if>>
<<set _npc to $makeout.partner_expanded>>
<<set _pp to _npc.pp>>
<<if _npc.wearing_dress()>>
<<set _disinhib to 3>>
<<if !_npc.wearing_underwear()>><<set _disinhib to 5>><<elseif _npc.has_breasts() and !_npc.wearing_bra()>><<set _disinhib to 4>><</if>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove " + _npc.pp + " " + _npc.clothing_shortname(_npc.shirt_equiv())>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove partner top">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<<elseif _npc.wearing_top()>>
<<if !_npc.has_breasts() or _npc.wearing_bra()>><<set _disinhib to 2>><<else>><<set _disinhib to 4>><</if>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove " + _pp + " " + _npc.clothing_shortname(_npc.shirt_equiv())>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove partner top">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<<elseif _npc.wearing_bra()>>
<<set _linkname to "Remove " + _pp + " " + _npc.clothing_shortname(_npc.underwear_covering("chest"))>>
<<set _disinhib to 4>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove partner bra">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<</if>>
<<if !_npc.wearing_dress()>>
<<if _npc.wearing_pants()>>
<<if _npc.wearing_underwear()>><<set _disinhib to 3>><<else>><<set _disinhib to 5>><</if>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove " + _pp + " " + _npc.clothing_shortname(_npc.pants_equiv())>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove partner pants">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<<elseif _npc.wearing_underwear()>>
<<set _disinhib to 5>>
<<if $pc.skillleveled("Disinhibition", _disinhib)>>
<<if !_remopt>><br><<set _remopt to true>><</if>>
<<set _linkname to "Remove " + _pp + " " + _npc.clothing_shortname(_npc.underwear_covering("crotch"))>>
<<link _linkname Makeout>>
<<set $makeout.pcact to "remove partner underwear">>
<</link>> <<skill Disinhibition _disinhib>>
<br>
<</if>>
<</if>>
<</if>>
<<if $makeout.rounds gt 1>>
<<set _linkname to "Take things further">>
<<if $pc.has_inclination("Forward")>>
<br>
<<link _linkname EncounterRound>><<raiseskill Disinhibition 3>><<run setup.encounter_from_makeout()>><<set $encounter.leadtaken to true>><</link>> <<inclination Forward>>
<br>
<<elseif $pc.skillleveled("Disinhibition", 3)>>
<br>
<<link _linkname EncounterRound>><<raiseskill Disinhibition 3>><<run setup.encounter_from_makeout()>><<set $encounter.leadtaken to true>><</link>> <<skill Disinhibition 3>>
<br>
<<elseif $pc.skillleveled("Disinhibition", 1) and $pchorny is 2>>
<br>
<<link _linkname EncounterRound>><<raiseskill Disinhibition 1>><<run setup.encounter_from_makeout()>><<set $encounter.leadtaken to true>><</link>> <span class="sexy skillcheck">Release Need</span> <<skill Disinhibition 1>>
<br>
<<elseif $pc.skillleveled("Disinhibition", 2) and $pchorny is 1>>
<br>
<<link _linkname EncounterRound>><<raiseskill Disinhibition 2>><<run setup.encounter_from_makeout()>><<set $encounter.leadtaken to true>><</link>> <span class="sexy skillcheck">Release Need</span> <<skill Disinhibition 2>>
<br>
<</if>>
<</if>>
<</if>>
<</if>>
<<set _abortpassage to $makeout.abortpassage || $lastlocpassage>>
<br>
<<link "Disentangle yourself" _abortpassage>><<set $header to "Muttering apologies, you disentangle yourself from the makeout session, unwilling to let things go further.">><<unset $makeout>><<run $pc.fix_clothing(true)>><</link>><<include Makeout>><<widget "classselectinfo">>
<<set _prof to setup.School.professor_of_course(_args[0])>>
<<set _styleclass to setup.people.get_gender(_prof) + "emlink">>
<<= _args[0]>> (<<= setup.School.courses[_args[0]].type>>) with Professor <span @class="_styleclass"><<= setup.School.professor_of_course(_args[0])>></span>
<</widget>>
<<widget "pickstartingoutfit">>
<div id="pickstartingoutfit" class="nokeys">
<<set _outfits to setup.starting_outfits()>>
<<run _outfits.unshift("Default")>>
<<for _outfit range _outfits>>
<<if (_outfit is "Default" and (!$startingoutfit or $startingoutfit is "Starting Outfit")) or $startingoutfit is "Starting " + _outfit>>
<<highlight>>_outfit<</highlight>>
<<else>>
<<capture _outfit>>
<<link _outfit>>
<<if _outfit is "Default">>
<<set $startingoutfit to "Starting Outfit">>
<<else>>
<<set $startingoutfit to "Starting " + _outfit>>
<</if>>
<<replace "#pickstartingoutfit">><<pickstartingoutfit>><</replace>>
<</link>>
<</capture>>
<</if>>
<<if _outfit isnot _outfits[_outfits.length - 1]>>
|
<</if>>
<</for>>
<<if ndef $startingoutfit>>
<<set $startingoutfit to "Starting Outfit">>
<</if>>
<<if ndef $startingoutfitrng or !$startingoutfit.random>><<set $startingoutfitrng to setup.newRNG($seed + "outfit")>><</if>>
<<set _outfititems to setup.build_outfit(V.pcgender, V.pc.body_parts, $startingoutfit, $startingoutfitrng)>>
<<script>>T.names = T.outfititems.map(item => setup.remove_unsubbed_words(item.name));<</script>>
<br>
<<highlight small>>(<<and _names>>)<</highlight>>
</div>
<</widget>>You unfold the letter with shaking hands and, eyes darting ahead of your thoughts, you quickly scan the first lines.
"Dear <<mrms $pc>> <<lastname $pc>>: Congratulations! It is my pleasure to offer you admission..."
You let out a breath you didn't know you were holding. So that's what an acceptance letter looks like. <span class="notice">$uname</span> wasn't your first choice... or your second, or third, or...
Well, the important thing is it was <i>a</i> choice, and finally you can say you're going to college!
And F-K University isn't <i>that</i> bad. Sure, everybody loves calling it FCK U and any number of lewd jokes can be made out of its name, and it has a bit of a reputation as a party school, complete with Greek houses, but... it's named after a famous psychologist or something, and it has a bunch of great majors available.
Anyway, letting loose at college a little can't be a bad thing. You deserve it, actually. High school wasn't always easy...
[[Think back...|PrologueHighSchool]]Homework and hormones are a very bad combination, leading to the most harrowing years of your not-very-long life so far. A class you could sleep through followed by one that would casually add two hours of homework in a blink, relationships that could shift from confidant to mortal enemy from one week to the next... the only constant was that things could always get even more fucked up.
<<set $pcskills to {"Charisma": 0, "Willpower": 0, "Exhibitionism": 0, "Voyeurism": 0, "Sexual Knowledge": 0, "Disinhibition": 0, "Dominance": 0, "Submission": 0, "Hand": 0, "Oral": 0, "Vaginal": 0, "Anal": 0, "Penetrative": 0}>>\
<<nobr>>\
<<link "You were popular." "PrologueHighSchool2">>
<<set $prologuetext to "You were pretty popular. It wasn't always great, since jealousy is a thing and the backstabbing could be unreal, but you were never really bullied or anything. You got used to having something of an entourage.">>
<<run $pc.raise_skill("Charisma", 200)>>
<<run $pc.raise_skill("Dominance", 100)>>
<</link>> <span class="increaseneed">Charisma +2 Assertiveness +1</span><br>
<<link "You had a usual number of friends." "PrologueHighSchool2">>
<<set $prologuetext to "You had a few friends, a couple you were close with and some friends of friends you could get along with too. Some of the more popular kids looked down on you, but whatever, you had your squad.">>
<<run $pc.raise_skill("Charisma", 100)>>
<<run $pc.raise_skill("Willpower", 100)>>
<</link>> <span class="increaseneed">Charisma +1 Willpower +1</span><br>
<<link "You were pretty unpopular." "PrologueHighSchool2">>
<<set $prologuetext to "You weren't very popular. There were maybe one or two people you could call any kind of friend, and you were an easy target for anyone who wanted somebody to pick on. Some days you just felt beaten down, but hey, here you are. You made it.">>
<<run $pc.raise_skill("Willpower", 200)>>
<<run $pc.raise_skill("Submission", 100)>>
<</link>> <span class="increaseneed">Willpower +2 Compliance +1</span><br>
<</nobr>>\<<= $prologuetext>>
<<nobr>>\
<<link "You were an overachiever." "PrologueHighSchool3">>
<<set $prologuetext to "You worked hard. Extra credit, essay competitions, whatever, you were on it. You took homework seriously and learned good study habits, and you were almost always outscoring your friends on tests.">>
<<run $pc.raise_skill("Intellectual", 100)>>
<<run $pc.raise_skill("Studying", 200)>>
<</link>> <span class="increaseneed">Studying +2 Intellectual +1</span><br>
<<link "You were more concerned with sports." "PrologueHighSchool3">>
<<set $prologuetext to "You worked hard on sports, sometimes so much so that your grades suffered. But you got strong!">>
<<run $pc.raise_skill("Physical", 200)>>
<<run $pc.raise_skill("Dancing", 100)>>
<</link>> <span class="increaseneed">Physical +2 Dancing +1</span><br>
<<link "You were a nerd." "PrologueHighSchool3">>
<<set $prologuetext to "You spent many a night downloading obscure fan-translated anime and sending fandoms into a froth with your hot takes. Damn. What great times.">>
<<run $pc.raise_skill("Intellectual", 200)>>
<<run $pc.raise_skill("Writing", 100)>>
<</link>> <span class="increaseneed">Intellectual +2 Writing +1</span><br>
<<link "You worried about your portfolio more than your GPA." "PrologueHighSchool3">>
<<set $prologuetext to "You consider yourself an artist. You dabbled in illustration, photography, even a little sculpture... just trying different things until you found your voice. Unfortunately your school didn't have much support for the arts, so it remains to be seen whether you'll make anything of your talents.">>
<<run $pc.raise_skill("Artistic", 200)>>
<<run $pc.raise_skill("Photography", 100)>>
<</link>> <span class="increaseneed">Artistic +2 Photography +1</span><br>
<<link "You were pretty much just a slacker." "PrologueHighSchool3">>
<<set $prologuetext to "Homework was best performed five minutes before the bell rang, you found. Those high stakes really brought out the best in you, clinching that C-minus just when you needed it most. The rest of your time was largely spent on video games and unsavory social media.">>
<<run $pc.raise_skill("Video Gaming", 200)>>
<<run $pc.raise_skill("Sexual Knowledge", 100)>>
<</link>> <span class="increaseneed">Video Gaming +2 Sexual Knowledge +1</span><br>
<</nobr>>\<<= $prologuetext>>
Life wasn't all just school, though.
<<nobr>>\
<<link "There was also weekend studying!" "PrologueHighSchool4">>
<<set $prologuetext to "Most weekends would see you still poring over textbooks, or at least delving into Wikipedia to go wherever your curiosity took you. You just love learning!">>
<<run $pc.raise_skill("Studying", 200)>>
<<run $pc.raise_skill("Intellectual", 100)>>
<</link>> <span class="increaseneed">Studying +2 Intellectual +1</span><br>
<<link "It was your dream to get a short story published before graduation." "PrologueHighSchool4">>
<<set $prologuetext to "You wrote a lot, starting with cringy fanfic in middle school and then, throughout high school, submitting your stories to lots of different magazines and websites hoping to get published. It never happened, but you learned a lot.">>
<<run $pc.raise_skill("Writing", 200)>>
<<run $pc.raise_skill("Intellectual", 100)>>
<</link>> <span class="increaseneed">Writing +2 Intellectual +1</span><br>
<<link "You taught yourself to cook." "PrologueHighSchool4">>
<<set $prologuetext to "Starting with online recipes and eventually creating your own, family dinners increasingly became your gig. You found you enjoyed it, and you hope one day you get to do something more in this field.">>
<<run $pc.raise_skill("Cooking", 200)>>
<<run $pc.raise_skill("Artistic", 100)>>
<</link>> <span class="increaseneed">Cooking +2 Artistic +1</span><br>
<<link "You'd take your camera to interesting places." "PrologueHighSchool4">>
<<set $prologuetext to "You spent a lot of your free time with a camera in hand. You had accounts on a couple big photography social media sites and kept your photo wall carefully curated.">>
<<run $pc.raise_skill("Photography", 200)>>
<<run $pc.raise_skill("Artistic", 100)>>
<</link>> <span class="increaseneed">Photography +2 Artistic +1</span><br>
<<link "You loved to dance." "PrologueHighSchool4">>
<<set $prologuetext to "You spent time studying choreography in music videos and learning the moves, and spent many late nights dancing away in clubs with Xs drawn on your hands.">>
<<run $pc.raise_skill("Dancing", 200)>>
<<run $pc.raise_skill("Physical", 100)>>
<</link>> <span class="increaseneed">Dancing +2 Physical +1</span><br>
<<link "You enjoyed gardening." "PrologueHighSchool4">>
<<set $prologuetext to "You spent a lot of time maintaining a large garden outside your parents' house. Seeing seeds sprout into plants, producing herbs and vegetables through your diligent effort, was one of the most rewarding experiences of your life.">>
<<run $pc.raise_skill("Gardening", 200)>>
<<run $pc.raise_skill("Cooking", 100)>>
<</link>> <span class="increaseneed">Gardening +2 Cooking +1</span><br>
<<link "You got into streaming." "PrologueHighSchool4">>
<<set $prologuetext to "You ended up making a small... very small... career as a variety video game streamer. You quickly discovered it was more about personality than skill at whatever you were playing, but you lost interest before making much headway.">>
<<run $pc.raise_skill("Charisma", 200)>>
<<run $pc.raise_skill("Video Gaming", 100)>>
<</link>> <span class="increaseneed">Charisma +2 Video Gaming +1</span><br>
<<link "You may have been a bit of a porn addict." "PrologueHighSchool4">>
<<set $prologuetext to "Your hormones were out of control. You spent a bit too much time looking at porn and pleasuring yourself.">>
<<run $pc.raise_skill("Sexual Knowledge", 200)>>
<<run $pc.raise_skill("Hand", 100)>>
<</link>> <span class="increaseneed">Sexual Knowledge +2 Hand +1</span><br>
<<link "You had a part time job." "PrologueHighSchool4">>
<<set $prologuetext to "Evenings and weekends, you had a job. You were an actual certified burger-flipper. It... was not fun, and did nothing for your social life, but having extra money in your pocket was nice.">>
<<run $pcmoney += 500>>
<</link>> <span class="increaseneed">Money +$500</span><br>
<</nobr>>\<<= $prologuetext>>
And then there was your love life to consider.
<<pickproclivity Prologue2>>
<<link "Continue" Prologue2>>
<<run setup.implement_proclivity($pcproclivity)>>
<</link>><<= $prologuetext>>
Anyway, it's safe to say your thoughts have digressed a bit at this point. You read the letter again, trying to actually take in the words this time. Renowned university, sure. Refer to the schedule enclosed, got it. Send in confirmation of intent to attend form, yup, better do that.
The real question is, who to tell first? Your parents should certainly know, they'll be ecstatic, but on the other hand, fuck that. You pick up your phone and text your best friend, who is, of course...
<<nobr>>
<<set _boybfflink to "Your boy " + $boybff.split(' ')[0]>>
<<set _girlbfflink to "Your best girl " + $girlbff.split(' ')[0]>>
<<set _boybfflinkc to _boybfflink + " (cisgender male)">>
<<set _girlbfflinkc to _girlbfflink + " (cisgender female)">>
<<link _boybfflinkc "Prologue3">>
<<set $bestfriend to $boybff>>
<<run setup.people_niches()["The Best Friend"] = $boybff>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>>
<br>
<<link _girlbfflinkc "Prologue3">>
<<set $bestfriend to $girlbff>>
<<run setup.people_niches()["The Best Friend"] = $girlbff>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>>
<br><br>
<<set _boybfflinkt to _boybfflink + " (transgender male)">>
<<set _girlbfflinkt to _girlbfflink + " (transgender female)">>
<<link _boybfflinkt "Prologue3">>
<<set $bestfriend to $boybff>>
<<run setup.people_niches()["The Best Friend"] = $boybff>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<set $people[$bestfriend].species[1] to "transgender male">>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>>
<br>
<<link _girlbfflinkt "Prologue3">>
<<set $bestfriend to $girlbff>>
<<run setup.people_niches()["The Best Friend"] = $girlbff>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<set $people[$bestfriend].species[1] to "transgender female">>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>>
<br><br>
<<set _boybfflinkn to "Your best friend " + $boybff.split(' ')[0] + " (nonbinary AMAB)">>
<<set _girlbfflinkn to "Your best friend " + $girlbff.split(' ')[0] + " (nonbinary AFAB)">>
<<link _boybfflinkn "Prologue3">>
<<set $bestfriend to $boybff>>
<<run setup.people_niches()["The Best Friend"] = $boybff>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<set $people[$bestfriend].species[1] to "nonbinary amab">>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>>
<br>
<<link _girlbfflinkn "Prologue3">>
<<set $bestfriend to $girlbff>>
<<run setup.people_niches()["The Best Friend"] = $girlbff>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<set $people[$bestfriend].species[1] to "nonbinary afab">>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>>
<br><br>
<<link "Just text somebody!" "Prologue3">>
<<set _gender to setup.randomrelfreq($studentgenderdistribution)>>
<<if ["female", "transgender female", "nonbinary afab"].includes(_gender)>>
<<set $bestfriend to $girlbff>>
<<else>>
<<set $bestfriend to $boybff>>
<</if>>
<<run setup.people_niches()["The Best Friend"] = $bestfriend>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<set $people[$bestfriend].species[1] to _gender>>
<<run setup.people.learn_gender($bestfriend)>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>>
<<unset $girlbff>>
<</link>> (random best friend)
<br>
<</nobr>><div class="phone-container phone-screen-text">
<div class="phone-header">
<h1 class="phone-text-header"><<dfullname $bestfriend>></h1>
</div>
<div class="phone-content">
<div class="phone-text-bubbled-right">hey guess who's going to college!</div>
<div class="phone-text-bubbled-left">you?? never thought i'd see the day</div>
<div class="phone-text-bubbled-right">shut up :p</div>
<div class="phone-text-bubbled-left">yeah yeah</div>
<div class="phone-text-bubbled-left">alright let's celebrate then</div>
<div class="phone-text-bubbled-left">walk over i'll drive us downtown</div>
</div>
</div>
<<run $people[$bestfriend].residence = $pcresidence>>
<<run $people[$bestfriend].schedule = 4>>
<br><br>
Quick off the mark, that one. Sounds like <<pss $bestfriend>> ready to go anytime. Better get ready yourself.<<run setup.people.become_known($bestfriend)>><<run setup.people.learn_number($bestfriend)>>
<br><br>
[[Hop in the shower|Prologue4]]<i>(Click on an option to make your selection.)</i>
<br><br>
<<customizepc Prologue5>>You get yourself under the hot water and start washing up.
It hits you all over again that you did it, you got into college. That worry can stop nagging at you, and more importantly, so can your parents. The feeling of relief is incredible.
As your hands roam over your body, rinsing off the lather, you realize you don't just feel relief... but also a little horny.
<<nobr>>
<<link "Rub out a quick one" "EncounterRound">>
<<set $roomtype to "showerstall">>
<<set $lastloctags to []>>
<<script>>
setup.build_encounter({people: ["PC"], endpassage: "Prologue6", conditions: ["pc naked"],
intro_text: "You run your hands over your wet, naked body, enjoying the slight slipperiness of the lingering lather."
});
<</script>>
<</link>>
<</nobr>>
[[There'll be time for that later|Prologue6b]]<<run $pc.zero_pc_fleeting_stats()>>\
That took the edge off. A little embarrassed now, you hurry to finish your shower.
<<include Prologue6c>>Your hands linger a little too long on certain bits as you clean yourself, but you resist the temptation. The horny buzz of leaving yourself a little pent up isn't unpleasant anyway, really. You finish your shower and dry off.
<<include Prologue6c>>You go back to your room and look over your wardrobe, picking out a style to wear.
<<pickstartingoutfit>>\
Once dressed, you head out the door, just shouting to your parents that you're going out. You can tell them what's up later.
<<set _linkname to "Time to go see " + $bestfriend.split(' ')[0]>>\
<<link _linkname "Prologue7">><<run setup.init_pc_outfit()>><</link>><<run setup.place_bff()>>\
You meet up with <<firstname $bestfriend>>, who greets you by laughing and shoving a piece of paper into your hands.
"What's this?" You unfold the piece of paper and read, blinking as you take it in. "Wait, you got in too?"
"Yep," <<ps $bestfriend>> <<conj say>>, grinning. "Just got the letter today."
No wonder <<ps $bestfriend>> <<conj were>> so eager to meet up. <<psc $bestfriend>> wanted to see your reaction in person.
"Does this mean we can room together?" you ask.
<<psc $bestfriend>> <<conj shrug>>. "Dunno. We both applied pretty late. And anyway... this place wasn't first choice for either of us, you know. Couple more I'm still waiting to hear from before I commit."
You nod, sobering. "Yeah, fair. Still though... it'd be awesome."
<<psc $bestfriend>> <<conj grin>> again. "Yeah it would."
[[Commence hanging out|Prologue7.1]]
<<link "Customize your BFF" CustomizeBFF>><<set $bffgennext to "Prologue7">><</link>>In your travels, you and <<firstname $bestfriend>> end up at the family-owned Thai place downtown, where your friend Kamon waits your table.
You tell him the news and his usual easy smile widens into a grin. "Ah!" he says. "Going to FCK U. Gonna get laaaaiiiid!"
He pronounces it like "fuck you." That's the usual joke. The place definitely has a reputation.
<<dfirstname>> rolls <<pp>> eyes. "Gonna get a degree, believe it or not. Or... <<nickname $pc>> is anyway. I haven't totally decided where I'm going yet."
Kamon laughs. "I'm not sure that's why anybody else is going there. But hey..." He pats you on the shoulder. "Good luck, and don't forget to have fun." He grins again, and leaves to put your order in.
You know that's going to be the usual reaction, and you'll have to accept it. The place has some good professors, good facilities, good courses... you know, you did your research. But... it's also a party school, and that's what most people know it for.
Your mind wanders for a moment as your food arrives and you begin to eat. You'll meet all sorts of people at college... but what kind of person would you be most interested in? You indulge in thinking about, well, more shallow considerations.
<span id="turnons-span"><<link "Decide your turnons and turnoffs">><<replace "#turnons-span">><br><<pickturnons>><</replace>><</link>></span>
[[Next|Prologue7.2]]You spend a few more hours hanging out with <<dfirstname $bestfriend>>, but as it gets close to dinnertime, you know your parents will be wondering where you are. It's time to go home.
"Well, see you later," you say as you leave, wondering in the back of your mind if this is one of the last times you'll see <<po $bestfriend>>. Despite some differences in personality, you've always gotten along really well.
<span id="startinc-span"><<link "Decide your starting inclinations">><<replace "#startinc-span">><br><<pickstartinginclinations>><</replace>><</link>></span>
[[Go home|Prologue8]]You get back home just as dinner is ready. Your mom arches an eyebrow at how close you cut it, but she can't complain since you are actually on time. Anyway, you should be able to go where you please. You're an adult now, and have been for some time.
<<pickbirthday>>
Once you've sat down with mom and dad, you share the news that you made it into $uname. Naturally they're very pleased and spend a few minutes congratulating you and asking questions.
Then they exchange a look, and you pause, sensing there's more.
"Listen, <<nickname $pc>>," says your mom. "We were hoping not to have to do this, but even with your loan<<if $pc.skillleveled("Intellectual", 2)>> and scholarships<</if>>, it's not quite going to cover the cost of staying on campus and everything."
You try not to roll your eyes. Your parents, mom especially, have been sort of passive-aggressively pushing you to go to the local community college and stay at home, as if you're not ready to be on your own. Come on, you're <<engnum $pcage>>!
"We'll help you with it, of course," your dad hastens to add. "We'll take out a loan ourselves to make up the difference. But the thing is, payments on that loan will start immediately, and it'll be expensive."
"So... what are you saying?" you ask.
"You'll have to help us out," mom says. "You'll need to find a part time job or something and send us a little money every week."
[["I have to get a job?"|Prologue9a]]
[["What?! How am I gonna fit in a job around classes?"|Prologue9b]]"Afraid so, kiddo," your mom says. "We'll help you however we can, but this will have to be a team effort."
<<include Prologue9>>"Well, lots of people have to do that," your mom says, "and I'm afraid you're no different. We'll cut back here at home as much as we can, and we'll try not to ask you to send too much money home."
<<include Prologue9>><<set $pcage to setup.minimum_pc_starting_age()>><<set $pc.age to $pcage>>\
"I know it's no fun, but you've been telling us you're responsible and mature enough to be on your own, <<nickname $pc>>," your dad says. "Now it's time to prove it. It's the only way we can afford this."
You sigh, trying not to grumble too much as you agree. Hopefully it won't be too much and a few hours a week slinging fast food or something will cover it.
Soon enough, the conversation turns optimistic once more, and after dinner you return to your home feeling good about the future.
[[Weeks pass...|Prologue10]]The next few weeks pass by in a blur. There are so many things to do and so many decisions to make, from big ones like what your major might be to how many laundry credits you'll need.
You're happy to find out that, at almost the last minute, your best friend <<firstname $bestfriend>> decided to go to the same school after all. The bad news is <<ps $bestfriend>> started the process way too late for roommate requests. Maybe you'll get a chance to room with <<po $bestfriend>> at some point. At least <<ps $bestfriend>>'ll be in the same building as you. You're both in <span class="notice">$pcresidence</span>.
In the meantime, your roommate is somebody named <span class="notice">$pcroommate</span>. At the school's prompting, you emailed <<po $pcroommate>> to introduce yourself, but you didn't get a response. Not an encouraging start, but hey, <<ps $pcroommate>>'s probably busy too.
[[More importantly, time to pick classes|Prologue11]]The university encourages you to choose at least a couple courses with an eye toward what your major might end up being, though you don't have to be sure of that right now.
You can get early progress toward a degree by picking a course and a lecture accompanying it.
<<nobr>>
<span id="autoenroll">
<<link "Automatically choose default classes" Prologue13>>
<<set _course1 to setup.School.find_course("psychology", "Block A")>>
<<set _course2 to setup.School.find_course("psychology", "Block B")>>
<<set _course3 to setup.School.find_course("art", "Block C")>>
<<set _course4 to setup.School.find_course("science", "Block D")>>
<<set $pccourses to [_course1, _course2, _course3, _course4]>>
<</link>>
</span>
<br><br>
<<set $pcmajor to null>>
<div id="majorchoice">
<<set _count to 0>>
<<for _major range Object.keys(setup.School.majors)>>
<table class="chargen-classchoice-option">
<tr><td>
<b><<cap _major>></b>
</td></tr>
<tr><td>
<<set _course1 to setup.School.find_course(_major, "Block A")>>
<<classselectinfo _course1>>
</td></tr>
<tr><td>
<<set _course2 to setup.School.find_course(_major, "Block B")>>
<<classselectinfo _course2>>
</td></tr>
<tr><td>
<<capture _major,_course1,_course2>>
<<link "Choose">>
<<set $pcmajor to _major>>
<<set $pccourses to [_course1, _course2, null, null]>>
<<replace "#majorchoice">><b><<cap _major>> courses selected!</b><</replace>>
<<replace "#output">><</replace>>
<<replace "#autoenroll">><</replace>>
<</link>>
<</capture>>
</td></tr>
</table>
<<set _count++>>
<</for>>
</div>
<</nobr>>
<span id="output" class="bad"></span>
<<nobr>>
<<link "Glad that's decided!">>
<<if $pcmajor is null>>
<<replace "#output">><<= "You must choose a set of courses!">><</replace>>
<<else>>
<<egoto "Prologue12">>
<</if>>
<</link>>
<</nobr>>
[[Wait, let me rethink that...|Prologue11]]To meet your minimum credits requirement, you'll need to pick two more courses to enroll in, but they can be whatever you find interesting. Or, you know... easiest.
Third course:
<<nobr>>
<<set _courses to setup.School.courses_for_block("Block C")>>
<div id="course3choice" class="chargen-classchoice-options">
<<set _count to 0>>
<<for _course range _courses>>
<table class="chargen-classchoice-option">
<tr><td>
<b><<cap setup.School.courses[_course].major>></b>
</td></tr>
<tr><td>
<<classselectinfo _course>>
</td></tr>
<tr><td>
<<capture _course>>
<<link "Choose">>
<<run V.pccourses[2] = _course>>
<<replace "#course3choice">><b><<cap _course>> course selected!</b><</replace>>
<<replace "#output">><</replace>>
<</link>>
<</capture>>
</td></tr>
</table>
<<set _count++>>
<</for>>
</div>
<</nobr>>
Fourth course:
<<nobr>>
<<set _courses to setup.School.courses_for_block("Block D")>>
<div id="course4choice" class="chargen-classchoice-options">
<<set _count to 0>>
<<for _course range _courses>>
<table class="chargen-classchoice-option">
<tr><td>
<b><<cap setup.School.courses[_course].major>></b>
</td></tr>
<tr><td>
<<classselectinfo _course>>
</td></tr>
<tr><td>
<<capture _course>>
<<link "Choose">>
<<run V.pccourses[3] = _course>>
<<replace "#course4choice">><b><<cap _course>> course selected!</b><</replace>>
<<replace "#output">><</replace>>
<</link>>
<</capture>>
</td></tr>
</table>
<<set _count++>>
<</for>>
</div>
<</nobr>>
<span id="output" class="bad"></span>
<<nobr>>
<<link "Now that's a full schedule!">>
<<if $pccourses.includes(null)>>
<<replace "#output">><<= "You must choose two courses!">><</replace>>
<<else>>
<<egoto "Prologue13">>
<</if>>
<</link>>
<</nobr>>
[[Wait, let me rethink that...|Prologue12]]You've signed up for <<and $pccourses>> for classes. You hope they're actually interesting.
<<link "Wait, let me rethink that" Prologue11>><<set $pccourses to []>><</link>>
The time passes unbelievably fast, and finally move-in weekend is upon you.
You pack as light as you can, for a couple reasons. First of all, the family car simply doesn't hold that much. But also you don't want to take much from your "old" life. It's a new college and a new you. A chance to redefine yourself. Instead of a bunch of suitcases, you secured some spending money from your parents to rebuild your wardrobe.
You're carrying a box into your dorm room when you nearly bump into a <<boygirl $pcroommate>>. The <<anonname $pcroommate>> gives you a dirty look and you feel yourself blushing. You notice <<pss $pcroommate>> unpacking some things <<pr $pcroommate>> and... of course, this must be <span class="notice">your roommate, <<dfirstname $pcroommate>></span>.<<run setup.people.become_known($pcroommate)>>
[[Be friendly|Prologue14a]]
[[Forget it|Prologue14b]]You offer <<firstname $pcroommate>> a smile. "Hey. I'm <<firstname $pc>><<if $pc.nickname>>, but my friends call me <<nickname $pc>><</if>>."
<<psc $pcroommate>> <<conj give>> you a once-over. You immediately feel self-conscious, grimy from the long drive and the effort of moving in while <<pss $pcroommate>> looking pristine.
"<<firstname $pcroommate>>," <<ps $pcroommate>> <<conj say>> shortly, before going back to what <<ps $pcroommate>> was doing. It's clear you've been dismissed. You shrug to yourself and resume arranging your possessions.
<<include Prologue14>><<firstname $pcroommate>> seems set to ignore you and you decide to do likewise, just arranging your possessions in mutual silence. <<friendship $pcroommate -25>>
<<include Prologue14>>Once everything has been moved into your dorm, you head back out to the car with your dad. He says goodbye, trying not to be emotional. You're almost glad that others are waiting to move in so that the moment can't linger into awkwardness.
Then you're watching him drive away, and it hits you that for the first time in your life, you're truly on your own.
Just as you're starting to feel sad, <<firstname $bestfriend>> appears at your shoulder. "Hey <<nickname $pc>>," <<ps $bestfriend>> <<conj say>>. "They're about to do this tour bus thing, show us where everything on campus is. Wanna go?"
[[Take the bus tour|PrologueTour1]] (recommended)
[[Walk around campus on your own|Prologue15]]"I think I'll just take a look around on my own," you say.
<<firstname $bestfriend>> nods. "That's cool. I'll catch you later then, okay?"
"Seeya."
[[Next|Prologue15.1]]You take a walk around campus, trying to get your bearings.
You live in <span class="notice">Chicory Hall</span> on Hanna Road North, in the northwest corner of the campus, located conveniently near <span class="notice">Summit Market</span>, where you can get food.
<<set _config to {locationblock: "Campus", location: "HannaRdN", nolinks: true, floating: true}>>\
<<map _config>>\
On the east side are <span class="notice">Chamberlain Hall</span> and <span class="notice">Smith Library</span>, basically the heart of the campus. The classroom buildings and lecture halls are more or less clustered around this area. Chamberlain Hall has a number of things inside it, like a dining hall and the bookstore, where you can also buy university apparel.
<<set _config to {locationblock: "Campus", location: "ChamberlainHall", nolinks: true, floating: true}>>\
<<map _config>>\
In the middle of campus is the <span class="notice">University Mall</span>. It turns out that "mall" can also mean something like "park" and that the University Mall isn't actually very exciting.
<<set _config to {locationblock: "Campus", location: "UniMall", nolinks: true, floating: true}>>\
<<map _config>>\
West of the Mall are <span class="notice">Blodgett Gym</span> and the largest parking area. The route into town is near here.
<<set _config to {locationblock: "Campus", location: "BlodgettGym", nolinks: true, floating: true}>>\
<<map _config>>\
Finally, toward the south, you find various administrative outbuildings and the <span class="notice">Clinic</span>, as well as a row of fraternity and sorority houses.
<<set _config to {locationblock: "Campus", location: "LongfellowRd", nolinks: true, floating: true}>>\
<<map _config>>\
[[Then suddenly...|Prologue15.2]]You pass through the University Mall. Curious, you stop and bend over to read the plaque on the giant bronze elk statue at the west end of the park.
Apparently in 1914 an elk calf was found wandering the campus and was, naturally, immediately seized by students and brought to a game with a rival college. F-K University won that game and the elk became their new mascot. This statue was donated to the campus in 1962.
"Go... Elks?" you mumble to yourself, then gasp and jerk upright as a hand firmly smacks your ass.
<<nobr>>
"Hey, fresh meat!" You spin around and
<<if setup.people.is_femme($pc)>>
<<set _ogender to "boy">>
<<elseif setup.people.is_masc($pc)>>
<<set _ogender to "girl">>
<<elseif State.random() lte 0.5>>
<<set _ogender to "boy">>
<<else>>
<<set _ogender to "girl">>
<</if>>
<<set _npc to setup.Events.pick_person({inclinations: "active", desiredrelationships: ["fuckbuddy", "hatefuck", "indifferent"], attractiontopc: true, strictinclinations: true, year: [2, 3, 4]}, setup.people.people_of_type("student"))>>
<<if _npc>>
<<anonname _npc aoran>>
<<lust _npc 25>>
<<else>>
a _ogender
<</if>>
is smirking at you, part of a group of students. "Sorry, couldn't resist, you all bent over like that. Welcome to FCK University." They laugh and saunter off.
<</nobr>>
You blink, a little shaken. Did that really just happen? Exactly how nuts is this college? Even the students are in on the "Fuck University" stuff, apparently. Guess if a college has a reputation as an orgiastic party campus, it might tend to attract a certain type...
You shake it off. Whatever. You're not gonna let a bunch of weirdos get you down already.
[[The end of your first day...|Prologue16]]On your way back home, you stop by Chamberlain Hall to grab some food, then pick up your textbooks to cart back to your dorm.
After that, everyone at the residence hall is encouraged to gather for what seems to be a traditional move-in weekend movie night, you and a room full of other first year students watching a recent superhero movie. You already saw it a few months ago with <<firstname $bestfriend>>, but it helps you take your mind off things and relax a bit.
After the movie, some people hang around to mingle, but it doesn't seem like your scene. Or maybe you're just tired. You decide to call it a night and head back to your dorm room.
Tomorrow it'll be time for adventures like... figuring out co-ed showers. And maybe finding out who's hiring. Ugh. At least classes don't start till Monday. You have one more whole day to get your bearings.<<unset $prologuetext>>
<<run setup.init_post_chargen()>>\
[[So it begins...|PrologueFinal]]Welcome to <i>Course of Temptation</i>!
You're about to get tossed straight into a detailed life simulator. But don't be overwhelmed!
Keep an eye on your <<highlight>>left-hand side panel<</highlight>>, particularly on your <<highlight>>Needs bars<</highlight>>. Green and full is good, red and low is bad!
To solve your low needs, just use common sense! If you're tired, go to bed! If you're hungry, find a dining hall! If you need to relax, visit the residence hall lounge and watch some TV! If you want attention, play video games with somebody or socialize before class! And so on!
Oh right, classes. You are <<highlight>>in college<</highlight>> after all, so classes are important. The side panel will also always show you when your next class is, so be aware! Just find the right building (it'll have a red school icon on the map) within an hour of its start time and you'll be all set.
You click on location links to move around, or if there's a map on the screen, you can click that too!
As you move around and do things, random events will pop up. Sometimes these give you choices, and sometimes they're consequences of choices that you maybe didn't know you were making. For example, maybe it's not a good idea to go running in the windy park in a short skirt! Or, you know, maybe it is.
If you need more help, click the <<highlight>>Help button<</highlight>> and follow the links, and if you want some hints on what to do next, try the <<highlight>>Hints button<</highlight>>.
Good luck!
<<set _linkname to "Now we join " + $pc.firstname() + " in " + $pc.pp + " dorm...">>\
<<link _linkname YourDorm>><</link>><i>(Click on an option to make your selection.)</i><br>
<br>
<<set _bff to $niches["The Best Friend"]>>
<<set $npctocustomize to new Person({person: _bff})>>
<<set _customnpcdescription to "your best friend">>
<<include CustomizeNPC>>
<br>
<div id="customizenpcerror"></div>
<<link "Finish customization">>
<<set _valid = true>>
<<set _displayname to setup.capitalize_each(Util.escapeMarkup(_displayname.trim()))>>
<<if _displayname is _bff>>
<<run delete $people[_bff].displayname>>
<<elseif _displayname isnot $people[_bff].displayname>>
<<if _displayname eq "">>
<<replace "#customizenpcerror">><<highlight bad>>Please enter a name.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif _displayname.indexOf(' ') == -1>>
<<replace "#customizenpcerror">><<highlight bad>>Please enter both a first and last name.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif _displayname.length lt 5>>
<<replace "#customizenpcerror">><<highlight bad>>That name is too short.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif _displayname.length gt 60>>
<<replace "#customizenpcerror">><<highlight bad>>That name is too long.<</highlight>><</replace>>
<<set _valid = false>>
<<else>>
<<set $people[_bff].displayname to _displayname>>
<</if>>
<</if>>
<<if _valid>>
<<unset $npctocustomize>>
<<egoto $bffgennext>>
<<unset $bffgennext>>
<</if>>
<</link>><br>
<<link "Reset and start again" CustomizeBFF>>
<<set $people[_bff] to _origpdata>>
<<unset $npctocustomize>>
<</link>><<nobr>>
<<set _students to setup.people.people_of_type("student")>>
<<set _guy to setup.Events.pick_person({attitudes: [], gender: ["male"], genderpref: ["female"], inclinations: setup.archetypes.inclination_sets.not_shy, strictinclinations: true, residence: "Helleborine Hall"}, _students)>>
<<if _guy is null>>
<<set _guy to setup.Events.pick_person({attitudes: [], gender: ["male"], genderpref: ["female"], inclinations: setup.archetypes.inclination_sets.not_shy, residence: "Helleborine Hall"}, _students)>>
<</if>>
<<if _guy is null>>
<<set _guy to setup.Events.pick_person({attitudes: [], gender: ["male"], inclinations: setup.archetypes.inclination_sets.not_shy, strictinclinations: true, residence: "Helleborine Hall"}, _students)>>
<</if>>
<<if _guy is null>>
<<set _guy to setup.Events.pick_person({attitudes: [], gender: ["male"], inclinations: setup.archetypes.inclination_sets.not_shy, residence: "Helleborine Hall"}, _students)>>
<</if>>
<<if _guy is null>>
<<set _guy to setup.Events.pick_person({attitudes: [], gender: ["male"], inclinations: setup.archetypes.inclination_sets.not_shy}, _students)>>
<</if>>
<<set _girl to setup.Events.pick_person({attitudes: [], gender: ["female"], genderpref: ["male"], inclinations: setup.archetypes.inclination_sets.not_shy, strictinclinations: true, residence: "Trillium Hall"}, _students)>>
<<if _girl is null>>
<<set _girl to setup.Events.pick_person({attitudes: [], gender: ["female"], genderpref: ["male"], inclinations: setup.archetypes.inclination_sets.not_shy, residence: "Trillium Hall"}, _students)>>
<</if>>
<<if _girl is null>>
<<set _girl to setup.Events.pick_person({attitudes: [], gender: ["female"], inclinations: setup.archetypes.inclination_sets.not_shy, strictinclinations: true, residence: "Trillium Hall"}, _students)>>
<</if>>
<<if _girl is null>>
<<set _girl to setup.Events.pick_person({attitudes: [], gender: ["female"], inclinations: setup.archetypes.inclination_sets.not_shy, residence: "Trillium Hall"}, _students)>>
<</if>>
<<if _girl is null>>
<<set _girl to setup.Events.pick_person({attitudes: [], gender: ["female"], inclinations: setup.archetypes.inclination_sets.not_shy}, _students)>>
<</if>>
<<set $people[_guy]["penis size"] to 1000>>
<<set $people[_girl]["breast size"] to 550>>
<<if $people[_guy].attraction isnot "straight">>
<<set $people[_guy].attraction to "bi">>
<</if>>
<<if $people[_girl].attraction isnot "straight">>
<<set $people[_girl].attraction to "bi">>
<</if>>
<<run setup.people.add_inclination(_guy, "Lewd Exhibitionist")>>
<<run setup.people.add_inclination(_girl, "Lewd Exhibitionist")>>
<<set $tourguide to new Person({person: setup.people.get_name("The Chipper Student Advisor")})>>
<<set $tourguy to new Person({person: _guy})>>
<<set $tourgirl to new Person({person: _girl})>>
<<set $tourattracted to $pcsexualprefs.includes("male")>>
<<set $tourbfffemme to setup.people.is_femme($bestfriend)>>
<<set $tourpcfemme to setup.people.is_femme($pc)>>
<<set $tourbothfemme to $tourbfffemme and $tourpcfemme>>
<<run $niches["The Bold Bus Girl"] = $tourgirl.name>>
<</nobr>>\
The bus is boarding at Summit Market. That's not hard to find. It's a quick walk from your residence hall and the big building at the top of the hill is hard to miss.
It's a walking campus, but just for this weekend half of every pathway has been cordoned off with traffic cones, orange ribbons strung between them, making a lane for the tour bus. Said bus comes into view as you crest the hill, and <<firstname $bestfriend>> groans.
"Fuuuck," <<ps>> <<conj say>>. "I thought I'd already been on one of these for the last time."
It's a big yellow schoolbus. The name of the local high school is painted on the side. Borrowed for the weekend, you'd guess.
You file on along with a bunch of other freshmen. You start to take a seat, and <<dfirstname $bestfriend>> pushes on your back. "No, keep going!"
<<psc>> <<conj 'aren\'t'>> satisfied until you're at the very back. You sit down next to the window and <<ps>> <<conj take>> the aisle side, grinning as <<ps>> <<conj bounce>> a couple times. "Just like old times," <<ps>> <<conj say>>. "Remember?"
You laugh, thinking back on many chaotic, mostly unsupervised bus rides. "Yeah, I remember."
[[Next|PrologueTour2]]After a few minutes, a chipper-looking <<= $tourguide.hair_descriptor_simple()>> girl boards the bus. The driver passes her a little handheld microphone thing on a cord and her voice comes over the bus's speakers.
"Hello everyone! Welcome to $uname! My name is <<firstname $tourguide>>. I'm a student advisor here, and I'm going to show you around!"<<run setup.people.become_known($tourguide)>>
She turns and gestures expansively. "We're starting at one of our favorite places here on campus, the Summit Market!"
<<set _config to {locationblock: "Campus", location: "SummitMarket", nolinks: true, floating: true}>>\
<<map _config>>\
"Summit Market serves hot food from early morning till late at night! And if you want some snacks to stash away in your dorm room, it's got you covered there too!"
"Damn," <<firstname $bestfriend>> murmurs. "This is gonna be riveting stuff."
"Shh," you respond, hiding a grin.
"And yes," <<firstname $tourguide>> adds, "this time of year they are <i>most definitely</i> hiring!"
[[Next|PrologueTour3]]The bus pulls away from the market and drives down the path you and <<firstname $bestfriend>> just walked up. Your residence hall swiftly comes into view.
"And here is Chicory Hall! Our newest residence hall, built just a few years ago to accommodate F-K U's growing student body!" <<firstname $tourguide>> announces.
<<set _config to {locationblock: "Campus", location: "HannaRdN", nolinks: true, floating: true}>>\
<<map _config>>\
"Wow, I can see my house from here," says <<dfirstname $bestfriend>>, then "Ow!" as you elbow <<po>> sharply in the ribs.
<<if (!$tourpcfemme or !$tourattracted) and $pcsexualprefs.includes("female")>>[[Next|PrologueTourAlt4]]<<else>>[[Next|PrologueTour4]]<</if>><<run $niches["The Big Dick Bus Guy"] = $tourguy.name>>\
The bus rumbles past Chicory and passes a couple of smaller buildings.
"These are the Bancroft Suites!" says <<firstname $tourguide>>. "Generally reserved for our upperclassmen, and always in high demand!"
<<set _config to {locationblock: "Campus", location: "BancroftLn", nolinks: true, floating: true}>>\
<<map _config>>\
<<firstname $bestfriend>> is fully not paying attention anymore. "Holy shit!" <<ps>> <<conj hiss>>, poking you.
"What?"
<<psc>> <<conj point>> across the aisle. In the other seat is <<aoran $tourguy.hair_descriptor_simple()>> <<= $tourguy.hair_descriptor_simple()>> guy, gazing out the window. You're not sure what the hell <<dfirstname $bestfriend>> finds exceptional about this... and then you see it.
He's wearing loose joggers, and... his dick is ridiculous. You can see the outline of it lying along his thigh.
You laugh as quietly as you can. "What the fuck."
[[Next|PrologueTour5]]The bus reverses course, passes Chicory again, then continues down what <<firstname $tourguide>> informs you is Hanna Road. Two more residence halls, their design identical to yours, are on one side of the road.
Between them is a common area outlined by shrubs and dotted with picnic tables. It looks like a pretty nice space. You wish Chicory had one like it.
"And here are Trillium and Helleborine, our other two residence halls!"
<<set _config to {locationblock: "Campus", location: "HannaRdS", nolinks: true, floating: true}>>\
<<map _config>>\
"Damn," <<firstname $bestfriend>> whispers. You glance at <<po>>, and roll your eyes as you see <<pss>> still fascinated by that guy's dick.<<if setup.people.get_gender($bestfriend) is "male">> You've known for a while that <<ps>> <<conj 'aren\'t'>> totally straight and <<conj find>> an occasional guy attractive, but it's never really come up before.<</if>>
"You're gonna draw attention," you whisper back.
At that moment, <<aoran $tourgirl.hair_descriptor_simple()>> <<= $tourgirl.hair_descriptor_simple()>> girl sitting ahead of you turns around in her seat. "Okay, sorry, I gotta know what you guys are looking at," she says.
This, unfortunately, then draws the attention of Captain Big Dick, who glances your way and promptly finds three pairs of eyes on him. You and <<dfirstname $bestfriend>> snap your heads away, caught.
[[Next|PrologueTour6]]"Next we have Blodgett Gym!" announces <<firstname $tourguide>>. You look. The building is absolutely massive. "This modern facility has everything you could possibly need to stay in shape. Even an indoor pool!"
<<set _config to {locationblock: "Campus", location: "BlodgettGym", nolinks: true, floating: true}>>\
<<map _config>>\
"Damn, it's fucking huge," <<firstname $bestfriend>> remarks. <<psc>> <<conj nudge>> you with a shoulder. "And that building is pretty big, too." <<psc>> deliberately <<conj glance>> at the well-endowed guy again, then back to you with a cheeky grin, just in case you somehow missed the joke.
You roll your eyes. "Yeah, I get it. Stop staring, weirdo."
Your advice certainly isn't being heeded by the <<= $tourgirl.hair_descriptor_simple()>> girl in the seat in front of you. She's noticed what all the fuss is about too, and her jaw has actually dropped as she stares.
[[Next|PrologueTour7]]The bus pulls onto a parking lot. "And here's the main student parking lot!" <<firstname $tourguide>> announces.
"How much did we pay for this tour again?" <<firstname $bestfriend>> asks. You ignore <<po>>.
"This is important to know," <<firstname $tourguide>> continues, "because this is where the Riverside Express stops! That's a bus that goes from here to into town, right to Riverside Shopping Plaza, all day every day!"
<<set _config to {locationblock: "Campus", location: "StudentParking", nolinks: true, floating: true}>>\
<<map _config>>\
The guy across the aisle has taken note of the attention on him. He doesn't seem to mind. In fact, as the three of you watch, he drags a finger slowly up along the outline of his thick cock. <<if $tourattracted>>Despite the ridiculousness of the situation, a little shiver goes through you at the sight.<</if>>
"Fuck," breathes the <<= $tourgirl.hair_descriptor_simple()>> girl.
[[Next|PrologueTour8]]The bus rumbles along, passing a series of mostly smaller buildings. You've been here before. You had to go here to get your ElkCard, your residence hall keycard, and other stuff.
"These are mostly administrative buildings!" <<firstname $tourguide>> calls. "If you lose your keycard, you come here! Our clinic is here too, if you need prescriptions or just a checkup!"
<<set _config to {locationblock: "Campus", location: "LongfellowRd", nolinks: true, floating: true}>>\
<<map _config>>\
"Watch," says <<firstname $bestfriend>>, drawing your attention back to the situation brewing between the <<= $tourgirl.hair_descriptor_simple()>> girl and the giant cock. "Something good is gonna happen."
"Okay Kate Bush, keep it down," you mutter.<<if $tourattracted>> But you find yourself staring too, eyes drawn to the motion as the stranger teases the outline of his shaft again. His eyes flick to yours for a moment. He knows you're looking. You blush and look away.<</if>>
[[Next|PrologueTour9]]The bus proceeds to a particularly well-kept stretch of road with what look like large residential houses on either side. It's like you suddenly transitioned into a suburb. "This is Prescott Road! This is where we have our Greek houses!" That was obvious enough from the funky letters on their fancy signs.
<<set _config to {locationblock: "Campus", location: "PrescottRd", nolinks: true, floating: true}>>\
<<map _config>>\
<<firstname $bestfriend>> takes in a sharp breath next to you, and you glance over to update yourself on the little drama. The <<= $tourgirl.hair_descriptor_simple()>> girl is making eyes at the guy, licking her lips, brazen as anything. <<if $tourattracted>>And the guy...<br><br>Wow. Seeing that thing getting hard has <i>your</i> jaw dropping now. It's slowly attempting to stand upright as it thickens, tenting the guy's joggers.<<else>>And the guy... well, he's not going to be hiding <i>that</i> hard-on. Poor guy.<</if>>
[[Next|PrologueTour10]]"Next up, you'll want to get to know Smith Library! With a quiet <i>and</i> a silent level, you can come here to work on group projects or study in peace, whatever you need!"
<<set _config to {locationblock: "Campus", location: "Library", nolinks: true, floating: true}>>\
<<map _config>>\
The guy stands up to peer out the windows as if he has a pressing need to see this library. The bus is passing the library on your side, so it's your and the <<= $tourgirl.hair_descriptor_simple()>> girl's windows he needs to see out of. Casually, he braces his hand against a seatback and moves into the aisle to see closer as the bus moves.
Casually, his bulging joggers are right in front of the <<= $tourgirl.hair_descriptor_simple()>> girl's face. She stares open-mouthed.
[[Next|PrologueTour11]]Before the girl can react, the guy moves back and sinks back into his seat. He throws an easy grin to <<if $tourbothfemme>>you, <<firstname $bestfriend>>, and the stranger girl, letting you all know he knows exactly what he's doing.<<elseif $tourbfffemme>><<firstname $bestfriend>> and the stranger girl, letting both girls know he knows exactly what he's doing.<<elseif $tourpcfemme>>you and the stranger girl, letting you girls know he knows exactly what he's doing.<<else>>to the stranger girl, letting her know he knows exactly what he's doing.<</if>>
But then, the staring was pretty obvious. It's not like he hasn't had encouragement.
"The Hallowell Building!" <<firstname $tourguide>> shouts. Oh yeah. You forgot about her.
<<set _config to {locationblock: "Campus", location: "HallowellRd", nolinks: true, floating: true}>>\
<<map _config>>\
"Hallowell is the center of the science cluster here! Labs, the weather station, the greenhouse, the observatory, and one of our largest academic buildings... if you have a class in a science major, you'll be having it here!"
[[Next|PrologueTour12]]The bus does a loop, passes the library again, and takes a different turn. "Chamberlain Hall!" <<firstname $tourguide>> announces as the bus rumbles toward a very large, very long building. Kind of reminds you of something else, actually.
<<set _config to {locationblock: "Campus", location: "ChamberlainHall", nolinks: true, floating: true}>>\
<<map _config>>\
"With the University Bookstore, a full dining hall, and much more, Chamberlain Hall is the heart of the campus! And don't let the name fool you! You can get lots of things at the bookstore, like official F-K U apparel! Profits go to student activities here on campus!"
Giant cock man stands back up again, naturally very eager to see this very hyped-up hall. He sways as the bus moves, takes an accidental-seeming step forward.
And his covered cock brushes against the <<= $tourgirl.hair_descriptor_simple()>> girl's face. Far from offended, she just laughs, her cheek almost nuzzled to it.
<<firstname $bestfriend>> grips your knee as if you aren't already staring at this tableau.<<if $tourbfffemme>>Then the bus hits a bump and the guy stumbles a step. It might be actually accidental this time, or it might not. Either way, the big covered dick briefly bumps your best friend in the face.<br><br>"Uh— fuck—" <<ps $bestfriend>> <<conj breathe>>. You can almost hear the error notification as <<pp>> brain shuts down. He repositions himself midway between your seat and the <<= $tourgirl.hair_descriptor_simple()>> girl's.<</if>> <<if $tourpcfemme>>The stranger sees you watching raptly and throws you another grin.<</if>>
[[Next|PrologueTour13]]"Next we come to another academic cluster!" <<firstname $tourguide>> calls. "This is Emerson Road, home of the student gallery and all our art classes!"
<<set _config to {locationblock: "Campus", location: "EmersonRd", nolinks: true, floating: true}>>\
<<map _config>>\
The guy remains standing. He looks down. "So, what residence are you <<if $tourpcfemme or $tourbfffemme>>girls<</if>> in?" he asks conversationally, as he slips his hand down the front of his pants and starts idly stroking himself.
"Trillium," breathes the <<= $tourgirl.hair_descriptor_simple()>> girl, definitely the second-least shy of the bunch.
<<nobr>>
<<if $tourbothfemme>>
"Chicory," you and <<firstname $bestfriend>> say in unison.<br>
<br>
He grins. "Cute."
<<elseif $tourbfffemme>>
"Chicory," <<firstname $bestfriend>> says. You keep quiet, since it's pretty clear what his preferences are.
<<elseif $tourpcfemme>>
"Chicory," you say. <<firstname $bestfriend>> keeps quiet<<if $tourattracted>>, but gives you a knowing grin<</if>>.
<<else>>
You and <<firstname $bestfriend>> both just keep quiet, since the guy's preferences are pretty clear.
<</if>>
<</nobr>>
"I'm in Helleborine," the guy says. He's already breathing faster as he boldly strokes his thick dick inside his loose joggers.<<if !$tourattracted || !$tourpcfemme>> You try to imagine being that bold. Maybe... one day?<</if>>
[[Next|PrologueTour14]]"And now, Thoreau Road! Our largest academic cluster! English, math, business, psychology... almost all of you will have classes here!"
<<set _config to {locationblock: "Campus", location: "ThoreauRd", nolinks: true, floating: true}>>\
<<map _config>>\
"I'm so lucky," the guy says, tugging his cock as his breath puffs softly. "Going to a college with so many hot girls like you..."
<<if $tourbfffemme>>"Oh, we're hot, are we?" asks <<firstname $bestfriend>> with a teasing lilt in her voice. It surprises you. You've never really heard her be flirty before.<<else>>"Oh, you think we're hot?" asks the <<= $tourgirl.hair_descriptor_simple()>> girl, arching her back to push her <<breasts $tourgirl>> out, also the second-least subtle of the crowd.<</if>>
"Yeah," says the guy. He's kneading his cock firmly now, somehow still managing to keep it in his pants as he does so. "Want me to show you how hot you are?"
"Uh-huh," breathes the <<= $tourgirl.hair_descriptor_simple()>> girl with no hesitation.
[[Next|PrologueTour15]]The bus takes a turn, accelerating a little as it drives past some buildings previously on the tour. It takes a different turn near Blodgett Gym, approaching a large park. "Our final stop: the University Mall! This is the campus park!"
<<set _config to {locationblock: "Campus", location: "UniMall", nolinks: true, floating: true}>>\
<<map _config>>\
<<run $tourguy.add_arousal(999)>>\
The guy gives himself a couple more firm pumps, groans, then yanks down the front of his pants, finally revealing his <<cock $tourguy>>. <<if $tourattracted>>You can't help but gasp softly at the thick, throbbing length of it. There's no way anything like that would ever fit inside you... is there?<</if>> <<seenpccrotch $tourguy>>
<<nobr>>
He erupts. His cum isn't very thick, and it exits the tip of his cock in pulsing sprays, like some particularly obscene lawn sprinkler.
<<set $gothit to false>>
<<if $tourbothfemme and $tourattracted>>
He just angles himself vaguely toward all three of you, as if he already knows it'll just get everywhere, and it <i>does</i>. The stranger girl, closest to the splash zone, squeals and lets out a delighted giggle. <<firstname $bestfriend>> gasps as the stray splatter catches <<po>>. You feel wet droplets spatter against your arm, your face, like a light, warm rain.
<<set $gothit to true>>
<<elseif $tourbfffemme>>
He angles himself to mostly hit the stranger girl, but you hear <<firstname $bestfriend>> gasp as she's caught by stray splatter. Despite her surprise, she isn't exactly trying to move out of the way. The stranger girl squeals and lets out a delighted giggle as she gets the worst of it.
<<elseif $tourpcfemme and $tourattracted>>
He angles himself to hit the stranger girl just about full on, and she squeals and lets out a delighted giggle. You bite your lip, feeling distantly... jealous?<br>
<br>
Which is when he gives you a knowing grin, and <<firstname $bestfriend>> laughs and leans out of the way as, before you can react, a spray of cum gets shot your way. From this distance, it's not too big a deal, but you feel wet droplets spatter against your arm, your face, like a light, warm rain.
<<set $gothit to true>>
<<else>>
He angles himself to hit the stranger girl just about full on, and she squeals and lets out a delighted giggle. The spray leaves dark spots on her tight top. <<if $pcsexualprefs.includes("female") and $pc.has_part("penis")>>You find yourself imagining doing that to some willing girl yourself...<</if>>
<</if>>
<</nobr>>
"Everything all right back there?" comes <<firstname $tourguide>>'s voice over the bus speaker, and the guy hastily tucks away his shrinking cock.
"Um, yeah!" calls the <<= $tourgirl.hair_descriptor_simple()>> girl. "Just... I just spilled a drink!"
[[Next|PrologueTour16]]"Well, we've come to the end of the tour!" <<firstname $tourguide>> says as the bus comes to a stop near the park. "If you want to get out here, there's about to be a hot dog cookout in the park! If not, we'll take you back to Summit Market."
<br><br>
You're not sure which you want to do, but you sense the post-nut atmosphere at the back of the bus is about to become awkward, so you decide discretion is the better part of valor and disembark.
<br><br>
"Wow," says <<firstname $bestfriend>>. "That happened."
<<set _bffexp to new Person({person: $bestfriend})>>
<<set _shirt to _bffexp.outermost_covering("chest")>>
<<if $tourbothfemme and $tourattracted>>
Her <<clothingshortname _shirt _bffexp>> is spattered with dark wet spots. You're sure it's all over your shirt too... probably in your hair... frankly, you're a little afraid to find out.
<<elseif $tourbfffemme>>
Her <<clothingshortname _shirt _bffexp>> is spattered with dark wet spots. Damn, you realize. Your best friend just got cummed on. That's wild.
<<elseif $tourpcfemme and $tourattracted>>
That's hardly news to you. You can still sense the droplets on your skin. You're sure it's all over your shirt too... probably in your hair... frankly, you're a little afraid to find out.
<</if>>
<br><br>
"It sure did," you say. "I feel like a lot of things just happened."
<br><br>
<<dfirstname $bestfriend>> laughs. "I bet."
<br><br>
<<set $header to '<<firstname $bestfriend>> turns to you and wrinkles <<pp>> nose. "Think I might skip the seared-but-still-raw outdoor hot dogs and stop by a dining hall. You coming?"<br><br>"Maybe later," you say.<br><br><<psc>> <<conj nod>>. "All good. See you later!"'>>
<<unset $tourattracted>><<unset $tourbfffemme>><<unset $tourbothfemme>><<unset $tourgirl>><<unset $tourguy>><<unset $tourguide>><<unset $tourpcfemme>>
<<if !$gothit>>
[[Next|Prologue15.2]]
<<else>>
<<psc>> <<conj turn>> away to gaze out across the park, and for a moment, nobody is paying attention to you.
<br><br>
<<skillgate Exhibitionism 1 "Let the cum dry on your skin" 'Prologue15.2'>>
<<set $header to "You let the cum just dry on your skin and clothes, a near-invisible souvenir of what just happened.<br><br>" + $header>>
<</skillgate>>
<<skillgate Disinhibition 1 "Taste some of that cum" 'Prologue15.2'>>
<<set $header to "Quickly, you lift your hand and touch your tongue to your forearm, right where one of the droplets hit you. It's a small droplet and there isn't much taste to it... just a hint of saltiness.<br><br>" + $header>>
<</skillgate>>
<<skillgate Willpower 1 "Gross! Wipe off the cum" 'Prologue15.2'>>
<<set $header to "You do your best to wipe the cum off on your clothes. Ewww.<br><br>" + $header>>
<</skillgate>>
<</if>>
<<unset $gothit>>The bus rumbles past Chicory and passes a couple of smaller buildings.
"These are the Bancroft Suites!" says <<firstname $tourguide>>. "Generally reserved for our upperclassmen, and always in high demand!"
<<set _config to {locationblock: "Campus", location: "BancroftLn", nolinks: true, floating: true}>>\
<<map _config>>\
<<firstname $bestfriend>> is fully not paying attention anymore. "Wow," <<ps>> <<conj say>> quietly.
"What?"
<<psc>> <<conj point>> across the aisle. In the other seat is <<aoran $tourgirl.hair_descriptor_simple()>> <<= $tourgirl.hair_descriptor_simple()>> girl, gazing out the window. She's pretty, yeah, but you're not sure why <<dfirstname $bestfriend>> is pointing at a stranger.
Then, inevitably, you glance at her tits. They're <<= $tourgirl.breast_descriptor()>>, but what's really hot is she's wearing a tight top and her nipples are obviously hard.
"Wow," you echo.
"Uh-huh. That girl is definitely not wearing a bra," <<dfirstname $bestfriend>> says.
[[Next|PrologueTourAlt5]]The bus reverses course, passes Chicory again, then continues down what <<firstname $tourguide>> informs you is Hanna Road. Two more residence halls, their design identical to yours, are on one side of the road.
Between them is a common area outlined by shrubs and dotted with picnic tables. It looks like a pretty nice space. You wish Chicory had one like it.
"And here are Trillium and Helleborine, our other two residence halls!"
<<set _config to {locationblock: "Campus", location: "HannaRdS", nolinks: true, floating: true}>>\
<<map _config>>\
"Damn," <<firstname $bestfriend>> whispers. You glance at <<po>>, and roll your eyes as you see <<pss>> still fascinated by that girl's chest.<<if setup.people.get_gender($bestfriend) is "female">> You've known for a while that <<ps>> <<conj 'aren\'t'>> totally straight and <<conj find>> an occasional girl attractive, but it's never really come up before.<</if>>
"Chill. We live in an enlightened age. Lots of girls don't wear bras," you whisper back.
"Yeah, but freeboobing with that top?" <<dfirstname $bestfriend>> mumbles. "I sense an exhibitionist."
As if she heard, the girl glances your way and promptly finds two pairs of eyes on her. You and <<dfirstname $bestfriend>> snap your heads away, caught.
[[Next|PrologueTourAlt6]]"Next we have Blodgett Gym!" announces <<firstname $tourguide>>. You look. The building is absolutely massive. "This modern facility has everything you could possibly need to stay in shape. Even an indoor pool!"
<<set _config to {locationblock: "Campus", location: "BlodgettGym", nolinks: true, floating: true}>>\
<<map _config>>\
"I know one girl on this bus who's already pretty fit," <<firstname $bestfriend>> remarks. <<psc>> deliberately <<conj glance>> at the braless girl again, then back to you with a cheeky grin, just in case you somehow missed the joke.
You roll your eyes. Lucky for <<po>> that the girl is looking out her window again. "Yeah, I get it. Stop staring, weirdo."
You suspect your advice is lost on <<po>>.
[[Next|PrologueTourAlt7]]The bus pulls onto a parking lot. "And here's the main student parking lot!" <<firstname $tourguide>> announces.
"How much did we pay for this tour again?" <<firstname $bestfriend>> asks. You ignore <<po>>.
"This is important to know," <<dfirstname $tourguide>> continues, "because this is where the Riverside Express stops! That's a bus that goes from here to into town, right to Riverside Shopping Plaza, all day every day!"
<<set _config to {locationblock: "Campus", location: "StudentParking", nolinks: true, floating: true}>>\
<<map _config>>\
The girl across the aisle has again noticed the attention on her. But she doesn't seem to mind. In fact, as the two of you watch, she puts a playful little arch in her back, pushing out her <<breasts $tourgirl>>.
"Holy shit," <<dfirstname $bestfriend>> breathes.
[[Next|PrologueTourAlt8]]The bus rumbles along, passing a series of mostly smaller buildings. You've been here before. You had to go here to get your ElkCard, your residence hall keycard, and other stuff.
"These are mostly administrative buildings!" <<firstname $tourguide>> calls. "If you lose your keycard, you come here! Our clinic is here too, if you need prescriptions or just a checkup!"
<<set _config to {locationblock: "Campus", location: "LongfellowRd", nolinks: true, floating: true}>>\
<<map _config>>\
"Watch," says <<firstname $bestfriend>>, making sure your attention is still on the bold <<= $tourgirl.hair_descriptor_simple()>> girl and her perky nipples, as if you needed the reminder. "Something good is gonna happen."
"Okay Kate Bush, keep it down," you mutter. But you find yourself staring too. Her eyes flick to yours for a moment. She knows you're looking, and she doesn't mind. You can't hold the eye contact. You blush and look away.
[[Next|PrologueTourAlt9]]The bus proceeds to a particularly well-kept stretch of road with what look like large residential houses on either side. It's like you suddenly transitioned into a suburb. "This is Prescott Road! This is where we have our Greek houses!" That was obvious enough from the funky letters on their fancy signs.
<<set _config to {locationblock: "Campus", location: "PrescottRd", nolinks: true, floating: true}>>\
<<map _config>>\
<<firstname $bestfriend>> takes in a sharp breath next to you, and you glance over again. The girl has stepped up her teasing, her tight shirt peeled up enough to bare her belly... fabric-covered perky nips and a cute little belly button.
[[Next|PrologueTourAlt10]]"Next up, you'll want to get to know Smith Library! With a quiet <i>and</i> a silent level, you can come here to work on group projects or study in peace, whatever you need!"
<<set _config to {locationblock: "Campus", location: "Library", nolinks: true, floating: true}>>\
<<map _config>>\
The girl stands up to peer out the windows as if she has a pressing need to see this library. The bus is passing the library on your side, so it's your and <<firstname $bestfriend>>'s window she needs to see out of. Casually, she braces her hand against a seatback and moves into the aisle, leaning over to see closer as the bus moves.
Casually, her thinly-covered breasts are right at eye level. All you can do is stare.
[[Next|PrologueTourAlt11]]Before either you or <<firstname $bestfrend>> can react, the girl moves back and sinks back into her seat. She throws an easy grin to both of you, letting you know she knows exactly what she's doing.
"The Hallowell Building!" <<firstname $tourguide>> shouts. Oh yeah. You forgot about her.
<<set _config to {locationblock: "Campus", location: "HallowellRd", nolinks: true, floating: true}>>\
<<map _config>>\
"Hallowell is the center of the science cluster here! Labs, the weather station, the observatory, and one of our largest academic buildings... if you have a class in a science major, you'll be having it here!"
[[Next|PrologueTourAlt12]]The bus does a loop, passes the library again, and takes a different turn. "Chamberlain Hall!" <<firstname $tourguide>> announces as the bus rumbles toward a very large, very long building.<<if $pc.has_part("penis")>> Kind of reminds you of what's happening in your pants, actually.<</if>>
<<set _config to {locationblock: "Campus", location: "ChamberlainHall", nolinks: true, floating: true}>>\
<<map _config>>\
"With the University Bookstore, a full dining hall, and much more, Chamberlain Hall is the heart of the campus! And don't let the name fool you! You can get lots of things at the bookstore, like official F-K U apparel! Profits go to student activities here on campus!"
The bold girl stands back up again, naturally very eager to see this very hyped-up hall. She sways as the bus moves, takes an accidental-seeming step forward.
And her covered breast brushes against your best friend's face.
"Uh— fuck—" <<firstname $bestfriend>> breathes. You can almost hear the error notification as <<pp>> brain shuts down. The girl grins at you both again.
[[Next|PrologueTourAlt13]]"Next we come to another academic cluster!" <<firstname $tourguide>> calls. "This is Emerson Road, home of the student gallery and all our art classes!"
<<set _config to {locationblock: "Campus", location: "EmersonRd", nolinks: true, floating: true}>>\
<<map _config>>\
The girl straightens a little and looks down. "So, what residence are you two in?" she asks conversationally, as she grabs <<firstname $bestfriend>>'s hand and pulls it to her breast, like it's nothing.
<<skillgate Disinhibition 1 "You wouldn't mind touching them too..." PrologueTourAlt13a>><<set $tittyenthusiasm to true>><</skillgate>>
<<skillgate Willpower 1 "You'll refrain" PrologueTourAlt13b>><<set $tittyenthusiasm to false>><</skillgate>>"Chicory," you and <<dfirstname $bestfriend>> answer at the same time, both in a daze. <<dfirstname $bestfriend>> squeezes and kneads the stranger's <<= $tourgirl.breast_descriptor()>> breast, apparently needing little encouragement.
But you could use a little.
"I'm in Helleborine," the girl says. She gives you a nod, and you suck in a breath, immediately reaching forward to grasp the girl's other breast. You can feel her hard little nipple against your palm through the thin shirt.
You squeeze.
[[Next|PrologueTourAlt14]]"Chicory," you and <<dfirstname $bestfriend>> answer at the same time, both in a daze. <<dfirstname $bestfriend>> squeezes and kneads the stranger's <<= $tourgirl.breast_descriptor()>> breast, apparently needing little encouragement.
You keep your hands clasped in your lap.
"I'm in Helleborine," the girl says. She gives you a look and purses her lips, but says nothing.
[[Next|PrologueTourAlt14]]"And now, Thoreau Road! Our largest academic cluster! English, math, business, psychology... almost all of you will have classes here!"
<<set _config to {locationblock: "Campus", location: "ThoreauRd", nolinks: true, floating: true}>>\
<<map _config>>\
"So, did you two pick this university for the parties?" the <<= $tourgirl.hair_descriptor_simple()>> girl asks, all conversational, as if she isn't having her <<if $tittyenthusiasm>>breasts groped by two strangers<<else>>breast groped by a stranger<</if>> at the present moment.
"Believe it or not, I picked it for actual schooling," <<firstname $bestfriend>> says. You nod along.
The girl laughs. "Wow. So... would you rather be super serious students then, or would you rather see my tits?"
A pause. You and your best friend exchange a look.
"We'd like to see your tits," <<dfirstname $bestfriend>> whispers. <<if $tittyenthusiasm>>You nod along.<<else>>You remain silent.<</if>>
[[Next|PrologueTourAlt15]]The bus takes a turn, accelerating a little as it drives past some buildings previously on the tour. It takes a different turn near Blodgett Gym, approaching a large park. "Our final stop: the University Mall! This is the campus park!"
<<set _config to {locationblock: "Campus", location: "UniMall", nolinks: true, floating: true}>>\
<<map _config>>\
The <<= $tourgirl.hair_descriptor_simple()>> girl laughs, then all in one motion, she straightens up, thrusts her chest out, and lifts her shirt, showing you her <<breasts $tourgirl naked>> and hard nipples. She bounces on her heels once, making them jiggle. <<seenpcbreasts $tourgirl>>
You and <<firstname $bestfriend>> can only stare.
Then, "Please remain seated!" says <<firstname $tourguide>>'s voice over the bus speaker, and the girl squeaks and hastily lowers her top, dropping back into her seat.
[[Next|PrologueTourAlt16]]"Well, we've come to the end of the tour!" <<firstname $tourguide>> says as the bus comes to a stop near the park. "If you want to get out here, there's about to be a hot dog cookout in the park! If not, we'll take you back to Summit Market."
You're not sure which you want to do, but the girl gets up to leave the bus and, one brain cell between you, both you and <<firstname $bestfriend>> follow.
Unfortunately, once outside, she just calls, "Nice meeting you two! Bye!" over her shoulder as she walks away, making her intentions, or lack thereof, clear.
You stare in silence.
"Wow," says <<dfirstname $bestfriend>> after a moment. "That happened."
"It sure did," you say. "I feel like a lot of things just happened."
<<dfirstname $bestfriend>> pats you on the shoulder. "They sure as hell did."
<<set $header to '<<firstname $bestfriend>> wrinkles <<pp>> nose. "Think I might skip the seared-but-still-raw outdoor hot dogs and stop by a dining hall. You coming?"<br><br>"Maybe later," you say.<br><br><<psc>> <<conj nod>>. "All good. See you later!"'>>\
<<unset $tourattracted>><<unset $tourbfffemme>><<unset $tourbothfemme>><<unset $tourgirl>><<unset $tourguy>><<unset $tourguide>><<unset $tourpcfemme>><<unset $tittyenthusiasm>>\
[[Next|Prologue15.2]]So you want a quickstart, but how quick a start would you like?
You may want to still decide what your character looks like, your classes, and so on.
But if you want to get <i>straight</i> into the game, we can do that too!
<<link "I still want to decide a few things" Quickstart>><</link>> (recommended)
<<link "Straight into the game, please!" YourDorm>>
<<set $pcskills to {"Charisma": 200, "Willpower": 100, "Exhibitionism": 100, "Voyeurism": 100, "Sexual Knowledge": 200, "Disinhibition": 100, "Dominance": 0, "Submission": 0, "Hand": 200, "Oral": 100, "Vaginal": 0, "Anal": 0, "Penetrative": 0, "Studying": 100}>>
<<set _course1 to setup.School.find_course("psychology", "Block A")>>
<<set _course2 to setup.School.find_course("psychology", "Block B")>>
<<set _course3 to setup.School.find_course("art", "Block C")>>
<<set _course4 to setup.School.find_course("science", "Block D")>>
<<set $pccourses to [_course1, _course2, _course3, _course4]>>
<<run setup.people.become_known($pcroommate)>>
<<set $bestfriend to setup.randomchoice([$boybff, $girlbff])>>
<<run setup.people_niches()["The Best Friend"] = $bestfriend>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<run setup.people.become_known($bestfriend)>>
<<run setup.people.learn_gender($bestfriend)>>
<<run setup.people.learn_number($bestfriend)>>
<<run $people[$bestfriend].residence = $pcresidence>>
<<run $people[$bestfriend].schedule = 4>>
<<set $people[$bestfriend].relationship to "best friend">>
<<set $people[$bestfriend].special to true>>
<<unset $boybff>><<unset $girlbff>>
<<run setup.place_bff()>>
<<run setup.init_post_chargen()>>
<<run setup.init_pc_outfit()>>
<</link>>Okay, let's start with physical attributes! There are no wrong answers, just go with whatever you care to play.
<br><br>
<<customizepc Quickstart2>><<widget "customizepc">>
<<set _oldpc to Object.assign({}, $pc)>>
<<set _prologue to tags().includes("prologue")>>
<<set _displaycurrent to !tags().includes("chargen")>>
<<if _prologue>>
You go into the bathroom and strip off your clothes, baring your
<<else>>
Your skin color is
<</if>>
<span id="skincolorchoice" class="nokeys">
[
<<for _skincolor range setup.skin_colors>>
<<if _skincolor isnot setup.skin_colors[0]>> | <</if>>
<<if _displaycurrent and _skincolor is $pc["skin color"]>>
<<highlight>>_skincolor<</highlight>>
<<else>>
<<capture _skincolor>><<link _skincolor>><<set $pcskincolor to _skincolor>><<replace "#skincolorchoice">>_skincolor<</replace>><</link>><</capture>>
<</if>>
<</for>>
]
</span><<if _prologue>> skin<</if>>.
<<if _prologue>>
<br><br>
Something about this day, with you about to embark on the next stage of your life, has you feeling introspective. You pause and glance at yourself in the full length mirror, trying to see yourself how others would see you.
<</if>>
<br><br>
<<if _prologue>>
You meet your own
<<else>>
Your eye color is
<</if>>
<span id="eyecolorchoice" class="nokeys">
[
<<for _eyecolor range setup.eye_colors>>
<<if _eyecolor isnot setup.eye_colors[0]>> | <</if>>
<<if _displaycurrent and _eyecolor is $pc["eye color"]>>
<<highlight>>_eyecolor<</highlight>>
<<else>>
<<capture _eyecolor>><<link _eyecolor>><<set $pceyecolor to _eyecolor>><<replace "#eyecolorchoice">>_eyecolor<</replace>><</link>><</capture>>
<</if>>
<</for>>
]
</span><<if _prologue>> eyes and<<else>>.<br><br><</if>>
<<if _prologue>>
brush your fingers through your
<<else>>
Your hair is
<</if>>
<span id="hairlengthchoice" class="nokeys">
[
<<for _hairlength range setup.hairlengths>>
<<if _hairlength isnot setup.hairlengths[0]>> | <</if>>
<<if _displaycurrent and _hairlength is $pc["hair length"]>>
<<highlight>>_hairlength<</highlight>>
<<else>>
<<capture _hairlength>><<link _hairlength>><<set $pchairlength to _hairlength>><<replace "#hairlengthchoice">>_hairlength<</replace>><</link>><</capture>>
<</if>>
<</for>>
]
</span>
<<if !_prologue>>
and
<</if>>
<span id="haircolorchoice" class="nokeys">
[
<<for _haircolor range setup.hair_colors>>
<<if _haircolor isnot setup.hair_colors[0]>> | <</if>>
<<if _displaycurrent and _haircolor is $pc["hair color"]>>
<<highlight>>_haircolor<</highlight>>
<<else>>
<<capture _haircolor>><<link _haircolor>><<set $pchaircolor to _haircolor>><<replace "#haircolorchoice">>_haircolor<</replace>><</link>><</capture>>
<</if>>
<</for>>
]
</span><<if _prologue>> hair.<<else>>. (There are ways to change this later.)<</if>>
<<if _prologue>>
<br><br>
<i>Is my style a little basic?</i> you find yourself wondering. But once you're in college, you'll surely get the chance to invent a new you.
<</if>>
<br><br>
<<if $pc.grows_beard>>
<<if _prologue>>
Your hand moves to your chin. You find your facial hair is
<<else>>
Your facial hair is
<</if>>
<span id="beardchoice" class="nokeys">
[
<<for _beard_len_string range setup.Cosmetics.beard_lengths>>
<<if _beard_len_string isnot "shaved">> | <</if>>
<<if _displaycurrent and _beard_len_string is $pcbeardlenstring>>
<<highlight>>_beard_len_string<</highlight>>
<<else>>
<<capture _beard_len_string>><<link _beard_len_string>><<set $pcbeardlenstring to _beard_len_string>><<replace "#beardchoice">>_beard_len_string<</replace>><</link>><</capture>>
<</if>>
<</for>>
]</span>.
<br><br>
<</if>>
<<if $pc.has_part("breasts")>>
<<if _prologue>>
You glance critically at your
<<else>>
Your breasts are
<</if>>
<span id="breastval" class="sexy"><<breasts $pc>></span>
<<if _prologue>>breasts<</if>>
with
<span id="nippletypechoice" class="nokeys">
[
<<for _i, _nippletype range setup.nipple_types>>
<<if typeof _nippletype isnot "string">><<continue>><</if>>
<<if _i gt 0>> | <</if>>
<<if _displaycurrent and _nippletype is $pc["nipple type"]>>
<<highlight>>_nippletype<</highlight>>
<<else>>
<<capture _nippletype>><<link _nippletype>><<set $pcnippletype to _nippletype>><<replace "#nippletypechoice">>_nippletype<</replace>><</link>><</capture>>
<</if>>
<</for>>
]
</span>
nipples
and
<span id="areolaval" class="sexy"><<= $pc.areola_descriptor(false)>></span>
<span id="areolacolorchoice" class="nokeys">
[
<<for _i, _areolacolor range setup.areola_colors>>
<<if _i gt 0>> | <</if>>
<<if _displaycurrent and _areolacolor is $pc["areola color"]>>
<<highlight>>_areolacolor<</highlight>>
<<else>>
<<capture _areolacolor>><<link _areolacolor>><<set $pcareolacolor to _areolacolor>><<replace "#areolacolorchoice">>_areolacolor<</replace>><</link>><</capture>>
<</if>>
<</for>>
]
</span>
areolas.
<</if>>
<<if $pc.has_part("penis")>>
Your penis is
<span id="penisval" class="sexy"><<penis $pc>></span>,
and it's
<span id="penistypechoice" class="nokeys">
[
<<for _i, _penistype range setup.penis_types>>
<<if typeof _penistype isnot "string">><<continue>><</if>>
<<if _i gt 0>> | <</if>>
<<if _displaycurrent and _penistype is $pc["penis type"]>>
<<highlight>>_penistype<</highlight>>
<<else>>
<<capture _penistype>><<link _penistype>><<set $pcpenistype to _penistype>><<replace "#penistypechoice">>_penistype<</replace>><</link>><</capture>>
<</if>>
<</for>>
]</span>.
<</if>>
<<if _prologue>>
You then turn to look at your
<<else>>
Your butt is
<</if>>
<span id="buttval" class="sexy"><<butt $pc>></span><<if _prologue>> butt<</if>>.
<<if ndef $pc.hairiness>><<set $pc.hairiness to 2>><</if>>
Your body hair is <span id="hairiness" class="sexy"><<= ["smooth", "stubbly", "average", "hairy", "very hairy"][$pc.hairiness]>></span>.
<<if _prologue>>
<br><br>
You can't help but wonder what others will think of your body. You're going to a party college, after all... surely things will happen.
<</if>>
<br>
<ul class="charcustomize-sliders-container prologue-sliders-container">
<<if $pc.has_part("breasts")>>
<li>
<<set _startval to $pc["breast size"]>>
<label for="slidebreasts">Breast Size</label>
<input type="range" id="slidebreasts" name="slidebreasts" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="breast size" oninput="SugarCubeInputObject(this)">
</li>
<li>
<<set _startval to $pc["areola size"]>>
<label for="slideareolas">Areola Size</label>
<input type="range" id="slideareolas" name="slideareolas" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="areola size" oninput="SugarCubeInputObject(this)">
</li>
<</if>>
<<if $pc.has_part("penis")>>
<li>
<<set _startval to $pc["penis size"]>>
<label for="slidepenis">Penis Length</label>
<input type="range" id="slidepenis" name="slidepenis" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="penis size" oninput="SugarCubeInputObject(this)">
</li>
<li>
<<set _startval to $pc["penis girth"]>>
<label for="slidepenis2">Penis Girth</label>
<input type="range" id="slidepenis2" name="slidepenis2" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="penis girth" oninput="SugarCubeInputObject(this)">
</li>
<</if>>
<<if $pc.has_part("butt")>>
<li>
<<set _startval to $pc["ass size"]>>
<label for="slidebutt">Butt Size</label>
<input type="range" id="slidebutt" name="slidebutt" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="ass size" oninput="SugarCubeInputObject(this)">
</li>
<</if>>
<li>
<<set _startval to $pc.hairiness>>
<label for="slidehair"><<if $optextrabodyhair>>Body Hair<<else>>Pubic Hair<</if>></label> /* starting values for body hair (and also secretly body_hair_growth) */
<input type="range" id="slidehair" name="slidehair" min="0" max="4"
@value="_startval" class="slider" data-obj="$pc" data-var="hairiness" oninput="SugarCubeInputObject(this)">
</li>
</ul>
<<if _prologue>>You suppose you'd describe yourself as<<else>>Your stature would be described as<</if>> <span id="heightval" class="sexy"><<= $pc.height_descriptor()>></span> and your overall physique as <span id="physiqueval" class="sexy"><<= $pc.physique_descriptor()>></span>.
<<if _prologue>>
Most college freshmen gain weight, don't they? Keeping the physique you like will probably take a little effort.
<<else>>
(Your physique can change depending on how you play.)
<</if>>
<br>
<ul class="charcustomize-sliders-container prologue-sliders-container">
<li>
<<set _startval to $pc.height>>
<label for="slideheight">Height</label>
<input type="range" id="slideheight" name="slideheight" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="height" oninput="SugarCubeInputObject(this)">
</li>
<li>
<<set _startval to $pc.plumpness>>
<label for="slideplumpness">Plumpness</label>
<input type="range" id="slideplumpness" name="slideplumpness" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="plumpness" oninput="SugarCubeInputObject(this)">
</li>
<li>
<<set _startval to $pc.muscle>>
<label for="slidemuscle">Muscle</label>
<input type="range" id="slidemuscle" name="slidemuscle" min="0" max="1000"
@value="_startval" class="slider" data-obj="$pc" data-var="muscle" oninput="SugarCubeInputObject(this)">
</li>
</ul>
<span class="nokeys">
<<choosedmarks $pc>>
</span>
<br>
<<script>>
$(document).one(":passagerender", function(event)
{
$(event.content).find("#breastval").text(V.pc.breast_descriptor());
$(event.content).find("#slidebreasts").on("input", function()
{
$("#breastval").empty().text(V.pc.breast_descriptor());
});
$(event.content).find("#areolaval").text(V.pc.areola_descriptor(false));
$(event.content).find("#slideareolas").on("input", function()
{
$("#areolaval").empty().text(V.pc.areola_descriptor(false));
});
$(event.content).find("#penisval").text(V.pc.penis_descriptor());
$(event.content).find("#slidepenis").on("input", function()
{
$("#penisval").empty().text(V.pc.penis_descriptor());
});
$(event.content).find("#slidepenis2").on("input", function()
{
$("#penisval").empty().text(V.pc.penis_descriptor());
});
$(event.content).find("#buttval").text(V.pc.butt_descriptor());
$(event.content).find("#slidebutt").on("input", function()
{
$("#buttval").empty().text(V.pc.butt_descriptor());
});
$(event.content).find("#heightval").text(V.pc.height_descriptor());
$(event.content).find("#slideheight").on("input", function()
{
$("#heightval").empty().text(V.pc.height_descriptor());
});
$(event.content).find("#physiqueval").text(V.pc.physique_descriptor());
$(event.content).find("#slideplumpness").on("input", function()
{
$("#physiqueval").empty().text(V.pc.physique_descriptor());
});
$(event.content).find("#slidemuscle").on("input", function()
{
$("#physiqueval").empty().text(V.pc.physique_descriptor());
});
$(event.content).find("#slidehair").on("input", function()
{
$("#hairiness").empty().text(["smooth", "stubbly", "average", "hairy", "very hairy"][V.pc.hairiness]);
});
});
<</script>>
<br>
<<link "Finish">>
<<script>>
let pc = V.pc;
pc["skin color"] = V.pcskincolor;
pc["eye color"] = V.pceyecolor;
pc["hair color"] = V.pchaircolor;
pc["hair length"] = V.pchairlength;
pc["nipple type"] = V.pcnippletype;
pc["areola color"] = V.pcareolacolor;
pc["penis type"] = V.pcpenistype;
const _beard_styles = ["shaved","stubble","unstyled"];
if (pc.grows_beard){
pc["beard_length"] = setup.Cosmetics.beard_lengths.indexOf(V.pcbeardlenstring);
pc["beard_style"] = pc["beard_length"] > 1 ? _beard_styles[2] : _beard_styles[pc["beard_length"]];
};
const stats = ["height", "plumpness", "muscle", "breast size", "penis size", "ass size", "areola size", "penis girth"];
let pcstats = V.pcstats;
for (let i = 0; i < stats.length; i++)
{
if (typeof pc[stats[i]] == "string")
{
pc[stats[i]] = parseInt(pc[stats[i]]);
}
pcstats[stats[i]] = pc[stats[i]];
}
State.setVar("$pcstats", pcstats);
if (typeof pc.hairiness == "string")
pc.hairiness = Number(pc.hairiness);
let hairvalue = ["smooth", "stubble", "average", "hairy", "very hairy"][pc.hairiness];
if (tags().includes("chargen") || true)
{
pc.pubic_style = hairvalue == "smooth" ? "shaved" : hairvalue;
for (const hair of Object.keys(pc.body_hair)){
pc.body_hair[hair] = hairvalue;
}
if (pc.is_masc()){
pc.body_hair["chest"] = hairvalue;
let newhairstyles = V.lastbodyhairstyles || {};
newhairstyles["chest"] = 0;
V.lastbodyhairstyles = newhairstyles;
}
}
delete pc.hairiness;
pc.set_anonymous_name();
<</script>>
<<if _args[0]>>
<<go _args[0]>>
<<else>>
<<run Dialog.close()>>
<</if>>
<</link>>
<br>
<<if tags().includes("chargen")>>
<<link "Reset">>
<<if _args[0]>>
<<set _passage to passage()>>
<<go _passage>>
<<else>>
<<run Dialog.close()>>
<</if>>
<</link>>
<<else>>
<<link "Cancel">>
<<script>>
for (const [k, v] of Object.entries(T.oldpc))
V.pc[k] = v;
V.pcskincolor = V.pc["skin color"];
V.pceyecolor = V.pc["eye color"];
V.pchaircolor = V.pc["hair color"] ;
V.pchairlength = V.pc["hair length"];
V.pcnippletype = V.pc["nipple type"];
V.pcareolacolor = V.pc["areola color"];
V.pcpenistype = V.pc["penis type"];
<</script>>
<<go $lastlocpassage>>
<</link>>
<</if>>
<</widget>><<set _points to 12>>\
<<set _per to 4>>\
Now you can distribute _points points into your skills for a better start, but don't put more than _per into any one skill! Gotta leave some room for improvement!
This gives you slightly less total points than the prologue start but much more flexibility in how they're distributed.
Note: You probably want to put a point or two into both Disinhibition and Sexual Knowledge to help get things rolling. Unless you want to play a totally sheltered character, which can be fun too!
<<link "Just give me a good distribution" "Quickstart3">>
<<set $pcskills to _autopcskills>>
<</link>>
<<nobr>>
<<set $pcskills to {"Charisma": 0, "Willpower": 0, "Exhibitionism": 0, "Voyeurism": 0, "Sexual Knowledge": 0, "Disinhibition": 0, "Dominance": 0, "Submission": 0, "Hand": 0, "Oral": 0, "Vaginal": 0, "Anal": 0, "Penetrative": 0}>>
<<set _autopcskills to {"Charisma": 200, "Willpower": 100, "Exhibitionism": 100, "Voyeurism": 100, "Sexual Knowledge": 200, "Disinhibition": 100, "Dominance": 0, "Submission": 0, "Hand": 200, "Oral": 100, "Vaginal": 0, "Anal": 0, "Penetrative": 0, "Studying": 100}>>
<<set _allskills to setup.Skills.mainskills.concat(setup.Skills.otherskills)>>
<<run _allskills.push({name: "Money", description: "A starting money boost! Multiply by $200."})>>
<<set _boosts to {}>>
<<for _i to 0; _i < _allskills.length; _i++>>
<<set _boosts[_allskills[_i].name] to 0>>
<</for>>
Points remaining: <b><span id="points">_points</span></b><br><br>
<table class="nokeys">
<<for _i to 0; _i < _allskills.length; _i++>>
<<set _skill to _allskills[_i].name>>
<<set _el to _skill.split(' ').join('_')>>
<<set _htel to "#" + _el>>
<<capture _skill,_el,_htel>>
<tr>
<td class="chargen-skills-info">
<div style="font-weight: bold;"><<skilllabel _skill 1>></div>
<div style="font-style: italic; font-size: 80%;"><<= _allskills[_i].description>></div>
</td>
<td class="chargen-skills-buttons">
<<button "−">>
<<if _boosts[_skill] gt 0>>
<<set _boosts[_skill]-->>
<<set _points++>>
<<replace _htel>><<= _boosts[_skill]>><</replace>>
<<replace "#points">>_points<</replace>>
<</if>>
<</button>>
<div class="chargen-skills-value" @id="_el">0</div>
<<button "+">>
<<if _boosts[_skill] lt _per and _points gt 0>>
<<set _boosts[_skill]++>>
<<set _points-->>
<<replace _htel>><<= _boosts[_skill]>><</replace>>
<<replace "#points">>_points<</replace>>
<</if>>
<</button>>
</td>
</tr>
<</capture>>
<</for>>
</table>
<<link "Skills set! Next!" "Quickstart3">>
<<for _skill range Object.keys(_boosts)>>
<<if _boosts[_skill] gt 0>>
<<if _skill is "Money">>
<<set $pcmoney to $pcmoney + (200 * _boosts[_skill])>>
<<else>>
<<run $pc.raise_skill(_skill, 100 * _boosts[_skill])>>
<</if>>
<</if>>
<</for>>
<</link>>
<br>
<<link "Just give me a good distribution" "Quickstart3">>
<<set $pcskills to _autopcskills>>
<</link>>
<</nobr>>Time to pick your class schedule! You'll pick a paired class and lecture for your tentative major, then you can pick two additional classes that are whatever you like.
<span id="autoenroll"><<link "Automatically choose default classes" Quickstart4>>
<<set _course1 to setup.School.find_course("psychology", "Block A")>>
<<set _course2 to setup.School.find_course("psychology", "Block B")>>
<<set _course3 to setup.School.find_course("art", "Block C")>>
<<set _course4 to setup.School.find_course("science", "Block D")>>
<<set $pccourses to [_course1, _course2, _course3, _course4]>>
<</link>></span>
Choose your major:
<<nobr>>
<<set $pcmajor to null>>
<<set $pccourses to [null, null, null, null]>>
<div id="majorchoice" class="chargen-classchoice-options">
<<set _count to 0>>
<<for _major range Object.keys(setup.School.majors)>>
<table class="chargen-classchoice-option">
<tr><td>
<b><<cap _major>></b>
</td></tr>
<tr><td>
<<set _course1 to setup.School.find_course(_major, "Block A")>>
<<classselectinfo _course1>>
</td></tr>
<tr><td>
<<set _course2 to setup.School.find_course(_major, "Block B")>>
<<classselectinfo _course2>>
</td></tr>
<tr><td class="nokeys">
<<capture _major,_course1,_course2>>
<<link "Choose">>
<<set $pcmajor to _major>>
<<run V.pccourses[0] = _course1>>
<<run V.pccourses[1] = _course2>>
<<replace "#majorchoice">><b><<cap _major>> courses selected!</b><</replace>>
<<replace "#output">><</replace>>
<</link>>
<</capture>>
</td></tr>
</table>
<<set _count++>>
<</for>>
<br>
</div>
<</nobr>>
Third course:
<<nobr>>
<<set _courses to setup.School.courses_for_block("Block C")>>
<div id="course3choice" class="chargen-classchoice-options">
<<set _count to 0>>
<<for _course range _courses>>
<table class="chargen-classchoice-option">
<tr><td>
<b><<cap setup.School.courses[_course].major>></b>
</td></tr>
<tr><td>
<<classselectinfo _course>>
</td></tr>
<tr><td class="nokeys">
<<capture _course>>
<<link "Choose">>
<<run V.pccourses[2] = _course>>
<<replace "#course3choice">><b><<cap _course>> course selected!</b><</replace>>
<<replace "#output">><</replace>>
<</link>>
<</capture>>
</td></tr>
</table>
<<set _count++>>
<</for>>
<br>
</div>
<</nobr>>
Fourth course:
<<nobr>>
<<set _courses to setup.School.courses_for_block("Block D")>>
<div id="course4choice" class="chargen-classchoice-options">
<<set _count to 0>>
<<for _course range _courses>>
<table class="chargen-classchoice-option">
<tr><td>
<b><<cap setup.School.courses[_course].major>></b>
</td></tr>
<tr><td>
<<classselectinfo _course>>
</td></tr>
<tr><td class="nokeys">
<<capture _course>>
<<link "Choose">>
<<run V.pccourses[3] = _course>>
<<replace "#course4choice">><b><<cap _course>> course selected!</b><</replace>>
<<replace "#output">><</replace>>
<</link>>
<</capture>>
</td></tr>
</table>
<<set _count++>>
<</for>>
<br>
</div>
<br>
<div id="output" class="bad"></div>
<<link "Now that's a full schedule!">>
<<if $pccourses.includes(null)>>
<<replace "#output">><<= "You must choose four courses!">><</replace>>
<<else>>
<<egoto "Quickstart4">>
<</if>>
<</link>>
<</nobr>>
[[Wait, let me rethink that...|Quickstart3]]Your chosen classes are <<and $pccourses>>.
<<link "Wait, let me rethink that" Quickstart3>><<set $pccourses to []>><</link>>
Just a few more miscellaneous things to decide, then you're off to college!
<<pickbirthday>>
Your favorite style is...
<<pickstartingoutfit>>\
<span id="turnons-span"><<link "Decide your turnons and turnoffs">><<replace "#turnons-span">><br><<pickturnons>><</replace>><</link>></span>
<span id="startinc-span"><<link "Decide your starting inclinations">><<replace "#startinc-span">><br><<pickstartinginclinations>><</replace>><</link>></span>
<<nobr>>
<<set _boybfflink to $boybff.split(' ')[0]>>
<<set _girlbfflink to $girlbff.split(' ')[0]>>
<<set $bestfriend to $girlbff>>
Your best friend is
<<set _bffpick to false>>
<<set _bffgender to "cis">>
<span id="bffchoice" class="nokeys">
[
<<link _boybfflink>>
<<set $bestfriend to $boybff>>
<<replace "#bffchoice">>_boybfflink<</replace>>
<<set _bffpick to true>>
<</link>>
|
<<link _girlbfflink>>
<<set $bestfriend to $girlbff>>
<<replace "#bffchoice">>_girlbfflink<</replace>>
<<set _bffpick to true>>
<</link>>
]
</span>,
who is
<span id="bffgenderchoice" class="nokeys">
[
<<link "cis">>
<<set _bffgender to "cis">>
<<replace "#bffgenderchoice">>_bffgender.<</replace>>
<</link>>
|
<<link "transgender">>
<<set _bffgender to "transgender">>
<<replace "#bffgenderchoice">>_bffgender.<</replace>>
<</link>>
|
<<link "nonbinary">>
<<set _bffgender to "nonbinary">>
<<replace "#bffgenderchoice">>_bffgender.<</replace>>
<</link>>
]
</span>
<</nobr>>
Your best friend didn't decide to attend in time to make roommate requests, so your roommate is $pcroommate. <<psc $pcroommate>> <<conj 'aren\'t'>> very nice.<<run setup.people.become_known($pcroommate)>>
<<nobr>>
<<set _virgin to true>>
On another topic entirely, you
<span id="virginchoice" class="nokeys">
[
<<link "are">>
<<replace "#virginchoice">>are<</replace>>
<</link>>
|
<<link "are not">>
<<set _virgin to false>>
<<replace "#virginchoice">>are not<</replace>>
<</link>>
]
</span>
a virgin.
<</nobr>>
<<nobr>>
<<set $pcinclinations = []>>
<<set $inclinationsunlocked = {}>>
When it comes to special romantic or sexual proclivities,
<span id="aroacechoice" class="nokeys">
[
<<link "you have none">>
<<replace "#aroacechoice">>you have none.<</replace>>
<</link>>
|
<<link "you are asexual">>
<<run setup.inclinations.unlock("Asexual", true)>>
<<replace "#aroacechoice">>you are asexual.<</replace>>
<</link>>
|
<<link "you are aromantic">>
<<run setup.inclinations.unlock("Aromantic", true)>>
<<replace "#aroacechoice">>you are aromantic.<</replace>>
<</link>>
|
<<link "you are asexual and aromantic">>
<<run setup.inclinations.unlock("Asexual", true)>>
<<run setup.inclinations.unlock("Aromantic", true)>>
<<replace "#aroacechoice">>you are asexual and aromantic.<</replace>>
<</link>>
|
<<link "you are demisexual">>
<<run setup.inclinations.unlock("Demisexual", true)>>
<<replace "#aroacechoice">>you are demisexual.<</replace>>
<</link>>
|
<<link "you are polyamorous">>
<<run setup.inclinations.unlock("Polyamorous", true)>>
<<replace "#aroacechoice">>you are polyamorous.<</replace>>
<</link>>
|
<<link "you prefer open relationships">>
<<run setup.inclinations.unlock("Open Relationships", true)>>
<<replace "#aroacechoice">>you prefer open relationship.<</replace>>
<</link>>
|
<<link "you are promiscuous">>
<<run setup.inclinations.unlock("Slut", true)>>
<<replace "#aroacechoice">>you are promiscuous.<</replace>>
<</link>>
|
<<link "you are chaste">>
<<run setup.inclinations.unlock("Chaste", true)>>
<<replace "#aroacechoice">>you are chaste.<</replace>>
<</link>>
]
</span>
<</nobr>>
<<link "Off to college!">>
<<if !_bffpick>>
<<set _bffgender to setup.randomrelfreq($studentgenderdistribution)>>
<<if ["female", "transgender female", "nonbinary afab"].includes(_bffgender)>>
<<set $bestfriend to $girlbff>>
<<else>>
<<set $bestfriend to $boybff>>
<</if>>
<</if>>
<<run setup.init_pc_outfit()>>
<<if !_virgin>>
<<run $pc.lose_virginity("mouth", "a high school fling")>>
<<if $pc.has_part("penis")>><<run $pc.raise_skill("Penetrative", 100)>><<run $pc.lose_virginity("penis", "a high school fling")>><</if>>
<<if $pc.has_part("vagina")>><<run $pc.raise_skill("Vaginal", 100)>><<run $pc.lose_virginity("vagina", "a high school fling")>><</if>>
<</if>>
<<run setup.people_niches()["The Best Friend"] = $bestfriend>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<run setup.people.become_known($bestfriend)>>
<<run setup.people.learn_number($bestfriend)>>
<<run setup.people.learn_gender($bestfriend)>>
<<run $people[$bestfriend].residence = $pcresidence>>
<<run $people[$bestfriend].schedule = 4>>
<<set $people[$bestfriend].special to true>>
<<set _curgender to $people[$bestfriend].species[1]>>
<<switch _bffgender>>
<<case "transgender">>
<<switch _curgender>>
<<case "male">>
<<set $people[$bestfriend].species[1] to "transgender male">>
<<case "female">>
<<set $people[$bestfriend].species[1] to "transgender female">>
<</switch>>
<<case "nonbinary">>
<<switch _curgender>>
<<case "male">>
<<set $people[$bestfriend].species[1] to "nonbinary amab">>
<<case "female">>
<<set $people[$bestfriend].species[1] to "nonbinary afab">>
<</switch>>
<</switch>>
<<set $people[$bestfriend].relationship to "best friend">>
<<unset $boybff>><<unset $girlbff>>
<<run setup.init_post_chargen()>>
<<run setup.place_bff()>>
<<egoto YourDorm>>
<</link>> <span id="output1"></span>
<<link "Customize your BFF, then off to college!">>
<<if !_bffpick>>
<<set _bffgender to setup.randomrelfreq($studentgenderdistribution)>>
<<if ["female", "transgender female", "nonbinary afab"].includes(_bffgender)>>
<<set $bestfriend to $girlbff>>
<<else>>
<<set $bestfriend to $boybff>>
<</if>>
<</if>>
<<run setup.init_pc_outfit()>>
<<if !_virgin>>
<<run $pc.lose_virginity("mouth", "a high school fling")>>
<<if $pc.has_part("penis")>><<run $pc.raise_skill("Penetrative", 100)>><<run $pc.lose_virginity("penis", "a high school fling")>><</if>>
<<if $pc.has_part("vagina")>><<run $pc.raise_skill("Vaginal", 100)>><<run $pc.lose_virginity("vagina", "a high school fling")>><</if>>
<</if>>
<<set $bffgennext to "YourDorm">>
<<run setup.people_niches()["The Best Friend"] = $bestfriend>>
<<run setup.people.set_attitude($bestfriend, "friendship", 800)>>
<<run setup.people.become_known($bestfriend)>>
<<run setup.people.learn_number($bestfriend)>>
<<run setup.people.learn_gender($bestfriend)>>
<<run $people[$bestfriend].residence = $pcresidence>>
<<run $people[$bestfriend].schedule = 4>>
<<set $people[$bestfriend].special to true>>
<<set _curgender to $people[$bestfriend].species[1]>>
<<switch _bffgender>>
<<case "transgender">>
<<switch _curgender>>
<<case "male">>
<<set $people[$bestfriend].species[1] to "transgender male">>
<<case "female">>
<<set $people[$bestfriend].species[1] to "transgender female">>
<</switch>>
<<case "nonbinary">>
<<switch _curgender>>
<<case "male">>
<<set $people[$bestfriend].species[1] to "nonbinary amab">>
<<case "female">>
<<set $people[$bestfriend].species[1] to "nonbinary afab">>
<</switch>>
<</switch>>
<<unset $boybff>><<unset $girlbff>>
<<set $people[$bestfriend].relationship to "best friend">>
<<run setup.init_post_chargen()>>
<<run setup.place_bff()>>
<<egoto CustomizeBFF>>
<</link>> <span id="output2"></span>
[[Reset these choices!|Quickstart4]]<<widget "validateshopinfo">>
<<if ndef _shopinfo>>
<<if $shop.includes("Mr Gable's")>>
<<set $shop to "Mr Gable's">>
<<elseif $shop.includes("Howling Jigoku")>>
<<set $shop to "Howling Jigoku">>
<<else>>
<<run console.error("Unknown shop " + $shop + ", returning to last location")>>
<<egoto $location>>
<</if>>
<<set _shopinfo to setup.Shops.db[$shop]>>
<</if>>
<</widget>>
<<widget "shoplookupitem">>
<<set _dbtype to _shopitem.type>>
<<set _dbentry to _shopitem.item>>
<<if _shopitem.type is "clothes">>
<<set _obj to setup.clothes[_shopitem.item]>>
<<elseif _shopitem.type is "food">>
<<set _obj to setup.food[_shopitem.item]>>
<<elseif _shopitem.type is "alcohol">>
<<set _obj to setup.alcohol[_shopitem.item]>>
<<elseif _shopitem.type is "dormstuff">>
<<set _obj to setup.dormstuff[_shopitem.item]>>
<<elseif _shopitem.type is "sextoys">>
<<set _obj to setup.sextoys[_shopitem.item]>>
<<elseif _shopitem.type is "makeup">>
<<set _obj to setup.Cosmetics.makeup[_shopitem.item]>>
<<elseif _shopitem.type is "piercings">>
<<set _obj to setup.Cosmetics.piercings[_shopitem.item]>>
<<elseif _shopitem.type is "outfit">>
<<set _obj to setup.outfits[_shopitem.item]>>
<<elseif _shopitem.type is "books">>
<<set _obj to setup.Books.db[_shopitem.item]>>
<<elseif _shopitem.type is "miscitem" or _shopitem.type is "misc">>
<<set _obj to setup.miscitems[_shopitem.item]>>
<</if>>
<</widget>>
/* Attempts to purchase an item, and prints an error on the SAME page if unsuccessful. */
<<widget "shopattemptpurchase">>
<<set _quantity to _pair ? 2 : 1>>
<<set _check to setup.Shops.maybe_purchase(_shopinfo, _dbtype, _dbentry, _subs, _usenow, false, _quantity, true)>>
<<if _check.result>>
<<unset $shopitem>>
<<egoto "ShopMenu">>
<<else>>
<<replace ".shop-item-error">><<highlight bad>><<=_check.reason>><</highlight>><</replace>>
<</if>>
<</widget>>
/* A preset link with limited options. Use shopattemptpurchase directly for more customization. */
<<widget "shopattemptpurchaselink">>
<<link _args[0]>>
<<set _usenow to _args[1]>>
<<shopattemptpurchase>>
<</link>>
<</widget>>
<<widget "shopcategories">>
<<if _categories.length > 1>>
<<if ndef $lastshopcategoryindex>>
<<set $lastshopcategoryindex to 0>>
<</if>>
<div class="nokeys shop-category-headers">
<<shopcategorylink _categories[0].name 0>>
<<for _i to 1; _i lt _categories.length; _i++>>
| <<capture _i>><<shopcategorylink _categories[_i].name _i>><</capture>>
<</for>>
</div>
<<else>>
<<set $lastshopcategoryindex to 0>>
<</if>>
<<if def $lastshopcategoryindex>>
<<if $lastshopcategoryindex gte 0 and $lastshopcategoryindex lt _categories.length>>
<<set _categoryitems = _categories[$lastshopcategoryindex].items>>
<div class="shop-items nokeys">
<<for _i, _shopitem range _categoryitems>>
<div class="shop-item rounded-border">
<<shoplookupitem>>
<div class="shop-item-header">
<div class="shop-item-name">
<<if (_shopitem.type is "food")>>
<<capture _shopinfo,_dbtype,_dbentry>><<link _shopitem.label "ShopMenu">><<run setup.Shops.maybe_purchase(_shopinfo, _dbtype, _dbentry)>><</link>><</capture>>
<<elseif _shopitem.type is "alcohol">>
<<capture _shopinfo,_dbtype,_dbentry>><<link _shopitem.label $lastlocpassage>><<set $header to setup.Shops.maybe_purchase(_shopinfo, _dbtype, _dbentry)>><</link>><</capture>>
<<else>>
<<capture _shopitem>><<link _shopitem.label "ShopItem">><<set $shopitem to _shopitem>><</link>><</capture>>
<</if>>
</div>
<<if "purchase quantity" in _obj and _obj["purchase quantity"] gt 1>>
<div class="shop-item-quantity">
x<<= _obj["purchase quantity"]>>
</div>
<</if>>
<<if "price" in _obj>>
<div class="shop-item-price">
$<<= Math.floor(_obj.price * setup.Shops.price_multiplier($shop))>>
</div>
<</if>>
</div>
<div class="shop-item-contents">
<<if not $shopmenuhidedescriptions>>
<<if _shopitem.type is "clothes">>
<div class="shop-clothing-description">
<<clothingflags _shopitem.item>>
</div>
<</if>>
<<if _obj.relaxationPerSleepHour>>
<<set _relax to _obj.relaxationPerSleepHour * 8>>
Effect while sleeping: <<dalterneed Relaxation _relax>>
<br>
<</if>>
<<if _obj.streamQuality>>
<<set _qualcompare to _current>>
<<if !_qualcompare and _obj.category is "computer">>
<<set _qualcompare to setup.dorm_category_item("laptop")>>
<<elseif !_qualcompare and _obj.category is "laptop">>
<<set _qualcompare to setup.dorm_category_item("computer")>>
<</if>>
<<if _qualcompare>>
<<set _qual to _obj.streamQuality.base - setup.dormstuff[_qualcompare.item].streamQuality.base>>
<<else>>
<<set _qual to _obj.streamQuality.base>>
<</if>>
<<if _qual isnot 0>>
Stream quality <<dalterneed "Stream Quality" _qual>><br>
<</if>>
<<set _goodfor to []>>
<<for _streamtype range Object.keys(_obj.streamQuality)>>
<<if _streamtype isnot "base" and (_streamtype isnot "hottub" or setup.Streaming.type_unlocked("hottub"))>>
<<run _goodfor.push("<<highlight>>" + setup.Streaming.types[_streamtype].name + "<</highlight>>")>>
<</if>>
<</for>>
<<if _goodfor.length gt 0>>
(Especially important for <<and _goodfor>> streams.)<br>
<</if>>
<<if _obj.computerRequired and !setup.dorm_category_item("computer") and !setup.dorm_category_item("laptop")>>
(<<highlight bad>>Warning<</highlight>>: Requires computer to function)<br>
<</if>>
<<if _obj.prereq && !setup.dorm_has(_obj.prereq)>>
(<<highlight bad>>Requires <<= _obj.prereq>><</highlight>>)<br>
<</if>>
<</if>>
<<if _shopitem.type is "sextoys">>
<<= _obj.description>><br>
<<if _obj.types.includes("long distance")>>
This item is <<highlight unbad>>long distance<</highlight>> and can passively boost tips during adult streaming.
<</if>>
<<highlight "small italic">>(You own <<= setup.matching_sextoys(_shopitem.item).length>>.)<</highlight>><br>
<</if>>
<</if>>
<<if "eat immediately" in _shopinfo and _shopitem.type is "food">> <<dtime 5>>
<<set _foodobj to setup.food[_dbentry]>>
<<if "restore hunger" in _foodobj>><<set _amt to _foodobj["restore hunger"]>><<dalterneed Food _amt>><</if>>
<<if "restore energy" in _foodobj>><<set _amt to _foodobj["restore energy"]>><<dalterneed Rest _amt>><</if>>
<<if "restore relaxation" in _foodobj>><<set _amt to _foodobj["restore relaxation"]>><<dalterneed Relaxation _amt>><</if>>
<<if "reduce bladder" in _foodobj>><<set _amt to 0 - _foodobj["reduce bladder"]>><<dalterneed Bladder _amt>><</if>>
<<elseif _shopitem.type is "food">>
<<set _foodobj to setup.food[_dbentry]>>
<<if _foodobj.description and !$shopmenuhidedescriptions>>
<<= _foodobj.description>>
<br><br>
<</if>>
<<if _foodobj.cooking>>
<<if $pc.skillleveled("Cooking", _foodobj.cooking)>>
<<highlight "skillcheck small">>Cooking <<= _foodobj.cooking>><</highlight>>
<<else>>
<<highlight "bad skillcheck small">>Cooking <<= _foodobj.cooking>><</highlight>>
<</if>>
<</if>>
<<if !_foodobj.flags.includes("nonperishable")>>
<<if setup.dorm_has("minifridge")>>
<div class="shop-item-requirements">Requires <<highlight unbad>>minifridge<</highlight>></div>
<<else>>
<div class="shop-item-requirements">Requires <<highlight bad>>minifridge<</highlight>></div>
<</if>>
<</if>>
<<if _foodobj["cook with"]>>
<<set _has to []>>
<<for _thing range _foodobj["cook with"]>>
<<if setup.dorm_has(_thing)>>
<<run _has.push("<<highlight unbad>>"+_thing+"<</highlight>>")>>
<<else>>
<<run _has.push("<<highlight bad>>"+_thing+"<</highlight>>")>>
<</if>>
<</for>>
<div class="shop-item-requirements">Requires <<= setup.and(_has, "nothing", "or")>></div>
<</if>>
<<if $dormfridge and _dbentry in $dormfridge>>
<<set _q to $dormfridge[_dbentry]>>
<<elseif _dbentry in $dormfoodstash>>
<<set _q to $dormfoodstash[_dbentry]>>
<<else>>
<<set _q to 0>>
<</if>>
<<if _q>>
(You own _q)
<</if>>
<<elseif _shopitem.type is "alcohol">>
<<set _drinkobj to setup.alcohol[_dbentry]>>
<<dalterneed Drunkenness _drinkobj.drunkenness>>
<<dalterneed Relaxation _drinkobj.relaxation>>
<<elseif _shopitem.type is "books">>
/*<<= _obj.description>><br>*/
<<set _readresult to setup.Books.reading_result(_dbentry, false)>>
<<if !_readresult[0]>>
<<highlight bad>><<= _readresult[1]>><</highlight>>
<br>
<<elseif _obj.skills>>
Learn
<<for _skill range Object.keys(_obj.skills)>>
<<skill _skill _obj.skills[_skill]>>
<</for>>
<br>
<</if>>
<<if _obj.needs>>
Affects needs
<<for _need range Object.keys(_obj.needs)>>
<<dalterneed _need _obj.needs[_need]>>
<</for>>
<br>
<</if>>
<<if setup.Books.has(_dbentry)>>
<<highlight "small italic">>(You already own this.)<</highlight>><br>
<</if>>
<<elseif _shopitem.type is "miscitem" or _shopitem.type is "misc">>
<<if _shopitem.description>>
<<= _shopitem.description>>
<br><br>
<</if>>
<<highlight "small italic">>(You own <<= setup.miscinventory_count(_shopitem.item)>>.)<</highlight>><br>
<</if>>
</div>
</div>
<</for>>
</div>
<<done>>
<<script>>
$(".shop-item").on("click", function() {
$(this).find(".shop-item-name").find("a").click();
});
<</script>>
<</done>>
<<else>>
<<unset $lastshopcategoryindex>>
<</if>>
<</if>>
<</widget>>
<<widget "shopcategorylink">>
<<if _args[1] is $lastshopcategoryindex>>
<span class="shop-category-selected notice"><<= _args[0]>></span>
<<else>>
<<link _args[0]>>
<<set $lastshopcategoryindex = _args[1]>>
<<shopcategoryupdate _args[0]>>
<</link>>
<</if>>
<</widget>>
<<widget "shopcategoryupdate">>
<<replace ".shop-categories-container">><<shopcategories>><</replace>>
<</widget>>
<<widget "purchaseeffects">>
<<set _price to _args[0]>>
<<if _price gte 200>>
<<if $pc.has_inclination("Retail Therapy")>>
<<set _comp to 25 * Math.floor(_price / 200)>>
Buying something expensive always makes you feel better.
<<dalterneed Composure _comp true>>
<<else>>
<<run setup.inclinations.unlock_with_req("Retail Therapy")>>
<</if>>
<</if>>
<</widget>><<set _shopinfo to setup.Shops.db[$shop]>>
<<validateshopinfo>>
<<= _shopinfo.description>>
<br>
<<if !_shopinfo.detailed>>
<<link "Done">><<unset $shop>><<if $postshoppassage>><<set _dest to $postshoppassage>><<unset $postshoppassage>><<egoto _dest>><<else>><<egoto $lastlocpassage>><</if>><</link>>
<br>
<</if>>
<br>
<<if "shopbuyresult" in State.variables>>
<<= $shopbuyresult>>
<<unset $shopbuyresult>>
<br><br>
<</if>>
<<if _shopinfo.detailed>>
<<include "DetailedShopMenu">>
<<else>>
<<include "SimpleShopMenu">>
<</if>><<set _catcount to 0>>
<<for _i to 0; _i lt _shopinfo.items.length; _i++>>
<<set _shopitem to _shopinfo.items[_i]>>
<<if "checkvar" in _shopitem and !Scripting.evalTwineScript(_shopitem.checkvar)>>
<<continue>>
<<elseif !("type" in _shopitem)>>
<<if _catcount gt 0>><br><</if>>
<<set _catcount to _catcount + 1>>
<<= _shopitem.label>>
<<else>>
<<shoplookupitem>>
<<if (_shopitem.type is "food")>>
<<capture _shopinfo,_dbtype,_dbentry>><<link _shopitem.label "ShopMenu">><<run setup.Shops.maybe_purchase(_shopinfo, _dbtype, _dbentry)>><</link>><</capture>>
<<elseif _shopitem.type is "alcohol">>
<<capture _shopinfo,_dbtype,_dbentry>><<link _shopitem.label $lastlocpassage>><<run setup.Shops.maybe_purchase(_shopinfo, _dbtype, _dbentry)>><</link>><</capture>>
<<else>>
<<capture _shopitem>><<link _shopitem.label "ShopItem">><<set $shopitem to _shopitem>><</link>><</capture>>
<</if>>
<<if "purchase quantity" in _obj and _obj["purchase quantity"] gt 1>>
x<<= _obj["purchase quantity"]>>
<</if>>
<<if "price" in _obj>> ($<<= Math.floor(_obj.price * setup.Shops.price_multiplier($shop))>>)<</if>>
<<if "eat immediately" in _shopinfo and _shopitem.type is "food">> <<dtime 5>>
<<set _foodobj to setup.food[_dbentry]>>
<<if "restore hunger" in _foodobj>><<set _amt to _foodobj["restore hunger"]>><<dalterneed Food _amt>><</if>>
<<if "restore energy" in _foodobj>><<set _amt to _foodobj["restore energy"]>><<dalterneed Rest _amt>><</if>>
<<if "restore relaxation" in _foodobj>><<set _amt to _foodobj["restore relaxation"]>><<dalterneed Relaxation _amt>><</if>>
<<if "reduce bladder" in _foodobj>><<set _amt to 0 - _foodobj["reduce bladder"]>><<dalterneed Bladder _amt>><</if>>
<<elseif _shopitem.type is "food">>
<<set _foodobj to setup.food[_dbentry]>>
<<if _foodobj.cooking>>
<<if $pc.skillleveled("Cooking", _foodobj.cooking)>>
<<highlight "skillcheck small">>Cooking <<= _foodobj.cooking>><</highlight>>
<<else>>
<<highlight "bad skillcheck small">>Cooking <<= _foodobj.cooking>><</highlight>>
<</if>>
<</if>>
<<if !_foodobj.flags.includes("nonperishable")>>
<<if setup.dorm_has("minifridge")>>
(Requires <<highlight unbad>>minifridge<</highlight>>)
<<else>>
(Requires <<highlight bad>>minifridge<</highlight>>)
<</if>>
<</if>>
<<if _foodobj["cook with"]>>
<<set _has to []>>
<<for _thing range _foodobj["cook with"]>>
<<if setup.dorm_has(_thing)>>
<<run _has.push("<<highlight unbad>>"+_thing+"<</highlight>>")>>
<<else>>
<<run _has.push("<<highlight bad>>"+_thing+"<</highlight>>")>>
<</if>>
<</for>>
(Requires <<= setup.and(_has, "nothing", "or")>>)
<</if>>
<<elseif _shopitem.type is "alcohol">>
<<set _drinkobj to setup.alcohol[_dbentry]>>
<<dalterneed Drunkenness _drinkobj.drunkenness>>
<<dalterneed Relaxation _drinkobj.relaxation>>
<</if>>
<</if>>
<br>
<</for>>
<br>
<<link "Done">><<unset $shop>><<if $postshoppassage>><<set _dest to $postshoppassage>><<unset $postshoppassage>><<egoto _dest>><<else>><<egoto $lastlocpassage>><</if>><</link>><<if $lastshop isnot $shop>>
<<unset $lastshopcategoryindex>>
<<set $lastshop to $shop>>
<</if>>
<<link "Done">><<unset $shop>><<if $postshoppassage>><<set _dest to $postshoppassage>><<unset $postshoppassage>><<egoto _dest>><<else>><<egoto $lastlocpassage>><</if>><</link>>
<br><br>
<<if $shopmenuhidedescriptions>>
<<link "Show descriptions" "ShopMenu">><<set $shopmenuhidedescriptions to false>><</link>>
<<else>>
<<link "Hide descriptions" "ShopMenu">><<set $shopmenuhidedescriptions to true>><</link>>
<</if>>
<br><br>
<<set _categories to setup.Shops.parse_categories(_shopinfo.items)>>
<div class="shop-categories-container"><<shopcategories>></div><<set _shopinfo to setup.Shops.db[$shop]>>
<<validateshopinfo>>
<<if $shopitem.type is "clothes">>
<<set _obj to setup.clothes[$shopitem.item]>>
<<elseif $shopitem.type is "food">>
<<set _obj to setup.food[$shopitem.item]>>
<<elseif $shopitem.type is "dormstuff">>
<<set _obj to setup.dormstuff[$shopitem.item]>>
<<elseif $shopitem.type is "sextoys">>
<<set _obj to setup.sextoys[$shopitem.item]>>
<<elseif $shopitem.type is "makeup">>
<<set _obj to setup.Cosmetics.makeup[$shopitem.item]>>
<<elseif $shopitem.type is "piercings">>
<<set _obj to setup.Cosmetics.piercings[$shopitem.item]>>
<<elseif $shopitem.type is "outfit">>
<<set _obj to setup.outfits[$shopitem.item]>>
<<elseif $shopitem.type is "books">>
<<set _obj to setup.Books.db[$shopitem.item]>>
<<elseif $shopitem.type is "miscitem" || $shopitem.type is "misc">>
<<set _obj to setup.miscitems[$shopitem.item]>>
<</if>>
<<set _dbtype to $shopitem.type>>
<<set _dbentry to $shopitem.item>>
<<set _subs to {}>>
<<set _offerpair to _shopinfo.offerpair || _obj.offerpair || false>>
<div class="shop-detailed-item rounded-border">
<div class="shop-item-header">
<div class="shop-item-name"><<= $shopitem.label>></div>
<<if "price" in _obj>>
<div class="shop-item-price">$<<= Math.floor(_obj.price * setup.Shops.price_multiplier($shop))>></div>
<</if>>
</div>
<<if $shopitem.type is "clothes">>
Category: <<= setup.clothes[$shopitem.item].category.toUpperFirst()>><br>
<<clothingflags $shopitem.item>>
<br>
<<highlight "small italic">>(You own <<= ($pc.matching_items_in_closet($shopitem.item).length + $pc.matching_items_worn($shopitem.item).length + $pc.matching_items_in_closet($shopitem.item, "laundryclothes").length)>>.)<</highlight>><br>
<<elseif $shopitem.type is "dormstuff">>
<<= _obj.description>>
<br>
<<if _obj.relaxationPerSleepHour>>
<<set _relax to _obj.relaxationPerSleepHour * 8>>
Effect while sleeping: <<dalterneed Relaxation _relax>>
<br>
<</if>>
<<if _obj.relaxationWhileReading>>
<<set _relax to _obj.relaxationWhileReading>>
Effect while reading: <<dalterneed Relaxation _relax>>
<br>
<</if>>
<<if _obj.improveRollChance>>
<<set _luck to Math.round(_obj.improveRollChance * 1000)>>
Effect: <<dalterneed Luck _luck>>
<br>
<</if>>
<<set _current to setup.dorm_category_item(_obj.category)>>
<<if _obj.streamQuality>>
<<set _qualcompare to _current>>
<<if !_qualcompare and _obj.category is "computer">>
<<set _qualcompare to setup.dorm_category_item("laptop")>>
<<elseif !_qualcompare and _obj.category is "laptop">>
<<set _qualcompare to setup.dorm_category_item("computer")>>
<</if>>
<<if _obj.streamQuality>>
<<if _qualcompare and setup.dormstuff[_qualcompare.item].streamQuality>>
<<set _qual to _obj.streamQuality.base - setup.dormstuff[_qualcompare.item].streamQuality.base>>
<<else>>
<<set _qual to _obj.streamQuality.base>>
<</if>>
<</if>>
<br>
<<if _qual isnot 0>>
Stream quality <<dalterneed "Stream Quality" _qual>>
<br>
<</if>>
<<set _goodfor to []>>
<<for _streamtype range Object.keys(_obj.streamQuality)>>
<<if _streamtype isnot "base" and (_streamtype isnot "hottub" or setup.Streaming.type_unlocked("hottub"))>>
<<run _goodfor.push("<<highlight>>" + setup.Streaming.types[_streamtype].name + "<</highlight>>")>>
<</if>>
<</for>>
<<if _goodfor.length gt 0>>
(Especially important for <<and _goodfor>> streams.)<br>
<</if>>
<</if>>
<<if _obj.category isnot "bed" and _current and _current.item is _obj.add>>
<<highlight "small italic">>(You already own this.)<</highlight>><br>
<<elseif _obj.category is "bed" and _current and _current.item is $shopitem.item>>
<<highlight "small italic">>(You already own this.)<</highlight>><br>
<<elseif _current and _obj.tradein and setup.dormstuff[_current.item || _current]>>
<<set _tradein to Math.round(setup.dormstuff[_current.item || _current].price / 2)>>
<<highlight "small italic">>(You already own something like this, and you would trade in your current one for $<<= _tradein>>.)<</highlight>><br>
<</if>>
<<elseif $shopitem.type is "sextoys">>
<<= _obj.description>><br>
<<if _obj.types.includes("long distance")>>
This item is <<highlight unbad>>long distance<</highlight>> and can passively boost tips during adult streaming.
<</if>>
<<highlight "small italic">>(You own <<= setup.matching_sextoys($shopitem.item).length>>.)<</highlight>><br>
<<elseif $shopitem.type is "books">>
<<= _obj.description>>
<br><br>
<<set _readresult to setup.Books.reading_result(_dbentry, false)>>
<<if !_readresult[0]>>
<<highlight bad>><<= _readresult[1]>><</highlight>>
<br>
<<elseif _obj.skills>>
Learn
<<for _skill range Object.keys(_obj.skills)>>
<<skill _skill _obj.skills[_skill]>>
<</for>>
<br>
<</if>>
<<if _obj.needs>>
Affects needs
<<for _need range Object.keys(_obj.needs)>>
<<dalterneed _need _obj.needs[_need]>>
<</for>>
<br>
<</if>>
<<if setup.Books.has(_dbentry)>>
<<highlight "small italic">>(You already own this.)<</highlight>><br>
<</if>>
<<elseif $shopitem.type is "piercings">>
Base type: <<= _obj.type>>
<br><br>
<<set _slots to []>>
<<set _allslots to ($pc.pierced ? Object.keys($pc.pierced) : [])>>
<<for _slot range _allslots>>
<<set _slotinfo to setup.Cosmetics.piercing_slots[_slot]>>
<<if _slotinfo.types.includes(_obj.type)>>
<<run _slots.push(_slot)>>
<</if>>
<</for>>
<<if _slots.length is 0>>
You don't have any piercings this would fit into.
<<else>>
You could use this in your <<and _slots>> <<pluralize piercing _slots.length>>.
<</if>>
<<elseif $shopitem.type is "outfit">>
<<if !$shopitem.targetgender>>
<<if setup.people.is_femme($pc)>>
<<set $shopitem.targetgender to "female">>
<<else>>
<<set $shopitem.targetgender to "male">>
<</if>>
<</if>>
<<set $shopitem.clothes to []>>
<<set $shopitem.allclothes to []>>
<<set $shopitem.price to 0>>
<<set _items to _obj.items>>
<<for _item range _items>>
<<if _item["if gender"] and !_item["if gender"].includes($shopitem.targetgender)>>
<<continue>>
<<elseif _item["if part"] and !$pc.has_part(_item["if part"])>>
<<continue>>
<<elseif _item["if not part"] and $pc.has_part(_item["if not part"])>>
<<continue>>
<<elseif _item["npc only"]>>
<<continue>>
<<else>>
<<set _cinfo to setup.clothes[_item.item]>>
<<set _name to _cinfo.name>>
<<set _displace to []>>
<<for _ckey range Object.keys(_cinfo)>>
<<if _ckey.indexOf("sub") == 0>>
<<set _subname to _ckey.substring(4)>>
<<set _sublist to ("sub " + _subname in _item) ? _item["sub " + _subname] : _cinfo[_ckey]>>
<<set _sub to _sublist[0]>>
<<set _name = _name.replace("%" + _subname, _sub)>>
<<elseif _ckey.indexOf("displace") == 0 and _cinfo.flags.includes("default open") && _displace.length == 0>>
<<set _tdisplace to _ckey.substring(9)>>
<<run _displace.push(_tdisplace)>>
<</if>>
<</for>>
<<set _thisitem to {name: _name, item: _item.item, displacements: _displace}>>
<<run $shopitem.allclothes.push(_thisitem)>>
<<if $pc.already_has_clothing(_thisitem)>><<continue>><</if>>
<<run $shopitem.clothes.push(_thisitem)>>
<<= _name>>
<<set _item.price to setup.clothes[_item.item].price || 0>>
<<set _item.price = Math.floor(_item.price * setup.Shops.price_multiplier($shop))>>
<<if _item.price>>($<<= _item.price>>)<</if>>
<<set $shopitem.price += _item.price>>
<br>
<</if>>
<</for>>
<br>
<<if _shopitem>>
<<set _shopitem.price = Math.floor(_shopitem.price * setup.Shops.price_multiplier($shop))>>
<</if>>
<<if _obj.sports and !$firsttime.boughtsportsuniform>>
<b>Total cost: $0</b>
<br>
The Campus Recreation department has the budget to provide <b>one</b> free uniform per student.
<<elseif $riverrat && $riverrat.uniformcredit == $shopitem.item>>
<b>Total cost: $0</b>
<br>
The owner has already ordered one uniform for you.
<<else>>
<b>Total cost: $<<= Math.floor($shopitem.price * setup.Shops.price_multiplier($shop))>></b>
<</if>>
<<if $shopitem.allowgenderselection>>
<br><br>
<span class="small nokeys">
<<if $shopitem.targetgender is "female">>
You are currently purchasing the femme outfit.
<br>
<<link "Look at masc outfit" ShopItem>><<set $shopitem.targetgender to "male">><</link>>
<<else>>
You are currently purchasing the masc outfit.
<br>
<<link "Look at femme outfit" ShopItem>><<set $shopitem.targetgender to "female">><</link>>
<</if>>
</span>
<</if>>
<<elseif $shopitem.type is "miscitem" or $shopitem.type is "misc">>
<<set _info to setup.miscitems[$shopitem.item]>>
<<if _info.description>>
<<= _info.description>>
<br><br>
<</if>>
<<if _info['purchase quantity']>>
Purchase quantity: <<= _info['purchase quantity']>>
<br>
<</if>>
<<set _count to setup.miscinventory_count($shopitem.item)>>
<<if _count>>
(You own <<= _count>>)
<</if>>
<</if>>
</div>
<<if $shopitem.type is "clothes">>
<<set _cItem = new ClothingItem($shopitem.item)>>
<<set _description = _cItem.get_description("shop")>>
<<if _description.length gt 0>>
<br>_description<br>
<</if>>
<</if>>
<br>
<<capture _dbtype,_dbentry,_subs>>
<<script>>
T.button_clicked_fn = function(sub, opt, element,iscolor=true)
{
opt = T.htmlUnescape(opt);
/*console.log("Clicked! ",sub,opt,element);*/
if (!iscolor)
{
$('.'+sub).css('border-color',T.base_border_color);
$('.'+sub).css('background-color',"#606060");
$(element).css('border-color','blue');
$(element).css('background-color','#000080');
}
$('.'+sub).removeClass('subbg_selected');
$(element).addClass('subbg_selected');
if (T.cItem && typeof(T.cItem) == 'object')
{
T.cItem.set_sub(sub,opt);
}
T.subs[sub] = opt;
document.getElementById("span-"+sub).innerText=setup.capitalize_each(opt);
};
T.gen_shadow_color = function(hexColor)
{
let hsl_color = setup.hex_to_hsl(hexColor);
hsl_color.l = Math.max(0,hsl_color.l-10);
return setup.hsl_str(hsl_color);
};
T.gen_border_color = function(hexColor)
{
let hsl_color = setup.hex_to_hsl(hexColor);
hsl_color.l = Math.min(100,hsl_color.l+10);
return setup.hsl_str(hsl_color);
};
T.htmlEscape = function(str)
{
return str
.replaceAll(/&/g, '&')
.replaceAll(/'/g, '&apos')
.replaceAll(/"/g, '"')
.replaceAll(/>/g, '>')
.replaceAll(/</g, '<');
};
T.htmlUnescape = function(str)
{
return str
.replaceAll('&', '&')
.replaceAll('&apos', '\'')
.replaceAll('"', '\"')
.replaceAll('>', '>')
.replaceAll('<', '<');
};
<</script>>
<<if _dbtype == "clothes">>
<<set _cItem = new ClothingItem(_dbentry)>>
<<if "subs" in _shopinfo>>
<<run _cItem.add_sub_prefixes(_shopinfo.subs)>>
<</if>>
<<set _sub_info = _cItem.get_subs()>>
<<else>>
<<set _sub_info = {}>>
<<for _e_info range Object.entries(_obj)>>
<<if _e_info[0].indexOf("sub ") is 0>>
<<set _sub_info[_e_info[0].substring(4)] = _e_info[1]>>
<</if>>
<</for>>
<</if>>
<<set _base_color = "#606060">>
<<set _base_text_color = "#EEEEEE">>
<<set _base_shadow_color = T.gen_shadow_color(_base_color)>>
<<set _base_border_color = T.gen_border_color(_base_color)>>
<<for _sub_name range Object.keys(_sub_info)>>
<div class="shop-item-option-container">
<<set _subs[_sub_name] = null>>
<<set _formatted_sub_name = _sub_name.replaceAll('_', " ")>>
<<if _formatted_sub_name is "color1">>
<<set _formatted_sub_name to "first color">>
<<elseif _formatted_sub_name is "color2">>
<<set _formatted_sub_name to "second color">>
<</if>>
Choose _formatted_sub_name: <<= `<span id="`+"span-"+_sub_name+`"></span>`>><br>
<<set _colorize = setup.all_entries_colors(_sub_info[_sub_name])>>
<<for _sub_opt_idx to 0; _sub_opt_idx < _sub_info[_sub_name].length; _sub_opt_idx++>>
<<set _sub_opt = _sub_info[_sub_name][_sub_opt_idx]>>
<<set _radiogroup to "_subs['" + _sub_name + "']">>
<<if _colorize>>
<<set _radio_color = setup.str_to_color(_sub_opt)>>
<<set _base_color = _radio_color.value>>
<<set _base_text_color = _radio_color.text_color>>
<<set _shadow_color = _radio_color.shadow>>
<<set _border_color = _radio_color.border>>
<<set _text_style = _radio_color.style>>
<<else>>
<<set _base_color = "#606060">>
<<set _base_text_color = "#EEEEEE">>
<<set _shadow_color = _base_shadow_color>>
<<set _border_color = _base_border_color>>
<<set _text_style = "">>
<</if>>
<<set _span_style = _text_style+";background:"+_base_color+";color:"+_shadow_color+";border-color:"+_border_color+";">>
<<="<span style='"+_span_style+"' class='shop-item-option subbg "+_sub_name+"' onmousedown='T.button_clicked_fn(\""+_sub_name+"\",\""+T.htmlEscape(_sub_opt)+"\",this,"+_colorize+")'><span style='color:"+_base_text_color+"'>"+setup.capitalize_each(_sub_opt)+"</span></span>">>
<</for>>
</div>
<br>
<</for>>
<<set _pair to false>>
<<if _offerpair and (!_obj.price or $pcmoney gte _obj.price * 2)>>
<label><<checkbox "_pair" false true>> Purchase pair</label>
<br>
<</if>>
<<if $shopitem.type isnot "food" && $shopitem.type isnot "outfit" && $backdebt && (!(_dbentry in setup.clothes) or setup.clothes[_dbentry].category isnot "underwear")>>
<<highlight bad>>Better not buy this while you owe your parents money. Your mom would be <i>pissed</i>.<</highlight>>
<<else>>
<div class="shop-item-error"> </div>
<<if _shopinfo.mailorder>>
<<shopattemptpurchaselink "Order" false>><br>
<<elseif _obj.inventory>>
<<shopattemptpurchaselink "Buy" false>><br>
<<else>>
<<shopattemptpurchaselink "Buy and send to dorm" false>><br>
<<if $shopitem.type is "food" and !_obj["cook with"]>>
<<shopattemptpurchaselink "Buy and eat now" true>>
<<dtime 5>>
<<set _foodobj to setup.food[_dbentry]>>
<<if "restore hunger" in _foodobj>><<set _amt to _foodobj["restore hunger"]>><<dalterneed Food _amt>><</if>>
<<if "restore energy" in _foodobj>><<set _amt to _foodobj["restore energy"]>><<dalterneed Rest _amt>><</if>>
<<if "reduce bladder" in _foodobj>><<set _amt to -_foodobj["reduce bladder"]>><<dalterneed Bladder _amt>><</if>><br>
<</if>>
<<if $shopitem.type is "clothes" and !$pc.only_wearing_temp()>>
<<shopattemptpurchaselink "Buy and wear now" true>><br>
<</if>>
<</if>>
<</if>>
<</capture>>
<<link "Back" ShopMenu>><<unset $shopitem>><</link>><<set _loc to $location>>
<<set _homebase to $lastloctags.includes("homebase")>>
<<set _getuppassage to _loc>>
<<if _getuppassage isnot "YourDorm">>
<<set _getuppassage to $postencounterpassage || $lastlocpassage>>
<</if>>
<<set _nosleep to false>>
<<if $pcneeds["Bladder"] lte 100>>
<<set _nosleep to true>>
It's hard to sleep when you need to pee this bad!
<<elseif $pcneeds["Hunger"] lte 100>>
<<set _nosleep to true>>
Your stomach is growling! Hunger makes it difficult to sleep.
<<elseif _loc isnot "YourDorm">>
You get comfortable on the bed.
<<elseif !$firsttime.DormSleep and V.dormbed.name is "dorm room cot">>
You lay down on your cot. It's narrow and the mattress isn't very comfortable, but one thing you can say is it's definitely a bed.
<<set $firsttime.DormSleep to true>>
<<else>>
You flop down on your <<= V.dormbed.name>>.
<</if>><br>
<br>
<<if _nosleep is false>>
<<if _homebase>>
<<set _sleepquality to _loc is "YourDorm" ? V.dormbed["rest per hour"] : 110>>
<<if $sleepoutfit>><<if $sleepoutfit isnot "!Strip" and !$pc.has_outfit($sleepoutfit)>>Your default sleep outfit, $sleepoutfit, is <span class="bad">missing some items</span> and won't be used until you sort it out.<<elseif $sleepoutfit is "!Strip">>You sleep naked.<<else>>You will change into your $sleepoutfit outfit when you go to sleep.<</if>><br><</if>>
<<include QuickWardrobe>>
<<else>>
<<set _sleepquality to 110>>
<</if>>
<<if $hour gte 20 or $hour lte 6>>
<<set _sleeptime to setup.Time.minutes_until(7, 0)>>
<<link "Set alarm for 7:00am">>
<<set $wakemsg to "You go to bed, sleeping until your alarm wakes you in the morning.">>
<<sleep _sleeptime>>
<</link>> <<dtime _sleeptime>> <<set _restamt to (_sleeptime / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<</if>>
<<set _restperminute to _sleepquality / 60>>
<<set _restneeded to 1000 - setup.Needs.get_need("Rest")>>
<<set _restminutesneeded to Math.floor(_restneeded / _restperminute)>>
<<if _restminutesneeded gt 0>>
<<link "Sleep until rested">>
<<set $wakemsg to "You close your eyes, sleeping until you wake up naturally, fully rested.">>
<<sleep _restminutesneeded>>
<</link>> <<dtime _restminutesneeded>> <<dalterneed Rest _restneeded>><br>
<</if>>
<<link "Long Sleep">>
<<set $wakemsg to "You set no alarm and just close your eyes, letting yourself oversleep.">>
<<sleep 600>>
<</link>> <<dtime 600>> <<set _restamt to (600 / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<<link "Full Sleep">>
<<set $wakemsg to "You go to sleep for a full eight hours.">>
<<sleep 480>>
<</link>> <<dtime 480>> <<set _restamt to (480 / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<<link "Short Sleep">>
<<set $wakemsg to "You go to sleep for somewhat less than a full eight hours.">>
<<sleep 360>>
<</link>> <<dtime 360>> <<set _restamt to (360 / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<<link "Long Nap">>
<<set $wakemsg to "You indulge in a long nap.">>
<<sleep 120>>
<</link>> <<dtime 120>> <<set _restamt to (120 / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<<link "Short Nap">>
<<set $wakemsg to "You set your phone's alarm for one hour and grab a short nap.">>
<<sleep 60>>
<</link>> <<dtime 60>> <<set _restamt to (60 / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<<link "Powernap">>
<<set $wakemsg to "You set your phone's alarm for 15 minutes and grab a quick nap.">>
<<sleep 15>>
<</link>> <<dtime 15>> <<set _restamt to (15 / 60) * _sleepquality>><<dalterneed Rest _restamt>><br>
<</if>>
<<link "Just get up" _getuppassage>><</link>>
<br><br>
<span id="sleepoutput"></span><<widget "sleep">>
<<replace "#sleepoutput">><<highlight>>Resting and autosaving! Please wait a moment.<</highlight>><</replace>>
<<timed 40ms>>
<<set _sleeptime to _args[0] || 15>>
<<set $sleeping to true>>
<<unset $eventnpc>><<unset $eventnpc2>><<unset $eventnpc3>><<unset $eventnpc4>>
<<unset $npcexp>>
<<run setup.Needs.sleep(_sleeptime, _sleepquality)>>
<<set _wakeuppassage to setup.Events.passage(["wakeup", $location]) || "WakeUp">>
<<run delete V.pc.resisted_orgasm>>
<<egoto _wakeuppassage>>
<</timed>>
<</widget>><<set $pc.orgasms to 0>>
<<set _loc to $location>>
<<set _getuppassage to _loc>>
<<if _getuppassage isnot "YourDorm">>
<<if _loc is "BFFDorm">>
<<set _getuppassage to "EventBFFDormSexChatWatchPornPostNap">>
<<elseif $postencounterpassage>>
<<set _getuppassage to $postencounterpassage>>
<<elseif _loc isnot "YourDorm">>
<<set _getuppassage to $lastlocpassage>>
<<else>>
<<set _getuppassage to "YourDorm">>
<</if>>
<</if>>
<<if setup.autosaveOnTrigger("onSleep")>>
<<run Save.autosave.save()>>
<<if false>>Post-Sleep Autosave. You wake up... another day is upon you...<</if>>
<</if>>
<<if !$niches["The Parasocial Fan"] and $streaming and setup.Streaming.popularity("Niche.tv") gte 300>>
<<run setup.people.add_parasocial_fan()>>
<</if>>
<<if setup.School.current_holiday() == "summer break">>
<<if $prebedclothes>><<run $pc.wear_all_clothes($prebedclothes)>><<unset $prebedclothes>><</if>>
<<unset $wakemsg>>
<span class="notice">Summer break is upon you!</span><br>
<br>
Classes are done, exams are over, and campus is not-so-slowly turning into a ghost town. You can't stay even if you wanted to — the residence halls will be closing too. There's nothing for it but to head back home and live with your parents again for the summer. It'll feel strange after the independence you've had over the last few months.<br>
<br>
Your job, of course, will have to accommodate you, so you'll be automatically rehired on your return. But, for now, you'll have some time to relax.<br>
<br>
<<link "And so the summer passes..." SkipSummer>>
<<run setup.Time.skip_summer()>>
<</link>>
<<else>>
<<= $wakemsg>>
<br><br>
<<if setup.is_birthday($pcbirthday)>>
<<highlight>>It's your birthday!<</highlight>> Another year older...
<br><br>
<</if>>
<<if _homebase>>
<<set _discomfort to []>>
<<for _i to 0; _i lt $pc.clothes.length; _i++>>
<<if $pc.clothing_flags(_i).includes("uncomfortable sleep")>>
<<run _discomfort.push($pc.clothes[_i].name)>>
<</if>>
<</for>>
<<set _relax to -25 * _discomfort.length>>
<<if _relax lt 0>>
<<if _relax lt -100>><<set _relax to -100>><</if>>
Ugh, sleeping in your <<= setup.and(_discomfort)>> wasn't very comfortable... <<alterneed Relaxation _relax>><<dalterneed Relaxation _relax>>
<br><br>
<</if>>
<</if>>
<<if $pc.has_part("penis") and ($pchorny or State.random() lte 0.15) and $hour gte 5 and $hour lt 12>>
You wake up with morning wood. <<alterneed Arousal 200 900>>
<br><br>
<</if>>
<<if $gameschedule>>
<<set _games to []>>
<<for _game range Object.keys($gameschedule)>>
<<set _schedule to $gameschedule[_game]>>
<<if _schedule.month is setup.Time.months[$month] and _schedule.day is $day and _schedule.hour gt $hour>>
<<set _sportinfo to setup.School.sports[_game]>>
<<set _locname to setup.Maps["Campus"].nodes[_sportinfo.outside].name>>
<<set _insport to ($pcsports and ($pcsports.includes(_game) or $pcsports.includesAny(_sportinfo.attached)))>>
<<set _gamelabel to _sportinfo.gamelabel>>
<<set _type to (_schedule.gametype || "regular")>>
<<if ["rivalry", "playoff"].includes(_type)>>
<<set _gamelabel to _type + " " + _gamelabel>>
<</if>>
<<if _insport>>
<<highlight>>You have <<aoran _game>> _game _gamelabel today<</highlight>> at <<= setup.Time.clock(_schedule.hour, 0)>> at <<= _locname>>.
<<if _schedule.location is "away">>
This is an away game.
<</if>>
You should be there on time and in uniform!
<br><br>
<<elseif _schedule.location is "home">>
<<set _msg to "<<aoran " + _game + ">> " + _game + " " + _gamelabel + " today at " + setup.Time.clock(_schedule.hour, 0) + " at " + _locname>>
<<run _games.push(_msg)>>
<</if>>
<</if>>
<</for>>
<<if _games.length gt 0>>
There is <<and _games>>.
<br><br>
<</if>>
<</if>>
<<if setup.Shops.is_mailorder_ready() or $parentgift>>
You have an email letting you know that you <<highlight>>have a package waiting<</highlight>> at the mail center in Chamberlain Hall.
<br><br>
<</if>>
<<if $rmpbully && $rmpbully.dare == "EventRMPDareSkirt" && setup.School.is_class_today($pccourses[2]) && !setup.School.is_exam_day($pccourses[2]) && setup.School.classes_today()>>
<<highlight>>You were dared<</highlight>> to wear a skirt and no underwear to your <<= $pccourses[2]>> class today.<<if !$pc.skillleveled("Exhibitionism", 3)>>Normally you wouldn't have the nerve, but... for a dare, maybe you could.<</if>>
<br><br>
<</if>>
<<if $planneddate>>
<<for _planneddate range $planneddate>>
<<if _planneddate and _planneddate.time and _planneddate.location && _planneddate.day is $gameday>>
<<set _p to _planneddate.partner>>
You planned <<highlight>><<aoran _planneddate.type>> <<= _planneddate.type>><</highlight>> with <<fullname _p>> today. You're supposed to meet <<po>> anytime after <<= setup.Time.clock(_planneddate.time, 0)>> at <<= setup.get_location_name(_planneddate.location)>>.<br>
<br>
<</if>>
<</for>>
<</if>>
<<maybefadecrush>>
<<fadingrelationships>>
<<if _homebase and $ongoingturnonpick>>
<<set _pickingturnons to true>>
You find yourself considering what sorts of things turn you on...
<br>
<<pickturnons>>
<br><br>
<</if>>
<<if _homebase and $ongoingdmarkpick>>
You ponder what your most distinguishing features are... what's remarkable about you, exactly?
<br>
<span class="nokeys">
<<choosedmarks $pc>>
</span>
<br><br>
<</if>>
<<if !$firsttime.bdaypick>>
<<pickbirthday>>
<br><br>
<</if>>
<<unset $wakemsg>>
<<if $postencounterpassage>><<set $postencounterspentnight to true>><</if>>
<<if !$postencounterpassage || !$prebedclothes>>
<<link "Get up" _getuppassage>><<unset $prebedclothes>><</link>>
<</if>>
<<if $prebedclothes>><br><<link "Change into yesterday's clothes and get up" _getuppassage>><<run $pc.swap_all_clothing_to_closet()>><<run $pc.wear_all_clothes($prebedclothes)>><<unset $prebedclothes>><</link>><</if>>
<<if !_pickingturnons and (!$lastturnonchange or $gameday - $lastturnonchange gte 7)>>
<br><br>
<div id="turnons-link">
<<link "Reflect on what turns you on">>
<<replace "#turnons-link">><<pickturnons>><</replace>>
<</link>>
</div>
<</if>>
<</if>>The time passes quickly, and before you know it, you're back on campus. You unpack efficiently, then take a look around.
It's like you never left at all. And a brand new term is ahead of you.
[[Back to the college grind!|YourDorm]]<<include WakeUp>>You're in the office for Campus Recreation. It's a small place, since the teams and clubs on campus mostly each look after themselves, but to the degree that intramural sports need centralization, it happens here.
<br><br>
<<if !setup.sports_signups_open()>>
According to a posted notice, sports signups will begin the second week of class.
<<elseif $pcsports and $pcsports.length gt 0>>
You're signed up for <<= $pcsports[0]>>.
<br>
<<link "Order uniform" ShopMenu '🎽'>><<set $shop to "Intramural Sports Uniforms">><</link>>
<br><br>
You can quit, but it's nothing to do lightly. It'll be a while till you can join a team again.
<br>
<<link "Quit the team" SportsQuit '❌'>><</link>>
<<elseif $pcquitsports and $gameday - $pcquitsports lt 14>>
You've quit your team too recently to join another one.
<<else>>
You can sign up for a team here.
<br><br>
<<set _sports to Object.keys(setup.School.sports)>>
<<for _sport range _sports>>
<<set _linkname to "Sign up for " + _sport>>
<<capture _sport>>
<<link _linkname SportsSignupConfirm>><<set $maybesport to _sport>><</link>>
<<if _sport isnot _sports[_sports.length - 1]>><br><</if>>
<</capture>>
<</for>>
<</if>>
<br><br>
<<link "Leave" BlodgettGymInterior '🚪'>><<advtime 1>><</link>> <<dtime 1>>Are you sure you want to sign up for $maybesport?
<<link "Yes, sign up" SportsSignup>>
<<set $pcsports to [$maybesport]>>
<<set $header to "You've done it. Congratulations! <<highlight>>Your first practice: " + setup.School.show_next_class_specific($maybesport) + "!<</highlight>>">>
<<unset $maybesport>>
<</link>>
<<link "No, cancel" SportsSignup>><</link>>Are you sure you want to quit <<= $pcsports[0]>>? You won't be able to join another team for quite a while.
<<link "Yes, quit" SportsSignup>><<set $pcquitsports to $gameday>><<set $pcsports to []>><</link>>
<<link "No, cancel" SportsSignup>><</link>><<set _var to "$" + $inclass>><<if !($inclass in State.variables)>><<run State.setVar(_var, {})>><</if>>
<<set _courseinfo to setup.School.sports[$inclass]>><<set _prof to setup.School.professor_of_course($inclass)>>
<<set _late to setup.School.current_class().late>>
<<if setup.School.times_attended($inclass) is 1>>
<<set _event to setup.Events.passage([$inclass + " practice intro"])>>
<<include _event>>
<<else>>
<<= _courseinfo["practice space description"]>>
<br><br>
<<if $inclass is "swimming" and $swimming and $swimming.allnaked>>
<<set $pc.event_removed_clothing to [...V.pc.clothes]>>
<<run $pc.remove_all_clothing()>>
As soon as the pool clears of anybody not in the know, the entire swim team strips down. And you're right there with them. <<showall>>
<<if !$swimming.allnakedpractices>><<set $swimming.allnakedpractices to 1>><<else>><<set $swimming.allnakedpractices++>><</if>>
<br><br>
<</if>>
<<for _sport range Object.keys($gameschedule)>>
/* mention upcoming games */
<<if $inclass is _sport or (setup.School.sports[_sport].attached and setup.School.sports[_sport].attached.includes($inclass))>>
<<if setup.School.sports[$inclass].trackschedule>>
<<set _agame to setup.School.sports[setup.School.sports[$inclass].trackschedule].gamelabel>>
<<else>>
<<set _agame to setup.School.sports[$inclass].gamelabel>>
<</if>>
<<set _agame to setup.a_or_an(_agame) + " " + _agame>>
<<set _monthi to setup.Time.months.indexOf($gameschedule[_sport].month)>>
<<if setup.Time.is_today(_monthi, $gameschedule[_sport].day)>>
<<set _team to $gameschedule[_sport].against>>
"Practice well, but keep some in reserve. <<highlight>>We have _agame today<</highlight>>," <<coach>> says.
<<elseif setup.Time.is_tomorrow(_monthi, $gameschedule[_sport].day)>>
<<set _team to $gameschedule[_sport].against>>
"Practice hard. <<highlight>>We have _agame tomorrow<</highlight>>," <<coach>> says.
<<elseif setup.Time.is_same_week(_monthi, $gameschedule[_sport].day)>>
<<set _team to $gameschedule[_sport].against>>
"<<highlight>>We have _agame this week on <<= setup.Time.weekday($gameschedule[_sport].day)>><</highlight>>," <<coach>> says.
<</if>>
<<if _team>>
<<set _type to ($gameschedule[_sport].gametype || "regular")>>
<<switch _type>>
<<case "regular">>
"This is a regular season game, still very important.
<<case "playoff">>
"We're in the playoffs, so it's time to give it your all.
<<case "rivalry">>
"This is a rivalry game, and it's time to prove you're the best.
<<case "dual">>
"This is a dual, and there's points for our college up for grabs.
<<case "invitational">>
"This is an invitational and very important.
<<case "championship">>
"This is the championship.
<</switch>>
<<if Array.isArray(_team)>>
<<set _teamlist to []>>
<<for _t range _team>>
<<run _teamlist.push(setup.School.other_teams[_t].longname)>>
<</for>>
The <<and _teamlist>> will be there too.
<<elseif setup.School.other_teams[_team].rival>>
<<if _type is "rivalry">>
Needless to say, that means we're up against the <<= setup.School.other_teams[_team].longname>>.
<<else>>
We're up against the <<= setup.School.other_teams[_team].longname>>, and you know how important it is to show them up.
<</if>>
<<else>>
We're up against the <<= setup.School.other_teams[_team].longname>>.
<</if>>
<<if $gameschedule[_sport].trophy>>
This is for the <<= $gameschedule[_sport].trophy>>!
<</if>>
So rest well, eat well, and get ready to
<<switch $inclass>>
<<case "cheerleading">>
cheer for your team!"
<<case "swim">>
swim for your school!"
<<default>>
crush the competition!"
<</switch>>
<br><br>
<</if>>
<</if>>
<</for>>
<<include SportsPracticeMenu>>
<</if>><<if !$inclass>>
<<continuelink>>
<<else>>
<<set _scheduleblock to setup.Time.schedule_block_today(setup.School.sports[$inclass].schedule)>>
<<if !_scheduleblock>>
<<unset $inclass>>
<<continuelink>>
<<else>>
<<set _endhour to _scheduleblock.hour + _scheduleblock.length>>
<<if $hour gte _endhour>>
Practice is over, and the coach dismisses you.
<br>
<br>
<<link "Leave">>
<<run setup.School.leave_practice()>>
<<set _leavepassage to setup.Events.passage(["leaving sports practice"])>>
<<if _leavepassage>>
<<egoto _leavepassage>>
<<else>>
<<set $peopleatlocation to setup.people_at_location()>>
<<egoto $lastlocpassage>>
<</if>>
<</link>>
<<else>>
<<set _classevents to $classevents || []>>
<<set _eventpassage to setup.Events.passage(["sports practice"], V.classevents) || setup.Events.passage(["sports practice"])>>
<<run _classevents.push(_eventpassage)>>
<<set $classevents to _classevents>>
<<set _link to {text: "Work hard", link: _eventpassage, emoji: setup.School.sports[$inclass].emoji}>>
<<link _link>>
<<run setup.School.advance_practice()>>
<<run setup.Needs.stress(-10)>>
<<run setup.Needs.tire(-10)>>
<<for _skill range setup.School.sports[$inclass].skills>>
<<raiseskill _skill>>
<</for>>
<<if $inclass is "swimming">><<soakplayer>><</if>>
<</link>>
<<for _skill range setup.School.sports[$inclass].skills>>
<<skill _skill 1>>
<</for>>
<<dalterneed Relaxation -10>> <<dalterneed Rest -10>>
<br>
<<set _link to {text: "Try to slack off", link: _eventpassage, emoji: '😴'}>>
<<link _link>>
<<run setup.School.advance_practice()>>
<<if $inclass is "swimming">><<soakplayer>><</if>>
<</link>>
<</if>>
<</if>>
<</if>>You head into practice early. <<if $minute gte 50>>It'll start soon, but you have time to socialize during the general ruckus of students arriving.<<else>>It'll be a little while till it starts. You have time to study or do homework. Or, you know, none of those things.<</if>>
<<set _mins to 60 - $minute>>\
<<if $minute lt 50>><<link "Study" Study>><</link>> <<dtime _mins>><br><</if>>\
<<link "Socialize" SportsPracticeSocialize>><</link>> <<dtime _mins>> <<dalterneed Attention 30>>
<<link "Goof off" SportsPracticeGoof>><</link>> <<dtime _mins>> <<dalterneed Relaxation 25>><<set _mins to 60 - $minute>>\
<<set _relax to 50.0 * (_mins / 30.0)>>\
You play around on your phone, wasting time till practice starts.<<advtime _mins>> <<dalterneed Relaxation _relax>><<alterneed Relaxation _relax>>
<<link "Continue" SportsPractice>><<run setup.School.attend_practice()>><</link>>You spend the time before practice trying to catch people's eye and have a few quick conversations.<br>
<br>
<<set _mins to 60 - $minute>><<set _count to Math.max(1, _mins / 8)>>
<<set _students to setup.enrolled(setup.School.current_class().course)>>
<<set _people to setup.Events.pick_several({type: "student"}, _count, _students)>>
<<set _likes to []>><<set _dislikes to []>>
<<for _person range _people>>
<<likes _person>>
<<friendship _person 15 25>>
<<run _likes.push(_person)>>
<<anonorfullnamerelc _person>> <<= setup.randel(["stops by to chat", "pauses and exchanges a few words", "chats with you for a minute", "exchanges small talk"])>>.
<<introduction _person true>>
<<learngendermini _person>>
<<maybegetnumber _person>>
<<dalterneed Friendship 20>>
<<dislikes>>
<<friendship _person -15 -25>>
<<run _dislikes.push(_person)>>
<<if setup.people.scared_of_pc(_person)>>
<<anonorfullnamerelc _person>> <<= setup.randel(["gives you a look and then hurries by", "looks away", "looks at you, then hurries onward"])>>.
<<else>>
<<anonorfullnamerelc _person>> <<= setup.randel(["gives you a look and passes by without pausing", "doesn't return your greeting", "looks at you, says something to a friend, then laughs and keeps walking", "completely ignores you"])>>.
<</if>>
<<introduction _person true>>
<<dalterneed Friendship -20>>
<</likes>><br>
<br>
<<playerinitsocializing>>
<</for>>
<<set _attention to Math.min(20 * _likes.length, 60)>>
Then it's time for practice to start. <<dalterneed Attention _attention>><<socialize _attention>><br>
<br>
<<advtime _mins>>
<<link "Continue" SportsPractice>><<run setup.School.attend_practice()>><</link>><<set _sportinfo to setup.School.sports[$sport.playing]>>
<<= _sportinfo["join description"]>>
<br><br>
<<sportsgamemenu>><<set _sportinfo to setup.School.sports[$sport.watching]>>
<<= _sportinfo["watch description"]>>
<br><br>
<<sportsgamemenu>><div style="margin: auto; width: 100%; text-align: center;">
<img id="splash-screen-img" src="res/img/CourseOfTemptation_splashlogo.jpg" style="width: 100%; max-width: 44em">
</div>
<br>
<div style="font-size: 80%; font-style: italic;">
This game is an adult life simulator and an exploration of erotic fantasies. It is intended for adults only and contains content that is not suitable for minors. By playing this game, you acknowledge that you are at least 18 years old or the legal age of majority in your jurisdiction (whichever is greater).
<br><br>
This game contains explicit content and sexual themes. The creators of this game do not condone or promote any illegal, unethical, or immoral behavior depicted in the game. All characters depicted in the game are fictional, most with randomized names, and are not meant to represent any real individuals or organizations. Every character depicted in the game is an adult. All events depicted in the game should be interpreted as consenting adults acting out their fantasies. All depictions of sex toys are for gameplay purposes and not necessarily realistic; sex toys can be dangerous if misused, so please research thoroughly before attempting anything you see in the game. Specifics about birth control methods, while based on real world information, have been altered to suit gameplay purposes. The creators of this game are not responsible for any actions you take as a result of playing it. The creators of this game are not responsible or liable for any modifications to the code or content by third parties.
<br><br>
If you do not agree with any part of this disclaimer, please close the game now.
<br>
</div>
<br>
<span class="pink-button"><<button "I agree!" Start2>><</button>></span>
<br><br>
<div class="two-column-container">
<div class="two-column" style="padding-right: 1.5em;">
<b>Important</b>: Save data is kept in your browser's local storage, which can be very volatile. You cannot play in private/incognito mode or you will lose your saves at the end of the session. Clearing your browser's stored data will result in losing your saves. Some browsers will delete your save data after not touching the game for a day or a week, or for no apparent reason at all. Export your save data regularly to avoid losing it.
</div>
<div class="two-column">
<b>Content Warning</b>: More extreme or at least less mainstream content can be toggled off in the <b>Options</b> menu. When disabled, such content will not be directly or fully experienced but may still be alluded to. Please read through the content options and consider them your content warning. These options can be toggled at any time during play.
</div>
</div>
<br><br>
<<highlight "small">>
<a href="https://opendyslexic.org/license">OpenDyslexic typeface</a> is used under the SIL-OFL license.
<</highlight>><<widget "newgame">>
<<checkndefworldgen>>
<<set _worldgen to recall("worldgen")>>
<<set $studentgenderdistribution to _worldgen.studentgenderdistribution>>
<<set $towniegenderdistribution to _worldgen.towniegenderdistribution>>
<<set $facultygenderdistribution to _worldgen.facultygenderdistribution>>
<<set $outsidergenderdistribution to _worldgen.outsidergenderdistribution>>
<<set $breastsizebonus to _worldgen.breastsizebonus || 0>>
<<set $penissizebonus to _worldgen.penissizebonus || 0>>
<<set $buttsizebonus to _worldgen.buttsizebonus || 0>>
<<set $plumpnessbonus to _worldgen.plumpnessbonus || 0>>
<<set $muscularitybonus to _worldgen.muscularitybonus || 0>>
<<set $heightbonus to _worldgen.heightbonus>>
<<set $gaybonus to _worldgen.gaybonus>>
<<set $bibonus to _worldgen.bibonus>>
<<if ndef _worldgen.polybonus>><<set _worldgen.polybonus to 1>><</if>>
<<set $polybonus to _worldgen.polybonus>>
<<set $seed to _worldgen.seed>>
<<if _worldgen.nichegenderpicks>>
<<set $nichegenderpicks to _worldgen.nichegenderpicks>>
<<else>>
<<unset $nichegenderpicks>>
<</if>>
<<if ndef _worldgen.tradsports>>
<<set $tradsports to true>>
<<else>>
<<set $tradsports to _worldgen.tradsports>>
<</if>>
<<if def _worldgen.penis_types>>
<<set $penistypes to _worldgen.penis_types>>
<</if>>
<</widget>>
<<widget "continuegame">>
<<if idb.active>>
<<script>>
let latestSaveStamp = 0;
let latestSlot = null;
idb.getSaveDetails().then(
saves => {
saves.forEach(
save => {
if (save.data.date > latestSaveStamp) {
latestSaveStamp = save.data.date;
latestSlot = save.slot;
}
}
);
if (latestSlot !== null) idb.loadState(latestSlot);
else {
Dialog.setup();
Dialog.wiki("No save data found.");
Dialog.open();
}
}
);
<</script>>
<<else>>
<<set _newest to null>><<set _newesttime to 0>>
<<set _saves to Save.get()>>
<<for _i to 0; _i < Save.slots.length; _i++>>
<<set _save to _saves.slots[_i]>>
<<if _save isnot null and _save.date gt _newesttime>>
<<set _newest to _i>><<set _newesttime to _save.date>>
<</if>>
<</for>>
<<set _save to _saves.autosave>>
<<if _save isnot null and _save.date gt _newesttime>>
<<run Save.autosave.load()>>
<<elseif _newest isnot null>>
<<run Save.slots.load(_newest)>>
<<else>>
<<script>>
Dialog.setup();
Dialog.wiki("No save data found.");
Dialog.open();
<</script>>
<</if>>
<</if>>
<</widget>>
<<widget "pickturnons">>
<div id="turnons-chooser">
<<set _maxpicks to 5>>
<<if ndef $pcturnons>><<set $pcturnons to []>><</if>>
<<if ndef $pcturnoffs>><<set $pcturnoffs to []>><</if>>
<<set _allturnons to Object.keys(setup.turnons)>>
<<if $pcturnons.length lt _maxpicks or $pcturnoffs.length lt _maxpicks>>
<<link "Fill with random choices">>
<<script>>
const allturnons = Object.keys(setup.turnons);
while (V.pcturnons.length < T.maxpicks)
{
let turnon = setup.randomchoice(allturnons);
if (!V.pcturnons.includes(turnon) && !V.pcturnoffs.includes(turnon) && (!V.pcturnons.includes(setup.turnons[turnon].opposite) || setup.turnons[turnon].playerignoreopposite))
V.pcturnons.push(turnon);
}
while (V.pcturnoffs.length < T.maxpicks)
{
let turnon = setup.randomchoice(allturnons);
if (!V.pcturnons.includes(turnon) && !V.pcturnoffs.includes(turnon) && (!V.pcturnoffs.includes(setup.turnons[turnon].opposite) || setup.turnons[turnon].playerignoreopposite))
V.pcturnoffs.push(turnon);
}
<</script>>
<<replace "#turnons-chooser">><<pickturnons>><</replace>>
<<unset $ongoingturnonpick>>
<</link>>
<br><br>
<</if>>
<div class="turnons-container nokeys">
<div class="turnons-column">
<div class="turnons-header">💗 <b>Turnons</b> (<<= $pcturnons.length>>/_maxpicks)</div>
<<for _turnon range $pcturnons>>
<div class="turnons-item">
<<capture _turnon>>
<<highlight>><<= _turnon>><</highlight>> (<<link "remove">><<run $pcturnons.delete(_turnon)>><<replace "#turnons-chooser">><<pickturnons>><</replace>><<unset $ongoingturnonpick>><<set $lastturnonchange to $gameday>><</link>>)
<</capture>>
</div>
<</for>>
<<if $pcturnons.length lt _maxpicks>>
<<for _turnon range _allturnons>>
<<if !$pcturnons.includes(_turnon) and !$pcturnoffs.includes(_turnon) and (!$pcturnons.includes(setup.turnons[_turnon].opposite) or setup.turnons[_turnon].playerignoreopposite)>>
<div class="turnons-item">
<<capture _turnon>>
<<= _turnon>> (<<link "add">><<run $pcturnons.push(_turnon)>><<replace "#turnons-chooser">><<pickturnons>><</replace>><<unset $ongoingturnonpick>><<set $lastturnonchange to $gameday>><</link>>)
<</capture>>
</div>
<</if>>
<</for>>
<</if>>
</div>
<div class="turnons-column">
<div class="turnons-header">👎 <b>Turnoffs</b> (<<= $pcturnoffs.length>>/_maxpicks)</div>
<<for _turnon range $pcturnoffs>>
<div class="turnons-item">
<<capture _turnon>>
<<highlight>><<= _turnon>><</highlight>> (<<link "remove">><<run $pcturnoffs.delete(_turnon)>><<replace "#turnons-chooser">><<pickturnons>><</replace>><<unset $ongoingturnonpick>><<set $lastturnonchange to $gameday>><</link>>)
<</capture>>
</div>
<</for>>
<<if $pcturnoffs.length lt _maxpicks>>
<<for _turnon range _allturnons>>
<<if !$pcturnons.includes(_turnon) and !$pcturnoffs.includes(_turnon) and (!$pcturnoffs.includes(setup.turnons[_turnon].opposite) or setup.turnons[_turnon].playerignoreopposite)>>
<div class="turnons-item">
<<capture _turnon>>
<<= _turnon>> (<<link "add">><<run $pcturnoffs.push(_turnon)>><<replace "#turnons-chooser">><<pickturnons>><</replace>><<unset $ongoingturnonpick>><<set $lastturnonchange to $gameday>><</link>>)
<</capture>>
</div>
<</if>>
<</for>>
<</if>>
</div>
</div>
<<unset _allturnons>>
</div>
<</widget>>
<<widget "pickstartinginclinations">>
<div id="startinc-chooser">
<<set _maxpicks to 99>>
<<if ndef $pcstartinginclinations>><<set $pcstartinginclinations to []>><</if>>
<<set _allincs to setup.starter_inclinations()>>
<<if $pcstartinginclinations.length lt _maxpicks>>
<<link "Make a random pick">>
<<set $pcstartinginclinations to [setup.randomchoice(setup.starter_inclinations())]>>
<<replace "#startinc-chooser">><<pickstartinginclinations>><</replace>>
<</link>>
<br><br>
<</if>>
<div class="startinc-container nokeys">
<<for _inc range _allincs>>
<<if $pcstartinginclinations.includes(_inc)>>
<div class="startinc-item">
<<capture _inc>>
<<highlight>><<= _inc>><</highlight>>: <<= setup.inclinations[_inc].description>> (<<link "remove">><<run $pcstartinginclinations.delete(_inc)>><<replace "#startinc-chooser">><<pickstartinginclinations>><</replace>><</link>>)
<</capture>>
</div>
<</if>>
<</for>>
<<if $pcstartinginclinations.length lt _maxpicks>>
<<for _inc range _allincs>>
<<set _incinfo to setup.inclinations[_inc]>>
<<set _opposing to _incinfo.requires && _incinfo.requires.noinclinations && _incinfo.requires.noinclinations.includesAny($pcstartinginclinations)>>
<<if !$pcstartinginclinations.includes(_inc) and !_opposing>>
<div class="startinc-item">
<<capture _inc>>
<<highlight>><<= _inc>><</highlight>>: <<= setup.inclinations[_inc].description>> (<<link "add">><<run $pcstartinginclinations.push(_inc)>><<replace "#startinc-chooser">><<pickstartinginclinations>><</replace>><</link>>)
<</capture>>
</div>
<</if>>
<</for>>
<</if>>
</div>
<<unset _allincs>>
</div>
<</widget>>
<<widget "pickbirthday">>
<<if ndef $pcbirthday>>
<<set $pcbirthday to setup.random_birthday()>>
<</if>>
<<dfirstname $pc>>'s birthday:
<br>
<div id="birthday-chooser">
<<set _months to [...setup.Time.months]>>
<<run _months.delete("Frostuary")>>
<<run _months.unshift("Frostuary")>>
<<listbox "$pcbirthday[0]" autoselect>>
<<optionsfrom _months>>
<</listbox>>
<<set _days to []>>
<<for _i to 1; _i lte 28; _i++>>
<<run _days.push(_i)>>
<</for>>
<<listbox "$pcbirthday[1]" autoselect>>
<<optionsfrom _days>>
<</listbox>>
</div>
<<set $firsttime.bdaypick to true>>
<</widget>>
<<widget "pickproclivity">>
<<set _nextpassage to _args[0]>>
<<if ndef $pcproclivity>>
<<set $pcproclivity to "Dated Innocently">>
<</if>>
<div id="proclivity-chooser" class="nokeys">
<div class="inclination-container">
<<for _procliv range Object.keys(setup.Sexualities)>>
<<if _procliv is $pcproclivity>>
<<set _class to "inclination-item inclination-item-unlocked clickable">>
<<else>>
<<set _class to "inclination-item inclination-item-disabled clickable">>
<</if>>
<<capture _procliv>>
<div @class="_class">
<div class="inclination-header">
<span class="inclination-title">
<<= _procliv>>
</span>
<span class="inclination-status">
<<if _procliv is $pcproclivity>>
><<link "Confirm">>
<<set $prologuetext to setup.Sexualities[_procliv].description>>
<<run setup.implement_proclivity(_procliv)>>
<<if _nextpassage>>
<<go _nextpassage>>
<</if>>
<</link>><
<<else>>
(<<link "Choose">>
<<set $pcproclivity to _procliv>>
<<replace "#proclivity-chooser">><<pickproclivity _nextpassage>><</replace>>
<</link>>)
<</if>>
</span>
</div>
<span class="inclination-description">
<<= setup.Sexualities[_procliv].description>>
</span>
<br><br>
<span class="inclination-effects">
<<if setup.Sexualities[_procliv].virginity>>
<<highlight>>Still a virgin<</highlight>>
<<else>>
<<highlight sexy>>No longer a virgin<</highlight>>
<</if>>
</span>
<<if setup.Sexualities[_procliv].skills>>
<br><br>
<span class="inclination-effects">
<<for _skill range Object.keys(setup.Sexualities[_procliv].skills)>>
<<set _amt to setup.Sexualities[_procliv].skills[_skill]>>
<<if _skill is "bits">>
<<if $pc.has_part("penis")>>
<<set _skill to "Penetrative">>
<<else>>
<<set _skill to "Vaginal">>
<</if>>
<</if>>
<<skill _skill>><span class="small">+_amt</span>
<</for>>
</span>
<</if>>
<<if setup.Sexualities[_procliv].inclinations>>
<br><br>
<span class="inclination-effects">
<<for _inc range setup.Sexualities[_procliv].inclinations>>
<<inclination _inc>>
<br>
<</for>>
</span>
<</if>>
</div>
<</capture>>
<</for>>
</div>
</div>
<<done>>
<<script>>
$(".inclination-item").on("click", function() {
$(this).find(".inclination-status").find("a").click();
});
<</script>>
<</done>>
<</widget>><div class="load-screen-container">
<img class="splash-screen-img-gray" src="res/img/CourseOfTemptation_splashlogo.jpg">
<div class="load-screen pink-button">
<div class="load-screen-buttons-section" id="newgame-continue">
<div><<button "New Game" Start3>><<run setup.init_genders()>><<newgame>><</button>></div>
<div><<button "Continue">><<continuegame>><</button>></div>
</div>
<div class="load-screen-buttons-section">
<div><<button "World Generation Options" WorldGen>><</button>></div>
</div>
</div>
</div>Thanks and welcome! Let's configure the basics about your character.
What's your name?
<<nobr>><div class="chargen-pcname-container">
<div id="textbox-pcname"><<textbox "_inputname" $pcname autofocus>></div>
<<button "Random femme name">>
<<set $pcname to setup.random_name("female")>>
<<set $pcnickname to "">>
<<replace "#textbox-pcname">>
<<textbox "_inputname" $pcname autofocus>>
<</replace>>
<<replace "#textbox-pcnickname">>
<<textbox "_inputnickname" "">>
<</replace>>
<</button>>
<<button "Random masc name">>
<<set $pcname to setup.random_name("male")>>
<<set $pcnickname to "">>
<<replace "#textbox-pcname">>
<<textbox "_inputname" $pcname autofocus>>
<</replace>>
<<replace "#textbox-pcnickname">>
<<textbox "_inputnickname" "">>
<</replace>>
<</button>>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
</div><</nobr>>
You can also have a nickname. It's optional!
<span id="textbox-pcnickname"><<textbox "_inputnickname" $pcnickname>></span>
<span id="presets">
Now please choose your gender, or <<nobr>>
<<highlight "nokeys">><<link "customize one">>
<<toggleclass "#presets" "hidden">>
<<toggleclass "#customize" "hidden">>
<<set _customgender to true>>
<</link>><</highlight>>
<</nobr>>!
<label><<radiobutton "_gender" "female" checked>> Cisgender Woman</label>
<label><<radiobutton "_gender" "male">> Cisgender Man</label>
<label><<radiobutton "_gender" "transgender female">> Transgender Woman</label>
<label><<radiobutton "_gender" "transgender male">> Transgender Man</label>
<label><<radiobutton "_gender" "nonbinary afab">> Nonbinary (assigned female at birth)</label>
<label><<radiobutton "_gender" "nonbinary amab">> Nonbinary (assigned male at birth)</label>
<<nobr>>
<<highlight "small nokeys">>
<<link "About gender...">>
<<script>>
Dialog.setup("Help: About Gender", "help");
Dialog.wiki(Story.get("HelpAboutGender").processText());
Dialog.open();
<</script>>
<</link>>
<</highlight>>
<</nobr>>
Please choose your sexual preferences.
<label><<radiobutton "_sexpref" "straight" checked>> Straight</label>
<label><<radiobutton "_sexpref" "queer">> Gay</label>
<label><<radiobutton "_sexpref" "bi">> Bi</label>
<<nobr>>
<<highlight "small nokeys">>
<<link "About sexual preferences...">>
<<script>>
Dialog.setup("Help: About Sexual Preferences", "help");
Dialog.wiki(Story.get("HelpAboutSexPrefs").processText());
Dialog.open();
<</script>>
<</link>>
<</highlight>>
<</nobr>></span>
<span id="customize" class="hidden"><<nobr>>
/* Use straight cisgender female options as defaults. */
<<set _custom_gender_label to "woman" >>
<<set _custom_gender_label_young to "girl" >>
<<set _custom_gender_pronouns to "female" >>
<<set _custom_gender_has_breasts to true >>
<<set _custom_gender_genitals to "vagina" >>
<<set _custom_gender_attraction_label to "straight" >>
<<set _custom_gender_grows_beard to "no" >>
<<set _custom_gender_attracted_cisgender_woman to false>>
<<set _custom_gender_attracted_cisgender_man to true>>
<<set _custom_gender_attracted_transgender_woman to false>>
<<set _custom_gender_attracted_transgender_man to true>>
<<set _custom_gender_attracted_nonbinary_afab to false>>
<<set _custom_gender_attracted_nonbinary_amab to true>>
<<set _custom_gender_roommate_cisgender_woman to true>>
<<set _custom_gender_roommate_cisgender_man to false>>
<<set _custom_gender_roommate_transgender_woman to true>>
<<set _custom_gender_roommate_transgender_man to false>>
<<set _custom_gender_roommate_nonbinary_afab to true>>
<<set _custom_gender_roommate_nonbinary_amab to false>>
<<set _pronoun_options to ["female", "male", "nonbinary"]>>
<<set _attraction_label_options to ["straight", "queer", "bi"]>>
<<set _beard_options to ["no", "yes"]>>
<</nobr>>You can customize your character's gender and sexual preferences here, or <<nobr>>
<<highlight "nokeys">><<link "return to the presets">>
<<toggleclass "#presets" "hidden">>
<<toggleclass "#customize" "hidden">>
<<set _customgender to false>>
<</link>><</highlight>>
<</nobr>>.
<<nobr>>
<<highlight "small nokeys">>
<<link "About customizing gender and sexual preferences...">>
<<script>>
Dialog.setup("Help: About Customizing Gender and Sexual Preferences", "help");
Dialog.wiki(Story.get("HelpAboutCustomGenderAndSexPrefs").processText());
Dialog.open();
<</script>>
<</link>>
<</highlight>>
<</nobr>>
What noun is used for this character as an adult?
<span id="textbox-custom-gender-label"><<textbox "_custom_gender_label" _custom_gender_label>></span>
What noun is used for this character as a college-aged adult?
<span id="textbox-custom-gender-label-young"><<textbox "_custom_gender_label_young" _custom_gender_label_young>></span>
Which pronouns are used by this character?
<<listbox "_custom_gender_pronouns" autoselect>>
<<optionsfrom _pronoun_options>>
<</listbox>>
Which of these body parts does this character have?
<label><<checkbox "_custom_gender_has_breasts" false true autocheck>> Breasts</label>
<label><<radiobutton "_custom_gender_genitals" "vagina" autocheck>> Vagina</label>
<label><<radiobutton "_custom_gender_genitals" "penis" autocheck>> Penis</label>
Which of these genders is this character attracted to?
<label><<checkbox "_custom_gender_attracted_cisgender_woman" false true autocheck>> Cisgender Woman</label>
<label><<checkbox "_custom_gender_attracted_cisgender_man" false true autocheck>> Cisgender Man</label>
<label><<checkbox "_custom_gender_attracted_transgender_woman" false true autocheck>> Transgender Woman</label>
<label><<checkbox "_custom_gender_attracted_transgender_man" false true autocheck>> Transgender Man</label>
<label><<checkbox "_custom_gender_attracted_nonbinary_afab" false true autocheck>> Nonbinary (assigned female at birth)</label>
<label><<checkbox "_custom_gender_attracted_nonbinary_amab" false true autocheck>> Nonbinary (assigned male at birth)</label>
Would that attraction best be described as straight, queer, or bi?
<<listbox "_custom_gender_attraction_label" autoselect>>
<<optionsfrom _attraction_label_options>>
<</listbox>>
/*
Which of these genders might be assigned as a roommate of this character?
<label><<checkbox "_custom_gender_roommate_cisgender_woman" false true autocheck>> Cisgender Woman</label>
<label><<checkbox "_custom_gender_roommate_cisgender_man" false true autocheck>> Cisgender Man</label>
<label><<checkbox "_custom_gender_roommate_transgender_woman" false true autocheck>> Transgender Woman</label>
<label><<checkbox "_custom_gender_roommate_transgender_man" false true autocheck>> Transgender Man</label>
<label><<checkbox "_custom_gender_roommate_nonbinary_afab" false true autocheck>> Nonbinary (assigned female at birth)</label>
<label><<checkbox "_custom_gender_roommate_nonbinary_amab" false true autocheck>> Nonbinary (assigned male at birth)</label>
*/
Can this character grow a beard?
<<listbox "_custom_gender_grows_beard" autoselect>>
<<optionsfrom _beard_options>>
<</listbox>>
</span>
<<nobr>>
<span id="kinkcontentoptions-container" class="nokeys">
Please review content options to ensure you see only the content you want, especially if this is your first time playing!
<<link "View content options">>
<<replace "#kinkcontentoptions-container">><<kinkcontentoptions>><</replace>>
<</link>>
<br>
</span>
<</nobr>>
<<button "Create character">>
<<set _inputname to setup.capitalize_each(Util.escapeMarkup(_inputname.trim().replace(/\s+/g, ' ')))>>
<<set _inputnickname to Util.escapeMarkup(_inputnickname.trim())>>
<<if _customgender>>
<<set _custom_gender_label to Util.escapeMarkup(_custom_gender_label).trim()>>
<<set _custom_gender_label_young to Util.escapeMarkup(_custom_gender_label_young).trim()>>
<<set _custom_gender_parts = []>>
<<if _custom_gender_has_breasts>><<run _custom_gender_parts.push("breasts")>><</if>>
<<if _custom_gender_genitals == "vagina">><<run _custom_gender_parts.push("vagina")>><</if>>
<<if _custom_gender_genitals == "penis">><<run _custom_gender_parts.push("penis")>><</if>>
<<set _custom_gender_grows_beard_bool = _custom_gender_grows_beard == "yes" ? true : false>>
<<set _custom_gender_attracted_genders = []>>
<<if _custom_gender_attracted_cisgender_woman>><<run _custom_gender_attracted_genders.push("female")>><</if>>
<<if _custom_gender_attracted_cisgender_man>><<run _custom_gender_attracted_genders.push("male")>><</if>>
<<if _custom_gender_attracted_transgender_woman>><<run _custom_gender_attracted_genders.push("transgender female")>><</if>>
<<if _custom_gender_attracted_transgender_man>><<run _custom_gender_attracted_genders.push("transgender male")>><</if>>
<<if _custom_gender_attracted_nonbinary_afab>><<run _custom_gender_attracted_genders.push("nonbinary afab")>><</if>>
<<if _custom_gender_attracted_nonbinary_amab>><<run _custom_gender_attracted_genders.push("nonbinary amab")>><</if>>
<<set _custom_gender_attraction_object = setup.generate_attraction(_custom_gender_attraction_label, _custom_gender_attracted_genders)>>
<<set _custom_gender_roommate_array = []>>
<<if _custom_gender_roommate_cisgender_woman>><<run _custom_gender_roommate_array.push("female")>><</if>>
<<if _custom_gender_roommate_cisgender_man>><<run _custom_gender_roommate_array.push("male")>><</if>>
<<if _custom_gender_roommate_transgender_woman>><<run _custom_gender_roommate_array.push("transgender female")>><</if>>
<<if _custom_gender_roommate_transgender_man>><<run _custom_gender_roommate_array.push("transgender male")>><</if>>
<<if _custom_gender_roommate_nonbinary_afab>><<run _custom_gender_roommate_array.push("nonbinary afab")>><</if>>
<<if _custom_gender_roommate_nonbinary_amab>><<run _custom_gender_roommate_array.push("nonbinary amab")>><</if>>
<</if>>
<<if _inputname eq "">>
<<replace "#output">><<= "Please enter a name!">><</replace>>
<<elseif _inputname.length lt 5>>
<<replace "#output">><<= "That name is too short.">><</replace>>
<<elseif _inputname.length gt 60>>
<<replace "#output">><<= "That name is too long.">><</replace>>
<<elseif _inputname.indexOf(' ') == -1>>
<<replace "#output">><<= "Please enter both a first and last name.">><</replace>>
<<elseif _inputnickname.length gt 30 >>
<<replace "#output">><<= "That nickname is too long.">><</replace>>
<<elseif _customgender and _custom_gender_attracted_genders.length is 0>>
<<replace "#output">><<= "Please choose at least one gender that this character is attracted to.">><</replace>>
<<elseif _customgender and _custom_gender_roommate_array.length is 0>>
<<replace "#output">><<= "Please choose at least one gender that might be assigned as a roommate of this character.">><</replace>>
<<elseif _customgender and _custom_gender_roommate_array.length is 0>>
<<replace "#output">><<= "Please choose at least one gender that might be assigned as a roommate of this character.">><</replace>>
<<elseif _customgender and _custom_gender_label.length lt 3>>
<<replace "#output">><<= "That custom gender label is too short.">><</replace>>
<<elseif _customgender and _custom_gender_label_young.length lt 3>>
<<replace "#output">><<= "That custom gender label is too short.">><</replace>>
<<elseif _customgender and _custom_gender_label.length gt 30>>
<<replace "#output">><<= "That custom gender label is too long.">><</replace>>
<<elseif _customgender and _custom_gender_label_young.length gt 30>>
<<replace "#output">><<= "That custom gender label is too long.">><</replace>>
<<else>>
<<set $pcname to _inputname>>
<<set $pcnickname to _inputnickname>>
<<if _customgender>>
<<run setup.add_custom_gender(_custom_gender_label, _custom_gender_label_young, _custom_gender_pronouns, _custom_gender_parts, _custom_gender_grows_beard_bool, _custom_gender_attraction_object, _custom_gender_roommate_array)>>
<<set _gender to "custom">>
<<set _sexpref to _custom_gender_attraction_label>>
<</if>>
<<set $pcgender to _gender>>
<<set $pcsexualpref to _sexpref>>
<<set _attract to setup.get_gender_node(_gender, "attraction")>>
<<set _queerpref to ["gay", "lesbian", "queer"]>>
<<for _i to 0; _i lt _attract.length; _i++>>
<<if _attract[_i].label is _sexpref>>
<<set $pcsexualprefs to _attract[_i].genders>>
<<elseif _sexpref is "queer" and _queerpref.includes(_attract[_i].label)>>
<<set $pcsexualprefs to _attract[_i].genders>>
<</if>>
<</for>>
<<if setup.gender_db().custom>>
/* overriding roommate selection (the imperfectly progressive college decides this) */
<<set _pcgender to setup.pcgender()>>
<<set setup.gender_db().custom["roommate genders"] to setup.get_gender_node(_pcgender, "roommate genders")>>
<</if>>
<<egoto "Confirm Name">>
<</if>>
<</button>>
<span id="output"></span><<script>>
UI.restart();
<</script>>Your full name is $pcname <<if $pcnickname is "">>and you don't have a nickname<<else>>but your friends often call you $pcnickname<</if>>.
<br><br>
<<set _gender to setup.get_gender_node($pcgender, "choice label")>>
<<set _pronouns to setup.get_gender_node($pcgender, "pronouns")>>
Your gender is _gender and your pronouns are <<if _pronouns is "female">>she/her<<elseif _pronouns is "male">>he/him<<else>>they/them<</if>>. Your sexual preferences are best described as $pcsexualpref.
<br><br>
<<link "Start with the prologue">>
<<replace "#status">><<highlight>>World generation underway! It may take a moment.<</highlight>><</replace>>
<<timed 40ms>>
<<run setup.init_story()>>
<<run setup.init_pc()>>
<<egoto Prologue>>
<</timed>>
<</link>> (recommended)
<br>
<<link "Get straight into the game">>
<<replace "#status">><<highlight>>World generation underway! It may take a moment.<</highlight>><</replace>>
<<timed 40ms>>
<<run setup.init_story()>>
<<run setup.init_pc()>>
<<egoto QuickstartMenu>>
<</timed>>
<</link>> (quickstart)
<br>
[[Wait, let me try that again|Start3]]
<br><br>
<span id="status"></span><<if tags().includes("hasmap")>>
<<addclass "#passages" "hasmap">>
<<else>>
<<removeclass "#passages" "hasmap">>
<</if>>
<<if tags().includes("streaming")>>
<<addclass "#passages" "streamingpassage">>
<<else>>
<<removeclass "#passages" "streamingpassage">>
<</if>>
/*
<<timed 0s>>
<<run setup.passage_maintenance()>>
<</timed>>
*/
<<if tags().includes("location")>>
<<unset $npctocustomize>>
<<unset $prephoneattemptednavigation>>
<</if>><<if $skillgates and $skillgates.length gt 0 and !tags().includesAny(["streaming"])>>
<<displayskillgates>>
<</if>>
<<if tags().includes("streaming")>><<streamchat>><</if>>
/*
<<timed 0s>>
<<if $nolinks and !tags().includesAny(["encounter", "dialog", "chargen", "util"])>>
<br><br>
<<highlight bad>>No links found! Please report this as a bug. In the meantime, you can use the link below to carry on with the game.<</highlight>><br>
<<link "Escape!">><<unset $nolinks>><<if $lastlocpassage is passage()>><<egoto YourDorm>><<else>><<egoto $lastlocpassage>><</if>><</link>>
<</if>>
<</timed>>
*/<<set _coloroptions to recall("coloroptions", null)>>
<<if !_coloroptions>>
<<set _coloroptions to {
female: "#e968ee",
male: "#604eff",
nonbinary: "#35f3ba",
femaleemlink: "#edd8ee",
maleemlink: "#bdc1f0",
nonbinaryemlink: "#d2faee",
}>>
<<run memorize("coloroptions", _coloroptions)>>
<<else>>
<<set $coloroptions to _coloroptions>>
<</if>>
<<unset _coloroptions>>
<<set _optallownpccustom to recall("optallownpccustom", null)>>
<<if _optallownpccustom is null and $optallownpccustom>>
<<run memorize("optallownpccustom", $optallownpccustom)>>
<<elseif _optallownpccustom is null and !$optallownpccustom>>
<<run memorize("optallownpccustom", false)>>
<<else>>
<<set $optallownpccustom to _optallownpccustom>>
<</if>>
<<if !tags().includesAny("util", "chargen", "noevents", "shop", "event", "dialog")>>
<<if "pc" in State.variables>>
<<set _notifs to setup.header_notifications()>>
<<if _notifs.length gt 0>>
<div class="rounded-border">
<<for _i to 0; _i lt _notifs.length; _i++>>
<<= _notifs[_i]>><br>
<</for>>
<<run setup.clear_notifications()>>
</div>
<br>
<</if>>
<<if $planneddate && $planneddate.length gt 0 && !$firsttime.planneddate>>
<div class="rounded-border">
You've just made plans with somebody! Showing up is a good idea — naturally, anybody would be upset to be stood up!
<br><br>
Don't worry about keeping track of when and where — you can find this info on your phone with the Reminders and Calendar app, and you'll also get a reminder when you wake up on the day of a planned hangout or date.
</div>
<br>
<<set $firsttime.planneddate to true>>
<</if>>
<<if $pcneeds["Bladder"] lt 100>><span class="pee">You really have to pee!</span><br><br><</if>>
<<if $pcneeds["Rest"] lt 100>><span class="bad">You're exhausted! You really need to sleep.</span><br><br><</if>>
<<if $pcneeds["Food"] lt 100>><span class="bad">You're starving! You really have to find some food.</span><br><br><</if>>
<<if $pcneeds["Release"] lte 0 and $pchorny lt 2>>
<<if $pcneeds["Arousal"] lt 200>>
<span class="sexy">You're starting to feel a bit desperate to cum.</span>
<<if $pc.has_part("penis")>>
Your cock is getting throbbing hard at the slightest stimulation, a constant distraction.
<<elseif $pc.has_part("vagina")>>
The ache between your legs is insistent. Your <<dpussy $pc>> is wet and demanding attention.
<</if>>
You'll have to take care of this as soon as you can!<br><br>
<</if>>
<<set _prevhorny to $pchorny>>
<<set $pchorny to 2>>
<<run $pcneeds["Arousal"] = 200>>
<<if _prevhorny is 0>>
<<if !$pctimeshorny>>
<<set $pctimeshorny to 1>>
<<else>>
<<set $pctimeshorny++>>
<</if>>
<<if $pctimeshorny gte 10>>
<<run setup.inclinations.unlock_with_req("Always Horny")>>
<</if>>
<</if>>
<<elseif ($pcneeds["Release"] lte 250 or $pc.has_inclination("Always Horny")) and $pchorny lt 1>>
<<if $pcneeds["Arousal"] lt 100>>
<<if $pc.has_inclination("Always Horny")>>
<span class="sexy">You just feel insatiable lately</span>, like all you can think about is sex.
<<else>>
<span class="sexy">It's been a while since your last orgasm</span>, as your youthful hormone-addled body is all too eager to remind you.
<</if>>
<<if $pc.has_part("penis")>>
You feel your cock twitch, swelling as it hardens.
<<elseif $pc.has_part("vagina")>>
You feel an ache between your legs, a certain slickness between your nether lips as you move.
<</if>>
You'll have to take care of this pretty soon.<br><br>
<</if>>
<<set $pchorny to 1>>
<<run $pcneeds["Arousal"] = 100>>
<<if !$pctimeshorny>>
<<set $pctimeshorny to 1>>
<<else>>
<<set $pctimeshorny++>>
<</if>>
<<if $pctimeshorny gte 10>>
<<run setup.inclinations.unlock_with_req("Always Horny")>>
<</if>>
<<elseif $pc.arousal() gte $pc.max_arousal()>>
<<highlight sexy>>You're so fucking turned on.<</highlight>>
You could almost cum right now. It feels like a single touch would do it.
<<set _inner to $pc.innermost_covering("crotch")>>
<<if !_inner or $pc.get_clothing_flags("crotch").includes("under access")>>
<<if $pc.has_part("vagina")>>
You can feel your arousal dripping down the insides of your thighs.
<<else>>
You can feel your precum dripping freely from your twitching cock.
<</if>>
<<else>>
<<if $pc.has_part("vagina")>>
You can feel your arousal drooling from you,
<<else>>
You can feel your precum oozing from your twitching cock,
<</if>>
staining your <<clothingshortname _inner>>.
<<run $pc.add_stain(_inner, "arousal")>>
<</if>>
<<run $pc.add_arousal(-1)>>
<br><br>
<</if>>
<<if tags().includes("location")>>
<<loclabel>>
<<if $hangout and !tags().includes("hangout")>>
<<summarizehangout>><<endhangout>>
<br><br>
<</if>>
<</if>>
<</if>>
<</if>>
<<if !tags().includes("encounter")>><<set $preencountertags to tags()>><</if>>
<<if tags().includes("class") and typeof $classheader != "undefined">>
<<= $classheader>><br><br><<unset $classheader>>
<</if>>
<<if typeof $header != "undefined">>
<<= $header>><br><br><<unset $header>>
<</if>><<if $font>>
<<if $font is "sans-serif">>
<<unset $font>>
<<else>>
<<script>>
$(":root").css("--font-family", V.font);
<</script>>
<</if>>
<</if>>
<<if $fontsize>>
<<if $fontsize is "16px">>
<<unset $fontsize>>
<<else>>
<<script>>
$(":root").css("--font-size", V.fontsize);
<</script>>
<</if>>
<</if>>
<<if !tags().includesAny("util", "chargen", "dialog")>>
/* update variables */
<<run setup.update_vars(V)>>
<<if $optfreezeaddrels>>
<<set $pendingaddrelationships to {}>>
<</if>>
<<if $optfreezeremrels>>
<<set $pendingremoverelationships to {}>>
<</if>>
<</if>>
<<if ndef $opttooltips>>
<<set $opttooltips to true>>
<</if>>
<<script>>
V.debug_lock = recall("debug_lock");
if (V.debug_lock)
{
setup.debug.install_kd();
setup.debug.show();
}
setup.scanNaNs();
setup.scanBadArrays();
setup.fix_skill_NaNs();
<</script>>
/* handle anything that needs to compare previous tags with current tags */
<<if tags().includes("event") and (!$prevtags.includes("event") or $prevtags.includes("class") or $prevtags.includes("streaming"))>>
/* if an event chains multiple passages, we really only want to register the first one */
<<if $eventmemory[passage()]>>
<<set $eventrepeat to true>>
<<else>>
<<set $eventrepeat to false>>
<</if>>
<<run setup.Events.register_event(passage())>>
<<elseif !tags().includesAny(["event", "encounter", "noclothingfix", "dialogue"]) && $prevtags.includesAny(["event", "noclothingfix", "postencounter"])
&& (!tags().includes("jobRiver_Rat") or !$riverrat or !$riverrat.working)>>
/* restore clothing removed during an event */
<<run $pc.fix_clothing()>>
<</if>>
<<set $prevtags to tags()>>
/* track location so various things can look it up easily, even if we move to a passage that isn't tagged with a location */
<<if tags().includes("location")>>
<<closedialog>>
<<set $lastlocpassage to passage()>>
<<set $lastloctags to tags()>>
<<for _i to 0; _i lt tags().length; _i++>>
<<if tags()[_i] is "location">>
<<continue>>
<<elseif tags()[_i].indexOf("locblock") is 0>>
<<set $locationblock to tags()[_i].substring(8)>>
<<elseif tags()[_i].indexOf("loc") is 0>>
<<set $location to tags()[_i].substring(3)>>
<<if $exhibitionsneak and !$exhibitionsneak.visited.includes($location)>>
<<run $exhibitionsneak.visited.push($location)>>
<</if>>
<</if>>
<</for>>
<<set _timestamp to $gameday.toString() + $hour.toString() + $minute.toString()>>
<<if !tags().includes("nobodyhere") and (!$predeterminedpeopleatlocation or $lastpalcalc != _timestamp)>>
/* determine which NPCs are here */
/* everybody is here for a reason and NPCs for events will be picked from this list */
<<set $lastpalcalc to _timestamp>>
<<set $peopleatlocation to setup.people_at_location()>>
<</if>>
<<run setup.Business.learn_all_schedules_here()>>
<<unset $predeterminedpeopleatlocation>>
<<unset $fasttravelpath>>
<<unset $kinklinks>>
<<if !tags().includes("event")>>
<<unset $recentlyawarekinks>>
<<unset $recentlywarnedkinks>>
<</if>>
<</if>>
<<for _tag range tags()>>
<<if _tag.indexOf("roomtype") is 0>>
<<set $roomtype to _tag.substring(8)>>
<</if>>
<</for>>
<<script>>
$(document).one(":passagedisplay", function(event)
{
const tooltips = document.querySelectorAll('.tooltip .tooltiptext');
tooltips.forEach(tooltip => {
const adjustTooltipPosition = (trigger) => {
try
{
if (tooltip.dataset.shifted && trigger != "resize") return;
const tooltipRect = tooltip.getBoundingClientRect();
const parentElement = tooltip.closest('.passage');
const parentRect = parentElement.getBoundingClientRect();
if (tooltipRect.right > parentRect.right)
{
const overflow = tooltipRect.right - parentRect.right;
tooltip.style.left = `calc(50% - ${overflow}px)`;
tooltip.style.transform = 'translateX(-50%)';
tooltip.dataset.shifted = true;
}
else if (tooltipRect.left < parentRect.left)
{
const overflow = parentRect.left - tooltipRect.left;
tooltip.style.left = `calc(50% + ${overflow}px)`;
tooltip.style.transform = 'translateX(-50%)';
tooltip.dataset.shifted = true;
}
else
{
tooltip.style.left = '50%';
tooltip.style.transform = 'translateX(-50%)';
}
}
catch (error)
{
}
};
adjustTooltipPosition();
try
{
parent.addEventListener('mouseover', (event) => adjustTooltipPosition(event));
parent.addEventListener('touchstart', (event) => adjustTooltipPosition(event));
parent.addEventListener('focus', (event) => adjustTooltipPosition(event));
parent.addEventListener('click', (event) => adjustTooltipPosition(event));
window.addEventListener('resize', (event) => adjustTooltipPosition(event));
}
catch (error)
{
}
});
});
<</script>><div id="title-container" style="display: inline-block;"><img src="res/img/CourseOfTemptation.png" style="width: 45%; overflow: auto; overflow-clip-margin:"><<version>></div><<set _finishedchargen to "pc" in State.variables and !tags().includes("chargen") and !$preencountertags.includes("chargen")>>
<<if _finishedchargen>>
/* MINI UI BAR */
<div class="ui-bar-mini">
<div class="sideways">
<img src="res/img/ico_clock.png" class="icon rotate"> <<clock>>
<img src="res/img/ico_school.png" class="icon rotate"> <span style="font-size: 80%"><<set _holiday to setup.School.current_holiday()>><<if _holiday isnot null>><span class="notice"><<capall _holiday>>!</span> <</if>><<= setup.class_time_status_mini()>></span>
<span class="">Rs</span>
<div id="Restdot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Rest"], 1000, "Restdot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">Rx</span>
<div id="Relaxationdot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Relaxation"], 1000, "Relaxationdot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">At</span>
<div id="Attentiondot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Attention"], 1000, "Attentiondot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">Bl</span>
<div id="Bladderdot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Bladder"], 1000, "Bladderdot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">Fd</span>
<div id="Fooddot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Food"], 1000, "Fooddot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">Hy</span>
<div id="Hygienedot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Hygiene"], 1000, "Hygienedot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">Cm</span>
<div id="Composuredot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Composure"], 1000, "Composuredot");})<</script>>
<span style="font-size: 50%;"> </span>
<span class="">Rl</span>
<div id="Releasedot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Release"], 1000, "Releasedot");})<</script>>
<<if V.pcneeds["Drunkenness"] gt 0>>
<span style="font-size: 50%;"> </span>
<span class="">Dr</span>
<div id="Drunkennessdot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Drunkenness"], 1000, "Drunkennessdot");})<</script>>
<</if>>
<<if V.pcneeds["Arousal"] gt 0>>
<span style="font-size: 50%;"> </span>
<span class="">Ar</span>
<div id="Arousaldot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Arousal"], 1000, "Arousaldot");})<</script>>
<</if>>
<<if V.pcneeds["Satisfaction"] gt 0>>
<span style="font-size: 50%;"> </span>
<span class="">Sf</span>
<div id="Satisfactiondot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Satisfaction"], 1000, "Satisfactiondot");})<</script>>
<</if>>
<<if V.pcneeds["Pain"] gt 0>>
<span style="font-size: 50%;"> </span>
<span class="">Pn</span>
<div id="Paindot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Pain"], 1000, "Paindot");})<</script>>
<</if>>
<<if V.pcneeds["Humiliation"] gt 0>>
<span style="font-size: 50%;"> </span>
<span class="">Hm</span>
<div id="Humiliationdot" class="status-dot"></div><<script>>$(document).one(':passageend', function (ev) {StatusDot(V.pcneeds["Humiliation"], 1000, "Humiliationdot");})<</script>>
<</if>>
</div>
</div>
/* STANDARD UI BAR */
<div class="locimgcontainer">
<div class="todimg">
<<set _todimg to "res/img/tod_" + setup.Time.timeofday() + ".png">>
<img @src="_todimg">
</div>
<div class="locimg">
<<if $inclass>>
<<set _cinfo to setup.School.courses[$inclass] || setup.School.sports[$inclass]>>
<<if "img" in _cinfo>>
<<set _nodeimg to "res/img/" + _cinfo.img + ".png">>
<img @src="_nodeimg">
<</if>>
<<elseif $sport>>
<<set _sportinfo to setup.School.sports[$sport.type]>>
<<set _nodeimg to "res/img/" + _sportinfo.img + ".png">>
<img @src="_nodeimg">
<<elseif $locationblock in setup.Maps>>
<<set _map to setup.Maps[$locationblock]>>
<<if $location in _map.nodes>>
<<set _node to _map.nodes[$location]>>
<<if "img" in _node>>
<<set _nodeimg to "res/img/" + _node.img + ".png">>
<img @src="_nodeimg">
<</if>>
<</if>>
<</if>>
<<unset _map>>
<<unset _node>>
<<unset _nodeimg>>
</div>
</div>
<div class="essential-stats">
<<set _money to V.pcmoney>>
<<if typeof _money is "string">><<run setup.fix_corrupted_money()>><</if>>
<img src="res/img/ico_money.png" class="icon"> $<<= $pcmoney.toLocaleString()>>
<<if $prevmoney and !tags().includes("chargen")>>
<<if $pcmoney lt $prevmoney>>
<<highlight "small bad">>(-<<= $prevmoney - $pcmoney>>)<</highlight>>
<<set _moneychange to true>>
<<elseif $pcmoney gt $prevmoney>>
<<highlight "small cash">>(+<<= $pcmoney - $prevmoney>>)<</highlight>>
<<set _moneychange to true>>
<</if>>
<</if>>
<<set $prevmoney to $pcmoney>>
<<if !_moneychange>> <</if>>
<img src="res/img/ico_clock.png" class="icon"> <<clock>><br>
<img src="res/img/ico_calendar.png" class="icon"> <<= setup.Time.date()>><br>
<p style="margin:0.65em;"></p>
<div class="essential-stats-class-status">
<img src="res/img/ico_school.png" class="icon">
<<set _holiday to setup.School.current_holiday()>>
<<if _holiday isnot null>>
<span class="notice"><<capall _holiday>>!</span>
<</if>>
<<set _classstatus to setup.class_time_status()>>
<span>
<<= _classstatus.message>>
<<if setup.can_use_shortcut(_classstatus.shortcut)>>
<<set _shortcutpath to setup.Maps.pathfind($locationblock, $location, _classstatus.shortcut)>>
<<if _shortcutpath>>
<<set _onodeinfo to setup.Maps[$locationblock].nodes[_classstatus.shortcut]>>
<<if def _shortcutpath and def _onodeinfo>>
<<set _pathlength to _shortcutpath.length - 1>>
<<if "time" in _onodeinfo>><<set _onodetime to _onodeinfo.time>><<else>><<set _onodetime to setup.travel_time(_onodepassage)>><</if>>
<<set _time to _onodetime * _pathlength>>
<span class="class-shortcut">
(<<link "Go there" _classstatus.shortcut>>
<<advtime _time>>
<<set $fasttravelpath to _shortcutpath>>
<<set $nextbaseeventchance to setup.Events.base_event_chance() * _pathlength>>
<</link>>)
</span>
<</if>>
<</if>>
<</if>>
</span>
</div>
</div>
<div class="uibar"></div>
<div class="clothing-status">
<<set _clothing to $pc.list_clothing($pc)>>
<<if _clothing.length gte 120 || ($pc.cum_covering and Object.keys($pc.cum_covering).length gt 0) || ($pc.nipples_hard() and $pc.nipple_erectness_visible())>>
<<set _clothing to $pc.list_clothing($pc, true)>>
<</if>>
You are wearing <<= setup.highlight_keywords(_clothing)>>.
<<if $pc.has_part("penis") && !$pc.is_part_covered("penis")>>
<span class="sexy">
<<if $pc.has_part("breasts") && !$pc.is_part_covered("breasts")>>
Your <<breasts $pc>> and <<cock $pc>> are exposed.
<<else>>
Your <<cock $pc>> is exposed.
<</if>>
</span>
<<elseif $pc.has_part("vagina") && !$pc.is_part_covered("vagina")>>
<span class="sexy">
<<if $pc.has_part("breasts") && !$pc.is_part_covered("breasts")>>
Your <<breasts $pc>> and <<pussy $pc>> are exposed.
<<else>>
Your <<pussy $pc>> is exposed.
<</if>>
</span>
<<elseif $pc.has_part("breasts") && !$pc.is_part_covered("breasts")>>
<span class="sexy">Your <<breasts $pc>> are exposed.</span>
<</if>>
<<if $pc.is_part_covered("nipples") && $pc.is_part_visible("nipples")>>
<span class="sexy">Your nipples are visible through sheer clothing.</span>
<<elseif $pc.nipples_hard() and $pc.has_part("breasts") and $pc.is_part_covered("breasts") && $pc.nipple_erectness_visible()>>
<<if !$pc.wearing_bra()>>
<span class="sexy">You aren't wearing a bra and your nipples are visibly hard.</span>
<<else>>
<span class="sexy">Your nipples are visibly hard.</span>
<</if>>
<<elseif ($pc.is_part_covered("breasts") and $pc.lacking_bra())>>
<span class="sexy">You aren't wearing a bra.</span>
<</if>>
<<if $pc.penis_hard() and $pc.is_part_covered("penis") and $pc.bulge_visible()>>
<span class="sexy">Your cock is visibly hard.</span>
<</if>>
<<if $pc.wearing_pants() and !$pc.wearing_underwear()>>
<span class="sexy">You aren't wearing underwear<<if $pc.under_access() and $pc.is_upskirt_exhibitionist()>> under your <<shortpants $pc>><</if>>.</span>
<</if>>
<<if $pc.cum_covering>>
<span class="sexy"><<= $pc.show_cum_covering()>></span>
<</if>>
<<if !$pc.has_storage_sized("phone") and !($pc.in_encounter() or tags().includes("preencounter"))>>
<span class="ungood">You don't have a bag or pockets for storing your phone.</span>
<</if>>
<<unset _clothing>>
<<set _toys to []>>
<<for _toy range setup.equipped_wearable_toys()>>
<<set _toyname to setup.sextoys[_toy.item].shortname>>
<<if _toy.worn>>
<<set _toyname += " on your " + _toy.worn>>
<</if>>
<<run _toys.push(_toyname)>>
<</for>>
<<if _toys.length gt 0>>
<<highlight sexy>>You're using your <<and _toys>>.<</highlight>>
<</if>>
<<unset _toys>>
</div>
<div class="uibar"></div>
<<if !$prevneeds>>
<<set $prevneeds to Object.assign({}, $pcneeds)>>
<</if>>
<div id="status-meters">
<div id="status-meters-left" class="status-meter-column">
<div class="status-meter-labeled">
<span class="status-meter-label fullwidth">
Rest
<<set _needdiff to $pcneeds["Rest"] - $prevneeds["Rest"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Rest"], 1000, "hzRestbar", true);>>
</div>
<div class="status-meter-labeled">
<span class="status-meter-label">
Attention
<<set _needdiff to $pcneeds["Attention"] - $prevneeds["Attention"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Attention"], 1000, "hzAttentionbar", true);>>
</div>
<div class="status-meter-labeled">
<span class="status-meter-label">
Food
<<set _needdiff to $pcneeds["Food"] - $prevneeds["Food"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Food"], 1000, "hzFoodbar", true);>>
</div>
<div class="status-meter-labeled">
<span class="status-meter-label">
Composure
<<set _needdiff to $pcneeds["Composure"] - $prevneeds["Composure"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Composure"], 1000, "hzComposurebar", true);>>
</div>
</div>
<div id="status-meters-right" class="status-meter-column">
<div class="status-meter-labeled">
<span class="status-meter-label">
Relaxation
<<set _needdiff to $pcneeds["Relaxation"] - $prevneeds["Relaxation"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Relaxation"], 1000, "hzRelaxationbar", true);>>
</div>
<div class="status-meter-labeled">
<span class="status-meter-label">
Bladder
<<set _needdiff to $pcneeds["Bladder"] - $prevneeds["Bladder"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Bladder"], 1000, "hzBladderbar", true);>>
</div>
<div class="status-meter-labeled">
<span class="status-meter-label">
Hygiene
<<set _needdiff to $pcneeds["Hygiene"] - $prevneeds["Hygiene"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Hygiene"], 1000, "hzHygienebar", true);>>
</div>
<div class="status-meter-labeled">
<span class="status-meter-label">
Release
<<set _needdiff to $pcneeds["Release"] - $prevneeds["Release"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Release"], 1000, "hzReleasebar", true);>>
</div>
</div>
</div>
<</if>>
<<set _footerclass to "storymenu-footer">>
<<if "pc" in State.variables && (!$preencountertags.includes("chargen") || $preencountertags.includes("prologuesex"))>>
<<if !$prevneeds>>
<<set $prevneeds to Object.assign({}, $pcneeds)>>
<</if>>
<<script>>if ("encounter" in State.variables) State.variables.encounter.sync_pc_fleeting_stats();<</script>>
<div id="status-meters-bottom" class="status-meter-column">
<<if V.pcneeds["Drunkenness"] gt 0>>
<div class="status-meter-labeled">
<span class="status-meter-label">
Intoxication
<<set _needdiff to $pcneeds["Drunkenness"] - $prevneeds["Drunkenness"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Drunkenness"], 1000, "hzDrunkennessbar", true);>>
</div>
<</if>>
<<if V.pcneeds["Arousal"] gt 0>>
<div class="status-meter-labeled">
<span class="status-meter-label">
Arousal
<<set _needdiff to $pcneeds["Arousal"] - $prevneeds["Arousal"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Arousal"], 1000, "hzArousalbar", true);>>
</div>
<</if>>
<<if V.pcneeds["Satisfaction"] gt 0>>
<div class="status-meter-labeled">
<span class="status-meter-label">
Satisfaction
<<set _needdiff to $pcneeds["Satisfaction"] - $prevneeds["Satisfaction"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Satisfaction"], 1000, "hzSatisfactionbar", true);>>
</div>
<</if>>
<<if V.pcneeds["Pain"] gt 0>>
<div class="status-meter-labeled">
<span class="status-meter-label">
Pain
<<set _needdiff to $pcneeds["Pain"] - $prevneeds["Pain"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Pain"], 1000, "hzPainbar", true)>>
</div>
<</if>>
<<if V.pcneeds["Humiliation"] gt 0>>
<div class="status-meter-labeled">
<span class="status-meter-label">
Humiliation
<<set _needdiff to $pcneeds["Humiliation"] - $prevneeds["Humiliation"]>>
<<if Math.abs(_needdiff) gte 5>><span class="right-justified"><<dalterneed Rest _needdiff false true>></span><</if>>
</span>
<<= Meter(V.pcneeds["Humiliation"], 1000, "hzHumiliationbar", true)>>
</div>
<</if>>
</div>
<<else>>
<<set _footerclass += " storymenu-footer-ontitle">>
<</if>>
<<set $prevneeds to Object.assign({}, $pcneeds)>>
<div @class=_footerclass>
/* MENU */
<div class="storymenu-button-container">
<<if _finishedchargen>>
<div class="storymenu-button-block">
<div class="two-column-container">
<div class="two-column">
<<button "Inventory">>
<<script>>
Dialog.setup("Inventory", "inventory");
Dialog.wiki(Story.get("Inventory").processText());
Dialog.open();
<</script>>
<</button>>
</div>
<div class="two-column">
<<if setup.phone_available() and $pc.has_phone()>>
<<button "Phone">>
<<phoneinit>>
<<unset $attemptednavigation>>
<<run setup.phone.open("PhoneMain")>>
<</button>>
<<else>>
<button id="wait-button" class="link-image link-internal macro-button disabled" disabled="" aria-disabled="true">Phone</button>
<</if>>
</div>
</div>
<div class="two-column-container">
<div class="two-column">
<<if (setup.passage_safe() or tags().includes("changeclothes")) and !V.exhibitionsneak>>
<button id="adjustclothes-button" class="link-image link-internal macro-button" type="button" role="button" tabindex="0" onclick="SugarCube.setup.open_dialog('ChangeClothingConfig', 'Current Outfit', 'ChangeClothingConfig')">Outfit</button>
<<else>>
<button id="adjustclothes-button" class="link-image link-internal macro-button disabled" disabled="" aria-disabled="true">Outfit</button>
<</if>>
</div>
<div class="two-column">
<<if setup.wait_available()>>
<button id="wait-button" class="link-image link-internal macro-button" type="button" role="button" tabindex="0" onclick="SugarCube.setup.do_wait()">Wait (0:20)</button>
<<else>>
<button id="wait-button" class="link-image link-internal macro-button disabled" disabled="" aria-disabled="true">Wait (0:20)</button>
<</if>>
</div>
</div>
<div class="fullwidth-buttons">
<<button "Character">>
<<if !$chardialogtab>><<set $chardialogtab to "Character">><</if>>
<<script>>
/* this is functionally identical to Dialog.setup, Dialog.wiki, Dialog.open, but
also allows the dialog to install a "dialogCloseFn" internally. */
setup.open_dialog(V.chardialogtab, "Character", V.chardialogtab.toLowerCase());
<</script>>
<</button>>
</div>
<div class="two-column-container">
<div class="two-column">
<<if setup.passage_safe()>>
<<set _people_string = "People ("+$peopleatlocation.length+")">>
<<else>>
<<set _people_string = "People">>
<</if>>
<<button _people_string>>
<<set $peopletab to "here">>
<<set $peoplepage to 0>>
<<script>>
Dialog.setup("People", "social");
Dialog.wiki(Story.get("Social").processText());
Dialog.open(
null,
function()
{
$("#view-people-list").remove();
}
);
<</script>>
<</button>>
</div>
<<if setup.School.has_homework()>>
<div class="two-column has-emoji">
<<button "<<highlight ungood>>❗<</highlight>> College">>
<<script>>
Dialog.setup("College Schedule", "school");
Dialog.wiki(Story.get("School").processText());
Dialog.open();
<</script>>
<</button>>
</div>
<<else>>
<div class="two-column">
<<button "College">>
<<script>>
Dialog.setup("College Schedule", "school");
Dialog.wiki(Story.get("School").processText());
Dialog.open();
<</script>>
<</button>>
</div>
<</if>>
</div>
</div>
<</if>>
<div class="storymenu-button-block">
<<if _finishedchargen>>
<div class="two-column-container">
<div class="two-column">
<<if $firsttime.tutorial>>
<<button "Hints">>
<<script>>
Dialog.setup("Story Hints", "tutorial");
Dialog.wiki(Story.get("StoryHints").processText());
Dialog.open();
<</script>>
<</button>>
<<else>>
<span class="glow">
<<button "Hints">>
<<script>>
Dialog.setup("Hints", "tutorial");
Dialog.wiki(Story.get("StoryHints").processText());
Dialog.open();
<</script>>
<</button>>
</span>
<</if>>
</div>
<div class="two-column">
<<button "Maps">>
<<if $locationblock in setup.Maps and setup.Maps[$locationblock].defaultmaptab>>
<<set $maptab to setup.Maps[$locationblock].defaultmaptab>>
<</if>>
<<script>>
Dialog.setup("Maps", "maps");
Dialog.wiki(Story.get("Maps").processText());
Dialog.open();
<</script>>
<</button>>
</div>
</div>
<</if>>
<div class="two-column-container">
<div class="two-column">
<<button "Options">>
<<script>>
Dialog.setup("Content Options", "ContentOptions");
Dialog.wiki(Story.get("ContentOptions").processText());
Dialog.open();
<</script>>
<</button>>
</div>
<div class="two-column" id="support">
<button id="support-button" class="link-image link-internal macro-button" type="button" role="button" tabindex="0"><img src="res/img/PATREON_SYMBOL_1_WHITE_RGB.png"> Support</button>
<<script>>
$(document).ready(function() {
$("#support-button").click(function() {
Dialog.setup("Support the Game", "support");
Dialog.wiki(Story.get("Support").processText());
Dialog.open();
});
});
<</script>>
</div>
</div>
<div class="two-column-container">
<div class="two-column">
<<button "Help">>
<<script>>
Dialog.setup("Help", "help");
Dialog.wiki(Story.get("HelpBasic").processText());
Dialog.open();
<</script>>
<</button>>
</div>
<div class="two-column">
<<button "Save">>
<<script>>
Dialog.setup("Save", "saves");
if (idb.active) idb.saveList();
else Dialog.wiki(Story.get("SavesList").processText());
Dialog.open();
<</script>>
<</button>>
</div>
</div>
</div>
</div>
<div class="storymenu-debug-container">
<<debug>>
Debug View Enabled <label>
<<if V.debug_lock>>
<input type="checkbox" id="debug_locked_cb" onclick="T.mem_func(this.checked)" checked>
<<else>>
<input type="checkbox" id="debug_locked_cb" onclick="T.mem_func(this.checked)">
<</if>>
Lock</label>
<</debug>>
<<debug>>
<b><<= passage()>></b><br><<= "People: "+$peopleatlocation.length>><br>Tags: <<= tags()>>
<</debug>>
</div>
</div>
<<script>>
T.mem_func = function(value)
{
V.debug_lock = value;
memorize("debug_lock",value);
}
<</script>>Course of Temptation<<run console.log("Init: checking browser version for idb")>>
<<if Browser.isMobile.iOS>>
<<set idb.active to false>>
<</if>>
<<run console.log("Init: init prng")>>
<<run State.prng.init()>>
<<run console.log("Init: set basic data")>>
<<set $mapsize to [600, 300]>>
<<set $preencountertags to []>>
/* initialize date/time */
<<set $day to 1>>
<<set $month to 3>>
<<set $hour to 8>>
<<set $minute to 0>>
<<set $year to 2019>>
<<set $gameday to 1>>
<<set $gameyear to 1>>
/* initialize stuff about the PC (much of this can be almost immediately changed in chargen) */
<<run console.log("Init: set default character data")>>
<<set $pcname to "Addison Lee">>
<<set $pcnickname to "Addie">>
<<set $pcgender to "female">>
<<set $pcbirthday to setup.random_birthday()>>
<<set $pcage to setup.minimum_pc_starting_age()>>
<<set $pcmajor to null>>
<<set $pccourses to []>>
<<set $jobs to []>>
<<set $pcmoney to 500>>
/* the default Addison Lee */
<<set $pcspecies to "human">>
<<set $pceyecolor to "blue">>
<<set $pchaircolor to "blonde">>
<<set $pchairstyle to "neatly combed">>
<<set $pchairlength to "shoulder-length">>
<<set $pcskincolor to "fair">>
<<set $pcinclinations to []>>
<<set $inclinationsunlocked to {}>>
<<set $pcskills to {"Charisma": 100, "Willpower": 100, "Exhibitionism": 0, "Voyeurism": 0, "Sexual Knowledge": 200, "Disinhibition": 100, "Dominance": 0, "Submission": 0, "Hand": 100, "Oral": 0, "Vaginal": 0, "Anal": 0, "Penetrative": 0}>>
<<set $pcstats to {"age": 18, "height": 500, "plumpness": 400, "muscle": 400, "breast size": 500, "penis size": 500, "ass size": 500}>>
<<set $pcneeds to {"Food": 1000, "Rest": 1000, "Relaxation": 1000, "Attention": 1000, "Bladder": 1000, "Hygiene": 1000, "Composure": 1000, "Release": 1000, "Arousal": 0, "Satisfaction": 0, "Pain": 0, "Humiliation": 0, "Drunkenness": 0}>>
<<run console.log("Init: set additional game data")>>
<<set $pchorny to 0>>
<<set $sexmemory to {}>>
<<set $sexstats to {}>>
<<set $eventmemory to {}>>
<<set $peopleatlocation to []>>
<<set $prevtags to []>>
<<set $lastnpcref to "PC">>
<<set $firsttime to {}>>
<<set $homework to {}>>
<<set $studying to {}>>
<<set $exams to {}>>
<<set $gpa to {}>>
<<set $lastpaymentday to 0>>
<<set $fitness to {}>>
<<set $kinkcontent to setup.default_kinkcontent()>>
<<set $sextoys to []>>
<<set $removedpeople to []>>
<<set $lastsexday to 1>>
<<set $pcturnons to []>>
<<set $pcturnoffs to []>>
<<set $favoritepeople to []>>
/* difficulty options */
<<run console.log("Init: init options settings")>>
<<set $optskillgainmultiplier to 1>>
<<set $optdailyskillcap to true>>
<<set $optdebtpaymentmultiplier to 1>>
<<set $optneeddecaymultiplier to 1>>
<<set $opthairgrowthspeedmultiplier to 1>>
<<set $optextrabodyhair to false>>
<<set $optshowskillups to false>>
<<set $optshowemojis to true>>
<<set $optamericlock to true>>
<<set $optkinkwarnings to false>>
<<set $optkinkconfirm to false>>
<<set $optmeterhovertext to true>>
<<set $optmetertext to false>>
<<set $optdatesim to true>>
<<set $opttooltips to true>>
<<set $optriverratperfmult to 1>>
<<set $optriverratvibemult to 1>>
<<set $optuncharcomposuremult to 1>>
<<set $optencounterprogression to true>>
<<set $optfertility to 1>>
/* world data */
<<run console.log("Init: set world data")>>
<<set $uname to "Fitzcummings-Knueppel University">>
<<set $studentgenderdistribution to ["male", 47, "female", 47, "transgender male", 2, "transgender female", 2, "nonbinary amab", 1, "nonbinary afab", 1]>>
<<set $towniegenderdistribution to ["male", 48, "female", 48, "transgender male", 1, "transgender female", 1, "nonbinary amab", 1, "nonbinary afab", 1]>>
<<set $facultygenderdistribution to ["male", 50, "female", 50]>>
<<set $outsidergenderdistribution to ["male", 50, "female", 50]>>
<<set $gaybonus to 0>><<set $bibonus to 0>>
<<set $breastsizebonus to 0>><<set $penissizebonus to 0>><<set $buttsizebonus to 0>>
<<set $plumpnessbonus to 0>><<set $muscularitybonus to 0>>
<<set $heightbonus to 0>>
<<set $polybonus to 1>>
<<set $peoplereplacements to []>>
<<set $seed to "ochre">>
<<run console.log("Init: init worldgen settings")>>
<<if recall("worldgen", null) == null>>
<<set _worldgen to {
seed: $seed,
studentgenderbalance: 0,
studentgenderdistribution: $studentgenderdistribution,
towniegenderdistribution: $towniegenderdistribution,
facultygenderdistribution: $facultygenderdistribution,
outsidergenderdistribution: $outsidergenderdistribution,
gaybonus: $gaybonus,
bibonus: $bibonus,
breastsizebonus: $breastsizebonus,
penissizebonus: $penissizebonus,
buttsizebonus: $buttsizebonus,
plumpnessbonus: $plumpnessbonus,
muscularitybonus: $muscularitybonus,
heightbonus: $heightbonus,
polybonus: $polybonus,
}>>
<<run memorize("worldgen", _worldgen)>>
<</if>>
<<run console.log("Init: init/recall color options")>>
<<set $coloroptions to {
female: "#e968ee",
male: "#604eff",
nonbinary: "#35f3ba",
femaleemlink: "#edd8ee",
maleemlink: "#bdc1f0",
nonbinaryemlink: "#d2faee",
}>>
<<if recall("coloroptions", null) == null>>
<<run memorize("coloroptions", $coloroptions)>>
<<else>>
<<set $coloroptions to recall("coloroptions", null)>>
<</if>>
<<set $neversaved to true>>
<<set $saveoptions to {autosave: true, onSleep: true}>>
/* config */
<<run console.log("Init: config saves")>>
<<run Config.saves.autosave = false>>
/* this should agree with the number update_vars.js ends up on */
/* but also, update_vars should be maintained in such a manner that it gracefully handles 'updating' a brand new save */
<<set $varsversion to 34>><<set Config.saves.version to "v0.6.3d">>
<<set $versions to [Config.saves.version]>>
<<widget "version">><<highlight version>><<print Config.saves.version>><</highlight>><</widget>><<streamscreen>>
You start your stream and introduce yourself.
<<addstreamchat "hello" "new">>
<<addstreamchat "hello" "new">>
<<addstreamchat "hello" "new">>
<<addstreamchat "chat" "new">>
<br><br>
<<link "Stream more" StreamTest2>>
<</link>><br>
<<link "Stop" YourDorm>>
<<endstream>>
<</link>>
<</streamscreen>><<streamscreen>>
You carry on streaming.
<<addstreamchat "chat">>
<<addstreamchat "chat">>
<<addstreamchat "chat">>
<br><br>
<<link "Stream more" StreamTest2>>
<</link>><br>
<<link "Stop" YourDorm>>
<<endstream>>
<</link>>
<</streamscreen>><<if $studyheader>>
<<= $studyheader>><br><br>
<<unset $studyheader>>
<</if>>
<<set _nonclassstudylocs to ["YourDorm", "SmithLibrary", "LibraryMezzanine"]>>
<<set _inclass to !_nonclassstudylocs.includes($location) and !$lastloctags.includes("homebase") and setup.School.current_class()>>
<<if _inclass>><<set $studyspan to setup.Time.minutes_until($hour + 1, 0)>><<else>><<set $studyspan to 15>><</if>>
<<if !_inclass or $hour < setup.School.current_class().hour>>
<<if !$firsttime.studying>>
<div class="rounded-border">
College isn't easy!<br>
<br>
Most classes will assign you homework, which you need to get done before the next time you have that class. Homework will affect your grade!<br>
<br>
There's also studying, which involves hitting the textbooks, reviewing your notes, and so on to improve your understanding of the material covered. This is pretty easy at the start, but perfecting your understanding is difficult.<br>
<br>
Having a good understanding of the material will, of course, improve your test scores, as well as your homework performance.<br>
<br>
You <b>don't have to</b> and aren't expected to keep your Understanding bars completely full. Trying too hard will stress you out! Just do the best you can!<br>
<br>
You can save yourself a lot of study time by simply paying attention in class!<br>
<br>
An exam will mark the end of the current unit and reset your understanding as the class moves on to new material.<br>
</div>
<br>
<</if>>
<<set _relax to 50.0 * ($studyspan / 30.0)>>
<<set _exam to setup.School.is_exam_week()>>
<<if _exam isnot null and setup.Time.weekday() isnot "Saturday">>
This week is <span class="notice">_exam</span> week! Study up before your final session of each class this week!
<br><br>
<</if>>
<<set _comp to setup.computer()>>
<<set _textbooks to ($lastloctags.includes("homebase") or $pc.has_textbooks())>>
<<if !_textbooks>>
Not having your textbooks with you will make this more difficult.
<br><br>
<</if>>
<<if _comp>>
Your _comp makes studying a little bit easier.
<br><br>
<</if>>
<<set _contlink to "Study">>
<<if !_inclass and State.random() lte setup.Events.base_event_chance() * 2>>
<<set _eventpassage to setup.Events.passage(["study", $location])>>
<<if _eventpassage isnot null>><<set _contlink to _eventpassage>><</if>>
<</if>>
<<set _found to false>>
<div class="study-menus">
<<for _course range $pccourses>>
<<set _i to $pccourses.indexOf(_course)>>
<<set _label to setup.remove_spaces(_course)>>
<div class="study-menu-container">
<div class="study-menu" style="min-height: 19em;">
<div class="study-menu-row-1-col-1" style="min-height: 6em;"><b>_course</b></div>
<div class="study-menu-row-1-col-2" style="font-size: 70%;">
<<set _days to setup.School.blocks[setup.School.courses[_course].schedule]>>
<<for _i to 0; _i lt _days.length; _i++>>
<<= _days[_i].day>>s at <<= setup.Time.clock(_days[_i].hour, 0)>><br>
<</for>>
</div>
<div class="study-menu-row-2-col-1" style="min-height: 3em;">
<<set _next to setup.School.show_next_class_specific(_course)>>
Next class:
<<if _next.indexOf("Today") == 0>>
<span class="ungood">_next</span>
<<elseif _next.indexOf("Tomorrow") == 0>>
<span class="unbad">_next</span>
<<else>>
_next
<</if>>
</div>
<<if (_course in $homework && $homework[_course].assigned > 0) or (_course in $studying && $studying[_course].covered > 0)>>
<div class="study-menu-row-2-col-1" style="min-height: 6em;">
<<if (_course in $studying && $studying[_course].covered > 0)>>
<span class="status-meter-label" style="margin-bottom: 0.1em;">Understanding</span>
<<set _perc to $studying[_course].studied/$studying[_course].covered>>
/*
<span style="display: inline-block; text-align: right;">
<<set _rating to $pc.skillcheck_descriptor($studying[_course].studied/$studying[_course].covered)>>
<<= '<span class="check' + _rating + '">' + setup.School.rate_understanding(_course) + '</span>'>>
</span><br>
*/
<<= Meter(_perc*1000, 1000, "hzStudybar"+_label+"st", true)>>
<</if>>
<<if (_course in $homework && $homework[_course].assigned > 0)>>
<span class="status-meter-label" style="margin-bottom: 0.1em;">Homework</span>
<<set _perc to $homework[_course].completed/$homework[_course].assigned>>
/*
<<set _rating to $pc.skillcheck_descriptor(_perc)>>
<<= '<span class="check' + _rating + '">' + Math.floor(( _perc) * 100) + '%</span>'>>
*/
<<= Meter(_perc*1000, 1000, "hzStudybar"+_label+"hw", true)>>
<</if>>
</div>
<</if>>
</div>
<<if _course in $studying and $studying[_course].studied lt $studying[_course].covered>>
<<set _found to true>>
<<set _difficulty to setup.School.study_difficulty(_course)>>
<<if !_textbooks>>
<<set _difficulty to Math.min(10, _difficulty + 2)>>
<</if>>
<<if _comp>>
<<set _difficulty to Math.max(0, _difficulty - 1)>>
<</if>>
<<set _linkname to "Study " + _course>>
<<set _time to Math.min($studying[_course].covered - $studying[_course].studied, $studyspan)>>
<<capture _difficulty,_course,_time>>
<<link _linkname _contlink>>
<<raiseskill Studying>>
<<advtime _time>>
<<if !_inclass>><<set $peopleatlocation to setup.people_at_location()>><</if>>
<<alterneed Relaxation -20>>
<<if $pc.skillcheck("Studying", _difficulty)>>
<<run setup.School.do_study(_course, _time)>>
<<set $studyheader to "You've increased your understanding of " + _course + "!">>
<<else>>
<<set _mult to setup.randomrelfreq([0.4, 30, 0.25, 50, 0.1, 20])>>
<<set _moddedtime to Math.round(_time * _mult)>>
<<if _moddedtime lt 3>><<set _moddedtime to 3>><</if>>
<<run setup.School.do_study(_course, _moddedtime)>>
<<set $studyheader to "You find the material difficult and make only slow progress.">>
<</if>>
<<set $firsttime.studying to true>>
<</link>>
<<dtime _time>><br><<skillcheck Studying _difficulty>> <<dalterneed Relaxation -20>><br>
<</capture>>
<</if>>
<<if _course in $homework and $homework[_course].completed lt $homework[_course].assigned>>
<<set _time to Math.min($homework[_course].assigned - $homework[_course].completed, $studyspan)>>
<<set _found to true>>
<<set _foundhw to true>>
<<set _linkname to "Do " + _course + " homework">>
<<capture _difficulty,_course,_time>>
<<link _linkname _contlink>>
<<advtime _time>>
<<if !_inclass>><<set $peopleatlocation to setup.people_at_location()>><</if>>
<<alterneed Relaxation -20>>
<<alterneed Rest -20>>
<<run setup.School.do_homework(_course, _time)>>
<<set $studyheader to "You do a bunch of " + _course + " homework.">>
<<set $firsttime.studying to true>>
<</link>>
<<dtime _time>><br><<dalterneed Relaxation -20>> <<dalterneed Rest -20>><br>
<</capture>>
<</if>>
</div>
<</for>>
</div>
<<if !_found>>
There's nothing you need to study right now. Whew!<br><br>
<</if>>
<</if>>
<br>
<<if _inclass>>
<<if setup.School.current_class().type is "sports">>
<<if $hour >= setup.School.current_class().hour>>
<<link "Time for practice!" SportsPractice>>
<<run setup.School.attend_practice()>>
<</link>>
<<else>>
<<link "Forget it, let's chat with people" SportsPracticeSocialize>><</link>> <<dtime $studyspan>> <<dalterneed Attention 50>>
<br>
<<link "On second thought, just goof off" SportsPracticeGoof>><</link>> <<dtime $studyspan>> <<dalterneed Relaxation 50>>
<</if>>
<<else>>
<<if $hour >= setup.School.current_class().hour>>
<<link "Time for class!" Classroom>>
<<run setup.School.attend_class()>>
<</link>>
<<else>>
<<link "Forget it, let's chat with people" ClassroomSocialize>><</link>> <<dtime $studyspan>> <<dalterneed Attention 50>>
<br>
<<link "On second thought, just goof off" ClassroomGoof>><</link>> <<dtime $studyspan>> <<dalterneed Relaxation 50>>
<</if>>
<</if>>
<<else>>
<<continuelink>>
<</if>><<nobr>>
<<script>>
setup.build_encounter({people: ["PC", "Clifford Rentfrow"], endpassage: "TestEncounter4"});
<</script>>
<<print setup.capitalize(setup.a_or_an($partner1.anonymous_name)) + " " + $partner1.anonymous_name>> approaches. "Are you ?pcname?"
<</nobr>>
[[Smile|TestEncounter3]]
[[Ignore|TestEncounter2]]You ignore him.
He arches an eyebrow, frowns, then moves on his way.
[[Restart|Restart]]You smile invitingly. "Yes, that's me."
He smiles back. "Wonderful to meet you, <<print $pc.firstname()>>. I'm <<print $partner1.firstname()>>."
He hurls his drink to the floor, smashing the glass, and moves his hands to his belt. "Let's get started!"
[[Next|EncounterRound]]You make your way back home.A thing is about to happen!
<<link "Let it happen" TestKinkWarningsBad>><</link>>
<<link "Avoid it!" TestKinkWarningsAvoid>><</link>>You avoid it successfully.
<<continuelink>>It's happening!!
<<link "Next" TestKinkWarningsBad2>><</link>>It's still happening!!!
But then it's over.
<<continuelink>><<link "Advance a minute" "TimeTest">><<run setup.Time.advance_time(1)>><</link>>
<<link "Advance 5 minutes" "TimeTest">><<run setup.Time.advance_time(5)>><</link>>
<<link "Advance 20 minutes" "TimeTest">><<run setup.Time.advance_time(20)>><</link>>
<<link "Advance 1 hour" "TimeTest">><<run setup.Time.advance_time(60)>><</link>>
<<link "Advance 6 hours" "TimeTest">><<run setup.Time.advance_time(60*6)>><</link>>
<<link "Advance 1 day" "TimeTest">><<run setup.Time.advance_time(60*24)>><</link>>
<<link "Advance 3 days" "TimeTest">><<run setup.Time.advance_time(60*24*3)>><</link>>
<<link "Advance 1 week" "TimeTest">><<run setup.Time.advance_time(60*24*7)>><</link>>
<<link "Advance 1 month" "TimeTest">><<run setup.Time.advance_time(60*24*28)>><</link>>
<<link "Advance 1 year" "TimeTest">><<run setup.Time.advance_time(60*24*28*7)>><</link>>
<<link "Add 100 Arousal" "TimeTest">><<run setup.Needs.increase_need("Arousal", 100)>><</link>>
<<link "Add 100 Pain" "TimeTest">><<run setup.Needs.increase_need("Pain", 100)>><</link>>
<<link "Add 100 Humiliation" "TimeTest">><<run setup.Needs.increase_need("Humiliation", 100)>><</link>>
<<link "Add 100 Satisfaction" "TimeTest">><<run setup.Needs.increase_need("Satisfaction", 100)>><</link>>
<<link "Back">><<continuegoto>><</link>><<widget "handlependingoutfit">>
<<if $pendingoutfit>>
<<set _preoutfit to [...setup.pc().clothes]>>
<<if $pendingoutfit is "!Strip">>
<<run $pc.swap_all_clothing_to_closet()>>
You remove all of your clothing.<br>
<<else>>
<<set _notfound to $pc.wear_outfit($pendingoutfit)>>
You decide to change into your $pendingoutfit outfit.
<<if _notfound.length gt 0>>
<<highlight bad>>You couldn't find <<= setup.and(_notfound)>>.<</highlight>>
<<if $admirer and $admirer.stolenunderwear and _notfound.includes($admirer.stolenunderwear.name) and !$admirer.stolenunderwearreported>>
When the hell did you lose that?
<<set $admirer.stolenunderwearreported to true>>
<<elseif $stolenunderwear and _notfound.includes($stolenunderwear.item.name) and !$stolenunderwearreported>>
When the hell did you lose that?
<<set $stolenunderwearreported to true>>
<</if>>
<br>
<</if>>
<<for _worn range $pc.clothes>>
<<if _worn.properties && _worn.properties["stains"]>>
<<highlight bad>>You are wearing stained clothing.<</highlight>><br>
<<break>>
<</if>>
<</for>>
<</if>>
<<set _exhibreq to setup.base_exhibitionism_requirement()>>
<<if !$pc.skillleveled("Exhibitionism", _exhibreq) and !tags().includes("stripallowed")>>
<span class="bad">On second thought, you don't feel comfortable being that undressed here.</span> (Need <<skill Exhibitionism _exhibreq>>)
<<run $pc.wear_all_clothes(_preoutfit)>>
<<elseif passage() is "Sleep">>
<<if $sleepoutfit isnot $pendingoutfit>>
<<set $sleepoutfit to $pendingoutfit>>
This will be your <span class="notice">default sleep outfit</span> until you change into something else before bed.
<</if>>
<</if>>
<<set $lastpickedoutfit to $pendingoutfit>>
<<cleartempclothing>>
<<unset $pendingoutfit>><br>
<<maybechangingwitnessedbyadmirer>>
<</if>>
<</widget>>
<<widget "rollrandomoutfit">>
<div id="randomoutfitroller">
<<script>>
let attempts = 0;
while (attempts < 10)
{
attempts++;
let result = setup.roll_random_outfit({includebra: T.rorincludebra, includeunderwear: T.rorincludeunderwear, includebinder: T.rorincludebinder, includebag: T.rorincludebag});
if (result)
{
T.roroutfit = result;
break;
}
else
T.roroutfit = null;
}
<</script>>
<<if !_roroutfit>>
<<highlight bad>>No outfit could be created.<</highlight>>
<br><br>
<<link "Roll again">>
<<replace "#randomoutfitroller">><<rollrandomoutfit>><</replace>>
<</link>>
<<else>>
<<highlight>>Random outfit rolled!<</highlight>>
<br><br>
<<for _item range _roroutfit.clothes>>
<<= _item.name>>
<br>
<</for>>
<br>
<<link "Roll again">>
<<replace "#randomoutfitroller">><<rollrandomoutfit>><</replace>>
<</link>>
<br><br>
<<set _newoutfitname to _roroutfit.name>>
<<link "Save as" Wardrobe>><<set _newoutfitname to Util.escapeMarkup(_newoutfitname.trim())>><<if $pc.is_outfit_name_taken(_newoutfitname)>><<set $wearresult to "There is already an outfit with that name.">><<else>><<run $pc.save_outfit(_newoutfitname, _roroutfit.clothes)>><<set $wearresult to "Your outfit has been saved!">><</if>><</link>>
<<textbox "_newoutfitname" _newoutfitname>>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
<</if>>
</div>
<</widget>><<handlependingoutfit>>
<<if $wearresult>>
<<= $wearresult>><br>
<<unset $wearresult>>
<</if>>
<<set _passage to passage()>>
<span id="wearresult"></span><br>
<<if $pc.get_storage_location("laundryclothes").get_item_count() > 0>>
You were <<highlight>>doing laundry<</highlight>>. Your closet is pretty empty at the moment.
<br><br>
<</if>>
<<set _favoriteoutfits = $pc.get_favorite_outfits()>>
<<if $filterfavoriteoutfits>>
<<set _outfitslist to _favoriteoutfits>>
<<else>>
<<set _outfitslist to $outfits>>
<</if>>
<<if _outfitslist.length is 0>>
<<if $filterfavoriteoutfits>>
You have no favorite outfits.<br>
<<else>>
You have no outfits saved.<br>
<</if>>
<<else>>
<<if State.random() lte setup.Events.base_event_chance()>>
<<set _passage to (setup.Events.passage(["wardrobe interrupt"]) || _passage)>>
<</if>>
<<if $pc.clothes.length gt 0>>
<<set _link to {text: "Strip", link: _passage, noemoji: true}>>
<<link _link>><<set $pendingoutfit to "!Strip">><</link>><br>
<</if>>
<<set _completefav to $pc.fully_dressed_favorite_outfits()>>
<<if _completefav.length gt 1>>
<<set _link to {text: "Change into random favorite everyday outfit", link: _passage, noemoji: true}>>
<<link _link>><<set $pendingoutfit to setup.randomchoice(_completefav).name>><</link>><br>
<<else>>
<<set _complete to $pc.fully_dressed_outfits()>>
<<if _complete.length gt 1>>
<<set _link to {text: "Change into random everyday outfit", link: _passage, noemoji: true}>>
<<link _link>><<set $pendingoutfit to setup.randomchoice(_complete).name>><</link>><br>
<</if>>
<</if>>
<<for _i = 0; _i lt _outfitslist.length; _i++>>
<<set _link to {text: "Change into " + setup.unescape(_outfitslist[_i].name), link: _passage, noemoji: true}>>
<<capture _i>>
<<link _link>><<set $pendingoutfit to _outfitslist[_i].name>><</link>><br>
<</capture>>
<</for>>
<br>
<</if>>
<div class="nokeys">
<<if $filterfavoriteoutfits>>
<<set _link to {text: "Show all outfits", link: _passage, noemoji: true}>>
<<link _link>>
<<set $filterfavoriteoutfits to false>>
<</link>>
<br><br>
<<elseif _favoriteoutfits.length gt 0>>
<<set _link to {text: "Show favorite outfits only", link: _passage, noemoji: true}>>
<<link _link>>
<<set $filterfavoriteoutfits to true>>
<</link>>
<br><br>
<</if>>
</div><<run setup.fix_duplicate_wardrobe()>>
<<if $pendingoutfit>>
<<if $pendingoutfit is "!Strip">>
<<run $pc.swap_all_clothing_to_closet()>>
You remove all of your clothing.<br>
<<else>>
<<set _notfound to $pc.wear_outfit($pendingoutfit)>>
You decide to change into your $pendingoutfit outfit.
<<if _notfound.length gt 0>>
<<highlight bad>>You couldn't find <<= setup.and(_notfound)>> in your closet.<</highlight>>
<<if $admirer and $admirer.stolenunderwear and _notfound.includes($admirer.stolenunderwear.name) and !$admirer.stolenunderwearreported>>
When the hell did you lose that?
<<set $admirer.stolenunderwearreported to true>>
<<elseif $stolenunderwear and _notfound.includes($stolenunderwear.item.name) and !$stolenunderwearreported>>
When the hell did you lose that?
<<set $stolenunderwearreported to true>>
<</if>>
<br>
<</if>>
<<for _worn range $pc.clothes>>
<<if _worn.properties && _worn.properties["stains"]>>
<<highlight bad>>You are wearing stained clothing.<</highlight>><br>
<<break>>
<</if>>
<</for>>
<</if>>
<<set $lastpickedoutfit to $pendingoutfit>>
<<unset $pendingoutfit>>
<<cleartempclothing>>
<<maybechangingwitnessedbyadmirer>>
<br><br>
<</if>>
<<if $wearresult>>
<<= $wearresult>><br><br>
<<unset $wearresult>>
<</if>>
<<if $pc.get_storage_location("laundryclothes").get_item_count() > 0>>
You were <<highlight>>doing laundry<</highlight>>. Your closet is pretty empty at the moment.
<br><br>
<</if>>
<<if $pc.get_storage_location("dormcloset").get_item_count() is 0>>
<<if !$lastloctags.includes("homebase")>>
You have nothing in here.<br>
<<else>>
You take a look at your rather bare closet. "New school, new you" was the plan, but with all the other stuff you've had to worry about over the past couple of weeks, you never got around to actually buying any new stuff. You'll have to take care of that very soon.<br>
<</if>>
<br>
<</if>>
<span id="wearresult"></span>
<<set _exhibreq to setup.base_exhibitionism_requirement()>>
<<set _stripallowed to $lastloctags.includes("stripallowed")>>
<<set _swimwearallowed to $lastloctags.includes("swimwearallowed")>>
<<set _allowed to (_swimwearallowed && $pc.wearing_swimwear()) || _stripallowed>>
<<set _maskallowed to ($lastloctags.includes("maskok") || (setup.is_harvesteve() && $lastloctags.includes("harvestevemaskok")))>>
<<set _atriverrat to $lastlocpassage == "RiverRat">>
<<set _riverratexception to _atriverrat && setup.riverrat_dresscode() && $pc.is_part_visible("nipples") && !$pc.is_part_visible("crotch")>>
<<if _allowed or _riverratexception>><<set _exhibreq to 0>><</if>>
<<if !$lastloctags.includes("homebase") and !_allowed && !$pc.fully_dressed() && !$pc.inoffensive_topless() && !_riverratexception>>
<span class="bad">You can't go out like this!</span> (<<= $pc.not_fully_dressed_reason()>>)
<<if _atriverrat && !setup.riverrat_dresscode()>>
<br>
Make sure you match the current dress code:
<<set _uniform to setup.RiverRat.upgrades[setup.RiverRat.upgrade("uniforms")].uniformRequirement>>
<<set _femmeoutfit = setup.build_outfit("female", $pc.body_parts, _uniform)>>
<<set _mascoutfit = setup.build_outfit("male", $pc.body_parts, _uniform)>>
<<if $pc.is_femme()>>
<<set _outfit to _femmeoutfit>>
<<else>>
<<set _outfit to _mascoutfit>>
<</if>>
<<set _items to _outfit.filter(item => setup.clothes[item.item].category != "underwear").map(item => item.name)>>
<<and _items>>
<</if>>
<br>
<<elseif !$lastloctags.includes("homebase") and $pc.is_anonymous() && !_maskallowed>>
<span class="bad">You can't go out like this!</span> (Wearing a mask here may get you into trouble.)<br>
<<elseif !$pc.skillleveled("Exhibitionism", _exhibreq)>>
<span class="bad">You don't feel comfortable being this undressed here.</span> (Need <<skill Exhibitionism _exhibreq>>)<br>
<<else>>
<<link "Leave">>
<<unset $lastwardrobecategory>>
<<set _passage to $location>>
<<if State.random() lte setup.Events.base_event_chance()>>
<<set _passage to (setup.Events.passage(["wardrobe interrupt"]) || $location)>>
<</if>>
<<egoto _passage>>
<</link>> <<if _exhibreq gt 0>><<skill Exhibitionism _exhibreq>><</if>><br>
<</if>>
<br>
<<set _favoriteoutfits = $pc.get_favorite_outfits()>>
<<if $filterfavoriteoutfits>>
<<set _outfitslist to _favoriteoutfits>>
<<else>>
<<set _outfitslist to $outfits>>
<</if>>
<<if _outfitslist.length is 0>>
<<if $filterfavoriteoutfits>>
You have no favorite outfits.<br>
<<else>>
You have no outfits saved.<br>
<</if>>
<<else>>
<<if $pc.clothes.length gt 0>>
<<link "Strip" "Wardrobe">><<set $pendingoutfit to "!Strip">><</link>><br>
<</if>>
<<set _completefav to $pc.fully_dressed_favorite_outfits()>>
<<if _completefav.length gt 1>>
<<set _oname to "Change into random favorite everyday outfit">>
<<link _oname Wardrobe>><<set $pendingoutfit to setup.randomchoice(_completefav).name>><</link>><br>
<<else>>
<<set _complete to $pc.fully_dressed_outfits()>>
<<if _complete.length gt 1>>
<<set _oname to "Change into random everyday outfit">>
<<link _oname Wardrobe>><<set $pendingoutfit to setup.randomchoice(_complete).name>><</link>><br>
<</if>>
<</if>>
<<for _i = 0; _i lt _outfitslist.length; _i++>>
<<capture _i>>
<<link "Change into <<= _outfitslist[_i].name>>" "Wardrobe">><<set $pendingoutfit to _outfitslist[_i].name>><</link>><br>
<</capture>>
<</for>>
<br>
<</if>>
<div class="nokeys">
<<if $filterfavoriteoutfits>>
<<link "Show all outfits" "Wardrobe">>
<<set $filterfavoriteoutfits to false>>
<</link>>
<br><br>
<<elseif _favoriteoutfits.length gt 0>>
<<link "Show favorite outfits only" "Wardrobe">>
<<set $filterfavoriteoutfits to true>>
<</link>>
<br><br>
<</if>>
<<link "Create a random outfit" RandomOutfitCreator>><</link>>
<br><br>
</div>
<<include ClothesMenu>><div class="nokeys">
<<set _pc_clothes = $pc.get_clothing_class()>>
<<set _pc_wardrobe = $pc.get_storage_location("dormcloset")>>
<<if "Outfits" is $lastwardrobecategory>>
<span class="notice">Outfits</span>
<<else>>
<span class="bold nokeys"><<link "Outfits" "Wardrobe">><<set $lastwardrobecategory to "Outfits">><</link>></span>
<</if>>
<<for _cat range setup.clothes_categories>>
<<if _pc_clothes.get_all_of_category(_cat).length + _pc_wardrobe.get_all_of_category(_cat).length>>
<<set _ccat to _cat.toUpperFirst()>>
|
<<if _cat is $lastwardrobecategory>>
<span class="notice">_ccat</span>
<<else>>
<<capture _cat>><<link _ccat "Wardrobe">><<set $lastwardrobecategory to _cat>><</link>><</capture>>
<</if>>
<</if>>
<</for>></div><br>
<<if $lastwardrobecategory is "Outfits">>
<div class="outfit-menu-container nokeys">
<div class="outfit-menu-col-1 nokeys">
<<link "Save current clothes" "Wardrobe">><<set _newoutfitname to Util.escapeMarkup(_newoutfitname.trim())>><<if $pc.is_outfit_name_taken(_newoutfitname)>><<set $wearresult to "There is already an outfit with that name.">><<else>><<run $pc.save_outfit(_newoutfitname, $pc.clothes)>><<set $wearresult to "Your outfit has been saved!">><</if>><</link>>
</div>
<div class="outfit-menu-col-2 nokeys">
<<textbox "_newoutfitname" "New Outfit">>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
</div>
</div>
<<for _outfit range $outfits>>
<<capture _outfit>>
<<set _outfitname to _outfit.name>>
<div class="outfit-menu-container nokeys">
<div class="outfit-menu-col-1 nokeys">
<div class="outfit-menu-header">
<div class="outfit-menu-name">_outfitname</div>
<div class="outfit-menu-favorite-icon">
<<if _outfit.favorite>>
<<link "★" "Wardrobe">><<run delete _outfit.favorite>><</link>>
<<else>>
<<link "☆" "Wardrobe">><<set _outfit.favorite to true>><</link>>
<</if>>
</div>
</div>
<span style="font-size: 75%; line-height: 0.75;"><<= setup.display_outfit(_outfit)>></span>
</div>
<div class="outfit-menu-col-2 outfit-menu-buttons">
<div class="outfit-menu-button nokeys">
<<link "Wear" "Wardrobe">><<set $pendingoutfit to _outfit.name>><</link>>
</div>
<div class="outfit-menu-button nokeys">
<<link "Overwrite" "Wardrobe">><<run $pc.overwrite_outfit(_outfit.name, $pc.clothes)>><</link>>
</div>
<div class="outfit-menu-button nokeys">
<<if _outfit.favorite>>
<<link "Unfavorite" "Wardrobe">><<run delete _outfit.favorite>><</link>>
<<else>>
<<link "Favorite" "Wardrobe">><<set _outfit.favorite to true>><</link>>
<</if>>
</div>
<div class="outfit-menu-button nokeys">
<<link "Delete" "Wardrobe">><<run $pc.delete_outfit(_outfit.name)>><</link>>
</div>
<div class="outfit-menu-button nokeys" style="font-family: tme-fa-icons;">
<<set _i to $outfits.indexOf(_outfit)>>
<<if _i lt $outfits.length - 1>>
<<set _linkname to String.fromCharCode(0xe81c)>>
<<link _linkname Wardrobe>>
<<set _i to $outfits.indexOf(_outfit)>>
<<set _swappedoutfit to $outfits[_i + 1]>>
<<set $outfits[_i + 1] to Object.assign({}, $outfits[_i])>>
<<set $outfits[_i] to _swappedoutfit>>
<</link>>
<<else>>
<</if>>
<<if _i gt 0>>
<<set _linkname to String.fromCharCode(0xe81f)>>
<<link _linkname Wardrobe>>
<<set _i to $outfits.indexOf(_outfit)>>
<<set _swappedoutfit to $outfits[_i - 1]>>
<<set $outfits[_i - 1] to Object.assign({}, $outfits[_i])>>
<<set $outfits[_i] to _swappedoutfit>>
<</link>>
<<else>>
<</if>>
</div>
</div>
</div>
<</capture>>
<</for>>
<<elseif $lastwardrobecategory>>
<br>
<<set _wornfound to false>>
<<for _i to 0; _i lt $pc.clothes.length; _i++>>
<<set _wornclothing to $pc.clothes[_i]>>
<<if $pc.clothing_archetype(_i).category is $lastwardrobecategory>>
<<set _cname to "Remove " + _wornclothing.name>>
<<capture _wornclothing>>
<span class="nokeys"><<link _cname "Wardrobe">>
<<run $pc.swap_clothing_to_closet(_wornclothing)>>
<<set $wearresult to "You remove your " + _wornclothing.name + ".">>
<</link>></span><br>
<</capture>>
<<set _wornfound to true>>
<</if>>
<</for>>
<<if _wornfound>><br><</if>>
<div class="columnize-container">
<<for _clothing range $pc.get_storage_location("dormcloset").get_all_of_category($lastwardrobecategory)>>
<<set _cname to _clothing.get_name().toUpperFirst()>>
<<capture _clothing>>
<div class="clothing-item nokeys columnize-item rounded-border">
<<set _stained to _clothing.get_property("stains")>>
<span class="clothing-item-name">
<<link _cname "Wardrobe">>
<<run $pc.wear_from_closet(_clothing)>>
<<set $wearresult to "You wear your " + (_stained ? "stained " : "") + _clothing.get_name() + ".">>
<</link>>
</span>
<br>
<<clothingflags _clothing.get_item()>> <<if _stained>><<highlight bad>>Stained.<</highlight>><</if>>
<<debug>>
<br>
<span class="small nokeys" style="float: right;">
<<link "(Throw away)" WardrobeDelete>>
<<set $wardrobeitemdelete to _clothing>>
<</link>>
</span>
<</debug>>
</div>
<</capture>>
<</for>>
</div>
<<done>>
<<script>>
$(".clothing-item").on("click", function() {
$(this).find(".clothing-item-name").find("a").click();
});
<</script>>
<</done>>
<</if>><<include Wardrobe>><<set _delete to $pc.clothing_item_safe_to_delete($wardrobeitemdelete.get_data_structure())>>
<<if !_delete>>
Getting rid of this item may mean you can't cover yourself enough to be able to leave. Get a suitable replacement and then you can get rid of it!
<br><br>
<<link "Continue" Wardrobe>><</link>>
<<else>>
Are you sure you want to get rid of your <<= $wardrobeitemdelete.get_name()>>? This can't be undone.
<br><br>
<<link "Yes" Wardrobe>>
<<run $pc.get_storage_location("dormcloset").remove($wardrobeitemdelete)>>
<<unset $wardrobeitemdelete>>
<</link>>
<br>
<<link "No" Wardrobe>>
<<unset $wardrobeitemdelete>>
<</link>>
<</if>><div id="randomoutfitroller">
<<link "Roll a random outfit">>
<<replace "#randomoutfitroller">><<rollrandomoutfit>><</replace>>
<</link>>
</div>
<br>
<<set _rorincludebra to $pc.has_part("breasts")>>
<<set _rorincludeunderwear to true>>
<<set _rorincludebinder to $pc.is_enby() && $pc.has_breasts()>>
<<set _rorincludebag to true>>
<label><<checkbox "_rorincludeunderwear" false true autocheck>> Include underwear</label>
<label><<checkbox "_rorincludebra" false true autocheck>> Include bra</label>
<label><<checkbox "_rorincludebag" false true autocheck>> Include a bag</label>
<label><<checkbox "_rorincludebinder" false true autocheck>> Use chest binder</label>
<br><br>
<<set _link to {text: "Cancel", link: "Wardrobe", noemoji: true}>>
<<link _link>><</link>><<if !$debtpaid>><<set $debtpaid to 0>><<set $weeklydebt to 100>><</if>>
<<set $lastpaymentday to $gameday>>
<<if $weeklydebt gt 200>><<set $weeklydebt to 200>><</if>> /* !!!! must be removed someday once money is easier */
<<if $pc.has_phone()>>
Your phone rings. It's your mom. You know she's calling about money and she'll be very cross if you put her off, so you grudgingly answer it.
<<else>>
<<set _bff to $niches["The Best Friend"]>>
"There you are."
<br><br>
You turn. It's <<anonorfullname _bff>>, marching straight up to you. <<psc>> <<conj thrust>> <<pp>> phone into your hand forcefully.
<br><br>
"Please. It's your mom. She won't stop calling." <<psc>> <<conj give>> you a look, brow furrowed. "Where's your phone?"
<br><br>
You glance at your friend's phone and sigh. The caller ID says "<<dfirstname $pc>>'s Mom." You lift it to your ear.
<</if>>
<br><br>
<<if !$firsttime.debt>>
After asking how you're settling in and all the expected questions, she gets down to business.<br>
<br>
"Have you found a job yet?" she asks. "We're going to need your help to make these payments, like we talked about. And some of these payments depend on your grades, so keep an eye on that. If your GPA drops under 2.5, they'll want their money back sooner. On the other hand, if you get it up to 3.8 you'll owe a little less."<br>
<<set $firsttime.debt to true>>
<br>
<<if !$jobs or $jobs.length is 0>>
"No, mom. I just got here," you say.<br>
<br>
"Well, I know that. But you need to find something soon. Education isn't cheap, unfortunately. I'll give you another week, but then you're going to need to start giving me <<highlight cash>>$<<= ($weeklydebt * $optdebtpaymentmultiplier)>><</highlight>> every week."
<<else>>
"Yes, I found a job," you admit. "But I just started, and I need a bit of money for necessities—"<br>
<br>
Your mom cuts you off. "Yes, I know you didn't really bring much," she says. "It's fine for this week, but then you're going to need to start giving me <<highlight cash>>$<<= ($weeklydebt * $optdebtpaymentmultiplier)>><</highlight>> every week."
<</if>><br>
<br>
You tell her you understand.<br>
<br>
With the nagging done, you talk for a few minutes longer before hanging up. You couldn't wait to get to college and live on your own, but it still makes you feel better to talk to your mom. <<dalterneed Attention 250 true>> <<dalterneed Relaxation 250 true>>
<<set _bypassdebt to true>>
<<else>>
<<set _bypassdebt to false>>
She asks how you are and all that, then she gets down to business.<br>
<br>
"Remember, we need <<highlight cash>>$<<= ($weeklydebt * $optdebtpaymentmultiplier)>><</highlight>> from you this week," she says.
<<set _score to setup.School.current_average_score()>>
<<if _score isnot -1>>
<<set _gpa to setup.School.find_gpa(_score * 100.0)>>
<<if _gpa lt 2.5>>
<<set _gradedebt to Math.round(($weeklydebt * $optdebtpaymentmultiplier) * 0.2)>>
"Um, also... since your GPA has slipped under 2.5... they want their money back sooner, so it's gonna be another <<highlight cash>>$<<= _gradedebt>><</highlight>> on top of that. You've got to work on those grades, <<firstname $pc>>."
<<elseif _gpa gte 3.8>>
<<if setup.credit_for_winning_game()>>
<<set _gradedebt to -Math.round(($weeklydebt * $optdebtpaymentmultiplier) * 0.333)>>
"But since your GPA is so high and you're doing so well at <<= $pcsports[0]>>, they're cutting us a break, so you can take <<highlight cash>>$<<= -_gradedebt>><</highlight>> off of that. Which is fantastic! You're doing so well even with so many things to juggle."
<<else>>
<<set _gradedebt to -Math.round(($weeklydebt * $optdebtpaymentmultiplier) * 0.2)>>
"But since your GPA is so high, they're cutting us a break, so you can take <<highlight cash>>$<<= -_gradedebt>><</highlight>> off of that. Which is great! I'm proud of you."
<</if>>
<<elseif setup.credit_for_winning_game()>>
<<set _gradedebt to -Math.round(($weeklydebt * $optdebtpaymentmultiplier) * 0.2)>>
"But since you're doing so well at <<= $pcsports[0]>>, you can take <<highlight cash>>$<<= -_gradedebt>><</highlight>> off of that. Which is great! But don't forget your grades are important too."
<</if>>
<</if>>
<</if>>
<<set _bigtotal to Math.round(($weeklydebt * $optdebtpaymentmultiplier) + ($medicaldebt || 0) + ($backdebt || 0) + (_gradedebt || 0))>>
<<if _bypassdebt>>
<br><br>
<<continuelink>>
<<else>>
<<if $medicaldebt>>
<br><br>
You hear papers rustling. "You also have your payment to the clinic. You owe them <<highlight cash>>$<<= $medicaldebt>><</highlight>> and they want at least ten percent of that."
<<if $medicaldebt lte 10>>
<<set _thisweekpayment to Math.round($medicaldebt + ($weeklydebt * $optdebtpaymentmultiplier) + ($backdebt || 0) + (_gradedebt || 0))>>
<<else>>
<<set _thisweekpayment to Math.round(($medicaldebt * 0.1)) + ($weeklydebt * $optdebtpaymentmultiplier) + ($backdebt || 0) + (_gradedebt || 0)>>
<</if>>
<<else>>
<<set _thisweekpayment to Math.round(($weeklydebt * $optdebtpaymentmultiplier) + ($backdebt || 0) + (_gradedebt || 0))>>
<</if>><br>
<br>
<<if $backdebt>>
She clears her throat. "And don't forget you still owe <span class="cash">$<<= $backdebt>></span> from before. That's a total of <<highlight cash>>$<<= _thisweekpayment>><</highlight>> I need this week."<br>
<br>
<</if>>
<<if $medicaldebt>>
<<if $pcmoney gte _bigtotal>>
<<link "Pay off your medical debt plus this week's payment" WeeklyDebtPaid>>
<<unset $medicaldebt>>
<<unset $backdebt>>
<<set $debtpaid += $weeklydebt>>
<<set $pcmoney -= _bigtotal>>
<</link>> ($<<= _bigtotal>>)<br>
<</if>>
<</if>>
<<if $pcmoney gte _thisweekpayment>>
<<link "Pay this week's payment" WeeklyDebtPaid>>
<<set $debtpaid += Math.round(($weeklydebt * $optdebtpaymentmultiplier))>>
<<set $pcmoney -= _thisweekpayment>>
<<if $medicaldebt>>
<<set $medicaldebt -= Math.round(($medicaldebt * 0.1))>>
<<if $medicaldebt < 1>><<unset $medicaldebt>><</if>>
<</if>>
<<unset $backdebt>>
<</link>> ($<<= _thisweekpayment>>)<br>
<</if>>
<<link "Say you don't have the money" WeeklyDebtUnpaid>>
<<set _backdebtadded to Math.round($weeklydebt * $optdebtpaymentmultiplier)>>
<<if _gradedebt>><<set _backdebtadded += _gradedebt>><</if>>
<<if $backdebt>>
<<set $backdebt += _backdebtadded>>
<<else>>
<<set $backdebt to _backdebtadded>>
<</if>>
<</link>>
<</if>>You can hear your mother gritting her teeth. "Fine," she says. "We'll make it work. But you need to start taking some responsibility, <<firstname $pc>>. Find a job and get the money. You need to pull your own weight. If we find out you've been spending your money on clothes or other things you don't need... we'll pull you right out of that school. We can't afford to have you just playing around."
It sounds like she means it. You're probably going to have to actually watch your spending.
After that lecture, the rest of the call is pretty tense, and you both quickly find an excuse to hang up. <<dalterneed Relaxation -50 true>>
<<continuelink>><<if $pc.has_phone()>>
It pains you, but you swap to your money app and set up the transfer.
<<else>>
You have to remember your bank password, since this isn't even your phone, which makes this even more annoying than otherwise. But you manage to do the transfer.
<</if>>
<br><br>
"Thanks, <<nickname $pc>>," your mom says. "This really helps."
<<if $weeklydebt is 100 and $debtpaid gte 500>>
<<set $weeklydebt += 50>>
<br><br>
She pauses. "But I'm afraid this is going to be a little tougher than we thought," she says. "Next week we're going to need <span class="cash">$<<= ($weeklydebt * $optdebtpaymentmultiplier)>></span> to keep up."
<<elseif $weeklydebt is 150 and $debtpaid gte 1000>>
<<set $weeklydebt += 50>>
<br><br>
She pauses. "But these bills are piling up faster than we thought," she says. "Next week we're going to need <span class="cash">$<<= ($weeklydebt * $optdebtpaymentmultiplier)>></span> to keep up."
<<elseif false and $weeklydebt is 200 and $debtpaid gte 3000>>
<<set $weeklydebt += 50>>
<br><br>
She pauses. "But it's getting tougher. Things are expensive," she says. "Next week we're going to need <span class="cash">$<<= ($weeklydebt * $optdebtpaymentmultiplier)>></span> to keep up."
<<elseif false and $weeklydebt is 250 and $debtpaid gte 8000>>
<<set $weeklydebt += 50>>
<br><br>
She pauses. "But the interest is killing us. It keeps piling up," she says. "Next week we're going to need <span class="cash">$<<= ($weeklydebt * $optdebtpaymentmultiplier)>></span> to keep up."
<<else>>
She sighs. "I know it sucks, but please don't forget we'll need the same amount from you next week."
<</if>><br>
<br>
You talk for a little while longer, then hang up. At least you have a whole week to make the next payment.
<<if !$pc.has_phone()>>
<<set _bff to $niches["The Best Friend"]>>
You hand <<dfirstname _bff>> <<pp>> phone back.
<</if>>
<br><br>
<<continuelink>><<checkndefworldgen>>
<<set _worldgen to recall("worldgen")>>
<<set _studentgenderdistribution to _worldgen.studentgenderdistribution>>
<<set _towniegenderdistribution to _worldgen.towniegenderdistribution>>
<<set _facultygenderdistribution to _worldgen.facultygenderdistribution>>
<<set _outsidergenderdistribution to _worldgen.outsidergenderdistribution>>
<<set _studentgenderbalance to _worldgen.studentgenderbalance || 0>>
<<set _breastsizebonus to _worldgen.breastsizebonus || 0>>
<<set _penissizebonus to _worldgen.penissizebonus || 0>>
<<set _buttsizebonus to _worldgen.buttsizebonus || 0>>
<<set _plumpnessbonus to _worldgen.plumpnessbonus || 0>>
<<set _muscularitybonus to _worldgen.muscularitybonus || 0>>
<<set _heightbonus to _worldgen.heightbonus || 0>>
<<set _gaybonus to _worldgen.gaybonus>>
<<set _bibonus to _worldgen.bibonus>>
<<set _seed to _worldgen.seed>>
<<set _nichegenderpicks to _worldgen.nichegenderpicks || {}>>
<<if ndef _worldgen.tradsports>>
<<set _worldgen.tradsports to true>>
<</if>>
<<set _tradsports to _worldgen.tradsports>>
<<if ndef _worldgen.polybonus>>
<<set _worldgen.polybonus to 1>>
<</if>>
<<set _polybonus to _worldgen.polybonus>>
<<set _penistypes to _worldgen.penis_types || setup.penis_types>>
<<set _circumrate to setup.penis_types[1]>>
<<set _maleweight to _studentgenderdistribution[_studentgenderdistribution.indexOf("male") + 1]>>
<<set _femaleweight to _studentgenderdistribution[_studentgenderdistribution.indexOf("female") + 1]>>
<<set _tmaleweight to _studentgenderdistribution[_studentgenderdistribution.indexOf("transgender male") + 1]>>
<<set _tfemaleweight to _studentgenderdistribution[_studentgenderdistribution.indexOf("transgender female") + 1]>>
<<set _nbamabweight to _studentgenderdistribution[_studentgenderdistribution.indexOf("nonbinary amab") + 1]>>
<<set _nbafabweight to _studentgenderdistribution[_studentgenderdistribution.indexOf("nonbinary afab") + 1]>>
<span style="font-size: 120%;">World Generation Options</span><br>
<br>
Set options for generating your world and its cast of non-player characters (NPCs). These changes only affect a new game and won't alter a game in progress.<br>
<br>
<div class="worldgen-options-table">
<div class="options-item-label options-item-label-large">
World Seed
</div>
<div class="options-item-content options-item-content-fullwidth options-item-content-worldseed">
<span id="textbox-worldseed"><<textbox "_seed" _seed>></span>
<div class="worldseed-options-worldseed-buttons">
<<button "Default">>
<<set _seed to "ochre">>
<<run setup.Worldgen.set("seed", _seed)>>
<<replace "#textbox-worldseed">>
<<textbox "_seed" _seed>>
<</replace>>
<</button>>
<<button "Random seed">>
<<set _seed to setup.randel(setup.Worldgen.seeds)>>
<<run setup.Worldgen.set("seed", _seed)>>
<<replace "#textbox-worldseed">>
<<textbox "_seed" _seed>>
<</replace>>
<</button>>
</div>
<br>
<div class="options-hint small nokeys">
<<link "What is the world seed?">>
<<script>>
Dialog.setup("Help: World Seed", "help");
Dialog.wiki(Story.get("HelpWorldSeed").processText());
Dialog.open();
<</script>>
<</link>>
</div>
</div>
<div class="options-item-label options-item-label-large options-item-label-gender-distribution">
<div>Gender Distribution</div>
<div class="options-hint small nokeys">
<<link "About gender distribution">>
<<script>>
Dialog.setup("Help: Gender Distribution", "help");
Dialog.wiki(Story.get("HelpGendDist").processText());
Dialog.open();
<</script>>
<</link>>
</div>
</div>
<label for="slider-worldgen-maleweight" class="options-item-value">Male</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-maleweight" name="slider-worldgen-maleweight" min="10" max="100" @value=_maleweight class="slider genderslider" data-var="_maleweight" oninput="SugarCubeInput(this)">
</div>
<label for="slider-worldgen-femaleweight" class="options-item-value">Female</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-femaleweight" name="slider-worldgen-femaleweight" min="10" max="100" @value=_femaleweight class="slider genderslider" data-var="_femaleweight" oninput="SugarCubeInput(this)">
</div>
<label for="slider-worldgen-tmaleweight" class="options-item-value">Transgender Male</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-tmaleweight" name="slider-worldgen-tmaleweight" min="1" max="100" @value=_tmaleweight class="slider genderslider" data-var="_tmaleweight" oninput="SugarCubeInput(this)">
</div>
<label for="slider-worldgen-tfemaleweight" class="options-item-value">Transgender Female</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-tfemaleweight" name="slider-worldgen-tfemaleweight" min="1" max="100" @value=_tfemaleweight class="slider genderslider" data-var="_tfemaleweight" oninput="SugarCubeInput(this)">
</div>
<label for="slider-worldgen-nbamabweight" class="options-item-value">Nonbinary AMAB</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-nbamabweight" name="slider-worldgen-nbamabweight" min="1" max="100" @value=_nbamabweight class="slider genderslider" data-var="_nbamabweight" oninput="SugarCubeInput(this)">
</div>
<label for="slider-worldgen-nbafabweight" class="options-item-value">Nonbinary AFAB</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-nbafabweight" name="slider-worldgen-nbafabweight" min="1" max="100" @value=_nbafabweight class="slider genderslider" data-var="_nbafabweight" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-content options-item-content-fullwidth">
<label><<checkbox "_tradsports" false true autocheck>> Traditional sports team genders</label>
<div class="small nokeys">
<<link "What is this?">><<run setup.open_dialog("HelpAboutTradSportsGenders", "Help: About Sports Team Genders")>><</link>></div>
</div>
<div class="options-item-label">
Gay People
</div>
<label id="gaybonuslabel" for="slider-worldgen-gay" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-gay" name="slider-worldgen-gay" min="-5" max="10" @value=_gaybonus class="slider genderslider" data-var="_gaybonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Bi People
</div>
<label id="bibonuslabel" for="slider-worldgen-bi" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-bi" name="slider-worldgen-bi" min="-5" max="10" @value=_bibonus class="slider genderslider" data-var="_bibonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Breast Size Modifier
</div>
<label id="breastsizelabel" for="slider-worldgen-breastsize" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-breastsize" name="slider-worldgen-breastsize" min="-3" max="3" @value=_breastsizebonus class="slider genderslider" data-var="_breastsizebonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Penis Size Modifier
</div>
<label id="penissizelabel" for="slider-worldgen-penissize" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-penissize" name="slider-worldgen-penissize" min="-3" max="3" @value=_penissizebonus class="slider genderslider" data-var="_penissizebonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Butt Size Modifier
</div>
<label id="buttsizelabel" for="slider-worldgen-buttsize" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-buttsize" name="slider-worldgen-buttsize" min="-3" max="3" @value=_buttsizebonus class="slider genderslider" data-var="_buttsizebonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Plumpness Modifier
</div>
<label id="plumpnesslabel" for="slider-worldgen-plumpness" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-plumpness" name="slider-worldgen-plumpness" min="-3" max="3" @value=_plumpnessbonus class="slider genderslider" data-var="_plumpnessbonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Muscularity Modifier
</div>
<label id="muscularitylabel" for="slider-worldgen-muscularity" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-muscularity" name="slider-worldgen-muscularity" min="-3" max="3" @value=_muscularitybonus class="slider genderslider" data-var="_muscularitybonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Height Modifier
</div>
<label id="heightlabel" for="slider-worldgen-height" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-height" name="slider-worldgen-height" min="-3" max="3" @value=_heightbonus class="slider genderslider" data-var="_heightbonus" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Circumcision Rate
</div>
<label id="circumratelabel" for="slider-worldgen-circumrate" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-circumrate" name="slider-worldgen-circumrate" min="0" max="100" @value=_circumrate class="slider genderslider" data-var="_circumrate" oninput="SugarCubeInput(this)">
</div>
<div class="options-item-label">
Poly and Open Relationship Tendency
</div>
<label id="polylabel" for="slider-worldgen-poly" class="options-item-value">
Default
</label>
<div class="options-item-content">
<input type="range" id="slider-worldgen-poly" name="slider-worldgen-poly" min="0" max="3" @value=_polybonus class="slider genderslider" data-var="_polybonus" oninput="SugarCubeInput(this)">
</div>
</div>
<<script>>
$(document).ready(function()
{
$('input[type="text"]').attr('autocomplete', 'off');
});
$(document).one(":passagerender", function(event)
{
let val = T.gaybonus;
let lab = "Default";
if (val >= 7.5) { val = 10; lab = "Lots"; }
else if (val >= 2.5) { val = 5; lab = "Many"; }
else if (val >= -2.5) { val = 0; lab = "Default"; }
else { val = -5; lab = "Few"; }
$(event.content).find("#gaybonuslabel").text(lab);
$(event.content).find("#slider-worldgen-gay").on("input", function()
{
let val = T.gaybonus;
let lab = "Default";
if (val >= 7.5) { val = 10; lab = "Lots"; }
else if (val >= 2.5) { val = 5; lab = "Many"; }
else if (val >= -2.5) { val = 0; lab = "Default"; }
else { val = -5; lab = "Few"; }
State.setVar("_gaybonus", val);
$("#gaybonuslabel").empty().text(lab);
setup.Worldgen.set("gaybonus", val);
});
val = T.bibonus;
lab = "Default";
if (val >= 7.5) { val = 10; lab = "Lots"; }
else if (val >= 2.5) { val = 5; lab = "Many"; }
else if (val >= -2.5) { val = 0; lab = "Default"; }
else { val = -5; lab = "Few"; }
$(event.content).find("#bibonuslabel").text(lab);
$(event.content).find("#slider-worldgen-bi").on("input", function()
{
let val = T.bibonus;
let lab = "Default";
if (val >= 7.5) { val = 10; lab = "Lots"; }
else if (val >= 2.5) { val = 5; lab = "Many"; }
else if (val >= -2.5) { val = 0; lab = "Default"; }
else { val = -5; lab = "Few"; }
State.setVar("_bibonus", val);
$("#bibonuslabel").empty().text(lab);
setup.Worldgen.set("bibonus", val);
});
val = T.breastsizebonus;
lab = "Default";
if (val >= 3) lab = "Extremely larger";
else if (val >= 2) lab = "Much larger";
else if (val >= 1) lab = "Slightly larger";
else if (val <= -3) lab = "Extremely smaller";
else if (val <= -2) lab = "Much smaller";
else if (val <= -1) lab = "Slightly smaller";
$(event.content).find("#breastsizelabel").text(lab);
$(event.content).find("#slider-worldgen-breastsize").on("input", function()
{
let val = parseInt(T.breastsizebonus);
State.setVar("_breastsizebonus", val);
let lab = "Default";
if (val >= 3) lab = "Extremely larger";
else if (val >= 2) lab = "Much larger";
else if (val >= 1) lab = "Slightly larger";
else if (val <= -3) lab = "Extremely smaller";
else if (val <= -2) lab = "Much smaller";
else if (val <= -1) lab = "Slightly smaller";
$("#breastsizelabel").empty().text(lab);
setup.Worldgen.set("breastsizebonus", T.breastsizebonus);
});
val = T.penissizebonus;
lab = "Default";
if (val >= 3) lab = "Extremely larger";
else if (val >= 2) lab = "Much larger";
else if (val >= 1) lab = "Slightly larger";
else if (val <= -3) lab = "Extremely smaller";
else if (val <= -2) lab = "Much smaller";
else if (val <= -1) lab = "Slightly smaller";
$(event.content).find("#penissizelabel").text(lab);
$(event.content).find("#slider-worldgen-penissize").on("input", function()
{
let val = parseInt(T.penissizebonus);
State.setVar("_penissizebonus", val);
let lab = "Default";
if (val >= 3) lab = "Extremely larger";
else if (val >= 2) lab = "Much larger";
else if (val >= 1) lab = "Slightly larger";
else if (val <= -3) lab = "Extremely smaller";
else if (val <= -2) lab = "Much smaller";
else if (val <= -1) lab = "Slightly smaller";
$("#penissizelabel").empty().text(lab);
setup.Worldgen.set("penissizebonus", T.penissizebonus);
});
val = T.buttsizebonus;
lab = "Default";
if (val >= 3) lab = "Extremely larger";
else if (val >= 2) lab = "Much larger";
else if (val >= 1) lab = "Slightly larger";
else if (val <= -3) lab = "Extremely smaller";
else if (val <= -2) lab = "Much smaller";
else if (val <= -1) lab = "Slightly smaller";
$(event.content).find("#buttsizelabel").text(lab);
$(event.content).find("#slider-worldgen-buttsize").on("input", function()
{
let val = parseInt(T.buttsizebonus);
State.setVar("_buttsizebonus", val);
let lab = "Default";
if (val >= 3) lab = "Extremely larger";
else if (val >= 2) lab = "Much larger";
else if (val >= 1) lab = "Slightly larger";
else if (val <= -3) lab = "Extremely smaller";
else if (val <= -2) lab = "Much smaller";
else if (val <= -1) lab = "Slightly smaller";
$("#buttsizelabel").empty().text(lab);
setup.Worldgen.set("buttsizebonus", T.buttsizebonus);
});
val = T.plumpnessbonus;
lab = "Default";
if (val >= 3) lab = "Much more plump";
else if (val >= 2) lab = "More plump";
else if (val >= 1) lab = "Slightly more plump";
else if (val <= -3) lab = "Much less plump";
else if (val <= -2) lab = "Less plump";
else if (val <= -1) lab = "Slightly less plump";
$(event.content).find("#plumpnesslabel").text(lab);
$(event.content).find("#slider-worldgen-plumpness").on("input", function()
{
let val = parseInt(T.plumpnessbonus);
State.setVar("_plumpnessbonus", val);
let lab = "Default";
if (val >= 3) lab = "Much more plump";
else if (val >= 2) lab = "More plump";
else if (val >= 1) lab = "Slightly more plump";
else if (val <= -3) lab = "Much less plump";
else if (val <= -2) lab = "Less plump";
else if (val <= -1) lab = "Slightly less plump";
$("#plumpnesslabel").empty().text(lab);
setup.Worldgen.set("plumpnessbonus", T.plumpnessbonus);
});
val = T.muscularitybonus;
lab = "Default";
if (val >= 3) lab = "Much more muscular";
else if (val >= 2) lab = "More muscular";
else if (val >= 1) lab = "Slightly more muscular";
else if (val <= -3) lab = "Much less muscular";
else if (val <= -2) lab = "Less muscular";
else if (val <= -1) lab = "Slightly less muscular";
$(event.content).find("#muscularitylabel").text(lab);
$(event.content).find("#slider-worldgen-muscularity").on("input", function()
{
let val = parseInt(T.muscularitybonus);
State.setVar("_muscularitybonus", val);
let lab = "Default";
if (val >= 3) lab = "Much more muscular";
else if (val >= 2) lab = "More muscular";
else if (val >= 1) lab = "Slightly more muscular";
else if (val <= -3) lab = "Much less muscular";
else if (val <= -2) lab = "Less muscular";
else if (val <= -1) lab = "Slightly less muscular";
$("#muscularitylabel").empty().text(lab);
setup.Worldgen.set("muscularitybonus", T.muscularitybonus);
});
val = T.circumrate;
lab = `${T.circumrate}%`;
$(event.content).find("#circumratelabel").text(lab);
$(event.content).find("#slider-worldgen-circumrate").on("input", function()
{
let val = parseInt(T.circumrate);
State.setVar("_circumrate", val);
let lab = "Default";
lab = `${T.circumrate}%`;
$("#circumratelabel").empty().text(lab);
setup.Worldgen.set("penis_types", ["circumcised", T.circumrate, "uncircumcised", 100 - T.circumrate]);
});
val = T.heightbonus;
lab = "Default";
if (val >= 3) lab = "Much taller";
else if (val >= 2) lab = "Taller";
else if (val >= 1) lab = "Slightly taller";
else if (val <= -3) lab = "Much shorter";
else if (val <= -2) lab = "Shorter";
else if (val <= -1) lab = "Slightly shorter";
$(event.content).find("#heightlabel").text(lab);
$(event.content).find("#slider-worldgen-height").on("input", function()
{
let val = parseInt(T.heightbonus);
State.setVar("_heightbonus", val);
let lab = "Default";
if (val >= 3) lab = "Much taller";
else if (val >= 2) lab = "Taller";
else if (val >= 1) lab = "Slightly taller";
else if (val <= -3) lab = "Much shorter";
else if (val <= -2) lab = "Shorter";
else if (val <= -1) lab = "Slightly shorter";
$("#heightlabel").empty().text(lab);
setup.Worldgen.set("heightbonus", T.heightbonus);
});
val = T.polybonus;
lab = "Default";
if (val == 0) lab = "None";
else if (val == 1) lab = "Default";
else if (val == 2) lab = "Many";
else if (val == 3) lab = "Most";
$(event.content).find("#polylabel").text(lab);
$(event.content).find("#slider-worldgen-poly").on("input", function()
{
let val = parseInt(T.polybonus);
State.setVar("_polybonus", val);
let lab = "Default";
if (val == 0) lab = "None";
else if (val == 1) lab = "Default";
else if (val == 2) lab = "Many";
else if (val == 3) lab = "Most";
$("#polylabel").empty().text(lab);
setup.Worldgen.set("polybonus", T.polybonus);
});
});
<</script>>
<<set _genderpicksvis to false>>
<br>
<span id="nichegenderpickslink" class="nokeys">
<<link "Set Special Character Genders">>
<<if !_genderpicksvis>>
<<addclass "#nichegenderpicks" "visible">>
<<else>>
<<removeclass "#nichegenderpicks" "visible">>
<</if>>
<<set _genderpicksvis to !_genderpicksvis>>
<</link>>
</span>
<div id="nichegenderpicks" class="invisible nokeys">
<<nichegenderpicks>>
</div>
<br><br>
<<link "Done" Start2>>
<<set _worldgen.seed to Util.escapeMarkup(_seed)>>
<<set _worldgen.nichegenderpicks to _nichegenderpicks>>
<<set _worldgen.tradsports to _tradsports>>
<<set $studentgenderdistribution to [
"male", parseInt(_maleweight),
"female", parseInt(_femaleweight),
"transgender male", parseInt(_tmaleweight),
"transgender female", parseInt(_tfemaleweight),
"nonbinary amab", parseInt(_nbamabweight),
"nonbinary afab", parseInt(_nbafabweight),
]>>
<<set _worldgen.studentgenderdistribution to $studentgenderdistribution>>
<<if _maleweight != 47 or _femaleweight != 47 || _tmaleweight != 2 || _tfemaleweight != 2 || _nbamabweight != 1 || _nbafabweight != 1>>
<<set $towniegenderdistribution to $studentgenderdistribution>>
<<set $facultygenderdistribution to $studentgenderdistribution>>
<<set $outsidergenderdistribution to $studentgenderdistribution>>
<<set _worldgen.towniegenderdistribution to $towniegenderdistribution>>
<<set _worldgen.facultygenderdistribution to $facultygenderdistribution>>
<<set _worldgen.outsidergenderdistribution to $outsidergenderdistribution>>
<</if>>
<<run memorize("worldgen", _worldgen)>>
<</link>>
<br>
<<link "Reset to default" WorldGen>>
<<set _studentgenderbalance to 0>>
<<set _studentgenderdistribution to ["male", 47, "female", 47, "transgender male", 2, "transgender female", 2, "nonbinary amab", 1, "nonbinary afab", 1]>>
<<set _towniegenderdistribution to ["male", 50, "female", 50]>>
<<set _facultygenderdistribution to ["male", 50, "female", 50]>>
<<set _outsidergenderdistribution to ["male", 50, "female", 50]>>
<<set _gaybonus to 0>><<set _bibonus to 0>>
<<set _breastsizebonus to 0>><<set _penissizebonus to 0>>
<<set _plumpnessbonus to 0>><<set _muscularitybonus to 0>>
<<set _heightbonus to 0>>
<<set _breastsizebonus to 0>><<set _penissizebonus to 0>>
<<set _cispersonmodifier to 1>>
<<set _peoplereplacements to []>>
<<set _nichegenderpicks to {}>>
<<set _tradsports to true>>
<<set _seed to "ochre">>
<<set _worldgen to {
seed: _seed,
studentgenderdistribution: _studentgenderdistribution,
towniegenderdistribution: _towniegenderdistribution,
facultygenderdistribution: _facultygenderdistribution,
outsidergenderdistribution: _outsidergenderdistribution,
studentgenderbalance: _studentgenderbalance,
gaybonus: _gaybonus,
bibonus: _bibonus,
breastsizebonus: _breastsizebonus,
penissizebonus: _penissizebonus,
plumpnessbonus: _plumpnessbonus,
muscularitybonus: _muscularitybonus,
heightbonus: _heightbonus,
cispersonmodifier: _cispersonmodifier,
tradsports: _tradsports,
penis_types: setup.penis_types,
}>>
<<run memorize("worldgen", _worldgen)>>
<</link>><<widget "nichegenderpicks">>
<<set _genders to ["female", "male", "transgender female", "transgender male", "nonbinary afab", "nonbinary amab"]>>
<ul>
<<for _niche range setup.people.allowed_genderpick_niches>>
<li class="nichegenderpicks-item">
<label class="nichegenderpicks-label">_niche</label>
<div class="nichegenderpicks-gender-select" style="font-size: 90%;">
<<for _gender range _genders>>
<<capture _niche _gender>>
<<set _linklabel to _gender>>
<<if ["female", "male"].includes(_linklabel)>>
<<set _linklabel to "cis " + _linklabel>>
<</if>>
<<if _nichegenderpicks[_niche] is _gender>>
<<highlight>>_linklabel<</highlight>>
<<else>>
<<link _linklabel>>
<<set _nichegenderpicks[_niche] to _gender>>
<<replace "#nichegenderpicks">>
<<nichegenderpicks>>
<</replace>>
<</link>>
<</if>>
<<if _gender isnot _genders[_genders.length - 1]>>
|
<</if>>
<</capture>>
<</for>>
</div>
</li>
<</for>>
</ul>
<div>
<<link "Clear Selections">>
<<set _nichegenderpicks to {}>>
<<replace "#nichegenderpicks">>
<<nichegenderpicks>>
<</replace>>
<</link>>
<br>
<<highlight small>><b>Note:</b> Selections are not guaranteed. If your selection does not match your character's sexual preferences, it will be ignored to avoid softlocking storylines. Characters not present here have a static gender for storyline reasons.<</highlight>>
</div>
<</widget>>
<<widget "checkndefworldgen">>
<<set _worldgen to recall("worldgen")>>
<<if ndef _worldgen>>
<<set _worldgen to {
seed: $seed,
studentgenderbalance: 0,
studentgenderdistribution: $studentgenderdistribution,
towniegenderdistribution: $towniegenderdistribution,
facultygenderdistribution: $facultygenderdistribution,
outsidergenderdistribution: $outsidergenderdistribution,
gaybonus: $gaybonus,
bibonus: $bibonus,
breastsizebonus: $breastsizebonus,
penissizebonus: $penissizebonus,
buttsizebonus: $buttsizebonus,
plumpnessbonus: $plumpnessbonus,
muscularitybonus: $muscularitybonus,
heightbonus: $heightbonus,
polybonus: $polybonus,
penis_types: setup.penis_types,
}>>
<<run memorize("worldgen", _worldgen)>>
<</if>>
<</widget>><<widget "charactertabs">>
<<if !V.dHist>><<set V.dHist = "">><</if>>
<<run V.dialogCloseFn = function(){setup.debug.cDialogHist(V.dHist); delete V.dHist};>>
<<set _tab_info to [
{"label":"Character Appearance", "dialog":"Character", "code":"A"},
{"label":"Character Memories", "dialog":"MemoryStats", "code":"M"},
{"label":"Character Stats", "dialog":"CharacterStats", "code":"St"},
{"label":"Character Skills", "dialog":"Skills", "code":"Sk"},
{"label":"Character Inclinations", "dialog":"Inclinations", "code":"I"},
{"label":"Diary", "dialog":"Diary", "code":"D"},
]>>
<<for _tab range _tab_info>>
<<if _tab isnot _tab_info[0]>>| <</if>>
<<if _tab.dialog is $chardialogtab>>
<<highlight>><<= _tab.label>><</highlight>>
<<else>>
<<capture _tab>>
<<link _tab.label>>
<<set $chardialogtab to _tab.dialog>>
<<run V.dHist += _tab.code;>>
<<run setup.open_dialog(_tab.dialog, _tab.label, setup.remove_spaces(_tab.dialog))>>
<</link>>
<</capture>>
<</if>>
<</for>>
<</widget>><<charactertabs>>
<br><br>
<div id="character-dialog" style="width: 38em">
Your name is <<highlight>>$pcname<</highlight>><<if $pc.nickname isnot "">>, or <<highlight>><<= $pc.nickname>><</highlight>> to your friends<</if>>.
You are <<= $pcage>> years old.
<<set _bday to $pcbirthday>>
Your birthday is <<= _bday[0]>> <<= _bday[1]>>.
<br><br>
<<= $pc.full_description()>>
<<if ($optallownpccustom or $cheatsenabled) and setup.passage_safe()>>
<<highlight small>>(<<link "Re-customize" CharacterCustomize>>
<<run Dialog.close()>>
<</link>>)<</highlight>>
<</if>>
<br><br>
<<if $pcgender is "female" and $pcsexualpref is "queer" and setup.people.all_had_sex_with().length gt 0>>
<<elseif ($pc.has_part("penis") and $virginity.includes("penis") and $virginity.includes("anus")) or ($pc.has_part("vagina") and $virginity.includes("vagina"))>>
You are still a <<highlight sexy>>virgin<</highlight>>.<br><br>
<</if>>
<<set _clothing to $pc.list_clothing($pc)>>
<!--You are wearing <<= setup.colorize_string(_clothing)>>.<br><br>-->
You are wearing _clothing.<br><br>
<<set _style to $pc.english_evident_styles()>>
<<set _stylelist to []>>
<<for _stylemag range _style>>
<<if _stylelist.length lt 3>>
<<run _stylelist.push(_stylemag)>>
<</if>>
<</for>>
<<if _stylelist.length gt 0>>
Others will probably perceive your style as <<and _stylelist>>.
<</if>>
<<if $pchorny gt 1>>
You're <<highlight sexy>>desperately horny<</highlight>>. It's really distracting!
<<elseif $pchorny gt 0>>
You feel <<highlight sexy>>horny<</highlight>>, just bad enough to actually be distracting.
<</if>>
</div><<set $pc.hairiness to ["shaved", "stubble", "average", "hairy", "very hairy"].indexOf($pc.pubic_style)>>
<<if $pc.hairiness is -1>><<set $pc.hairiness to 2>><</if>>
<<customizepc $lastlocpassage>><<charactertabs>>
<br><br>
<<set _stats to ["height", "plumpness", "muscle", "breast size", "penis size", "ass size"]>>
<div style="width: 32em; margin: auto;">
<table class="stats-table">
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Height</b></td>
<td class="stats-table"><<= Meter(setup.pc()["height"], 1000, "hzphysHeightbar", true);>>
</td></tr>
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Plumpness</b></td>
<td class="stats-table"><<= Meter(setup.pc()["plumpness"], 1000, "hzphysPlumpbar", true);>>
</td></tr>
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Muscles</b></td>
<td class="stats-table"><<= Meter(setup.pc()["muscle"], 1000, "hzphysMusclebar", true);>>
</td></tr>
<<if $pc.has_part("breasts")>>
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Breasts</b></td>
<td class="stats-table"><<= Meter(setup.pc()["breast size"], 1000, "hzphysBreastbar", true);>>
</td></tr>
<</if>>
<<if $pc.has_part("penis")>>
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Penis</b></td>
<td class="stats-table"><<= Meter(setup.pc()["penis size"], 1000, "hzphysPenisbar", true);>>
</td></tr>
<</if>>
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Ass</b></td>
<td class="stats-table"><<= Meter(setup.pc()["ass size"], 1000, "hzphysAssbar", true);>>
</td></tr>
</table>
<<highlight small>>Note: Bars depict magnitude, not attractiveness! People can be attracted to all sorts!<</highlight>>
<br><br>
<table class="stats-table">
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Physicality</b></td>
<td class="stats-table"><<= Meter(setup.pc().physicality_granular(), 1000, "hzphysPhysicalitybar", true);>>
</td></tr>
</table>
<<highlight small>>Physicality is the strength of your physical presence. It's an average of your Physical skill, height, and muscle or plumpness (whichever is greater).<</highlight>>
<br><br>
<table class="stats-table">
<tr class="stats-table"><td class="stats-table" style="width: 25%; text-align: center;"><b>Athleticism</b></td>
<td class="stats-table"><<= Meter(setup.pc().athleticism_granular(), 1000, "hzphysAthleticismbar", true);>>
</td></tr>
</table>
<<highlight small>>Athleticism is a measure of your physical strength and endurance. It's an average of your Physical skill and muscle.<</highlight>>
<br><br>
<<if $pcturnons and $pcturnons.length gt 0>>
<<set _pcturnons to $pcturnons.map(turnon => "<<highlight sexy>>" + turnon + "<</highlight>>")>>
Your turnons: <<and _pcturnons>>
<br>
<</if>>
<<if $pcturnoffs and $pcturnoffs.length gt 0>>
<<set _pcturnoffs to $pcturnoffs.map(turnon => "<<highlight otherskill>>" + turnon + "<</highlight>>")>>
Your turnoffs: <<and _pcturnoffs>>
<br>
<</if>>
<<if $cheatsenabled>>
<br><br>
<<link "Reduce plumpness">>
<<set $pc["plumpness"] to Math.clamp($pc["plumpness"] - 100, 0, 1000)>>
<<set $pcstats["plumpness"] to $pc["plumpness"]>>
<<run setup.open_dialog("CharacterStats", "Character Stats")>>
<</link>>
<<link "Increase plumpness">>
<<set $pc["plumpness"] to Math.clamp($pc["plumpness"] + 100, 0, 1000)>>
<<set $pcstats["plumpness"] to $pc["plumpness"]>>
<<run setup.open_dialog("CharacterStats", "Character Stats")>>
<</link>>
<br>
<<link "Reduce muscles">>
<<set $pc["muscle"] to Math.clamp($pc["muscle"] - 100, 0, 1000)>>
<<set $pcstats["muscle"] to $pc["muscle"]>>
<<run setup.open_dialog("CharacterStats", "Character Stats")>>
<</link>>
<<link "Increase muscles">>
<<set $pc["muscle"] to Math.clamp($pc["muscle"] + 100, 0, 1000)>>
<<set $pcstats["muscle"] to $pc["muscle"]>>
<<run setup.open_dialog("CharacterStats", "Character Stats")>>
<</link>>
<</if>>
</div><<charactertabs>>
<br><br>
<<if ndef $diary>><<set $diary to "">><</if>>
What's happening in <<nickname $pc>>'s life? Write whatever you want here.
<br><br>
<<textarea "$diary" $diary autofocus>>
<br><br>
<<highlight small>>Warning: Storing a very large amount of text here may make your save file too large for certain browsers or devices.<</highlight>><<nobr>>
<<if $madeclothingadjustments>>
<<run State.display('FinishClothingAdjustment')>>
<<unset $madeclothingadjustments>>
<</if>>
<<if V.ClothingCoverageBack>>
<<link "\<Back">>
<<script>>
Dialog.setup(V.ClothingCoverageBack.Name);
Dialog.wiki(Story.get(V.ClothingCoverageBack.Passage).processText());
Dialog.open();
<</script>>
<<unset $ClothingCoverageBack>>
<</link>>
<</if>>
<<set _allparts to $pc.body_parts>>
<<set _allclothes to $pc.sort_clothing_by_layer($pc.clothes)>>
<<if _allclothes.length is 0>>
<br><br>
You aren't wearing any clothes. Nothing is covered.
<<else>>
<!--<<run console.log(_allclothes)>>-->
<<set _lastpart = "nothing">>
<table border=1><tr><td>Location</td>
<<for _item range _allclothes>>
<td width=24 padding=3 style="writing-mode: vertical-rl;
text-orientation: mixed;"><<= _item.item>></td>
<</for>>
</tr>
<<for _part range _allparts>>
<<if _part != _lastpart>>
<tr><td><<=_part>></td>
<<for _item range _allclothes>>
<!-- convert to ClothingItem class -->
<<set _cItem to new ClothingItem(_item)>>
<<set _covers to _cItem.get_archetype_prop("covers")>>
<<set _occupies to _cItem.get_archetype_prop("occupies")>>
<<if _covers.indexOf(_part) isnot -1>>
<td bgcolor="Blue" style="text-align: center;">X
</td>
<<elseif _occupies and _occupies.indexOf(_part) isnot -1>>
<td bgcolor="Gray">
</td>
<<else>>
<td> </td>
<</if>>
<</for>>
</tr>
<</if>>
<<set _lastpart = _part>>
<</for>>
</table>
<</if>>
<</nobr>><<nobr>>
<<script>>
V.dialogCloseFn = function()
{
if (V.ChangeClothesBack)
{
console.log("Back was present! ",V.ChangeClothesBack);
delete V.ChangeClothesBack;
}
}
<</script>>
<<if V.ChangeClothesBack>>
<<set _back_string = "\<Back ( "+V.ChangeClothesBack.Name+" )">>
<<link _back_string>>
<<script>>
Dialog.setup(V.ChangeClothesBack.Name);
Dialog.wiki(Story.get(V.ChangeClothesBack.Passage).processText());
Dialog.open();
<</script>>
<<unset $ChangeClothesBack>>
<</link>>
<</if>>
<<debug>>
<<= setup.and(tags())>><br>
<</debug>>
You have <<= setup.outfits_per_clothing_storage[V.pc.has_storage_sized("clothes")]>> outfits along.<br>
There are <<= V.pc.get_storage_location("carrying").get_item_count()>> items in "carrying".<br>
<</nobr>><<nobr>>
<!--
List every clothing item the player has (separate lines)
Under each clothing item list the potential configurable
things and what their options are, with the current
selection selected.
-->
<<script>>
T.style_list = function(style_obj)
{
let result = [];
if (style_obj != null)
{
for (const [key, value] of Object.entries(style_obj))
{
result.push(key+": "+value);
}
}
if (result.length > 1)
return setup.and(result);
else
return "No Styles";
};
T.pc_styles = function()
{
let result = [];
let styles = V.pc.calcstyle();
for (const style_info of styles)
{
result.push(style_info[0]+": "+style_info[1]);
}
return setup.and(result);
};
<</script>>
<<debug>><<link "Change Clothes">>
<<set $ChangeClothesBack = {Name:"CURRENT OUTFIT", Passage:"ChangeClothingConfig"}>>
<<script>>
setup.open_dialog("ChangeClothes","Change Clothes");
<</script>>
<</link>><br><br><</debug>>
<<set _radio_enabled = setup.passage_safe() || tags().indexOf("finishclothing") >= 0 >>
<<set $ClothingDetailsDialog = {}>>
<<set $ClothingDetailsDialog.back = {Name:"CURRENT OUTFIT", Passage:"ChangeClothingConfig"}>>
<<set _clothes to $pc.get_clothingItems_classes()>>
<<set _cConfigTemp to {}>>
<table class="clothing-table">
<tr><td width=100% colspan=2><<debug>>PC Styles:<br><<= `<span id="pc_styles">`+T.pc_styles()+"</span>">><</debug>></td></tr>
<<for _cItem range _clothes>>
/*<<run console.log("ChangeClothingConfig updating _cConfigTemp: ",_cItem)>>*/
<<set _spanID_name = _cItem.get_item(true)+"_name">>
<<set _spanID_desc = _cItem.get_item(true)+"_desc">>
<<set _spanID_debug = _cItem.get_item(true)+"_debug">>
<<set _cConfigTemp[_cItem.get_item(true)] = {}>>
<<set _cConfigTemp[_cItem.get_item(true)]["class_obj"] = _cItem>>
<<set _cConfigTemp[_cItem.get_item(true)]["span_id_name"] = _spanID_name>>
<<set _cConfigTemp[_cItem.get_item(true)]["span_id_desc"] = _spanID_desc>>
<<set _cConfigTemp[_cItem.get_item(true)]["span_id_debug"] = _spanID_debug>>
<<set _cConfigTemp[_cItem.get_item(true)]["input_ids"] = {}>>
<tr><td class="clothing-table-item" colspan=2>
<<= `<span id="`+_spanID_name+`">`+setup.capitalize_each(_cItem.get_name(true))+"</span>">>
<<capture _cItem>>
<<debug-inline>>
<<link "Details">>
<<set $ClothingDetailsDialog.item = _cItem>>
<<script>>
Dialog.setup("Clothing Details: "+V.ClothingDetailsDialog.item.get_name());
Dialog.wiki(Story.get("ClothingDetails").processText());
Dialog.open(null,function(){delete V.ClothingDetailsDialog;});
<</script>>
<</link>>
<</debug-inline>>
<</capture>>
</td></tr>
<tr><td width=100% colspan=2><<debug>><<= `<span id="`+_spanID_debug+`">`+T.style_list(_cItem.get_archetype_prop("style factor"))+"</span>">><</debug>></td></tr>
<<if _cItem.get_configuration_descriptions().length > 0>>
<tr><td class="clothing-table-description" colspan=2>
<<= `<span id="`+_spanID_desc+`">`+setup.capitalize(setup.and(_cItem.get_configuration_descriptions()))+".</span>">>
</td></tr>
<</if>>
<<set _configs to _cItem.get_configuration_categories()>>
<<for _config range _configs>>
<<set _cConfigTemp[_cItem.get_item(true)]["input_ids"][_config] = {}>>
<tr><td class="clothing-table-option-name"><<= setup.capitalize(_config)>>:</td><td class="clothing-table-options">
<<set _config_opts to _cItem.get_configuration_options(_config)>>
<div onchange='
for (const [tItem,tValue] of Object.entries(T.cConfigTemp))
{
if (tValue.class_obj.get_configuration_categories().length > 0)
{
var new_name = SugarCube.setup.capitalize_each(tValue.class_obj.get_name(true));
var new_description = SugarCube.setup.capitalize(SugarCube.setup.and(tValue.class_obj.get_configuration_descriptions()))+".";
var new_debug = T.style_list(tValue.class_obj.get_archetype_prop("style factor"));
document.getElementById(tValue.span_id_name).innerText=new_name;
document.getElementById(tValue.span_id_desc).innerText=new_description;
document.getElementById(tValue.span_id_debug).innerText=new_debug;
document.getElementById("pc_styles").innerText=T.pc_styles();
for (const [cfg_name, cfg_options] of Object.entries(tValue.input_ids))
{
for (const [opt, baseid] of Object.entries(cfg_options))
{
let exhibreq = 0;
let canbenaked = V.lastloctags.includesAny(["locblockResidenceHall", "stripallowed"]) && V.location != "MainHall";
let current_config = tValue.class_obj.get_configuration(cfg_name);
tValue.class_obj.set_configuration(cfg_name,opt);
exhibreq = SugarCube.setup.base_exhibitionism_requirement();
let toonaked = !canbenaked && !V.pc.fully_dressed() && !V.pc.inoffensive_topless();
tValue.class_obj.set_configuration(cfg_name,current_config);
/*console.log(tValue.class_obj.get_name(true)+" "+cfg_name+" "+opt+" needs Exhibitionism "+exhibreq+" (PC has Exhib "+V.pc.skill_level("Exhibitionism")+")");*/
/* disable if needed */
document.getElementById("radio-"+baseid).disabled = (!T.radio_enabled || (V.pc.skill_level("Exhibitionism") < exhibreq) || toonaked);
document.getElementById("exhib-"+baseid).innerText=exhibreq;
if (0 == exhibreq)
{
document.getElementById("exlabel-"+baseid).style.display = "none";
document.getElementById("exhib-"+baseid).style.display = "none";
}
else
{
document.getElementById("exlabel-"+baseid).style.display = "inline";
document.getElementById("exhib-"+baseid).style.display = "inline";
}
}
}
}
}
V.madeclothingadjustments = true;
V.dialogCloseFn = function(){SugarCube.State.display("FinishClothingAdjustment")};
'>
<<for _config_idx to 0; _config_idx lt _config_opts.length; _config_idx++>>
<<set _config_opt = _config_opts[_config_idx]>>
<!-- Capture variables as they currently are, for use in the script when the button is clicked -->
<<set _baseID = _cItem.get_item(true) +"-"+ _config+ "-" + _config_opt>>
<<set _baseID = _baseID.replace(/[^0-9a-z\-]/gi, '').toLowerCase()>>
<<set _radioID = "radio-" + _baseID>>
<<set _exhibID = "exhib-" + _baseID>>
<!-- this is the ID that SugarCube generates for the radiobutton.
Example:
document.getElementById(T.cConfigTemp['ZipupLightHoodie']['input_ids']['half-zipped']).disabled = true/false
-->
<<set _cConfigTemp[_cItem.get_item(true)]["input_ids"][_config][_config_opt] = _baseID>>
<<set _checked = "">>
<<set _disabled_str = "">>
<<if (_config_opt == _cItem.get_configuration(_config))>>
<<set _checked = "checked">>
<</if>>
<!--
Save current configuration
change configuration to radio-button configuration
calculate exhibition requirement ( setup.base_exhibitionism_requirement() )
add text.
restore previous configuration
-->
<<set _exhibreq = setup.base_exhibitionism_requirement()>>
<<set _canbenaked to $lastloctags.includesAny(["locblockResidenceHall", "stripallowed"]) and $location isnot "MainHall">>
<<script>>
let current_config = T.cItem.get_configuration(T.config);
if (T.config_opt != current_config)
{
T.cItem.set_configuration(T.config,T.config_opt);
T.exhibreq = setup.base_exhibitionism_requirement();
T.toonaked = !T.canbenaked && !V.pc.fully_dressed() && !V.pc.inoffensive_topless();
T.cItem.set_configuration(T.config,current_config);
/*console.log(T.cItem.get_name()+" "+T.config+" "+T.config_opt+" needs Exhibitionism "+T.exhibreq+" (PC has Exhib "+V.pc.skill_level("Exhibitionism")+")");*/
if (!T.radio_enabled || V.pc.skill_level("Exhibitionism") < T.exhibreq || T.toonaked)
{
T.disabled_str = " disabled"
}
}
<</script>>
<<= '<input type="radio" id=radio-'+_cConfigTemp[_cItem.get_item(true)]["input_ids"][_config][_config_opt]+' name='+_cItem.get_item(true)+_config+' value='+_config_opt+' '+_checked+' onchange="T.cConfigTemp[\''+ _cItem.get_item(true)+'\'][\'class_obj\'].set_configuration(\''+_config+'\',\''+_config_opt+'\')"'+_disabled_str+'>'>>
<<= '<label for=radio-'+_cConfigTemp[_cItem.get_item(true)]["input_ids"][_config][_config_opt]+'>'+setup.capitalize_each(_config_opt)+'</label>'>>
<<if _exhibreq == 0>>
<<= "<span id='exlabel-"+_baseID+"' class='mainskill skillcheck hidden'>Exhibitionism </span>">>
<<= `<span id="exhib-`+_baseID+`" class='skillcheck small hidden'>`+_exhibreq+"</span>">>
<<else>>
<<= "<span id='exlabel-"+_baseID+"' class='mainskill skillcheck'>Exhibitionism </span>">>
<<= `<span id="exhib-`+_baseID+`" class='skillcheck small'>`+_exhibreq+"</span>">>
<</if>>
<br>
<</for>>
</div>
</td></tr>
<</for>>
<</for>>
</table><br><br>
<<link "Clothing Coverage">>
<<set $ClothingCoverageBack = {Name:"CURRENT OUTFIT", Passage:"ChangeClothingConfig"}>>
<<script>>
Dialog.setup("Clothing Coverage");
Dialog.wiki(Story.get("ClothingCoverage").processText());
Dialog.open(null,function(){delete V.ClothingCoverageBack;});
<</script>>
<</link>><br><br>
<<debug>>
<b>TESTING:</b><br>
<<link "Clothing Validation">>
<<set $ClothingCoverageBack = {Name:"CURRENT OUTFIT", Passage:"ChangeClothingConfig"}>>
<<script>>
Dialog.setup("Clothing Validation");
Dialog.wiki(Story.get("ClothingValidation").processText());
Dialog.open(null,function(){delete V.ClothingCoverageBack;});
<</script>>
<</link>><br><br>
<<set _lbAnswer = "">>
<<set _rawOptions = {}>>
<<for _cItem range Object.entries(setup.clothes)>>
<<set _itemType = typeof(_cItem[1])>>
<<if _itemType isnot "function">>
<<run _rawOptions[_cItem[1].category+": "+_cItem[0]] = _cItem[0]>>
<</if>>
<</for>>
<!-- sort -->
<<set _lbOptions = {}>>
<<set _sortArray = Object.keys(_rawOptions).sort()>>
<<for _itemName range _sortArray>>
<<run _lbOptions[_itemName] = _rawOptions[_itemName]>>
<</for>>
All Clothing Items:<br>
<<listbox "_lbAnswer">>
<<optionsfrom _lbOptions>>
<</listbox>><br>
<<button "Details">>
<<set $ClothingDetailsDialog.item = new ClothingItem(_lbAnswer)>>
<<script>>
Dialog.setup("Clothing Details: "+V.ClothingDetailsDialog.item.get_name());
Dialog.wiki(Story.get("ClothingDetails").processText());
Dialog.open(null,function(){delete V.ClothingDetailsDialog;});
<</script>>
<</button>>
<<button "Give Selected Item">>
<<set $debugGiveClothing = _lbAnswer>>
<<set $ClothingGiveBack = {Name:"CURRENT OUTFIT", Passage:"ChangeClothingConfig"}>>
<<script>>
Dialog.setup("Give Clothing");
Dialog.wiki(Story.get("ClothingGive").processText());
Dialog.open(null,function(){delete V.ClothingGiveBack;});
<</script>>
<</button>>
<</debug>>
<</nobr>><!-- configure clothing item in $debugGiveClothing, then allow addition
to storage location(s) or wear it(maybe) -->
<<nobr>>
<<if V.ClothingGiveBack>>
<<link "\<Back">>
<<script>>
Dialog.setup(V.ClothingGiveBack.Name);
Dialog.wiki(Story.get(V.ClothingGiveBack.Passage).processText());
Dialog.open();
<</script>>
<<unset $ClothingGiveBack>>
<</link>>
<</if>>
<<if $debugGiveClothing>>
<br><br>
<<= $debugGiveClothing>>
<<set _cItem = new ClothingItem($debugGiveClothing)>>
<<set _subs = {}>>
<<unset $debugGiveClothing>>
<<set _sub_info = _cItem.get_subs()>>
<<for _subname range Object.keys(_sub_info)>>
<<set _listTarget to "_subs['" + _subname + "']">>
<br><br>_subname:
<<listbox _listTarget>><<optionsfrom _sub_info[_subname]>><</listbox>>
<</for>>
<br><br>
<<set _storageTarget = "dormcloset">>
Location:<<listbox "_storageTarget">><<optionsfrom setup.possible_storage_locations>><</listbox>>
<br>
<<button "Put in Location">>
<<run _cItem.set_subs(_subs)>>
<<run $pc.get_storage_location(_storageTarget).add(_cItem)>>
<<script>>
Dialog.setup(V.ClothingGiveBack.Name);
Dialog.wiki(Story.get(V.ClothingGiveBack.Passage).processText());
Dialog.open();
<</script>>
<<unset $ClothingGiveBack>>
<</button>>
<</if>>
<</nobr>><!-- Display 'deep' details on a piece of clothing, requires a class -->
<<nobr>>
<<if $ClothingDetailsDialog>>
<<set _cItem = $ClothingDetailsDialog.item>>
<<set _cItemArchetype = setup.clothes[_cItem.get_item()]>>
<<link "\<Back">>
<<script>>
Dialog.setup(V.ClothingDetailsDialog.back.Name);
Dialog.wiki(Story.get(V.ClothingDetailsDialog.back.Passage).processText());
Dialog.open();
<</script>>
<</link>>
<<button "Console Log Item">>
<<run console.log(_cItem.get_item())>>
<<run console.log("ClothingItem Class: ", _cItem)>>
<<run console.log("Archetype: ", _cItemArchetype)>>
<</button>>
<table border=1>
<tr><th colspan=3>Name</th></tr>
<tr><td></td><td>Normal:</td><td><<= _cItem.get_name()>></td></tr>
<tr><th colspan=3>Item</th></tr>
<tr><td></td><td>Normal:</td><td><<= _cItem.get_item()>></td></tr>
<tr><td></td><td>Code:</td><td><<= _cItem.get_item(true)>></td></tr>
<tr><th colspan=3>Descriptions</th></tr>
<<if _cItem.get_descriptions_list().length == 0>>
<tr><td colspan=3><b>NO DESCRIPTIONS PRESENT</b></td></tr>
<<else>>
<<for _desc_str range _cItem.get_descriptions_list()>>
<<set _full_str = "description "+_desc_str>>
<tr><td rowspan=2>_full_str</td><td>Raw:</td><td><<=_cItemArchetype[_full_str]>></td></tr>
<tr><td>Final:</td><td><<= _cItem.get_description(_desc_str)>></td></tr>
<</for>>
<</if>>
</table>
<br><br>
<table border=1>
<tr><th colspan=2>Clothing Archetype</th></tr>
<tr><th>Key</th><th>Value</th></tr>
<<for _ckey range Object.entries(_cItemArchetype)>>
<<set _tStr = JSON.stringify(_ckey[1], undefined, 2).trim()>>
<tr><td><<= _ckey[0]>></td><td><pre>_tStr</pre></td></tr>
<</for>>
</table>
<<set _ClothingDetails = {}>>
<<script>>
/*console.log("CDD: ",V.ClothingDetailsDialog.item, Object.entries(V.ClothingDetailsDialog.item));*/
for (const [key,value] of Object.entries(V.ClothingDetailsDialog.item))
{
/*console.log("Key info: ",key,value);*/
T.ClothingDetails[key] = value;
}
<</script>>
<br><br>
<table border=1>
<tr><th colspan=2>ClothingItem Class</th></tr>
<tr><th>Key</th><th>Value</th></tr>
<<for _ckey range Object.entries(_ClothingDetails)>>
<tr><td><<= _ckey[0]>></td><td><pre><<= JSON.stringify(_ckey[1], undefined, 2).trim()>></pre></td></tr>
<</for>>
</table>
<<else>>
ERROR: No ClothingItem for details provided!
<</if>>
<</nobr>><<nobr>>
<<set $ClothingDetailsDialog = {}>>
<<set $ClothingDetailsDialog.back = {Name:"CLOTHING VALIDATION", Passage:"ClothingValidation"}>>
<<if V.ClothingCoverageBack>>
<<link "\<Back">>
<<script>>
Dialog.setup(V.ClothingCoverageBack.Name);
Dialog.wiki(Story.get(V.ClothingCoverageBack.Passage).processText());
Dialog.open();
<</script>>
<<unset $ClothingCoverageBack>>
<</link>>
<</if>>
<<set _vResult = setup.clothes.validate(false)>>
<table class="validator">
<tr><th colspan=3>Clothing Validation Results</th></tr>
<tr><td colspan=3>
<center>
<table><tr><td width=200>_vResult.run_info.count items scanned</td>
<<if _vResult.run_info.success>>
<td bgcolor="green" width=200><b>Result: Success</b></td>
<<else>>
<td bgcolor="red" width=200><b>Result: Failure</b></td>
<</if>>
</tr>
</table>
</center>
</td></tr>
<<if _vResult.info.length > 0>>
<tr><td class="info" width=24>Info (_vResult.info.length)</td>
<td colspan=3><table class="validator-details-info">
<tr><th>Clothing</th><th>Field</th><th>Note</th></tr>
<<for _info_item range _vResult.info>>
<tr><td>
<<capture _info_item>>
<<link _info_item.Clothing>>
<<set $ClothingDetailsDialog.item = new ClothingItem(_info_item.Clothing)>>
<<script>>
Dialog.setup("Clothing Details: "+V.ClothingDetailsDialog.item.get_item());
Dialog.wiki(Story.get("ClothingDetails").processText());
Dialog.open(null,function(){delete V.ClothingDetailsDialog;});
<</script>>
<</link>>
<</capture>>
</td><td>_info_item.Field</td><td>_info_item.Note</td></tr>
<</for>>
</table></td></tr>
<tr><td> </td></tr>
<</if>>
<<if _vResult.warnings.length > 0>>
<tr><td class="warn" width=24>Warnings (_vResult.warnings.length)</td>
<td colspan=3><table class="validator-details-warn">
<tr><th>Clothing</th><th>Field</th><th>Note</th></tr>
<<for _info_item range _vResult.warnings>>
<tr><td>
<<capture _info_item>>
<<link _info_item.Clothing>>
<<set $ClothingDetailsDialog.item = new ClothingItem(_info_item.Clothing)>>
<<script>>
Dialog.setup("Clothing Details: "+V.ClothingDetailsDialog.item.get_item());
Dialog.wiki(Story.get("ClothingDetails").processText());
Dialog.open(null,function(){delete V.ClothingDetailsDialog;});
<</script>>
<</link>>
<</capture>>
</td><td>_info_item.Field</td><td>_info_item.Note</td></tr>
<</for>>
</table></td></tr>
<tr><td> </td></tr>
<</if>>
<<if _vResult.errors.length > 0>>
<tr><td class="error" width=24>Errors (_vResult.errors.length)</td>
<td colspan=3><table class="validator-details-error">
<tr><th>Clothing</th><th>Field</th><th>Note</th></tr>
<<for _info_item range _vResult.errors>>
<tr><td>
<<capture _info_item>>
<<link _info_item.Clothing>>
<<set $ClothingDetailsDialog.item = new ClothingItem(_info_item.Clothing)>>
<<script>>
Dialog.setup("Clothing Details: "+V.ClothingDetailsDialog.item.get_item());
Dialog.wiki(Story.get("ClothingDetails").processText());
Dialog.open(null,function(){delete V.ClothingDetailsDialog;});
<</script>>
<</link>>
<</capture>>
</td><td>_info_item.Field</td><td>_info_item.Note</td></tr>
<</for>>
</table></td></tr>
<</if>>
</table>
<</nobr>><<unset $madeclothingadjustments>>
<<set _msgs to [
"You fiddle with your clothing, adjusting this and that.",
"You adjust your clothing. Is all this effort really worth it? Are college students <i>that</i> shallow?<br><br>Actually, better double-check it.",
"This is it. This is the look. Or is it?",
"You make some... <i>interesting</i> choices with your clothing.",
"That was it... the final touch this outfit needed.",
"You adjust your outfit. There, that's better!",
]>>
<<= setup.randomchoice(_msgs)>>
<<unset _msgs>>
<br><br>
<<continuelink>><<include CustomizeNPC>>
<br>
<div id="customizenpcerror"></div>
<<link "Finish customization and save">>
<<set _valid = true>>
<<if !_displayname>><<set _displayname to $npctocustomize.person>><</if>>
<<set _displayname to setup.capitalize_each(Util.escapeMarkup(_displayname.trim()))>>
<<if _displayname is $npctocustomize.person>>
<<run delete $people[$npctocustomize.person].displayname>>
<<elseif _displayname isnot $people[$npctocustomize.person].displayname and _displayname isnot $npctocustomize.person>>
<<if _displayname eq "">>
<<replace "#customizenpcerror">><<highlight bad>>Please enter a name.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif _displayname.indexOf(' ') == -1>>
<<replace "#customizenpcerror">><<highlight bad>>Please enter both a first and last name.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif _displayname.length lt 5>>
<<replace "#customizenpcerror">><<highlight bad>>That name is too short.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif _displayname.length gt 60>>
<<replace "#customizenpcerror">><<highlight bad>>That name is too long.<</highlight>><</replace>>
<<set _valid = false>>
<<elseif setup.name_in_use(_displayname, true)>>
<<replace "#customizenpcerror">><<highlight bad>>That name is already in use.<</highlight>><</replace>>
<<set _valid = false>>
<<else>>
<<set $people[$npctocustomize.person].displayname to _displayname>>
<</if>>
<</if>>
<<if _valid>>
<<set _changedpdata to Object.assign({}, $people[$npctocustomize.person])>>
<<set $people[$npctocustomize.person] to _changedpdata>>
<<unset $npctocustomize>>
<<run Dialog.close()>>
<</if>>
<<unset _displayname>>
<</link>><br>
<<link "Reset and cancel">>
/* Dialog close callback is NOT called if this is pressed, so still needs to be handled */
<<set $people[$npctocustomize.person] to _origpdata>>
<<run Dialog.close()>>
<<unset $npctocustomize>>
<<unset _displayname>>
<</link>><<set _p to $npctocustomize.person>>
<<set _origpdata to Object.assign({}, setup.people.get_person(_p))>>
<<unset _foundniche>>
<<for _niche range Object.keys($niches)>>
<<if $niches[_niche] is _p>>
<<set _foundniche to _niche>>
<<break>>
<</if>>
<</for>>
/* Additional config that can be set before including this passage */
<<if def _customnpcdescription>>
<<if setup.people.is_known(_p)>><<fullname _p>><<else>>This <<manwoman _p>><</if>> is _customnpcdescription.
<<elseif _foundniche>>
<<if setup.people.is_known(_p)>><<fullname _p>><<else>>This <<manwoman _p>><</if>> is _foundniche.
<<else>>
<<set _rels to setup.people.relation(_p)>>
<<if _rels.length gt 0>>
<<if setup.people.is_known(_p)>><<fullname _p>><<else>>This <<manwoman _p>><</if>> is your <<and _rels>>.
<<else>>
<<if setup.people.is_known(_p)>><<fullname _p>><<else>>This <<manwoman _p>><</if>> is just some <<boygirl _p>>.
<</if>>
<</if>>
<<if setup.people.is_known(_p)>>
<<set _name to setup.people.fullname(_p)>>
<<set _displayname to _name>>
<br><br>
Customize name:
<span id="customizename">
<<textbox "_displayname" _name>>
</span>
<<button "Random name">>
<<set _gender to setup.people.get_gender(_p)>>
<<set _displayname to setup.unique_random_name(_gender)>>
<<replace "#customizename">>
<<textbox "_displayname" _displayname>>
<</replace>>
<</button>>
<</if>>
<br><br>
<<psc>> <<conj have>>
<span id="skincolorchoice" class="nokeys">
[
<<for _i, _skincolor range setup.skin_colors>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["skin color"] == _skincolor) ? "notice" : "">>
<span @class=_textclass>
<<capture _skincolor>><<link _skincolor>>
<<set $people[_p]["skin color"] to _skincolor>><<replace "#skincolorchoice">>_skincolor<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>
skin and
<span id="eyecolorchoice" class="nokeys">
[
<<for _i, _eyecolor range setup.eye_colors>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["eye color"] == _eyecolor) ? "notice" : "">>
<span @class=_textclass>
<<capture _eyecolor>><<link _eyecolor>>
<<set $people[_p]["eye color"] to _eyecolor>><<replace "#eyecolorchoice">>_eyecolor<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>
eyes.<br><br>
<<psc _p>> <<conj have>>
<span id="hairlengthchoice" class="nokeys">
[
<<for _i, _hairlength range setup.hairlengths>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["hair length"] == _hairlength) ? "notice" : "">>
<span @class=_textclass>
<<capture _hairlength>><<link _hairlength>>
<<set $people[_p]["hair length"] to _hairlength>><<replace "#hairlengthchoice">>_hairlength<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>
<span id="haircolorchoice" class="nokeys">
[
<<set _allhaircolors to [...setup.hair_colors, ...setup.dye_hair_colors]>>
<<for _i, _haircolor range _allhaircolors>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["hair color"] == _haircolor) ? "notice" : "">>
<span @class=_textclass>
<<capture _haircolor>><<link _haircolor>>
<<set $people[_p]["hair color"] to _haircolor>><<replace "#haircolorchoice">>_haircolor<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>
hair.<br><br>
<<ppc>> preferred hairstyle is
<span id="hairstylechoice" class="nokeys">
[
<<set _hairstyles to Object.keys(setup.hairstyles)>>
<<for _i, _hairstyle range _hairstyles>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["hair style"] == _hairstyle) ? "notice" : "">>
<span @class=_textclass>
<<capture _hairstyle>><<link _hairstyle>>
<<set $people[_p]["hair style"] to _hairstyle>><<replace "#hairstylechoice">>_hairstyle<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>.<br><br>
<<if $npctocustomize.grows_beard>>
<<ppc>> preferred beard style is
<span id="beardstylechoice" class="nokeys">
[
<<set _beardstyles to Object.keys(setup.Cosmetics.beard_styles)>>
<<for _i, _beardstyle range _beardstyles>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["beard_style"] == _beardstyle) ? "notice" : "">>
<span @class=_textclass>
<<capture _beardstyle>><<link _beardstyle>>
<<set $people[_p]["beard_style"] to _beardstyle>><<replace "#beardstylechoice">>_beardstyle<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>.<br><br>
<</if>>
<<set _changeoutfittypes to ["student", "townie"]>>
<<if _changeoutfittypes.includes(setup.people.get_type(_p)) and !setup.archetypes[setup.people.archetype(_p)].nocustomization>>
<<ppc>> preferred style of dress is
<<set _styles to []>>
<<for _style range Object.keys(setup.styles)>>
<<if !setup.styles[_style].reserved>>
<<run _styles.push(_style)>>
<</if>>
<</for>>
<span id="stylechoice" class="nokeys">
[
<<for _i, _style range _styles>>
<<if _i gt 0>> | <</if>>
<<set _linkname to _style.toLowerCase()>>
<<set _textclass to ($npctocustomize["style"] == _style) ? "notice" : "">>
<span @class=_textclass>
<<capture _style,_linkname>><<link _linkname>>
<<set $people[_p]["style"] to _style>><<replace "#stylechoice">>_linkname<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>.
<br><br>
<</if>>
<<set _pexp to $npctocustomize>>
<div>
<<psc>> also <<conj have>>
<<if setup.people.has_part(_p, "breasts")>>
<span id="breastval" class="sexy"><<=_pexp.breast_descriptor()>></span>
breasts with
<span id="nippletypechoice" class="nokeys">
[
<<for _i, _nippletype range setup.nipple_types>>
<<if typeof _nippletype isnot "string">><<continue>><</if>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["nipple type"] == _nippletype) ? "notice" : "">>
<span @class=_textclass>
<<capture _nippletype>><<link _nippletype>>
<<set $people[_p]["nipple type"] to _nippletype>><<replace "#nippletypechoice">>_nippletype<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>
nipples
and
<span id="areolaval" class="sexy"><<=_pexp.areola_descriptor(false)>></span>
<span id="areolacolorchoice" class="nokeys">
[
<<for _i, _areolacolor range setup.areola_colors>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["areola color"] == _areolacolor) ? "notice" : "">>
<span @class=_textclass>
<<capture _areolacolor>><<link _areolacolor>>
<<set $people[_p]["areola color"] to _areolacolor>><<replace "#areolacolorchoice">>_areolacolor<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>
areolas,
<</if>>
<<if setup.people.has_part(_p, "penis")>>
<<if !setup.people.has_part(_p, "breasts")>>
a
<<else>>
and a
<</if>>
<span id="penisval" class="sexy"><<=_pexp.penis_descriptor()>></span>
penis
(which is
<span id="penistypechoice" class="nokeys">
[
<<for _i, _penistype range setup.penis_types>>
<<if typeof _penistype isnot "string">><<continue>><</if>>
<<if _i gt 0>> | <</if>>
<<set _textclass to ($npctocustomize["penis type"] == _penistype) ? "notice" : "">>
<span @class=_textclass>
<<capture _penistype>><<link _penistype>>
<<set $people[_p]["penis type"] to _penistype>><<replace "#penistypechoice">>_penistype<</replace>>
<</link>><</capture>>
</span>
<</for>>
]
</span>)
<</if>>
<<if setup.people.has_part(_p, "breasts") or setup.people.has_part(_p, "penis")>>
and
<</if>>
a
<span id="buttval" class="sexy"><<=_pexp.butt_descriptor()>></span>
butt.
</div>
<ul class="charcustomize-sliders-container prologue-sliders-container">
<<if setup.people.has_part(_p, "breasts")>>
<li>
<<set _breastsize to _pexp["breast size"]>>
<label for="slidebreasts">Breast Size</label>
<input type="range" id="slidebreasts" name="slidebreasts" min="0" max="1000"
@value="_breastsize" class="slider" data-obj="_pexp" data-var="breast size" oninput="SugarCubeInputObject(this)">
</li>
<li>
<<set _areolasize to _pexp["areola size"]>>
<label for="slideareolas">Areola Size</label>
<input type="range" id="slideareolas" name="slideareolas" min="0" max="1000"
@value="_areolasize" class="slider" data-obj="_pexp" data-var="areola size" oninput="SugarCubeInputObject(this)">
</li>
<</if>>
<<if setup.people.has_part(_p, "penis")>>
<li>
<<set _penissize to _pexp["penis size"]>>
<label for="slidepenis">Penis Length</label>
<input type="range" id="slidepenis" name="slidepenis" min="0" max="1000"
@value="_penissize" class="slider" data-obj="_pexp" data-var="penis size" oninput="SugarCubeInputObject(this)">
</li>
<li>
<<set _penissize to _pexp["penis girth"]>>
<label for="slidepenis2">Penis Girth</label>
<input type="range" id="slidepenis2" name="slidepenis2" min="0" max="1000"
@value="_penisgirth" class="slider" data-obj="_pexp" data-var="penis girth" oninput="SugarCubeInputObject(this)">
</li>
<</if>>
<<if setup.people.has_part(_p, "butt")>>
<li>
<<set _buttsize to _pexp["butt size"]>>
<label for="slidebutt">Butt Size</label>
<input type="range" id="slidebutt" name="slidebutt" min="0" max="1000"
@value="_buttsize" class="slider" data-obj="_pexp" data-var="ass size" oninput="SugarCubeInputObject(this)">
</li>
<</if>>
</ul>
<div>
<<psc>> <<conj be>> <span id="heightval" class="sexy"><<= _pexp.height_descriptor()>></span> and <<pp>> overall physique is <span id="physiqueval" class="sexy"><<= _pexp.physique_descriptor()>></span>.
</div>
<ul class="charcustomize-sliders-container">
<li>
<label for="slideheight">Height</label>
<input type="range" id="slideheight" name="slideheight" min="0" max="1000"
@value="_pexp.height" class="slider" data-obj="_pexp" data-var="height" oninput="SugarCubeInputObject(this)">
</li>
<li>
<label for="slideplumpness">Plumpness</label>
<input type="range" id="slideplumpness" name="slideplumpness" min="0" max="1000"
@value="_pexp.plumpness" class="slider" data-obj="_pexp" data-var="plumpness" oninput="SugarCubeInputObject(this)">
</li>
<li>
<label for="slidemuscle">Muscle</label>
<input type="range" id="slidemuscle" name="slidemuscle" min="0" max="1000"
@value="_pexp.muscle" class="slider" data-obj="_pexp" data-var="muscle" oninput="SugarCubeInputObject(this)">
</li>
</ul>
<span class="nokeys">
<<choosedmarks $npctocustomize>>
</span>
<br>
<<script>>
$(document).ready(function()
{
$('input[type="text"]').attr('autocomplete', 'off');
const dialogBody = $("#ui-dialog-body");
function setupSlider(sliderSelector, valueSelector, key, valueCallback)
{
let scrollPosition = 0;
let slider = $(sliderSelector);
let value = $(valueSelector);
slider.on("input", function()
{
const newValue = valueCallback();
if (newValue != value.text())
{
scrollPosition = dialogBody.scrollTop();
value.text(newValue);
setTimeout(function()
{
if (Dialog.isOpen())
{
dialogBody.scrollTop(scrollPosition);
}
slider.focus();
}, 1);
}
V.people[T.pexp.person][key] = T.pexp[key];
});
value.text(valueCallback());
}
setupSlider("#slidebreasts", "#breastval", "breast size", () => T.pexp.breast_descriptor());
setupSlider("#slideareolas", "#areolaval", "areola size", () => T.pexp.areola_descriptor(false));
setupSlider("#slidepenis", "#penisval", "penis size", () => T.pexp.penis_descriptor());
setupSlider("#slidepenis2", "#penisval", "penis girth", () => T.pexp.penis_descriptor());
setupSlider("#slidebutt", "#buttval", "ass size", () => T.pexp.butt_descriptor());
setupSlider("#slideheight", "#heightval", "height", () => T.pexp.height_descriptor());
setupSlider("#slideplumpness", "#physiqueval", "plumpness", () => T.pexp.physique_descriptor());
setupSlider("#slidemuscle", "#physiqueval", "muscle", () => T.pexp.physique_descriptor());
});
<</script>><<widget "choosedmarks">>
<<set _dmarkperson to _args[0]>>
<<if $pc.equals(_dmarkperson)>>
<<unset $ongoingdmarkpick>>
<</if>>
<<if ndef _dmarkexp>><<set _dmarkexp to false>><</if>>
<div id="choose-dmark-container">
<div class="choose-dmark">
<div class="choose-dmark-header">
<span class="choose-dmark-header-text bold">Distinguishing Feature</span>
<span class="choose-dmark-header-minrestore">
<<if _dmarkexp>>
<<set _linkname to String.fromCharCode(0xe81f)>>
<<else>>
<<set _linkname to String.fromCharCode(0xe81c)>>
<</if>>
<<link _linkname>><<set _dmarkexp to !_dmarkexp>><<replace "#choose-dmark-container">><<choosedmarks _dmarkperson>><</replace>><</link>>
</span>
</div>
<<if _dmarkexp>>
<br>
/* add */
<<set _lastcat to "">>
<<set _possible to _dmarkperson.possible_distinguishing_marks(true)>>
<<if _possible.length isnot 0>>
<b>Add a distinguishing feature</b>
<br><br>
<<for _dmark range _possible>>
<<set _cat to setup.distinguishing_marks[_dmark].slot>>
<<if _cat isnot _lastcat>>
_cat:
<br>
<<set _lastcat to _cat>>
<</if>>
<<capture _dmark>>
<<set _linkname to "Add " + _dmark>>
<<link _linkname>>
<<run _dmarkperson.distinguishing_marks.push(_dmark)>>
<<set _pdata to setup.people.get_person(_dmarkperson)>>
<<if _pdata and !$pc.equals(_pdata)>><<set _pdata.distinguishing_marks to _dmarkperson.distinguishing_marks>><</if>>
<<replace "#choose-dmark-container">><<choosedmarks _dmarkperson>><</replace>>
<</link>>
<</capture>>
<br>
<</for>>
<</if>>
/* remove */
<<if _dmarkperson.distinguishing_marks.length gt 0>>
<b>Remove a distinguishing feature</b>
<br><br>
<<for _dmark range _dmarkperson.distinguishing_marks>>
<<capture _dmark>>
<<set _linkname to "Remove " + _dmark>>
<<link _linkname>>
<<run _dmarkperson.distinguishing_marks.delete(_dmark)>>
<<set _pdata to setup.people.get_person(_dmarkperson)>>
<<if _pdata and !$pc.equals(_pdata)>><<set _pdata.distinguishing_marks to _dmarkperson.distinguishing_marks>><</if>>
<<replace "#choose-dmark-container">><<choosedmarks _dmarkperson>><</replace>>
<</link>>
<</capture>>
<br>
<</for>>
<</if>>
<</if>>
</div>
<<done>>
<<script>>
$(".choose-dmark").on("click", function() {
$(this).find(".choose-dmark-header-minrestore").find("a").click();
});
<</script>>
<</done>>
</div>
<</widget>><<if ndef $favoritepeople>><<if $bestfriend>><<set $favoritepeople to [$bestfriend]>><<else>><<set $favoritepeople to []>><</if>><</if>>
<<set $datecardexp to false>>
<<set $schedcardexp to false>>
<<if $npctodisplay is $bestfriend>>
<<run setup.people.repair_bff()>>
<</if>>
<<unset _pobj>>
<<if typeof $npctodisplay is "string">>
<<if $encounter>>
<<set _pobj to $encounter.pobj($npctodisplay)>>
<</if>>
<<set _personobj to _pobj || new Person({person: $npctodisplay})>>
<<else>>
<<set _personobj to $npctodisplay>>
<</if>>
<<set _pdata to setup.people_db()[_personobj.person]>>
<div class="npc-display-header">
<<if !tags().includes("chargen")>>
<<if $fromphone>>
<button id="view-people-backward" tabindex="0" title="Return to phone" aria-label="Return to phone" type="button" role="button"></button>
<<script>>
$(document).ready(function() {
$("#view-people-backward").click(function() {
setup.phone.open("PhoneText");
});
});
<</script>>
<<else>>
<button id="view-people-backward" tabindex="0" title="Return to nearby people menu" aria-label="Return to nearby people menu" type="button" role="button"></button>
<<script>>
$(document).ready(function() {
$("#view-people-backward").click(function() {
Dialog.setup("People", "social");
Dialog.wiki(Story.get("Social").processText());
Dialog.open();
});
});
<</script>>
<</if>>
<</if>>
<<set _gender to setup.people.pronouns(_personobj.person).gender>>
<<set _style to "font-weight: bold; color: " + setup.get_color(_gender) + ";">>
<div @style="_style"><<aoranc _personobj.anonymous_name>> <<= _personobj.anonymous_name>>.</div>
<<if !_personobj.temporary>>
<<set _badges to setup.people.get_badges(_personobj.person)>>
<<if _badges.length > 0 and $optshowemojis>>
<div class="npc-display-badges">
<<for _badge range _badges>>
<div class="npc-display-badge"><<hovertip _badge.tooltip 0>><span class="emoji"><<=_badge.icon>></span><</hovertip>></div>
<</for>>
</div>
<</if>>
<</if>>
</div>
<br>
<<set _temp to _personobj.temporary>>
<<set _anon to setup.people.is_anonymous(_personobj)>>
<<set _relwith to setup.Relationships.relationship_with(_personobj) or Math.abs(setup.people.get_attitude(_personobj.person)) gte setup.people.intro_threshold * 2>>
<<if _personobj.is_pc>>
This is you.
<<elseif !_temp and (setup.people.can_identify_name(_personobj) or _relwith)>>
<<if _anon>>
It requires a bit of scrutiny, but because you're familiar with <<po _personobj>>, you figure it out:
<</if>>
<<set _niche to "">>
<<set _niches to setup.people_niches()>>
<<set _nichekeys to Object.keys(_niches)>>
<<for _i to 0; _i < _nichekeys.length; _i++>>
<<if _niches[_nichekeys[_i]] is _personobj.person>>
<<set _niche to " (" + _nichekeys[_i] + ")">>
<</if>>
<</for>>
This is <<= _personobj.fullname()>>_niche.
<<elseif _anon>>
You can't quite tell who this is.
<<else>>
You don't know this <<= _personobj.label>>'s name.
<</if>>
<<if !_anon or _relwith>>
<<if _temp or _pdata.type is "outsider">>
<<pssc _personobj>> not from around here.
<<elseif !_personobj.is_pc>>
<<set _rel to setup.Relationships.relationship_with(_personobj.person)>>
<<if _rel>>
<<psc _personobj>> <<conj be>> your <<rellabel _personobj _rel>>.
<<elseif $crush and _personobj.equals($crush)>>
<<psc _personobj>> <<conj be>> your crush.
<<elseif setup.people.is_ex(_personobj.person)>>
<<pssc _personobj>> your ex.
<<elseif setup.people.is_crush(_personobj.person)>>
You're pretty sure <<ps _personobj>> <<conj have>> a crush on you.
<<set _known to true>>
<<set _contact to true>>
<<elseif setup.people.is_friendly(_personobj.person) and _pdata.type isnot "faculty">>
<<psc _personobj>> <<conj seem>> to enjoy your company and could be a friend.
<<elseif setup.people.is_hater(_personobj.person) and _pdata.type isnot "faculty">>
<<psc _personobj>> <<conj seem>> to really dislike you.
<<elseif setup.people.get_attitude(_personobj.person, "friendship") gte setup.people.intro_threshold and _pdata.type isnot "faculty">>
<<psc _personobj>> <<conj be>> an acquaintance.
<<set _known to true>>
<<set _contact to true>>
<</if>>
<<set _year to setup.people.get_school_year(_personobj)>>
<<if _year>>
<<if setup.people.is_known(_personobj)>>
<<pssc _personobj>> <<aoran _year>> <<hovertip setup.School.noncohort[_year].tooltip>>_year<</hovertip>>.
<<set _major to $people[_personobj.person].major>>
<<if setup.people.get_attitude(_personobj, "friendship") gte 100 and _major>>
<<ppc _personobj>> major is _major.
<</if>>
<<else>>
You're pretty sure <<pss _personobj>> <<aoran _year>> _year.
<</if>>
<</if>>
<</if>>
<<if ["student", "townie"].includes(setup.people.get_type(_personobj.person)) && setup.people.partner_known(_personobj.person)>>
<<set _rpartner to setup.Relationships.partner(_personobj.person)>>
<<if !_rpartner>>
<<psc _personobj>> <<conj be>> single.
<<elseif !$pc.equals(_rpartner)>>
<<if !setup.people.is_known(_rpartner)>>
<<psc _personobj>> <<conj have>> a <<bfgf _rpartner>> named <<dfirstname _rpartner>>. You don't know <<po _rpartner>>.
<<else>>
<<ppc _personobj>> <<bfgf _rpartner>> is <<fullname _rpartner>>.
<</if>>
<</if>>
<</if>>
<</if>>
<br><br>
<<set _known to false>><<set _semiknown to false>>
<<if !_personobj.is_pc and !_temp and (!_anon or _relwith)>>
<<set _contact to false>>
<<if "job" in _pdata and $jobs.includes(_pdata.job)>>
You work with <<po _personobj>> at <<= _pdata.job>>.
<<set _known to true>>
<</if>>
<<if _pdata.courses>>
<<set _courses to []>>
<<for _i to 0; _i lt _pdata.courses.length; _i++>>
<<if $pccourses.includes(_pdata.courses[_i])>>
<<run _courses.push(_pdata.courses[_i])>>
<</if>>
<</for>>
<<if _courses.length gt 0 and $classesattended and $classesattended[_courses[0]]>>
<<if _pdata.type is "faculty">>
<<psc _personobj>> <<conj be>> your professor in <<and _courses>>.
<<else>>
You have <<and _courses>> with <<po _personobj>>.
<</if>>
<<set _known to true>>
<</if>>
<</if>>
<<if setup.sports_signups_open() and _pdata.sports>>
<<set _theirsport to _pdata.sports[0]>>
<<if $pcsports and $pcsports[0] is _theirsport>>
<<if _pdata.type is "faculty">>
<<psc _personobj>> <<conj be>> your _theirsport coach.
<<else>>
<<pssc _personobj>> your _theirsport teammate.
<</if>>
<<set _known to true>>
<<elseif _pdata.type is "faculty">>
<<pssc _personobj>> the _theirsport coach.
<<set _semiknown to true>>
<<else>>
<<switch _theirsport>>
<<case "swimming">>
<<pssc _personobj>> on the swim team.
<<case "cheerleading">>
<<pssc _personobj>> a cheerleader.
<<default>>
<<pssc _personobj>> on the _theirsport team.
<</switch>>
<<set _semiknown to true>>
<</if>>
<</if>>
<<if _pdata.type is "student" and _pdata.residence is "Chicory Hall">>
<<psc _personobj>> <<conj _personobj live>> in your residence hall.
<<set _known to true>>
<<elseif setup.people.is_friendly(_personobj)>>
<<set _lives to setup.people.lives(_personobj)>>
<<psc _personobj>> <<conj live>>
<<switch _lives>>
<<case "house">>
<<if _pdata.type is "student">>
off-campus
<</if>>
in a house on Saffron Street.
<<case "apartment">>
<<if _pdata.type is "student">>
off-campus
<</if>>
in an apartment on Date Palm Street.
<<default>>
in _lives.
<</switch>>
<</if>>
<<if setup.people.has_had_sex(_personobj.person)>>
You've had sex with <<po _personobj>>.
<<set _known to true>>
<<set _contact to true>>
<<elseif setup.people.is_sexpartner(_personobj.person)>>
You've messed around with <<po _personobj>>.
<<set _known to true>>
<<set _contact to true>>
<<elseif setup.people.exhibitionism_seen(_personobj.person)>>
<<set _exhibseen to setup.people.exhibitionism_seen(_personobj.person)>>
<<if _exhibseen.consensual>>
<<pshasc _personobj>> seen you doing exhibitionist things.
<<else>>
<<pshasc _personobj>> seen you suffering a wardrobe malfunction.
<</if>>
<<set _known to true>>
<<elseif setup.people.voyeurism_seen(_personobj.person)>>
<<set _exhibseen to setup.people.voyeurism_seen(_personobj.person)>>
<<if _exhibseen.consensual>>
You've seen <<po _personobj>> doing exhibitionist things.
<<else>>
<<pshasc _personobj>> flashed you.
<</if>>
<<set _known to true>>
<</if>>
<<if $hangoutmemory and $hangoutmemory[_personobj.person]>>
<<set _known to true>>
<</if>>
<</if>>
<<if _known>>
<<link "View memories.">>
<<script>>
Dialog.setup("View Memories");
Dialog.wiki(Story.get("DisplayNPCMemories").processText());
Dialog.open();
<</script>>
<</link>>
<br><br>
<<elseif _semiknown>>
<br><br>
<</if>>
<<set _anytold to false>>
<<if setup.people.gender_known(_personobj.person) and (setup.people.ready_to_tell_gender(_personobj.person) or setup.people.is_sexpartner(_personobj.person)) and (!_anon or _relwith)>>
<<psc _personobj>> <<conj are>> <<= setup.get_gender_node(_personobj.gender, "choice label")>>.
<<set _anytold to true>>
<</if>>
<<if setup.people.sexuality_known(_personobj.person) and (!_anon or _relwith)>>
<<if setup.people.is_enby(_personobj.person)>>
<<switch setup.people.get_person(_personobj).attraction>>
<<case "straight">>
<<pshasc _personobj>> described <<pp>> sexual orientation as attraction to mostly <<if _personobj.has_part("penis")>>female-presenting<<else>>male-presenting<</if>> people.
<<case "queer" "gay">>
<<pshasc _personobj>> described <<pp>> sexual orientation as attraction to mostly <<if _personobj.has_part("penis")>>male-presenting<<else>>female-presenting<</if>> people.
<<default>>
<<pshasc _personobj>> described <<pp>> sexual orientation as attraction to all sorts of people.
<</switch>>
<<else>>
<<pshasc _personobj>> described <<pp>> sexual orientation as <<= setup.people.get_person(_personobj).attraction>>.
<</if>>
<<set _anytold to true>>
<</if>>
<<if _anytold>><br><br><</if>>
<<if setup.people.has_number(_personobj.person) and (!_anon or _relwith)>>
You have <<pp _personobj>> contact information.
<<if tags().includes("location") and !tags().includes("event") and !tags().includes("noevents")>>
<<if setup.phone_available() and $pc.has_phone() and !$peopleatlocation.includes(_personobj.person)>>
<<set _linkname to "Text " + _personobj.po + ".">>
<<link _linkname>>
<<phoneinit>>
<<set $phonetexter to _personobj.person>>
<<set $phoneconvo to []>>
<<run setup.phone.open("PhoneText")>>
<</link>>
<</if>>
<</if>>
<br><br>
<</if>>
<<if setup.can_talk_to(_personobj.person) and setup.talk_safe()>>
<<set _link to {text: "Talk to " + setup.people.pronouns(_personobj.person).po, link: "InPersonDialogue"}>>
<<if $optshowemojis>>
<<set _link.text to '💬 ' + _link.text>>
<</if>>
<<link _link>>
<<set $eventnpc to _personobj.person>>
<<run setup.close_dialog()>>
<</link>>
<br>
<</if>>
<<if !_personobj.temporary and (!_anon or _relwith)>>
<<togglephonefav _personobj.person>>
<</if>>
<br><br>
<<if !_personobj.is_pc and !_temp and (!_anon or _relwith)>>
<div class="status-meter-labeled npc-display-status-meters">
<div class="npc-display-status-meter-container">
<div class="npc-display-status-meter">
<<set _friendship to setup.people.get_attitude(_personobj.person, "friendship")>>
<<if _friendship gte 0>>
<span class="status-meter-label">Friendship</span>
<br><br>
<<= Meter(_friendship, 1000, "hzFriendbar", true);>>
<<else>>
<span class="status-meter-label">Dislike</span>
<br><br>
<<= Meter(Math.abs(_friendship), 1000, "hzEnemybar", true);>>
<</if>>
</div>
<<if $cheatsenabled>>
<div class="npc-display-status-bar-cheats">
<<link "Reduce Friendship">>
<<set _prevfriendship to setup.people.get_attitude(_personobj.person, "friendship")>>
<<friendship _personobj.person -200>>
<<set _friendship to setup.people.get_attitude(_personobj.person, "friendship")>>
<<if _prevfriendship gte 0>>
<<set _toreplace to '#hzFriendbarbkg'>>
<<else>>
<<set _toreplace to '#hzEnemybarbkg'>>
<</if>>
<<replace _toreplace>>
<<if setup.people.get_attitude(_personobj, "friendship") gte 0>>
<<= Meter(_friendship, 1000, "hzFriendbar", true)>>
<<else>>
<<= Meter(Math.abs(_friendship), 1000, "hzEnemybar", true)>>
<</if>>
<</replace>>
<</link>>
<<link "Increase Friendship">>
<<set _prevfriendship to setup.people.get_attitude(_personobj.person, "friendship")>>
<<friendship _personobj.person 200>>
<<set _friendship to setup.people.get_attitude(_personobj.person, "friendship")>>
<<if _prevfriendship gte 0>>
<<set _toreplace to '#hzFriendbarbkg'>>
<<else>>
<<set _toreplace to '#hzEnemybarbkg'>>
<</if>>
<<replace _toreplace>>
<<if setup.people.get_attitude(_personobj, "friendship") gte 0>>
<<= Meter(_friendship, 1000, "hzFriendbar", true)>>
<<else>>
<<= Meter(Math.abs(_friendship), 1000, "hzEnemybar", true)>>
<</if>>
<</replace>>
<</link>>
</div>
<</if>>
</div>
<div class="npc-display-status-meter-container">
<div class="npc-display-status-meter">
<<set _lust to setup.people.get_attitude(_personobj.person, "lust")>>
<<if _lust lt 0>><<set _lust to 0>><</if>>
<span class="status-meter-label">Lust</span>
<br><br>
<<= Meter(_lust, 1000, "hzLustbar", true);>>
</div>
<<if $cheatsenabled>>
<div class="npc-display-status-bar-cheats">
<<link "Reduce Lust">>
<<lust _personobj.person -200>>
<<replace '#hzLustbarbkg'>>
<<= Meter(setup.people.get_attitude(_personobj, "lust"), 1000, "hzLustbar", true);>>
<</replace>>
<</link>>
<<link "Increase Lust">>
<<lust _personobj.person 200>>
<<replace '#hzLustbarbkg'>>
<<= Meter(setup.people.get_attitude(_personobj, "lust"), 1000, "hzLustbar", true);>>
<</replace>>
<</link>>
</div>
<</if>>
</div>
<div class="npc-display-status-meter-container">
<div class="npc-display-status-meter">
<<set _romance to setup.people.get_attitude(_personobj.person, "romance")>>
<<if _romance lt 0>><<set _romance to 0>><</if>>
<span class="status-meter-label">Romance</span>
<br><br>
<div style="position: relative;">
<<= Meter(_romance, 1000, "hzRomancebar", true)>>
<<if setup.Relationships.show_dating_milestones(_personobj.person)>>
<<set _milestonecount to setup.Relationships.milestone_count(_personobj.person)>>
<<for _n to 1; _n lte 6; _n++>>
<<set _msclass to "milestone milestone-" + _n>>
<span @class="_msclass"><<if _milestonecount gte _n>>💗<<else>>🖤<</if>></span>
<</for>>
<</if>>
</div>
</div>
<<if $cheatsenabled>>
<div class="npc-display-status-bar-cheats">
<<link "Reduce Romance">>
<<romance _personobj.person -200>>
<<replace "#hzRomancebarbkg">>
<<= Meter(setup.people.get_attitude(_personobj, "romance"), 1000, "hzRomancebar", true);>>
<</replace>>
<</link>>
<<link "Increase Romance">>
<<romance _personobj.person 200>>
<<replace "#hzRomancebarbkg">>
<<= Meter(setup.people.get_attitude(_personobj, "romance"), 1000, "hzRomancebar", true);>>
<</replace>>
<</link>>
</div>
<</if>>
</div>
<<if Math.abs(setup.people.get_attitude(_personobj.person, "control")) gte 100 or ((setup.people.has_any_inclination(_personobj.person, "submissive") or setup.people.has_any_inclination(_personobj.person, "dominant")) and Math.abs(setup.people.get_attitude(_personobj.person, "control")) gt 0)>>
<div class="npc-display-status-meter-container">
<div class="npc-display-status-meter">
<<set _control to setup.people.get_attitude(_personobj.person, "control")>>
<span class="status-meter-label" id="control-label"><<if _control lt 0>>Submission<<else>>Dominance<</if>></span>
<<= Meter(Math.abs(_control), 1000, "hzControlbar", true)>>
</div>
<<if $cheatsenabled>>
<div class="npc-display-status-bar-cheats">
<<link "Reduce Control">>
<<control _personobj.person -200>>
<<if setup.people.get_attitude(_personobj.person, "control") lt 0>>
<<replace "#control-label">>Submission<</replace>>
<</if>>
<<replace "#hzControlbarbkg">>
<<= Meter(Math.abs(setup.people.get_attitude(_personobj, "control")), 1000, "hzControlbar", true)>>
<</replace>>
<</link>>
<<link "Increase Control">>
<<control _personobj.person 200>>
<<if setup.people.get_attitude(_personobj.person, "control") gt 0>>
<<replace "#control-label">>Dominance<</replace>>
<</if>>
<<replace "#hzControlbarbkg">>
<<= Meter(Math.abs(setup.people.get_attitude(_personobj, "control")), 1000, "hzControlbar", true)>>
<</replace>>
<</link>>
</div>
<</if>>
</div>
<</if>>
<br>
</div>
<</if>>
<<if !_temp and (!_anon or _relwith)>>
<<set _name to setup.people.get_name(_personobj)>>
<<set _traits to setup.people.get_personality_traits(_name)>>
<<set _knowntraits to setup.people.known_personality_traits(_name)>>
<<if _knowntraits.length gt 0 and (!_anon or _relwith)>>
Personality traits discovered:
<<for _trait range _knowntraits>>
<<hovertip setup.people.get_trait_description(_trait)>><<= setup.people.english_personality_trait(_trait)>><</hovertip>>
<</for>>
<<for _i = 0; _i < _traits.length - _knowntraits.length; _i++>>
<span class='faded'><i>unknown</i></span>
<</for>>
<br><br>
<</if>>
<<if $cheatsenabled>>
<<link "Edit inclinations">>
<<script>>
Dialog.setup("Edit NPC Inclinations", "customize");
Dialog.wiki(Story.get("CheatNPCInclinations").processText());
Dialog.open();
<</script>>
<</link>>
<br><br>
<</if>>
<<if setup.people.birthday_known(_personobj)>>
<<set _bday to setup.people.birthday(_personobj)>>
Birthday: <<= _bday[0]>> <<= _bday[1]>>
<br><br>
<</if>>
<<schedulecard>>
<<datecard>>
<br>
<</if>>
<<set _showclothes to (!$fromphone and (_personobj.is_pc or $peopleatlocation.includes(_personobj.person)))>>
<<set _showclothes to (_showclothes || ($hangout && _personobj.equals($hangout.partner)))>>
<<set _showclothes to true>>
<<= _personobj.full_description()>>
<<if !setup.people.costume(_personobj.person)>>
<<if _showclothes>>
<<ppc _personobj>> fashion sense would best be described as <<= _personobj.style.toLowerCase()>>.
<<else>>
You remember <<pp _personobj>> fashion sense as <<= _personobj.style.toLowerCase()>>.
<</if>>
<</if>>
<<if $optallownpccustom and ($npctodisplay isnot $bestfriend or passage() isnot "CustomizeBFF") and !tags().includesAny(["chargen", "encounter", "preencounter"])>>
<<highlight small>>(<<link "Customize">>
<<set $npctocustomize to _personobj>>
<<script>>
Dialog.setup("Customize NPC", "customize");
Dialog.wiki(Story.get("CustomizeNPCDialog").processText());
Dialog.open(null, function()
{
if (V.npctocustomize)
{
V.people[V.npctocustomize.person] = T.origpdata;
delete V.npctocustomize;
}
});
<</script>>
<</link>>)<</highlight>>
<</if>>
<<if _showclothes>>
<br><br>
<<set _describeasnaked to (!_personobj.is_pc and !_personobj.is_part_covered("chest") && !_personobj.is_part_covered("crotch"))>>
<<if !_describeasnaked>><<if _personobj.is_pc>>You are<<else>><<psc _personobj>> <<conj _personobj be>><</if>> wearing <<= _personobj.list_clothing($pc)>>.<</if>>
<<if _describeasnaked>><<psc>> <<conj be>> naked.
<<elseif !_personobj.is_pc and !_personobj.is_part_covered("chest")>><<psc>> <<conj be>> topless.
<<elseif !_personobj.is_pc and !_personobj.is_part_covered("crotch")>><<psc>> <<conj be>> not wearing pants.
<<elseif !_personobj.is_pc and _personobj.has_breasts() and _personobj.nipple_erectness_visible() and $pc.underwear_covering("breasts") != $pc.outermost_covering("breasts")>>It looks like <<ps>> <<conj 'aren\'t'>> wearing a bra.
<</if>>
<<if !_personobj.is_pc>>
<<if setup.people.pc_attracted_to(_personobj) and setup.people.pc_attraction_factor(_personobj)>>
<br><br>
<<npcattraction _personobj "verbose" "ignorerelationship">>
<</if>>
<</if>>
<</if>>
<<unset $fromphone>><<widget "togglephonefav">>
<<set _phonefavperson to _args[0]>>
<span id="phonefav">
<<if $favoritepeople.includes(_phonefavperson)>>
<<set _linktext to "Unfavorite">>
<<if $optshowemojis>>
<<set _linktext to '⭐ ' + _linktext>>
<</if>>
<<link _linktext>>
<<run $favoritepeople.splice($favoritepeople.indexOf(_phonefavperson), 1)>>
<<replace "#phonefav">><<togglephonefav _phonefavperson>><</replace>>
<</link>>
<<else>>
<<set _linktext to "Favorite">>
<<if $optshowemojis>>
<<set _linktext to '☆ ' + _linktext>>
<</if>>
<<link _linktext>>
<<run $favoritepeople.push(_phonefavperson)>>
<<replace "#phonefav">><<togglephonefav _phonefavperson>><</replace>>
<</link>>
<</if>>
</span>
<</widget>>
<<widget "datecard">>
<div id="date-card-container">
<<if setup.Relationships.show_dating_milestones(_personobj.person)>>
<div class="date-card">
<<set _anythingfound to false>>
<div class="date-card-header">
<span class="date-card-header-text romantic bold">Date Card</span>
<span class="date-card-header-minrestore">
<<if $datecardexp>>
<<set _linkname to String.fromCharCode(0xe81f)>>
<<else>>
<<set _linkname to String.fromCharCode(0xe81c)>>
<</if>>
<<link _linkname>><<set $datecardexp to !$datecardexp>><<replace "#date-card-container">><<datecard>><</replace>><</link>>
</span>
</div>
<<if $datecardexp>>
<br>
/* turnons */
<<set _turnons to setup.people.known_turnons(_personobj)>>
<<set _turnoffs to setup.people.known_turnoffs(_personobj)>>
<<if (_turnons and _turnons.length gt 0) or (_turnoffs and _turnoffs.length gt 0)>>
<<set _anythingfound to true>>
<<set _chars to $pc.turnon_characteristics()>>
<<set _dispturnons to []>><<set _dispturnoffs to []>>
<<for _turnon range _turnons>>
<<if _chars.includes(_turnon)>>
<<run _dispturnons.push("<<highlight unbad>>" + _turnon + "<</highlight>>")>>
<<else>>
<<run _dispturnons.push(_turnon)>>
<</if>>
<</for>>
<<for _turnoff range _turnoffs>>
<<if _chars.includes(_turnoff)>>
<<run _dispturnoffs.push("<<highlight bad>>" + _turnoff + "<</highlight>>")>>
<<else>>
<<run _dispturnoffs.push(_turnoff)>>
<</if>>
<</for>>
<<if _dispturnons.length lt 2>><<run _dispturnons.push('<span class="faded"><i>unknown</i></span>')>><</if>>
<<if _dispturnons.length lt 2>><<run _dispturnons.push('<span class="faded"><i>unknown</i></span>')>><</if>>
<<if _dispturnoffs.length lt 2>><<run _dispturnoffs.push('<span class="faded"><i>unknown</i></span>')>><</if>>
<<if _dispturnoffs.length lt 2>><<run _dispturnoffs.push('<span class="faded"><i>unknown</i></span>')>><</if>>
Likes: <<and _dispturnons>><br>
Dislikes: <<and _dispturnoffs>>
<br><br>
<</if>>
<<set _pinfo to $people[_personobj.person]>>
<<if _pinfo.favoriteDateKnown>>
Favorite date: <<= setup.Relationships.favorite_date(_personobj.person)>>
<br><br>
<</if>>
<<set _milestones to setup.Relationships.possible_milestones(_personobj.person)>>
<<set _milestonesreached to setup.Relationships.reached_milestones(_personobj.person)>>
<<if _milestones.length gt 0>>
<<set _anythingfound to true>>
Milestones:
<br>
<div class="romance-milestones">
<<for _milestone range _milestones>>
<<if _milestonesreached.includes(_milestone)>>
💗
<<else>>
🖤
<</if>>
<<set _minfo to setup.Relationships.milestones[_milestone]>>
<<= setup.pronoun_sub(_personobj.person, _minfo.label)>>
<br>
<</for>>
</div>
<</if>>
/* empty */
<<if !_anythingfound>>
You don't know anything about this person's dating or partner preferences.
<</if>>
<</if>>
</div>
<</if>>
<<done>>
<<script>>
$(".date-card").on("click", function() {
$(this).find(".date-card-header-minrestore").find("a").click();
});
<</script>>
<</done>>
</div>
<</widget>>
<<widget "schedulecard">>
<div id="schedule-card-container">
<<if _personobj.person is $niches['The Classroom Harasser'] and $unlockemersonmpl and $lastharassermplevent isnot $gameday and $hour lt 22>>
You know <<ps _personobj>>'ll probably be at the Media Production Lab in Emerson sometime this evening.
<br><br>
<<elseif _personobj.person is $niches['The Classroom Admirer'] and $unlockquadtabletop and $lastadmirerquadevent isnot $gameday and $hour lt 22>>
You know <<ps _personobj>>'ll probably be having a tabletop session at the quad sometime today.
<br><br>
<</if>>
<<if setup.people.is_known(_personobj.person) and setup.people.nightlife_schedule_known(_personobj.person)>>
<<if setup.people.nightlife_schedule_day_known(_personobj.person)>>
<<set _nightlifedest to setup.people.nightlife_choice_today(_personobj.person)>>
<<if setup.Time.nightlife_time()>>
<<if setup.job_at_location() is _nightlifedest>>
<<psc _personobj>> <<conj be>> here at <<highlight>><<= _nightlifedest>><</highlight>> right now.
<<else>>
<<psc _personobj>> <<conj be>> very likely to be at <<highlight>><<= _nightlifedest>><</highlight>> right now.
<</if>>
<<else>>
<<psc _personobj>> <<conj be>> very likely to be at <<highlight>><<= _nightlifedest>><</highlight>> tonight.
<</if>>
<br><br>
<</if>>
<div class="schedule-card">
<div class="schedule-card-header">
<span class="schedule-card-header-text sexy bold">Nightlife Schedule</span>
<span class="schedule-card-header-minrestore">
<<if $schedcardexp>>
<<set _linkname to String.fromCharCode(0xe81f)>>
<<else>>
<<set _linkname to String.fromCharCode(0xe81c)>>
<</if>>
<<link _linkname>><<set $schedcardexp to !$schedcardexp>><<replace "#schedule-card-container">><<schedulecard>><</replace>><</link>>
</span>
</div>
<<if $schedcardexp>>
<br>
<<set _days to ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]>>
<div>
<<for _day range _days>>
<<set _daynum to setup.Time.day_of_week.indexOf(_day)>>
<div style="display: flex; align-items: center; margin-bottom: 0.5em;">
<div style="width: 10em;"><<highlight>><<= _day>><</highlight>>:</div>
<div>
<<if setup.people.nightlife_schedule_day_known(_personobj.person, _daynum)>>
<<= setup.people.nightlife_choice_today(_personobj.person, _daynum)>>
<<else>>
<<highlight faded>><i>unknown</i><</highlight>>
<</if>>
</div>
</div>
<</for>>
</div>
<</if>>
</div>
<</if>>
<<done>>
<<script>>
$(".schedule-card").on("click", function() {
$(this).find(".schedule-card-header-minrestore").find("a").click();
});
<</script>>
<</done>>
</div>
<</widget>>
<<widget "cheatnpcinclinations">>
<div id="cheat-npc-inclinations" class="nokeys">
<<anonorfullnamec $npctodisplay>>'s inclinations:
<br><br>
<<set _incs to setup.people.inclinations($npctodisplay)>>
<<if _incs.length is 0>>
<i>none</i>
<<else>>
<<for _inc range _incs>>
<<capture _inc>>
_inc
<<link "(remove)">>
<<set _pdata to setup.people.get_person($npctodisplay)>>
<<if _pdata.addinclinations and _pdata.addinclinations.includes(_inc)>>
<<run _pdata.addinclinations.delete(_inc)>>
<<else>>
<<if !_pdata.subinclinations>><<set _pdata.subinclinations to []>><</if>>
<<run _pdata.subinclinations.push(_inc)>>
<</if>>
<<replace "#cheat-npc-inclinations">><<cheatnpcinclinations>><</replace>>
<</link>>
<br>
<</capture>>
<</for>>
<</if>>
<br><br>
Grant <<po>> an inclination:<br>
<<set _grantinclination to "Inclination name">>
<<set _incfound to false>>
<span id="textbox-inclinationgranter"><<textbox "_grantinclination" "Inclination name">></span>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
<<button "Grant">>
<<for _inc range Object.keys(setup.inclinations)>>
<<if _inc.toLowerCase() is _grantinclination.toLowerCase()>>
<<set _pdata to setup.people.get_person($npctodisplay)>>
<<if _pdata.subinclinations and _pdata.subinclinations.includes(_inc)>>
<<run _pdata.subinclinations.delete(_inc)>>
<</if>>
<<if !setup.people.has_inclination($npctodisplay, _inc)>>
<<if !_pdata.addinclinations>><<set _pdata.addinclinations to []>><</if>>
<<run _pdata.addinclinations.push(_inc)>>
<</if>>
<<set _incfound to true>>
<<break>>
<</if>>
<</for>>
<<if _incfound>>
<<replace "#cheat-npc-inclinations">><<cheatnpcinclinations>><</replace>>
<<else>>
<<replace "#incresult">>There's no inclination named "_grantinclination". Check for typos, and try again!<</replace>>
<</if>>
<<set _incfound to false>>
<</button>>
<span id="incresult"></span>
</div>
<</widget>><<set _name to setup.people.get_name($npctodisplay)>>
<<set _personobj to new Person({person: _name})>>
<button id="view-people-backward" tabindex="0" title="Return to view person" aria-label="Return to view person" type="button" role="button"></button>
<<script>>
$(document).ready(function() {
$("#view-people-backward").click(function() {
Dialog.setup("View Person");
Dialog.wiki(Story.get("DisplayNPC").processText());
Dialog.open();
});
});
<</script>>
<<set _gender to setup.people.pronouns(_personobj.person).gender>>
<<set _style to "font-weight: bold; color: " + setup.get_color(_gender) + ";">>
<span @style="_style"><<aoranc _personobj.anonymous_name>> <<= _personobj.anonymous_name>>.</span>
<br><br>
<<if _personobj.is_pc>>
This is you.
<<elseif setup.people.is_known(_personobj)>>
<<set _niche to "">>
<<set _niches to setup.people_niches()>>
<<set _nichekeys to Object.keys(_niches)>>
<<for _i to 0; _i < _nichekeys.length; _i++>>
<<if _niches[_nichekeys[_i]] is _personobj.person>>
<<set _niche to " (" + _nichekeys[_i] + ")">>
<</if>>
<</for>>
Memories with <<= _personobj.fullname()>>_niche...
<<else>>
Memories with this <<= _personobj.label>>...
<</if>><br>
<br>
<div class="npc-display-memories-container">
<div class="npc-display-memories-row">
<div class="two-column npc-display-memories-item">
<span style="font-size: 120%;">Sex</span><br>
<<set _po to _personobj.po>><<set _pp to _personobj.pp>>
<<set _acts to [
"pussy-fucking given", "been fucked by " + _po,
"pussy-fucking received", "fucked " + _po,
"ass-fucking given", "been anally fucked by " + _po,
"ass-fucking received", "anally fucked " + _po,
"blowjob given", "given " + _po + " a blowjob",
"blowjob received", "gotten a blowjob from " + _po,
"cunnilingus given", "eaten " + _po + " out",
"cunnilingus received", "been eaten out by " + _po,
"titfuck given", "fucked " + _pp + " tits",
"titfuck received", "had your tits fucked by " + _po,
"fingerbang given", "fingered " + _po,
"fingerbang received", "been fingered by " + _po,
"anal fingerbang given", "anally fingered " + _po,
"anal fingerbang received", "been anally fingered by " + _po,
"handjob given", "given " + _po + " a handjob",
"handjob received", "gotten a handjob from " + _po,
"footjob given", "given " + _po + " a footjob",
"footjob received", "gotten a footjob from " + _po,
"rimjob given", "given " + _po + " a rimjob",
"rimjob received", "gotten a rimjob from " + _po,
"orgasm given", "given " + _po + " an orgasm",
"orgasm received", "been given an orgasm by " + _po,
"cheated on", "cheated on " + _po,
"cheated with", "cheated on a partner with " + _po,
"helped cheat", "helped " + _po + " cheat on " + _pp + " partner",
"virginity taken", "taken " + _pp + " virginity",
"oral virginity taken", "taken " + _pp + " oral virginity",
"anal virginity taken", "taken " + _pp + " anal virginity",
"tribbed", "tribbed with " + _po,
"frotted", "frotted with " + _po,
]>>
<<if !$sexmemory or !$sexmemory[_name]>>
You haven't done anything sexual with <<po _name>>.
<<else>>
<<set _found to false>>
<<for _act range Object.keys($sexmemory[_name])>>
<<set _i to _acts.indexOf(_act)>>
<<if _i gte 0>>
<<set _found to true>>
<<set _n to $sexmemory[_name][_acts[_i]]>>
You've <<highlight sexy>><<= _acts[_i + 1]>><</highlight>><<if _acts[_i + 1].indexOf("virginity") == -1>> on <<engnum _n>> <<pluralize occasion _n>><</if>>.<br>
<</if>>
<</for>>
<<if !_found>>
You haven't done anything sexual with <<po _name>>.
<</if>>
<</if>>
</div>
<div class="two-column npc-display-memories-item">
<span style="font-size: 120%;">Hangouts</span><br>
<<if $hangoutmemory and $hangoutmemory[_name]>>
<<set _hangouts to []>>
<<for _type range Object.keys($hangoutmemory[_name])>>
<<set _n to $hangoutmemory[_name][_type]>>
<<if _n is 1>>
<<run _hangouts.push("<<highlight>>one " + _type + "<</highlight>>")>>
<<else>>
<<run _hangouts.push("<<highlight>>" + setup.english_number(_n) + " " + setup.pluralize(_type) + "<</highlight>>")>>
<</if>>
<</for>>
You've gone on <<and _hangouts>> with <<po _name>>.
<<else>>
You haven't had any planned hangouts with <<po _name>>.
<</if>>
</div>
</div>
<div class="two-column-container npc-display-memories-row">
<div class="two-column npc-display-memories-item">
<span style="font-size: 120%;">Exhibitionism</span><br>
<<set _bits to $pc.naked_bits()>><<run _bits.push("butt")>>
<<set _naked to []>><<set _underwear to []>>
<<for _bit range _bits>>
<<if _bit is "penis">>
<<set _bitlabel to "cock">>
<<elseif _bit is "butt">>
<<set _bitlabel to "ass">>
<<elseif _bit is "vagina">>
<<set _bitlabel to "pussy">>
<<else>>
<<set _bitlabel to _bit>>
<</if>>
<<if setup.people.has_seen_part(_name, _bit, true, true, true)>>
<<run _naked.push("<<highlight sexy>>" + _bitlabel + "<</highlight>>")>>
<<elseif setup.people.has_seen_part(_name, _bit, true, true, false)>>
<<run _underwear.push("<<highlight sexy>>" + _bitlabel + "<</highlight>>")>>
<</if>>
<</for>>
<<if _naked.length gt 0>>
<<pshasc _name>> seen your <<and _naked>> naked and exposed<<if setup.people.is_sexpartner(_name)>> outside of sex<</if>>.
<<elseif _underwear.length gt 0>>
<<pshasc _name>> seen your <<and _underwear>> in just underwear<<if setup.people.is_sexpartner(_name)>> outside of sex<</if>>.
<<else>>
<<psc _name>> <<conj 'haven\'t'>> seen you exposed<<if setup.people.is_sexpartner(_name)>> outside of sex<</if>>.
<</if>>
</div>
<div class="two-column npc-display-memories-item">
<span style="font-size: 120%;">Voyeurism</span><br>
<<set _bits to _personobj.naked_bits()>><<run _bits.push("butt")>>
<<set _naked to []>><<set _underwear to []>>
<<for _bit range _bits>>
<<if _bit is "penis">>
<<set _bitlabel to _personobj.penis_descriptor() + " cock">>
<<elseif _bit is "butt">>
<<set _bitlabel to _personobj.butt_descriptor() + " ass">>
<<elseif _bit is "vagina">>
<<set _bitlabel to "pussy">>
<<elseif _bit is "breasts">>
<<set _bitlabel to _personobj.breast_descriptor() + " breasts">>
<<else>>
<<set _bitlabel to _bit>>
<</if>>
<<if setup.people.has_seen_npc_part(_name, _bit, true, true, true)>>
<<run _naked.push("<<highlight sexy>>" + _bitlabel + "<</highlight>>")>>
<<elseif setup.people.has_seen_npc_part(_name, _bit, true, true, false)>>
<<run _underwear.push("<<highlight sexy>>" + _bitlabel + "<</highlight>>")>>
<</if>>
<</for>>
<<if _naked.length gt 0>>
You've seen <<pp _name>> <<and _naked>> naked and exposed<<if setup.people.is_sexpartner(_name)>> outside of sex<</if>>.
<<elseif _underwear.length gt 0>>
You've seen <<pp _name>> <<and _underwear>> in just underwear<<if setup.people.is_sexpartner(_name)>> outside of sex<</if>>.
<<else>>
You haven't seen <<po _name>> exposed<<if setup.people.is_sexpartner(_name)>> outside of sex<</if>>.
<</if>>
</div>
</div>
</div><<cheatnpcinclinations>>
<<if setup.people.is_special($npctodisplay)>>
<br><br>
Note: This NPC fills a story niche and changing their inclinations will probably not significantly alter their behavior in their storyline events.
<</if>><<for _item range Object.keys(setup.clothes)>>
<<set _info to setup.clothes[_item]>>
<<if typeof(_info) is "object">>
<b><<= _item>></b>
<br>
<<if _info["description wardrobe"]>>
<<= _info["description wardrobe"]>>
<</if>>
<br>
<<for _key range Object.keys(_info)>>
<<if _key.indexOf("sub ") is 0>>
<<set _subs to _info[_key].join(', ')>>
<<= _key>>: <<= _subs>>
<br>
<</if>>
<</for>>
<br><hr><br>
<</if>>
<</for>><h2>Needs</h2>\
Your character has needs and taking care of them is important! But don't worry, a little common sense and some basic time management skills will see you through just fine.
<div style="width: 80%; margin: auto;">\
<table class="stats-table">\
<<for _i to 0; _i lt setup.Needs.db.length; _i++>>\
<<if setup.Needs.db[_i].fleeting>><<continue>><</if>>\
<tr class="stats-table"><td class="stats-table" style="width: 20%; text-align: center;"><b><<print setup.Needs.db[_i].name>></b></td><td class="stats-table"><<print setup.Needs.db[_i].description>></td></tr>
<</for>>\
</table>\
</div>\
<h2>Fleeting Feelings</h2>\
Fleeting feelings most commonly arise during sexual encounters, but they'll happen at other times too.
True to their name, they'll tend to dissipate quickly, but their longer term effects will be absorbed into your Needs.
<div style="width: 80%; margin: auto;">\
<table class="stats-table">\
<<for _i to 0; _i lt setup.Needs.db.length; _i++>>\
<<if !setup.Needs.db[_i].fleeting>><<continue>><</if>>\
<tr class="stats-table"><td class="stats-table" style="width: 20%; text-align: center;"><b><<print setup.Needs.db[_i].name>></b></td><td class="stats-table"><<print setup.Needs.db[_i].description>></td></tr>
<</for>>\
</table>\
</div>\
<h2>Skills</h2>\
There are many skills your character can learn!
These are your primary skills, and they'll determine how your character handles general situations and sexual encounters.
There are also many optional secondary skills in the game, but they won't show up until they're unlocked!
<div style="width: 80%; margin: auto;">\
<table>\
<<for _i to 0; _i lt setup.Skills.mainskills.length; _i++>>\
<tr class="stats-table"><td class="stats-table" style="width: 20%; text-align: center;"><b><<print setup.Skills.mainskills[_i].name>></b></td><td class="stats-table"><<print setup.Skills.mainskills[_i].description>></td></tr>
<</for>>\
</table>\
</div>\<<charactertabs>>
<br><br>
Inclinations help determine how your character reacts to certain things.<br>
<br>
<<if $cheatsenabled and false>>
/* ability to grant inclinations has been migrated to links provided with the complete inclinations list */
Grant yourself an inclination (use at your own risk!):<br>
<<set _grantinclination to "Inclination name">>
<<set _incfound to false>>
<span id="textbox-inclinationgranter"><<textbox "_grantinclination" "Inclination name">></span>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
<<button "Grant">>
<<for _inc range Object.keys(setup.inclinations)>>
<<if _inc.toLowerCase() is _grantinclination.toLowerCase()>>
<<run setup.inclinations.unlock(_inc)>>
<<run $inclinationsunlocked[_inc].dreamed = true>>
<<run setup.add_inclination(_inc)>>
<<set _incfound to true>>
<<break>>
<</if>>
<</for>>
<<if _incfound>>
<<replace "#incresult">>Inclination "_grantinclination" granted!<</replace>>
<<else>>
<<replace "#incresult">>There's no inclination named "_grantinclination". Check for typos, and try again!<</replace>>
<</if>>
<<set _incfound to false>>
<</button>>
<span id="incresult"></span>
<br><br>
<</if>>
<<set _found to false>>
<div class="inclination-container">
<<for _inc range Object.keys($inclinationsunlocked)>>
<<set _prereqs to $pc.inclination_prereqs(_inc)>>
<<set _supporting to $pc.supporting_inclinations(_inc)>>
<<set _opposing to $pc.inclinations_opposing(_inc)>>
<<set _incname to _inc>>
<<set _inc to $inclinationsunlocked[_inc]>>
<<if _inc.dreamed>>
<<if $pc.has_inclination(_incname)>>
<<set _class to "inclination-item inclination-item-unlocked">>
<<else>>
<<set _class to "inclination-item inclination-item-disabled">>
<</if>>
<div @class="_class">
<<capture _incname>>
<<set _found to true>>
<div class="inclination-header">
<span class="inclination-title">
<<= _incname>>
</span>
<span class="inclination-status">
<<if $pc.has_inclination(_incname)>>
<<if _inc.locked>>
<span class="bad">Locked</span>
<<elseif _supporting.length gt 0>>
<span class="ungood">
Prereq for <<and _supporting>>.
</span>
<<else>>
<span class="notice">Embraced</span>
<span style="font-size: 80%">
(<<link "Reject it.">>
<<run setup.remove_inclination(_incname)>>
<<script>>
Dialog.setup("Inclinations", "inclinations");
Dialog.wiki(Story.get("Inclinations").processText());
Dialog.open();
<</script>>
<</link>>)
</span>
<</if>>
<<else>>
<<if _opposing.length gt 0>>
<span class="ungood">
Incompatible with <<and _opposing>>
</span>
<<else>>
<span class="ungood">Rejected</span>
<span style="font-size: 80%">
(<<link "Embrace it.">>
<<run setup.add_inclination(_incname)>>
<<script>>
Dialog.setup("Inclinations", "inclinations");
Dialog.wiki(Story.get("Inclinations").processText());
Dialog.open();
<</script>>
<</link>>)
</span>
<</if>>
<</if>>
</span>
</div>
<<set _info to setup.inclinations.get(_incname)>>
<span class="inclination-description">
<<= _info.description>>
</span>
<br><br>
<span class="inclination-effects">
<b>Effects:</b> <<= _info.effects>>
</span>
<</capture>>
</div>
<</if>>
<</for>>
</div>
<<if !_found>>
You currently have no inclinations. Discover some by experiencing new things and leveling up skills!
<</if>>
<br>
<<link "See complete list">>
<<script>>
Dialog.setup("Inclinations List", "inclinations");
Dialog.wiki(Story.get("InclinationsList").processText());
Dialog.open();
<</script>>
<</link>>Here is a complete list of inclinations attainable by the player character.
<br><br>
<div class="inclination-container">
<<for _inc range Object.keys(setup.inclinations).sort()>>
<<if setup.inclinations[_inc].description and !setup.inclinations[_inc].unlisted>>
<<if _inc in $inclinationsunlocked>>
<<set _class to "inclination-item inclination-item-unlocked">>
<<else>>
<<set _class to "inclination-item inclination-item-disabled">>
<</if>>
<div @class="_class">
<div class="inclination-header">
<span class="inclination-title">
<<= _inc>>
</span>
<span class="inclination-status">
<<if _inc in $inclinationsunlocked>>
<<highlight unbad>>Unlocked<</highlight>>
<<elseif setup.inclinations[_inc].hint>>
<<for _req range Object.keys(setup.inclinations[_inc].requires)>>
<<if _req == "inclinations">>
<<for _inc2 range setup.inclinations[_inc].requires[_req]>>
<<inclination _inc2>>
<</for>>
<<elseif setup.Skills.is_valid(_req)>>
<<skill _req setup.inclinations[_inc].requires[_req]>>
<</if>>
<</for>>
<<hovertip setup.inclinations[_inc].hint 0>>(<b>See hint</b>)<</hovertip>>
<<if $cheatsenabled>>
<<capture _inc>>
(<<link "Grant">>
<<run setup.inclinations.unlock(_inc)>>
<<run $inclinationsunlocked[_inc].dreamed = true>>
<<run setup.add_inclination(_inc)>>
<<script>>
Dialog.setup("Inclinations", "inclinations");
Dialog.wiki(Story.get("InclinationsList").processText());
Dialog.open();
<</script>>
<</link>>)
<</capture>>
<</if>>
<</if>>
</span>
</div>
<span class="inclination-description">
<<= setup.inclinations[_inc].description>>
</span>
<br><br>
<span class="inclination-effects">
<b>Effects:</b> <<= setup.inclinations[_inc].effects>>
</span>
</div>
<</if>>
<</for>>
</div><<bagstorage>>
<<if $pc.has_snacks()>>
<br><br>
<<if !$storedsnacks>>
You have no snacks remaining.
<<if $lastloctags.includes("homebase")>>
You'll grab some from your food stash when you leave.
<</if>>
<<else>>
You have <<engnum $storedsnacks>> <<pluralize snack $storedsnacks>> remaining.
<<if !setup.passage_safe() and !tags().includes("allowsnack")>>
You can't eat right now.
<<elseif $lastloctags.includes("homebase")>>
But if you're gonna snack, might as well check your food stash.
<<else>>
<<link "Eat a snack." InventorySnacks>><<run Dialog.close()>><</link>>
<</if>>
<</if>>
<</if>>
<<if $pc.has_condoms() and $kinkcontent.includes("breeding")>>
<br><br>
<<if !$storedcondoms>>
You have no condoms on you.
<<if $lastloctags.includes("homebase") and $pc.total_condoms()>>
You'll grab some from your supply when you leave.
<</if>>
<<else>>
<<set _total to Math.min($storedcondoms, $pc.total_condoms())>>
You have <<engnum _total>> <<pluralize condom _total>> on you.
<</if>>
<</if>>
<<if !$sextoyshidden>><<set $sextoyshidden to []>><</if>>
<<if $pc.has_toys() and $sextoys and $sextoys.length gt 0>>
<br><br>
Your selection of sex toys includes:
<br><br>
<div class="indent">
<<for _toy range $sextoys>>
<<set _name to _toy.name>>
<<aoran _name>> _name
<<highlight small>>
<<capture _name>>
<<if $sextoyshidden.includes(_name)>>
(<<link "Show">>
<<run $sextoyshidden.deleteAt($sextoyshidden.indexOf(_name))>>
<<script>>
Dialog.setup("Inventory", "inventory");
Dialog.wiki(Story.get("Inventory").processText());
Dialog.open();
<</script>>
<</link>>)
<<else>>
(<<link "Hide in encounters">>
<<run $sextoyshidden.push(_name)>>
<<script>>
Dialog.setup("Inventory", "inventory");
Dialog.wiki(Story.get("Inventory").processText());
Dialog.open();
<</script>>
<</link>>)
<</if>>
<</capture>>
<</highlight>>
<br>
<</for>>
</div>
<</if>><<if !$storedsnacks>>
You have no snacks remaining.
<br>
<<else>>
<<set _bag to $pc.primary_storage_item()>>
You rummage around in your <<if _bag>><<= _bag.name>><<else>>pockets<</if>>, reminding yourself what you brought for snacks.
<br><br>
<<set _items to Object.keys(V.dormfoodstash)>>
<<set _found to false>>
<<for _i to 0; _i lt _items.length; _i++>>
<<set _food to _items[_i]>>
<<set _foodobj to setup.food[_food]>>
<<set _time to 5>>
<<if _foodobj.cooking>><<continue>><</if>>
<<if _foodobj.flags.includes("drink")>><<set _linkname to "Drink " + _food>><<else>><<set _linkname to "Eat " + _food>><</if>>
<<set _found to true>>
<<capture _food,_foodobj,_time>>
<<link _linkname InventorySnacks>>
<<advtime _time Food Relaxation>>
<<run setup.Needs.eat(_food)>>
<<if _food in $dormfoodstash>>
<<if $dormfoodstash[_food] is 1>>
<<run delete State.variables.dormfoodstash[_food]>>
<<else>>
<<run State.variables.dormfoodstash[_food] -= 1>>
<</if>>
<</if>>
<<if $dormfridge and _food in $dormfridge>>
<<if $dormfridge[_food] is 1>>
<<run delete State.variables.dormfridge[_food]>>
<<else>>
<<run State.variables.dormfridge[_food] -= 1>>
<</if>>
<</if>>
<<set _name to _food>>
<<if _foodobj["cook into"]>>
<<set _name to _foodobj["cook into"]>>
<</if>>
<<if _foodobj["aoran"]>>
<<set _name to _foodobj["aoran"] + " " + _name>>
<<else>>
<<set _name to setup.a_or_an(_name) + " " + _name>>
<</if>>
<<if _foodobj.cooking>>
<<set _lvl to _foodobj.cooking>>
<<raiseskill Cooking _lvl>>
<<set $header to "You spend a few minutes preparing and then eating " + _name + ".">>
<<elseif _foodobj.flags.includes("drink")>>
<<set $header to "You drink " + _name + ".">>
<<else>>
<<set $header to "You munch on " + _name + ".">>
<</if>>
<<set $storedsnacks-->>
<</link>>
<<if _foodobj.cooking>>
<<skill Cooking _foodobj.cooking>>
<</if>>
<</capture>>
<<dtime _time>>
<<if "restore hunger" in _foodobj>><<set _amt to _foodobj["restore hunger"]>><<dalterneed Food _amt>><</if>>
<<if "restore energy" in _foodobj>><<set _amt to _foodobj["restore energy"]>><<dalterneed Rest _amt>><</if>>
<<if "reduce bladder" in _foodobj>><<set _amt to -_foodobj["reduce bladder"]>><<dalterneed Bladder _amt>><</if>>
<br>
<</for>>
<<if !_found>>
Unfortunately, that appears to be nothing. Maybe you should pick up some nonperishables.
<br>
<<else>>
You have <<engnum $storedsnacks>> <<pluralize snack $storedsnacks>> remaining.
<br>
<</if>>
<</if>>
<br>
<<link "Done">><<continuegoto>><</link>><<if !$maptab>><<set $maptab to "Campus">><</if>>
<<set _tabs to []>>
<<set _tablabels to []>>
<<set _maps to setup.bigmaps()>>
<<for _map range _maps>>
<<run _tabs.push(_map)>>
<<run _tablabels.push(setup.Maps[_map].name)>>
<</for>>
<<for _tab range _tabs>>
<<set _label to _tablabels[_tabs.indexOf(_tab)]>>
<<if _tab isnot _tabs[0]>>| <</if>>
<<if _tab is $maptab>>
<span class="notice">_label</span>
<<else>>
<<capture _tab>>
<<link _label>>
<<set $maptab to _tab>>
<<script>>
Dialog.setup("Maps", "maps");
Dialog.wiki(Story.get("Maps").processText());
Dialog.open();
<</script>>
<</link>>
<</capture>>
<</if>>
<</for>>
<br><br>
<<= '<img style="width: 100%;" src="res/img/' + setup.Maps[$maptab].bigimg + '.png">'>><<charactertabs>>
<br><br>
You reminisce about your sex life...
<br><br>
<<if !$sexstats or Object.keys($sexstats).length is 0>>
You haven't really done anything worth remembering.
<<else>>
<<if $sexmemory and $sexmemory["PC"] and $sexmemory["PC"]["masturbation"]>>
<<set _mast to $sexmemory["PC"]["masturbation"]>>
<<script>>
T.partners = Object.keys(V.sexmemory).filter(person => person != "PC" && setup.people.is_sexpartner(person))
<</script>>
<<set _partners to _partners.length>>
You've masturbated <<engnum _mast>> <<pluralize time _mast>> and been with <<engnum _partners>> sexual <<pluralize partner _partners>>.
<br><br>
<</if>>
<<set _acts to [
"pussy-fucking given", "had your pussy fucked",
"pussy-fucking received", "fucked someone's pussy",
"ass-fucking given", "had your ass fucked",
"ass-fucking received", "fucked someone's ass",
"blowjob given", "sucked cock",
"blowjob received", "had your cock sucked",
"cunnilingus given", "eaten someone out",
"cunnilingus received", "been eaten out",
"titfuck given", "fucked someone's tits",
"titfuck received", "had your tits fucked",
"fingerbang given", "fingered someone",
"fingerbang received", "gotten fingered",
"anal fingerbang given", "anally fingered someone",
"anal fingerbang received", "gotten anally fingered",
"handjob given", "given someone a handjob",
"handjob received", "gotten a handjob",
"footjob given", "given someone a footjob",
"footjob received", "gotten a footjob",
"rimjob given", "given someone a rimjob",
"rimjob received", "gotten a rimjob",
"orgasm given", "given someone an orgasm",
"orgasm received", "been given an orgasm",
"virginity taken", "taken someone's virginity",
"oral virginity taken", "taken someone's oral virginity",
"anal virginity taken", "taken someone's anal virginity",
"creampie given", "left somebody a creampie",
]>>
<<for _j to 0; _j lt _acts.length; _j += 2>>
<<set _act to _acts[_j]>>
<<set _times to $sexstats[_act]>>
<<if _times and _times gt 0>>
You've <<highlight sexy>><<= _acts[_j + 1]>><</highlight>> <<engnum _times>> <<pluralize time _times>>.<br>
<</if>>
<</for>>
<br>
<<set _acts to [
"facial", "taken <<engnum _times>> <<highlight sexy>><<pluralize facial _times>><</highlight>>",
"cum on tits", "taken <<engnum _times>> <<pluralize load _times>> <<highlight sexy>>on your tits<</highlight>>",
"cum on pussy", "taken <<engnum _times>> <<pluralize load _times>> <<highlight sexy>>on your pussy<</highlight>>",
"cum on cock", "taken <<engnum _times>> <<pluralize load _times>> <<highlight sexy>>on your cock<</highlight>>",
"cum on ass", "taken <<engnum _times>> <<pluralize load _times>> <<highlight sexy>>on your ass<</highlight>>",
"cum on feet", "taken <<engnum _times>> <<pluralize load _times>> <<highlight sexy>>on your feet<</highlight>>",
"cum on body", "taken <<engnum _times>> <<pluralize load _times>> <<highlight sexy>>elsewhere on your body<</highlight>>",
"creampie", "been given <<engnum _times>> <<highlight sexy>><<pluralize creampie _times>><</highlight>>",
"anal creampie", "been given <<engnum _times>> <<highlight sexy>>anal <<pluralize creampie _times>><</highlight>>",
"oral creampie", "had someone <<highlight sexy>>cum in your mouth<</highlight>> <<engnum _times>> <<pluralize time _times>>",
]>>
<<for _j to 0; _j lt _acts.length; _j += 2>>
<<set _act to _acts[_j]>>
<<set _times to $sexstats[_act]>>
<<if _times and _times gt 0>>
You've <<= _acts[_j + 1]>>.<br>
<<if _act is "oral creampie">>
<<if $sexstats["cum spit out"]>>
<<set _times to $sexstats["cum spit out"]>>
Of those, you've <<highlight sexy>>spit out<</highlight>> <<engnum _times>> <<pluralize load _times>>.
<<else>>
You've <<highlight sexy>>never spit out<</highlight>> anyone's cum. <<if $pc.youngnoun is "kid">>Good job.<<else>>Good <<= $pc.youngnoun>>.<</if>>
<</if>>
<br>
<<if $sexstats["cum swallowed"]>>
<<set _times to $sexstats["cum swallowed"]>>
You've <<highlight sexy>>swallowed <<engnum _times>> <<pluralize load _times>><</highlight>>.
<<set _cumvolume to Math.round(_times * 4)>>
That's about <<highlight sexy>><<= _cumvolume>> milliliters<</highlight>>.
<<set _volumes to [
[18927, "standard five gallon bucket"],
[3785, "one gallon milk jug"],
[1892, "half gallon milk jug"],
[946, "standard one quart measuring cup"],
[750, "wine bottle"],
[591, "venti coffee"],
[500, "standard water bottle"],
[355, "soda can"],
[295, "soup bowl"],
[250, "small drinking glass"],
[200, "juice box"],
[44, "shot glass"],
]>>
<<for _volume range _volumes>>
<<set _instances to Math.floor(_cumvolume / _volume[0])>>
<<if _instances gt 0>>
<<set _instances to Math.round(_cumvolume / _volume[0])>>
<<set _object to _volume[1]>>
Picture <<aoran _object>> _object full of cum. You've consumed roughly <<engnum _instances>> of those!
<<break>>
<</if>>
<</for>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>><<widget "optionstabs">>
<<set _dialogs to ["Content Options", "Difficulty Options", "Storyline Options", "Color Options", "Accessibility Options", "Save Options"]>>
<<if $cheatsenabled>>
<<run _dialogs.push("Cheats")>>
<</if>>
<<for _dialog range _dialogs>>
<<if _dialog isnot _dialogs[0]>>| <</if>>
<<set _class to setup.remove_spaces(_dialog)>>
<<if Dialog.isOpen(_class) or (!Dialog.isOpen() and _dialog is _dialogs[0])>>
<<highlight>>_dialog<</highlight>>
<<else>>
<<capture _dialog,_class>>
<<link _dialog>>
<<run setup.open_dialog(_class, _dialog, _class)>>
<</link>>
<</capture>>
<</if>>
<</for>>
<</widget>>
<<widget "kinkcontentoptions">>
<<if ndef $kinkcontentaware>><<set $kinkcontentaware to []>><</if>>
<<if ndef $kinkcontentwarning>><<set $kinkcontentwarning to []>><</if>>
<div id="kinkcontentoptions">
<<set _allkinks to Object.keys(setup.kink_content)>>
<table class="options-table">
<<for _kink range _allkinks>>
<<capture _kink>>
<<set _info to setup.kink_content[_kink]>>
<tr>
<td class="options-col-label"><<= _info.name>></td>
<td class="options-col-content">
<<= _info.description>>
<br>
<span class="kink-options nokeys small">
<<if $kinkcontent.includes(_kink) && !$kinkcontentaware.includes(_kink) and !$kinkcontentwarning.includes(_kink)>>
<<highlight>>No Warning<</highlight>>
<<else>>
<<link "No Warning">>
<<if !$kinkcontent.includes(_kink)>>
<<run $kinkcontent.push(_kink)>>
<</if>>
<<run $kinkcontentaware.delete(_kink)>>
<<run $kinkcontentwarning.delete(_kink)>>
<<replace "#kinkcontentoptions">><<kinkcontentoptions>><</replace>>
<</link>>
<</if>>
|
<<if $kinkcontent.includes(_kink) && $kinkcontentaware.includes(_kink) && !$kinkcontentwarning.includes(_kink)>>
<<highlight>>Aware<</highlight>>
<<else>>
<<link "Aware">>
<<if !$kinkcontent.includes(_kink)>>
<<run $kinkcontent.push(_kink)>>
<</if>>
<<if !$kinkcontentaware.includes(_kink)>>
<<run $kinkcontentaware.push(_kink)>>
<</if>>
<<run $kinkcontentwarning.delete(_kink)>>
<<replace "#kinkcontentoptions">><<kinkcontentoptions>><</replace>>
<</link>>
<</if>>
|
<<if $kinkcontent.includes(_kink) && $kinkcontentwarning.includes(_kink)>>
<<highlight>>Warning<</highlight>>
<<else>>
<<link "Warning">>
<<if !$kinkcontent.includes(_kink)>>
<<run $kinkcontent.push(_kink)>>
<</if>>
<<if !$kinkcontentaware.includes(_kink)>>
<<run $kinkcontentaware.push(_kink)>>
<</if>>
<<if !$kinkcontentwarning.includes(_kink)>>
<<run $kinkcontentwarning.push(_kink)>>
<</if>>
<<replace "#kinkcontentoptions">><<kinkcontentoptions>><</replace>>
<</link>>
<</if>>
|
<<if !$kinkcontent.includes(_kink)>>
<<highlight>>Block<</highlight>>
<<else>>
<<link "Block">>
<<run $kinkcontent.delete(_kink)>>
<<run $kinkcontentaware.delete(_kink)>>
<<run $kinkcontentwarning.delete(_kink)>>
<<replace "#kinkcontentoptions">><<kinkcontentoptions>><</replace>>
<</link>>
<</if>>
</span>
</td>
</tr>
<</capture>>
<<if _kink isnot _allkinks[_allkinks.length - 1]>>
<tr><td><br></td></tr>
<</if>>
<</for>>
</table>
<div class="small"><<link "About content warnings...">>
<<run setup.open_dialog("HelpAboutContentWarnings", "Help: About Content Warnings", "help")>>
<</link>></div>
</div>
<</widget>><<optionstabs>>
<<if ndef $optnpctattoos>><<set $optnpctattoos to true>><</if>>
<<if ndef $optnpcpiercings>><<set $optnpcpiercings to true>><</if>>
<<if ndef $optcircumcision>><<set $optcircumcision to true>><</if>>
<br><br>
<span style="font-size: 120%;">Content Options</span><br>
<br>
<<kinkcontentoptions>>
<br>
<table class="options-table">
<tr>
<td class="options-col-label" style="width: 13em;">
Other Content Options
</td>
<td class="options-col-content" style="text-align: center;">
<label><<checkbox "$optallownpccustom" false true autocheck>> Allow NPC Customization</label>
<br>
<label><<checkbox "$optdatesim" false true autocheck>> Dating Sim Mechanics</label>
<<highlight small>><<link "What's this?">>
<<run setup.open_dialog("HelpAboutDateSim", "Help: About Dating Sim Mechanics", "help")>>
<</link>><</highlight>>
<br>
<label><<checkbox "$optencounterprogression" false true autocheck>> Encounter Progression</label>
<<highlight small>><<link "What's this?">>
<<run setup.open_dialog("HelpAboutEncounerProgression", "Help: About Encounter Progression", "help")>>
<</link>><</highlight>>
<br>
<label><<checkbox "$optextrabodyhair" false true autocheck>> Additional Body Hair</label>
<br>
<label><<checkbox "$optnpctattoos" false true autocheck>> NPC Tattoos</label>
<br>
<label><<checkbox "$optnpcpiercings" false true autocheck>> NPC Piercings</label>
<br>
<label><<checkbox "$optcircumcision" false true autocheck>> Mention Circumcision</label>
</td>
</tr>
<tr><td><br></td></tr>
<tr>
<td class="options-col-label">
Override Genitals Text
</td>
<<if !$sexpartoverride>>
<<set $sexpartoverride to "">>
<</if>>
<td class="options-col-content" style="text-align: center;">
<span id="textbox-genitals"><<textbox "$sexpartoverride" $sexpartoverride>></span>
<<script>>
$(document).ready(function() {
$('input[type="text"]').attr('autocomplete', 'off');
});
<</script>>
<<button "Default">>
<<set $sexpartoverride to "">>
<<replace "#textbox-genitals">>
<<textbox "$sexpartoverride" $sexpartoverride>>
<</replace>>
<</button>>
</td>
</tr>
<tr><td><br></td></tr>
<tr>
<td class="options-col-label">
World Seed
</td>
<td class="options-col-content" style="text-align: center;">
<<= $seed>>
<<button "Copy">>
<<run navigator.clipboard.writeText($seed)>>
<<replace "#copyseed">><<highlight>>Copied to clipboard<</highlight>><</replace>>
<<timed 2s>>
<<replace "#copyseed">><</replace>>
<</timed>>
<</button>>
<span id="copyseed">
</span>
</td>
</tr>
<tr><td><br></td></tr>
<tr>
<td class="options-col-label">
Restart
</td>
<td>
<button id="menu-item-restart" class="ui-restart" type="button" role="button" tabindex="0" onclick="SugarCube.UI.restart()">↺ Restart</button>
</td>
</tr>
</table>
<br>
<<highlight small>><b>Note:</b> After changing options, you must advance one passage in the story to ensure your changes are saved.<</highlight>>
<<timed 0s>>
<<script>>
$(document).ready(function()
{
$("#checkbox-optallownpccustom").on("input", function()
{
memorize("optallownpccustom", !V.optallownpccustom);
});
});
<</script>>
<</timed>><<script>>
let vars = V;
if (vars.optskillgainmultiplier == undefined)
{
vars.optskillgainmultiplier = 1;
vars.optdailyskillcap = true;
vars.optdebtpaymentmultiplier = 1;
vars.optneeddecaymultiplier = 1;
}
if (vars.optskillgateindicators == undefined) vars.optskillgateindicators = true;
if (vars.optrelationmultiplier == undefined) vars.optrelationmultiplier = 1;
if (vars.opthairgrowthspeedmultiplier == undefined) vars.opthairgrowthspeedmultiplier = 1;
if (vars.optextrabodyhair == undefined) vars.optextrabodyhair = true;
if (vars.optshowskillups == undefined) vars.optshowskillups = false;
<</script>>
<<optionstabs>>
<<if ndef $optskillgateindicators>>
<<set $optskillgateindicators to true>>
<</if>>
<<if !$cheatsenabled>>
<<set $cheatsenabled to false>>
<</if>>
<<set _skillgainlist to [0.5, 0.67, 0.75, 0.9, 1, 1.25, 1.5, 2, 3]>>
<<set _skillgainval to _skillgainlist.indexOf($optskillgainmultiplier)>>
<br><br>
<span style="font-size: 120%;">Difficulty Options</span><br>
<br>
<table class="options-table difficulty-options-table">
<tr>
<td class="options-col-label">
Skill Gain Multiplier<br>
<span class="small" style="font-weight: normal;">(lower is slower)</span>
</td>
<td class="options-col-content">
<label id="skillgainlabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-skillgain" name="slider-opt-skillgain" min="0" max="8" @value="_skillgainval" class="slider difficulty-slider" data-var="_skillgainval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr>
<td class="options-col-label">
</td>
<td class="options-col-content">
<label><<checkbox "$optdailyskillcap" false true autocheck>> Daily Skill Gain Cap</label>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<<set _debtlist to [0.5, 0.67, 0.75, 0.9, 1, 1.25, 1.5, 1.75, 2]>>
<<set _debtval to _debtlist.indexOf($optdebtpaymentmultiplier)>>
<td class="options-col-label">
Weekly Debt Multiplier<br>
<span class="small" style="font-weight: normal;">(lower is easier)</span>
</td>
<td class="options-col-content">
<label id="debtlabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-debt" name="slider-opt-debt" min="0" max="8" @value="_debtval" class="slider difficulty-slider" data-var="_debtval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr><td> </td></tr>
<tr>
<<set _rellist to [0.5, 0.67, 0.75, 0.9, 1, 1.25, 1.5, 2, 3]>>
<<set _relval to _rellist.indexOf($optrelationmultiplier)>>
<td class="options-col-label">
Relationship Gain Multiplier<br>
<span class="small" style="font-weight: normal;">(higher is faster)</span>
</td>
<td class="options-col-content">
<label id="rellabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-rel" name="slider-opt-rel" min="0" max="8" @value="_relval" class="slider difficulty-slider" data-var="_relval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr><td> </td></tr>
<tr>
<<set _needdecaylist to [0.5, 0.75, 0.9, 1, 1.1, 1.25, 1.5]>>
<<set _needdecayval to _needdecaylist.indexOf($optneeddecaymultiplier)>>
<td class="options-col-label">
Need Decay Multiplier<br>
<label class="small" style="font-weight: normal;">(lower is easier)</label>
</td>
<td class="options-col-content">
<label id="needdecaylabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-needdecay" name="slider-opt-needdecay" min="0" max="6" @value="_needdecayval" class="slider difficulty-slider" data-var="_needdecayval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr><td> </td></tr>
<tr>
<<set _uncharlist to [0, 0.25, 0.5, 0.75, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2]>>
<<set _uncharval to _uncharlist.indexOf($optuncharcomposuremult)>>
<td class="options-col-label">
Uncharacteristic Action Penalty Multiplier<br>
<label class="small" style="font-weight: normal;">(lower is easier)</label>
</td>
<td class="options-col-content">
<label id="uncharlabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-unchar" name="slider-opt-unchar" min="0" max="10" @value="_uncharval" class="slider difficulty-slider" data-var="_uncharval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr>
<<set _hairratelist to [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]>>
<<set _hairrateval to _hairratelist.indexOf($opthairgrowthspeedmultiplier)>>
<td class="options-col-label">
<br>Hair Growth Rate<br>
<span class="small" style="font-weight: normal;">(higher is faster)</span>
</td>
<td class="options-col-content">
<label id="hairgrowthlabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-hair" name="slider-opt-hair" min="0" max="8" @value="_hairrateval" class="slider difficulty-slider" data-var="_hairrateval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr><td> </td></tr>
<tr><td> </td></tr>
<tr>
<td class="options-col-label">
Skills
</td>
<td class="options-col-content">
<label><<checkbox "$optskillgateindicators" false true autocheck>> Show Hints for Hidden Skillgated Options</label>
<br>
<label><<checkbox "$optshowskillups" false true autocheck>> Show Skillups</label>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td class="options-col-label">
Cheat Mode
</td>
<td class="options-col-content">
<label><<checkbox "$cheatsenabled" false true autocheck>> Enable Cheats</label>
</td>
</tr>
</table>
<br><br>
<<button "Reset to default">>
<<set $optskillgainmultiplier to 1>>
<<set $optdailyskillcap to true>>
<<set $optdebtpaymentmultiplier to 1>>
<<set $optneeddecaymultiplier to 1>>
<<set $optskillgateindicators to true>>
<<set $opthairgrowthspeedmultiplier to 1>>
<<set $optextrabodyhair to true>>
<<set $optshowskillups to false>>
<<set $optuncharcomposuremult to 1>>
<<script>>
Dialog.setup("Difficulty Options", "options");
Dialog.wiki(Story.get("DifficultyOptions").processText());
Dialog.open();
<</script>>
<</button>>
<<highlight "small nokeys">>
<<link "About the difficulty options...">>
<<script>>
Dialog.setup("Help: About the Difficulty Options", "help");
Dialog.wiki(Story.get("HelpAboutDifficulty").processText());
Dialog.open();
<</script>>
<</link>>
<</highlight>>
<<timed 0s>>
<<script>>
$(document).ready(function()
{
let trueval = V.optskillgainmultiplier;
let lab = trueval.toString() + "x";
$("#skillgainlabel").text(lab);
$("#slider-opt-skillgain").on("input", function()
{
let val = T.skillgainval;
let trueval = T.skillgainlist[val];
State.setVar("$optskillgainmultiplier", trueval);
let lab = trueval.toString() + "x";
$("#skillgainlabel").empty().text(lab);
});
trueval = V.optdebtpaymentmultiplier;
lab = trueval.toString() + "x";
$("#debtlabel").text(lab);
$("#slider-opt-debt").on("input", function()
{
let val = T.debtval;
let trueval = T.debtlist[val];
State.setVar("$optdebtpaymentmultiplier", trueval);
let lab = trueval.toString() + "x";
$("#debtlabel").empty().text(lab);
});
trueval = V.optrelationmultiplier;
lab = trueval.toString() + "x";
$("#rellabel").text(lab);
$("#slider-opt-rel").on("input", function()
{
let val = T.relval;
let trueval = T.rellist[val];
State.setVar("$optrelationmultiplier", trueval);
let lab = trueval.toString() + "x";
$("#rellabel").empty().text(lab);
});
trueval = V.optneeddecaymultiplier;
lab = trueval.toString() + "x";
$("#needdecaylabel").text(lab);
$("#slider-opt-needdecay").on("input", function()
{
let val = T.needdecayval;
let trueval = T.needdecaylist[val];
State.setVar("$optneeddecaymultiplier", trueval);
let lab = trueval.toString() + "x";
$("#needdecaylabel").empty().text(lab);
});
trueval = V.optuncharcomposuremult;
lab = trueval.toString() + "x";
$("#uncharlabel").text(lab);
$("#slider-opt-unchar").on("input", function()
{
let val = T.uncharval;
let trueval = T.uncharlist[val];
State.setVar("$optuncharcomposuremult", trueval);
let lab = trueval.toString() + "x";
$("#uncharlabel").empty().text(lab);
});
trueval = V.opthairgrowthspeedmultiplier;
lab = trueval.toString() + "x";
$("#hairgrowthlabel").text(lab);
$("#slider-opt-hair").on("input", function()
{
let val = T.hairrateval;
let trueval = T.hairratelist[val];
State.setVar("$opthairgrowthspeedmultiplier", trueval);
let lab = trueval.toString() + "x";
$("#hairgrowthlabel").empty().text(lab);
});
$("#checkbox-cheatsenabled").on("input", function()
{
State.variables.cheatsenabled = $(this).prop("checked");
if (State.variables.cheatsenabled)
State.variables.cheatseverenabled = true;
Dialog.setup("Difficulty Options", "options");
Dialog.wiki(Story.get("DifficultyOptions").processText());
Dialog.open();
});
});
<</script>>
<</timed>><<optionstabs>>
<br><br>
<<if ndef $optriverratperfmult>><<set $optriverratperfmult to 1>><</if>>
<<if ndef $optriverratvibemult>><<set $optriverratvibemult to 1>><</if>>
<span style="font-size: 120%;">Storyline Options</span><br>
<br>
<table class="options-table difficulty-options-table">
<tr>
<td class="options-col-label">
<span style="font-size: larger;">
River Rat Career
</span>
</td>
<td> </td>
</tr>
<tr><td> </td></tr>
<tr>
<td class="options-col-label">
Performance Change Multiplier<br>
<span class="small" style="font-weight: normal;">(lower is slower)</span>
</td>
<<set _rrperflist to [0.5, 0.75, 0.9, 1, 1.25, 1.5, 2, 3, 4]>>
<<set _rrperfval to _rrperflist.indexOf($optriverratperfmult)>>
<td class="options-col-content">
<label id="rrperflabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-rrperf" name="slider-opt-rrperf" min="0" max="8" @value="_rrperfval" class="slider difficulty-slider" data-var="_rrperfval" oninput="SugarCubeInput(this)">
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td class="options-col-label">
Vibe Change Multiplier<br>
<span class="small" style="font-weight: normal;">(lower is slower)</span>
</td>
<<set _rrvibelist to [0.5, 0.75, 0.9, 1, 1.25, 1.5, 2, 3, 4]>>
<<set _rrvibeval to _rrvibelist.indexOf($optriverratvibemult)>>
<td class="options-col-content">
<label id="rrvibelabel" class="options-col-slider-value-label">1x</label>
<input type="range" id="slider-opt-rrvibe" name="slider-opt-rrvibe" min="0" max="8" @value="_rrvibeval" class="slider difficulty-slider" data-var="_rrvibeval" oninput="SugarCubeInput(this)">
</td>
</tr>
</table>
<br><br>
<<button "Reset to default">>
<<set $optriverratperfmult to 1>>
<<set $optriverratvibemult to 1>>
<<script>>
Dialog.setup("Storyline Options", "options");
Dialog.wiki(Story.get("StorylineOptions").processText());
Dialog.open();
<</script>>
<</button>>
<<timed 0s>>
<<script>>
$(document).ready(function()
{
let trueval = V.optriverratperfmult;
let lab = trueval.toString() + "x";
$("#rrperflabel").text(lab);
$("#slider-opt-rrperf").on("input", function()
{
let val = T.rrperfval;
let trueval = T.rrperflist[val];
State.setVar("$optriverratperfmult", trueval);
let lab = trueval.toString() + "x";
$("#rrperflabel").empty().text(lab);
});
trueval = V.optriverratvibemult;
lab = trueval.toString() + "x";
$("#rrvibelabel").text(lab);
$("#slider-opt-rrvibe").on("input", function()
{
let val = T.rrvibeval;
let trueval = T.rrvibelist[val];
State.setVar("$optriverratvibemult", trueval);
let lab = trueval.toString() + "x";
$("#rrvibelabel").empty().text(lab);
});
});
<</script>>
<</timed>><<optionstabs>>
<br><br>
<<set _coloroptions to recall("coloroptions", null) || {}>>
<<set _female to _coloroptions.female || "#e968ee">>
<<set _male to _coloroptions.male || "#604eff">>
<<set _nonbinary to _coloroptions.nonbinary || "#35f3ba">>
<<set _femaleemlink to _coloroptions.femaleemlink || "#edd8ee">>
<<set _maleemlink to _coloroptions.maleemlink || "#bdc1f0">>
<<set _nonbinaryemlink to _coloroptions.nonbinaryemlink || "#d2faee">>
<span style="font-size: 120%;">Color Options</span><br>
<br>
<table style="width: 32em;">
<tr>
<td>
<<set _color to setup.get_color("femaleemlink")>>
<<set _style to 'color: ' + _color + ';'>>
This is how <span id="femaleemlinkexample" @style="_style">female names</span> are colored in passages.
</td>
<td>
<input type="color" id="femaleemlinkpicker" @value="_color">
</td>
</tr>
<tr>
<td>
<<set _color to setup.get_color("female")>>
<<set _style to 'color: ' + _color + ';'>>
This is how <span id="femaleexample" @style="_style">female names</span> are colored in the interface.
</td>
<td>
<input type="color" id="femalepicker" @value="_color">
</td>
</tr>
<tr>
<td>
<<set _color to setup.get_color("maleemlink")>>
<<set _style to 'color: ' + _color + ';'>>
This is how <span id="maleemlinkexample" @style="_style">male names</span> are colored in passages.
</td>
<td>
<input type="color" id="maleemlinkpicker" @value="_color">
</td>
</tr>
<tr>
<td>
<<set _color to setup.get_color("male")>>
<<set _style to 'color: ' + _color + ';'>>
This is how <span id="maleexample" @style="_style">male names</span> are colored in the interface.
</td>
<td>
<input type="color" id="malepicker" @value="_color">
</td>
</tr>
<tr>
<td>
<<set _color to setup.get_color("nonbinaryemlink")>>
<<set _style to 'color: ' + _color + ';'>>
This is how <span id="nonbinaryemlinkexample" @style="_style">nonbinary names</span> are colored in passages.
</td>
<td>
<input type="color" id="nonbinaryemlinkpicker" @value="_color">
</td>
</tr>
<tr>
<td>
<<set _color to setup.get_color("nonbinary")>>
<<set _style to 'color: ' + _color + ';'>>
This is how <span id="nonbinaryexample" @style="_style">nonbinary names</span> are colored in the interface.
</td>
<td>
<input type="color" id="nonbinarypicker" @value="_color">
</td>
</tr>
</table>
<br>
<<button "Reset to default">>
<<set $coloroptions to {
female: "#e968ee",
male: "#604eff",
nonbinary: "#35f3ba",
femaleemlink: "#edd8ee",
maleemlink: "#bdc1f0",
nonbinaryemlink: "#d2faee",
}>>
<<run memorize("coloroptions", $coloroptions)>>
<<script>>
Dialog.setup("Color Options", "ColorOptions");
Dialog.wiki(Story.get("ColorOptions").processText());
Dialog.open();
<</script>>
<</button>>
<<script>>
$(document).ready(function()
{
$("#femaleemlinkpicker").on("input", function()
{
let color = $("#femaleemlinkpicker")[0].value;
setup.set_color("femaleemlink", color);
$("#femaleemlinkexample")[0].style.color = color;
});
$("#maleemlinkpicker").on("input", function()
{
let color = $("#maleemlinkpicker")[0].value;
setup.set_color("maleemlink", color);
$("#maleemlinkexample")[0].style.color = color;
});
$("#nonbinaryemlinkpicker").on("input", function()
{
let color = $("#nonbinaryemlinkpicker")[0].value;
setup.set_color("nonbinaryemlink", color);
$("#nonbinaryemlinkexample")[0].style.color = color;
});
$("#femalepicker").on("input", function()
{
let color = $("#femalepicker")[0].value;
setup.set_color("female", color);
$("#femaleexample")[0].style.color = color;
});
$("#malepicker").on("input", function()
{
let color = $("#malepicker")[0].value;
setup.set_color("male", color);
$("#maleexample")[0].style.color = color;
});
$("#nonbinarypicker").on("input", function()
{
let color = $("#nonbinarypicker")[0].value;
setup.set_color("nonbinary", color);
$("#nonbinaryexample")[0].style.color = color;
});
});
<</script>><<optionstabs>>
<br><br>
Changes may not appear to take effect until you advance to another passage.
<br><br>
<<link "Restore all needs">>
<<run setup.Needs.magic_restore()>>
<</link>>
<br><br>
<div class="two-column-container">
<div class="two-column">
<<link "Restore Rest need">>
<<alterneed Rest 1000>>
<</link>>
<br>
<<link "Restore Relaxation need">>
<<alterneed Relaxation 1000>>
<</link>>
<br>
<<link "Restore Attention need">>
<<alterneed Attention 1000>>
<</link>>
<br>
<<link "Restore Bladder need">>
<<alterneed Bladder 1000>>
<</link>>
<br>
<<link "Restore Food need">>
<<alterneed Food 1000>>
<</link>>
<br>
<<link "Restore Hygiene need">>
<<alterneed Hygiene 1000>>
<</link>>
<br>
<<link "Restore Composure need">>
<<alterneed Composure 1000>>
<</link>>
<br>
<<link "Restore Release need">>
<<alterneed Release 1000>>
<</link>>
</div>
<div class="two-column">
<<link "Reduce Rest need">>
<<alterneed Rest -1000>>
<</link>>
<br>
<<link "Reduce Relaxation need">>
<<alterneed Relaxation -1000>>
<</link>>
<br>
<<link "Reduce Attention need">>
<<alterneed Attention -1000>>
<</link>>
<br>
<<link "Reduce Bladder need">>
<<alterneed Bladder -1000>>
<</link>>
<br>
<<link "Reduce Food need">>
<<alterneed Food -1000>>
<</link>>
<br>
<<link "Reduce Hygiene need">>
<<alterneed Hygiene -1000>>
<</link>>
<br>
<<link "Reduce Composure need">>
<<alterneed Composure -1000>>
<</link>>
<br>
<<link "Reduce Release need">>
<<alterneed Release -1000>>
<</link>>
</div>
</div>
<br>
<div class="two-column-container">
<div class="two-column">
<<link "Add $100">><<money 100>><</link>>
<br>
<<link "Add $1,000">><<money 1000>><</link>>
<br>
<<link "Add $10,000">><<money 10000>><</link>>
</div>
<div class="two-column">
<<link "Remove $100">><<spend 100>><</link>>
<br>
<<link "Remove $1,000">><<spend 1000>><</link>>
<br>
<<link "Remove $10,000">><<spend 10000>><</link>>
</div>
</div>
<br><br>
<<if ndef $optfreezeaddrels>><<set $optfreezeaddrels to false>><</if>>
<<if ndef $optfreezeremrels>><<set $optfreezeremrels to false>><</if>>
<table class="options-table">
<tr>
<td class="options-col-label" style="width: 13em;">
Cheat Toggles
</td>
<td class="options-col-content" style="text-align: left;">
<label><<checkbox "$optfreezeaddrels" false true autocheck>> Freeze Adding New Relationships</label>
<br>
<label><<checkbox "$optfreezeremrels" false true autocheck>> Freeze Breakups and Removing Relationships</label>
</td>
</tr>
</table>
<br>
You may also alter the attitudes of NPCs in the View Person dialog, available by clicking their names within passage text or by clicking the People button and finding them there.
<br><br>
Click the Skills button in the left panel to cheat your skills.<<if !$font>><<set $font to "sans-serif">><</if>>
<<if !$fontsize>><<set $fontsize to "16px">><</if>>
<<if ndef $optshowemojis>><<set $optshowemojis to true>><</if>>
<<if ndef $optamericlock>><<set $optamericlock to true>><</if>>
<<if ndef $optmeterhovertext>><<set $optmeterhovertext to true>><</if>>
<<if ndef $optmetertext>><<set $optmetertext to false>><</if>>
<<optionstabs>>
<br><br>
<span style="font-size: 120%;">Accessibility Options</span>
<br><br>
<table class="options-table">
<tr>
<td class="options-col-label" style="width: 13em;">
Formatting Options
</td>
<td class="options-col-content" style="text-align: left;">
<label><<checkbox "$optshowemojis" false true autocheck>> Show Emoji Icons</label>
<br>
<label><<checkbox "$opttooltips" false true autocheck>> Show Tooltips</label>
<br>
<label><<checkbox "$optamericlock" false true autocheck>> Use American Time Format</label>
<br>
<label><<checkbox "$optmeterhovertext" false true autocheck>> Show Meter Percentages On Hover</label>
<br>
<label><<checkbox "$optmetertext" false true autocheck>> Always Show Meter Percentages</label>
</td>
</tr>
<tr><td><br></td></tr>
<tr>
<td class="options-col-label" style="width: 13em;">
Fonts
</td>
<td class="options-col-content" style="text-align: left;">
<label><<radiobutton "$font" "sans-serif" autocheck>> <span style="font-family: sans-serif;">sans-serif (default)</span></label>
<br>
<label><<radiobutton "$font" "TaHoma" autocheck>> <span style="font-family: TaHoma;">TaHoma</span></label>
<br>
<label><<radiobutton "$font" "OpenDyslexic-Regular" autocheck>> <span style="font-family: OpenDyslexic-Regular;">OpenDyslexic</span></label>
</td>
</tr>
<tr><td><br></td></tr>
<tr>
<td class="options-col-label" style="width: 13em;">
Font Size
</td>
<td class="options-col-content" style="text-align: left;">
<label><<radiobutton "$fontsize" "12px" autocheck>> <span style="font-size: 12px;">small</span></label>
<br>
<label><<radiobutton "$fontsize" "16px" autocheck>> <span style="font-size: 16px;">medium (default)</span></label>
<br>
<label><<radiobutton "$fontsize" "20px" autocheck>> <span style="font-size: 20px;">large</span></label>
<br>
<label><<radiobutton "$fontsize" "24px" autocheck>> <span style="font-size: 24px;">very large</span></label>
</td>
</tr>
</table>
<br>
<<highlight small>>Note: Some formatting changes will not appear until you advance to a new passage.<</highlight>>
<<script>>
$(document).on('click', 'input[type="radio"][name="radiobutton-font"]', function() {
setTimeout(function() {
console.log(`Font style selection changed: ${V.font}`);
$(':root').css('--font-family', V.font);
}, 40);
});
$(document).on('click', 'input[type="radio"][name="radiobutton-fontsize"]', function() {
setTimeout(function() {
console.log(`Font size selection changed: ${V.fontsize}`);
$(':root').css('--font-size', V.fontsize);
}, 40);
});
<</script>><<if ndef $saveoptions>>
<<set $saveoptions to {autosave: true, onSleep: true}>>
<</if>>
<<optionstabs>>
<br><br>
<span style="font-size: 120%;">Save Options</span>
<br><br>
<table class="options-table">
<tr>
<td class="options-col-label" style="width: 13em;">
</td>
<td class="options-col-content" style="text-align: left;">
<label><<checkbox "$saveoptions.autosave" false true autocheck>> Autosave</label>
</td>
</tr>
<tr><td><br></td></tr>
<tr>
<td class="options-col-label" style="width: 13em;">
Autosave Triggers
</td>
<td class="options-col-content" style="text-align: left;" id="autosave-options">
<label><<checkbox "$saveoptions.onSleep" false true autocheck>> When sleeping</label>
<br>
<label><<checkbox "$saveoptions.onTime0600" false true autocheck>> At 6am (06:00)</label>
<br>
<label><<checkbox "$saveoptions.onTime1200" false true autocheck>> At noon (12:00)</label>
<br>
<label><<checkbox "$saveoptions.onTime1800" false true autocheck>> At 6pm (18:00)</label>
<br>
<label><<checkbox "$saveoptions.onTime0000" false true autocheck>> At midnight (00:00)</label>
<br>
<label><<checkbox "$saveoptions.onWeekly" false true autocheck>> Sunday morning</label>
</td>
</tr>
</table>
<<script>>
$(document).on('click', 'input[type="checkbox"][name="checkbox-saveoptionsautosave"]', function() {
setTimeout(function() {
const autosave = $('input[name="checkbox-saveoptionsautosave"]').prop('checked');
$('#autosave-options input[type="checkbox"]').each(function() {
$(this).prop('disabled', !autosave);
});
}, 40);
});
<</script>><<set _saves to Save.get()>>
<<set _newest to null>><<set _newesttime to 0>>
<<for _i to 0; _i < Save.slots.length; _i++>>
<<set _save to _saves.slots[_i]>>
<<if _save isnot null and _save.date gt _newesttime>>
<<set _newest to _i>><<set _newesttime to _save.date>>
<</if>>
<</for>>
<<set _save to _saves.autosave>>
<<if _save isnot null and _save.date gt _newesttime>>
<<set _newest to "auto">>
<</if>>
<table id="saves-list">
<tbody>
<tr>
<<set _save to _saves.autosave>>
<td><b title="Autosave" aria-label="Autosave">A</b></td>
<td style="justify-content: center;">
<<if _save is null>>
<button id="saves-load-auto" class="load" disabled="" aria-disabled="true">Load</button>
<<else>>
<<= '<button id="saves-load-auto" class="load ui-close" type="button" role="button" tabindex="0" aria-label="Load Autosave" title="Load Autosave" onclick="SugarCube.Save.autosave.load()">Load</button>'>>
<</if>>
</td>
<<if _save is null>>
<td class="empty">• • •</td>
<<else>>
<td>
<div><<= _save.title>></div>
<<set _hl to "datestamp">><<if _newest is "auto">><<set _hl to "datestamp notice">><</if>>
<<highlight _hl>><<set _date to new Date(_save.date)>><<= _date.toLocaleString()>><</highlight>>
</td>
<</if>>
<td>
<<if _save is null>>
<button id="saves-delete-auto" class="delete" disabled="" aria-disabled="true">Delete</button>
<<else>>
<button id="saves-delete-auto" class="delete" type="button" role="button" tabindex="0" aria-label="Delete Autosave" title="Delete Autosave" onclick="{SugarCube.Save.autosave.delete(); SugarCube.Dialog.close();}">Delete</button>
<</if>>
</td>
</tr>
<<for _i to 0; _i lt Save.slots.length; _i++>>
<<set _save to _saves.slots[_i]>>
<tr>
<td><<= _i + 1>></td>
<td style="justify-content: center;">
<<= '<button id="saves-save-' + _i + '" class="save ui-close" type="button" role="button" tabindex="0" aria-label="Save Slot ' + (_i + 1) + '" title="Save Slot ' + (_i + 1) + '" onclick="SugarCube.Save.slots.save(' + _i + ')">Save</button>'>>
<<if _save is null>>
<<= '<button id="saves-load-' + _i + '" class="load" disabled="" aria-disabled="true">Load</button>'>>
<<else>>
<<= '<button id="saves-load-' + _i + '" class="load ui-close" type="button" role="button" tabindex="0" aria-label="Load Slot ' + (_i + 1) + '" title="Load Slot ' + (_i + 1) + '" onclick="SugarCube.Save.slots.load(' + _i + ')">Load</button>'>>
<</if>>
</td>
<<if _save is null>>
<td class="empty">• • •</td>
<<else>>
<td>
<div><<= _save.title>></div>
<<set _hl to "datestamp">><<if _newest is _i>><<set _hl to "datestamp notice">><</if>>
<<highlight _hl>><<set _date to new Date(_save.date)>><<= _date.toLocaleString()>><</highlight>>
</td>
<</if>>
<td>
<<if _save is null>>
<<= '<button id="saves-delete-' + _i + '" class="delete" disabled="" aria-disabled="true">Delete</button>'>>
<<else>>
<<= '<button id="saves-delete-' + _i + '" class="delete" type="button" role="button" tabindex="0" aria-label="Delete Slot ' + (_i + 1) + '" title="Delete Slot ' + (_i + 1) + '" onclick="{SugarCube.Save.slots.delete(' + _i + '); SugarCube.Dialog.close();}">Delete</button>'>>
<</if>>
</td>
</tr>
<</for>>
</tbody>
</table>
<ul class="buttons">
<li><button id="saves-export" class="ui-close" type="button" role="button" tabindex="0" onclick="SugarCube.Save.export()">Save to Disk…</button></li>
<li><button id="saves-import" type="button" role="button" tabindex="0" onclick="jQuery(document.createElement('input'))
.prop('type', 'file')
.on('change', SugarCube.Save.import)
.trigger('click');">Load from Disk…</button></li>
<li><button id="menu-item-restart" class="ui-restart" type="button" role="button" tabindex="0" onclick="SugarCube.UI.restart()">↺ Restart</button></li>
<li><label><input id="checkbox-idbactive" name="checkbox-idbactive" type="checkbox" class="macro-checkbox" onchange="idb.active=true;idb.saveList()"> Use idb </label></li>
<li><button id="saves-clear" type="button" role="button" tabindex="0" onclick="SugarCube.Dialog.setup('Confirm Delete All Saves');SugarCube.Dialog.wiki(SugarCube.Story.get('DeleteSavesConfirm').processText());SugarCube.Dialog.open();">Delete All</button></li>
</ul>
<input type="file" id="saves-import-file" tabindex="-1" aria-hidden="true" style="display: block; visibility: hidden; position: fixed; left: -9999px; top: -9999px; width: 1px; height: 1px;">Are you sure you want to delete all your saves? This can't be undone.
<br><br>
<ul class="buttons">
<li><button id="saves-clear" type="button" role="button" tabindex="0" onclick="SugarCube.Save.clear()">Delete All</button></li>
<li><button id="saves-cancel" type="button" role="button" tabindex="0" onclick="SugarCube.Dialog.close()">Cancel</button></li>
</ul><<for _course range $pccourses>>
<<run setup.School.repair_course_data(_course)>>
<</for>>
<<set _cscore to setup.School.current_average_score()>>
<<if _cscore isnot -1>>
<<set _grade to setup.School.find_grade(_cscore * 100)>>
<<set _hl to "grade-"+_grade[0]>>
<<set _gpa to setup.School.grades[_grade].gpa>>
Current GPA: <<highlight _hl>><<= _gpa.toFixed(1)>><</highlight>>
<</if>>
<<set _pscore to setup.School.last_average_score()>>
<<if _pscore isnot -1>>
<<if _cscore isnot -1>><br><</if>>
<<set _grade to setup.School.find_grade(_pscore * 100)>>
<<set _hl to "grade-"+_grade[0]>>
<<set _gpa to setup.School.grades[_grade].gpa>>
Last term's GPA: <<highlight _hl>><<= _gpa.toFixed(1)>><</highlight>>
<</if>>
<div class="study-menus">
<<for _course range $pccourses>>
<<set _i to $pccourses.indexOf(_course)>>
<<set _label to setup.remove_spaces(_course)>>
<div class="study-menu-container" style="min-width: 16em;">
<div class="study-menu" style="min-height: 10em;">
<div class="study-menu-row-1-col-1">
<b>_course</b><br>
<<set _major to setup.School.courses[_course].major>>
<<set _cloc to setup.School.majors[_major].location>>
<<set _clocname to setup.Maps[_cloc].name>>
<<= _clocname>><br>
<<set _prof to setup.School.professor_of_course(_course)>>
<<professor _prof>><br>
<<if $gpa and $gpa[_course] and $gpa[_course].currentgrade != -1>>
<<set _grade to setup.School.find_grade($gpa[_course].currentgrade * 100)>>
<<set _hl to "grade-"+_grade[0]>>
Current grade: <<highlight _hl>><<= _grade>><</highlight>>
<</if>>
</div>
<div class="study-menu-row-1-col-2">
<<set _days to setup.School.blocks[setup.School.courses[_course].schedule]>>
<<for _i to 0; _i lt _days.length; _i++>>
<<= _days[_i].day>>s at <<= setup.Time.clock(_days[_i].hour, 0)>><br>
<</for>>
</div>
<div class="study-menu-row-2-col-1" style="min-height: 3em;">
<<set _next to setup.School.show_next_class_specific(_course)>>
Next class:
<<if _next.indexOf("Today") == 0>>
<span class="ungood">_next</span>
<<elseif _next.indexOf("Tomorrow") == 0>>
<span class="unbad">_next</span>
<<else>>
_next
<</if>>
<<if $homework and $homework[_course] and $homework[_course].completed lt $homework[_course].assigned>>
<br>
<span class="ungood">Homework due next class!</span>
<</if>>
</div>
<</for>>
<<set _sports to $pcsports || []>>
<<for _course range _sports>>
<<set _i to _sports.indexOf(_course)>>
<<set _label to setup.remove_spaces(_course)>>
<div class="study-menu-container" style="min-width: 16em;">
<div class="study-menu" style="min-height: 10em">
<div class="study-menu-row-1-col-1">
<b><<cap _course>></b><br>
<<if setup.School.sports[_course].outside>>
<<set _clocname to setup.Maps["Campus"].nodes[setup.School.sports[_course].outside].name>>
<<else>>
<<set _clocname to setup.Maps[_cloc].name>>
<</if>>
<<= _clocname>><br>
<<set _prof to setup.School.professor_of_course(_course)>>
<<coach _prof>><br>
</div>
<div class="study-menu-row-1-col-2">
<<set _days to setup.School.blocks[setup.School.sports[_course].schedule]>>
<<for _i to 0; _i lt _days.length; _i++>>
<<= _days[_i].day>>s at <<= setup.Time.clock(_days[_i].hour, 0)>><br>
<</for>>
</div>
<div class="study-menu-row-2-col-1" style="min-height: 3em;">
<<set _next to setup.School.show_next_class_specific(_course)>>
Next practice:
<<if _next.indexOf("Today") == 0>>
<span class="ungood">_next</span>
<<elseif _next.indexOf("Tomorrow") == 0>>
<span class="unbad">_next</span>
<<else>>
_next
<</if>>
<<set _trackschedule to setup.School.sports[_course].trackschedule || _course>>
<<if $gameschedule and $gameschedule[_trackschedule]>>
<br>
<<set _next to $gameschedule[_trackschedule]>>
Next game:
<<if _next.day is $day and _next.month is setup.Time.months[$month]>>
<span class="ungood">Today at <<= setup.Time.clock(_next.hour, 0)>></span>
<<elseif _next.day is $day + 1 and _next.month is setup.Time.months[$month]>>
<span class="unbad">Tomorrow at <<= setup.Time.clock(_next.hour, 0)>></span>
<<else>>
<<= setup.Time.weekday(_next.day)>>, <<= _next.day>> <<= _next.month>>
<</if>>
<</if>>
</div>
<</for>>
</div>
<<set _exam to setup.School.is_exam_week()>>
<<if _exam isnot null and setup.Time.weekday() isnot "Saturday">>
<br><br>
This week is <span class="notice">_exam</span> week! Study up before your final session of each class this week!
<</if>><<charactertabs>>
<<set _mainskills to setup.Skills.mainskills>>\
<<set _skills to [...setup.Skills.mainskills, ...setup.Skills.otherskills]>>\
<div id="skills-dialog" style="width: 32em; margin: auto;">
<<nobr>>
<table class="stats-table">
<tr class="stats-table">
<td class="stats-table">Name</td>
<td class="stats-table">Progress to Next Level</td>
<td style="width: 0"></td>
<td class="stats-table">Level</td>
<<if $cheatsenabled>>
<td class="stats-table">Cheat</td>
<</if>>
</tr>
<<set _pcskills to V.pcskills>>
<<set _cappedcolor to "rgb(12, 153, 172)">>
<<for _i to 0; _i lt _skills.length; _i++>>
<<if !$skillsraisedtoday or !$skillsraisedtoday[_skills[_i].name]>>
<<set _capped to false>>
<<else>>
<<set _sklevel to $pc.skill_level(_skills[_i].name)>>
<<set _skcap to $optdailyskillcap ? (setup.Skills.daily_caps[_sklevel] * $optskillgainmultiplier) : 1000>>
<<set _capped to $skillsraisedtoday[_skills[_i].name] gte _skcap>>
<</if>>
<<set _skill to _skills[_i].name>>
<<set _barid to _skill.split(' ')[0]>>
<<if setup.Skills.is_main(_skill) or _pcskills[_skill] gt 0>>
<<if _skill in _pcskills>><<set _lvl to Math.floor(_pcskills[_skill]/100)>><<else>><<set _lvl to 0>><</if>>
<tr class="stats-table">
<td class="stats-table" style="width: 35%; text-align: center;"><<hovertip setup.skill_hovertip(_skill)>><b><<skilllabel _skill _lvl>></b><</hovertip>></td>
<td class="stats-table" style="width: 65%">
<<= Meter(_pcskills[_skill] - (Math.floor(_pcskills[_skill] / 100) * 100), 100, "hzskill" + _barid + "bar", true, undefined, _capped ? _cappedcolor : undefined, _capped ? "(cap)" : undefined)>>
</td>
<td style="width: 0"></td>
<td class="stats-table" style="width: 10%; text-align: center;"><b>
<<set _hl to "skilllevel-" + _lvl>>
<<set _id to "skilllevel-" + setup.remove_spaces(_skill)>>
<span @id="_id"><<highlight _hl>><<= _lvl>><</highlight>></span>
</b></td>
<<if $cheatsenabled>>
<td class="stats-table">
<<capture _skill>>
<<link "-">>
<<set _pcskills[_skill] = Math.max(0, _pcskills[_skill] - 100)>>
<<set $pcskills to _pcskills>>
<<set _lvl to Math.floor(_pcskills[_skill]/100)>>
<<set _hl to "skilllevel-" + _lvl>>
<<set _id to "skilllevel-" + setup.remove_spaces(_skill)>>
<<set _sgid to "#" + _id>>
<<replace _sgid>><span @id="_id"><<highlight _hl>><<= _lvl>><</highlight>></span><</replace>>
<</link>>
<<link "+">>
<<set _pcskills[_skill] = Math.min(1000, _pcskills[_skill] + 100)>>
<<set $pcskills to _pcskills>>
<<set _lvl to Math.floor(_pcskills[_skill]/100)>>
<<set _hl to "skilllevel-" + _lvl>>
<<set _id to "skilllevel-" + setup.remove_spaces(_skill)>>
<<set _sgid to "#" + _id>>
<<replace _sgid>><span @id="_id"><<highlight _hl>><<= _lvl>><</highlight>></span><</replace>>
<</link>>
<</capture>>
</td>
<</if>>
</tr>
<</if>>
<</for>>
</table>
<</nobr>>
</div>
<<link "About skills...">>
<<script>>
Dialog.setup("Help: Skills", "help");
Dialog.wiki(Story.get("HelpSkills").processText());
Dialog.open();
<</script>>
<</link>>/* <<run console.time('entire process')>>
<<run console.time('init')>> */
<<if ndef $optsocialdialoguemeters>><<set $optsocialdialoguemeters to true>><</if>>
<<set _tabs to ["here", "friends", "rompartners", "sexpartners", "admirers", "rivals", "acquaintances", "haters", "special", "faculty"]>>
<<set _tablabels to ["People Here", "Friends", "Romantic Partners", "Sexual Partners", "Admirers", "Rivals", "Acquaintances", "Haters", "Special", "Faculty"]>>
<<if $jobs && $jobs.length gt 0>>
<<run _tabs.push("coworkers")>>
<<run _tablabels.push("Coworkers")>>
<</if>>
<<if $pcsports && $pcsports.length gt 0>>
<<run _tabs.push("team")>>
<<run _tablabels.push("Teammates")>>
<</if>>
<<if def $favoritepeople and $favoritepeople.length gt 0>>
<<run _tabs.splice(1, 0, "favorite")>>
<<run _tablabels.splice(1, 0, "Favorites")>>
<</if>>
<<if $crush>>
<<run _tabs.splice(2, 0, "crush")>>
<<run _tablabels.splice(2, 0, "Crush")>>
<</if>>
<<if !$peopletab>><<set $peopletab to _tabs[0]>><</if>>
<<if !$peoplepage>><<set $peoplepage to 0>><</if>>
/* <<run console.time('iterate through tabs')>> */
<<for _tab range _tabs>>
<<set _label to _tablabels[_tabs.indexOf(_tab)]>>
<<if _tab isnot _tabs[0]>>| <</if>>
<<if _tab is $peopletab>>
<span class="notice">_label</span>
<<else>>
<<capture _tab>>
<<link _label>>
<<set $peopletab to _tab>>
<<set $peoplepage to 0>>
<<script>>
Dialog.setup("People", "social");
Dialog.wiki(Story.get("Social").processText());
Dialog.open();
<</script>>
<</link>>
<</capture>>
<</if>>
<</for>>
/* <<run console.timeEnd('iterate through tabs')>> */
<br><br>
/* <<run console.time('tab switch statement')>> */
<<script>>
switch (V.peopletab)
{
case "here":
{
if (V.pc.in_encounter())
T.people = [...V.encounter.partners(), ...V.encounter.witnesses];
else if (V.riverrat && V.riverrat.working && V.eventtable && tags().includes("event") && V.location == "RiverRat")
T.people = V.eventtable.people;
else if (V.hangout)
T.people = [V.hangout.partner];
else if (V.tablemates && ["RiverRat", "SummitMarket", "ChamberlainHall"].includes(V.location))
T.people = [...V.tablemates];
else if (V.parkmates && ["UniMall"].includes(V.location))
T.people = [...V.parkmates];
else
{
T.people = [...V.peopleatlocation];
if (V.arcade && V.arcade.competitors && V.location == "Arcade")
for (let comp of V.arcade.competitors)
if (!T.people.includes(comp))
T.people.push(comp);
}
break;
}
case "friends":
{
T.people = setup.people.all_friends();
break;
}
case "sexpartners":
{
T.people = setup.people.all_sexpartners();
break;
}
case "rivals":
{
T.people = setup.people.all_rivals();
break;
}
case "admirers":
{
T.people = setup.people.all_admirers();
break;
}
case "acquaintances":
{
T.people = setup.people.all_acquaintances(true);
break;
}
case "special":
{
T.people = setup.people.all_special(true);
break;
}
case "team":
{
T.people = [...V.sportsteams[V.pcsports[0]].team];
break;
}
case "faculty":
{
T.people = setup.people.all_faculty();
break;
}
case "coworkers":
{
T.people = setup.people.all_coworkers();
break;
}
case "rompartners":
{
T.people = setup.people.all_romantic_partners();
break;
}
case "crush":
{
T.people = [V.crush];
break;
}
case "haters":
{
T.people = setup.people.all_haters();
break;
}
case "favorite":
{
T.people = V.favoritepeople;
break;
}
}
<</script>>
/* <<run console.timeEnd('tab switch statement')>>
<<run console.timeEnd('init')>>
<<run console.time('filtering')>> */
<<script>>
T.people = T.people.filter(ppl => ppl != undefined);
<</script>>
/* <<run console.timeEnd('filtering')>> */
<<if _people.length is 0>>
<div class="view-people-empty">
<<switch $peopletab>>
<<case "here">>
There are no people here.
<<case "friends">>
You have no friends. Ouch!
<<case "sexpartners">>
You haven't been sexual with anybody yet.
<<case "rivals">>
You don't have any acknowledged enemies. Maybe that's a good thing!
<<case "admirers">>
No one is seriously crushing on you. Yet.
<<case "acquaintances">>
There's nobody that you barely know.
<<case "special">>
You don't know anybody who seems to fill a particular niche in the story of your life.
<<case "team">>
You're flying solo.
<<case "faculty">>
You don't know any faculty yet.
<<case "coworkers">>
You don't have any coworkers.
<<case "rompartners">>
You don't have a romantic partner.
<<case "crush">>
You don't currently have a crush.
<<case "haters">>
You haven't made any enemies yet, you lovable dork.
<<case "favorite">>
You don't have any favs.
<</switch>>
</div>
<<else>>
/* <<run console.time('slicing for paging')>> */
<<set _starti to 16 * $peoplepage>>
<<set _endi to _starti + 15>>
<<set _olen to _people.length>>
<<set _people to _people.slice(_starti, _endi + 1)>>
<div class="view-people-title">
<div>
<<switch $peopletab>>
<<case "here">>
<<if $pc.in_encounter()>>People in encounter:<<elseif $hangout>>On <<aoran $hangout.type>> <<= $hangout.type>> with:<<else>>People nearby:<</if>>
<<case "friends">>
Friends:
<<case "sexpartners">>
Sexual partners:
<<case "rivals">>
Rivals:
<<case "admirers">>
Admirers:
<<case "acquaintances">>
Acquaintances:
<<case "special">>
People who fill a particular niche in the story of your life:
<<case "team">>
Teammates:
<<case "faculty">>
Known faculty:
<<case "coworkers">>
Coworkers:
<<case "rompartners">>
Romantic partner<<if _people.length gt 1>>s<</if>>:
<<case "crush">>
Your crush:
<<case "haters">>
Haters:
<<case "favorite">>
Favorites:
<</switch>>
</div>
/* <<run console.timeEnd('slicing for paging')>> */
<<if _starti gt 0 or _endi lt _olen - 1>>
<div class="view-people-page-button-container">
<<if _starti gt 0>>
<button id="view-people-page-backward" tabindex="0" title="Previous page" aria-label="Previous page" type="button" role="button"></button>
<<script>>
$(document).ready(function() {
$("#view-people-page-backward").click(function() {
State.setVar("$peoplepage", V.peoplepage - 1);
Dialog.setup("People", "social");
Dialog.wiki(Story.get("Social").processText());
Dialog.open();
});
});
<</script>>
<</if>>
</div>
<div>
Page <<= $peoplepage + 1>>/<<= Math.floor(_olen / 16) + (_olen % 16 > 0 ? 1 : 0)>>
</div>
<div class="view-people-page-button-container">
<<if _endi lt _olen - 1>>
<button id="view-people-page-forward" tabindex="0" title="Next page" aria-label="Next page" type="button" role="button"></button>
<<script>>
$(document).ready(function() {
$("#view-people-page-forward").click(function() {
State.setVar("$peoplepage", V.peoplepage + 1);
Dialog.setup("People", "social");
Dialog.wiki(Story.get("Social").processText());
Dialog.open();
});
});
<</script>>
<</if>>
</div>
<</if>>
</div>
<div class="view-people-list">
<<set _nichesbyperson to setup.people.reverse_niches()>>
<<for _displayperson range _people>>
/* <<run console.time(`processing ${_displayperson}`)>> */
<<set _pname to setup.people.get_name(_displayperson)>>
<<set _known to setup.people.is_known(_pname) && !setup.people.is_anonymous(_pname)>>
<<if _known>>
<<set _name to setup.people.fullname(_pname)>>
<<set _niche to _nichesbyperson[_pname]>>
<<else>>
<<set _name to setup.people.anonymous_name(_pname)>>
<<set _niche to null>>
<</if>>
<<set _rel to setup.Relationships.relationship_with(_pname)>>
<<if !_rel and $crush is _pname>>
<<set _rel to "crush">>
<</if>>
<<if !_niche and _rel>>
<<set _niche to "Your " + setup.Relationships.label(_rel, _pname)>>
<</if>>
<<if typeof _displayperson isnot "string">>
<<set _displayperson to _displayperson.person>>
<</if>>
<<set _gender to setup.people.get_gender(_displayperson)>>
<<set _styleclass to "view-people-person-name " + _gender>>
<<if _gender is "transgender female">>
<<set _coloropt to "female">>
<<elseif _gender is "transgender male">>
<<set _coloropt to "male">>
<<elseif _gender is "nonbinary amab" or _gender is "nonbinary afab">>
<<set _coloropt to "nonbinary">>
<<else>>
<<set _coloropt to _gender>>
<</if>>
<<set _style = 'color: ' + setup.get_color(_coloropt) + ';'>>
<div class="view-people-person">
<div class="view-people-person-header">
<div @class='_styleclass' @style='_style'>
<<capture _displayperson, _name>>
<<link _name>>
<<run setup.display_npc_dialog(_displayperson, _name)>>
<</link>>
<</capture>>
</div>
<<set _badges to setup.people.get_badges(_displayperson)>>
<<if _badges.length > 0 and $optshowemojis>>
<div class="view-people-person-badges">
<<for _badge range _badges>>
<div class="view-people-person-badge"><<hovertip _badge.tooltip>><span class="emoji"><<=_badge.icon>></span><</hovertip>></div>
<</for>>
</div>
<</if>>
</div>
<<if _niche != null>>
<div class="view-people-person-niche faded small">
<<= _niche>>
</div>
<</if>>
<div class="status-meter-labeled" style="align-content: flex-end;">
<<set _label to _displayperson.split(' ').join('_').split('\'').join('_')>>
<<set _friendship to setup.people.get_attitude(_displayperson, "friendship")>>
<<if !$optsocialdialoguemeters>>
<<if _friendship gte 0>><<set _style to "small unbad">><<else>><<set _style to "small bad">><</if>>
<<highlight _style>>
<<if _friendship gte 0>>Friendship<<else>>Dislike<</if>>:
<<= Math.floor(Math.abs(_friendship) / 10)>>%
<br>
<</highlight>>
<<else>>
<<if _friendship gte 0>>
<<set _barbgid = "hzFriendbarbg" + _label>>
<<set _barid = "hzFriendbar" + _label>>
<span class="status-meter-label">Friendship</span>
<<else>>
<<set _barbgid = "hzEnemybarbg" + _label>>
<<set _barid = "hzEnemybar" + _label>>
<span class="status-meter-label">Dislike</span>
<</if>>
<<= Meter(Math.abs(_friendship), 1000, _barid, true)>>
<</if>>
<<set _lust to Math.max(0, setup.people.get_attitude(_displayperson, "lust"))>>
<<if !$optsocialdialoguemeters>>
<<highlight "small sexy">>
Lust:
<<= Math.floor(Math.abs(_lust) / 10)>>%
<br>
<</highlight>>
<<else>>
<<set _barbgid = "hzLustbarbg" + _label>>
<<set _barid = "hzLustbar" + _label>>
<span class="status-meter-label">Lust</span>
<<= Meter(_lust, 1000, _barid, true)>>
<</if>>
<<set _romance to Math.max(0, setup.people.get_attitude(_displayperson, "romance"))>>
<<if !$optsocialdialoguemeters>>
<<highlight "small romantic">>
Romance:
<<= Math.floor(Math.abs(_romance) / 10)>>%
<br>
<</highlight>>
<<else>>
<<set _barbgid = "hzRomancebarbg" + _label>>
<<set _barid = "hzRomancebar" + _label>>
<span class="status-meter-label">Romance</span>
<<= Meter(_romance, 1000, _barid, true)>>
<</if>>
</div>
</div>
/* <<run console.timeEnd(`processing ${_displayperson}`)>> */
<</for>>
<<done>>
<<script>>
$(".view-people-person").on("click", function() {
$(this).find(".view-people-person-name").find("a").click();
});
<</script>>
<</done>>
</div>
<div class="view-people-list-footer">
Click a person to see more.
<br>
<label><<checkbox "$optsocialdialoguemeters" false true autocheck>> Show Attitude Meters (not recommended for slower devices)</label>
</div>
<<script>>
$(document).ready(function()
{
let checkbox = $("#checkbox-optsocialdialoguemeters");
checkbox.on("change", function()
{
Dialog.setup();
Dialog.wiki(Story.get("Social").processText());
Dialog.open();
});
});
<</script>>
<</if>>
/* <<run console.timeEnd('entire process')>> */<<if !$firsttime.tutorial>>
<<set $firsttime.tutorial to true>>
<</if>>
<<for _story range Object.keys(setup.storyhints.db)>>
<<set _storyinfo to setup.storyhints.db[_story]>>
<<if setup.evaluate(_storyinfo.displayif)>>
<div class="rounded-border">
<span class="large"><<= _story>></span>
<br><br>
<div class="indent">
<<= _storyinfo.description>>
<br>
<<set _found to false>>
<<for _hint range _storyinfo.hints>>
<<if !setup.evaluate(_hint[0])>>
<<if !_prevhint>>
<<displaystoryhint 'Keep exploring!'>>
<<else>>
<<displaystoryhint _prevhint>>
<</if>>
<<set _found to true>>
<<break>>
<<else>>
<<set _prevhint to _hint[1]>>
<</if>>
<</for>>
<<if !_found>>
<<if !_prevhint>>
<<displaystoryhint 'Keep exploring!'>>
<<else>>
<<displaystoryhint _prevhint>>
<</if>>
<</if>>
<<if _storyinfo.kinkcontent>>
<<for _content range _storyinfo.kinkcontent>>
<<if !$kinkcontent.includes(_content)>>
<br>
<<highlight indent>><b><<highlight bad>>Warning:<</highlight>></b> Some or all of this storyline is gated behind the <b><<= setup.kink_content[_content].name>></b> content option, which you have turned off.<</highlight>>
<</if>>
<</for>>
<</if>>
</div>
</div>
<br>
<</if>>
<<unset _hint>>
<<unset _prevhint>>
<</for>>
<<unset _story>>
<<unset _storyinfo>><<widget "displaystoryhint">>
<<set _hint to _args[0]>>
<span class="indent">
<b>Hint:</b>
<<if _hint is "end">>
You have reached the end of this storyline... for now! But there may still be recurring events.
<<else>>
<<= _hint>>
<</if>>
</span>
<</widget>><h2>Credits</h2>\
<i>Course of Temptation</i> is by <b>Anarchothaumaturgist</b>. Anthaum for short!
Splash screen art by the talented <b>Rotem</b>.
Team logos by <b>Penny</b>! <<highlight small>>(Twitter: @ante_pen Bluesky: @pennyante-art.bsky.social)<</highlight>>
<h2>Support</h2>\
I have many, many plans for updates and additions to the game! However I'm just one independent developer and I'll need some help to make those plans happen. If you'd like to get early access to content updates and weekly dev diaries, participate in polls, and support development of the game, please check out my <a href="https://patreon.com/courseoftemptation" target="_blank">Patreon</a> or my <a href="https://subscribestar.adult/course-of-temptation" target="_blank">SubscribeStar</a>. (Each platform has all benefits, so just choose whichever you prefer.) Thank you!
<div class="two-column-container"><div class="two-column"><a href="https://patreon.com/courseoftemptation" target="_blank"><img src="res/img/PATREON_WORDMARK_1_WHITE_RGB.png" style="width: 200px;"></a></div>
<div class="two-column"><a href="https://subscribestar.adult/course-of-temptation" target="_blank"><img src="res/img/ss_a-logotype.png" style="width: 200px;"></a></div></div>\
Feel free to hang out in the <a href="https://discord.gg/4cNDbMxPZ5" target="_blank">Discord</a> too, or visit the <a href="https://www.reddit.com/r/CourseOfTemptation/" target="_blank">official subreddit</a>!
<div class="two-column-container"><div class="two-column"><a href="https://discord.gg/4cNDbMxPZ5" target="_blank"><img src="res/img/discord-logo-blue.png" style="width: 200px;"></a></div><div class="two-column"><a href="https://www.reddit.com/r/CourseOfTemptation/" target="_blank"><img src="res/img/Reddit_Logo_Wordmark_OrangeRed.png" style="width: 133px;"></a></div></div>
<h2>Updates</h2>\
All updates are announced in <a href="https://discord.gg/4cNDbMxPZ5" target="_blank">Discord</a>! Major public updates are announced in public posts on <a href="https://patreon.com/courseoftemptation" target="_blank">Patreon</a> and <a href="https://subscribestar.adult/course-of-temptation" target="_blank">SubscribeStar</a>, as well as on the game's <a href="https://anarchothaumaturgist.itch.io/course-of-temptation" target="_blank">itch.io</a> page.
Want to know what's coming? Check the <a href="https://courseoftemptation.com/roadmap/" target="_blank">development roadmap</a>.
The only official sources for this game are at <a href="https://courseoftemptation.com/" target="_blank">CourseOfTemptation.com</a> and <a href="https://anarchothaumaturgist.itch.io/course-of-temptation" target="_blank">itch.io</a>. Any other sources you find for this game are unofficial rehosts, may not be the most current, and may have inserted code of their own.<<nobr>>
<<if !$firsttime.tutorial>>
<<set $firsttime.tutorial to true>>
/* <<run UIBar.update()>> */
<</if>>
<</nobr>>\
This is an early version of the game! To help you get started and find where the most content is, here are a few things you can do:
<<crossout $jobs.includes("Summit Market")>>Find Summit Market and get a job there. Pros: Close to home! Cons: Low pay.<</crossout>>
<<crossout $firsttime.bus>>Go to the bus stop at Student Parking and take the bus into town.<</crossout>>
<<crossout $jobs.includes("QuickieBurger")>>Find QuickieBurger in town and get a job there. Pros: Opportunities for raises and tips. Cons: A bus ride away.<</crossout>>
<<crossout $classesattended>>Attend your first class.<</crossout>>
<<crossout $firsttime.studying>>Study at your dorm, at the library, or before a class.<</crossout>>
<<crossout $firsttime.gymlocker>>Explore Blodgett Gym on campus.<</crossout>>
<<crossout $firsttime.riverrat>>Discover the River Rat in town. (Turns out the bar is a great place for casual hookups.)<</crossout>>
<<crossout $quadparty and $quadparty.intro>>Learn about the Friday night quad party by walking around your residence hall. (Available starting near the end of week two.)<</crossout>>
<<crossout $quadparty and $quadparty.timesattended>>Attend the Friday night quad party hosted by Helleborine Hall.<</crossout>>
<<crossout $arcade and $arcade.discover>>Discover the truth about the arcade in town by playing video games in your residence hall lounge and staking something besides money.<</crossout>>
<<crossout $arcade and $arcade.lastgameday>>Make a side bet at Master Blaster Arcade.<</crossout>>
<<crossout $hangoutmemory and Object.keys($hangoutmemory).length gt 0>>Arrange and then go on on a date or hangout with somebody using your phone.<</crossout>>
There's still more to discover! Keep attending classes, keep working your QuickieBurger job, and things will happen! Future updates will add new jobs, new plotlines, and more random events.Course of Temptation has a content management system to help you avoid content that you don't want to see, or only sometimes want to see.
By default, most content options are turned on and give no warning, so it's important to look them over carefully, especially if it's your first time playing.
<<nobr>>
<ul style="margin: 0">
<li><b>No Warning</b>: All content will be available with no forewarning.</li>
<li><b>Aware</b>: You can usually see when an option may lead to a particular type of content.</li>
<li><b>Warning</b>: Be explicitly warned before heading into a particular type of content, with the option to break the event sequence and return to your last location.</li>
<li><b>Block</b>: The content will be silently suppressed.</li>
</ul>
<</nobr>>\
Of the available options, <b>Block</b> is the most reliable. <b>If you're pretty sure you never want to see a certain type of content, just block it.</b>
Since events in the game can be very dynamic, the intermediate options are less reliable — they may occasionally warn you about content that ends up not appearing, and though we've done our best, it may occasionally fail to warn you adequately of content that does appear. In particular, only the <b>Block</b> option will prevent related things from happening during encounters.
The <b>Warning</b> option lets you break out of events. While we try to account for this, it may occasionally softlock a storyline, so use it sparingly or consider simply blocking the content instead.Some characters are romantically minded and not very into casual sex. In order to help you along the path to making a character your partner or "going all the way" with them, this game has some mechanics similar to what you would find in a dating sim.
Each character has their own interests and inclinations, just like your character does, and this affects their preferences, how they react to you, and how quickly they'll want to do certain things. To progress with these characters, you'll want to work toward specific milestones: going on a first date, having your first kiss with them, taking them to their favorite place, giving them an orgasm for the first time, and more.
Your Romance level with them will be capped at a certain level, and as you achieve milestones, this cap increases along with granting a Romance boost.
Using these mechanics gives you a more guided and gamified approach to progressing your relationship with another character. You can track your milestones with them and have a pretty good idea of what you need to do to boost your progress.
Disabling these mechanics eliminates the milestone-based caps as well as boosts from achieving milestones, necessitating a more gradual approach but allowing for more granularity in when a character decides they're ready for more.
Choose according to your personal preference. If the system is disabled, milestones are still silently tracked, so you can toggle back and forth without losing progress.<b>Skill Gain Multiplier</b> is how much experience you gain per skill boost. Skill gains generally occur when selecting an option gated by a skill or succeeding in a skillcheck, but they may also occur at other times.
<b>Daily Skill Gain Cap</b> affects whether or not you are limited in how much skill you can gain in one day. Generally you benefit from a maximum of three same-level skill gains every day.
<b>Weekly Debt Multiplier</b> affects how much money you need to send home every week.
<b>Need Decay Multiplier</b> affects how fast your needs (Rest, Food, etc.) naturally decrease over time.
<b>Hair Growth Rate</b> determines how fast your hair (head, pubic, body hair and all) grows. A value of zero means it will never grow. How much body hair you give your character at the start of the game also affects body hair growth rate: hairier characters grow back the hair faster.
<b>Additional Body Hair</b> is hair in addition to head hair, facial hair, and pubic hair. Toggle this off if you don't want to bother to shave your pits and legs, or just never want to see any mention of it.
<b>Hidden Skillgated Options</b> will by default show you a hint of the skills you need to raise to access them.
<b>Note:</b>
The default values are <i>highly</i> recommended.
Content is spaced out for gradual skill gain, giving you new or alternate scenes over time.
The daily skill cap exists so that you can play normally and not feel you have to grind, and to prevent your skills from outpacing content.
The weekly debt payments are designed to keep some pressure on so you have to work a job or find money, which generally leads to interesting events.
Need decay is carefully balanced to nudge you into doing things that lead to events occurring, just regularly enough without being annoying.
In short, everything about the game is balanced around the default values. It's recommended that you play the game on default values at first and really get a feel for it before you tinker with these values. That said, it's your game, so if you think a difficulty adjustment will bring you more fun, go for it!
<<link "Go back">>
<<script>>
Dialog.setup("Options", "options");
Dialog.wiki(Story.get("ContentOptions").processText());
Dialog.open();
<</script>>
<</link>>When encounter progression is enabled, characters have a tendency to ease into things when it comes to sex. There is a general progression of starting with hand stuff, moving on to oral sex, and then going all the way. This means you may need to have multiple encounters with a person before they are willing to try everything with you.
This is, of course, affected by each character's inclinations. Some characters may be more willing to experiment at the outset or have no hesitation about going all the way immediately. If they have certain kinks or preferences, they may want to skip straight to particular activities. If they're especially attracted to you, they'll be more likely to progress quickly, and ongoing relationships are a factor too.
When encounter progression is turned off, people will tend to weigh each action equally and will generally be agreeable to however you want to steer the encounter.
Choose according to your personal preference. If the system is disabled, encounter progression is still tracked, so you can toggle back and forth without losing progress.<i>Course of Temptation</i> tries its best to strike a balance between inclusivity and the sheer impossibility of accounting for every circumstance you would find in real life. Unfortunately it's never going to be perfect, so here's what you should know:
The gender you choose here will give you two things: a set of pronouns and a set of body parts.
"Woman" and "man" are your cis options. No surprises here, so enough said!
The transgender options have the correct pronouns — she/her for trans women and he/him for trans men. When it comes to body parts, it's assumed that hormones and top surgery (where applicable) mean that transgender women have breasts and transgender men lack them. Transgender women will have a penis and transgender men will have a vagina.
The nonbinary options both have they/them pronouns. Their assigned sex at birth corresponds to their body parts — AFABs have breasts and a vagina while AMABs have a penis. However, nonbinary AFABs start with a chest binder that effectively hides their breasts.
Anyone with breasts can choose to wear a chest binder to effectively hide them. This will prevent them from being referenced in events. You can buy a chest binder at the shopping plaza in town.
Non-player characters (NPCs) care only about gender presentation, meaning, for example, they will treat a transgender woman exactly the same as a cis woman and express no surprise upon undressing you. When it comes to nonbinary people, NPCs are also mostly unbothered, especially the non-straight or non-cis ones.
If you want to play a trans person who has had bottom surgery too, or a character with any other set of characteristics not available in one of these preset options, you can use the customize option.
This is where things stand now! It's imperfect, but be assured representation is the goal. And it's also subject to change in future updates based on feedback.Your sexual preference choice will mostly just guide non-player character (NPC) generation and how certain events go.
For the most part, your choice here <i>won't</i> explicitly lock you out of anything — for example, if you pick "straight," you can still deliberately pursue same-sex encounters if you want, and they will still even occasionally proposition you. But whenever the game generates an NPC it specifically wants you to be attracted to, your preferences rule.
Straight cis characters have the narrowest options, while other types of characters, by their nature, tend to be a bit more open-minded. For nonbinary characters, this choice relates to how much you desire encounters with the opposite of your birth-assigned sex.
So, with that in mind, just pick the one that best fits the type of encounters you most want to see.
One other consideration is that if you enjoy same-sex encounters, you may wish to return to World Generation (click Save then Restart) and increase the sliders for bi and gay people, so that you have more potential partners in the world.The gender distribution sliders are all weighted against each other.
For example, just maxing out the Male slider will create a world that's roughly two-thirds men with the remaining third being a fairly standard distribution of everybody else. Maxing out the male slider while also minimizing every other slider will create a world that's over 90% men.
The default transgender and nonbinary slider values look really low but add up to 6% of the population, which is just slightly higher than what research suggests is the true value for young adults. With the game's current student body of around 250, this will create roughly fifteen non-cis students. Feel free to adjust this.
None of the genders can be literally zeroed out. A minimal amount of each gender will always potentially be generated as needed for certain characters and events. However, balance is still important; the playability of games generated with extremely one-sided slider values can't be completely guaranteed.These options allow you to customize your character's pronouns, body parts, and some additional characteristics in combinations not included in the preset genders.
Non-player characters (NPCs) still only care about gender presentation, meaning, for example, that they will treat a character customized here to use female pronouns exactly the same as a cis woman and express no surprise upon undressing you.
As with the preset genders' sexual preferences, the sexual preferences you select here will mostly just guide non-player character (NPC) generation and how certain events go, and for the most part, your choice here <i>won't</i> explicitly lock you out of anything.
For now, only the player character can be customized in this way, but this is subject to change in future updates based on feedback.By default, the sports storylines lean on some classic tropes and tell a traditional kind of story — the football players are mostly or entirely men, and the cheerleaders are mostly or entirely women.
Of course, the player character can choose whatever they want, but a female football player is likely to be the <i>only</i> female football player.
One way to change this is by changing the gender distribution sliders. If there aren't many men, then women will populate the football team by necessity. Keep in mind that the algorithm tries very hard to stick to "expected" gender roles, so this requires extreme slider settings and a bit of luck on top of that.
Another way is to disable the <b>Traditional Sports Team Genders</b> option. This will populate the sports teams more inclusively and evenly, regardless of gender distribution settings.This is a life simulator game.
<br><br>
You have various
<<link "needs">>
<<script>>
Dialog.setup("Help: Needs", "help");
Dialog.wiki(Story.get("HelpNeeds").processText());
Dialog.open();
<</script>>
<</link>> to balance.
<br><br>
You can move to different <<link "locations">>
<<script>>
Dialog.setup("Help: Locations", "help");
Dialog.wiki(Story.get("HelpLocations").processText());
Dialog.open();
<</script>>
<</link>> and do <<link "actions">>
<<script>>
Dialog.setup("Help: Actions", "help");
Dialog.wiki(Story.get("HelpActions").processText());
Dialog.open();
<</script>>
<</link>> at those locations. Sometimes performing an action uses a <<link "skill">>
<<script>>
Dialog.setup("Help: Skills", "help");
Dialog.wiki(Story.get("HelpSkills").processText());
Dialog.open();
<</script>>
<</link>>.
<br><br>
Doing things takes <<link "time">>
<<script>>
Dialog.setup("Help: Time", "help");
Dialog.wiki(Story.get("HelpTime").processText());
Dialog.open();
<</script>>
<</link>>, so you have to manage your time and prioritize what's important at the moment. Don't worry, usually it isn't hard.
<br><br>
Your character is in college, so you have to <<link "attend class">>
<<script>>
Dialog.setup("Help: Classes", "help");
Dialog.wiki(Story.get("HelpClasses").processText());
Dialog.open();
<</script>>
<</link>>, <<link "study">>
<<script>>
Dialog.setup("Help: Studying and Homework", "help");
Dialog.wiki(Story.get("HelpStudying").processText());
Dialog.open();
<</script>>
<</link>>, and <<link "do homework">>
<<script>>
Dialog.setup("Help: Studying and Homework", "help");
Dialog.wiki(Story.get("HelpStudying").processText());
Dialog.open();
<</script>>
<</link>>. The left panel will remind you when your next class is.
<br><br>
You'll also need a job so you can get <<link "money">>
<<script>>
Dialog.setup("Help: Money", "help");
Dialog.wiki(Story.get("HelpMoney").processText());
Dialog.open();
<</script>>
<</link>>. Money can be exchanged for goods and services!
<br><br>
You can buy <<link "food">>
<<script>>
Dialog.setup("Help: Food", "help");
Dialog.wiki(Story.get("HelpFood").processText());
Dialog.open();
<</script>>
<</link>> and <<link "clothes">>
<<script>>
Dialog.setup("Help: Clothes", "help");
Dialog.wiki(Story.get("HelpClothes").processText());
Dialog.open();
<</script>>
<</link>>, useful for staying alive and not naked, respectively.
<br><br>
You can interact with many <<link "NPCs (non-player characters)">>
<<script>>
Dialog.setup("Help: NPCs", "help");
Dialog.wiki(Story.get("HelpNPCs").processText());
Dialog.open();
<</script>>
<</link>>. Note NPCs with special narrative roles (like The Best Friend). Unlike other NPCs, your relationships with narrative role NPCs will mostly progress through specially written events.
<br><br>
You live on campus, and you can do a lot there, but don't forget there's also a whole town! Go to student parking (southwest corner of the map) and take the bus!
<br><br>
Need to report a bug? The best place to do so is in <a href="https://discord.gg/4cNDbMxPZ5" target="_blank">the Discord</a>!<button id="help-backward" tabindex="0" title="Back to overview" aria-label="Back to overview" type="button" role="button"></button> <b>Back to overview</b>
<<script>>
$(document).ready(function() {
$("#help-backward").click(function() {
Dialog.setup("Help", "help");
Dialog.wiki(Story.get("HelpBasic").processText());
Dialog.open();
});
});
<</script>><<include HelpBackToOverview>><br>
<br>
The game is made of distinct locations: rooms, streets, and so on.<br>
<br>
You can navigate to other locations by choosing them from the menu within the text of a passage. If a map is visible, you can also click locations on the map (but keep in mind you move from place to place in sequence, you can't just click directly on your final destination).<br>
<br>
It usually takes some time to move between locations.<br>
<br>
You're not alone in the world and there will often be other people at your location. Click the People button to see who's around!<<include HelpBackToOverview>><br>
<br>
Most locations have at least one action you can do there. Otherwise why would it exist, right??<br>
<br>
Actions usually address one of your needs or are about working or studying. They usually take some amount of time.<br>
<br>
To perform an action, just click it on the menu within the passage text.<<include HelpBackToOverview>><br>
<br>
Time in the game is a sort of stylized realtime. We have sixty minutes in an hour, 24 hours in a day, and a seven day Sunday-to-Saturday week.<br>
<br>
But there are also 28 days in a month, and two months per season (except summer, which is just one month, since for now we're just skipping it anyway).<br>
<br>
Most actions in the game take some amount of time, which will be displayed. For example, (1:30) means an action takes one hour and thirty minutes.<br>
<br>
Most things don't take that long, so it's not too difficult to manage your time. Just keep your character's needs in mind and save time to see to them!<<include HelpBackToOverview>><br>
<br>
Money is good for buying things, not to mention making your regular student loan payments!<br>
<br>
The most reliable way to make money is... a job! You can easily get a job at the Summit Market dining hall (conveniently close to your residence hall) or at QuickieBurger (potentially higher pay, but it's in town).<br>
<br>
Money can be spent at shops, naturally, of which there are many, particularly at the plaza in town. Simply choose a menu option within the passage text.<<include HelpBackToOverview>><br>
<br>
Food can be purchased at dining halls and restaurants (where it's eaten on the spot, often giving you the opportunity to socialize) or purchased at convenience stores (where you can add non-perishables to your dorm room stash for late night snacking).<br>
<br>
Eating food improves your Food need at a rate roughly corresponding with its cost. Some foods can improve your Relaxation need, and caffeinated drinks can give you a boost of energy.<br>
<br>
Eating can also increase your plumpness, but this can be mitigated by running in the park or doing cardio exercises at the gym.<<include HelpBackToOverview>><br>
<br>
You can buy new clothes at the university bookstore or, for a much wider selection, visit the plaza in town.<br>
<br>
Generally, your character will insist on being decent before going out into the world, but raising your Exhibitionism skill can overcome this to varying degrees and make it something your character enjoys.<br>
<br>
Characters react to how you're dressed. Showing cleavage, wearing loose or low tops or short skirts, going without a bra or underwear, and so on, can all be noticed by other characters or lead to wardrobe malfunctions. Depending on your character's inclinations, this can be something they enjoy or something better avoided.<br>
<br>
And how do you change how you're dressed, you might ask? Go to your dorm room and visit the closet. Your clothes are found in the various tabs near the bottom of this screen.<br>
<br>
It's useful to save your outfits! Simply click into the Outfits tab, give your outfit a unique name, and click Save Current Clothes. Some locations let you quickchange into one of your outfits but don't offer the full wardrobe menu.<br>
<br>
When you have the money, you'll want to make sure you have sleepwear (though just underwear will do), activewear for exercising, and swimwear.<<include HelpBackToOverview>>
<br><br>
NPCs (non-player characters) are all around you and interacting with you throughout the game. NPCs all have skills and inclinations just like you do, and these will determine how they relate and react to you.
<br><br>
During your first week or two at college, you won't know anybody. That's just the nature of being at a new school! But as you socialize, you'll learn names and get to know the people you interact with the most.
<br><br>
Whether an NPC likes you is partly dependent on your Charisma skill. But some just won't like you much no matter what you do. That's life!
<br><br>
How an NPC feels about you is determined through their attitudes. Friendship (or Dislike) is how much they like you as a person. Lust is how sexually attracted to you they are. And Romance represents their less platonic feelings about you.
<br><br>
It is certainly possible for an NPC to like you but not want to date you, or to want to date you but not want to have casual sex with you, or even to hate you but still want to fuck you.
<br><br>
The best way to change the type of relationship an NPC desires with you is to go on hangouts with them using your phone and show them a good time. Attitudes have momentum: an NPC who already likes you is very likely to continue liking you.
<br><br>
Take note of NPCs with special narrative roles, like The Best Friend or The Classroom Admirer. You can hang out with them if you like, but these are NPCs with special storylines. Your relationship with them will mostly only progress through specially written events. You can't really miss anything so don't worry about it. Things will happen when they should!<<include HelpBackToOverview>><br>
<br>
Attending classes and learning things is, theoretically, the point of going to college.<br>
<br>
You selected your first courses when you created your character. The average course has three classes per week. The time of your next class is always shown in the left-hand panel. You can see your complete class schedule by clicking the School button.<br>
<br>
To attend class, go to the building it's being held in. Which building is that, you may ask?<br>
<br>
<ul>
<li>Art classes are in the Emerson Building in the northeast of campus.</li>
<li>Science and compsci classes are in the Hallowell Building in the southeast of campus.</li>
<li>All other classes are in the Thoreau Building roughly in the middle of campus.</li>
</ul>
<br>
Go to the correct building within an hour of the class's start time and the Attend Class option will be available.<br>
<br>
If you're early to class, you can use the time to study and do homework, or address some of your needs by socializing or playing around on your phone.<br>
<br>
A class proceeds in thirty minute segments. For each one, a semi-random event will occur and some course material will be covered.<br>
<br>
You can decide how much attention you're paying in class, but if you're focused on other things, you'll have more studying to do outside of class if you want to keep up!<br>
<br>
Every other week or so, there's a test or exam week. Each of your final classes for this week will involve sitting for an exam. Your performance will depend on how much you've studied the course material and certain decisions made during the exam itself. Good luck!<<include HelpBackToOverview>><br>
<br>
As classes happen, you're expected to understand a certain amount of course material... whether you were paying attention or even attended class at all! If you don't understand the material, you'll do poorly on homework and tests.<br>
<br>
Fortunately, just paying attention during class will do the bulk of this work for you. But if you want to excel, or just need to catch up, you'll need to study outside of class.<br>
<br>
You can study in your dorm room, at the library, or before class if you're early.<br>
<br>
This is also where you do homework. Your homework score depends on how much of it you did and how well you understand the course material.<br>
<br>
Studying has diminishing returns. Understanding a little bit of a subject is easy, but grasping it fully is much more difficult. Fortunately, as you study you will develop habits that make studying easier.<br>
<br>
You aren't expected to always have your Understanding bars completely full. If you're getting too stressed, just take it easy! You'll become more adept at studying over time.<<include HelpBackToOverview>><br>
<br>
You have various needs to balance, and letting any of them get to zero is generally bad! But don't worry, they're not really that hard to manage.<br>
<br>
<div style="width: 80%; margin: auto;">
<table class="stats-table">
<tr class="stats-table"><td class="stats-table" style="width: 20%; text-align: center;">
<b>Rest</b></td><td class="stats-table">How tired you are.<br>
<b>To solve...</b> Go the fuck to sleep.<br>
<b>If it fails...</b> You'll pass out and wake up in the clinic!
</td></tr>
<tr class="stats-table"><td class="stats-table" style="width: 20%; text-align: center;">
<b>Relaxation</b></td><td class="stats-table">How stressed you are.<br>
<b>To solve...</b> Watch TV or play video games in your residence hall lounge, go for a run in the park.<br>
<b>If it fails...</b> You'll be too burnt out to work or go to class.
</td></tr>
<tr class="stats-table"><td class="stats-table" style="width: 20%; text-align: center;">
<b>Attention</b></td><td class="stats-table">Whether you've recently felt the joy of human contact.<br>
<b>To solve...</b>