diff --git a/devTools/types/FC/gameState.d.ts b/devTools/types/FC/gameState.d.ts index 01693c666a4870a938e7140ba4611beb4f842d6b..3d16657eefb48a525194e9805d67bfd020092568 100644 --- a/devTools/types/FC/gameState.d.ts +++ b/devTools/types/FC/gameState.d.ts @@ -77,8 +77,6 @@ declare namespace FC { /** @deprecated */ REIfYouEnjoyItSubIDs: string[]; /** @deprecated */ - REShowerForceSubIDs: string[]; - /** @deprecated */ RECockmilkInterceptionIDs: number[]; /** @deprecated */ eligibleSlaves: SlaveState[]; diff --git a/src/events/RESS/devotedShortstack.js b/src/events/RESS/devotedShortstack.js index b51b5ca4d0e06f1ab283b9a4fd4486c01d8e7f06..8c964d5266902e08e4775a6a5c4022c99b135dac 100644 --- a/src/events/RESS/devotedShortstack.js +++ b/src/events/RESS/devotedShortstack.js @@ -25,7 +25,7 @@ App.Events.RESSDevotedShortstack = class RESSDevotedShortstack extends App.Event const { His, hers, He, he, his, him, himself, woman, girl, loli } = getPronouns(eventSlave); - const {title: Master} = getEnunciation(eventSlave); + const {title: Master, say} = getEnunciation(eventSlave); const belly = bellyAdjective(eventSlave); /** @type {App.Entity.PlayerState} */ @@ -82,7 +82,7 @@ App.Events.RESSDevotedShortstack = class RESSDevotedShortstack extends App.Event if (!canTalk(eventSlave)) { t.push(`${He} uses gestures to beg your pardon, even as ${he} continues to blush rosily, and explains that ${he} doesn't understand why you keep ${him} in your penthouse, when there are such tall, beautiful slaves in abundance in your arcology. ${He} pauses, shuffling about a little shamefacedly before signing that ${he} thinks their bodies could be more fit to pleasure you.`); } else { - t.push(`"${Master}," ${he} says.`); + t.push(`"${Master}," ${he} ${say}s.`); t.push(Spoken(eventSlave, `"Why do you keep a short, plain slave like me in your penthouse, when there are such beautiful, tall slaves out there in the arcology?"`)); t.push(`${He} shuffles about under your gaze a little shamefacedly before saying in a quiet voice,`); t.push(Spoken(eventSlave, `"Surely, their bodies are more fit for pleasuring you."`)); diff --git a/src/events/RESS/frighteningDick.js b/src/events/RESS/frighteningDick.js index 8197156e5cd2ca7f65543bf2fb63bebece282bd2..2669b9a87a997ac709f11b793247ffe7b7f79bdd 100644 --- a/src/events/RESS/frighteningDick.js +++ b/src/events/RESS/frighteningDick.js @@ -58,7 +58,7 @@ App.Events.RESSFrighteningDick = class RESSFrighteningDick extends App.Events.Ba } else { t.push("cute butt"); } - t.push(`hitting the floor with an audible whack. The light cloth ${he} was using to polish with went flying, and flutters to the ground accusingly. After scrabbling back a short distance, looking up at you hesitantly, and visibly recollecting ${himself}, ${he} swallows twice and then says, "I'm ${s}orry, ${Master}," in a tone of voice with a great deal of effort applied to keep it even. A frantic, embarrassed search for ${his} cloth ensues. Finding it at last, ${he} returns to ${his} original, low position, and crouch-walks back to the place ${he} was polishing, doing ${his} absolute best to look diligent and industrious and not at all aware that your cock is pointing at ${him} like a gun barrel.`); + t.push(`hitting the floor with an audible whack. The light cloth ${he} was using to polish with went flying, and flutters to the ground accusingly. After scrabbling back a short distance, looking up at you hesitantly, and visibly recollecting ${himself}, ${he} swallows twice and then ${say}s, "I'm ${s}orry, ${Master}," in a tone of voice with a great deal of effort applied to keep it even. A frantic, embarrassed search for ${his} cloth ensues. Finding it at last, ${he} returns to ${his} original, low position, and crouch-walks back to the place ${he} was polishing, doing ${his} absolute best to look diligent and industrious and not at all aware that your cock is pointing at ${him} like a gun barrel.`); App.Events.addParagraph(node, t); t = []; diff --git a/src/events/RESS/serveThePublicDevoted.js b/src/events/RESS/serveThePublicDevoted.js index 42c1a6ee0b8ca14c815aedb661288d714715389a..29b1ba2683d0a99a8fd1628856eaf1e7e549dde4 100644 --- a/src/events/RESS/serveThePublicDevoted.js +++ b/src/events/RESS/serveThePublicDevoted.js @@ -50,9 +50,9 @@ App.Events.RESSServeThePublicDevoted = class RESSServeThePublicDevoted extends A t.push(`${his} semi-hard cock is dribbling precum, a sure sign of a bitch who wants to be buttfucked.`); } else if ((eventSlave.dick > 0) && !canAchieveErection(eventSlave)) { t.push(`${his} pathetically soft cock is streaming precum, a sure sign of a bitch who wants to be buttfucked.`); - } else if ((eventSlave.clit > 0)) { + } else if (eventSlave.clit > 0) { t.push(`${his} big clit is obviously engorged.`); - } else if ((eventSlave.vaginaLube > 0)) { + } else if (eventSlave.vaginaLube > 0) { t.push(`${his} pussy is already soaking wet.`); } else { t.push(`${his} cheeks are flushed and ${he}'s panting a little.`); @@ -60,27 +60,27 @@ App.Events.RESSServeThePublicDevoted = class RESSServeThePublicDevoted extends A t.push(`Apparently, ${he} can't wait to`); if (eventSlave.fetish === "submissive") { t.push(`play the submissive.`); - } else if ((eventSlave.fetish === "humiliation")) { + } else if (eventSlave.fetish === "humiliation") { t.push(`be publicly degraded.`); - } else if ((eventSlave.fetish === "masochist")) { + } else if (eventSlave.fetish === "masochist") { t.push(`be roughly handled.`); - } else if ((eventSlave.fetish === "dom")) { + } else if (eventSlave.fetish === "dom") { t.push(`play the dom.`); - } else if ((eventSlave.fetish === "sadist")) { + } else if (eventSlave.fetish === "sadist") { t.push(`find a willing masochist.`); } else if ((eventSlave.fetish === "pregnancy") && (eventSlave.preg > eventSlave.pregData.normalBirth / 4)) { t.push(`have ${his} pregnancy fondled.`); - } else if ((eventSlave.fetish === "pregnancy")) { + } else if (eventSlave.fetish === "pregnancy") { t.push(`pretend to get knocked up.`); - } else if ((eventSlave.fetish === "boobs")) { + } else if (eventSlave.fetish === "boobs") { t.push(`have ${his} tits fondled.`); - } else if ((eventSlave.fetish === "cumslut")) { + } else if (eventSlave.fetish === "cumslut") { t.push(`gorge ${himself} on cum.`); - } else if ((eventSlave.fetish === "buttslut")) { + } else if (eventSlave.fetish === "buttslut") { t.push(`spend all day getting pounded in the ass.`); - } else if ((eventSlave.attrXX > 65)) { + } else if (eventSlave.attrXX > 65) { t.push(`enjoy all the women.`); - } else if ((eventSlave.attrXY > 65)) { + } else if (eventSlave.attrXY > 65) { t.push(`enjoy all the men.`); } else { t.push(`be a complete slut.`); @@ -153,7 +153,7 @@ App.Events.RESSServeThePublicDevoted = class RESSServeThePublicDevoted extends A t.push(`and you're wearing ${his} backdoor around your`); t.push(V.PC.dick === 0 ? "strap-on," : "cock,"); t.push(`${his} mouth is all that's left. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and belly are liberally spattered with cum.`); - } else if ((eventSlave.chastityVagina)) { + } else if (eventSlave.chastityVagina) { t.push(`Since ${he}'s wearing a chastity belt and you're wearing ${his} backdoor around your`); t.push(V.PC.dick === 0 ? "strap-on," : "cock,"); t.push(`${his} mouth is all that's left. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and`); @@ -221,15 +221,15 @@ App.Events.RESSServeThePublicDevoted = class RESSServeThePublicDevoted extends A if (canDoVaginal(eventSlave)) { if (eventSlave.vagina === 0) { t.push(`${His} virgin pussy is certainly tempting.`); - } else if ((eventSlave.vagina === 1)) { + } else if (eventSlave.vagina === 1) { t.push(`${His} tight pussy is certainly tempting.`); - } else if ((eventSlave.vagina === 2)) { + } else if (eventSlave.vagina === 2) { t.push(`${His} soft pussy is certainly tempting.`); - } else if ((eventSlave.labia > 0)) { + } else if (eventSlave.labia > 0) { t.push(`${His} generous petals are certainly tempting.`); - } else if ((eventSlave.clit > 0)) { + } else if (eventSlave.clit > 0) { t.push(`${His} prominent clit is certainly eye-catching.`); - } else if ((eventSlave.vagina === -1)) { + } else if (eventSlave.vagina === -1) { t.push(`${His} relaxed anus is certainly inviting.`); } else { t.push(`${His} capacious pussy is certainly inviting.`); @@ -237,9 +237,9 @@ App.Events.RESSServeThePublicDevoted = class RESSServeThePublicDevoted extends A } else { if (eventSlave.anus === 0) { t.push(`${His} virgin asshole is certainly tempting.`); - } else if ((eventSlave.anus === 1)) { + } else if (eventSlave.anus === 1) { t.push(`${His} tight asshole is certainly tempting.`); - } else if ((eventSlave.anus === 2)) { + } else if (eventSlave.anus === 2) { t.push(`${His} experienced asshole is certainly tempting.`); } else { t.push(`${His} capacious asshole is certainly inviting.`); diff --git a/src/events/RETS/reAnalCowgirl.js b/src/events/RETS/reAnalCowgirl.js index 87ab05998e5742581493f5e3cf7496d57972c081..79ca7821de80e541ddeb5f6b4bac36ea7cf06243 100644 --- a/src/events/RETS/reAnalCowgirl.js +++ b/src/events/RETS/reAnalCowgirl.js @@ -47,13 +47,14 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent const { He2, he2, His2, his2, him2, girl2, himself2 } = getPronouns(subSlave).appendSuffix("2"); - const {say2} = getEnunciation(subSlave); + const {say: say2} = getEnunciation(subSlave); V.nextLink = "Next Week"; App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing"); const canP = canPenetrate(eventSlave); const clitP = eventSlave.clit > 3; + const cock = canP ? "cock" : "clit"; let t = []; @@ -110,7 +111,6 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } else { sizeRatio = eventSlave.clit - subSlave.anus - 2; } - const cock = canP ? "cock" : "clit"; if (sizeRatio > 2) { t.push(`${eventSlave.slaveName}'s ${cock} is very big,`); if (subSlave.anus > 2) { @@ -216,7 +216,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } else { t.push(`completely out of breath.`); } - t.push(Spoken(eventSlave, `"I ${canSee(eventSlave) ? "saw" : "heard"} ${him2} going by, and I thought ${he2}'d look cute with ${canP ? "my dick" : clitP ? "my clit" : "a strap-on"} up ${his2} butthole, so I ${V.universalRulesConsent === 0 ? `told ${him2} to get in here and take it.` : `asked ${him2} to get in here and ${he2} did!`}"`)); + t.push(Spoken(eventSlave, `"I ${canSee(eventSlave) ? "saw" : "heard"} ${him2} going by, and I thought ${he2}'d look cute with ${canP ? "my dick" : (clitP ? "my clit" : "a strap-on")} up ${his2} butthole, so I ${V.universalRulesConsent === 0 ? `told ${him2} to get in here and take it.` : `asked ${him2} to get in here and ${he2} did!`}"`)); t.push(`${He} shrugs.`); if (eventSlave.fetish === "sadist") { t.push(Spoken(eventSlave, `"I thought ${he2} was going to whine and struggle, but ${he2}'s kinda disappointing."`)); diff --git a/src/events/RETS/reInterslaveBegging.js b/src/events/RETS/reInterslaveBegging.js index e01b1fb5d64708374dd69246020c319f1de0340b..147eead51b2f57d91483b16ad10356c218f29d32 100644 --- a/src/events/RETS/reInterslaveBegging.js +++ b/src/events/RETS/reInterslaveBegging.js @@ -41,9 +41,11 @@ App.Events.RETSInterslaveBegging = class RETSInterslaveBegging extends App.Event const { He, he, his, him, himself, girl } = getPronouns(eventSlave); + const {say} = getEnunciation(eventSlave); const { He2, he2, His2, his2, him2, girl2, himself2 } = getPronouns(subSlave).appendSuffix("2"); + const {say: say2} = getEnunciation(subSlave); const { girlP } = getPronouns(V.PC).appendSuffix("P"); @@ -304,7 +306,7 @@ App.Events.RETSInterslaveBegging = class RETSInterslaveBegging extends App.Event } t.push(`in ${eventSlave.slaveName}'s direction. That's all that's necessary.`); t.push(Spoken(subSlave, `"Yes, ${getWrittenTitle(subSlave)}!"`)); - t.push(`says ${subSlave.slaveName} obediently, and`); + t.push(`${say2}s ${subSlave.slaveName} obediently, and`); if (vaginal) { t.push(`gets right down at ${eventSlave.slaveName}'s feet, lying on ${his2} back, legs`); if (subSlave.belly >= 5000) { @@ -402,12 +404,12 @@ App.Events.RETSInterslaveBegging = class RETSInterslaveBegging extends App.Event t.push(`pathetic penis.`); } t.push(Spoken(eventSlave, `"I know it's really small,"`)); - t.push(`${he} says.`); + t.push(`${he} ${say}s.`); t.push(Spoken(eventSlave, `"But I'll use fingers, too. I'll make sure you get off."`)); } } else { t.push(Spoken(eventSlave, `"I know you can't take it up your ass right now,"`)); - t.push(`says ${eventSlave.slaveName},`); + t.push(`${say}s ${eventSlave.slaveName},`); t.push(Spoken(eventSlave, `"but can't I rim you for a while first?"`)); seX(subSlave, "oral", eventSlave, "penetrative"); } @@ -416,13 +418,13 @@ App.Events.RETSInterslaveBegging = class RETSInterslaveBegging extends App.Event if (subSlave.lactation) { t.push(`loves nothing more than to have ${his2} udders lovingly sucked dry. "I'll drain you," says ${eventSlave.slaveName}, sticking ${his} tongue out to make ${his} meaning lewdly clear. ${Spoken(eventSlave, `"I'll nurse from you until you come."`)}`); } else { - t.push(`can't resist having ${his2} breasts pampered. ${Spoken(eventSlave, `"I'll give you a boob massage,"`)} says ${eventSlave.slaveName}, and puts up ${his} ${hasBothArms(eventSlave) ? "arms" : "arm"}, flexing ${his} fingers lewdly. "A really good one. I'll be thorough!"`); + t.push(`can't resist having ${his2} breasts pampered. ${Spoken(eventSlave, `"I'll give you a boob massage,"`)} ${say}s ${eventSlave.slaveName}, and puts up ${his} ${hasBothArms(eventSlave) ? "arms" : "arm"}, flexing ${his} fingers lewdly. "A really good one. I'll be thorough!"`); } break; case "pregnancy": t.push(`loves to be inseminated,`); if (subSlave.pregKnown === 1) { - t.push(`even though ${he2}'s already pregnant. ${Spoken(eventSlave, `"Come on, you know you want my semen,"`)} says ${eventSlave.slaveName}, idly toying with the precum gathering at ${his} tip.`); + t.push(`even though ${he2}'s already pregnant. ${Spoken(eventSlave, `"Come on, you know you want my semen,"`)} ${say}s ${eventSlave.slaveName}, idly toying with the precum gathering at ${his} tip.`); if (vaginal) { t.push(Spoken(eventSlave, `"I'll do my best to shoot it all the way up into your womb. I might even make you pregnant twice, I'll cum in you so hard."`)); } else { @@ -438,7 +440,7 @@ App.Events.RETSInterslaveBegging = class RETSInterslaveBegging extends App.Event } else { t.push(`in ${his2} anus.`); } - t.push(`${Spoken(eventSlave, `"Come on, you know you want my semen,"`)} says ${eventSlave.slaveName}, idly toying with the precum gathering at ${his} tip. "I'll fill you up."`); + t.push(`${Spoken(eventSlave, `"Come on, you know you want my semen,"`)} ${say}s ${eventSlave.slaveName}, idly toying with the precum gathering at ${his} tip. "I'll fill you up."`); } break; case "dom": @@ -660,7 +662,7 @@ App.Events.RETSInterslaveBegging = class RETSInterslaveBegging extends App.Event } else { t.push(`hot ${girl2},`); } - t.push(`right in front of ${him}. And this while already laboring under a severe case of blue balls. ${Spoken(eventSlave, `"${getWrittenTitle(eventSlave)},"`)} ${he} says unspecifically. ${He} knows you did that in front of ${him} for ${his} benefit, at least partly, and ${he} wouldn't know what to make of it or how to respond, even if ${he} were in possession of ${his} faculties. Which ${he} isn't. All ${his} blood is very obviously located in`); + t.push(`right in front of ${him}. And this while already laboring under a severe case of blue balls. ${Spoken(eventSlave, `"${getWrittenTitle(eventSlave)},"`)} ${he} ${say}s unspecifically. ${He} knows you did that in front of ${him} for ${his} benefit, at least partly, and ${he} wouldn't know what to make of it or how to respond, even if ${he} were in possession of ${his} faculties. Which ${he} isn't. All ${his} blood is very obviously located in`); if (eventSlave.vagina > -1) { t.push(`${his} lovely futanari hard-on.`); } else { diff --git a/src/events/RETS/reRepressedAnalVirgin.js b/src/events/RETS/reRepressedAnalVirgin.js index 3f885065f30560a79b3baed625dd059a681393d6..2ac8f569e043549e9254d56d63a84c42853f4117 100644 --- a/src/events/RETS/reRepressedAnalVirgin.js +++ b/src/events/RETS/reRepressedAnalVirgin.js @@ -33,10 +33,10 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E execute(node) { /** @type {Array<App.Entity.SlaveState>} */ - let [slave, subSlave] = this.actors.map(a => getSlave(a)); + let [eventSlave, subSlave] = this.actors.map(a => getSlave(a)); const { He, he, His, his, him, himself, girl, Girl - } = getPronouns(slave); + } = getPronouns(eventSlave); const { he2, his2, him2, girl2, himself2 } = getPronouns(subSlave).appendSuffix("2"); @@ -44,7 +44,7 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E V.nextLink = "Next Week"; - App.Events.drawEventArt(node, [slave, subSlave]); + App.Events.drawEventArt(node, [eventSlave, subSlave]); let t = []; t.push(contextualIntro(V.PC, subSlave, "DOM")); @@ -57,11 +57,11 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E t.push(`tight anus`); } t.push(`catches your eye near the start of a long inspection, you decide to be kind to ${him2} as you conduct the rest of your inspection with ${pDick ? "your cock" : "a strap-on"}.`); - t.push(contextualIntro(V.PC, slave, "DOM")); + t.push(contextualIntro(V.PC, eventSlave, "DOM")); t.push(`is next on the inspection schedule, and when ${he} comes into your office, it's to the`); - if (canSee(slave)) { + if (canSee(eventSlave)) { t.push(`sight of`); - t.push(App.UI.DOM.combineNodes(contextualIntro(subSlave, subSlave), "'s back and rear")); + t.push(App.UI.DOM.combineNodes(contextualIntro(eventSlave, subSlave), "'s back and rear")); } else { t.push(`sound of ${subSlave.slaveName}`); } @@ -79,14 +79,14 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E } else { t.push(`your strap-ons are`); } - t.push(`not small, and ${he2} walks a little gingerly as ${he2} heads for the bathroom. ${slave.slaveName}, standing there nude for inspection, stares openmouthed at ${subSlave.slaveName} as ${he2} goes. ${He}'s obviously unfamiliar with anal sex.`); + t.push(`not small, and ${he2} walks a little gingerly as ${he2} heads for the bathroom. ${eventSlave.slaveName}, standing there nude for inspection, stares openmouthed at ${subSlave.slaveName} as ${he2} goes. ${He}'s obviously unfamiliar with anal sex.`); App.Events.addParagraph(node, t); t = []; - t.push(`${slave.slaveName} coughs and looks doubtful, like ${he}'s mulling over a question. You let the poor repressed ${girl} chew on it for a while, and eventually ${he} bursts out,`); - t.push(Spoken(slave, `"${getWrittenTitle(slave)}, what were you doing with ${subSlave.slaveName}?"`)); - t.push(`The absurdity gives you a moment's pause, but you answer gamely that you were fucking ${his2} ass. ${slave.slaveName} blushes furiously but plunges on,`); - t.push(Spoken(slave, `"I'm s-sorry, ${getWrittenTitle(slave)}, but I still don't understand. I thought sex happened in a v-vagina. I d-didn't think b-butts were — were for, you know, that."`)); + t.push(`${eventSlave.slaveName} coughs and looks doubtful, like ${he}'s mulling over a question. You let the poor repressed ${girl} chew on it for a while, and eventually ${he} bursts out,`); + t.push(Spoken(eventSlave, `"${getWrittenTitle(eventSlave)}, what were you doing with ${subSlave.slaveName}?"`)); + t.push(`The absurdity gives you a moment's pause, but you answer gamely that you were fucking ${his2} ass. ${eventSlave.slaveName} blushes furiously but plunges on,`); + t.push(Spoken(eventSlave, `"I'm s-sorry, ${getWrittenTitle(eventSlave)}, but I still don't understand. I thought sex happened in a v-vagina. I d-didn't think b-butts were — were for, you know, that."`)); seX(subSlave, "anal", V.PC, "penetrative"); if (canImpreg(subSlave, V.PC)) { t.push(knockMeUp(subSlave, 5, 1, -1, true)); @@ -104,59 +104,59 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E const frag = document.createDocumentFragment(); t = []; - t.push(`You tell ${him} that ${his} butt is for lovemaking, just like ${subSlave.slaveName}'s. ${He} looks horrified. You clear ${his} schedule and sit ${him} down on the couch (${he} carefully avoids the spot where you and ${subSlave.slaveName} embraced) before continuing with your day. ${subSlave.slaveName} was your first inspection of the day, so ${slave.slaveName} has nothing to do for hours and hours other than sit there and`); - if (canSee(slave)) { + t.push(`You tell ${him} that ${his} butt is for lovemaking, just like ${subSlave.slaveName}'s. ${He} looks horrified. You clear ${his} schedule and sit ${him} down on the couch (${he} carefully avoids the spot where you and ${subSlave.slaveName} embraced) before continuing with your day. ${subSlave.slaveName} was your first inspection of the day, so ${eventSlave.slaveName} has nothing to do for hours and hours other than sit there and`); + if (canSee(eventSlave)) { t.push(`watch you.`); } else { t.push(`listen to your actions.`); } - t.push(`${He}'s a healthy ${girl}, ${(slave.preg > slave.pregData.normalBirth/2) ? `ripe with pregnancy,` : ""} and ${his} food is laced with mild aphrodisiacs. The boredom and ${his} building arousal begin to torture ${him}, until finally ${he} grinds out a hesitant`); - t.push(Spoken(slave, `"P-please fuck me, ${getWrittenTitle(slave)}."`)); + t.push(`${He}'s a healthy ${girl}, ${(eventSlave.preg > eventSlave.pregData.normalBirth/2) ? `ripe with pregnancy,` : ""} and ${his} food is laced with mild aphrodisiacs. The boredom and ${his} building arousal begin to torture ${him}, until finally ${he} grinds out a hesitant`); + t.push(Spoken(eventSlave, `"P-please fuck me, ${getWrittenTitle(eventSlave)}."`)); t.push(`You glance at ${him} and ${he} quickly looks down, blushing. You go back to your work, and an hour later ${he} manages a more confident`); - t.push(Spoken(slave, `"Please fuck me, ${getWrittenTitle(slave)}."`)); + t.push(Spoken(eventSlave, `"Please fuck me, ${getWrittenTitle(eventSlave)}."`)); App.Events.addParagraph(frag, t); t = []; - t.push(`Judging ${him} ready, you tell ${him} to ${hasAnyLegs(slave) ? "kneel" : "get"} on the couch. ${He} does, trembling with fear and arousal;`); - if (slave.chastityPenis === 1) { + t.push(`Judging ${him} ready, you tell ${him} to ${hasAnyLegs(eventSlave) ? "kneel" : "get"} on the couch. ${He} does, trembling with fear and arousal;`); + if (eventSlave.chastityPenis === 1) { t.push(`${his} caged cock does not show it, but ${he}'s flushed and willing.`); - } else if (slave.dick > 0 && !canAchieveErection(slave)) { + } else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) { t.push(`as ${he}`); - if (slave.belly >= 100000) { + if (eventSlave.belly >= 100000) { t.push(`struggles to pull ${his} gravid body`); - } else if (slave.belly >= 10000) { + } else if (eventSlave.belly >= 10000) { t.push(`hefts ${his} gravid body`); - } else if (slave.belly >= 5000) { + } else if (eventSlave.belly >= 5000) { t.push(`cradles ${his} belly and carefully climbs`); } else { t.push(`clambers`); } t.push(`up onto the couch, ${he} dribbles precum across the leather.`); - } else if (slave.dick > 0) { + } else if (eventSlave.dick > 0) { t.push(`${he} has a painful hard-on.`); - } else if (slave.clit > 0) { + } else if (eventSlave.clit > 0) { t.push(`${his} big clit is visibly erect.`); - } else if (slave.chastityVagina === 1) { + } else if (eventSlave.chastityVagina === 1) { t.push(`${his} pussy may be locked in chastity, but it doesn't hide the moisture forming under it.`); - } else if (slave.vagina === -1) { + } else if (eventSlave.vagina === -1) { t.push(`and is unconsciously presenting ${his} ass.`); } else { t.push(`${his} pussylips are flushed and moist.`); } t.push(`You tell ${him} to relax, and push a single lubed finger into ${his} anus. ${He} gasps, but does not resist, burrowing ${his} face down into the couch and doing ${his} best to calm ${himself}. After a few minutes, you withdraw your finger and press the slick tip of your ${pDick ? "cock" : "strap-on"}`); t.push(`against ${his} virgin rosebud. ${He} starts in spite of ${himself}, but breathes out obediently, relaxing ${his} butthole enough to let you in. ${He} squeals at the sudden invasion, but you hold ${him} and let ${him} get used to you gradually. After a few minutes you encourage ${him} to`); - if (slave.chastityPenis === 1) { + if (eventSlave.chastityPenis === 1) { t.push(`stimulate ${his} own nipples,`); - } else if ((slave.dick > 0) && !canAchieveErection(slave)) { + } else if ((eventSlave.dick > 0) && !canAchieveErection(eventSlave)) { t.push(`play with ${his} soft cock,`); - } else if (slave.dick > 0) { + } else if (eventSlave.dick > 0) { t.push(`jack off,`); - } else if (slave.clit > 0) { + } else if (eventSlave.clit > 0) { t.push(`rub ${his} clit,`); - } else if (slave.vagina === -1) { + } else if (eventSlave.vagina === -1) { t.push(`frantically rub ${his} perineum,`); - } else if (slave.chastityVagina === 1) { - t.push(`play with ${his} ${slave.boobs > 300 ? "boobs" : "nipples"},`); + } else if (eventSlave.chastityVagina === 1) { + t.push(`play with ${his} ${eventSlave.boobs > 300 ? "boobs" : "nipples"},`); } else { t.push(`play with ${his} pussy,`); } @@ -167,13 +167,13 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E t.push(`visibly compressing the strap-on. `); } t.push(`Confused, ${he} mumbles into the couch,`); - t.push(Spoken(slave, `"${getWrittenTitle(slave)}, I c-came. I came to your thing in my butt. A-am I — does that make me a slut?"`)); + t.push(Spoken(eventSlave, `"${getWrittenTitle(eventSlave)}, I c-came. I came to your thing in my butt. A-am I — does that make me a slut?"`)); t.push(`You assure ${him} that it does. Surprisingly, ${he} does not break down, but exhales slowly and squares ${his} shoulders, visibly resolving to <span class="devotion inc">be a slut</span> if ${he} has to. ${He} even takes a bit longer than strictly necessary giving ${himself} ${his} <span class="virginity loss">first</span> post-sex enema.`); - slave.devotion += 5; - slave.anus += 1; - seX(slave, "anal", V.PC, "penetrative"); - if (canImpreg(slave, V.PC)) { - t.push(knockMeUp(slave, 5, 1, -1, true)); + eventSlave.devotion += 5; + eventSlave.anus += 1; + seX(eventSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 1, -1, true)); } App.Events.addParagraph(frag, t); return frag; @@ -181,11 +181,11 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E function pounding() { t = []; - t.push(`You tell ${him} that ${his} butt is your property, just like ${subSlave.slaveName}'s. ${He} looks <span class="tust dec">terrified.</span> You continue, telling ${him} to bring your property over to you. ${He} stumbles over, begging,`); - t.push(Spoken(slave, `"P-please, fuck me ${getWrittenTitle(slave)}, please don't do stuff to my butt. It's going t-to h-hurt.`)); - if (slave.preg > slave.pregData.normalBirth/2) { + t.push(`You tell ${him} that ${his} butt is your property, just like ${subSlave.slaveName}'s. ${He} looks <span class="trust dec">terrified.</span> You continue, telling ${him} to bring your property over to you. ${He} stumbles over, begging,`); + t.push(Spoken(eventSlave, `"P-please, fuck me ${getWrittenTitle(eventSlave)}, please don't do stuff to my butt. It's going t-to h-hurt.`)); + if (eventSlave.preg > eventSlave.pregData.normalBirth/2) { t.push(`And I-I'm r-really pregnant."`); - } else if (slave.pregKnown === 1) { + } else if (eventSlave.pregKnown === 1) { t.push(`And I-I'm p-pregnant."`); } t.push(`You push ${him} down across your desk, giving ${him} a swat across the rump to warn ${him} to shut up. ${He} does, though ${he} makes a little squealing noise when you begin to grope ${his} ass, working your way in towards ${his} virgin backdoor. When ${he} feels`); @@ -195,74 +195,75 @@ App.Events.RETSAnalRepressedVirgin = class RETSAnalRepressedVirgin extends App.E t.push(`a lubed strap-on`); } t.push(`sliding between ${his} buttocks and then pressing against ${his} anus, ${he} bursts out,`); - t.push(Spoken(slave, `"Please no, ${getWrittenTitle(slave)}! Please not my — AAAH! OW!"`)); + t.push(Spoken(eventSlave, `"Please no, ${getWrittenTitle(eventSlave)}! Please not my — AAAH! OW!"`)); t.push(`and bursts into tears. You give ${him} a few seconds to get used to your girth and then begin to fuck ${his} delicious little virgin behind. Despite the pain, the`); - if (slave.vagina !== -1) { + if (eventSlave.vagina !== -1) { t.push(`stimulation gets ${him} wet,`); - } else if (slave.prostate !== 0) { + } else if (eventSlave.prostate !== 0) { t.push(`prostate stimulation gets ${him} hard,`); } else { t.push(`stimulation brings a little fluid out of ${him},`); } t.push(`and you tell ${him} that ${he} clearly wants it. ${He} doesn't know what to say in response, so ${he} just cries harder as`); - if (canDoVaginal(slave)) { + if (canDoVaginal(eventSlave)) { t.push(`you reach around to cup ${his} soaking cunt possessively.`); - } else if (slave.prostate === 0 && slave.vagina === -1 && slave.dick === 0) { + } else if (eventSlave.prostate === 0 && eventSlave.vagina === -1 && eventSlave.dick === 0) { t.push(`${he} starts to quiver despite ${his} displeasure.`); } else { t.push(`${he} starts to leak despite ${his} displeasure.`); } t.push(`${His} butthole is so wonderfully tight that you orgasm quickly, throwing ${his} unresisting butt over onto the couch for another round. ${He}'s <span class="flaw break">no longer repressed,</span> but ${he} now <span class="flaw gain">hates</span> having ${his} <span class="virginity loss">newly loosened butt</span> fucked.`); - slave.behavioralFlaw = "none"; - slave.sexualFlaw = "hates anal"; - slave.trust -= 5; - slave.anus += 1; - seX(slave, "anal", V.PC, "penetrative"); - if (canImpreg(slave, V.PC)) { - t.push(knockMeUp(slave, 5, 1, -1, true)); + eventSlave.behavioralFlaw = "none"; + eventSlave.sexualFlaw = "hates anal"; + eventSlave.trust -= 5; + eventSlave.anus += 1; + seX(eventSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 1, -1, true)); } return t; } function later() { + const {say} = getEnunciation(eventSlave); t = []; - t.push(`You tell ${him} to sit down on the couch and listen. ${He} obeys, carefully avoiding the spot where you and ${subSlave.slaveName} embraced. You explain that ${subSlave.slaveName} is an experienced anal slave, and that you enjoy having sex with ${him2} there. You point out how much ${subSlave.slaveName} enjoyed ${himself2} (${slave.slaveName} studiously avoids`); - if (canSee(slave)) { + t.push(`You tell ${him} to sit down on the couch and listen. ${He} obeys, carefully avoiding the spot where you and ${subSlave.slaveName} embraced. You explain that ${subSlave.slaveName} is an experienced anal slave, and that you enjoy having sex with ${him2} there. You point out how much ${subSlave.slaveName} enjoyed ${himself2} (${eventSlave.slaveName} studiously avoids`); + if (canSee(eventSlave)) { t.push(`looking at`); } else { t.push(`facing`); } t.push(`the moist spot on the couch that evidences this), and tell ${him} that anal sex can be very enjoyable. ${He}`); - if (canSee(slave)) { + if (canSee(eventSlave)) { t.push(`looks at`); } else { t.push(`listens to`); } t.push(`you uncomprehendingly,`); - if (slave.belly >= 5000) { + if (eventSlave.belly >= 5000) { t.push(`${his} hand resting on ${his} rounded middle,`); } - t.push(`so you try a different tack. You tell ${him} that ${his} anal virginity has a price: it makes ${him} a more valuable slave. ${He}'ll probably be fucked back there someday soon, but it's not something you plan to do lightly. And in any case, ${he}'ll be trained to enjoy the experience when it happens. Hesitantly, ${he} says`); - t.push(Spoken(slave, `"I understand, ${getWrittenTitle(slave)}. I <span class="trust inc">trust you.</span>"`)); + t.push(`so you try a different tack. You tell ${him} that ${his} anal virginity has a price: it makes ${him} a more valuable slave. ${He}'ll probably be fucked back there someday soon, but it's not something you plan to do lightly. And in any case, ${he}'ll be trained to enjoy the experience when it happens. Hesitantly, ${he} ${say}s`); + t.push(Spoken(eventSlave, `"I understand, ${getWrittenTitle(eventSlave)}. I <span class="trust inc">trust you.</span>"`)); t.push(`${He} seems more confident for the rest of the inspection, and when it's done, ${he} leaves with less worry on ${his} face.`); - slave.trust += 5; + eventSlave.trust += 5; return t; } function sold() { t = []; t.push(`You tell ${him} that ${his} butt is your property, just like ${subSlave.slaveName}'s. ${He} looks <span class="trust dec">terrified,</span> but this is nothing to ${his} reaction when another slave arrives to bring ${him} out for an auction of ${his} virgin anus. ${He}'s dragged out, whining,`); - t.push(Spoken(slave, `"P-please, ${getWrittenTitle(slave)}, please don't sell my butthole! I'll do anything! Please!"`)); + t.push(Spoken(eventSlave, `"P-please, ${getWrittenTitle(eventSlave)}, please don't sell my butthole! I'll do anything! Please!"`)); t.push(`${His} pleas are unavailing.`); t.push(`${V.assistant.name} conducts a brisk streetside auction of the weeping slave${girl}, using compliance systems to force ${him} to spread ${his} quivering buttocks for the crowd. The <span class="cash inc">winning bidder</span> uses a public stall to do the deed; its thin walls are nowhere near enough to disguise ${his} whining and sobbing as he <span class="virginity loss">takes ${his} anal virginity.</span> ${He} now <span class="flaw gain">hates anal.</span>`); - cashX(500, "whore", slave); - slave.sexualFlaw = "hates anal"; - slave.trust -= 5; - slave.anus += 1; - seX(slave, "anal", "public", "penetrative"); - if (canGetPregnant(slave) && slave.eggType === "human") { - t.push(knockMeUp(slave, 5, 1, -2, true)); + cashX(500, "whore", eventSlave); + eventSlave.sexualFlaw = "hates anal"; + eventSlave.trust -= 5; + eventSlave.anus += 1; + seX(eventSlave, "anal", "public", "penetrative"); + if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") { + t.push(knockMeUp(eventSlave, 5, 1, -2, true)); } return t; } diff --git a/src/events/RETS/reSadisticDescription.js b/src/events/RETS/reSadisticDescription.js index babccd3f6632a0f873c5e343e0bde8aaaf9ffe11..1ccadf5ae67fa099397a0b2d2f057f3e62458bca 100644 --- a/src/events/RETS/reSadisticDescription.js +++ b/src/events/RETS/reSadisticDescription.js @@ -138,7 +138,7 @@ App.Events.RETSSadisticDescription = class RETSSadisticDescription extends App.E t.push(`${He} grinds against the wilting ${subSlave.slaveName}, and then continues, "I felt your`); if (subSlave.butt > 4) { t.push(`fat`); - } else if ((subSlave.butt > 2)) { + } else if (subSlave.butt > 2) { t.push(`big`); } else { t.push(`tiny little`); diff --git a/src/events/RETS/reShowerForce.js b/src/events/RETS/reShowerForce.js new file mode 100644 index 0000000000000000000000000000000000000000..42fdf1b2700b589feef208d6239a2a6d6de61ae5 --- /dev/null +++ b/src/events/RETS/reShowerForce.js @@ -0,0 +1,190 @@ +App.Events.RETSShowerForce = class RETSShowerForce extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.universalRulesConsent === 0 + ]; + } + + actorPrerequisites() { + return [ + [ // event slave /domslave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + canTalk, + s => s.devotion > 50, + s => s.trust <= 75, + s => (["sadist", "dom"].includes(s.fetish) || s.energy > 95), + ], + [ // and subslave + s => s.fetish !== "mindbroken", + canWalk, + canTalk, + isSlaveAvailable, + s => s.devotion <= 20, + s => (s.fetish !== "buttslut" || s.fetishKnown === 0), + s => (canDoAnal(s) && s.anus !== 0), + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave, subSlave] = this.actors.map(a => getSlave(a)); + const { + He, he, his, him, himself + } = getPronouns(eventSlave); + const { + he2, His2, his2, him2 + } = getPronouns(subSlave).appendSuffix("2"); + + V.nextLink = "Next Week"; + + let facialAttractiveness = "homely"; + if (subSlave.face > 95) { + facialAttractiveness = "gorgeous"; + } else if (subSlave.face > 40) { + facialAttractiveness = "beautiful"; + } else if (subSlave.face > 10) { + facialAttractiveness = "pretty"; + } else if (subSlave.face >= -10) { + facialAttractiveness = "attractive"; + } + let numLegs = "two"; + if (hasBothLegs(eventSlave) && hasBothLegs(subSlave)) { + numLegs = "four"; + } else if (hasBothLegs(eventSlave) || hasBothLegs(subSlave)) { + numLegs = "three"; + } + + App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing"); + + seX(subSlave, "anal", eventSlave, "penetrative"); + let bellyDesc = bellyAdjective(subSlave); + + let t = []; + t.push(`As you pass the showers, you hear what sounds like a muffled altercation over the noise of the showers running. You look in to see ${subSlave.slaveName}'s ${subSlave.skin} body facing you, pressed hard up against the glass wall of one of the showers. ${His2} ${facialAttractiveness} face`); + if (subSlave.belly >= 5000) { + t.push(`and ${subSlave.bellyPreg >= 5000 ? `pregnant` : bellyDesc} belly are`); + } else { + t.push("is"); + } + t.push(`smashed against the glass,`); + if (subSlave.belly >= 5000) { + t.push(`${his2} face`); + } + t.push(`contorted in pain and fear. The apparent mystery is solved when you notice that there are ${numLegs} legs visible: there's a ${hasBothLegs(eventSlave) ? `pair of` : ""}`); + if (eventSlave.muscles > 95) { + t.push(`ripped`); + } else if (eventSlave.muscles > 30) { + t.push(`muscular`); + } else if (eventSlave.muscles > 5) { + t.push(`toned`); + } else { + t.push(`soft`); + } + t.push(`${eventSlave.skin} ${hasBothLegs(eventSlave) ? "calves" : "calf"} behind ${subSlave.slaveName}'s.`); + t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, "DOM"), "'s' face appears at")); + t.push(App.UI.DOM.combineNodes(contextualIntro(eventSlave, subSlave, "DOM"), `'s ear, and though you can't hear exactly what ${he} says, it's something along the lines of "Take it, you whiny little bitch." ${He}'s clearly got ${canPenetrate(eventSlave) ? `${his} cock` : `a couple of fingers`} up ${subSlave.slaveName}'s asshole.`)); + App.Events.addParagraph(node, t); + t = []; + t.push(`Both slaves notice you at the same time. ${subSlave.slaveName}'s ${canSee(subSlave)? `${App.Desc.eyesColor(subSlave)} widen` : "face lights up"}, but ${his2} momentary look of hope is snuffed out when ${he2} remembers who you are. ${eventSlave.slaveName}, on the other hand, looks a little doubtful. The rules allow ${him} to fuck your other slaves, but ${he} isn't quite sure what the right thing to do is, since ${he} isn't the most dominant force in the showers any more.`); + App.Events.addParagraph(node, t); + App.Events.addResponses(node, [ + new App.Events.Result(`Instruct ${him} to be a little nicer`, nicer), + new App.Events.Result("Double anal", double), + ]); + + function nicer() { + t = []; + t.push(`Even though you already have everyone's rapt attention, you rap on the glass for`); + if (canSee(eventSlave) && canSee(subSlave)) { + t.push(`emphasis, watched closely by four huge eyes.`); + } else { + t.push("emphasis."); + } + t.push(`You politely admonish ${eventSlave.slaveName}, and tell ${him} to do a better job of looking after ${his} anal bottom's pleasure. ${He} nods vigorously and snakes a hand around ${subSlave.slaveName}, to where`); + if ((subSlave.dick > 0) && !canAchieveErection(subSlave)) { + t.push(`${his2} limp dick is smashed against the glass.`); + } else if (subSlave.dick > 0) { + t.push(`${his2} dick, shamefully half-hard despite ${his2} unwillingness, is smashed against the glass.`); + } else if (subSlave.vagina === -1) { + t.push(`${his2} featureless groin is hidden between ${his2} forced-together legs.`); + } else { + t.push(`${his2} neglected pussy is hidden between ${his2} forced-together legs.`); + } + t.push(`${eventSlave.slaveName} goes back to the anal, but gives ${subSlave.slaveName} a serviceable reach around as ${he} does. ${subSlave.slaveName} does not orgasm, but ${he2} looks a little less unhappy and <span class="mediumaquamarine">thanks you</span> for your intervention after ${eventSlave.slaveName}`); + if (canPenetrate(eventSlave)) { + t.push(`grunts, fills ${his2} asshole with cum, and pulls ${himself} out.`); + } else { + t.push(`shakes with orgasm and removes ${his} fingers.`); + } + if (canPenetrate(eventSlave)) { + seX(subSlave, "anal", eventSlave, "penetrative"); + } else { + actX(subSlave, "anal"); + } + subSlave.trust += 4; + if (canPenetrate(eventSlave) && canImpreg(subSlave, eventSlave)) { + t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); + } + return t; + } + + function double(){ + t = []; + t.push(`You tell ${eventSlave.slaveName} to get out of the shower. ${He} looks crushed, and ${subSlave.slaveName} looks hopeful, until you tell ${him} to bring the bitch. ${eventSlave.slaveName} grabs ${subSlave.slaveName} by the wrist and drags ${his} protesting victim along. You sit on the counter and tell ${eventSlave.slaveName} to pass you the anal slave. ${He} does, giggling maliciously, openly masturbating as you pull the recalcitrant ${subSlave.slaveName} up onto your lap, seat`); + if (V.PC.dick === 0) { + t.push(`a strap-on`); + } else { + t.push(`your cock`); + } + t.push(`firmly up ${his2} already-fucked`); + if (subSlave.anus > 2) { + t.push(`anal slit,`); + } else if (subSlave.anus > 1) { + t.push(`asshole,`); + } else { + t.push(`anus,`); + } + t.push(`seize the backs of ${his2} knees, and pull ${him2} up into a crouching position atop you. You lift ${him2} up and down on`); + if (V.PC.dick === 0) { + t.push(`the strap-on`); + } else { + t.push(`your dick`); + } + t.push(`for a while, letting ${eventSlave.slaveName} continue ${his}`); + if (canPenetrate(eventSlave)) { + t.push(`jerking,`); + } else { + t.push(`rubbing,`); + } + t.push(`before telling ${him} to join you. ${He} hesitates for a moment before you explain that ${he} should join you up ${subSlave.slaveName}'s butthole. Your victim begins to cry openly but knows better than to beg. ${eventSlave.slaveName}`); + if (canPenetrate(eventSlave)) { + t.push(`pushes ${his} iron-hard prick up alongside yours,`); + } else { + t.push(`shoves first one and then two fingers up alongside your prick,`); + } + t.push(`eliciting a long wail from`); + if (subSlave.belly >= 10000) { + t.push(`the overfilled`); + } + t.push(`${subSlave.slaveName}. The position isn't the best for pounding's sake, but the sadistic thrill of ${subSlave.slaveName}'s anguish is plenty to bring both you and ${eventSlave.slaveName} to prompt orgasm. ${subSlave.slaveName} stumbles painfully back to the shower with <span class="gold">ill-concealed terror,</span> while ${eventSlave.slaveName} impulsively gives you a <span class="hotpink">quick hug.</span>`); + eventSlave.devotion += 4; + if (canPenetrate(eventSlave)) { + seX(subSlave, "anal", eventSlave, "penetrative"); + } else { + actX(subSlave, "anal"); + } + subSlave.trust -= 5; + seX(eventSlave, "anal", V.PC, "penetrative"); + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 1, -1, true)); + } + if (canPenetrate(eventSlave) && canImpreg(subSlave, eventSlave)) { + t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); + } + return t; + } + } +}; diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index 9a45dfec08d740ca23cc2faef93a43fd5f7488ee..4404aea95d5756a68963908bb967f0ce4d01a7f4 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -53,6 +53,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RETSInterslaveBegging(), new App.Events.RETSAnalRepressedVirgin(), new App.Events.RETSSadisticDescription(), + new App.Events.RETSShowerForce(), new App.Events.RETSSiblingTussle(), new App.Events.RETSSimpleAssault(), new App.Events.RETSTopExhaustion(), diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index 93ac75e4a7e12dafc1f457ba800bbff06c378782..e6cf4ae8516c16a5ab6ab9e18e4989b7293a90b0 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -310,13 +310,6 @@ if(eventSlave.drugs === "breast injections") { if (V.universalRulesConsent === 0) { if (eventSlave.devotion > 50) { - if (eventSlave.fetish === "sadist" || eventSlave.fetish === "dom" || eventSlave.energy > 95) { - if (V.REShowerForceSubIDs.length > 0) { - if (eventSlave.trust <= 75) { - V.RETSevent.push("shower force"); - } - } - } if (V.REIfYouEnjoyItSubIDs.length > 0) { V.RETSevent.push("if you enjoy it"); } diff --git a/src/uncategorized/RETS.tw b/src/uncategorized/RETS.tw index 711310cff47891606ca74fb8a2e44b57400eed3d..77d681cc1aa2dd3bc8f0f2067a10fc2432dfc67c 100644 --- a/src/uncategorized/RETS.tw +++ b/src/uncategorized/RETS.tw @@ -74,13 +74,6 @@ <<set $subSlave = $slaves[$slaveIndices[$REIfYouEnjoyItSubIDs]]>> <</if>> -<<case "shower force">> - -<<if Array.isArray($REShowerForceSubIDs)>> - <<set $REShowerForceSubIDs = $REShowerForceSubIDs.random()>> - <<set $subSlave = $slaves[$slaveIndices[$REShowerForceSubIDs]]>> -<</if>> - <<case "cockmilk interception">> <<if Array.isArray($RECockmilkInterceptionIDs)>> @@ -110,7 +103,7 @@ <<set _clothesTemp2 = $subSlave.clothes>> <<switch $RETSevent>> /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/ - <<case "boob collision" "cockmilk interception" "if you enjoy it" "incestuous nursing" "repressed anal virgin" "shower force" "taste test">> + <<case "boob collision" "cockmilk interception" "if you enjoy it" "incestuous nursing" "repressed anal virgin" "taste test">> <<set $activeSlave.clothes = "no clothing">> <<set $subSlave.clothes = "no clothing">> <</switch>> @@ -436,14 +429,6 @@ Advancing to get a better view, you identify the bottom as <<if $subSlave.bellyP <</if>> $activeSlave.slaveName isn't fucking $subSlave.slaveName at all: $he's just <<if canPenetrate($activeSlave)>>holding $his penis stationary<<else>>holding $his fingers<</if>> up $subSlave.slaveName's rear hole. _His2 buttocks has been severely spanked, so some of _his2 unhappiness probably comes from being forced to eat sheets and let $activeSlave.slaveName play with _his2 ass. But then you notice that $activeSlave.slaveName is <<if canPenetrate($activeSlave)>>reaching around<<else>>using $his other hand to reach around<</if>> $subSlave.slaveName, and is <<if $subSlave.dick > 0 && !($subSlave.chastityPenis)>>jerking $subSlave.slaveName off<<else>>manually stimulating $subSlave.slaveName<</if>> <<if ($activeSlave.skill.oral >= 60)>>with all $his considerable expertise<<elseif ($activeSlave.skill.oral > 30)>>with considerable skill<<else>>with every appearance of effort<</if>>. You're not sure what's going on here. -<<case "shower force">> - -<<run seX($subSlave, "anal", $activeSlave, "penetrative")>> -<<set _belly = bellyAdjective($subSlave)>> -As you pass the showers, you hear what sounds like a muffled altercation over the noise of the showers running. You look in to see $subSlave.slaveName's $subSlave.skin body facing you, pressed hard up against the glass wall of one of the showers. _His2 <<if $subSlave.face > 95>>gorgeous<<elseif $subSlave.face > 40>>beautiful<<elseif $subSlave.face > 10>>pretty<<elseif $subSlave.face >= -10>>attractive<<else>>homely<</if>> face<<if $subSlave.belly >= 5000>> and <<if $subSlave.bellyPreg >= 5000>>pregnant<<else>>_belly<</if>> belly are<<else>> is<</if>> smashed against the glass, <<if $subSlave.belly >= 5000>>_his2 face <</if>>contorted in pain and fear. The apparent mystery is solved when you notice that there are <<if hasBothLegs($activeSlave) && hasBothLegs($subSlave)>>four<<elseif hasBothLegs($activeSlave) || hasBothLegs($subSlave)>>three<<else>>two<</if>> legs visible: there's a <<if hasBothLegs($activeSlave)>>pair of <</if>><<if ($activeSlave.muscles > 95)>>ripped<<elseif ($activeSlave.muscles > 30)>>muscular<<elseif ($activeSlave.muscles > 5)>>toned<<else>>soft<</if>> $activeSlave.skin cal<<if hasBothLegs($activeSlave)>>ves<<else>>f<</if>> behind $subSlave.slaveName's. <<= App.UI.slaveDescriptionDialog($activeSlave)>>'s face appears at <<= contextualIntro($activeSlave, $subSlave, true)>>'s ear, and though you can't hear exactly what $he says, it's something along the lines of "Take it, you whiny little bitch." $He's clearly got <<if canPenetrate($activeSlave)>>$his cock<<else>>a couple of fingers<</if>> up $subSlave.slaveName's asshole. -<br><br> -Both slaves notice you at the same time. $subSlave.slaveName's <<if canSee($subSlave)>><<= App.Desc.eyesColor($subSlave)>> widen<<else>>face lights up<</if>>, but _his2 momentary look of hope is snuffed out when _he2 remembers who you are. $activeSlave.slaveName, on the other hand, looks a little doubtful. The rules allow $him to fuck your other slaves, but $he isn't quite sure what the right thing to do is, since $he isn't the most dominant force in the showers any more. - <<case "cockmilk interception">> <<run seX($subSlave, "oral", $activeSlave, "oral")>> @@ -900,44 +885,6 @@ $he adds impishly. <<if canHear($subSlave)>>Hearing this<<else>>Realizing your p <</replace>> <</link>> -<<case "shower force">> - -<<link "Instruct $him to be a little nicer">> - <<replace "#result">> - Even though you already have everyone's rapt attention, you rap on the glass for emphasis<<if canSee($activeSlave) && canSee($subSlave)>>, watched closely by four huge eyes<</if>>. You politely admonish $activeSlave.slaveName, and tell $him to do a better job of looking after $his anal bottom's pleasure. $He nods vigorously and snakes a hand around $subSlave.slaveName, to where <<if ($subSlave.dick > 0) && !canAchieveErection($subSlave)>>_his2 limp dick is smashed against the glass<<elseif $subSlave.dick > 0>>_his2 dick, shamefully half-hard despite _his2 unwillingness, is smashed against the glass<<elseif $subSlave.vagina == -1>>_his2 featureless groin is hidden between _his2 forced-together legs<<else>>_his2 neglected pussy is hidden between _his2 forced-together legs<</if>>. $activeSlave.slaveName goes back to the anal, but gives $subSlave.slaveName a serviceable reach around as $he does. $subSlave.slaveName does not orgasm, but _he2 looks a little less unhappy and @@.mediumaquamarine;thanks you@@ for your intervention after $activeSlave.slaveName <<if canPenetrate($activeSlave)>>grunts, fills _his2 asshole with cum, and pulls $himself out.<<else>>shakes with orgasm and removes $his fingers.<</if>> - <<if canPenetrate($activeSlave)>> - <<run seX($subSlave, "anal", $activeSlave, "penetrative")>> - <<else>> - <<run actX($subSlave, "anal")>> - <</if>> - <<set $subSlave.trust += 4>> - <<if canPenetrate($activeSlave) && canImpreg($subSlave, $activeSlave)>> - <<= knockMeUp($subSlave, 5, 1, $activeSlave.ID, 1)>> - <</if>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> -<br><<link "Double anal">> - <<replace "#result">> - You tell $activeSlave.slaveName to get out of the shower. $He looks crushed, and $subSlave.slaveName looks hopeful, until you tell $him to bring the bitch. $activeSlave.slaveName grabs $subSlave.slaveName by the wrist and drags $his protesting victim along. You sit on the counter and tell $activeSlave.slaveName to pass you the anal slave. $He does, giggling maliciously, openly masturbating as you pull the recalcitrant $subSlave.slaveName up onto your lap, seat <<if $PC.dick == 0>>a strap-on<<else>>your cock<</if>> firmly up _his2 already-fucked <<if $subSlave.anus > 2>>anal slit<<elseif $subSlave.anus > 1>>asshole<<else>>anus<</if>>, seize the backs of _his2 knees, and pull _him2 up into a crouching position atop you. You lift _him2 up and down on <<if $PC.dick == 0>>the strap-on<<else>>your dick<</if>> for a while, letting $activeSlave.slaveName continue $his <<if canPenetrate($activeSlave)>>jerking<<else>>rubbing<</if>>, before telling $him to join you. $He hesitates for a moment before you explain that $he should join you up $subSlave.slaveName's butthole. Your victim begins to cry openly but knows better than to beg. $activeSlave.slaveName <<if canPenetrate($activeSlave)>>pushes $his iron-hard prick up alongside yours,<<else>>shoves first one and then two fingers up alongside your prick,<</if>> eliciting a long wail from <<if $subSlave.belly >= 10000>>the overfilled <</if>>$subSlave.slaveName. The position isn't the best for pounding's sake, but the sadistic thrill of $subSlave.slaveName's anguish is plenty to bring both you and $activeSlave.slaveName to prompt orgasm. $subSlave.slaveName stumbles painfully back to the shower with @@.gold;ill-concealed terror,@@ while $activeSlave.slaveName impulsively gives you a @@.hotpink;quick hug.@@ - <<set $activeSlave.devotion += 4>> - <<if canPenetrate($activeSlave)>> - <<run seX($subSlave, "anal", $activeSlave, "penetrative")>> - <<else>> - <<run actX($subSlave, "anal")>> - <</if>> - <<set $subSlave.trust -= 5>> - <<run seX($activeSlave, "anal", $PC, "penetrative")>> - <<if canImpreg($subSlave, $PC)>> - <<= knockMeUp($subSlave, 5, 1, -1, 1)>> - <</if>> - <<if canPenetrate($activeSlave) && canImpreg($subSlave, $activeSlave)>> - <<= knockMeUp($subSlave, 5, 1, $activeSlave.ID, 1)>> - <</if>> - <<set $slaves[$slaveIndices[$subSlave.ID]] = $subSlave>> - <</replace>> -<</link>> - <<case "cockmilk interception">> <<link "Step in for the stimulator">> diff --git a/src/uncategorized/randomIndividualEvent.tw b/src/uncategorized/randomIndividualEvent.tw index b6a22d1494963cc5fdacecf62a2b858ec776007f..eff15705d31b49e8f4b1ad1eb6983ab5ddcd527d 100644 --- a/src/uncategorized/randomIndividualEvent.tw +++ b/src/uncategorized/randomIndividualEvent.tw @@ -28,7 +28,7 @@ /* SUB CHECKS */ - <<set $RETasteTestSubIDs = [], $RECockmilkInterceptionIDs = [], $REShowerForceSubIDs = [], $REIfYouEnjoyItSubIDs = [], $REBoobCollisionSubIDs = []>> + <<set $RETasteTestSubIDs = [], $RECockmilkInterceptionIDs = [], $REIfYouEnjoyItSubIDs = [], $REBoobCollisionSubIDs = []>> <<for $i = 0; $i < $slaves.length; $i++>> <<if $slaves[$i].fetish != "mindbroken">> @@ -38,7 +38,6 @@ <<if $slaves[$i].devotion <= 20>> <<if ($slaves[$i].fetish != "buttslut") || ($slaves[$i].fetishKnown == 0)>> <<if $slaves[$i].anus != 0>> - <<set $REShowerForceSubIDs.push($slaves[$i].ID)>> <<set $REIfYouEnjoyItSubIDs.push($slaves[$i].ID)>> <</if>> <</if>>