diff --git a/src/events/RETS/reCockmilkInterception.js b/src/events/RETS/reCockmilkInterception.js index 4d8e4919f75fc0691001df9fad9cb68f94e69cc6..be42ef54e6abf557215d72e434b20ef74c9a6be9 100644 --- a/src/events/RETS/reCockmilkInterception.js +++ b/src/events/RETS/reCockmilkInterception.js @@ -7,19 +7,23 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App return [ [ // event slave /domslave s => s.fetish !== "mindbroken", - hasAnyArms, - hasAnyLegs, + canMove, canTalk, s => s.devotion > 20, - s => s.dietCum > 0 || (s.fetishKnown && s.fetish === "cumslut") + s => s.dietCum > 0 || (s.fetishKnown && s.fetish === "cumslut"), + s => s.belly < 60000, ], [ // and subslave s => s.fetish !== "mindbroken", s => (s.assignment === Job.DAIRY || s.assignment === Job.MILKED), + isSlaveAvailable, + canMove, s => s.dick !== 0, s => s.balls !== 0, - s => (s.vasectomy === 0 && s.ballType === "human"), - s => (canDoAnal(s) && s.anus !== 0), + s => s.vasectomy === 0, + s => s.ballType === "human", + s => s.belly < 150000, + s => ((canDoVaginal(s) && s.vagina > 0) || (canDoAnal(s) && s.anus > 0)), ] ]; } @@ -31,27 +35,31 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App He, he, his, him, himself, His } = getPronouns(slave); const {say} = getEnunciation(slave); + const doVaginal = (canDoVaginal(subSlave) && subSlave.vagina > 0); + const doAnal = (canDoAnal(subSlave) && subSlave.anus > 0); + const hands = hasBothArms(slave) ? "hands" : "hand"; const {He2, he2, His2, his2, him2, girl2} = getPronouns(subSlave).appendSuffix("2"); V.nextLink = "Next Week"; App.Events.drawEventArt(node, [slave, subSlave], "no clothing"); let t = []; - - seX(subSlave, "oral", slave, "oral"); t.push(`Early in the morning, you run across`, contextualIntro(V.PC, subSlave, "DOM"), `using one of the penthouse milking machines. This isn't surprising;`); if (subSlave.lactation === 0) { t.push(`${he2}'s not lactating, but ${he2}'s a good semen producer and when ${he2} wakes up, ${he2}'s usually very ready to have one of the machines drain ${his2} balls for ${him2}.`); } else { - if (subSlave.preg > subSlave.pregData.normalBirth/1.33) { + if (subSlave.preg > subSlave.pregData.normalBirth / 1.33) { t.push(`it's late in ${his2} pregnancy and ${he2} wakes up every day with ${his2} ${subSlave.boobShape} breasts sore, painfully swollen with rich, nutritious milk.`); - } else if (subSlave.preg > subSlave.pregData.normalBirth/2) { + } else if (subSlave.preg > subSlave.pregData.normalBirth / 2) { t.push(`${he2}'s pregnant and ${he2} wakes up every day with ${his2} ${subSlave.boobShape} breasts sore and swollen with rich, nutritious milk.`); } else if (subSlave.lactation > 1) { t.push(`the tiny little slow-release implant in each of ${his2} breasts is merciless. It keeps ${his2} mammary glands in a permanent state of barely-safe hyperproduction, and ${he2} wakes up every day with ${his2} terribly sore breasts spontaneously dribbling milk.`); } else { t.push(`${his2} lactation is natural, but it's still enough that ${he2} wakes up most days with full, sore breasts.`); } - t.push(`But ${his2} udders aren't the only thing producing creamy liquid. The machine is applying generous prostate stimulation to drain ${his2} balls, too.`); + t.push(`But ${his2} udders aren't the only thing producing creamy liquid.`); + if ((doAnal || doVaginal) && subSlave.prostate > 0) { + t.push(`The machine is applying generous prostate stimulation to drain ${his2} balls, too.`); + } subSlave.lactationDuration = 2; subSlave.boobs -= subSlave.boobsMilk; subSlave.boobsMilk = 0; @@ -64,7 +72,15 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } App.Events.addParagraph(node, t); t = []; - t.push(`You can't see much of the slave under ${subSlave.slaveName}, since ${he}'s intimately intertwined with the machine and with ${subSlave.slaveName}, but based on ${his}`); + t.push(`You can't see much of the slave under ${subSlave.slaveName}, since ${he}'s intimately intertwined with the machine and`); + if (subSlave.weight > 95) { + t.push(`${subSlave.slaveName} is a hefty ${girl2},`); + } else if (subSlave.belly > 30000) { + t.push(`${subSlave.slaveName}'s middle isn't exactly small,`); + } else { + t.push(`with ${subSlave.slaveName},`); + } + t.push(`but based on ${his}`); if (slave.dick > 0) { if (canAchieveErection(slave) && !(slave.chastityPenis)) { t.push(`stiff prick,`); @@ -117,53 +133,130 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } t.push(`so ${slave.slaveName} has ${his} head buried between ${subSlave.slaveName}'s quivering thighs. ${He} isn't sucking ${subSlave.slaveName}'s dick so much as ${he}'s nursing at it, keeping it entirely within ${his} mouth and applying powerful suction.`); } else if (subSlave.dick > 8) { - t.push(`has an inhumanly monstrous penis that the poor slave's cardiovascular system couldn't possibly bring erect. ${slave.slaveName} has gotten its huge soft head into ${his} mouth, and is sucking lustily.`); + t.push(`has an inhumanly monstrous penis that the poor slave's cardiovascular system couldn't possibly bring`); + if (slave.drugs === "priapism agents") { + t.push(`erect without outside aid; agents like the priapism agents ${he2} is currently on. ${slave.slaveName} has forced as much of its head into ${his} mouth as ${he} can, and is sucking lustily while trying not to choke.`); + } else { + t.push(`erect. ${slave.slaveName} has gotten its huge soft head into ${his} mouth, and is sucking lustily.`); + } } else if (!canAchieveErection(subSlave)) { t.push(`can't achieve an erection, but ${slave.slaveName} is sucking ${his2} dick anyway. ${He}'s got ${his} mouth full of it, and to go by the flexing of ${his} cheeks, is applying ${his} tongue with gusto.`); } else { t.push(`is rock hard, of course, and ${slave.slaveName} is giving ${him2} a lusty blowjob, stroking ${his2} head busily back and forth.`); } - t.push(`The milking machine cum receptacle is designed to be warm, wet, and stimulating, but ${subSlave.slaveName} is getting much better attention. ${slave.slaveName} is omitting nothing that could help ${him} extract every last drop of cum. ${He}'s sucking, and the machine is applying direct stimulation to ${subSlave.slaveName}'s`); - if (subSlave.prostate) { - t.push(`prostate`); - } else { - t.push(`insides`); - } - t.push(`with`); - if (subSlave.anus > 3) { - t.push(`a big vibrating dildo that comfortably fills ${his2} experienced anus,`); - } else if (subSlave.anus > 2) { - t.push(`a vibrating dildo that ${his2} soft asshole can take comfortably,`); - } else { - t.push(`a little vibrator that fits comfortably up ${his2} tight ass,`); - } - if (subSlave.dick < 3) { - t.push(`giving ${slave.slaveName} limited options to further stimulate the poorly-endowed slave. ${He}'s using one hand to stroke the soft, precum-slick skin below ${subSlave.slaveName}'s anus.`); - } else if (subSlave.dick > 8) { - t.push(`so ${slave.slaveName} has one hand wrapped around the gigantic soft python of flesh between ${subSlave.slaveName}'s legs, and is squeezing it rhythmically from its base up to where its head enters ${his} wet lips.`); - } else if (!canAchieveErection(subSlave)) { - t.push(`so, since ${slave.slaveName} can't jack off a soft shaft, ${he}'s using one hand to stroke the soft, precum-slick skin below ${subSlave.slaveName}'s anus.`); - } else { - t.push(`so ${he} uses one hand to stroke the hard shaft outside ${his} wet lips, using ${his} saliva and ${subSlave.slaveName}'s precum to perform a messy handjob.`); + t.push(`The milking machine cum receptacle is designed to be warm, wet, and stimulating, but ${subSlave.slaveName} is getting much better attention. ${slave.slaveName} is omitting nothing that could help ${him} extract every last drop of cum.`); + if (doAnal || doVaginal) { + t.push(`${He}'s sucking, and the machine is applying direct stimulation to ${subSlave.slaveName}'s`); + if (subSlave.prostate) { + t.push(`prostate`); + } else { + t.push(`insides`); + } + t.push(`with`); + if (doAnal) { + actX(subSlave, "anal"); + if (subSlave.anus > 3) { + t.push(`a big vibrating dildo that comfortably fills ${his2} experienced anus,`); + } else if (subSlave.anus > 2) { + t.push(`a vibrating dildo that ${his2} soft asshole can take comfortably,`); + } else { + t.push(`a little vibrator that fits comfortably up ${his2} tight ass,`); + } + } else { + actX(subSlave, "vaginal"); + if (subSlave.vagina > 3) { + t.push(`a big vibrating dildo that comfortably fills ${his2} mature pussy,`); + } else if (subSlave.vagina > 2) { + t.push(`a vibrating dildo that ${his2} fits ${his2} pussy perfectly,`); + } else { + t.push(`a vibrating dildo that fills ${his2} tight little pussy,`); + } + } + if (hasAnyArms(slave)) { + if (subSlave.dick < 3) { + t.push(`giving ${slave.slaveName} limited options to further stimulate the poorly-endowed slave. ${He}'s using one hand to`); + if (doAnal && doVaginal) { + seX(subSlave, "vaginal", slave, "penetrative"); + if (subSlave.vagina > 3) { + t.push(`fist ${his2} mature vagina.`); + } else if (subSlave.vagina > 2) { + t.push(`penetrate ${his2} pussy.`); + } else { + t.push(`finger ${his2} tight pussy.`); + } + } else { + t.push(`stroke the soft, precum-slick skin below ${subSlave.slaveName}'s anus.`); + } + } else if (subSlave.dick > 8) { + t.push(`so ${slave.slaveName} has one hand wrapped around the gigantic soft python of flesh between ${subSlave.slaveName}'s legs, and is squeezing it rhythmically from its base up to where its head enters ${his} wet lips.`); + } else if (!canAchieveErection(subSlave)) { + t.push(`so, since ${slave.slaveName} can't jack off a soft shaft, ${he}'s using one hand to`); + if (doAnal && doVaginal) { + seX(subSlave, "vaginal", slave, "penetrative"); + if (subSlave.vagina > 3) { + t.push(`fist ${his2} mature vagina.`); + } else if (subSlave.vagina > 2) { + t.push(`penetrate ${his2} vagina.`); + } else { + t.push(`finger ${his2} tight vagina.`); + } + } else { + t.push(`stroke the soft, precum-slick skin below ${subSlave.slaveName}'s anus.`); + } + } else { + t.push(`so ${he} uses one hand to stroke the hard shaft outside ${his} wet lips, using ${his} saliva and ${subSlave.slaveName}'s precum to perform a messy handjob.`); + } + } + } else if (hasAnyArms(slave)) { + if (subSlave.dick < 3) { + t.push(`${He}'s giving ${slave.slaveName} limited options to further stimulate the poorly-endowed slave. ${He}'s using one hand to stroke the soft, precum-slick skin below ${subSlave.slaveName}'s anus.`); + } else if (subSlave.dick > 8) { + t.push(`${He} has has one hand wrapped around the gigantic soft python of flesh between ${subSlave.slaveName}'s legs, and is squeezing it rhythmically from its base up to where its head enters ${his} wet lips.`); + } else if (!canAchieveErection(subSlave)) { + t.push(`Since ${slave.slaveName} can't jack off a soft shaft, ${he}'s using one hand to stroke the soft, precum-slick skin below ${subSlave.slaveName}'s anus.`); + } else { + t.push(`{He}'s using one hand to stroke the hard shaft outside ${his} wet lips, using ${his} saliva and ${subSlave.slaveName}'s precum to perform a messy handjob.`); + } } - t.push(`${His} other hand is`); - if (subSlave.scrotum === 0) { - t.push(`massaging the place where ${subSlave.slaveName}'s scrotum used to be.`); - } else if (subSlave.scrotum < slave.balls) { - t.push(`gently massaging ${subSlave.slaveName}'s overfilled scrotum, which ${his2} balls fill to the point of discomfort.`); - } else if (subSlave.scrotum > slave.balls+1) { - t.push(`playing with ${subSlave.slaveName}'s loose scrotum.`); - } else { - t.push(`massaging ${subSlave.slaveName}'s balls.`); + if (hasBothArms(slave)) { + t.push(`${His} other hand is`); + if (subSlave.scrotum === 0) { + if (subSlave.balls > 0) { + if (subSlave.belly > 15000) { + t.push(`pushing against ${his2} belly in an effort to claim a little more room beneath it.`); + } else if (subSlave.belly > 1500 || subSlave.weight > 95) { + t.push(`supporting ${his2} belly to keep it out of the way.`); + } else { + t.push(`massaging ${subSlave.slaveName}'s lower belly where ${hsi2} balls now reside.`); + } + } else { + t.push(`massaging the place where ${subSlave.slaveName}'s scrotum used to be.`); + } + } else if (subSlave.scrotum < subSlave.balls) { + t.push(`gently massaging ${subSlave.slaveName}'s overfilled scrotum, which ${his2} balls fill to the point of discomfort.`); + } else if (subSlave.scrotum > subSlave.balls+1) { + t.push(`playing with ${subSlave.slaveName}'s loose scrotum.`); + } else { + t.push(`massaging ${subSlave.slaveName}'s balls.`); + } } App.Events.addParagraph(node, t); t = []; - t.push(`${subSlave.slaveName} is getting ${his2} dick `); - if (subSlave.lactation === 0) { - t.push(`sucked and ${his2} ass fucked.`); - } else { - t.push(`sucked, ${his2} ass fucked, and ${his2} boobs milked.`); + t.push(`${subSlave.slaveName} is getting`); + let orgasmic = []; + orgasmic.push(`${his2} dick sucked`); + if (doAnal) { + orgasmic.push(`${his2} ass fucked`); + if (doVaginal) { + orgasmic.push(`${his2} pussy teased`); + } + } else if (doVaginal) { + orgasmic.push(`${his2} pussy fucked`); } + if (subSlave.lactation > 0) { + orgasmic.push(`${his2} boobs milked`); + } + t.push(toSentence(orgasmic) + "."); t.push(`${He2}'s so overstimulated that ${he2}'s shaking; a tremendous orgasm is building within ${him2}. ${He2}`); if (subSlave.voice !== 0) { t.push(`groans,`); @@ -176,18 +269,19 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push(`can feel,`); } - t.push(`and ${subSlave.slaveName} tenses, which ${slave.slaveName} feels in ${his} mouth and hands. Smiling around the penis in ${his} mouth, pleased by the approach of a gush of delectable semen, ${slave.slaveName} hums encouragement into ${subSlave.slaveName}'s`); + t.push(`and ${subSlave.slaveName} tenses, which ${slave.slaveName} feels in ${his} mouth${hasAnyArms(slave) ? ` and ${hands}` : ""}. Smiling around the penis in ${his} mouth, pleased by the approach of a gush of delectable semen, ${slave.slaveName} hums encouragement into ${subSlave.slaveName}'s`); if (canAchieveErection(subSlave)) { t.push(`rock-hard`); } else { t.push(`soft`); } - if (subSlave.scrotum) { + if (subSlave.scrotum && subSlave.balls) { t.push(`dickhead and visibly tickles ${subSlave.slaveName}'s balls with ${his} naughty pink tongue`); } else { t.push(`dickhead.`); } + seX(slave, "oral", subSlave, "penetrative"); App.Events.addParagraph(node, t); App.Events.addResponses(node, [ @@ -204,15 +298,15 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App const frag = document.createDocumentFragment(); t = []; - seX(subSlave, "anal", V.PC, "penetrative"); - if (canImpreg(subSlave, V.PC)) { - t.push(knockMeUp(subSlave, 5, 1, -1, true)); - } t.push(`You command the machine to cease`); - if (subSlave.anus < 3 || canDoVaginal(subSlave)) { - t.push(`stimulating and leave ${subSlave.slaveName}'s ass alone for now. ${He2}`); + if (doAnal) { + if (subSlave.anus < 3 || doVaginal) { + t.push(`stimulating and leave ${subSlave.slaveName}'s ass alone for now. ${He2}`); + } else { + t.push(`stimulating, but leave its dildo where it is, for now. ${subSlave.slaveName}`); + } } else { - t.push(`stimulating, but leave its dildo where it is, for now. ${subSlave.slaveName}`); + t.push(`stimulating and retract the dildo. ${subSlave.slaveName}`); } if (subSlave.voice !== 0) { t.push(`moans with frustration,`); @@ -229,7 +323,7 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } t.push(`hands reach around either side of ${subSlave.slaveName}'s torso and seize hold of ${his2}`); } else { - t.push(`hears a pair of hands seize hold of ${subSlave.slaveName}'s`); + t.push(`hears a pair of hands slap against the flesh of ${subSlave.slaveName}'s`); } if (subSlave.lactation === 0) { t.push(`milkless breasts.`); @@ -253,7 +347,7 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App t = []; t.push(`You order ${him} to stay where ${he} is, and go back to sucking dick.`, Spoken(slave, `"Yes, ${getWrittenTitle(slave)},"`), `${he} giggles, and then shuts up as ${his} mouth is occupied once more. ${subSlave.slaveName}, who's been obediently still under you as ${he2} waits for your pleasure, stiffens as ${he2} feels ${his2} dickhead surrounded by warm wetness once more. ${He2}'s got more coming.`); - if (canDoVaginal(subSlave)) { + if (doVaginal && doAnal) { t.push(`${He2}'s got a cock and two fuckholes, so you instruct the machine to go back to stimulating, and adroitly lift ${his2} hips a little so that when the machine reinserts its stimulator, it penetrates ${his2} vagina and fucks that instead. Then you insert your`); if (V.PC.dick) { t.push(`cock`); @@ -266,7 +360,12 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push("pounding."); } - } else if (subSlave.anus > 2) { + seX(subSlave, "anal", V.PC, "penetrative"); + actX(subSlave, "vaginal"); + if (canImpreg(slave, V.PC)) { + t.push(knockMeUp(slave, 5, 1, -1, true)); + } + } else if (subSlave.anus > 2 && doAnal) { t.push(`${His2} ass is so relaxed that your`); if (V.PC.dick) { t.push(`cock`); @@ -279,6 +378,10 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push(`ass.`); } + seX(subSlave, "anal", V.PC, "penetrative"); + if (canImpreg(slave, V.PC)) { + t.push(knockMeUp(slave, 5, 1, -1, true)); + } } else { t.push(`The stimulator is effective enough, but it can't match `); if (V.PC.dick) { @@ -286,7 +389,18 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push(`a strap-on wielded by a consummate master of the art,`); } - t.push(`which is of course what ${subSlave.slaveName} has up ${his2} ass in short order.`); + t.push(`which is of course what ${subSlave.slaveName} has ${doAnal ? `up ${his2} ass` : `hilted in ${him2}`} in short order.`); + if (doAnal) { + seX(subSlave, "anal", V.PC, "penetrative"); + if (canImpreg(slave, V.PC)) { + t.push(knockMeUp(slave, 5, 1, -1, true)); + } + } else { + seX(subSlave, "vaginal", V.PC, "penetrative"); + if (canImpreg(slave, V.PC)) { + t.push(knockMeUp(slave, 5, 0, -1, true)); + } + } } t.push(`${He2} was on the edge of orgasm when you stepped in, and this is just too much. ${He2} climaxes with indecent speed, involuntarily humping against the machine, shooting rope after rope of ${his2} cum into ${slave.slaveName}'s`); if (V.PC.dick) { @@ -298,29 +412,44 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App App.Events.addParagraph(frag, t); t = []; - t.push(`As ${subSlave.slaveName} stumbles off, looking <span class="hotpink">rather submissive,</span> ${slave.slaveName} scoots out from underneath the machine.`); - t.push(Spoken(slave, `"${getWrittenTitle(slave)},"`), `${he} ${say}s <span class="hotpink">devotedly,</span>`, Spoken(slave, `"that ${canTaste(slave) ? `tasted` : "was"} incredible. It ${canTaste(slave) ? `tastes` : "feels"} so much better when you fuck it out of ${him2}!"`)); - t.push(`${He} rubs ${his}`); - if (slave.belly >= 5000) { - t.push(`rounded`); + t.push(`As ${subSlave.slaveName} stumbles off, looking <span class="devotion inc">rather submissive,</span> ${slave.slaveName} scoots out from underneath the machine.`); + t.push(Spoken(slave, `"${getWrittenTitle(slave)},"`), `${he} ${say}s <span class="devotion inc">devotedly,</span>`, Spoken(slave, `"that ${canTaste(slave) ? `tasted` : "was"} incredible. It ${canTaste(slave) ? `tastes` : "feels"} so much better when you fuck it out of ${him2}!"`)); + t.push(`${He}`); + if (hasAnyArms(slave)) { + t.push(`rubs ${his}`); + if (slave.belly >= 5000) { + t.push(`rounded`); + } + } else { + t.push(`puffs out ${his}`); + if (slave.belly >= 5000) { + t.push(`already rounded`); + } } t.push(`tummy with exaggerated satisfaction, and then realizes that you weren't fucking for nearly long enough to have gotten off yourself.`); - if (slave.lactation || slave.balls) { + if ((slave.lactation || slave.balls) && ((canDoVaginal(slave) && slave.vagina > 0) || (canDoAnal(slave) && slave.anus > 0))) { t.push(`"I need to be milked now, too," ${he} ${say}s flirtily, and turns to mount the machine in turn.`, Spoken(slave, `"Please, please do me too!"`), `The machine hasn't had a turn first, this time, so ${he}'s much`); if (V.PC.dick) { t.push(`tighter, and when ${he}'s done being milked, ${he}'s got a load of your cum inside ${him}.`); } else { t.push("tighter."); } - seX(subSlave, "anal", V.PC, "penetrative"); - if (canImpreg(slave, V.PC)) { - t.push(knockMeUp(slave, 5, 1, -1, true)); - } if (slave.lactation > 0) { slave.lactationDuration = 2; slave.boobs -= slave.boobsMilk; slave.boobsMilk = 0; } + if (canDoAnal(slave) && slave.anus > 0) { + seX(subSlave, "anal", V.PC, "penetrative"); + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 1, -1, true)); + } + } else if (canDoVaginal(slave) && slave.vagina > 0) { + seX(subSlave, "vaginal", V.PC, "penetrative"); + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 0, -1, true)); + } + } } else { t.push(Spoken(slave, `"Please, please let me drink yours, too,"`), `${he} moans, and gets down on ${his} knees, opening ${his} mouth and sticking out ${his} tongue, begging for`); if (V.PC.dick) { @@ -333,6 +462,7 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } slave.devotion += 3; subSlave.devotion += 3; + App.Events.addParagraph(frag, t); return frag; @@ -394,15 +524,18 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push(`milk is really flowing,`); } - t.push(`and a thin stream of cream squirts out of ${him2}. It lands on ${slave.slaveName}'s face below, surprising ${him}. ${He} splutters comically, but obeys eagerly when you squeeze ${subSlave.slaveName}'s freed boob and order ${slave.slaveName} to start drinking. After all, you point out, a balanced diet is important. ${slave.slaveName} <span class="mediumaquamarine">giggles complaisantly</span> and reaches for the proffered tit. ${subSlave.slaveName} is still basking in the afterglow of ${his2} orgasm and shudders silently with overstimulation as ${he2} feels ${slave.slaveName}'s lips`); + t.push(`and a thin stream of cream squirts out of ${him2}. It lands on ${slave.slaveName}'s face below, surprising ${him}. ${He} splutters comically, but obeys eagerly when you squeeze ${subSlave.slaveName}'s freed boob and order ${slave.slaveName} to start drinking. After all, you point out, a balanced diet is important. ${slave.slaveName} <span class="trust inc">giggles complaisantly</span> and reaches for the proffered tit. ${subSlave.slaveName} is still basking in the afterglow of ${his2} orgasm and shudders silently with overstimulation as ${he2} feels ${slave.slaveName}'s lips`); if (subSlave.nipples !== "fuckable") { t.push(`latch around`); } else { t.push(`encircle`); } t.push(`${his2} ${subSlave.nipples} nipple.`); - seX(subSlave, "oral", slave, "oral"); - seX(subSlave, "mammary", V.PC, "penetrative"); + if (V.PC.dick) { + seX(subSlave, "oral", V.PC, "penetrative"); + } else { + seX(subSlave, "oral", V.PC, "vaginal"); + } slave.trust += 5; App.Events.addParagraph(frag, t); @@ -424,6 +557,8 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App t.push(`belly`); } t.push(`is.`); + } else if (slave.weight > 95) { + t.push(`a process made much more comical as ${his} plush body wobbles and flops against everything in its way.`); } else if (slave.dick > 4) { t.push(`${his} own`); if (canAchieveErection(slave)) { @@ -437,7 +572,11 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push(`${his} bare buttocks smacking painfully against the floor in ${his} haste.`); } - t.push(`${He} starts to scramble up to a standing position, but ${he} only gets halfway before ${he} notices that there's`); + if (canStand(slave)) { + t.push(`${He} starts to scramble up to a standing position, but ${he} only gets halfway before ${he} notices that there's`); + } else { + t.push(`${He} starts push ${himself} upright, but quickly finds that there's`); + } if (canAchieveErection(subSlave)) { t.push(`another`); } else { @@ -451,12 +590,13 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } t.push(`at ${his} face. Yours.`); App.Events.addParagraph(frag, t); + t = []; t.push(`${slave.slaveName}`); if (slave.trust > 20) { - t.push(`wasn't really worried that ${he} was in trouble; your tone was not angry and ${he} wasn't breaking the rules. Even so, ${he} giggles`); + t.push(`wasn't really worried that ${he} was in trouble; ${canHear(slave) ? "your tone was not" : "you don't seem"} angry and ${he} wasn't breaking the rules. Even so, ${he} giggles`); } else { - t.push(`was worried that ${he} was in trouble; even through your tone wasn't angry, and even though ${he} wasn't breaking the rules, ${he}'s afraid of you. So ${he} giggles with relief`); + t.push(`was worried that ${he} was in trouble; even through ${canHear(slave) ? "your tone wasn't not" : "you don't seem"} angry, and even though ${he} wasn't breaking the rules, ${he}'s afraid of you. So ${he} giggles with relief`); } t.push(`when ${he}`); if (canSee(slave)) { @@ -478,28 +618,52 @@ App.Events.RETSCockmilkInterception = class RETSCockmilkInterception extends App } else { t.push(`centimeters`); } - t.push(`in front of ${his} face.`, Spoken(slave, `"I'm so happy, ${getWrittenTitle(slave)},"`), `${he} purrs.`, Spoken(slave, `"You have the best cum. ${V.PC.balls >= 10 ? "I'll never go hungry with you either." : "."}"`), `${He}'s still right up against ${subSlave.slaveName}, and ${he} reaches back to pat ${subSlave.slaveName}'s butt reassuringly.`); + t.push(`in front of ${his} face.`, Spoken(slave, `"I'm so happy, ${getWrittenTitle(slave)},"`), `${he} purrs.`, Spoken(slave, `"You have the best cum. ${V.PC.balls >= 10 ? "I'll never go hungry with you either." : "."}"`), `${He}'s still right up against ${subSlave.slaveName},`); + if (hasAnyArms(slave)) { + t.push(`and ${he} reaches back to pat ${subSlave.slaveName}'s butt reassuringly.`); + } else { + t.push(`so ${he} leans back and nuzzles ${subSlave.slaveName}'s butt reassuringly.`); + } t.push(Spoken(slave, `"Yours is nice, but there's only one ${getWrittenTitle(slave)}."`), `Then ${he} starts sucking your dick.`); } else { t.push(Spoken(slave, `"Thank you, ${getWrittenTitle(slave)},"`), `${he} ${say}s dutifully.`, Spoken(slave, `"Your, um, your cum is the best.${V.PC.balls >= 10 ? " I'll never go hungry with you either." : ""}"`)); t.push(`Momentarily unsure of ${himself}, ${he} blushes, and decides to take refuge in dicksucking.`); } if (slave.skill.oral > 60) { - t.push(`${He}'s a well-trained cocksucker, and as the suction and ${his} active tongue go to work, ${he} reaches up and`); - if (V.PC.vagina !== -1) { - t.push(`begins to lavish attention on your pussy with both hands. ${He} fingers your labia lovingly before starting to dip ${his} fingers inside you in time with ${his} oral strokes at your shaft.`); + t.push(`${He}'s a well-trained cocksucker, and as the suction and ${his} active tongue go to work,`); + if (hasAnyArms(slave)) { + t.push(`${he} reaches up and`); + if (V.PC.vagina !== -1) { + t.push(`begins to lavish attention on your pussy with both hands. ${He} fingers your labia lovingly before starting to dip ${his} fingers inside you in time with ${his} oral strokes at your shaft.`); + } else { + t.push(`cups your`); + if (V.PC.balls >= 30) { + t.push(`monstrous balls`); + } else if (V.PC.balls >= 14) { + t.push(`hand-filling`); + } else if (V.PC.balls >= 9) { + t.push(`huge`); + } else if (V.PC.balls >= 5) { + t.push(`big`); + } + t.push(`balls lovingly. A testicular massage during a blowjob might not actually increase ejaculation volume, but the care ${he} shows suggests that the hungry slut might believe it does.`); + } } else { - t.push(`cups your`); - if (V.PC.balls >= 30) { - t.push(`monstrous balls`); - } else if (V.PC.balls >= 14) { - t.push(`hand-filling`); - } else if (V.PC.balls >= 9) { - t.push(`huge`); - } else if (V.PC.balls >= 5) { - t.push(`big`); + t.push(`${he} lavishes attention as best ${he} can to your`); + if (V.PC.vagina !== -1) { + t.push(`your pussy without any hands.`); + } else { + if (V.PC.balls >= 30) { + t.push(`monstrous balls`); + } else if (V.PC.balls >= 14) { + t.push(`hand-filling`); + } else if (V.PC.balls >= 9) { + t.push(`huge`); + } else if (V.PC.balls >= 5) { + t.push(`big`); + } + t.push(`balls without any hands. Lovingly teasing your testicles during a blowjob might not actually increase ejaculation volume, but the care ${he} shows suggests that the hungry slut might believe it does.`); } - t.push(`balls lovingly. A testicular massage during a blowjob might not actually increase ejaculation volume, but the care ${he} shows suggests that the hungry slut might believe it does.`); } } else { t.push(`${He}'s not an outstanding oral slave, so after ${he}'s working away reasonably well, you take ${his} head in both hands and fuck ${his} face. Not cruelly, but with comprehensive dominance. ${He} can breathe, but ${he} has to concentrate to do so, letting you rape ${his} throat like a good little bitch.`);