diff --git a/src/events/RETS/reAnalCowgirl.js b/src/events/RETS/reAnalCowgirl.js index 841691e83f5fa5802e8ebcf8f2b953baa71a569b..87ab05998e5742581493f5e3cf7496d57972c081 100644 --- a/src/events/RETS/reAnalCowgirl.js +++ b/src/events/RETS/reAnalCowgirl.js @@ -9,23 +9,29 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent return [ [ // event slave /domslave s => s.fetish !== "mindbroken", + s => s.fuckdoll === 0, hasAnyArms, - hasAnyLegs, + canMove, canTalk, + canHear, s => s.assignment !== Job.QUARTER, s => s.devotion > 20, s => ["buttslut", "sadist", "dom"].includes(s.fetish), s => (s.chastityPenis !== 1 || s.dick === 0), s => s.rules.release.slaves === 1, + s => s.belly < 30000, ], [ // and subslave s => s.fetish !== "mindbroken", + s => s.fuckdoll === 0, canWalk, canTalk, + s => (canSee(s) || canHear(s)), isSlaveAvailable, s => (s.devotion >= -20 && s.devotion <= 60), s => s.fetish !== "buttslut", s => (canDoAnal(s) && s.anus !== 0), + s => s.belly < 30000, ] ]; } @@ -36,14 +42,18 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent const { He, he, his, him, himself } = getPronouns(eventSlave); + const hands = hasBothArms(eventSlave) ? "hands" : "hand"; + const {say} = getEnunciation(eventSlave); const { He2, he2, His2, his2, him2, girl2, himself2 } = getPronouns(subSlave).appendSuffix("2"); + const {say2} = getEnunciation(subSlave); V.nextLink = "Next Week"; App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing"); const canP = canPenetrate(eventSlave); + const clitP = eventSlave.clit > 3; let t = []; @@ -53,16 +63,38 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent App.Events.addParagraph(node, t); t= []; - t.push(`${He}'s sitting on the end of the couch, though only ${his} legs, crotch, and hands are immediately visible. This is because ${he} has`); + t.push(`${He}'s sitting on the end of the couch, though only ${his} legs, crotch, and ${hands} are immediately visible. This is because ${he} has`); t.push(contextualIntro(eventSlave, subSlave, "DOM")); - t.push(`on top of ${him}, impaled on ${canP ? `${his} cock`: `a strap-on ${he}'s wearing`}. ${subSlave.slaveName} is bent almost double. ${eventSlave.slaveName} has ${his} ${eventSlave.skin} hands up on the backs of ${subSlave.slaveName}'s ${subSlave.skin} knees, holding ${his2} legs`); + t.push(`on top of ${him}, impaled on`); + if (canP) { + t.push(`${his} cock.`); + } else if (clitP) { + t.push(`${his} phallus-like clit.`); + } else { + t.push(`a strap-on ${he}'s wearing.`); + } + t.push(`${subSlave.slaveName} is bent`); + if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) { + t.push(`at an awkward angle.`); + } else { + t.push(`almost double.`); + } + t.push(`${eventSlave.slaveName} has ${his} ${eventSlave.skin}`); + if (hasBothArms(eventSlave)) { + t.push(`hands up on the backs of ${subSlave.slaveName}'s ${subSlave.skin} knees, holding ${his2} legs`); + } else { + t.push(`hand up on ${subSlave.slaveName}'s ${subSlave.skin} back, forcing ${him2} to keep ${his2} legs`); + } if (eventSlave.belly >= 5000) { - t.push(`to either side of ${his2}`); + t.push(`to either side of ${his}`); if (eventSlave.preg > eventSlave.pregData.normalBirth/8) { t.push(`pregnancy,`); } else { t.push(`belly,`); } + if (!hasBothArms(eventSlave)) { + t.push(`and`); + } } t.push(`up against ${his2}`); if (subSlave.boobs > 2000) { @@ -71,9 +103,16 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent t.push(`shoulders.`); } t.push(`${subSlave.slaveName} is completely helpless, and ${he2}'s being fucked hard:`); - if (canP) { - if (eventSlave.dick - subSlave.anus > 2) { - t.push(`${eventSlave.slaveName}'s cock is very big,`); + if (canP || clitP) { + let sizeRatio; + if (canP) { + sizeRatio = eventSlave.dick - subSlave.anus; + } 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) { t.push(`even for ${subSlave.slaveName}'s loose anus,`); } else if (subSlave.anus > 1) { @@ -82,8 +121,8 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent t.push(`especially for ${subSlave.slaveName}'s tight anus,`); } t.push(`so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down only a little way, allowing ${him} to do so fast.`); - } else if (eventSlave.dick - subSlave.anus > 0) { - t.push(`${eventSlave.slaveName}'s cock is a good fit for ${subSlave.slaveName}'s`); + } else if (sizeRatio > 0) { + t.push(`${eventSlave.slaveName}'s ${cock} is a good fit for ${subSlave.slaveName}'s`); if (subSlave.anus > 2) { t.push(`loose`); } else if (subSlave.anus > 1) { @@ -93,7 +132,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } t.push(`anus, so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down fast.`); } else { - t.push(`${eventSlave.slaveName}'s cock barely stretches ${subSlave.slaveName}'s`); + t.push(`${eventSlave.slaveName}'s ${cock} barely stretches ${subSlave.slaveName}'s`); if (subSlave.anus > 2) { t.push(`loose`); } else if (subSlave.anus > 1) { @@ -122,10 +161,11 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent if (subSlave.bellyPreg >= 8000) { t.push(`though ${his2}`); if (subSlave.pregType > 1) { - t.push(`children seem to be expressing their own thoughts as ${he2} rubs ${his2} pregnant belly.`); + t.push(`children seem to be expressing their own thoughts`); } else { - t.push(`children seem to be expressing their own thought as ${he2} rubs ${his2} pregnant belly.`); + t.push(`child seems to be expressing its own thought`); } + t.push(`as ${he2} rubs ${his2} pregnant belly.`); } else if (subSlave.bellyImplant >= 8000) { t.push(`${his2} implant rounded belly bobbing with each thrust into ${him2}.`); } else { @@ -138,41 +178,25 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } else if (subSlave.dick > 0) { t.push(`${he2} looks aroused, though ${his2} flopping dick can't show it.`); } else if (subSlave.vaginaLube > 0) { - t.push(`${his2} cunt is gushing`); - if (girl2 === "girl") { - t.push(`female`); - } - t.push(`lubricant as the pistoning phallus alternately pushes and pulls at ${his2} vaginal walls.`); + t.push(`${his2} cunt is gushing female lubricant as the pistoning phallus pushes against the back of ${his2} vaginal wall.`); } else if (subSlave.labia > 0) { t.push(`${his2} generous petals move gently with the motion of the pounding, and they're far from dry.`); } else if (subSlave.vagina === -1) { t.push(`${he2}'s taking it up ${his2} only hole just fine.`); } else { - t.push(`${his2} cunt glistens as the pistoning phallus alternately pushes and pulls at ${his2} vaginal walls.`); + t.push(`${his2} cunt glistens as the pistoning phallus alternately pushes and pulls at ${his2} vaginal wall from behind.`); } t.push(`"H-h-hi-i`); - if (SlaveStatsChecker.checkForLisp(subSlave)) { - if (subSlave.custom.titleLisp !== "" && subSlave.custom.titleLisp !== 0) { - t.push(`${subSlave.custom.titleLisp}," ${he2} lisps`); - } else if (V.PC.customTitleLisp) { - t.push(`${V.PC.customTitleLisp}," ${he2} lisps`); - } else if (V.PC.title !== 0) { - t.push(`M-m-ma-a-th-t-ter," ${he2} lisps`); - } else { - t.push(`M-m-mi-i-ith-t-r-r-e-eth-th-th," ${he2} lisps`); - } + if (subSlave.custom.title !== "" && subSlave.custom.title !== 0) { + t.push(`${Spoken(subSlave, `${subSlave.custom.title},`)}"`); + } else if (V.PC.customTitle) { + t.push(`${Spoken(subSlave, `${V.PC.customTitle},`)}"`); + } else if (V.PC.title !== 0) { + t.push(`${Spoken(subSlave, `M-m-ma-a-st-t-ter,`)}"`); } else { - if (subSlave.custom.title !== "" && subSlave.custom.title !== 0) { - t.push(`${subSlave.custom.title}," ${he2} says`); - } else if (V.PC.customTitle) { - t.push(`${V.PC.customTitle}," ${he2} says`); - } else if (V.PC.title !== 0) { - t.push(`M-m-ma-a-st-t-ter," ${he2} says`); - } else { - t.push(`M-m-mi-i-is-st-r-r-e-es-s-s," ${he2} says`); - } + t.push(`${Spoken(subSlave, `M-m-mi-i-is-st-r-r-e-es-s-s,`)}"`); } - t.push(`breathlessly, doing ${his2} best to greet you properly despite the bouncing.`); + t.push(`${he2} ${say2}s breathlessly, doing ${his2} best to greet you properly despite the bouncing.`); App.Events.addParagraph(node, t); t= []; @@ -184,7 +208,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } else { t.push(`homely`); } - t.push(`face instantly appears, craning out from behind ${subSlave.slaveName}'s back to see. ${Spoken(eventSlave, `"Oh, hi, ${getWrittenTitle(eventSlave)}!"`)} ${he} says with a cheerful smile,`); + t.push(`face instantly appears, craning out from behind ${subSlave.slaveName}'s back to see. ${Spoken(eventSlave, `"Oh, hi, ${getWrittenTitle(eventSlave)}!"`)} ${he} ${say}s with a cheerful smile,`); if (eventSlave.muscles > 30) { t.push(`not breathing hard at all despite bouncing a ${girl2} off ${his} crotch.`); } else if (eventSlave.muscles > 5) { @@ -192,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" : canHear(eventSlave) ? "heard" : "noticed"} ${him2} going by, and I thought ${he2}'d look cute with ${canP ? "my dick" : "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."`)); @@ -284,12 +308,16 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } if (canSee(eventSlave)) { t.push(`Seeing`); - } else if (canHear(eventSlave)) { + } else { t.push(`Hearing`); + } + t.push(`this, ${eventSlave.slaveName} <span class="hotpink">giggles with anticipation,</span> and pulls`); + if (hasBothArms(eventSlave)) { + t.push(`${subSlave.slaveName}'s knees back farther.`); } else { - t.push(`Acknowledging`); + t.push(`${subSlave.slaveName} even closer.`); } - t.push(`this, ${eventSlave.slaveName} <span class="hotpink">giggles with anticipation,</span> and pulls ${subSlave.slaveName}'s knees back farther. The slave whines at the stretch, and then gasps as the invading phallus pops free of ${his2} asshole. ${His2} anus`); + t.push(`The slave whines at the stretch, and then gasps as the invading phallus pops free of ${his2} asshole. ${His2} anus`); if (subSlave.anus > 2) { t.push(`gapes lewdly, its sphincter so well stretched that it stays invitingly open,`); } else if (subSlave.anus > 1) { @@ -323,9 +351,23 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } else { t.push(`crotch.`); } - t.push(`With you standing there, ${eventSlave.slaveName} can't really see much, and ${he} can't drop ${subSlave.slaveName}'s legs without throwing everything into confusion. So, ${he}'s reduced to blind jabs to get ${his}`); + t.push(`With you standing there, ${eventSlave.slaveName} can't really`); + if (canSee(eventSlave)) { + t.push(`see much,`); + } else { + t.push(`feel around down there,`); + } + t.push(`and ${he} can't`); + if (hasBothArms(eventSlave)) { + t.push(`drop ${subSlave.slaveName}'s legs`); + } else { + t.push(`relax ${his} grip on ${subSlave.slaveName}`); + } + t.push(`without throwing everything into confusion. So, ${he}'s reduced to blind jabs to get ${his}`); if (canP) { t.push(`cock`); + } else if (clitP) { + t.push(`clit`); } else { t.push(`strap-on`); } @@ -337,9 +379,9 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent } App.Events.addParagraph(frag, t); t = []; - if (subSlave.vagina > 0) { + if (canDoVaginal(subSlave) && subSlave.vagina > 0) { t.push(`With ${eventSlave.slaveName} occupying ${subSlave.slaveName}'s rear hole, your next step is obvious to everyone involved, and ${he2} groans with fullness as ${he2} feels ${his2} cunt accommodate you. ${eventSlave.slaveName} matches ${his} rhythm to yours, and`); - if (canP) { + if (canP || clitP) { t.push(`orgasms promptly, since ${he}'s less accustomed than you are to the delectable sensation of a ${girl2} tightened by a phallus in ${his2} other hole.`); } else { t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`); @@ -350,10 +392,11 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent if (canP && canImpreg(subSlave, eventSlave)) { t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); } + seX(subSlave, "vaginal", V.PC, "penetrative"); } else if (subSlave.anus > 2) { t.push(`${subSlave.slaveName}'s rear hole is such a loose slit that double anal shouldn't be too much trouble for ${him2}. It isn't, though ${his2} breath definitely quickens as ${he2} feels a second rod push its way past ${his2} stretched sphincter. ${eventSlave.slaveName}`); - if (canP) { - t.push(`orgasms promptly, unable to prolong sex when ${he}'s feeling ${his} cock slide against you inside another slave's anus.`); + if (canP || clitP) { + t.push(`orgasms promptly, unable to prolong sex when ${he}'s feeling ${his} ${cock} slide against you inside another slave's anus.`); } else { t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`); } @@ -363,9 +406,10 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent if (canP && canImpreg(subSlave, eventSlave)) { t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); } + seX(subSlave, "anal", V.PC, "penetrative"); } else { t.push(`${subSlave.slaveName}'s rear hole is a bit tight for double anal, and ${he2}'s already quite dominated; you mean to use ${him2} thoroughly, not destroy ${him2}. So, you and ${eventSlave.slaveName} switch off: you use ${subSlave.slaveName}'s butt while ${eventSlave.slaveName} pins ${him2} for you, and then you go back to ${subSlave.slaveName}'s mouth for a while and let ${eventSlave.slaveName} take over sodomizing duties. ${He}`); - if (canP) { + if (canP || clitP) { t.push(`orgasms promptly, since ${he} finds a hole warm from your use very hot.`); } else { t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`); @@ -376,6 +420,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent if (canP && canImpreg(subSlave, eventSlave)) { t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true)); } + seX(subSlave, "anal", V.PC, "penetrative"); } t.push(`When ${subSlave.slaveName} has stumbled off to the shower, ${eventSlave.slaveName} presents ${himself} for inspection, smelling of sex and <span class="mediumaquamarine">smiling trustingly.</span>`); eventSlave.devotion += 2;