diff --git a/src/events/RE/reHGReplacement.js b/src/events/RE/reHGReplacement.js index 830a49155d828f5068220f88183bc2f1a4964d3e..759e82e67822feab6a690606a66b87f3b05af8cc 100644 --- a/src/events/RE/reHGReplacement.js +++ b/src/events/RE/reHGReplacement.js @@ -58,9 +58,7 @@ App.Events.REHGReplacement = class REHGReplacement extends App.Events.BaseEvent r.push( `During one of ${his2} visits,`, contextualIntro(S.HeadGirl, slave, "DOM"), - `happens to come in for ${his} scheduled inspection. ${He} perches politely on the couch, waiting ${his} turn like a good ${girl}. ${His}`, - App.Desc.eyesColor(slave), - `are watchful, however, and ${he} seems to be paying very close attention to your conversation with your Head Girl.` + `happens to come in for ${his} scheduled inspection. ${He} perches politely on the couch, waiting ${his} turn like a good ${girl}. ${His} ${App.Desc.eyesColor(slave)} are watchful, however, and ${he} seems to be paying very close attention to your conversation with your Head Girl.` ); r.push( diff --git a/src/events/RESS/review/bondedLove.js b/src/events/RESS/review/bondedLove.js new file mode 100644 index 0000000000000000000000000000000000000000..d8bb443d67399a78fcfc7519d09a4c0170d31334 --- /dev/null +++ b/src/events/RESS/review/bondedLove.js @@ -0,0 +1,269 @@ +App.Events.RESSBondedLove = class RESSBondedLove extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + s => s.relationship <= -2, + s => s.trust > 50, + s => s.devotion > 50, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him + } = getPronouns(eventSlave); + const {title: Master} = getEnunciation(eventSlave); + const belly = bellyAdjective(eventSlave); + const children = eventSlave.pregType > 1 ? "children" : "child"; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push( + `Working in your office early in the morning, you can hear the low, human hum of your slaves who work during the daytime busily getting ready for their days. Suddenly, there's motion at your doorway, and`, + contextualIntro(V.PC, eventSlave, "DOM"), + `hurries in. ${He}'s nude, ${his} ${eventSlave.skin} skin glowing with the fresh cleanliness of having just gotten out of the shower. ${He}`, + ); + if (canSee(eventSlave)) { + r.push(`glances at you`); + } else if (canHear(eventSlave)) { + r.push(`listens`); + } else { + r.push(`waits`); + } + r.push(`to see if ${he}'s unwelcome, and seeing no sign that ${he} is, the devoted ${SlaveTitle(eventSlave)} comes over to your desk.`); + if (eventSlave.boobs < 400) { + r.push(`${His} little ${eventSlave.boobShape} tits barely move at all as ${he} walks, though ${his} ${eventSlave.nipples} nipples certainly catch your eye.`); + } else if ((eventSlave.boobsImplant/eventSlave.boobs) >= .75) { // tiny little 200cc implants in 20000cc tits are laughable. Now we make sure those tits are fake. + r.push(`${His} fake tits barely move at all as ${he} walks, their shape maintained by ${his} implants.`); + } else if (eventSlave.boobs < 1000) { + r.push(`${His} lovely ${eventSlave.boobShape} boobs move delightfully as ${he} walks, and ${his} ${eventSlave.nipples} nipples bounce prettily.`); + } else if (eventSlave.boobs < 2500) { + r.push(`${His} heavy, ${eventSlave.boobShape} breasts bounce up and down as ${he} walks, making ${his} ${eventSlave.nipples} nipples dance around distractingly.`); + } else { + r.push(`${His} massive, ${eventSlave.boobShape} udders jiggle alluringly as ${he} walks, and ${his} ${eventSlave.nipples} nipples sway from side to side distractingly.`); + } + r.push(`Your eyes move down ${his} body, noting`); + if (eventSlave.bellyPreg >= 450000) { + r.push(`${his} ${belly} belly,`); + if (eventSlave.pregSource === -1) { + r.push(`practically bursting with your ${children},`); + } + r.push(`and how ${he} struggles to walk with it while keeping all the kicking from throwing ${him} off balance.`); + } else if (eventSlave.belly >= 450000) { + r.push(`${his} ${belly} belly and how the struggles to walk with it without bumping things.`); + } else if (eventSlave.bellyPreg >= 150000) { + r.push(`${his} ${belly} belly,`); + if (eventSlave.pregSource === -1) { + r.push(`completely filled with your ${children},`); + } + r.push(`and the slight movement within with each struggled step ${he} takes.`); + } else if (eventSlave.belly >= 150000) { + r.push(`${his} ${belly} belly and the vastly altered gait ${he} steps with to handle it.`); + } else if (eventSlave.bellyPreg >= 10000) { + r.push(`${his} full-term pregnant belly,`); + if (eventSlave.pregSource === -1) { + r.push(`rounded with your ${children},`); + } else { + r.push(`which`); + } + r.push(`adds a distinct awkwardness to ${his} gait.`); + } else if (eventSlave.bellyFluid >= 10000) { + r.push(`${his} straining ${eventSlave.inflationType}-filled belly and how ${he} struggles to walk normally with it.`); + } else if (eventSlave.bellyImplant >= 10000) { + r.push(`${his} full-term pregnancy-looking belly and how it adds a distinct awkwardness to ${his} gait.`); + } else if (eventSlave.bellyPreg >= 5000) { + r.push(`${his} hugely pregnant belly,`); + if (eventSlave.pregSource === -1) { + r.push(`rounded with your ${children},`); + } else { + r.push(`which`); + } + r.push(`adds a certain unavoidable awkwardness to ${his} gait.`); + } else if (eventSlave.bellyFluid >= 5000) { + r.push(`${his} ${eventSlave.inflationType}-filled belly and the delightful jiggle that runs through it with each step.`); + } else if (eventSlave.bellyImplant >= 5000) { + r.push(`${his} hugely rounded belly and the certain unavoidable awkwardness in ${his} gait it causes.`); + } else if (eventSlave.weight >= 95) { + r.push(`${his} big fat belly and how it sways and jiggles with each step.`); + } else if (eventSlave.bellyPreg >= 1500) { + r.push(`${his} pregnant belly,`); + if (eventSlave.pregSource === -1) { + r.push(`swollen with your ${children},`); + } else { + r.push(`which`); + } + r.push(`isn't truly huge yet, but clearly advertises ${his} status as a breeding ${SlaveTitle(eventSlave)}.`); + } else if (eventSlave.bellyFluid >= 2000) { + r.push(`the slight bloat to ${his} belly caused by the liters of ${eventSlave.inflationType} held inside ${him}.`); + } else if (eventSlave.bellyImplant >= 1500) { + r.push(`${his} slightly rounded belly, not truly noticeable, but enough to advertise ${him} as a breeding ${SlaveTitle(eventSlave)}, even though it's fake.`); + } else if (eventSlave.hips === 3) { + r.push(`${his} extremely wide hips and the cartoonish sway to them as ${he} walks.`); + } else if (eventSlave.muscles > 30) { + r.push(`${his} rippling abs, which work visibly as ${he} walks, flexing and straining powerfully underneath ${his} ${eventSlave.skin} skin.`); + } else if (eventSlave.waist < -95) { + r.push(`${his} cartoonish wasp waist and the way it emphasizes ${his} status as a sex toy.`); + } else if (eventSlave.hips > 0) { + r.push(`${his} wide hips and the sensual sway to them as ${he} walks.`); + } else if (eventSlave.waist < -10) { + r.push(`${his} nice narrow waist and the way it emphasizes the feminine swell of ${his} hips.`); + } else if (eventSlave.weight > 30) { + r.push(`${his} chubby belly and how it jiggles as ${he} walks, ${his} plush fat moving voluptuously with ${him}.`); + } else if (eventSlave.weight > 10) { + r.push(`${his} plush belly and how it jiggles a little as ${he} walks, giving ${him} a soft and sensual appeal.`); + } else { + r.push(`${his} trim belly before looking further down.`); + } + r.push(`Below that,`); + if (eventSlave.dick > 0) { + if (canAchieveErection(eventSlave)) { + r.push(`${his} cock is soft for once, probably from the shower; it`); + } else if (eventSlave.dick > 6) { + r.push(`${his} soft python of a cock`); + } else { + r.push(`${his} soft bitchclit`); + } + if (eventSlave.dick > 4) { + r.push(`flops around lewdly`); + } else if (eventSlave.dick > 2) { + r.push(`bounces around`); + } else { + r.push(`wiggles pathetically`); + } + r.push(`as ${he} moves.`); + } else if (eventSlave.labia > 0) { + r.push(`${his} generous petals, flushed and a little full from the warmth of the shower, offer soft, healthy advertisement of ${his} womanhood.`); + } else if (eventSlave.clit > 0) { + r.push(`${his} prominent clit, flushed and a little full from the warmth of the shower, offers soft testament to ${his} female sexuality.`); + } else if (eventSlave.clitPiercing > 0) { + r.push(`${his} glinting`); + if (eventSlave.dick === 0) { + r.push(`clit`); + } else { + r.push(`dick`); + } + r.push(`piercing catches your eye, just as it's meant to do.`); + } else if (eventSlave.vagina === -1) { + r.push(`the smooth, featureless skin between ${his} legs is a little flushed; the tiny hole in it is barely noticeable.`); + } else { + r.push(`${his} healthy womanhood looks a little flushed from the warmth of the shower.`); + } + r.push(`Coming to a stop, ${he}`); + if (eventSlave.height > 190) { + r.push(`bends the long, long way down necessary to bring`); + } else if (eventSlave.height < 155) { + r.push(`bends the amusingly short way down ${he} needs to bring`); + } else { + r.push(`bends down`); + } + r.push(`to bring ${his}`); + if (eventSlave.lips > 40) { + r.push(`pillowy`); + } else if (eventSlave.lipsPiercing > 0) { + r.push(`pierced`); + } + r.push(`lips next to your ear.`); + + r.toParagraph(); + + if (!canTalk(eventSlave)) { + r.push(`${He} mouths 'I love you, ${getWrittenTitle(eventSlave)},' holding ${his} hands out in front of you both to say it in sign language at the same time.`); + } else { + r.push(`"I love you, ${Master}," ${he} whispers.`); + } + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Tell ${him} ${he}'s a good slave`, good), + new App.Events.Result(`Tell ${him} you love ${him} too`, love), + ]); + + function good() { + const r = new SpacedTextAccumulator(); + r.push(`Without turning your head, you tell ${him} ${he}'s a very good slave. ${He} laughs happily`); + if (canTalk(eventSlave)) { + r.addToLast(`, though of course this is silent,`); + } else { + r.push(`throatily,`); + } + r.push(`${his} warm breath gusting against your ear. It took confidence for ${him} to come in here and tell ${him} ${he} loved you, and ${he} <span class="trust inc">trusts you more</span> for responding this way. ${He} plants a light kiss on your cheek and walks quickly out of your office, hurrying to go about ${his} day's business, but careful to strut ${his} stuff for you on ${his} way out.`); + if (eventSlave.butt < 3) { + r.push(`${His} nice little butt moves cutely as ${he} goes. ${His} small buttocks leave`); + if (!canDoAnal(eventSlave)) { + r.push(`${his} anal chastity visible from the rear as ${he} walks.`); + } else if (eventSlave.analArea > 3) { + r.push(`the huge area of puckered skin around ${his} asspussy clearly visible from the rear, and ${his} asshole works lewdly with the motion.`); + } else if (eventSlave.anus > 1) { + r.push(`${his} asshole visible, the pucker of ${his} backdoor lewdly available.`); + } else { + r.push(`${his} tight anus visible from the rear as ${he} walks.`); + } + } else if (eventSlave.butt < 6) { + r.push(`${His} healthy butt bounces as ${he} goes. ${His} big buttocks mostly conceal`); + if (!canDoAnal(eventSlave)) { + r.push(`${his} anal chastity, but there's the occasional tempting glimpse.`); + } else if (eventSlave.analArea > 3) { + r.push(`the huge area of puckered skin around ${his} asspussy, but ${his} butthole is so well used that it's obvious from the rear that ${he} takes it up the ass. A lot.`); + } else if (eventSlave.anus > 1) { + r.push(`${his} backdoor, but there's the occasional cute glimpse of ${his} experienced anus.`); + } else { + r.push(`what's between them, but there's the occasional cute glimpse of ${his} tight rosebud.`); + } + } else { + r.push(`${His} gigantic ass jiggles as ${he} goes. ${His} enormous buttocks mostly stay together as ${he} moves,`); + if (!canDoAnal(eventSlave)) { + r.push(`completely swallowing ${his} anal chastity.`); + } else if (eventSlave.analArea > 3) { + r.push(`almost concealing the huge area of puckered skin around ${his} lewd asspussy.`); + } else if (eventSlave.anus > 1) { + r.push(`completely concealing ${his} welcoming backdoor.`); + } else { + r.push(`completely concealing ${his} tight asshole.`); + } + } + r.push(`${He} pauses for an instant in the doorway, turns over ${his} shoulder to give you a sexy wink, and is gone.`); + eventSlave.trust += 4; + r.toParagraph(); + return r.container(); + } + + function love() { + const r = new SpacedTextAccumulator(); + r.push(`You turn towards ${him} and direct the full weight of your gaze into ${his} eyes.`); + if (canSee(eventSlave)) { + r.push(`${His} eyelids flicker with the shock of the shared look,`); + } else { + r.push(`${His} eyes may not be capable of sight, but ${he} can feel your gaze,`); + } + r.push(`so close, but ${he} bears it, biting ${his} lower lip. Then you kiss ${him}. The released tension is too much for ${him}, and ${he} moans, slumping against you a little as you kiss ${him} like a lover. ${He}'s so lost in it that when you break the kiss, ${his} mouth stays slightly open and pursues yours slightly, hungry for more. You place a finger against ${his} moist lips, making ${him} wait a moment, and tell ${him} that you love ${him} too. ${He} makes`); + if (eventSlave.voice === 0) { + r.push(`a quiet moaning sound, deep in ${his} useless throat,`); + } else { + r.push(`an almost animal sound, somewhere between a sob and a moan,`); + } + r.push(`and as you withdraw your finger, ${he} kisses you back. ${He} knows ${he} has a job to do today, and it's waiting for ${him}, so when you give ${him} no indication that you'd like ${him} to stay, ${he} withdraws, keeping ${his}`); + if (canSee(eventSlave)) { + r.push(`eyes`); + } else { + r.push(`face`); + } + r.push(`on yours, doing ${his} best to <span class="devotion inc">make love to you</span> with ${his} gaze.`); + eventSlave.devotion += 4; + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/cowMilking.js b/src/events/RESS/review/cowMilking.js new file mode 100644 index 0000000000000000000000000000000000000000..85eae5d9b75d6f7f57a547349e9f08ac70e8c605 --- /dev/null +++ b/src/events/RESS/review/cowMilking.js @@ -0,0 +1,211 @@ +App.Events.RESSCowMilking = class RESSCowMilking extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + canTalk, + s => s.lactation > 0, + s => s.boobs > 800, + s => s.nipples !== "fuckable", + s => s.devotion > 20, + s => s.trust > 20, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him + } = getPronouns(eventSlave); + const {title: Master, say} = getEnunciation(eventSlave); + const belly = bellyAdjective(eventSlave); + const PC = V.PC; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave); + + const r = new SpacedTextAccumulator(node); + r.push( + `Heading back towards your office after seeing to a minor matter, you encounter`, + contextualIntro(PC, eventSlave, "DOM") + ); + r.addToLast(`, heading for the penthouse milkers.`); + if (eventSlave.assignment === "get milked") { + r.push(`Though it's ${his} job to be a human cow, ${he}'s allowed to roam as ${he} pleases when ${he}'s not getting milked, being fed, or otherwise occupied, and ${he} must have been elsewhere.`); + } else { + r.push(`${He}'s not assigned to be a human cow full time, since it's ${his} main focus to ${eventSlave.assignment}, but ${he}'s still obliged to visit the milkers regularly.`); + } + r.push(`In any case, ${he}'s obviously in desperate need of a milking. ${He}'s hurrying along with ${his}`); + if (eventSlave.boobs > 4000) { + r.push(`absurd`); + } else { + r.push(`heavy`); + } + r.push(`udders cradled in both arms, trying desperately to shield them from the uncomfortable motion of walking.`); + r.toParagraph(); + + if (canSee(eventSlave)) { + r.push(`Seeing`); + } else { + r.push(`Noticing`); + } + r.push(`you, ${he} stops short and then winces as ${his} milk-filled breasts slosh to a stop, too.`); + if (!canTalk(eventSlave)) { + r.push(`${He} gestures a submissive greeting and then hesitates, catching ${his} lower lip cutely behind ${his} upper teeth. Then ${he} politely asks if you would milk ${him}.`); + } else { + r.push( + Spoken(eventSlave, `"Hi ${Master},"`), + `${he} ${say}s in greeting, and then hesitates, catching ${his} lower lip cutely behind ${his} upper teeth.`, + Spoken(eventSlave, `"Um, would you please milk me?"`) + ); + } + if (eventSlave.fetish === "boobs") { + r.push(`The shamelessly breast obsessed cow rarely misses an opportunity to ask for mammary intercourse, or anything remotely like it. Something as intimate as having you tug the milk from ${his} nipples would definitely qualify.`); + } else { + r.push(`${He}'s not exactly a breast fetishist, but milking is nonetheless a deeply important activity for ${him}, emotionally; the neurochemical effects of continual lactation are strong. ${He}'s so devoted to you that ${he} probably considers this a reassuringly intimate act.`); + } + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Treat ${him} right`, right), + new App.Events.Result(`Treat ${him} like a cow`, cow, virginityWarning()) + ]); + + function right() { + const r = new SpacedTextAccumulator(); + r.push(`You give ${him} a reassuring swat across the rump and tell ${him} you'd be happy to. You head toward the utility area with the milkers, and ${he} follows eagerly behind you,`); + if (eventSlave.fetish === "boobs") { + r.push(`very ready to have you touch ${his} favorite part of ${his} body.`); + } else { + r.push(`pleased you'd do this for ${him} and very ready to relieve the pressure in ${his} tits.`); + } + r.push(`To ${his} surprise, you seat yourself on a stool and draw ${him} onto your lap rather than sitting ${him} at a milking machine. Reaching behind yourself, you give the ${SlaveTitle(eventSlave)} on your lap a broad bucket, and tell ${him} to hold it`); + if (eventSlave.belly >= 5000) { + r.push(`under ${his} breasts as best ${he} can, given ${his}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnant`); + } else { + r.push(belly); + } + r.push(`belly.`); + } else { + r.push(`on ${his} lap.`); + } + r.push(`Then you reach around ${him} and take ${his}`); + if (eventSlave.boobs > 6000) { + r.push(`gargantuan`); + } else if (eventSlave.boobs > 2000) { + r.push(`huge`); + } else { + r.push(`heavy`); + } + r.push(`udders in your hands. ${He} gasps as ${he} realizes exactly how you plan to do this, and adjusts the bucket so it's below both of ${his} nipples at once.`); + r.toParagraph(); + + r.push(`${He} instinctually expects the rhythmic tugging that the milkers usually produce, but what ${he} gets is a methodical massage of ${his} breasts, both at once. They're large enough to be more than a single handful, so you go bit by bit, ensuring that no part of ${his} udders goes untouched. ${His} nipples start to gush milk without help after a few moments of this, and ${he} groans with relief and satisfaction as ${he} feels ${his} breasts begin to empty and enjoys the sensation of the massage.`); + if (eventSlave.fetish === "boobs") { + r.push(`${He} orgasms strongly soon after the first jet of milk, producing an especially thick squirt.`); + } + r.push(`After you're satisfied, you move your hands to ${his} nipples and milk ${him} like a cow, getting the last drops of milk out of ${him}`); + if (eventSlave.fetish === "boobs") { + r.push(`and producing a shuddering series of aftershocks.`); + } else { + r.push(`and bringing ${him} to a surprise orgasm.`); + } + r.push(`When ${he}'s done, ${he} leans back into you for a moment before setting the milk bucket down, a wordless gesture of <span class="trust inc">considerable trust.</span> It means a lot to ${him} that you would milk ${him} yourself.`); + eventSlave.trust += 4; + seX(eventSlave, "mammary", V.PC, "penetrative"); + eventSlave.lactationDuration = 2; + eventSlave.boobs -= eventSlave.boobsMilk; + eventSlave.boobsMilk = 0; + r.toParagraph(); + return r.container(); + } + + function cow() { + const hands = hasBothArms(eventSlave) ? "hands" : "hand"; + const r = new SpacedTextAccumulator(); + r.push(`You ask ${him} if ${he} really wants to be treated like a cow. ${He} nods, a bit hesitantly, sensing a certain danger but not really knowing what else to do. You lead ${him} to the utility area of the penthouse, where the milkers are, but stop ${him} when ${he} starts for one. Instead, you`); + if (eventSlave.belly >= 300000) { + r.push(`pull ${him} over ${his} ${belly} belly with ${his} udders hanging beneath ${his}`); + if (eventSlave.boobs > 5000) { + r.addToLast(`, the twin masses of female flesh almost reaching the floor`); + } + r.addToLast(`.`); + } else { + r.push(`fetch a pair of low stools, make ${him} kneel on one, and put ${his} ${hands} on the other, so ${he}'s`); + if (hasAllLimbs(eventSlave)) { + r.push(`on all fours`); + } else { + r.push(`bent over`); + } + r.push(`with ${his} udders hanging beneath ${him}`); + if (eventSlave.boobs > 5000) { + r.addToLast(`, the twin masses of female flesh almost reaching the floor`); + } + r.addToLast(`.`); + } + r.toParagraph(); + + r.push(`You swing a bucket under ${his} nipples and milk ${him} by hand, as though ${he} were a cow. This isn't exactly what ${he} had in mind, but the feeling of your hands on ${his} nipples, tugging the streams of milk out of ${him} and into the bucket beneath`); + if (eventSlave.fetish === "boobs") { + r.push(`brings ${him} very close to orgasm.`); + } else { + r.push(`eventually relaxes ${him}.`); + } + r.push(`Seeing this, you muse aloud, as though to yourself, that a little farmyard bestiality wouldn't hurt, since there's no one here but you and a dairy cow. Pawing the cow's behind possessively, you finger ${him} aggressively before deciding on`); + if (canDoVaginal(eventSlave) && V.PC.dick !== 0) { + r.push(`a little cow pussy. You walk around behind ${him} and fuck ${him} hard enough to shake the drops of milk still clinging to ${his} sore nipples down and into the bucket below.`); + r.push(VCheck.Vaginal(eventSlave, 1)); + r.push(`When you're finished, you step away, leaving your cum to run out of ${his} cunt and down ${his} thighs,`); + } else if (canDoAnal(eventSlave) && V.PC.dick !== 0) { + r.push(`some cow ass. You walk around behind ${him} and buttfuck ${his} hard enough to shake the drops of milk still clinging to ${his} sore nipples down and into the bucket below.`); + r.push(VCheck.Anal(eventSlave, 1)); + r.push(`When you're finished, you step away, leaving your cum to drip out of ${his} gaped asshole,`); + } else { + r.push(`a little cow tongue action.`); + if (V.PC.vagina !== -1) { + r.push(`You stand up and grind your pussy against the cow's upturned mouth, humping ${his} face hard enough to shake the drops of milk still clinging to ${his} sore nipples down and into the bucket below.`); + if (V.PC.dick !== 0) { + r.push(`You pull away when you're about halfway there, only to shove your cock down ${his} throat instead.`); + } + r.push(`When you're finished, you step away, leaving ${his} face thoroughly coated in girlcum`); + if (V.PC.dick !== 0) { + r.push(`and ${his} mouth full of your load`); + } + r.addToLast(`,`); + } else { // do nothing + } + seX(eventSlave, "oral", V.PC, "penetrative"); + } + r.push(`and ask ${him} what cows say. "Um, moo?" ${he} responds in a small,`); + r.push(`<span class="devotion inc">submissive</span> voice.`); + eventSlave.devotion += 4; + seX(eventSlave, "mammary", V.PC, "penetrative"); + eventSlave.lactationDuration = 2; + eventSlave.boobs -= eventSlave.boobsMilk; + eventSlave.boobsMilk = 0; + r.toParagraph(); + return r.container(); + } + + function virginityWarning() { + if (V.PC.dick !== 0) { + if (canDoVaginal(eventSlave) && (eventSlave.vagina === 0)) { + return `This option will take ${his} virginity`; + } else if (!canDoVaginal(eventSlave) && canDoAnal(eventSlave) && (eventSlave.anus === 0)) { + return `This option will take ${his} anal virginity`; + } + } + } + } +}; diff --git a/src/events/RESS/review/fucktoyTribbing.js b/src/events/RESS/review/fucktoyTribbing.js new file mode 100644 index 0000000000000000000000000000000000000000..07a305483c4356fe694d55a508fd0587741abb3a --- /dev/null +++ b/src/events/RESS/review/fucktoyTribbing.js @@ -0,0 +1,216 @@ +App.Events.RESSFucktoyTribbing = class RESSFucktoyTribbing extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => fuckSlavesLength() > 2, + () => V.PC.vagina > -1, + ]; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + canTalk, + s => [Job.CONCUBINE, Job.FUCKTOY, Job.MASTERSUITE].includes(s.assignment), + s => s.devotion > 20, + s => s.trust >= -20, + s => canDoAnal(s) || canDoVaginal(s), + canDoVaginal, + s => s.dick === 0, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + He, he, his, him, himself, hers, girl, woman + } = getPronouns(eventSlave); + const belly = bellyAdjective(eventSlave); + const {hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U"); + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push(`With a mind as busy as yours, you sometimes wake up in the middle of the night for no reason that you can remember.`); + if (V.PC.actualAge >= 50) { + r.push(`These incidents have become more common as you age; merely one of time's little mutilations.`); + } + r.push(`Naturally, waking up in the middle of the night feels much different than it did back before you owned an arcology. Now you have your choice from a virtual buffet of sleeping slaves if you don't feel like going back to sleep right away.`); + r.toParagraph(); + + r.push(`The slave on your left is sleeping on ${hisU} back, and is touching you lightly at the hip and shoulder. The slave on your right, though, is nestled in close, ${his} shoulder under your arm and ${his} head resting gently on your`); + if (V.PC.boobs >= 1400) { + r.push(`enormous`); + if (V.PC.boobsImplant > 0) { + r.push(`firm`); + } else { + r.push(`pillowy`); + } + r.push(`breast.`); + } else if (V.PC.boobs >= 1200) { + r.push(`huge`); + if (V.PC.boobsImplant > 0) { + r.push(`firm`); + } else { + r.push(`pillowy`); + } + r.push(`breast.`); + } else if (V.PC.boobs >= 1000) { + r.push(`big`); + if (V.PC.boobsImplant > 0) { + r.push(`firm`); + } else { + r.push(`soft`); + } + r.push(`breast.`); + } else if (V.PC.boobs >= 300) { + r.push(`bare breast.`); + } else if (V.PC.title === 0) { + r.push(`flat chest.`); + } else { + r.push(`toned chest.`); + } + r.push(`${He}'s straddling your leg on that side, and as your waking consciousness coalesces, you become more and more aware`); + if (eventSlave.belly >= 10000) { + r.push(`of the weight of ${his} ${belly}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnancy`); + } else { + r.push(`stomach`); + } + r.push(`on your`); + if (V.PC.belly >= 5000) { + r.push(`own gravid`); + } + r.push(`middle and`); + } + r.push(`that ${his} mons is pressed against your thigh. ${He} has one leg thrown over yours in ${his} sleeping embrace, placing ${his} own`); + if (eventSlave.muscles > 30) { + r.push(`muscular`); + } else if (eventSlave.weight > 10) { + r.push(`plush`); + } else { + r.push(`feminine`); + } + r.push( + `thigh against your womanhood in turn. It's`, + contextualIntro(V.PC, eventSlave, "DOM") + ); + r.addToLast(`, and you feel yourself begin to grow wet as you gaze at ${him} in the dim light and feel ${his} slumbering heat.`); + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Make love to ${him}`, love), + new App.Events.Result(`Fuck ${him}`, fuck), + ]); + + function love() { + const r = new SpacedTextAccumulator(); + r.push(`You crane your neck down and kiss ${him} on the lips. ${He} awakens slowly, gently, ${his} ${App.Desc.eyesColor(eventSlave)} fluttering open, looking black in the nighttime gloom. ${He} smiles into your mouth, and you feel ${his} pulse quicken through the extensive contact down your bodies. You interlace your fingers between ${hers} and turn, pressing ${him} back down into the soft sheets. ${He} opens ${himself} for you, spreading ${his} legs wide and embracing you with them, making sure to run ${his} heels up the backs of your calves in a way that sends a shiver up your spine. Feeling this through your kissing mouths, ${he} smiles into you, a pleased expression ${he} maintains as you`); + if (eventSlave.belly >= 300000 && V.PC.belly >= 5000) { + r.push(`struggle to find a position to handle both your pregnancy and ${his}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`${belly} gravid middle`); + } else { + r.push(`${belly} belly`); + } + r.push(`and`); + } else if (eventSlave.belly >= 300000) { + r.push(`struggle to find a position to handle ${his} ${belly}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnancy`); + } else { + r.push(`${belly} belly`); + } + r.push(`and`); + } else if (eventSlave.belly >= 5000 && V.PC.belly >= 5000) { + r.push(`shift into a position to better accommodate both your pregnancy and ${his}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`${belly} gravid middle`); + } else { + r.push(`${belly} belly`); + } + r.push(`and`); + } else if (V.PC.belly >= 5000) { + r.push(`shift into a position to better accommodate your pregnancy and`); + } else if (eventSlave.belly >= 5000) { + r.push(`shift into a position to better accommodate ${his}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnancy`); + } else { + r.push(`${belly} belly`); + } + r.push(`and`); + } + r.push(`begin to gently press your womanhood against ${hers}.`); + r.toParagraph(); + + if (eventSlave.fetishKnown === 0) { + r.push(`Knowing little about ${his} sexual peccadilloes, but confident that ${he}'ll do ${his} best to enjoy your lovemaking, you continue this shockingly intimate intercourse until ${he} climaxes.`); + } else if (eventSlave.fetish === "none") { + r.push(`Knowing ${him} to be quite endearingly vanilla, you continue this shockingly intimate intercourse until ${he} climaxes, kissing ${him} all the way through your soft missionary lovemaking.`); + } else if (eventSlave.fetish === "buttslut") { + r.push(`Knowing ${his} tastes and wanting the intimacy of mutual pleasure, you slide a hand around behind and under ${him} so you can tease ${his} ass. ${He} gives ${his} butt a little wiggle of thanks, and orgasms promptly.`); + seX(eventSlave, "anal", V.PC, "penetrative"); + } else if (eventSlave.fetish === "cumslut") { + r.push(`Knowing ${his} tastes and wanting the intimacy of mutual pleasure, you slide your tongue into ${his} mouth, making your kisses so frankly sexual and penetrative that you're practically making oral love at the same time as you do it missionary style.`); + } else if (eventSlave.fetish === "sadist") { + r.push(`You know ${his} tastes, but by the act of this intimate missionary lovemaking, you wordlessly command ${him} to join you for more conventional pleasures, if only for the moment. ${He} complies with pleasure, climaxing with surprising speed; perhaps ${he} appreciates the change.`); + } else if (eventSlave.fetish === "masochist") { + r.push(`Knowing ${his} tastes and wanting the intimacy of mutual pleasure, you nip ${his} lower lip in your teeth with each kiss, and rake your nails across ${his} flanks just hard enough to hurt a little. ${He} climaxes quickly to the mixed pain and missionary intimacy.`); + } else if (eventSlave.fetish === "dom") { + r.push(`You know ${his} tastes, but by the act of this intimate missionary lovemaking, you wordlessly command ${him} to join you for more equal pleasures, if only for the moment. ${He} complies with something like relief, climaxing with surprising speed; perhaps ${he} appreciates a turn on the bottom.`); + } else if (eventSlave.fetish === "submissive") { + r.push(`Being on the bottom for some missionary lovemaking is very much to ${his} tastes, and ${he} rises to the point of climax with almost indecent speed. You slow your pace to nothing more than a gentle pressure now and then, and keep ${him} on the edge of orgasm for a long time.`); + } else if (eventSlave.fetish === "boobs") { + r.push(`Knowing ${his} tastes and wanting the intimacy of mutual pleasure, you make sure your nipples line up`); + if (eventSlave.nipples === "fuckable") { + r.push(`and interlock`); + } + r.push(`with ${hers} as best you can. You note the buck of pleasure this produces each time you get it perfectly right as you make love to ${him}.`); + } else if (eventSlave.fetish === "pregnancy" && eventSlave.pregKnown === 1) { + r.push(`Being on the bottom for some missionary lovemaking is very much to ${his} tastes, even though ${he} is already pregnant. ${He} builds to orgasm slowly, reveling in the feeling of being your ${woman}.`); + } else if (eventSlave.fetish === "pregnancy") { + r.push(`Being on the bottom for some missionary lovemaking is very much to ${his} tastes, even though the encounter isn't particularly likely to get ${him} pregnant. ${He} builds to orgasm slowly, reveling in the feeling of being your ${woman}.`); + } + if (canFemImpreg(V.PC, eventSlave)) { + r.push(knockMeUp(V.PC, 5, 0, eventSlave.ID)); + } + r.push(`As you made love to ${him}, the gentle motions, feminine sighs, and delicate aroma of pleasure woke the other slaves in bed with you, and they began their own intimacy with each other. As you go back to sleep, you're surrounded with something very like Sapphic paradise. ${eventSlave.slaveName} nestles up to you once more, embracing you with <span class="trust inc">trust born of love.</span>`); + eventSlave.trust += 4; + seX(eventSlave, "vaginal", V.PC, "penetrative"); + r.toParagraph(); + return r.container(); + } + + function fuck() { + const r = new SpacedTextAccumulator(); + r.push(`You feel your libido building, building, building within you, an endless cycle that mounts rapidly to an inevitable explosion. It comes, and you perform a catlike glide around until your head is at ${his} feet. As you did, you infiltrated one of your legs between ${hers} from its convenient starting point. ${He} wakes suddenly to the feeling of being manhandled, and then comes fully awake to the shockingly intimate sensation of your pussies pressed together as closely as physically possible.`); + r.toParagraph(); + + r.push(`Holding ${his} upper thighs with your hands to pull ${him} against you, you grind into ${him}, fucking ${him} about as comprehensively as it's possible for someone without a cock to fuck a ${woman}. ${He}'s most definitely up for it, and you see ${his} eyes fly wide in the gloom as the full weight of the pleasure crashes into ${him}. It's not exactly a position for lovemaking, since your faces are about as far apart as they can possibly be during sex, but kissing be damned, you're here to fuck. Naturally, this evolution wakes everyone else up too, and before long, there's a regular lesbian orgy going on. When it's over, ${eventSlave.slaveName} finds ${himself} returning exhaustedly to sleep, one of your arms curled`); + if (eventSlave.belly >= 5000) { + r.push(`under ${his} ${belly}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnancy`); + } else { + r.push(`belly`); + } + } else { + r.push(`around ${his} middle`); + } + r.push(`to cup ${his} pussy possessively. ${He} finds that <span class="devotion inc">${he} doesn't mind.</span> ${He}'s your ${girl}.`); + eventSlave.devotion += 4; + seX(eventSlave, "vaginal", V.PC, "penetrative"); + if (canFemImpreg(V.PC, eventSlave)) { + r.push(knockMeUp(V.PC, 5, 0, eventSlave.ID)); + } + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/gaggedSlave.js b/src/events/RESS/review/gaggedSlave.js index 5cee78577bfa260c9f84ad16e9b4d42d44a7b9fb..e1a29a198bc84dc60bfd058f86978bbe7157b9a1 100644 --- a/src/events/RESS/review/gaggedSlave.js +++ b/src/events/RESS/review/gaggedSlave.js @@ -67,7 +67,7 @@ App.Events.RESSGaggedSlave = class RESSGaggedSlave extends App.Events.BaseEvent } r.push(`From ${his} new position beneath you, ${he} must crane ${his} neck so ${his}`); if (canSee(eventSlave)) { - App.Desc.eyesColor(eventSlave); + r.push(App.Desc.eyesColor(eventSlave)); } else { r.push(`sightless eyes`); } diff --git a/src/events/RESS/review/happyDance.js b/src/events/RESS/review/happyDance.js new file mode 100644 index 0000000000000000000000000000000000000000..9ce8d382b0e327f0a523641414888baa0da5cf70 --- /dev/null +++ b/src/events/RESS/review/happyDance.js @@ -0,0 +1,288 @@ +App.Events.RESSHappyDance = class RESSHappyDance extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + canTalk, + canHear, + s => s.assignment !== Job.QUARTER, + s => s.skill.entertainment >= 60 || ["a ballerina", "a camgirl", "a camwhore", "a cheerleader", "a classical dancer", "a dancer", "a house DJ", "a party girl", "an aspiring pop star", "an exotic dancer", "an idol"].includes(s.career), + + s => s.health.condition > 40, + s => s.devotion > 50, + s => s.trust > 50, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him, himself, hers + } = getPronouns(eventSlave); + const belly = bellyAdjective(eventSlave); + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push(`As you pass by the area of the penthouse where slaves sleep one morning, you're struck by a`); + if (eventSlave.voice > 2) { + r.push(`high, bubbly`); + } else if (eventSlave.voice > 1) { + r.push(`feminine`); + } else { + r.push(`deep`); + } + r.push( + `humming. It's`, + contextualIntro(V.PC, eventSlave, "DOM") + ); + r.addToLast(`, dancing`); + if (eventSlave.rules.living === "luxurious") { + r.push(`in the doorway of ${his} room,`); + } else { + r.push(`at the foot of ${his} bedroll,`); + } + r.push(`dancing like no one's watching. ${He}'s just woken up, and`); + if (eventSlave.physicalAge > 35) { + r.push(`is full of energy and vigor in open defiance of ${his} age`); + } else if (eventSlave.physicalAge < 25) { + r.push(`is full of youthful energy and vigor`); + } else { + r.push(`is full of health and energy`); + } + if (eventSlave.belly >= 10000) { + r.addToLast(`, despite being`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`heavily pregnant`); + } else if (eventSlave.bellyImplant >= 3000) { + r.push(`heavily gravid`); + } else { + r.push(`greatly bloated`); + } + } + r.addToLast(`. ${He}'s letting it out by humming a beat and dancing seductively, all by ${himself}.`); + + r.toParagraph(); + + r.push(`You recognize the tune: it's one of`); + if (S.DJ) { + r.push(`${S.DJ.slaveName}'s most popular tracks,`); + } else if (V.club !== 0) { + r.push(`the most popular tracks in ${V.clubName},`); + } else { + r.push(`the most popular house tracks in the Free City,`); + } + r.push(`and it's made for sexy dancing. Shaking ${his},`); + if (eventSlave.hips > 2) { + if (eventSlave.weight > 30) { + r.push(`awe inspiring, soft`); + } else if (eventSlave.weight >= -10) { + r.push(`awe inspiring`); + } else { + r.push(`awe inspiring yet skinny`); + } + } else if (eventSlave.hips > 0) { + if (eventSlave.weight > 30) { + r.push(`broad, chubby`); + } else if (eventSlave.weight >= -10) { + r.push(`broad`); + } else { + r.push(`broad yet skinny`); + } + } else if (eventSlave.hips === 0) { + if (eventSlave.weight > 30) { + r.push(`chubby`); + } else if (eventSlave.weight >= -10) { + r.push(`feminine`); + } else { + r.push(`skinny`); + } + } else { + if (eventSlave.weight > 30) { + r.push(`narrow, chubby`); + } else if (eventSlave.weight >= -10) { + r.push(`narrow`); + } else { + r.push(`narrow and skinny`); + } + } + r.push(`hips`); + if (eventSlave.belly >= 5000) { + if (eventSlave.bellyPreg >= 3000) { + r.push(`and ${belly} baby bump`); + } else if (eventSlave.bellyImplant >= 3000) { + r.push(`and ${belly} round belly`); + } else { + r.push(`and ${eventSlave.inflationType}-filled belly`); + } + } + r.push(`in time with ${his} humming, ${he} runs ${his}`); + if (hasBothArms(eventSlave)) { + r.push(`hands`); + } else { + r.push(`hand`); + } + r.push(`sensually over them, along ${his} flanks, and over ${his} chest,`); + if (eventSlave.boobs > 3000) { + r.push(`letting the vast mass of ${his} tits rest atop them`); + } else if (eventSlave.boobs > 1000) { + r.push(`groping ${his} own heavy breasts`); + } else { + r.push(`${his} fingertips circling ${his} nipples`); + } + r.push(`for an alluring moment. As ${his} hips maintain their sexual rhythm, ${his} hands continue, tracing up ${his} throat, over ${his} moist lips, and over ${his} head. As ${he} stretches up, ${his} torso begins to sway with the barely perceptible beat, ${his}`); + if (eventSlave.boobsImplant/eventSlave.boobs >= .75) { + r.push(`fake tits staying perfectly in place.`); + } else if (eventSlave.boobs > 2000) { + r.push(`${eventSlave.boobShape} boobs swaying along.`); + } else if (eventSlave.boobs > 400) { + r.push(`${eventSlave.boobShape} tits bouncing along.`); + } else { + r.push(`petite chest accentuating ${his} gamine charm.`); + } + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Enjoy the show`, enjoy), + new App.Events.Result(`Dance along with ${him}`, dance) + ]); + + function enjoy() { + const r = new SpacedTextAccumulator(); + r.push(`There are low leather ottomans scattered all over the penthouse, for rest, relaxation, and sex. You seat yourself on the nearest one, enjoying the spectacle. ${He} feels your eyes on ${him}, a sensation ${he} knows well, and turns with a little smile on ${his} ${eventSlave.faceShape} face, putting an extra swing in ${his} hips`); + if (eventSlave.belly >= 5000) { + r.addToLast(`, causing ${his} weighty middle to swing wide`); + } + r.addToLast(`. ${He}'s still dancing alone, but now ${he}'s giving you a private show. You give ${him} the proper music, instructing ${V.assistant.name} to play the track ${he} was humming.`); + r.toParagraph(); + r.push(`${He} advances on you slowly, sensually, relishing the beat and doing ${his} best to show off ${his} body.`); + if (eventSlave.dick > 0) { + r.push(`${His}`); + if (eventSlave.chastityPenis === 1) { + r.push(`chastity cage sways`); + } else if (canAchieveErection(eventSlave)) { + r.push(`erection waves back and forth`); + } else if (eventSlave.dick > 6) { + r.push(`soft python of a cock swings lewdly`); + } else { + r.push(`bitchclit bounces`); + } + r.push(`with ${his} rhythm.`); + } + if (eventSlave.vagina > -1) { + r.push(`${His}`); + if (eventSlave.chastityVagina) { // FIXME + } else if (eventSlave.clit > 1) { + r.push(`chastity catches your eye`); + } else if (eventSlave.labia > 0) { + r.push(`generous petals catch your eye`); + } else if (eventSlave.vaginaLube > 1) { + r.push(`wet cunt glistens`); + } else { + r.push(`womanhood is ${his} center`); + } + r.push(`as ${he} moves.`); + } + r.push(`${He} gives you an excellent nude lap dance, expressing the art at the level only the finest old world strippers can manage. The interaction is all about you, your eyes on ${his} body, your desire for ${his} touch, and finally your`); + if (V.PC.dick !== 0) { + r.push(`cum flowing into ${his} mouth as ${he} sucks your dick`); + if (V.PC.vagina !== -1) { + r.push(`and the wetness against ${his} fingers as they tease your pussy`); + } + } else { + r.push(`pussyjuice coating ${his} lips as ${he} eats you out`); + } + r.addToLast(`. ${He} <span class="trust inc">knows ${his} place</span> very well.`); + eventSlave.trust += 4; + seX(eventSlave, "oral", V.PC, "penetrative"); + r.toParagraph(); + return r.container(); + } + + function dance() { + const r = new SpacedTextAccumulator(); + r.push(`${He} doesn't`); + if (canSee(eventSlave)) { + r.push(`see`); + } else { + r.push(`notice`); + } + r.push(`you advance on ${him}; ${he}'s facing away from you, and in any case, ${he}'s lost in ${his} own little world. At the same moment, however, ${he} begins to hear the track you're humming, in perfect synchrony with the way ${he}'s humming it, and senses a presence at ${his} side. You timed it perfectly, directing the sound system here to play the right track, match it to ${him}, and fade it in as you approached and began to dance beside ${him}.`); + if (V.PC.title === 0) { + r.push(`You've got a woman's body, and you match ${his} moves, though an observer might see greater power and dominance in the way you dance.`); + } else { + r.push(`You make your moves the masculine companion to ${hers}, moving like a paragon of frank male`); + if (V.PC.belly >= 1500) { + r.push(`sexuality, despite the fecund curve to your stomach.`); + } else if (V.PC.boobs >= 300) { + r.push(`sexuality, despite the pair of breasts bouncing on your chest.`); + } else { + r.push(`sexuality.`); + } + } + r.toParagraph(); + r.push(`There's a momentary flaw in ${his} rhythm, a catch in ${his} breath as ${he} realizes what you're doing, but ${he} gets right back into it, displaying ${his} pleasure with nothing more than a ghost of a smile`); + if (canSee(eventSlave) || canHear(eventSlave)) { + r.push(`and a`); + if (canSee(eventSlave)) { + r.push(`widening of ${his}`); + if (hasBothEyes(eventSlave)) { + r.push(`eyes`); + } else { + r.push(`eye`); + } + r.push(`as ${he} looks you up and down`); + } else { + r.push(`slight perk of ${his} ears as ${he} tracks your motion`); + } + } + r.addToLast(`. ${He} doesn't shove ${himself} against you; that would be coarse. Instead ${he} dances alluringly, just out of your grasp. Taking the dominant role, you encircle ${him} in your arms and draw ${him} in close, ${his} heat perceptible against your skin before the very first graze of ${his} ${eventSlave.skin} body against yours. ${He} continues to dance gorgeously as ${he} helps you out of your clothes.`); + r.toParagraph(); + r.push(`When you're nude, ${he} turns ${his} back to you and starts to grind, letting you feel ${his}`); + if (eventSlave.weight > 160) { + r.push(`rippling`); + } else if (eventSlave.weight > 95) { + r.push(`thick`); + } else if (eventSlave.weight > 30) { + r.push(`chubby`); + } else if (eventSlave.muscles > 95) { + r.push(`ripped`); + } else if (eventSlave.muscles > 30) { + r.push(`muscled`); + } else if (eventSlave.weight > 10) { + r.push(`plush`); + } else if (eventSlave.muscles > 5) { + r.push(`toned`); + } else if (eventSlave.weight < -10) { + r.push(`thin`); + } else { + r.push(`soft`); + } + r.push(`body all up and down your front. Feeling your`); + if (V.PC.dick === 0) { + r.push(`building heat, ${he} begins to incorporate gentle caresses of your womanhood,`); + } else { + r.push(`erection brushing against ${him}, ${he} begins to corral it between ${his} buttocks and thighs,`); + } + r.push(`and you return the favor by teasing ${his} nipples`); + if (canDoVaginal(eventSlave)) { + r.addToLast(`, pussylips, clit,`); + } + r.push(`and even ${his} ass. You orgasm one after the other, and as the music fades, ${he} <span class="devotion inc">throws ${his} arms around you.</span>`); + eventSlave.devotion += 4; + seX(eventSlave, "oral", V.PC, "penetrative"); + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/ignorantHorny.js b/src/events/RESS/review/ignorantHorny.js index 7065723251087f820b95556a612d91b8081d65a5..72fdb761a0ecf107f95f081d66b4c5b3b8af0e22 100644 --- a/src/events/RESS/review/ignorantHorny.js +++ b/src/events/RESS/review/ignorantHorny.js @@ -490,8 +490,7 @@ App.Events.RESSIgnorantHorny = class RESSIgnorantHorny extends App.Events.BaseEv r = []; r.push(`${He} seems a little too focused on ${his} hot cunt. You order ${him} to get up on your desk, and ${he} obeys eagerly, ${his}`); if (canSee(eventSlave)) { - App.Desc.eyesColor(eventSlave); - r.push(`shining`); + r.push(`${App.Desc.eyesColor(eventSlave)} shining`); } else { r.push(`facial expression filled`); } diff --git a/src/events/RESS/review/millenary.js b/src/events/RESS/review/millenary.js index c2a9f0321a24bbb7d7f5c556e1e79d4a204a5130..06cc93e6938c4b0c56e8800acc3104d81ddb7fb3 100644 --- a/src/events/RESS/review/millenary.js +++ b/src/events/RESS/review/millenary.js @@ -178,8 +178,7 @@ App.Events.RESSMillenary = class RESSMillenary extends App.Events.BaseEvent { } r.push(`for the benefit of the other slaves, and ${he} stands a little straighter. ${His}`); if (canSee(slave)) { - App.Desc.eyesColor(slave); - r.push(`glitter`); + r.push(`${App.Desc.eyesColor(slave)} glitter`); } else { r.push(`face beams`); } diff --git a/src/events/RESS/review/orchiectomyPlease.js b/src/events/RESS/review/orchiectomyPlease.js new file mode 100644 index 0000000000000000000000000000000000000000..93c495c922067fac76368fd0222beb4639342c0b --- /dev/null +++ b/src/events/RESS/review/orchiectomyPlease.js @@ -0,0 +1,233 @@ +App.Events.RESSOrchiectomyPlease = class RESSOrchiectomyPlease extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.hormoneUpgradeMood === 0, + ]; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + s => s.assignment !== Job.QUARTER, + s => s.balls > 0, + s => s.hormoneBalance >= 100, + s => s.trust >= -50, + s => s.devotion >= -20, + s => s.devotion <= 50, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + He, he, his, him, himself, girl + } = getPronouns(eventSlave); + const {title: Master, say} = getEnunciation(eventSlave); + const PC = V.PC; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push( + `Near the end of`, + contextualIntro(PC, eventSlave, "DOM") + ); + r.addToLast(`'s weekly inspection, it's obvious the ${SlaveTitle(eventSlave)} is nerving ${himself} to ask you something.`); + if (eventSlave.devotion > 20) { + r.push(`${He}'s been good recently,`); + } else { + r.push(`${He} went through the nude inspection obediently,`); + } + r.push(`so you save ${him} further torment and order ${him} to ask ${his} question. It's a command, but you issue it in a tone meant to assuage ${his} nervousness. It works, and after two false starts, ${he} gathers ${his} courage and politely asks you to cut ${his} balls off.`); + r.toParagraph(); + r.push(`${He} doesn't phrase it quite like that, of course.`); + if (!canTalk(eventSlave)) { + r.push(`${He} uses careful gestures to explain ${himself} in detail. ${He} expresses acceptance of ${his} status as a sex slave, and states that ${he}'s become used to impotence. ${He}'s suffering from moodiness, however, and has`); + if (canHear(eventSlave)) { + r.push(`heard rumors`); + } else { + r.push(`learned`); + } + r.push(`from other slaves that this might be because of the hormonal suppression necessary to allow ${his} hormone treatments to work despite ${his} natural hormones. ${He} asks for an orchiectomy, if it will help stabilize ${his} emotional state.`); + } else { + r.push( + Spoken(eventSlave, `"${Master}, may I please have an orchiectomy?"`), + `${he} ${say}s, and then gestures at ${his} limp dick.`, + Spoken(eventSlave, `"I'm, um, impotent, and since I'm on hormones, I've, um, kind of gotten used to being that way. I get really sad randomly, though. And some of the other girls say that it's the hormones and, um, my hormones clashing."`), + `${He} squares ${his} shoulders.`, + Spoken(eventSlave, `"I understand that I'm a sex slave. I accept it. May I please have that surgery, ${Master}, if it'll make me less moody?"`) + ); + } + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Order ${him} to behave ${himself}`, order), + new App.Events.Result(`Reassure ${him} about ${his} body`, reassure), + (canDoAnal(eventSlave)) + ? new App.Events.Result(`Agree and make sure ${he} doesn't regret it`, agree, eventSlave.anus === 0 ? `This option will take ${his} virginity` : null) + : new App.Events.Result() + ]); + + function order() { + eventSlave.trust -= 2; + return `You give ${him} stern orders to be a good ${girl} and behave ${himself}, regardless of ${his} silly moods. You don't deign to directly deny ${his} request for a genital reconfiguration, and ${he} has the presence of mind not to ask for an explicit denial. ${He} offers you profoundly submissive promises to control ${his} emotions and be a good slave, though ${he} can't hide a glimmer of <span class="trust dec">fear</span> that ${he}'ll fail and suffer punishment.`; + } + + function reassure() { + const r = new SpacedTextAccumulator(); + r.push(`You tell ${him} you aren't planning to do that to ${him}. You explain that ${he} might be feeling like ${he}'s fully integrated into a life of sexual slavery now, but ${he}'s not even close; ${he}'s got a long way to go before ${he}'s perfectly devoted and trusting. The words might sound harsh, but you deliver them kindly, making the statement one of hope. ${He} listens without disappointment, and brightens further when you predict that in a few weeks, ${he}'ll get used to ${his} body's chemistry and accept it. Finally, you add, ${his} current configuration is the best for ${his} sex drive. ${He} bites ${his} lip and gives you a daring little look when ${he}`); + if (canHear(eventSlave)) { + r.push(`hears`); + } else { + r.push(`understands`); + } + r.push(`that, but you decide to keep ${him} waiting and send ${him} on ${his} way. ${He} <span class="devotion inc">thanks you</span> without dissembling, not realizing how profoundly ${his} life has changed, for ${him} to be reassured by that.`); + eventSlave.devotion += 4; + r.toParagraph(); + return r.container(); + } + + function agree() { + const r = new SpacedTextAccumulator(); + r.push(`You agree and send ${him} straight to the surgery. ${He} looks a little hesitant, as though the prospect is intimidating now that it's actually about to happen, but ${he} complies obediently. You direct ${V.assistant.name} to bring ${him} back to your office as soon as ${he}'s fully recovered. The curatives applied right after surgery hasten ${his} recovery, and ${he}'s back the next day, standing a little gingerly, ${his} limp dick looking a bit sore. ${He} greets you properly, and comes over willingly when you recline in your chair and`); + if (canSee(eventSlave)) { + r.push(`crook a finger at`); + } else { + r.push(`beckon`); + } + r.push(`${him}.`); + if (canSee(eventSlave)) { + r.push(`As ${he} approaches, ${he} notices that`); + if (PC.dick !== 0) { + r.push(`you've got your`); + if (PC.vagina !== -1) { + r.push(`futa`); + } + r.push(`dick out,`); + } else { + r.push(`you're wearing a strap-on,`); + } + r.push(`and looks a little apprehensive,`); + } else { + r.push(`${He} approaches gingerly, still slightly sore,`); + } + r.push(`but ${he} sits down obediently,`); + if (PC.dick !== 0) { + r.push(`your erection`); + } else { + r.push(`the phallus`); + } + r.push(`coming to rest between ${his} legs and lower buttocks, resting against ${his} perineum and the smooth, recently healed patch of skin at the base of ${his} dick where ${his} ballsack used to be. ${He} gasps at the sensation of`); + if (PC.dick !== 0) { + r.push(`your hot cock`); + if (PC.vagina !== -1) { + r.push(`and the wet pussy beneath it`); + } + } else { + r.push(`the hard thing`); + } + r.push(`pressed against ${his} most intimate area, but ${he} doesn't flinch away.`); + r.toParagraph(); + r.push(`You take your time with ${him}, leaning back in your chair so that ${he}'s lying`); + if (PC.boobs >= 1400) { + r.push(`against your enormous`); + if (PC.boobsImplant !== 0) { + r.push(`fake breasts.`); + } else { + r.push(`cow tits.`); + } + } else if (PC.boobs >= 1200) { + r.push(`against your huge`); + if (PC.boobsImplant !== 0) { + r.push(`firm`); + } else { + r.push(`soft`); + } + r.push(`breasts.`); + } else if (PC.boobs >= 1000) { + r.push(`against your big`); + if (PC.boobsImplant !== 0) { + r.push(`firm`); + } + r.push(`breasts.`); + } else if (PC.boobs >= 300) { + r.push(`against your tits`); + } else if (PC.title === 0) { + r.push(`against your flat chest`); + } else { + r.push(`on your chest`); + } + r.push(`and bringing ${his} head around so you can make out. You play with ${his}`); + if (eventSlave.boobs > 1000) { + r.push(`udders`); + } else if (eventSlave.boobs > 300) { + r.push(`boobs`); + } else { + r.push(`nipples`); + } + r.push(`for a while, slowly starting to grind`); + if (PC.dick !== 0) { + r.push(`your dick`); + if (PC.vagina !== -1) { + r.push(`and the pussy attached to it`); + } + } else { + r.push(`the strap-on`); + } + r.push(`back and forth between ${his} legs. ${He} starts to ride you, and starts to beg you to fuck ${him}. You take ${him} under the arms and pull ${him} up, letting`); + if (PC.dick !== 0) { + r.push(`your erection`); + } else { + r.push(`the dildo`); + } + r.push(`spring free; ${he} takes the cue and lines its head up with ${his}`); + if (eventSlave.anus > 2) { + r.push(`asspussy.`); + } else if (eventSlave.anus > 1) { + r.push(`asshole.`); + } else { + r.push(`tight pucker.`); + } + r.push(VCheck.Anal(eventSlave, 1)); + r.push(`${He} shivers with pleasure as you lower ${him} onto it and ${he} feels the pressure`); + if (eventSlave.prostate > 0) { + r.push(`against ${his} prostate.`); + } else { + r.push(`in ${his} rectum.`); + } + r.push(`${He}'s so aroused that ${he} climaxes immediately, shuddering as ${his}`); + if (eventSlave.dick > 6) { + r.push(`monstrous floppy dick twitches, dripping`); + } else if (eventSlave.dick > 3) { + r.push(`big but now permanently soft dick drips`); + } else if (eventSlave.dick > 1) { + r.push(`little bouncing bitch dick dribbles`); + } else { + r.push(`shockingly tiny penis dribbles`); + } + if (eventSlave.prostate > 2) { + r.push(`an obscene`); + } else if (eventSlave.prostate > 1) { + r.push(`a large`); + } else if (eventSlave.prostate === 0) { + r.push(`a negligible`); + } else { + r.push(`a small`); + } + r.push(`amount of clear fluid. By the time you carry ${his} <span class="devotion inc">limply submissive</span> body to the shower, ${he}'s orgasmed twice more to your artful anal lovemaking.`); + eventSlave.devotion += 4; + eventSlave.balls = 0; + eventSlave.scrotum = 0; + healthDamage(eventSlave, 1); + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/showerSlip.js b/src/events/RESS/review/showerSlip.js new file mode 100644 index 0000000000000000000000000000000000000000..d7622985410a805feb462910026644cd4c1a585a --- /dev/null +++ b/src/events/RESS/review/showerSlip.js @@ -0,0 +1,404 @@ +App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.PC.belly < 5000, + ]; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + s => s.trust > 20, + s => s.devotion > 50, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him, himself, girl, woman + } = getPronouns(eventSlave); + const {title: Master} = getEnunciation(eventSlave); + const belly = bellyAdjective(eventSlave); + const PC = V.PC; + const strong = PC.title === 1 ? "strong" : "fit"; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push( + App.UI.DOM.slaveDescriptionDialog(eventSlave), + `finishes ${his} morning shower and sleepily turns to dry off. ${He} slips a little on the moist bathroom floor, trips over ${his} own feet, and starts to stumble. ${His} fall is immediately arrested as ${he}'s caught by a pair of strong`, + ); + if (PC.title === 0) { + r.push(`yet feminine`); + } + r.push(`arms. Coming to rest against`); + if (PC.boobs >= 1400 && PC.belly >= 10000) { + r.push(`a pair of enormous`); + if (PC.boobsImplant > 0) { + r.push(`air bags`); + } else { + r.push(`pillowlike breasts`); + } + r.push(`and a hugely pregnant belly,`); + } else if (PC.belly >= 10000) { + r.push(`a hugely pregnant middle,`); + } else if (PC.boobs >= 300) { + r.push(`a pair of`); + if (PC.boobsImplant === 0) { + r.push(`soft`); + } else { + r.push(`firm`); + } + r.push(`breasts,`); + } else if (PC.title === 0) { + r.push(`a flat chest,`); + } else { + r.push(`a well-muscled chest,`); + } + r.push(`${he}`); + if (canSee(eventSlave)) { + r.push(`looks up to find ${himself} gazing into your eyes.`); + } else { + r.push(`feels ${his} savior and recognizes these features as yours.`); + } + if (!canTalk(eventSlave)) { + r.push(`${He} mouths a surprised but genuine thank you.`); + } else { + r.push( + Spoken(eventSlave, `"Thanks, ${Master},"`), + `${he} murmurs, getting over ${his} surprise and relief.` + ); + } + + r.toParagraph(); + + r.push(`Opportunities for gallantry didn't use to fall into your lap like this, but with a harem of busy sex slaves living and working in close proximity, they're common. For ${his} part, ${eventSlave.slaveName} doesn't seem to mind acting out bad romantic comedy. ${He} shows no sign of getting back to ${his} own feet, and nuzzles ${his} ${eventSlave.skin} cheek against your`); + if (PC.belly >= 10000) { + r.push(`taut middle,`); + } else if (PC.boobs >= 300) { + r.push(`boob,`); + } else if (PC.title === 0) { + r.push(`cute nipple,`); + } else { + r.push(`chest,`); + } + if (canSee(eventSlave)) { + r.push(`staring`); + } else { + r.push(`looking`); + } + r.push(`up at you coquettishly. Apparently worrying that ${his} sexual availability isn't obvious enough, ${he} catches ${his}`); + if (eventSlave.lips > 40) { + r.push(`enormous`); + } else if (eventSlave.lips > 20) { + r.push(`plush`); + } else { + r.push(`soft`); + } + r.push(`lower lip behind ${his} teeth and bats ${his} eyes at you.`); + if (eventSlave.teeth === "straightening braces" || eventSlave.teeth === "cosmetic braces") { + r.push(`${His} braces make the flirty gesture look amusingly innocent`); + if (eventSlave.visualAge > 35) { + r.push(`for such a mature ${woman}`); + } + r.addToLast(`.`); + } else if (eventSlave.teeth === "pointy") { + r.push(`Somehow ${he} manages to make this look cute despite ${his} carnivorously pointed teeth.`); + } else if (eventSlave.teeth === "fangs") { + r.push(`Somehow ${he} manages to make this look cute despite ${his} fangs.`); + } else if (eventSlave.teeth === "fang") { + r.push(`${His} lone fang makes the look more mischievous then ${he} intends.`); + } + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Carry ${him} to where ${he} needs to go`, carry), + ((canDoAnal(eventSlave) || canDoVaginal(eventSlave)) && eventSlave.belly < 15000) + ? new App.Events.Result(`Scoop ${him} up and fuck ${him}`, scoop, virginityWarning()) + : new App.Events.Result(), + ]); + + function virginityWarning() { + if (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) { + return `This option will take ${his} virginity`; + } else if (eventSlave.anus === 0 && canDoAnal(eventSlave)) { + return `This option will take ${his} anal virginity`; + } + } + + function carry() { + let wasCarried = true; + const r = new SpacedTextAccumulator(); + r.push(`You scoop ${him} up into a bridal carry. ${He}`); + if (eventSlave.voice === 0) { + r.push(`gasps, since ${he} can't squeal,`); + } else { + r.push(`squeals cutely,`); + } + r.push(`holding on for dear life, and keeps ${his} face nestled against ${his} ${getWrittenTitle(eventSlave)}.`); + if (eventSlave.belly >= 300000) { + if (eventSlave.bellyPreg > 3000) { + r.push(`${His} ${belly} pregnancy`); + } else { + r.push(`${His} ${belly} belly`); + } + r.push(`makes holding ${him} extremely difficult, not including just how much it weighs, so you're forced to quickly return ${him} to ${his} feet.`); + wasCarried = false; + } else if (eventSlave.boobs > 40000) { + r.push(`${His} expansive tits not only weigh ${him} down, but also keep you from holding ${him} up for long.`); + wasCarried = false; + } else if (eventSlave.weight > 160) { + r.push(`${He}'s certainly an armful and a little too fat for you to hold for long.`); + wasCarried = false; + } else if (eventSlave.balls > 200) { + r.push(`${His} tremendous balls serve as an imposing anchor, quickly forcing you to lower ${him} back to the ground.`); + wasCarried = false; + } else if (eventSlave.dick > 30) { + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, but you're ${strong} enough to carry ${him} some distance.`); + } else { + r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, preventing you from really carrying ${him} very far.`); + wasCarried = false; + } + } else if (eventSlave.belly >= 100000) { + if (eventSlave.bellyPreg > 3000) { + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`${His} pregnancy is truly gigantic, but you're ${strong} enough to carry ${him} some distance.`); + } else { + r.push(`${His} pregnancy is truly gigantic and a little too big for you to safely carry without the risk of dropping, quickly forcing you to lower ${him}.`); + wasCarried = false; + } + } else { + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`${His} ${belly} belly is truly gigantic, but you're ${strong} enough to carry ${him} some distance.`); + } else { + r.push(`${His} ${belly} belly is truly an armful and a little to heavy for you to carry, quickly forcing you to lower ${him}.`); + wasCarried = false; + } + } + } else if (eventSlave.boobs > 25000) { + r.push(`${His} enormous boobs`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`add tremendously to ${his} weight and are awkward to manage, but you're ${strong} enough to carry ${him} some distance.`); + } else { + r.push(`add tremendously to ${his} weight and are awkward to manage, quickly forcing you to lower ${him}.`); + wasCarried = false; + } + } else if (eventSlave.weight > 130) { + r.push(`${He}'s a`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`fatty, but you're ${strong} enough to carry ${him} some distance.`); + } else { + r.push(`fatty and a little too big and heavy for you to hold for long.`); + wasCarried = false; + } + } else if (eventSlave.balls > 100) { + r.push(`${His} enormous balls`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`add tremendously to ${his} weight and dangle ponderously, but you're ${strong} enough to carry ${him} some distance, even though you have to step awkwardly to avoid kneeing ${his} sensitive sack.`); + } else { + r.push(`add tremendously to ${his} weight and dangle ponderously, quickly forcing you to lower ${him} or risk accidentally kneeing the sensitive sack.`); + wasCarried = false; + } + } else if (eventSlave.dick > 20) { + r.push(`${His} dangling cock adds tremendously to ${his} weight and is awkward to walk with, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.butt > 18) { + r.push(`${His} expansive ass`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`adds tremendously to ${his} weight and is awkward to handle, but you're ${strong} enough to carry ${him} some distance.`); + } else { + r.push(`adds tremendously to ${his} weight and is awkward to handle, quickly forcing you to lower ${him}.`); + wasCarried = false; + } + } else if (eventSlave.boobs > 8000) { + r.push(`${His} boobs add tremendously to ${his} weight, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.weight > 95) { + r.push(`${He}'s got some extra weight on ${him}, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.height > 180) { + r.push(`${He}'s a big ${girl}, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.weight > 30) { + r.push(`${He}'s a chubby ${girl}, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.bellyPreg >= 10000) { + r.push(`${He}'s heavily pregnant, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.bellyImplant >= 10000) { + r.push(`${His} belly is greatly laden with inert filler, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.bellyFluid >= 10000) { + r.push(`${His} belly is greatly laden with ${eventSlave.inflationType}, but you're ${strong} enough to carry ${him} some distance.`); + } else if (eventSlave.height > 160) { + r.push(`${He}'s no little ${girl}, but you're ${strong} enough to carry ${him}.`); + } else if (eventSlave.weight > 10) { + r.push(`${He}'s got a deliciously plush body, but you're ${strong} enough to carry ${him}.`); + } else { + r.push(`You could carry the little slave like this as long as you like.`); + } + if (wasCarried) { + r.push(`Knowing that ${he}'ll need to get dressed before the next part of ${his} day, you carry ${him} to`); + if (eventSlave.rules.living === "luxurious") { + r.push(`${his} room.`); + } else { + r.push(`the part of the common area with where clothes are kept.`); + } + r.push(`${He} remains perfectly limp, letting ${himself} be carried without a word. When you set ${him} on ${his} feet,`); + } else { + r.push(`Knowing that ${he}'ll need to get dressed before the next part of ${his} day, you help ${him} to`); + if (eventSlave.rules.living === "luxurious") { + r.push(`${his} room.`); + } else { + r.push(`the part of the common area with where clothes are kept.`); + } + r.push(`${He} lets you do most of the work, letting ${himself} be guided without a word. When you set ${him} on ${his} bed,`); + } + r.push(`there's a little unaccountable moisture in ${his} ${App.Desc.eyesColor(eventSlave)} <span class="trust inc">for some reason.</span> ${He} gives you a kiss and thanks you prettily.`); + eventSlave.trust += 4; + r.toParagraph(); + return r.container(); + } + + function scoop() { + const r = new SpacedTextAccumulator(); + r.push(`You squat down, and ${he} plants ${his} feet, expecting to be given a swat on the bottom and sent on ${his} way. Instead, you run your hands down ${his}`); + if (eventSlave.weight > 130) { + r.push(`well-padded`); + } else if (eventSlave.weight > 95) { + r.push(`padded`); + } else if (eventSlave.muscles > 30) { + r.push(`heavily muscled`); + } else if (eventSlave.weight > 30) { + r.push(`chubby`); + } else if (eventSlave.weight > 10) { + r.push(`plush`); + } else if (eventSlave.muscles > 5) { + r.push(`toned`); + } else { + r.push(`soft`); + } + r.push(`thighs, producing a shiver from the ${SlaveTitle(eventSlave)}, and lift ${him} up against your chest, pinning ${him} there with your hands supporting the backs of ${his} knees. Giggling`); + if (eventSlave.voice === 0) { + r.push(`mutely`); + } + r.addToLast(`, ${he} finds ${himself} held in a fetal position with ${his} back pressed against your`); + if (PC.boobs >= 300) { + r.push(`tits.`); + } else { + r.push(`chest.`); + } + if (eventSlave.boobs > 40000) { + r.push(`${His} expansive tits not only weigh ${him} down, but also force you to push ${him} against the shower wall for added support.`); + } else if (eventSlave.weight > 160) { + r.push(`${He}'s certainly an armful and a little too fat, forcing you to push ${him} against the shower wall for added support.`); + } else if (eventSlave.balls > 200) { + r.push(`${His} tremendous balls serve as an imposing anchor, quickly forcing you to push ${him} against the shower wall for added support.`); + } else if (eventSlave.dick > 30) { + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, but you're ${strong} enough to lift ${him}.`); + } else { + r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, quickly forcing you to push ${him} against the shower wall for added support.`); + } + } else if (eventSlave.boobs > 25000) { + r.push(`${His} enormous boobs`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`add tremendously to ${his} weight and are awkward to manage, but you're ${strong} enough to lift ${him}.`); + } else { + r.push(`add tremendously to ${his} weight and are awkward to manage, quickly forcing you to push ${him} against the shower wall for added support.`); + } + } else if (eventSlave.weight > 130) { + r.push(`${He}'s a`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`fatty, but you're ${strong} enough to lift ${him}.`); + } else { + r.push(`fatty and a little too big and heavy, quickly forcing you to push ${him} against the shower wall with a wet slap.`); + } + } else if (eventSlave.balls > 100) { + r.push(`${His} enormous balls`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`add tremendously to ${his} weight and dangle ponderously, but you're ${strong} enough to lift ${him}.`); + } else { + r.push(`add tremendously to ${his} weight and dangle ponderously, quickly forcing you to push ${him} against the shower wall for added support.`); + } + } else if (eventSlave.dick > 20) { + r.push(`${His} dangling cock adds tremendously to ${his} weight and dangles heavily, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.butt > 18) { + r.push(`${His} expansive ass`); + if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + r.push(`adds tremendously to ${his} weight and is awkward to handle, but you're ${strong} enough to lift ${him}.`); + } else { + r.push(`adds tremendously to ${his} weight and is awkward to handle, quickly forcing you to push ${him} against the shower wall for added support.`); + } + } else if (eventSlave.boobs > 8000) { + r.push(`${His} boobs add tremendously to ${his} weight, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.weight > 95) { + r.push(`${He}'s got some extra weight on ${him}, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.height > 180) { + r.push(`${He}'s a big ${girl}, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.weight > 30) { + r.push(`${He}'s a chubby ${girl}, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.bellyPreg >= 10000) { + r.push(`${He}'s heavily pregnant, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.bellyImplant >= 10000) { + r.push(`${His} belly is greatly laden with inert filler, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.bellyFluid >= 10000) { + r.push(`${His} belly is greatly laden with ${eventSlave.inflationType}, but you're ${strong} enough to lift ${him}.`); + } else if (eventSlave.height > 160) { + r.push(`${He}'s no little ${girl}, but you're ${strong} enough to lift ${him} with ease.`); + } else if (eventSlave.weight > 10) { + r.push(`${He}'s got a deliciously plush body, but you're ${strong} enough to lift ${him} with ease.`); + } else { + r.push(`You can hold the little slave like this as long as you like.`); + } + r.push(`You shift your grip to hold ${him} with one hand so you can`); + if (PC.dick !== 0) { + r.push(`maneuver your cock inside ${him}, and then resume your original hold so you can slide ${him} up and down your shaft.`); + if (PC.vagina !== -1) { + r.push(`You make sure ${he}'s really hilted at the height of each stroke, putting some nice pressure on your pussy.`); + } + } else { + r.push(`slide your fingers inside ${his}`); + if (canDoVaginal(eventSlave)) { + r.push(`pussy,`); + } else { + r.push(`ass,`); + } + r.push(`since you're not putting ${him} down to get a strap-on. Knowing ${he} can't reach your cunt to return the favor like this, ${he} relaxes and lets you play with ${him}.`); + } + r.push(`Helpless, ${he} has nothing to do but`); + if (canSee(eventSlave)) { + r.push(`watch ${himself} get fucked in a full length mirror. ${He} stares, fascinated, and the sight`); + } else { + r.push(`let ${his} hands wander across ${his} body. Teasing ${his} nipples`); + if (eventSlave.bellyPreg >= 5000) { + r.push(`and pregnant belly`); + } + } + r.push(`gets ${him} off quickly,`); + if (eventSlave.dick === 0) { + r.push(`${his} muscles tensing prettily with female orgasm.`); + } else if (eventSlave.chastityPenis === 1) { + r.push(`a dribble of cum flowing from the tip of ${his} chastity cage.`); + } else if (canAchieveErection(eventSlave)) { + r.push(`${his} stiffly waving cock jetting cum onto the floor.`); + } else if (eventSlave.dick > 6) { + r.push(`${his} absurd cock twitching lazily as ${his} ejaculate makes it down its length.`); + } else if (eventSlave.balls === 0) { + r.push(`${his} bitchclit dribbling weakly.`); + } else if (eventSlave.dick > 0) { + r.push(`${his} limp dick twitching as ${he} cums.`); + } else { + r.push(`making ${him} shudder.`); + } + r.push(`When you're done, you let ${him} down, and the first thing ${he} does is spin in your embrace to give you an <span class="devotion inc">earnest kiss.</span>`); + r.push(VCheck.Simple(eventSlave, 1)); + eventSlave.devotion += 4; + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/subjugationBlues.js b/src/events/RESS/review/subjugationBlues.js new file mode 100644 index 0000000000000000000000000000000000000000..74439a5b4aa2f286d19e73736fe9f1c6fb3b9d35 --- /dev/null +++ b/src/events/RESS/review/subjugationBlues.js @@ -0,0 +1,247 @@ +App.Events.RESSSubjugationBlues = class RESSSubjugationBlues extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.arcologies[0].FSSubjugationist !== "unset" + ]; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + canTalk, + s => s.race !== V.arcologies[0].FSSubjugationistRace, + s => V.week - s.weekAcquired > 1, + s => V.week - s.weekAcquired < 10, + s => s.devotion < -20, + s => s.trust >= -20, + s => s.health.condition > -20, + s => s.race === s.origRace, + s => s.indentureRestrictions < 1, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him, girl + } = getPronouns(eventSlave); + const belly = bellyAdjective(eventSlave); + const timeEnslaved = V.week-eventSlave.weekAcquired; + const PC = V.PC; + const FSSubjugationistRace = V.arcologies[0].FSSubjugationistRace; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push(`It's been ${timeEnslaved}`); + if (timeEnslaved > 1) { + r.push(`weeks`); + } else { + r.push(`week`); + } + r.push( + `since you acquired`, + contextualIntro(PC, eventSlave, "DOM"), + `as your slave. Since then ${he} has been nothing but trouble. ${He} has been ungrateful, rebellious and particularly hateful toward you since you acquired ${him}. ${He} often needs to be confined or forced to perform ${his} assignments, and has little regard for your power or authority. You bring ${him} in for inspection and ${he} whines and squirms in resistance as you feel up ${his} ${eventSlave.nipples} nipples,` + ); + if (eventSlave.belly >= 5000) { + r.push(`rub ${his} ${belly}`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnant`); + } + r.push(`belly,`); + } else if (eventSlave.bellyPreg >= 150) { + r.push(`feel the curve of ${his} new pregnancy,`); + } + r.push(`and grope ${his}`); + if (eventSlave.butt < 2) { + r.push(`narrow`); + } else if (eventSlave.butt < 5) { + r.push(`average`); + } else if (eventSlave.butt < 8) { + r.push(`plump`); + } else { + r.push(`impressive`); + } + r.push(`butt, coldly appraising ${his} potential worth as a sexual service provider.`); + if (eventSlave.actualAge < 21) { + r.push(`${He} is very young, only ${eventSlave.actualAge} years old, and is still very naïve. ${His} smooth, ${eventSlave.skin} skin has yet to experience the hard years of relentless sexual abuse that lie ahead of ${him}.`); + } else { + r.push(`At ${eventSlave.actualAge} years old, ${he} should know by now how the world works, but some slaves are just too stubborn for their own good.`); + } + r.push(`Eventually, of course, even the most headstrong ${girl}s will bend to your will, but the unique social mores of your arcology and the wonders of modern surgical technology offer a prime opportunity to make a potent example of this`); + if (eventSlave.actualAge < 21) { + r.push(`young`); + } else { + r.push(`obstinate`); + } + r.push(`slut. ${He} is ${eventSlave.race}, and therefore not considered racially inferior or subject to extreme inequities or neglect, but like most slave characteristics, that can change.`); + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Surgically alter ${him} to be of the inferior ${FSSubjugationistRace} race, and give ${him} a public debut`, surgically, (eventSlave.anus === 0 || eventSlave.vagina === 0) ? `This option will take ${his} virginity and ignore ${his} chastity` : null), + new App.Events.Result(`No surgery today, but give ${him} something to think about`, think), + new App.Events.Result(`Discipline ${him} normally. Artificial racial subjugation is going too far`, discipline), + ]); + + function surgically() { + if (FSSubjugationistRace === 0) { // do not remove-- check is for typing assistance + return; + } + const r = new SpacedTextAccumulator(); + r.push(`Some slaves have a bigger potential price to pay for disobedience than they realize. ${eventSlave.slaveName} is ${eventSlave.race}, which is`); + if (eventSlave.race !== V.arcologies[0].FSSupremacistRace) { + r.push(`not particularly noteworthy.`); + } else { + r.push(`advantageous to ${him}, as it is generally unpopular to enslave a ${girl} of the superior race.`); + } + r.push(`However, ${he}'s about to learn that ${his} racial appearance isn't immutable, and in your arcology, it can make a big difference in how ${he} is treated. You escort the struggling`); + if (eventSlave.pregKnown === 1 && eventSlave.bellyPreg >= 1500) { + r.push(`mother-to-be`); + } else { + r.push(`${girl}`); + } + r.push(`to the surgery center and instruct ${V.assistant.name} to alter ${his} appearance so that ${he} appears to be ${FSSubjugationistRace}. The full meaning of your instructions`); + if (eventSlave.intelligence+eventSlave.intelligenceImplant < -15) { + r.push(`slowly start to dawn on ${eventSlave.slaveName}'s stupid face`); + } else { + r.push(`spark a quick reaction`); + if (canSee(eventSlave)) { + r.push(`from ${eventSlave.slaveName}'s intelligent eyes`); + } else { + r.push(`on ${eventSlave.slaveName}'s intelligent face`); + } + } + r.push(`and ${he} whimpers and begs for you to reconsider even as ${he}'s strapped onto the operating table.`); + r.toParagraph(); + r.push(`By the time ${he} wakes up from the anesthesia, you've already made the necessary alterations to ${his} permanent records, which now clearly indicate that ${he} was born ${FSSubjugationistRace} and as such, can be rightfully regarded as the racially inferior fuck-animal ${he} now is. Of course, your fellow slaveowners and the slave market will be savvy enough to see through the alterations you've forced upon ${him}, but when you make ${him} available for a day of use in the public square, all your average citizen knows is that the ${girl} they are fucking is simply a worthless ${FSSubjugationistRace} slut who doesn't deserve much more than a stomach full of cum. The surgery <span class="health dec">negatively effects ${his} health,</span> but by the end of a long day ${he}'ll likely never forget, ${he} has gotten a crash course in what it means to be a ${FSSubjugationistRace} slave in your arcology, and any evidence that ${he} was born ${eventSlave.race} has been efficiently expunged from ${his} records.`); + if (eventSlave.vagina === 0 || eventSlave.anus === 0) { + r.push(`<span class="virginity loss">All vestiges of ${his} virginity have been unceremoniously stripped away</span>.`); + } + r.push(`The experience has <span class="devotion inc">broken down ${his} resistance,</span> and your willingness to go to such extremes to subjugate ${him} <span class="trust dec">greatly increases ${his} fear of you.</span>`); + eventSlave.devotion += 5; + eventSlave.trust -= 10; + eventSlave.anus++; + seX(eventSlave, "anal", "public", "penetrative", 25); + seX(eventSlave, "oral", "public", "penetrative", 35); + if (eventSlave.vagina > -1) { + eventSlave.vagina++; + seX(eventSlave, "vaginal", "public", "penetrative", 20); + } + knockMeUp(eventSlave, 100, 2, -2); + cashX(forceNeg(V.surgeryCost), "slaveSurgery", eventSlave); + surgeryDamage(eventSlave, 20); + eventSlave.race = FSSubjugationistRace; + eventSlave.skin = randomRaceSkin(FSSubjugationistRace); + setEyeColor(eventSlave, randomRaceEye(FSSubjugationistRace)); + eventSlave.hColor = randomRaceHair(FSSubjugationistRace); + eventSlave.override_Skin = 1; + eventSlave.override_Eye_Color = 1; + eventSlave.override_H_Color = 1; + r.toParagraph(); + return r.container(); + } + + function think() { + const r = new SpacedTextAccumulator(); + const {HeU, girlU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U'); + r.push(`You stroke ${eventSlave.slaveName}'s ${eventSlave.skin} cheek and tell ${him} that ${he} has much more to lose than ${he} realizes. You decide to give ${him} a tour of the arcology to show ${him} what you mean. You make sure to`); + if (canSee(eventSlave)) { + r.push(`point out`); + } else { + r.push(`explain`); + } + r.push(`everything that makes living in your arcology as a ${FSSubjugationistRace} slut special.`); + if (V.dairy > 0) { + r.push(`There are the specially calibrated "${FSSubjugationistRace} only" industrial human milking machines in ${V.dairyName} which have been set for maximum milking efficiency, disregarding any need for slave comfort.`); + } else { + r.push(`There are the segregated milking stalls, where only the dirtiest and most dilapidated machines are reserved for filthy ${FSSubjugationistRace} sluts.`); + } + if (V.club > 0) { + r.push(`There are the "refresher" sinks in ${V.clubName} where normal slaves can go to periodically clean the cum out of their holes before returning to service more citizens — but such a luxury is off limits to ${FSSubjugationistRace} animals, who simply have to work through their long shifts with ever increasing amount of ejaculate covering their worthless bodies.`); + } else { + r.push(`There are the "animal fuckers" in the public square — groups of racial purists who specifically seek out slaves of the inferior ${FSSubjugationistRace} race to mistreat through extreme public use.`); + } + if (V.clinic > 0) { + r.push(`While ${V.clinicName} is available to normal slaves to recover from injuries and general ill health, such things aren't afforded to ${FSSubjugationistRace} whores. They have to work through it, no matter the outcome.`); + if (eventSlave.ovaries === 1 || eventSlave.mpreg === 1) { + r.push(`A slave in the throes of labor catches ${his} attention. Assisted birth is a luxury; gravid ${FSSubjugationistRace} whores receive no aid with childbirth, nor are contraceptives wasted on them.`); + } + } else { + r.push(`As you tour, you pass an exhausted ${FSSubjugationistRace} ${girlU} struggling to give birth. ${HeU}'ll be left to handle the act alone as medical care is seldom given to ${FSSubjugationistRace} mongrels.`); + if (eventSlave.ovaries === 1 || eventSlave.mpreg === 1) { + r.push(`It's a common occurrence for pregnant subhumans, since they aren't worth the cost of contraception.`); + } + } + r.push(`Finally`); + if (V.arcade > 0) { + r.push(`you take ${him} over to ${V.arcadeName}, and`); + if (canSee(eventSlave)) { + r.push(`give ${him} an up close view of`); + } else { + r.push(`let ${him} feel`); + } + r.push(`the brutal ring gag used to pry open the ${FSSubjugationistRace} sluts' mouths for relentless cock-milking purposes.`); + } else { + r.push(`you take ${him} over to the glory hole area, where distinct labels adorn the holes reserved for members of the slave race, and ${FSSubjugationistRace} fuck-holes are afforded "special attention" by "sympathetic" citizens of the arcology.`); + } + r.toParagraph(); + r.push(`At first ${eventSlave.slaveName} is confused as to why you are showing ${him} these things, but you soon make your point clear. You explain that if ${he} doesn't start accepting ${his} role, you can easily alter ${his} appearance and force ${him} to accept a much different role instead. You see ${his}`); + if (eventSlave.intelligence+eventSlave.intelligenceImplant < -15) { + r.push(`stupid`); + if (canSee(eventSlave)) { + r.push(`eyes`); + } else { + r.push(`face`); + } + r.push(`finally start to show signs of understanding`); + } else { + r.push(`intelligent`); + if (canSee(eventSlave)) { + r.push(`eyes`); + } else { + r.push(`face`); + } + r.push(`quickly realize what you are talking about`); + } + r.push(`and ${he} starts to whimper helplessly, begging you not to turn ${him} into a ${FSSubjugationistRace} subhuman. By the end of the tour ${he} better realizes exactly what it means to be a slave. ${He} is starting to understand the <span class="devotion inc">power you have over ${him},</span> and <span class="trust dec">${he} fears you even more because of it.</span>`); + eventSlave.devotion += 5; + eventSlave.trust -= 10; + r.toParagraph(); + return r.container(); + } + + function discipline() { + const r = new SpacedTextAccumulator(); + r.push(`You look ${eventSlave.slaveName} over, and something about ${him} makes you reconsider playing games with ${his} racial appearance.`); + if (eventSlave.race === V.arcologies[0].FSSupremacistRace) { + r.push(`Perhaps ${his} natural ${eventSlave.race} supremacy is too sacrosanct for you to go to such lengths.`); + } + r.push(`You'll not make such an extreme example of ${him}. Still, ${he} is a disobedient slave, and ${he} cannot be allowed to openly defy your orders and inspections. You`); + if (eventSlave.belly >= 300000) { + r.push(`shove ${him} onto ${his} ${belly} belly, expose ${his} bare ass`); + } else { + r.push(`take ${him} over your knee, expose ${his} bare ass`); + } + r.push(`and spank ${him} hard and relentlessly. ${He} screams and whines and struggles, and you call in an obedient slave to help keep control of ${him} as you punish ${his} reddened bottom. You also make sure to tell ${him} how lucky ${he} is that ${he} isn't one of those worthless subhuman ${FSSubjugationistRace} sluts, and that ${he} is getting off easy. But you also remind ${him} that there are worse owners to belong to, and if ${he} continues to resist your will, you will be very selective about who you sell ${him} to.`); + r.toParagraph(); + r.push(`By the time you've finished with ${his} sensitive ass, it shines red, and ${he} is crying and whimpering in pain. You send ${him} away, having <span class="devotion inc">dampened ${his} resistance a bit,</span> and <span class="trust dec">scared ${him} with your tales of how much worse life could be</span> for ${him}`); + if (eventSlave.race === V.arcologies[0].FSSupremacistRace) { + r.push(`if ${he} weren't born of the supreme race.`); + } else { + r.push(`under a less forgiving owner.`); + } + eventSlave.devotion += 5; + eventSlave.trust -= 5; + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/tittymonsterInspection.js b/src/events/RESS/review/tittymonsterInspection.js new file mode 100644 index 0000000000000000000000000000000000000000..d57e59affff68990bfa40d22f1105ad348fdafb3 --- /dev/null +++ b/src/events/RESS/review/tittymonsterInspection.js @@ -0,0 +1,269 @@ +App.Events.RESSTittymonsterInspection = class RESSTittymonsterInspection extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + s => s.assignment !== Job.QUARTER, + s => s.boobs > 25000, + s => s.belly < 100000, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him, himself, hers + } = getPronouns(eventSlave); + const belly = bellyAdjective(eventSlave); + const PC = V.PC; + const arms = hasBothArms(eventSlave) ? "arms" : "arm"; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push( + `You enter your office from other business a few minutes after the scheduled start of`, + contextualIntro(PC, eventSlave, "DOM") + ); + r.addToLast(`'s inspection. The`); + if (V.boobAccessibility === 1) { + r.push(`accessibility aids for slaves with immobilizing breasts`); + } else { + r.push(`slaves who helped ${him} in`); + } + r.push(`have gone, leaving ${him} waiting for you in front of your desk. The sight is an arresting one. ${He}'s kneeling, but ${his} boobs are so enormous that they're resting on the ground in front of ${him}, completely concealing ${his} body below the chest`); + if (eventSlave.belly >= 120000) { + r.addToLast(`, save for the protruding mass of ${his}`); + if (eventSlave.pregType > 8) { + r.push(`hyper pregnant`); + } else if (eventSlave.pregType > 4) { + r.push(`${pregNumberName(eventSlave.pregType, 1)}-filled`); + } else { + r.push(`overly distended`); + } + r.push(`belly`); + } + r.addToLast(`. With ${his} ${arms} tucked back, and ${his} torso,`); + if (eventSlave.belly < 120000) { + if (eventSlave.bellyPreg > 100) { + r.push(`pregnancy,`); + } else if (eventSlave.belly > 100) { + r.push(`swollen stomach,`); + } else { + r.push(`abdomen,`); + } + } + r.push(`and legs hidden, ${he} appears to consist of a`); + if (eventSlave.face > 95) { + r.push(`gorgeous,`); + } else if (eventSlave.face > 50) { + r.push(`beautiful,`); + } else if (eventSlave.face >= 10) { + r.push(`pretty,`); + } else if (eventSlave.face >= 0) { + r.push(`nice,`); + } else { + r.push(`homely,`); + } + r.push(`${eventSlave.faceShape} face, a`); + if (eventSlave.collar === "none") { + r.push(`bare`); + } else { + r.push(`collared`); + } + r.push(`neck, ${eventSlave.skin},`); + if (eventSlave.muscles > 95) { + r.push(`hugely muscled`); + } else if (eventSlave.muscles > 30) { + r.push(`strong`); + } else if (eventSlave.shoulders > 0) { + r.push(`broad`); + } else if (eventSlave.shoulders < 0) { + r.push(`feminine`); + } else if (eventSlave.muscles > 5) { + r.push(`toned`); + } else { + r.push(`soft`); + } + r.push(`shoulders, and below that, breasts`); + if (eventSlave.belly >= 120000) { + r.push(`parted by ${his} ${belly} dome of a stomach`); + } + r.addToLast(`. ${He} greets you`); + if (eventSlave.devotion > 50) { + r.push(`devotedly, behaving for all the world like ${he}'s pleased to be`); + } else if (eventSlave.devotion >= -20) { + r.push(`properly, with just a hint of unhappiness about being`); + } else { + r.push(`with more than a hint of resentment over being`); + } + r.push(`pinned to the floor by ${his} own tits.`); + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Continue ${his} inspection as scheduled`, scheduled), + new App.Events.Result(`Use ${him} as a cushion`, cushion), + (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) + ? new App.Events.Result(`Enjoy ${his} helplessness`, helplessness, virginityWarning()) + : new App.Events.Result() + ]); + + function virginityWarning(){ + if (canDoVaginal(eventSlave) && eventSlave.vagina === 0) { + return `This option will take ${his} virginity`; + } else if (!canDoVaginal(eventSlave) && (eventSlave.anus === 0)) { + return `This option will take ${his} anal virginity`; + } + } + + function scheduled() { + const r = new SpacedTextAccumulator(); + r.push(`You're already late for this little meeting; you wouldn't want to keep ${him} here when you both have more productive things to do. ${His} inspection is exemplarily routine; ${he} has nothing significant to report. When all is said and done, you dismiss ${him}, and ${he} stands up,`); + if (eventSlave.devotion > 20) { + r.push(`genuinely`); + } else { + r.push(`quickly`); + } + r.push(`thanks you for your time, and leaves.`); + r.toParagraph(); + return r.container(); + } + + function cushion() { + const r = new SpacedTextAccumulator(); + r.push(`You tell ${him} ${he}'s looking very nice today. Surprised, ${he} manages`); + if (eventSlave.devotion > 20) { + r.push(`to thank you prettily, wondering`); + } else { + r.push(`to thank you hesitantly, worrying about`); + } + r.push(`what comes next. You pick up a tablet, come around your desk, and fold yourself into a lotus position, just in front of ${him} and with your back to ${him}. Struck by this strange and trusting maneuver, ${he} keeps still, letting you get yourself situated. You slide backward until you are pressed against the mound of breasts behind you, and then relax into their soft, fleshy mass. Your back nestles naturally into ${his} cleavage, and the give of ${his} huge mammaries conforms to you, allowing you to rest your elbows comfortably on each breast as though they were armrests. Feeling the weight of you against ${his} chest, ${eventSlave.slaveName} throws ${his} arms back, bracing ${himself} against the floor.`); + if (eventSlave.belly >= 15000) { + r.push(`You can feel ${his} full, taut,`); + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnancy`); + } else { + r.push(`belly`); + } + r.push(`just barely once you have sunk deep into ${his} cleavage.`); + } + r.push(`You begin to tap away at the tablet, and ${he} realizes`); + if (eventSlave.devotion > 20) { + r.push(`with pleased surprise`); + } else { + r.push(`with mixed resentment and relief`); + } + r.push(`that you intend to use ${him} as a sort of human cushion for a while. From where ${he}'s sitting, ${he}`); + if (canSee(eventSlave)) { + r.push(`can easily read over your shoulder, and you make no attempt to stop ${him}`); + } else { + r.push(`could read over your shoulder, if ${he} could see`); + } + r.push(`keeping secrets from your slaves is generally impractical, and`); + if (eventSlave.devotion > 20) { + r.push(`this ${SlaveTitle(eventSlave)} is trustworthy.`); + } else { + r.push(`there's nothing ${he} could do with your secrets, even if ${he} were to try.`); + } + r.push(`After an hour or so, you inspect ${him} and dismiss ${him}, and ${he} leaves <span class="trust inc">trusting ${his} bizarre place</span> in your world.`); + eventSlave.trust += 4; + r.toParagraph(); + return r.container(); + } + + function helplessness() { + const r = new SpacedTextAccumulator(); + r.push(`You give ${him} no orders at all, since ${his} helplessness makes ${him}`); + if (eventSlave.devotion > 20) { + r.push(`cooperation`); + } else { + r.push(`consent`); + } + r.push(`completely unnecessary for what you're planning. ${He} makes to turn as you come around behind ${him}, but ${he} can manage only a partial crane of ${his} shoulders and neck to`); + if (canSee(eventSlave)) { + r.push(`see`); + } else { + r.push(`figure out`); + } + r.push(`what you're doing. Seizing ${his} ankles, you haul ${his} legs out from under ${his} boobs and body, and then push ${him} forward, balancing ${his} body atop ${his} tits as though they were an exercise ball.`); + if (eventSlave.devotion > 20) { + r.push(`${He} giggles at this,`); + } else { + r.push(`${He} struggles a little at the sudden discomfort,`); + } + r.push(`and tries to steady ${himself} with ${his} hands, so you pull them around behind ${him} and pin ${his} arms to ${his} ${eventSlave.skin} back with one of your hands. You`); + if (V.PC.dick !== 0) { + r.push(`shove your dick up`); + } else { + r.push(`pull on a strap-on with your other hand and insert it into`); + } + r.push(`${his} defenseless`); + if (canDoVaginal(eventSlave)) { + r.push(`pussy.`); + } else { + r.push(`asshole.`); + } + r.push(`Then you fuck ${him}.`); + r.push(VCheck.Simple(eventSlave, 1)); + r.toParagraph(); + + r.push(`You're physically fit to begin with, and between that and all the practice you get, you pride yourself on your`); + if (V.PC.dick !== 0) { + if (V.PC.vagina !== -1) { + r.push(`master level futa skills.`); + } else { + r.push(`cocksmanship.`); + } + } else { + r.push(`power with a strap-on.`); + } + r.push(`You can fuck hard, and ${eventSlave.slaveName} gets fucked hard. Having all of ${his} weight on ${his} tits, and being sawed back and forth on top of those tits, is not comfortable.`); + if (canDoVaginal(eventSlave)) { + if (eventSlave.vagina < 3) { + r.push(`Worse, only the most veteran cunt could accept this kind of treatment without some pain, and ${hers} is far tighter than you're treating it.`); + } + } else { + if (eventSlave.anus < 3) { + r.push(`Worse, only the most veteran asspussy could accept this kind of treatment without some pain, and ${hers} is far tighter than you're treating it.`); + } + } + if (eventSlave.voice === 0) { + r.push(`Since ${he} cannot groan, ${he} begins to gasp raggedly`); + } else { + r.push(`${He} begins to grunt and groan`); + } + r.push(`with each forward thrust as you penetrate ${him}, pressing ${him} forward across ${his} cushion of boobs. ${He} tries to take some of the weight off with ${his} feet, but after some vain scrabbling ${he}'s obliged to <span class="devotion inc">give up and take it.</span>`); + r.toParagraph(); + + r.push(`When you're finished, you withdraw and drop ${him}, letting ${him} slump against ${his} sore breasts. ${He}'s too tired and overstimulated to do anything but stay limp, and ${his} relaxed`); + if (canDoVaginal(eventSlave)) { + r.push(`pussy`); + } else { + r.push(`butthole`); + } + if (V.PC.dick !== 0) { + r.push(`releases drips of your cum to go sliding down ${his} thighs.`); + } else { + r.push(`glistens attractively with lube.`); + } + r.push(`You direct`); + if (V.boobAccessibility === 1 || V.pregAccessibility === 1) { + r.push(`the accessibility assistance functions of your office to`); + } else { + r.push(`the slaves who helped ${him} in to return and`); + } + r.push(`help ${him} get cleaned up, and turn to your desk to get some work done as they struggle with the mountain of exhausted, fucked-out tits discarded in the middle of your office.`); + eventSlave.devotion += 4; + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/torpedoSqueeze.js b/src/events/RESS/review/torpedoSqueeze.js new file mode 100644 index 0000000000000000000000000000000000000000..97d477fdf5a4bb2afb45660405c73465daa7c873 --- /dev/null +++ b/src/events/RESS/review/torpedoSqueeze.js @@ -0,0 +1,286 @@ +App.Events.RESSTorpedoSqueeze = class RESSTorpedoSqueeze extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + s => s.assignment !== Job.QUARTER, + s => s.boobs > 600, + s => s.boobShape === "torpedo-shaped", + s => s.devotion >= -50, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him, himself + } = getPronouns(eventSlave); + const belly = bellyAdjective(eventSlave); + const arms = hasBothArms(eventSlave) ? `arms` : `arm`; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push(`The penthouse bathroom has a long counter and mirror arrangement with many sinks, so a number of slaves can get ready at once. During those moments of the day when`); + if (V.slaves.length > 10) { + r.push(`many`); + } else { + r.push(`more than one`); + } + r.push( + `of them have just been awoken and showered and are hurrying to prettify themselves, this row of sinks presents one of the nicer sights in the arcology, a neatly spaced line of slave butts and a matching line of breasts reflected in the mirror.`, + contextualIntro(V.PC, eventSlave, "DOM"), + `is especially impressive. ${His}` + ); + if (eventSlave.boobs > 4000) { + r.push(`monstrous`); + } else if (eventSlave.boobs > 2000) { + r.push(`huge`); + } else { + r.push(`big`); + } + r.push(`torpedo-shaped tits stick out a long way when ${he}'s standing upright in the nude like this.`); + r.toParagraph(); + r.push(`With ${his}`); + if (eventSlave.belly >= 100000) { + if (eventSlave.bellyPreg >= 1500) { + r.push(`${belly} pregnant`); + } else { + r.push(belly); + } + r.push(`belly`); + } else if (eventSlave.weight > 130) { + r.push(`fat belly`); + } else if (eventSlave.belly >= 10000) { + if (eventSlave.bellyFluid >= 10000) { + r.push(`${eventSlave.inflationType}-stuffed`); + } else if (eventSlave.bellyPreg >= 1500) { + r.push(`enormously pregnant`); + } else { + r.push(`enormously distended`); + } + r.push(`belly`); + } else if (eventSlave.weight > 30) { + r.push(`soft belly`); + } else if (eventSlave.belly >= 1500) { + if (eventSlave.bellyFluid >= 1500) { + r.push(`${eventSlave.inflationType}-filled`); + } else if (eventSlave.bellyPreg >= 1500) { + r.push(`pregnant`); + } else { + r.push(`implant rounded`); + } + r.push(`belly`); + } else if (eventSlave.muscles > 30) { + r.push(`ripped abs`); + } else if (eventSlave.muscles > 5) { + r.push(`toned stomach`); + } else { + r.push(`middle`); + } + r.push(`against the edge of the counter as ${he} leans forward a little to`); + if (eventSlave.makeup !== 0) { + r.push(`finish ${his} makeup,`); + } else { + r.push(`apply lotion to ${his} face,`); + } + r.push(`${his} ${eventSlave.nipples} nipples are`); + if (eventSlave.boobs > 6000) { + r.push(`pressed against the mirror.`); + } else if (eventSlave.boobs > 4000) { + r.push(`almost brushing the mirror.`); + } else if (eventSlave.boobs > 2000) { + r.push(`halfway to the mirror.`); + } else { + r.push(`over the sink.`); + } + r.push(`${He}'s concentrating on ${his} task, and every little motion of ${his} ${arms} makes ${his} spectacularly pointed breasts sway a little.`); + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Give them a surprise massage`, surprise), + (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) + ? new App.Events.Result(`Make ${him} bounce them painfully`, bounce, ((eventSlave.vagina === 0 && canDoVaginal(eventSlave)) || (eventSlave.anus === 0 && canDoAnal(eventSlave))) ? `This option will take ${his} virginity` : null) + : new App.Events.Result() + ]); + + function surprise() { + const r = new SpacedTextAccumulator(); + r.push(`You move stealthily up behind ${him} in a predatory crouch, your arms forward and your fingers spread. When ${he} reaches up to`); + if (eventSlave.makeup !== 0) { + r.push(`do ${his} eyes,`); + } else { + r.push(`massage ${his} forehead,`); + } + r.push(`you take advantage of ${his} newly vulnerable flanks and reach around ${him} to take ${his} torpedo tits in hand. ${He}`); + if (eventSlave.voice !== 0) { + r.push(`howls`); + } else { + r.push(`makes the raspy noise that mute slaves make when`); + } + r.push(`in shock, writhing away from the grasping digits. Your hands aren't particularly cold, but ${he}'s deliciously warm from the shower and you're holding onto ${him} firmly. ${His}`); + if (eventSlave.butt > 12) { + r.push(`titanic ass`); + } else if (eventSlave.butt > 5) { + r.push(`massive ass`); + } else if (eventSlave.butt > 2) { + r.push(`plush bottom`); + } else { + r.push(`trim behind`); + } + r.push(`bumps into you as ${he} recoils, and ${he} freezes, realizing who you are. You slide your grip back towards ${him}, down away from the point of each tit, grab ${his} back where ${he}'s broader, and knead ${him} gently, moving forward down ${his} breasts.`); + if (eventSlave.fetish === "boobs") { + if (eventSlave.fetishKnown !== 1) { + r.push(`${His} chest swells in your embrace as ${he} sucks in ${his} breath, stiffening with arousal. ${He} seems to <span class="lightcoral">love breast play,</span> and if properly encouraged, might orgasm to it.`); + eventSlave.fetishKnown = 1; + } else { + r.push(`${He} stiffens with arousal, since breast play is the main sexual event as far as ${he}'s concerned.`); + if (canAchieveErection(eventSlave) && (eventSlave.chastityPenis === 1)) { + r.push(`There's an audible little smack as ${he} achieves an erection, bringing ${his} dickhead against the bottom of the counter.`); + } + } + } else if (eventSlave.devotion > 50) { + r.push(`${He} softens into your`); + if (V.PC.boobs >= 300) { + r.push(`bosom,`); + } else { + r.push(`chest,`); + } + r.push(`wriggling ${his} back into you to get comfortable.`); + } else if (eventSlave.devotion > 20) { + r.push(`${He} makes an effort to relax, and you can feel the stiffness go out of ${his} back, pressed against your`); + if (V.PC.boobs >= 300) { + r.push(`bosom.`); + } else { + r.push(`chest.`); + } + } else { + r.push(`${He} remains stiff and afraid, shivering a little against your`); + if (V.PC.boobs >= 300) { + r.push(`bosom.`); + } else { + r.push(`chest.`); + } + } + r.push(`${He} expects to get fucked, but you just massage ${his} breasts thoroughly, give ${his}`); + if (eventSlave.pregKnown === 1) { + r.push(`belly`); + } else { + r.push(`butt`); + } + r.push(`a possessive pat, and continue on your way. ${He} thanks you`); + if (eventSlave.devotion > 50) { + r.push(`with touching sincerity`); + } else if (eventSlave.devotion > 20) { + r.push(`sincerely`); + } else { + r.push(`hesitantly`); + } + r.push(`and returns to ${his} business, <span class="mediumaquamarine">smiling a little.</span>`); + eventSlave.trust += 4; + if (eventSlave.lactation > 0) { + eventSlave.lactationDuration = 2; + eventSlave.boobs -= eventSlave.boobsMilk; + eventSlave.boobsMilk = 0; + } else { + r.push(induceLactation(eventSlave, 3)); + } + r.toParagraph(); + return r.container(); + } + + function bounce() { + const r = new SpacedTextAccumulator(); + r.push(`Appearing behind ${him}, you order ${him} to bounce up and down. You don't mention ${his} prominent tits, but ${he} knows exactly what you mean and is`); + if (eventSlave.devotion > 50) { + r.push(`eager to please.`); + } else if (eventSlave.devotion > 20) { + r.push(`willing to please.`); + } else { + r.push(`willing to debase ${himself} to avoid punishment.`); + } + r.push(`${He} bounces up and down, watching for your reaction in the mirror. Harder, you tell ${him}, and ${he} bounces harder. Harder, you tell ${him} again, and then again. ${He} jumps up and down hard enough that ${his} promontories slap painfully against ${him},`); + if (eventSlave.fetish === "masochist") { + if (eventSlave.fetishKnown !== 1) { + r.push(`making ${him} gasp with arousal. ${He} stares at ${himself} in shock, and then at your reflection, mystified and a little frightened that you might have seen. You did see, and you're not perplexed. ${eventSlave.slaveName} is a <span class="lightcoral">sexual masochist,</span> and if properly encouraged, can probably be trained to be a proper slut for pain.`); + eventSlave.fetishKnown = 1; + } else { + r.push(`making the masochistic ${SlaveTitle(eventSlave)} gasp with arousal.`); + } + } else if (eventSlave.devotion > 50) { + r.push(`extracting a gasp as ${he} willingly causes ${himself} considerable discomfort at your command.`); + } else if (eventSlave.devotion > 20) { + r.push(`making ${him} wince. ${He} starts to look afraid.`); + } else { + r.push(`and ${he} starts to cry, more from fear than from the pain.`); + } + r.toParagraph(); + r.push(`Pleased, you tell ${him} to keep it up as best ${he} can, and trap ${his} hips against the edge of the counter before sliding`); + if (V.PC.dick !== 0) { + r.push(`your cock`); + } else { + r.push(`a strap-on`); + } + if (canDoVaginal(eventSlave)) { + r.push(`into ${his} pussy.`); + } else { + r.push(`up ${his} asshole.`); + } + r.push(`It's not a comfortable angle, and between the rough penetration and the continued mammary torture,`); + if (eventSlave.fetish === "masochist") { + r.push(`${he} orgasms promptly`); + if (eventSlave.balls > 0) { + r.addToLast(`, scattering cum all over the counter`); + } + } else { + r.push(`tears begin to run down ${his} cheeks`); + } + r.addToLast(`. When you climax, you grab the undersides of ${his} breasts and hoist ${him} up in a parody of exaltation, thrusting as far into ${him} as you can manage`); + if (V.PC.dick !== 0) { + r.push(`and`); + if (canDoVaginal(eventSlave)) { + r.push(`coming inside ${him}`); + } else { + r.push(`blowing your load in ${his} butt`); + } + } + r.addToLast(`. The thrust, the lift, and the harsh hold on ${his} poor boobs extracts`); + if (eventSlave.voice !== 0) { + r.push(`a shriek`); + } else { + r.push(`the pathetic little gasping noise that mute slaves make when in agony`); + } + r.push(`from ${his}`); + if (eventSlave.lactation > 0) { + r.addToLast(`, not to mention`); + if (eventSlave.lactation === 1) { + r.push(`a few drops of milk`); + } else { + r.push(`an ejaculation-like stream of milk`); + } + r.push(`from each of ${his} nipples`); + } + r.addToLast(`. You discard your toy on the counter,`); + if (eventSlave.fetish === "masochist") { + r.push(`leaving the poor pain addict in a state of <span class="hotpink">high sexual satiation,</span> even if ${he} does move ${his} battered breasts gingerly as ${he} climbs down.`); + eventSlave.devotion += 4; + } else { + r.push(`leaving ${him} to climb down ${himself}, <span class="gold">fearfully</span> watching your receding back as ${he} gets off the counter, favoring ${his} battered breasts.`); + eventSlave.trust -= 4; + } + r.push(VCheck.Simple(eventSlave, 1)); + r.toParagraph(); + return r.container(); + } + } +}; diff --git a/src/events/RESS/review/transitionAnxiety.js b/src/events/RESS/review/transitionAnxiety.js new file mode 100644 index 0000000000000000000000000000000000000000..d89ca44c581508c49b682021c5b029df6c0b368f --- /dev/null +++ b/src/events/RESS/review/transitionAnxiety.js @@ -0,0 +1,431 @@ +App.Events.RESSTransitionAnxiety = class RESSTransitionAnxiety extends App.Events.BaseEvent { + eventPrerequisites() { + return []; // always valid if sufficient actors can be cast successfully + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + hasAnyLegs, + s => s.assignment !== Job.QUARTER, + s => s.devotion <= 20, + s => s.trust <= -20, + s => s.genes === "XY", + s => s.dick > 0, + s => s.chastityPenis !== 1, + s => s.vagina === -1, + s => s.attrXY < 50, + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + His, He, he, his, him, himself, girl + } = getPronouns(eventSlave); + const {hisP} = getPronouns(V.PC).appendSuffix("P"); + const belly = bellyAdjective(eventSlave); + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + const r = new SpacedTextAccumulator(node); + r.push( + App.UI.DOM.slaveDescriptionDialog(eventSlave), + `stumbles into your office naked for ${his} weekly inspection, so apprehensive that ${he} can hardly walk. ${He}'s been like this ever since ${he} became one of your sex slaves,`, + ); + if (V.week-eventSlave.weekAcquired === 0) { + r.push(`just this week.`); + } else if (V.week-eventSlave.weekAcquired === 1) { + r.push(`just last week.`); + } else { + r.push(`${V.week-eventSlave.weekAcquired} weeks ago.`); + } + r.push(`It's not surprising; slaves like ${him} usually require some time and training to accept that they're slavegirls. ${He} lacks the natural attraction to men that might have made the idea more comfortable for ${him}, and the resulting sexual anxiety combined with understandable fear of sexual use makes ${him} extremely unhappy to be naked in front of someone ${he} knows can fuck ${him} at will.`); + r.toParagraph(); + r.push(`${He} has ${his} hands balled into fists at ${his} sides, and clearly wants nothing more than to use them to cover ${his}`); + if (eventSlave.chastityPenis === 1) { + r.push(`pitiful caged dick.`); + } else if (eventSlave.balls === 0) { + r.push(`pathetic, ballsless bitchclit.`); + } else if (eventSlave.aphrodisiacs > 0 || eventSlave.inflationType === "aphrodisiac") { + r.push(`aphrodisiac-induced erection.`); + } else if (eventSlave.dick > 3) { + r.push(`impressively sized but pathetically soft dick.`); + } else { + r.push(`soft, pathetic little dick.`); + } + r.push(`${He} knows that that's not allowed, and keeps ${his} hands where they are, though it's a struggle. ${He}`); + if (canSee(eventSlave)) { + r.push(`sees you looking at`); + } else { + r.push(`knows you are eyeing`); + } + r.push(`${his} body like a slaveowner looks at one of ${hisP} sex slaves, and ${he} shivers.`); + + r.toParagraph(); + App.Events.addResponses(node, [ + canDoAnal(eventSlave) + ? new App.Events.Result(`Fuck ${him}`, fuck, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null) + : new App.Events.Result(), + new App.Events.Result(`Humiliate ${him} in public`, humiliate) + ]); + + function fuck() { + const r = new SpacedTextAccumulator(); + r.push(`You announce that you're going to fuck ${his}`); + if (eventSlave.anus === 0) { + r.push(`virgin`); + } + r.push(`asspussy. To your complete lack of surprise, ${he} can't hide ${his} horror at the prospect of`); + if (V.PC.dick !== 0) { + r.push(`having a cock inside ${him},`); + } else { + r.push(`being fucked with a strap-on,`); + } + r.push(`and ${his}`); + if (canSee(eventSlave)) { + r.push(`wide, ${App.Desc.eyesColor(eventSlave)} track`); + } else { + r.push(`terrified face follows`); + } + r.push(`your movements closely as you stand up and`); + if (V.PC.dick !== 0) { + r.push(`reveal the formidable member`); + } else { + r.push(`don the strap-on`); + } + r.push(`you're about to breed ${him} with. You order ${him} to`); + if (hasAnyLegs(eventSlave)) { + r.push(`kneel`); + } else { + r.push(`get`); + } + r.push(`on the couch, which ${he} does, <span class="trust dec">cringing in fear of being buttfucked, but knowing disobedience will be worse;</span> and then you order ${him} to reach down and spread ${his} butt for you, as wide as it'll go. ${He} complies,`); + if (eventSlave.butt > 12) { + r.push(`grabbing as much flesh as ${he} can of each monstrous buttock and heaving them as far apart as ${he} can manage in an attempt`); + } else if (eventSlave.butt > 6) { + r.push(`taking a handful of each massive buttock and heaving them apart to reveal ${his}`); + } else if (eventSlave.butt > 3) { + r.push(`pulling ${his} plush buttocks apart`); + } else { + r.push(`even though ${his} cute ass doesn't have to be spread`); + } + r.push(`to reveal ${his}`); + if (eventSlave.anus > 2) { + r.push(`whorish anal slit.`); + } else if (eventSlave.butt > 1) { + r.push(`relaxed rear hole.`); + } else { + r.push(`tight little rosebud.`); + } + r.push(`You let ${him} soak in ${his} discomfort,`); + if (V.PC.dick !== 0) { + r.push(`stroking your cock gently`); + } else { + r.push(`rubbing a little lube on the tip of your phallus`); + } + r.push(`and letting ${him} see how big it is. ${His} cringing even extends to ${his} asshole,`); + if (eventSlave.analArea > 3) { + r.push(`the huge area of crinkled skin`); + } else if (eventSlave.analArea > 1) { + r.push(`the crinkled skin around ${his} anus`); + } else { + r.push(`${his} little pucker`); + } + r.push(`tensing as ${he} anticipates anal sex.`); + eventSlave.trust -= 3; + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Make sure ${he} gets off on it`, off), + new App.Events.Result(`Rape ${him}`, rape), + ]); + return r.container(); + + function off() { + const r = new SpacedTextAccumulator(); + r.push(`You press`); + if (V.PC.dick !== 0) { + r.push(`yourself`); + } else { + r.push(`your weapon`); + } + r.push(`past ${his} sphincter with care, and ${his} posture softens a little as ${he} realizes you aren't going to hurt ${him}. Once you've hilted`); + if (V.PC.dick !== 0) { + r.push(`your cock`); + } else { + r.push(`the strap-on`); + } + r.push(`inside ${him}, you caress ${his}`); + if (eventSlave.belly >= 150000) { + r.push(`${belly} distended`); + } else if (eventSlave.weight > 95) { + r.push(`fat`); + } else if (eventSlave.belly >= 5000) { + if (eventSlave.bellyPreg >= 3000) { + r.push(`pregnancy swollen`); + } else if (eventSlave.bellyImplant >= 3000) { + r.push(`implant swollen`); + } else { + r.push(`${eventSlave.inflationType}-bloated`); + } + } else if (eventSlave.weight > 30) { + r.push(`chubby`); + } else if (eventSlave.waist < -95) { + r.push(`narrow`); + } else if (eventSlave.muscles > 30) { + r.push(`muscular`); + } else if (eventSlave.waist < -10) { + r.push(`wasp`); + } else if (eventSlave.weight > 10) { + r.push(`soft`); + } else if (eventSlave.muscles > 5) { + r.push(`toned`); + } else { + r.push(`thin`); + } + r.push(`waist, running your hands across ${his} skin. Then you`); + if (eventSlave.clitPiercing === 3) { + r.push(`activate ${his} smart frenulum piercing.`); + } else { + r.push(`secure a couple of little egg vibes to ${his} dick.`); + } + r.push(`${He} gasps as the vibration starts, and then gasps again as ${his} anus tightens involuntarily with the stimulation, squeezing the`); + if (V.PC.dick !== 0) { + r.push(`warm penis`); + } else { + r.push(`phallus`); + } + r.push(`that fills it. ${He}`); + if (eventSlave.voice > 0) { + r.push(`moans openly`); + } else { + r.push(`rasps mutely`); + } + r.push(`as you pull out and then thrust into ${him}. Much against ${his} will, ${he}`); + if (canAchieveErection(eventSlave)) { + r.push(`quickly becomes erect.`); + } else { + r.push(`starts to drip precum, which is ${his} ballsless body's way of showing arousal.`); + } + if (eventSlave.fetish === "buttslut") { + if (eventSlave.fetishKnown === 1) { + if (eventSlave.fetishStrength > 95) { + r.push(`Every time ${he} takes it up the butt, ${he}'s reminded that ${he}'s a natural buttslut, and the reminder <span class="fetish inc">helps ${him} relax and accept sodomy.</span>`); + eventSlave.fetishStrength += 10; + } else { + r.push(`${He} knows ${he} gets off easily on anal stimulation, but taking it like this still isn't ${his} favorite activity. Still, the`); + if (eventSlave.prostate > 0) { + r.push(`prostate`); + } else { + r.push(`rectal`); + } + r.push(`stimulation does its work, and ${he} <span class="devotion inc">submits to having ${his} favorite hole pleasured.</span>`); + eventSlave.devotion += 3; + } + } else { + r.push(`You notice that ${he} stiffens again, looking down at ${his} traitorous member in shock at how much ${he} enjoys the sensation of`); + if (eventSlave.prostate > 0) { + r.push(`prostate`); + } else { + r.push(`rectal`); + } + r.push(`stimulation. <span class="fetish gain">${He}'s a buttslut!</span>`); + eventSlave.fetishKnown = 1; + } + } + r.push(VCheck.Anal(eventSlave, 1)); + r.push(`Not long after you penetrate ${him}, ${he}`); + if (eventSlave.balls > 0) { + r.push(`squirts a weak ejaculation onto the couch.`); + } else { + r.push(`shivers and releases some watery fluid.`); + } + r.push(`${He} had almost forgotten that ${he} was being fucked like a girl, and stiffens uncomfortably when ${he} feels you`); + if (V.PC.dick !== 0) { + r.push(`fill ${his} rectum with your hot seed.`); + } else { + r.push(`grip ${his} hips harder and shake with your own climax.`); + } + r.push(`As ${he} gets up from the couch, ${he} seems <span class="devotion inc">subdued and submissive.</span> After all, if ${he}'s submitting to you, that absolves ${him} of responsibility for what ${he}'s becoming.`); + eventSlave.devotion += 5; + r.toParagraph(); + return r.container(); + } + + function rape() { + const r = new SpacedTextAccumulator(); + r.push(`You grab ${his} hips, getting a good grip, and spear the poor ${SlaveTitle(eventSlave)} without any hint of mercy. ${He}`); + if (eventSlave.voice > 0) { + r.push(`screams in pain and fear,`); + } else { + r.push(`sucks in a great sobbing gasp,`); + } + r.push(`and tries to wriggle away despite ${his} intention of submitting to your use, but you hold ${him} in place and rape ${his} ass.`); + r.push(VCheck.Anal(eventSlave, 1)); + r.push(`${He} tries to maintain ${his} position, crying openly, but eventually slides off ${his} perch on the couch, pulling ${his} hole off your`); + if (V.PC.dick !== 0) { + r.push(`dick.`); + } else { + r.push(`strap-on.`); + } + r.push(`You grab ${him} by`); + if (eventSlave.hLength > 20) { + r.push(`hair`); + } else { + r.push(`neck`); + } + r.push(`and smash ${his} face into the angle of the couch, leaving ${his} poor butt completely vulnerable. ${He} can't see you line up to ream ${him} again, but ${he} knows it's coming and cries, quivering. After a while, you haul ${him} up to ${his} feet and keep fucking ${him}, the uncomfortable angle of standing anal forcing new`); + if (eventSlave.voice > 0) { + r.push(`squeals`); + } else { + r.push(`rasps`); + } + r.push(`out of ${him}. You pour degradation into ${his} ear as you take your pleasure from ${his} unhappy body, telling ${him} that ${he}'s your fuckmeat. ${He} believes you, and when you finally orgasm and let ${him} slide off your hateful`); + if (V.PC.dick !== 0) { + r.push(`penis,`); + } else { + r.push(`strap-on,`); + } + r.push(`${he}'s <span class="trust dec">already terrified</span> of the next time you feel like fucking ${him}.`); + eventSlave.trust -= 5; + r.toParagraph(); + return r.container(); + } + } + + function humiliate() { + const r = new SpacedTextAccumulator(); + r.push(`You get up from behind your desk, drawing an apprehensive`); + if (canSee(eventSlave)) { + r.push(`stare.`); + } else { + r.push(`look.`); + } + r.push(`To ${his} bemusement, you order ${him} to follow you and leave your office. ${He} hurries to obey, ${his} footsteps pattering along behind you, but they become much more hesitant as you make your way out of the penthouse and ${he} realizes that ${he}'s about to be in public, naked. You don't bother looking back, knowing that ${he}'s sufficiently afraid of you to obey. On the border between your private domain and the public hustle and bustle of the arcology's public life, ${he} stops for a long moment before scurrying to catch up with you, barely even noticing that <span class="devotion inc">${he} just swallowed ${his} sense of shame</span> to obey you and avoid punishment. You stroll along, greeting leading citizens and taking in the hum of your people. ${eventSlave.slaveName} grows increasingly embarrassed under the hot stares of passersby, cringing closer and closer to your protective side as ${he} notices how`); + if (canSee(eventSlave)) { + r.push(`many gazes rest with open hunger on`); + } else { + r.push(`many lewd comments focus on`); + } + r.push(`${his} mouth, ${his} crotch, and ${his} ass.`); + eventSlave.devotion += 3; + + r.toParagraph(); + App.Events.addResponses(node, [ + new App.Events.Result(`Make ${him} perform oral on you, right here`, perform), + new App.Events.Result(`Make ${him} cum in public`, cum) + ]); + + return r.container(); + + function perform() { + const r = new SpacedTextAccumulator(); + r.push(`You reach around, place a dominating hand on ${his} shoulder, pull ${him} around in front of you, and push ${him} down to ${his} knees. ${He} quickly realizes what's coming, and ${his} ${eventSlave.skin} cheeks blush furiously as you reveal your`); + if (V.PC.dick !== 0) { + r.push(`meaty dick`); + } else { + r.push(`flushed pussy`); + } + r.push(`and offer it to ${him}. ${He} gets busy, burying ${his} head against you with a speed that seems surprising until it occurs to you that this allows ${him} to hide ${his} face. Deciding to accept this tiny compromise, you run a possessive hand`); + if (eventSlave.hLength < 5) { + r.push(`across ${his} smooth scalp`); + } else if (eventSlave.hLength < 20) { + r.push(`through ${his} short hair`); + } else { + r.push(`through ${his} tresses`); + } + r.push(`and murmur praise for ${his} enthusiasm. ${He} stiffens at the implication that ${he} wants to be`); + if (V.PC.dick !== 0) { + r.push(`polishing your penis`); + } else { + r.push(`eating you out`); + } + r.push(`in broad daylight, but after a slight pause ${he} decides that this isn't bad. As`); + if (V.PC.dick !== 0) { + r.push(`${his} head continues to bob back and forth as ${he} sucks your dick,`); + } else { + r.push(`${he} continues nuzzling ${his} nose and mouth against your wet cunt,`); + } + r.push(`${he} fails to notice ${his} <span class="devotion inc">second major submission today.</span>`); + if (eventSlave.fetish === "humiliation") { + if (eventSlave.fetishKnown === 1) { + r.push(`Since ${he} has a humiliation fetish, the embarrassment has been arousing ${him} even as it's been torturing ${him}. Unsatisfied with just this, ${his} need to be shamed obliges ${him} to cock ${his} hips and make sure onlookers can see ${his} asspussy as ${he} services you with ${his} mouth.`); + if (eventSlave.fetishStrength > 95) { + r.push(`<span class="fetish inc">${His} need for humiliation has deepened.</span>`); + eventSlave.fetishStrength += 10; + } else { + r.push(`Such abject sluttery <span class="devotion inc">helps convince ${him} of ${his} status as a slave ${girl}.</span>`); + eventSlave.devotion += 3; + } + } else { + r.push(`To your surprise, ${he} even starts to glance around, checking to verify that ${he}'s still being watched. <span class="fetish gain">${He}'s a humiliation slut!</span>`); + eventSlave.fetishKnown = 1; + } + } + eventSlave.devotion += 5; + seX(eventSlave, "oral", V.PC, "penetrative"); + r.toParagraph(); + return r.container(); + } + function cum() { + const r = new SpacedTextAccumulator(); + r.push(`You produce three little egg vibrators, which instantly steal ${his} anxious attention away from the passersby who`); + if (canSee(eventSlave)) { + r.push(`stare`); + } else { + r.push(`whistle catcalls`); + } + r.push(`at ${him}. You require ${him} to hold ${his} dick out while you use an elastic band to attach one of the vibrators to the underside of its head. ${He} doesn't get to touch ${himself} much anymore, and the half-forgotten sensations of doing so almost make ${him} forget that ${he}'s naked in public, and almost certainly about to do something very embarrassing. Then you order ${him} to hold ${his} dick up and place another vibrator`); + if (eventSlave.scrotum > 0) { + r.push(`against ${his} sensitive scrotum.`); + } else { + r.push(`against the sensitive skin where ${his} scrotum used to be.`); + } + r.push(`Finally, you order ${him} to bend over and offer you ${his} asshole. ${He} obeys, with apprehension, and is actually relieved when you just place the final vibrator against, but not inside, ${his}`); + if (eventSlave.anus > 1) { + r.push(`asspussy.`); + } else { + r.push(`pucker.`); + } + r.push(`${He} finds ${himself} ordered to kneel and put ${his} hands on ${his} head; and ordering ${him} to hold this position, you use remote control of the vibrators to force ${him} to cum twice. ${He} can't`); + if (canSee(eventSlave)) { + r.push(`tear ${his} eyes away from`); + } else { + r.push(`tune out`); + } + r.push(`the citizens who stare and laugh as ${he}`); + if (eventSlave.balls > 0) { + r.push(`spurts ${his} seed`); + } else { + r.push(`dribbles weakly`); + } + r.push(`onto the floor.`); + if (eventSlave.fetish === "humiliation") { + if (eventSlave.fetishKnown === 1) { + if (eventSlave.fetishStrength > 95) { + r.push(`Though ${he}'s still unhappy about being a slave ${girl}, <span class="fetish inc">appetite for humiliation has deepened.</span>`); + eventSlave.fetishStrength += 10; + } else { + r.push(`The abject humiliation slut climaxes harder each time, and can't stop ${himself} <span class="trust inc">glancing at you with something like trust.</span>`); + eventSlave.trust += 3; + } + } else { + r.push(`With a mix of horror and dawning arousal, ${he} discovers that ${he} enjoys the stares. <span class="fetish gain">${He}'s a humiliation slut!</span>`); + eventSlave.fetishKnown = 1; + } + } + r.push(`As ${he} follows you back to your penthouse, ${he} seems almost cheerful, and will definitely be <span class="trust inc">more trusting of strange orders</span> in the future.`); + eventSlave.trust += 5; + r.toParagraph(); + return r.container(); + } + } + } +}; diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index 1b9c9db11fff652e75d67f0660855039b0788767..9baf6a5f2e000a65640fe50c7b1392e1b91d7672 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -22,11 +22,13 @@ App.Events.getIndividualEvents = function() { new App.Events.RESSBedSnuggle(), new App.Events.RESSBirthday(), new App.Events.RESSBondageGear(), + new App.Events.RESSBondedLove(), new App.Events.RESSBreedingBull(), new App.Events.RESSCageRelief(), new App.Events.RESSCockFeederResistance(), new App.Events.RESSComfortableSeat(), new App.Events.RESSCoolerLockin(), + new App.Events.RESSCowMilking(), new App.Events.RESSCumslutWhore(), new App.Events.RESSDesperatelyHorny(), new App.Events.RESSDevotedAnalVirgin(), @@ -46,7 +48,9 @@ App.Events.getIndividualEvents = function() { new App.Events.RESSFearfulHumiliation(), new App.Events.RESSForbiddenMasturbation(), new App.Events.RESSFrighteningDick(), + new App.Events.RESSFucktoyTribbing(), new App.Events.RESSGaggedSlave(), + new App.Events.RESSHappyDance(), new App.Events.RESSHatesOral(), new App.Events.RESSHeavyPiercing(), new App.Events.RESSHeels(), @@ -85,6 +89,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RESSObedientIdiot(), new App.Events.RESSObedientShemale(), new App.Events.RESSObjectifyingVisit(), + new App.Events.RESSOrchiectomyPlease(), new App.Events.RESSPAFlirting(), new App.Events.RESSPAServant(), new App.Events.RESSPassingDeclaration(), @@ -108,16 +113,21 @@ App.Events.getIndividualEvents = function() { new App.Events.RESSShiftDoorframe(), new App.Events.RESSShiftMasturbation(), new App.Events.RESSShiftSleep(), + new App.Events.RESSShowerSlip(), new App.Events.RESSSlaveDickHuge(), new App.Events.RESSSlaveOnSlaveClit(), new App.Events.RESSSlaveOnSlaveDick(), new App.Events.RESSSleepingAmbivalent(), new App.Events.RESSSolitaryDesperation(), new App.Events.RESSSoreAss(), + new App.Events.RESSSubjugationBlues(), new App.Events.RESSSuppositoryResistance(), new App.Events.RESSSurgeryAddict(), new App.Events.RESSTendonFall(), + new App.Events.RESSTittymonsterInspection(), new App.Events.RESSTooThinForCumDiet(), + new App.Events.RESSTorpedoSqueeze(), + new App.Events.RESSTransitionAnxiety(), new App.Events.RESSTrustingHG(), new App.Events.RESSUnhappyVirgin(), new App.Events.RESSUsedWhore(), diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index 20681d19154b01e0f1be03460bf1b88107eca2c0..36bbefb5efe7ed271adeb86435022d47aebc4b62 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -6,20 +6,6 @@ globalThis.generateRandomEventPool = function(eventSlave) { if (eventSlave.fetish !== "mindbroken") { if (hasAnyArms(eventSlave) && hasAnyLegs(eventSlave)) { if (canTalk(eventSlave)) { - if (eventSlave.assignment !== Job.QUARTER) { - if (eventSlave.skill.entertainment >= 60 || ["a ballerina", "a camgirl", "a camwhore", "a cheerleader", "a classical dancer", "a dancer", "a house DJ", "a party girl", "an aspiring pop star", "an exotic dancer", "an idol"].includes(eventSlave.career)) { - if (canHear(eventSlave)) { - if (eventSlave.health.condition > 40) { - if (eventSlave.devotion > 50) { - if (eventSlave.trust > 50) { - V.RESSevent.push("happy dance"); - } - } - } - } - } - } - if (eventSlave.assignment !== Job.QUARTER) { if (eventSlave.muscles > 5) { if (eventSlave.devotion > 20) { @@ -89,38 +75,6 @@ if(eventSlave.drugs === "breast injections") { } } } - - if (eventSlave.lactation > 0) { - if (eventSlave.boobs > 800) { - if (eventSlave.nipples !== "fuckable") { - if (eventSlave.devotion > 20) { - if (eventSlave.trust > 20) { - V.RESSevent.push("cow milking"); - } - } - } - } - } - - if (V.arcologies[0].FSSubjugationist !== "unset") { - if (eventSlave.race !== V.arcologies[0].FSSubjugationistRace) { - if (V.week - eventSlave.weekAcquired > 1) { - if (V.week - eventSlave.weekAcquired < 10) { - if (eventSlave.devotion < -20) { - if (eventSlave.trust >= -20) { - if (eventSlave.health.condition > -20) { - if (eventSlave.race === eventSlave.origRace) { - if (eventSlave.indentureRestrictions < 1) { - V.RESSevent.push("subjugation blues"); - } - } - } - } - } - } - } - } - } if (eventSlave.assignment !== Job.QUARTER) { if (eventSlave.drugs === "intensive breast injections" || eventSlave.drugs === "hyper breast injections") { if (eventSlave.boobs <= 8000) { @@ -185,62 +139,6 @@ if(eventSlave.drugs === "breast injections") { } } /* closes mute exempt */ - if (eventSlave.assignment !== Job.QUARTER) { - if (eventSlave.devotion <= 20) { - if (eventSlave.trust <= -20) { - if (eventSlave.genes === "XY") { - if (eventSlave.dick > 0) { - if (eventSlave.chastityPenis !== 1) { - if (eventSlave.vagina === -1) { - if (eventSlave.attrXY < 50) { - V.RESSevent.push("transition anxiety"); - } - } - } - } - } - } - } - } - - if (eventSlave.assignment !== Job.QUARTER) { - if (eventSlave.boobs > 600) { - if (eventSlave.boobShape === "torpedo-shaped") { - if (eventSlave.devotion >= -50) { - V.RESSevent.push("torpedo squeeze"); - } - } - } - if (eventSlave.balls > 0) { - if (eventSlave.hormoneBalance >= 100) { - if (V.hormoneUpgradeMood === 0) { - if (eventSlave.trust >= -50) { - if (eventSlave.devotion >= -20) { - if (eventSlave.devotion <= 50) { - V.RESSevent.push("orchiectomy please"); - } - } - } - } - } - } - } - if (eventSlave.trust > 20) { - if (eventSlave.devotion > 50) { - if (V.PC.belly < 5000) { - V.RESSevent.push("shower slip"); - } - } - } - - if (eventSlave.relationship <= -2) { - if (eventSlave.trust > 50) { - if (eventSlave.devotion > 50) { - V.RESSevent.push("bonded love"); - } - } - } - if (eventSlave.assignment !== Job.QUARTER) { if (eventSlave.boobs > 800) { if (Math.floor(eventSlave.boobsImplant / eventSlave.boobs) >= 0.60) { @@ -260,33 +158,6 @@ if(eventSlave.drugs === "breast injections") { } } /* closes amp/crawling exempt */ - if (canTalk(eventSlave)) { - if ([Job.CONCUBINE, Job.FUCKTOY, Job.MASTERSUITE].includes(eventSlave.assignment)) { - if (eventSlave.devotion > 20) { - if (eventSlave.trust >= -20) { - if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) { - if (canDoVaginal(eventSlave)) { - if (V.PC.vagina > -1) { - if (eventSlave.dick === 0) { - if (fuckSlavesLength() > 2) { - V.RESSevent.push("fucktoy tribbing"); - } - } - } - } - } - } - } - } - } /* closes mute exempt */ - if (eventSlave.assignment !== Job.QUARTER) { - if (eventSlave.boobs > 25000) { - if (eventSlave.belly < 100000) { - V.RESSevent.push("tittymonster inspection"); - } - } - } - if (V.assistant.personality === 1) { if (eventSlave.fetishKnown === 1) { if (eventSlave.energy > 95) { diff --git a/src/js/pregJS.js b/src/js/pregJS.js index a124fa7a0264521b51c825d81ac4c04d864b0948..6c4186076788f39671caf09ead1fae7e3f732a87 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -423,7 +423,7 @@ globalThis.setPregType = function(actor) { * @param {number} chance is the % chance to conceive. * @param {0|1|2} hole control's the hole involved (0 - vagina, 1 - ass, 2 - both). .mpreg did this. * @param {number} [fatherID] is the ID of her sire or 0 if undefined. - * @returns {string} + * @returns {string} Returns "${He} has become pregnant." if relevant */ globalThis.knockMeUp = function(target, chance, hole, fatherID) { let r = ``; diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index 6cd73c198e0bd61e3e10b13a0301973106f83559..e97ab6c05e720d4d9eac055b560057c0983efb00 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -45,25 +45,16 @@ <<if [ "ara ara", "back stretch", -"bonded love", "breast expansion blues", "confident tanning", "devoted exhibition", "devoted lotion", "desperate null", -"fucktoy tribbing", "gaped asshole", -"happy dance", "implant inspection", -"orchiectomy please", -"shower slip", "sore shoulders", "spa boobs", -"subjugation blues", -"terrified inspection", -"tittymonster inspection", -"torpedo squeeze", -"transition anxiety"].includes($RESSevent)>> +"terrified inspection"].includes($RESSevent)>> <<set $activeSlave.clothes = "no clothing">> <</if>> @@ -340,321 +331,6 @@ in the middle of the room with the machines all around $him. $He has <<if canDoV <br><br> The source of the many-voiced personal assistant becomes clear: probably on the incorrigible $activeSlave.slaveName's request, your sultry personal assistant is voicing each and every one of the machines. When the nymphomaniac masturbator tries to smile <<if hasAnyArms($activeSlave)>> and wave<</if>>, there's an absolute chorus of "Back to work, slut", "Smile less, suck more", "Take it, bitch", et cetera. Yet another instance of $assistant.name chuckles in your ear. "Care to join in, <<= properTitle()>>? I'm sure we can find room somewhere." -<<case "fucktoy tribbing">> - -<<setNonlocalPronouns $seeDicks>> -With a mind as busy as yours, you sometimes wake up in the middle of the night for no reason that you can remember.<<if $PC.actualAge >= 50>> These incidents have become more common as you age; merely one of time's little mutilations.<</if>> Naturally, waking up in the middle of the night feels much different than it did back before you owned an arcology. Now you have your choice from a virtual buffet of sleeping slaves if you don't feel like going back to sleep right away. -<br><br> -The slave on your left is sleeping on _hisU back, and is touching you lightly at the hip and shoulder. The slave on your right, though, is nestled in close, $his shoulder under your arm and $his head resting gently on your -<<if $PC.boobs >= 1400>> - enormous <<if $PC.boobsImplant > 0>>firm<<else>>pillowy<</if>> breast. -<<elseif $PC.boobs >= 1200>> - huge <<if $PC.boobsImplant > 0>>firm<<else>>pillowy<</if>> breast. -<<elseif $PC.boobs >= 1000>> - big <<if $PC.boobsImplant > 0>>firm<<else>>soft<</if>> breast. -<<elseif $PC.boobs >= 300>> - bare breast. -<<elseif $PC.title == 0>> - flat chest. -<<else>> - toned chest. -<</if>> -$He's straddling your leg on that side, and as your waking consciousness coalesces, you become more and more aware <<if $activeSlave.belly >= 10000>>of the weight of $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>stomach<</if>> on your <<if $PC.belly >= 5000>>own gravid <</if>>middle and <</if>>that $his mons is pressed against your thigh. $He has one leg thrown over yours in $his sleeping embrace, placing $his own <<if $activeSlave.muscles > 30>>muscular<<elseif $activeSlave.weight > 10>>plush<<else>>feminine<</if>> thigh against your womanhood in turn. It's <<= App.UI.slaveDescriptionDialog($activeSlave)>>, and you feel yourself begin to grow wet as you gaze at $him in the dim light and feel $his slumbering heat. - -<<case "cow milking">> - -Heading back towards your office after seeing to a minor matter, you encounter <<= App.UI.slaveDescriptionDialog($activeSlave)>>, heading for the penthouse milkers. <<if $activeSlave.assignment == "get milked">>Though it's $his job to be a human cow, $he's allowed to roam as $he pleases when $he's not getting milked, being fed, or otherwise occupied, and $he must have been elsewhere.<<else>>$He's not assigned to be a human cow full time, since it's $his main focus to $activeSlave.assignment, but $he's still obliged to visit the milkers regularly.<</if>> In any case, $he's obviously in desperate need of a milking. $He's hurrying along with $his <<if $activeSlave.boobs > 4000>>absurd<<else>>heavy<</if>> udders cradled in both arms, trying desperately to shield them from the uncomfortable motion of walking. -<br><br> -<<if canSee($activeSlave)>>Seeing<<else>>Noticing<</if>> you, $he stops short and then winces as $his milk-filled breasts slosh to a stop, too. -<<if !canTalk($activeSlave)>> - $He gestures a submissive greeting and then hesitates, catching $his lower lip cutely behind $his upper teeth. Then $he politely asks if you would milk $him. -<<else>> - "Hi <<Master>>," $he <<say>>s in greeting, and then hesitates, catching $his lower lip cutely behind $his upper teeth. "Um, would you plea<<s>>e milk me?" -<</if>> -<<if $activeSlave.fetish == "boobs">>The shamelessly breast obsessed cow rarely misses an opportunity to ask for mammary intercourse, or anything remotely like it. Something as intimate as having you tug the milk from $his nipples would definitely qualify.<<else>>$He's not exactly a breast fetishist, but milking is nonetheless a deeply important activity for $him, emotionally; the neurochemical effects of continual lactation are strong. $He's so devoted to you that $he probably considers this a reassuringly intimate act.<</if>> - -<<case "tittymonster inspection">> - -You enter your office from other business a few minutes after the scheduled start of <<= App.UI.slaveDescriptionDialog($activeSlave)>>'s inspection. The <<if $boobAccessibility == 1>>accessibility aids for slaves with immobilizing breasts<<else>>slaves who helped $him in<</if>> have gone, leaving $him waiting for you in front of your desk. The sight is an arresting one. $He's kneeling, but $his boobs are so enormous that they're resting on the ground in front of $him, completely concealing $his body below the chest<<if $activeSlave.belly >= 120000>>, save for the protruding mass of $his <<if $activeSlave.pregType > 8>>hyper pregnant<<elseif $activeSlave.pregType > 4>><<print pregNumberName($activeSlave.pregType, 1)>>-filled<<else>>overly distended<</if>> belly<</if>>. With $his arm<<if hasBothArms($activeSlave)>>s<</if>> tucked back, and $his torso, <<if $activeSlave.belly < 120000>><<if $activeSlave.bellyPreg > 100>>pregnancy,<<elseif $activeSlave.belly > 100>>swollen stomach,<<else>>abdomen,<</if>><</if>> and legs hidden, $he appears to consist of a <<if $activeSlave.face > 95>>gorgeous<<elseif $activeSlave.face > 50>>beautiful<<elseif $activeSlave.face >= 10>>pretty<<elseif $activeSlave.face >= 0>>nice<<else>>homely<</if>>, $activeSlave.faceShape face, a -<<if $activeSlave.collar == "none">> - bare -<<else>> - collared -<</if>> -neck, $activeSlave.skin, <<if $activeSlave.muscles > 95>>hugely muscled<<elseif $activeSlave.muscles > 30>>strong<<elseif $activeSlave.shoulders > 0>>broad<<elseif $activeSlave.shoulders < 0>>feminine<<elseif $activeSlave.muscles > 5>>toned<<else>>soft<</if>> shoulders, and below that, breasts<<if $activeSlave.belly >= 120000>> parted by $his _belly dome of a stomach<</if>>. $He greets you <<if $activeSlave.devotion > 50>>devotedly, behaving for all the world like $he's pleased to be<<elseif $activeSlave.devotion >= -20>>properly, with just a hint of unhappiness about being<<else>>with more than a hint of resentment over being<</if>> pinned to the floor by $his own tits. - -<<case "bonded love">> - -Working in your office early in the morning, you can hear the low, human hum of your slaves who work during the daytime busily getting ready for their days. Suddenly, there's motion at your doorway, and <<= App.UI.slaveDescriptionDialog($activeSlave)>> hurries in. $He's nude, $his $activeSlave.skin skin glowing with the fresh cleanliness of having just gotten out of the shower. $He <<if canSee($activeSlave)>>glances at you<<elseif canHear($activeSlave)>>listens<<else>>waits<</if>> to see if $he's unwelcome, and seeing no sign that $he is, the devoted $desc comes over to your desk. -<<if $activeSlave.boobs < 400>> - $His little $activeSlave.boobShape tits barely move at all as $he walks, though $his $activeSlave.nipples nipples certainly catch your eye. -<<elseif ($activeSlave.boobsImplant/$activeSlave.boobs) >= .75>> /* tiny little 200cc implants in 20000cc tits are laughable. Now we make sure those tits are fake. */ - $His fake tits barely move at all as $he walks, their shape maintained by $his implants. -<<elseif $activeSlave.boobs < 1000>> - $His lovely $activeSlave.boobShape boobs move delightfully as $he walks, and $his $activeSlave.nipples nipples bounce prettily. -<<elseif $activeSlave.boobs < 2500>> - $His heavy, $activeSlave.boobShape breasts bounce up and down as $he walks, making $his $activeSlave.nipples nipples dance around distractingly. -<<else>> - $His massive, $activeSlave.boobShape udders jiggle alluringly as $he walks, and $his $activeSlave.nipples nipples sway from side to side distractingly. -<</if>> -Your eyes move down $his body, noting -<<if $activeSlave.bellyPreg >= 450000>> - $his _belly belly<<if $activeSlave.pregSource == -1>>, practically bursting with your child<<if $activeSlave.pregType > 1>>ren<</if>>,<</if>> and how $he struggles to walk with it while keeping all the kicking from throwing $him off balance. -<<elseif $activeSlave.belly >= 450000>> - $his _belly belly and how the struggles to walk with it without bumping things. -<<elseif $activeSlave.bellyPreg >= 150000>> - $his _belly belly<<if $activeSlave.pregSource == -1>>, completely filled with your child<<if $activeSlave.pregType > 1>>ren<</if>>,<</if>> and the slight movement within with each struggled step $he takes. -<<elseif $activeSlave.belly >= 150000>> - $his _belly belly and the vastly altered gait $he steps with to handle it. -<<elseif $activeSlave.bellyPreg >= 10000>> - $his full-term pregnant belly<<if $activeSlave.pregSource == -1>>, rounded with your child<<if $activeSlave.pregType > 1>>ren<</if>>,<<else>>, which<</if>> adds a distinct awkwardness to $his gait. -<<elseif $activeSlave.bellyFluid >= 10000>> - $his straining <<print $activeSlave.inflationType>>-filled belly and how $he struggles to walk normally with it. -<<elseif $activeSlave.bellyImplant >= 10000>> - $his full-term pregnancy-looking belly and how it adds a distinct awkwardness to $his gait. -<<elseif $activeSlave.bellyPreg >= 5000>> - $his hugely pregnant belly<<if $activeSlave.pregSource == -1>>, rounded with your child<<if $activeSlave.pregType > 1>>ren<</if>>,<<else>>, which<</if>> adds a certain unavoidable awkwardness to $his gait. -<<elseif $activeSlave.bellyFluid >= 5000>> - $his <<print $activeSlave.inflationType>>-filled belly and the delightful jiggle that runs through it with each step. -<<elseif $activeSlave.bellyImplant >= 5000>> - $his hugely rounded belly and the certain unavoidable awkwardness in $his gait it causes. -<<elseif $activeSlave.weight >= 95>> - $his big fat belly and how it sways and jiggles with each step. -<<elseif $activeSlave.bellyPreg >= 1500>> - $his pregnant belly<<if $activeSlave.pregSource == -1>>, swollen with your child<<if $activeSlave.pregType > 1>>ren<</if>>,<<else>>, which<</if>> isn't truly huge yet, but clearly advertises $his status as a breeding $desc. -<<elseif $activeSlave.bellyFluid >= 2000>> - the slight bloat to $his belly caused by the liters of $activeSlave.inflationType held inside $him. -<<elseif $activeSlave.bellyImplant >= 1500>> - $his slightly rounded belly, not truly noticeable, but enough to advertise $him as a breeding $desc, even though it's fake. -<<elseif $activeSlave.hips == 3>> - $his extremely wide hips and the cartoonish sway to them as $he walks. -<<elseif $activeSlave.muscles > 30>> - $his rippling abs, which work visibly as $he walks, flexing and straining powerfully underneath $his $activeSlave.skin skin. -<<elseif $activeSlave.waist < -95>> - $his cartoonish wasp waist and the way it emphasizes $his status as a sex toy. -<<elseif $activeSlave.hips > 0>> - $his wide hips and the sensual sway to them as $he walks. -<<elseif $activeSlave.waist < -10>> - $his nice narrow waist and the way it emphasizes the feminine swell of $his hips. -<<elseif $activeSlave.weight > 30>> - $his chubby belly and how it jiggles as $he walks, $his plush fat moving voluptuously with $him. -<<elseif $activeSlave.weight > 10>> - $his plush belly and how it jiggles a little as $he walks, giving $him a soft and sensual appeal. -<<else>> - $his trim belly before looking further down. -<</if>> -Below that, -<<if $activeSlave.dick > 0>> - <<if canAchieveErection($activeSlave)>> - $his cock is soft for once, probably from the shower; it - <<elseif $activeSlave.dick > 6>> - $his soft python of a cock - <<else>> - $his soft bitchclit - <</if>> - <<if $activeSlave.dick > 4>>flops around lewdly<<elseif $activeSlave.dick > 2>>bounces around<<else>>wiggles pathetically<</if>> as $he moves. -<<elseif $activeSlave.labia > 0>> - $his generous petals, flushed and a little full from the warmth of the shower, offer soft, healthy advertisement of $his womanhood. -<<elseif $activeSlave.clit > 0>> - $his prominent clit, flushed and a little full from the warmth of the shower, offers soft testament to $his female sexuality. -<<elseif $activeSlave.clitPiercing > 0>> - $his glinting <<if $activeSlave.dick == 0>>clit<<else>>dick<</if>> piercing catches your eye, just as it's meant to do. -<<elseif $activeSlave.vagina == -1>> - the smooth, featureless skin between $his legs is a little flushed; the tiny hole in it is barely noticeable. -<<else>> - $his healthy womanhood looks a little flushed from the warmth of the shower. -<</if>> -Coming to a stop, $he <<if $activeSlave.height > 190>>bends the long, long way down necessary to bring<<elseif $activeSlave.height < 155>>bends the amusingly short way down $he needs to bring<<else>>bends down<</if>> to bring $his<<if $activeSlave.lips > 40>> pillowy<<elseif $activeSlave.lipsPiercing > 0>> pierced<</if>> lips next to your ear. - -<br><br> - -<<if !canTalk($activeSlave)>> - $He mouths 'I love you, <<= getWrittenTitle($activeSlave)>>,' holding $his hands out in front of you both to say it in sign language at the same time. -<<else>> - "I love you, <<Master>>," $he whispers. -<</if>> - -<<case "shower slip">> - -<<= App.UI.slaveDescriptionDialog($activeSlave)>> finishes $his morning shower and sleepily turns to dry off. $He slips a little on the moist bathroom floor, trips over $his own feet, and starts to stumble. $His fall is immediately arrested as $he's caught by a pair of strong<<if $PC.title == 0>> yet feminine<</if>> arms. Coming to rest against -<<if $PC.boobs >= 1400 && $PC.belly >= 10000>> - a pair of enormous <<if $PC.boobsImplant > 0>>air bags<<else>>pillowlike breasts<</if>> and a hugely pregnant belly, -<<elseif $PC.belly >= 10000>> - a hugely pregnant middle, -<<elseif $PC.boobs >= 300>> - a pair of <<if $PC.boobsImplant == 0>>soft<<else>>firm<</if>> breasts, -<<elseif $PC.title == 0>> - a flat chest, -<<else>> - a well-muscled chest, -<</if>> -$he <<if canSee($activeSlave)>>looks up to find $himself gazing into your eyes<<else>>feels $his savior and recognizes these features as yours<</if>>. -<<if !canTalk($activeSlave)>> - $He mouths a surprised but genuine thank you. -<<else>> - "Thank<<s>>, <<Master>>," $he murmurs, getting over $his <<s>>urpri<<s>>e and relief. -<</if>> - -<br><br> - -Opportunities for gallantry didn't use to fall into your lap like this, but with a harem of busy sex slaves living and working in close proximity, they're common. For $his part, $activeSlave.slaveName doesn't seem to mind acting out bad romantic comedy. $He shows no sign of getting back to $his own feet, and nuzzles $his $activeSlave.skin cheek against your -<<if $PC.belly >= 10000>> - taut middle, -<<elseif $PC.boobs >= 300>> - boob, -<<elseif $PC.title == 0>> - cute nipple, -<<else>> - chest, -<</if>> -<<if canSee($activeSlave)>>staring<<else>>looking<</if>> up at you coquettishly. Apparently worrying that $his sexual availability isn't obvious enough, $he catches $his <<if $activeSlave.lips > 40>>enormous<<elseif $activeSlave.lips > 20>>plush<<else>>soft<</if>> lower lip behind $his teeth and bats $his eyes at you. -<<if ($activeSlave.teeth == "straightening braces") || ($activeSlave.teeth == "cosmetic braces")>> - $His braces make the flirty gesture look amusingly innocent<<if $activeSlave.visualAge > 35>> for such a mature $woman<</if>>. -<<elseif $activeSlave.teeth == "pointy">> - Somehow $he manages to make this look cute despite $his carnivorously pointed teeth. -<<elseif $activeSlave.teeth == "fangs">> - Somehow $he manages to make this look cute despite $his fangs. -<<elseif $activeSlave.teeth == "fang">> - $His lone fang makes the look more mischievous then $he intends. -<</if>> - -<<case "happy dance">> - -As you pass by the area of the penthouse where slaves sleep one morning, you're struck by a <<if $activeSlave.voice > 2>>high, bubbly<<elseif $activeSlave.voice > 1>>feminine<<else>>deep<</if>> humming. It's <<= App.UI.slaveDescriptionDialog($activeSlave)>>, dancing <<if $activeSlave.rules.living == "luxurious">>in the doorway of $his room<<else>>at the foot of $his bedroll<</if>>, dancing like no one's watching. $He's just woken up, and <<if $activeSlave.physicalAge > 35>>is full of energy and vigor in open defiance of $his age<<elseif $activeSlave.physicalAge < 25>>is full of youthful energy and vigor<<else>>is full of health and energy<</if>><<if $activeSlave.belly >= 10000>>, despite being <<if $activeSlave.bellyPreg >= 3000>>heavily pregnant<<elseif $activeSlave.bellyImplant >= 3000>>heavily gravid<<else>>greatly bloated<</if>><</if>>. $He's letting it out by humming a beat and dancing seductively, all by $himself. - -<br><br> - -You recognize the tune: it's one of <<if _S.DJ>>_S.DJ.slaveName's most popular tracks<<elseif $club != 0>>the most popular tracks in $clubName<<else>>the most popular house tracks in the Free City<</if>>, and it's made for sexy dancing. Shaking $his -<<if $activeSlave.hips > 2>> - <<if $activeSlave.weight > 30>> - awe inspiring, soft - <<elseif $activeSlave.weight >= -10>> - awe inspiring - <<else>> - awe inspiring yet skinny - <</if>> -<<elseif $activeSlave.hips > 0>> - <<if $activeSlave.weight > 30>> - broad, chubby - <<elseif $activeSlave.weight >= -10>> - broad - <<else>> - broad yet skinny - <</if>> -<<elseif $activeSlave.hips == 0>> - <<if $activeSlave.weight > 30>> - chubby - <<elseif $activeSlave.weight >= -10>> - feminine - <<else>> - skinny - <</if>> -<<else>> - <<if $activeSlave.weight > 30>> - narrow, chubby - <<elseif $activeSlave.weight >= -10>> - narrow - <<else>> - narrow and skinny - <</if>> -<</if>> -hips -<<if $activeSlave.belly >= 5000>> - <<if $activeSlave.bellyPreg >= 3000>> - and _belly baby bump - <<elseif $activeSlave.bellyImplant >= 3000>> - and _belly round belly - <<else>> - and <<print $activeSlave.inflationType>>-filled belly - <</if>> -<</if>> -in time with $his humming, $he runs $his hand<<if hasBothArms($activeSlave)>>s<</if>> sensually over them, along $his flanks, and over $his chest, <<if $activeSlave.boobs > 3000>>letting the vast mass of $his tits rest atop them<<elseif $activeSlave.boobs > 1000>>groping $his own heavy breasts<<else>>$his fingertips circling $his nipples<</if>> for an alluring moment. As $his hips maintain their sexual rhythm, $his hands continue, tracing up $his throat, over $his moist lips, and over $his head. As $he stretches up, $his torso begins to sway with the barely perceptible beat, $his -<<if ($activeSlave.boobsImplant/$activeSlave.boobs) >= .75>> - fake tits staying perfectly in place. -<<elseif $activeSlave.boobs > 2000>> - $activeSlave.boobShape boobs swaying along. -<<elseif $activeSlave.boobs > 400>> - $activeSlave.boobShape tits bouncing along. -<<else>> - petite chest accentuating $his gamine charm. -<</if>> - -<<case "orchiectomy please">> - -Near the end of <<= App.UI.slaveDescriptionDialog($activeSlave)>>'s weekly inspection, it's obvious the $desc is nerving $himself to ask you something. <<if $activeSlave.devotion > 20>>$He's been good recently<<else>>$He went through the nude inspection obediently<</if>>, so you save $him further torment and order $him to ask $his question. It's a command, but you issue it in a tone meant to assuage $his nervousness. It works, and after two false starts, $he gathers $his courage and politely asks you to cut $his balls off. -<br><br> -$He doesn't phrase it quite like that, of course. -<<if !canTalk($activeSlave)>> - $He uses careful gestures to explain $himself in detail. $He expresses acceptance of $his status as a sex slave, and states that $he's become used to impotence. $He's suffering from moodiness, however, and has <<if canHear($activeSlave)>>heard rumors<<else>>learned<</if>> from other slaves that this might be because of the hormonal suppression necessary to allow $his hormone treatments to work despite $his natural hormones. $He asks for an orchiectomy, if it will help stabilize $his emotional state. -<<else>> - "<<Master>>, may I plea<<s>>e have an orchiectomy?" $he <<say>>s, and then gestures at $his limp dick. "I'm, um, impotent, and <<s>>in<<c>>e I'm on hormone<<s>>, I've, um, kind of gotten u<<s>>ed to being that way. I get really <<s>>ad randomly, though. And <<s>>ome of the other girl<<s>> <<s>>ay that it'<<s>> the hormone<<s>> and, um, my hormone<<s>> cla<<sh>>ing." $He squares $his shoulders. "I under<<s>>tand that I'm a <<s>>e<<x>> <<s>>lave. I a<<cc>>ept it. May I plea<<s>>e have that <<s>>urgery, <<Master>>, if it'll make me le<<ss>> moody?" -<</if>> - -<<case "torpedo squeeze">> - -The penthouse bathroom has a long counter and mirror arrangement with many sinks, so a number of slaves can get ready at once. During those moments of the day when <<if $slaves.length > 10>>many<<else>>more than one<</if>> of them have just been awoken and showered and are hurrying to prettify themselves, this row of sinks presents one of the nicer sights in the arcology, a neatly spaced line of slave butts and a matching line of breasts reflected in the mirror. <<= App.UI.slaveDescriptionDialog($activeSlave)>> is especially impressive. $His <<if $activeSlave.boobs > 4000>>monstrous<<elseif $activeSlave.boobs > 2000>>huge<<else>>big<</if>> torpedo-shaped tits stick out a long way when $he's standing upright in the nude like this. -<br><br> -With $his -<<if $activeSlave.belly >= 100000>> - <<if $activeSlave.bellyPreg >= 1500>> - _belly pregnant - <<else>> - _belly - <</if>> - belly -<<elseif $activeSlave.weight > 130>> - fat belly -<<elseif $activeSlave.belly >= 10000>> - <<if $activeSlave.bellyFluid >= 10000>> - <<print $activeSlave.inflationType>>-stuffed - <<elseif $activeSlave.bellyPreg >= 1500>> - enormously pregnant - <<else>> - enormously distended - <</if>> - belly -<<elseif $activeSlave.weight > 30>> - soft belly -<<elseif $activeSlave.belly >= 1500>> - <<if $activeSlave.bellyFluid >= 1500>> - <<print $activeSlave.inflationType>>-filled - <<elseif $activeSlave.bellyPreg >= 1500>> - pregnant - <<else>> - implant rounded - <</if>> - belly -<<elseif $activeSlave.muscles > 30>> - ripped abs -<<elseif $activeSlave.muscles > 5>> - toned stomach -<<else>> - middle -<</if>> -against the edge of the counter as $he leans forward a little to <<if $activeSlave.makeup != 0>>finish $his makeup<<else>>apply lotion to $his face<</if>>, $his $activeSlave.nipples nipples are <<if $activeSlave.boobs > 6000>>pressed against the mirror<<elseif $activeSlave.boobs > 4000>>almost brushing the mirror<<elseif $activeSlave.boobs > 2000>>halfway to the mirror<<else>>over the sink<</if>>. $He's concentrating on $his task, and every little motion of $his arm<<if hasBothArms($activeSlave)>>s<</if>> makes $his spectacularly pointed breasts sway a little. - -<<case "subjugation blues">> - -It's been <<print $week-$activeSlave.weekAcquired>> week<<if $week-$activeSlave.weekAcquired > 1>>s<</if>> since you acquired <<= App.UI.slaveDescriptionDialog($activeSlave)>> as your slave. Since then $he has been nothing but trouble. $He has been ungrateful, rebellious and particularly hateful toward you since you acquired $him. $He often needs to be confined or forced to perform $his assignments, and has little regard for your power or authority. You bring $him in for inspection and $he whines and squirms in resistance as you feel up $his $activeSlave.nipples nipples<<if $activeSlave.belly >= 5000>>, rub $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnant <</if>>belly<<elseif $activeSlave.bellyPreg >= 150>>, feel the curve of $his new pregnancy<</if>>, and grope $his <<if $activeSlave.butt < 2>>narrow <<elseif $activeSlave.butt < 5>>average <<elseif $activeSlave.butt < 8>>plump <<else>>impressive <</if>>butt, coldly appraising $his potential worth as a sexual service provider. <<if $activeSlave.actualAge < 21>>$He is very young, only $activeSlave.actualAge years old, and is still very naïve. $His smooth, $activeSlave.skin skin has yet to experience the hard years of relentless sexual abuse that lie ahead of $him.<<else>>At $activeSlave.actualAge years old, $he should know by now how the world works, but some slaves are just too stubborn for their own good.<</if>> Eventually, of course, even the most headstrong <<print $girl>>s will bend to your will, but the unique social mores of your arcology and the wonders of modern surgical technology offer a prime opportunity to make a potent example of this <<if $activeSlave.actualAge < 21>>young <<else>>obstinate <</if>>slut. $He is $activeSlave.race, and therefore not considered racially inferior or subject to extreme inequities or neglect, but like most slave characteristics, that can change. - -<<case "transition anxiety">> - -<<= App.UI.slaveDescriptionDialog($activeSlave)>> stumbles into your office naked for $his weekly inspection, so apprehensive that $he can hardly walk. $He's been like this ever since $he became one of your sex slaves, <<if $week-$activeSlave.weekAcquired == 0>>just this week<<elseif $week-$activeSlave.weekAcquired == 1>>just last week<<else>><<print $week-$activeSlave.weekAcquired>> weeks ago<</if>>. It's not surprising; slaves like $him usually require some time and training to accept that they're slavegirls. $He lacks the natural attraction to men that might have made the idea more comfortable for $him, and the resulting sexual anxiety combined with understandable fear of sexual use makes $him extremely unhappy to be naked in front of someone $he knows can fuck $him at will. -<br><br> -$He has $his hands balled into fists at $his sides, and clearly wants nothing more than to use them to cover $his -<<if ($activeSlave.chastityPenis == 1)>> - pitiful caged dick. -<<elseif $activeSlave.balls == 0>> - pathetic, ballsless bitchclit. -<<elseif $activeSlave.aphrodisiacs > 0 || $activeSlave.inflationType == "aphrodisiac">> - aphrodisiac-induced erection. -<<elseif $activeSlave.dick > 3>> - impressively sized but pathetically soft dick. -<<else>> - soft, pathetic little dick. -<</if>> -$He knows that that's not allowed, and keeps $his hands where they are, though it's a struggle. $He <<if canSee($activeSlave)>>sees you looking at<<else>>knows you are eyeing<</if>> $his body like a slaveowner looks at one of _hisP sex slaves, and $he shivers. - <<case "breast expansion blues">> During $his routine weekly inspection, <<= App.UI.slaveDescriptionDialog($activeSlave)>> cradles $his huge breasts with $his arm<<if hasBothArms($activeSlave)>>s<</if>> whenever the maneuvers of being inspected allow $him to do so. It's not an unusual gesture for a $desc on breast growth drugs, since slaves whose tits are expanding are, by definition, not used to their weight yet. But $activeSlave.slaveName is more than just uncomfortable. $He seems to regard $his weighty mammaries with distaste. <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant >= -15>>$He's not stupid, and quickly realizes<<else>>$He's an idiot, but $he's not dumb enough to completely miss<</if>> that you've noticed $his feelings about $his boobs. $He bites $his lower lip, not sure if $he should say anything, so you follow your usual policy during slave inspections and ask $him about it. <<if $PC.skill.slaving >= 100>>If you learned one thing from your long career of slave training, it's that it's<<else>>It's<</if>> typically best to suss these things out. @@ -1912,967 +1588,6 @@ $He cranes $his neck, glancing over $his shoulder to give you a pleading look. <</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>> <</if>> -<<case "fucktoy tribbing">> - -<<link "Make love to $him">> - <<replace "#result">> - You crane your neck down and kiss $him on the lips. $He awakens slowly, gently, $his <<= App.Desc.eyesColor($activeSlave)>> fluttering open, looking black in the nighttime gloom. $He smiles into your mouth, and you feel $his pulse quicken through the extensive contact down your bodies. You interlace your fingers between $hers and turn, pressing $him back down into the soft sheets. $He opens $himself for you, spreading $his legs wide and embracing you with them, making sure to run $his heels up the backs of your calves in a way that sends a shiver up your spine. Feeling this through your kissing mouths, $he smiles into you, a pleased expression $he maintains as you - <<if $activeSlave.belly >= 300000 && $PC.belly >= 5000>> - struggle to find a position to handle both your pregnancy and $his <<if $activeSlave.bellyPreg >= 3000>>_belly gravid middle<<else>>_belly belly<</if>> and - <<elseif $activeSlave.belly >= 300000>> - struggle to find a position to handle $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>_belly belly<</if>> and - <<elseif $activeSlave.belly >= 5000 && $PC.belly >= 5000>> - shift into a position to better accommodate both your pregnancy and $his <<if $activeSlave.bellyPreg >= 3000>>_belly gravid middle<<else>>_belly belly<</if>> and - <<elseif $PC.belly >= 5000>> - shift into a position to better accommodate your pregnancy and - <<elseif $activeSlave.belly >= 5000>> - shift into a position to better accommodate $his <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>_belly belly<</if>> and - <</if>> - begin to gently press your womanhood against $hers. - <br><br> - <<if ($activeSlave.fetishKnown == 0)>> - Knowing little about $his sexual peccadilloes, but confident that $he'll do $his best to enjoy your lovemaking, you continue this shockingly intimate intercourse until $he climaxes. - <<elseif ($activeSlave.fetish == "none")>> - Knowing $him to be quite endearingly vanilla, you continue this shockingly intimate intercourse until $he climaxes, kissing $him all the way through your soft missionary lovemaking. - <<elseif $activeSlave.fetish == "buttslut">> - Knowing $his tastes and wanting the intimacy of mutual pleasure, you slide a hand around behind and under $him so you can tease $his ass. $He gives $his butt a little wiggle of thanks, and orgasms promptly. - <<run seX($activeSlave, "anal", $PC, "penetrative")>> - <<elseif $activeSlave.fetish == "cumslut">> - Knowing $his tastes and wanting the intimacy of mutual pleasure, you slide your tongue into $his mouth, making your kisses so frankly sexual and penetrative that you're practically making oral love at the same time as you do it missionary style. - <<elseif $activeSlave.fetish == "sadist">> - You know $his tastes, but by the act of this intimate missionary lovemaking, you wordlessly command $him to join you for more conventional pleasures, if only for the moment. $He complies with pleasure, climaxing with surprising speed; perhaps $he appreciates the change. - <<elseif $activeSlave.fetish == "masochist">> - Knowing $his tastes and wanting the intimacy of mutual pleasure, you nip $his lower lip in your teeth with each kiss, and rake your nails across $his flanks just hard enough to hurt a little. $He climaxes quickly to the mixed pain and missionary intimacy. - <<elseif $activeSlave.fetish == "dom">> - You know $his tastes, but by the act of this intimate missionary lovemaking, you wordlessly command $him to join you for more equal pleasures, if only for the moment. $He complies with something like relief, climaxing with surprising speed; perhaps $he appreciates a turn on the bottom. - <<elseif $activeSlave.fetish == "submissive">> - Being on the bottom for some missionary lovemaking is very much to $his tastes, and $he rises to the point of climax with almost indecent speed. You slow your pace to nothing more than a gentle pressure now and then, and keep $him on the edge of orgasm for a long time. - <<elseif $activeSlave.fetish == "boobs">> - Knowing $his tastes and wanting the intimacy of mutual pleasure, you make sure your nipples line up <<if $activeSlave.nipples == "fuckable">>and interlock <</if>>with $hers as best you can. You note the buck of pleasure this produces each time you get it perfectly right as you make love to $him. - <<elseif $activeSlave.fetish == "pregnancy" && $activeSlave.pregKnown == 1>> - Being on the bottom for some missionary lovemaking is very much to $his tastes, even though $he is already pregnant. $He builds to orgasm slowly, reveling in the feeling of being your $woman. - <<elseif $activeSlave.fetish == "pregnancy">> - Being on the bottom for some missionary lovemaking is very much to $his tastes, even though the encounter isn't particularly likely to get $him pregnant. $He builds to orgasm slowly, reveling in the feeling of being your $woman. - <</if>> - <<if canFemImpreg($PC, $activeSlave)>> - <<= knockMeUp($PC, 5, 0, $activeSlave.ID)>> - <</if>> - As you made love to $him, the gentle motions, feminine sighs, and delicate aroma of pleasure woke the other slaves in bed with you, and they began their own intimacy with each other. As you go back to sleep, you're surrounded with something very like Sapphic paradise. $activeSlave.slaveName nestles up to you once more, embracing you with @@.mediumaquamarine;trust born of love.@@ - <<set $activeSlave.trust += 4>> - <<run seX($activeSlave, "vaginal", $PC, "penetrative")>> - <</replace>> -<</link>> -<br><<link "Fuck $him">> - <<replace "#result">> - You feel your libido building, building, building within you, an endless cycle that mounts rapidly to an inevitable explosion. It comes, and you perform a catlike glide around until your head is at $his feet. As you did, you infiltrated one of your legs between $hers from its convenient starting point. $He wakes suddenly to the feeling of being manhandled, and then comes fully awake to the shockingly intimate sensation of your pussies pressed together as closely as physically possible. - <br><br> - Holding $his upper thighs with your hands to pull $him against you, you grind into $him, fucking $him about as comprehensively as it's possible for someone without a cock to fuck a $woman. $He's most definitely up for it, and you see $his eyes fly wide in the gloom as the full weight of the pleasure crashes into $him. It's not exactly a position for lovemaking, since your faces are about as far apart as they can possibly be during sex, but kissing be damned, you're here to fuck. Naturally, this evolution wakes everyone else up too, and before long, there's a regular lesbian orgy going on. When it's over, $activeSlave.slaveName finds $himself returning exhaustedly to sleep, one of your arms curled - <<if $activeSlave.belly >= 5000>> - under $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> - <<else>> - around $his middle - <</if>> - to cup $his pussy possessively. $He finds that @@.hotpink;$he doesn't mind.@@ $He's your $girl. - <<set $activeSlave.devotion += 4>> - <<run seX($activeSlave, "vaginal", $PC, "penetrative")>> - <<if canFemImpreg($PC, $activeSlave)>> - <<= knockMeUp($PC, 5, 0, $activeSlave.ID)>> - <</if>> - <</replace>> -<</link>> - -<<case "cow milking">> - -<<link "Treat $him right">> - <<replace "#result">> - You give $him a reassuring swat across the rump and tell $him you'd be happy to. You head toward the utility area with the milkers, and $he follows eagerly behind you, - <<if $activeSlave.fetish == "boobs">> - very ready to have you touch $his favorite part of $his body. - <<else>> - pleased you'd do this for $him and very ready to relieve the pressure in $his tits. - <</if>> - To $his surprise, you seat yourself on a stool and draw $him onto your lap rather than sitting $him at a milking machine. Reaching behind yourself, you give the $desc on your lap a broad bucket, and tell $him to hold it - <<if $activeSlave.belly >= 5000>> - under $his breasts as best $he can, given $his <<if $activeSlave.bellyPreg >= 3000>>pregnant<<else>>_belly<</if>> belly. - <<else>> - on $his lap. - <</if>> - Then you reach around $him and take $his - <<if $activeSlave.boobs > 6000>> - gargantuan - <<elseif $activeSlave.boobs > 2000>> - huge - <<else>> - heavy - <</if>> - udders in your hands. $He gasps as $he realizes exactly how you plan to do this, and adjusts the bucket so it's below both of $his nipples at once. - <br><br> - $He instinctually expects the rhythmic tugging that the milkers usually produce, but what $he gets is a methodical massage of $his breasts, both at once. They're large enough to be more than a single handful, so you go bit by bit, ensuring that no part of $his udders goes untouched. $His nipples start to gush milk without help after a few moments of this, and $he groans with relief and satisfaction as $he feels $his breasts begin to empty and enjoys the sensation of the massage. - <<if $activeSlave.fetish == "boobs">> - $He orgasms strongly soon after the first jet of milk, producing an especially thick squirt. - <</if>> - After you're satisfied, you move your hands to $his nipples and milk $him like a cow, getting the last drops of milk out of $him - <<if $activeSlave.fetish == "boobs">> - and producing a shuddering series of aftershocks. - <<else>> - and bringing $him to a surprise orgasm. - <</if>> - When $he's done, $he leans back into you for a moment before setting the milk bucket down, a wordless gesture of @@.mediumaquamarine;considerable trust.@@ It means a lot to $him that you would milk $him yourself. - <<set $activeSlave.trust += 4>> - <<run seX($activeSlave, "mammary", $PC, "penetrative")>> - <<set $activeSlave.lactationDuration = 2>> - <<set $activeSlave.boobs -= $activeSlave.boobsMilk, $activeSlave.boobsMilk = 0>> - <</replace>> -<</link>> -<br><<link "Treat $him like a cow">> - <<replace "#result">> - You ask $him if $he really wants to be treated like a cow. $He nods, a bit hesitantly, sensing a certain danger but not really knowing what else to do. You lead $him to the utility area of the penthouse, where the milkers are, but stop $him when $he starts for one. Instead, you - <<if $activeSlave.belly >= 300000>> - pull $him over $his _belly belly with $his udders hanging beneath $his<<if $activeSlave.boobs > 5000>>, the twin masses of female flesh almost reaching the floor<</if>>. - <<else>> - fetch a pair of low stools, make $him kneel on one, and put $his hand<<if hasBothArms($activeSlave)>>s<</if>> on the other, so $he's <<if hasAllLimbs($activeSlave)>>on all fours<<else>>bent over<</if>> with $his udders hanging beneath $him<<if $activeSlave.boobs > 5000>>, the twin masses of female flesh almost reaching the floor<</if>>. - <</if>> - <br><br> - You swing a bucket under $his nipples and milk $him by hand, as though $he were a cow. This isn't exactly what $he had in mind, but the feeling of your hands on $his nipples, tugging the streams of milk out of $him and into the bucket beneath <<if $activeSlave.fetish == "boobs">>brings $him very close to orgasm<<else>>eventually relaxes $him<</if>>. Seeing this, you muse aloud, as though to yourself, that a little farmyard bestiality wouldn't hurt, since there's no one here but you and a dairy cow. Pawing the cow's behind possessively, you finger $him aggressively before deciding on - <<if canDoVaginal($activeSlave) && $PC.dick != 0>> - a little cow pussy. You walk around behind $him and fuck $him hard enough to shake the drops of milk still clinging to $his sore nipples down and into the bucket below. - <<= VCheck.Vaginal($activeSlave, 1)>> - When you're finished, you step away, leaving your cum to run out of $his cunt and down $his thighs, - <<elseif canDoAnal($activeSlave) && $PC.dick != 0>> - some cow ass. You walk around behind $him and buttfuck $his hard enough to shake the drops of milk still clinging to $his sore nipples down and into the bucket below. - <<= VCheck.Anal($activeSlave, 1)>> - When you're finished, you step away, leaving your cum to drip out of $his gaped asshole, - <<else>> - a little cow tongue action. - <<if $PC.vagina != -1>> - You stand up and grind your pussy against the cow's upturned mouth, humping $his face hard enough to shake the drops of milk still clinging to $his sore nipples down and into the bucket below.<<if $PC.dick != 0>> You pull away when you're about halfway there, only to shove your cock down $his throat instead.<</if>> When you're finished, you step away, leaving $his face thoroughly coated in girlcum<<if $PC.dick != 0>> and $his mouth full of your load<</if>>, - <<else>> - <</if>> - <<run seX($activeSlave, "oral", $PC, "penetrative")>> - <</if>> - and ask $him what cows say. "Um, moo?" $he responds in a small, - @@.hotpink;submissive@@ voice. - <<set $activeSlave.devotion += 4>> - <<run seX($activeSlave, "mammary", $PC, "penetrative")>> - <<set $activeSlave.lactationDuration = 2>> - <<set $activeSlave.boobs -= $activeSlave.boobsMilk, $activeSlave.boobsMilk = 0>> - <</replace>> -<</link>><<if $PC.dick != 0>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && canDoAnal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>><</if>> - -<<case "tittymonster inspection">> - -<<link "Continue $his inspection as scheduled">> - <<replace "#result">> - You're already late for this little meeting; you wouldn't want to keep $him here when you both have more productive things to do. $His inspection is exemplarily routine; $he has nothing significant to report. When all is said and done, you dismiss $him, and $he stands up, <<if $activeSlave.devotion > 20>>genuinely<<else>>quickly<</if>> thanks you for your time, and leaves. - <</replace>> -<</link>> -<br> -<<link "Use $him as a cushion">> - <<replace "#result">> - You tell $him $he's looking very nice today. Surprised, $he manages <<if $activeSlave.devotion > 20>>to thank you prettily, wondering<<else>>to thank you hesitantly, worrying about<</if>> what comes next. You pick up a tablet, come around your desk, and fold yourself into a lotus position, just in front of $him and with your back to $him. Struck by this strange and trusting maneuver, $he keeps still, letting you get yourself situated. You slide backward until you are pressed against the mound of breasts behind you, and then relax into their soft, fleshy mass. Your back nestles naturally into $his cleavage, and the give of $his huge mammaries conforms to you, allowing you to rest your elbows comfortably on each breast as though they were armrests. Feeling the weight of you against $his chest, $activeSlave.slaveName throws $his arms back, bracing $himself against the floor.<<if $activeSlave.belly >= 15000>> You can feel $his full, taut, <<if $activeSlave.bellyPreg >= 3000>>pregnancy<<else>>belly<</if>> just barely once you have sunk deep into $his cleavage.<</if>> You begin to tap away at the tablet, and $he realizes <<if $activeSlave.devotion > 20>>with pleased surprise<<else>>with mixed resentment and relief<</if>> that you intend to use $him as a sort of human cushion for a while. From where $he's sitting, $he <<if canSee($activeSlave)>>can easily read over your shoulder, and you make no attempt to stop $him<<else>>could read over your shoulder, if $he could see<</if>>; keeping secrets from your slaves is generally impractical, and <<if $activeSlave.devotion > 20>>this $desc is trustworthy<<else>>there's nothing $he could do with your secrets, even if $he were to try<</if>>. After an hour or so, you inspect $him and dismiss $him, and $he leaves @@.mediumaquamarine;trusting $his bizarre place@@ in your world. - <<set $activeSlave.trust += 4>> - <</replace>> -<</link>> -<<if canDoAnal($activeSlave) || canDoVaginal($activeSlave)>> - <br><<link "Enjoy $his helplessness">> - <<replace "#result">> - You give $him no orders at all, since $his helplessness makes $him <<if $activeSlave.devotion > 20>>cooperation<<else>>consent<</if>> completely unnecessary for what you're planning. $He makes to turn as you come around behind $him, but $he can manage only a partial crane of $his shoulders and neck to <<if canSee($activeSlave)>>see<<else>>figure out<</if>> what you're doing. Seizing $his ankles, you haul $his legs out from under $his boobs and body, and then push $him forward, balancing $his body atop $his tits as though they were an exercise ball. <<if $activeSlave.devotion > 20>>$He giggles at this<<else>>$He struggles a little at the sudden discomfort<</if>>, and tries to steady $himself with $his hands, so you pull them around behind $him and pin $his arms to $his $activeSlave.skin back with one of your hands. You <<if $PC.dick != 0>>shove your dick up<<else>>pull on a strap-on with your other hand and insert it into<</if>> $his defenseless - <<if canDoVaginal($activeSlave)>>pussy<<else>>asshole<</if>>. Then you fuck $him. - <<= VCheck.Simple($activeSlave, 1)>> - <br><br> - You're physically fit to begin with, and between that and all the practice you get, you pride yourself on your <<if $PC.dick != 0>><<if $PC.vagina != -1>>master level futa skills<<else>>cocksmanship<</if>><<else>>power with a strap-on<</if>>. You can fuck hard, and $activeSlave.slaveName gets fucked hard. Having all of $his weight on $his tits, and being sawed back and forth on top of those tits, is not comfortable. - <<if canDoVaginal($activeSlave)>> - <<if $activeSlave.vagina < 3>> - Worse, only the most veteran cunt could accept this kind of treatment without some pain, and $hers is far tighter than you're treating it. - <</if>> - <<else>> - <<if $activeSlave.anus < 3>> - Worse, only the most veteran asspussy could accept this kind of treatment without some pain, and $hers is far tighter than you're treating it. - <</if>> - <</if>> - <<if $activeSlave.voice == 0>>Since $he cannot groan, $he begins to gasp raggedly<<else>>$He begins to grunt and groan<</if>> with each forward thrust as you penetrate $him, pressing $him forward across $his cushion of boobs. $He tries to take some of the weight off with $his feet, but after some vain scrabbling $he's obliged to @@.hotpink;give up and take it.@@ - <br><br> - When you're finished, you withdraw and drop $him, letting $him slump against $his sore breasts. $He's too tired and overstimulated to do anything but stay limp, and $his relaxed <<if canDoVaginal($activeSlave)>>pussy<<else>>butthole<</if>> <<if $PC.dick != 0>>releases drips of your cum to go sliding down $his thighs<<else>>glistens attractively with lube<</if>>. You direct - <<if $boobAccessibility == 1 || $pregAccessibility == 1>> - the accessibility assistance functions of your office to - <<else>> - the slaves who helped $him in to return and - <</if>> - help $him get cleaned up, and turn to your desk to get some work done as they struggle with the mountain of exhausted, fucked-out tits discarded in the middle of your office. - <<set $activeSlave.devotion += 4>> - <</replace>> - <</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>> -<</if>> - -<<case "bonded love">> - -<<link "Tell $him $he's a good slave">> - <<replace "#result">> - Without turning your head, you tell $him $he's a very good slave. $He laughs happily<<if canTalk($activeSlave)>>, though of course this is silent<<else>> throatily<</if>>, $his warm breath gusting against your ear. It took confidence for $him to come in here and tell $him $he loved you, and $he @@.mediumaquamarine;trusts you more@@ for responding this way. $He plants a light kiss on your cheek and walks quickly out of your office, hurrying to go about $his day's business, but careful to strut $his stuff for you on $his way out. - <<if $activeSlave.butt < 3>> - $His nice little butt moves cutely as $he goes. $His small buttocks leave - <<if !canDoAnal($activeSlave)>> - $his anal chastity visible from the rear as $he walks. - <<elseif $activeSlave.analArea > 3>> - the huge area of puckered skin around $his asspussy clearly visible from the rear, and $his asshole works lewdly with the motion. - <<elseif $activeSlave.anus > 1>> - $his asshole visible, the pucker of $his backdoor lewdly available. - <<else>> - $his tight anus visible from the rear as $he walks. - <</if>> - <<elseif $activeSlave.butt < 6>> - $His healthy butt bounces as $he goes. $His big buttocks mostly conceal - <<if !canDoAnal($activeSlave)>> - $his anal chastity, but there's the occasional tempting glimpse. - <<elseif $activeSlave.analArea > 3>> - the huge area of puckered skin around $his asspussy, but $his butthole is so well used that it's obvious from the rear that $he takes it up the ass. A lot. - <<elseif $activeSlave.anus > 1>> - $his backdoor, but there's the occasional cute glimpse of $his experienced anus. - <<else>> - what's between them, but there's the occasional cute glimpse of $his tight rosebud. - <</if>> - <<else>> - $His gigantic ass jiggles as $he goes. $His enormous buttocks mostly stay together as $he moves, - <<if !canDoAnal($activeSlave)>> - completely swallowing $his anal chastity. - <<elseif $activeSlave.analArea > 3>> - almost concealing the huge area of puckered skin around $his lewd asspussy. - <<elseif $activeSlave.anus > 1>> - completely concealing $his welcoming backdoor. - <<else>> - completely concealing $his tight asshole. - <</if>> - <</if>> - $He pauses for an instant in the doorway, turns over $his shoulder to give you a sexy wink, and is gone. - <<set $activeSlave.trust += 4>> - <</replace>> -<</link>> -<br><<link "Tell $him you love $him too">> - <<replace "#result">> - You turn towards $him and direct the full weight of your gaze into $his eyes. <<if canSee($activeSlave)>>$His eyelids flicker with the shock of the shared look<<else>>$His eyes may not be capable of sight, but $he can feel your gaze<</if>>, so close, but $he bears it, biting $his lower lip. Then you kiss $him. The released tension is too much for $him, and $he moans, slumping against you a little as you kiss $him like a lover. $He's so lost in it that when you break the kiss, $his mouth stays slightly open and pursues yours slightly, hungry for more. You place a finger against $his moist lips, making $him wait a moment, and tell $him that you love $him too. $He makes <<if $activeSlave.voice == 0>>a quiet moaning sound, deep in $his useless throat,<<else>>an almost animal sound, somewhere between a sob and a moan,<</if>> and as you withdraw your finger, $he kisses you back. $He knows $he has a job to do today, and it's waiting for $him, so when you give $him no indication that you'd like $him to stay, $he withdraws, keeping $his <<if canSee($activeSlave)>>eyes<<else>>face<</if>> on yours, doing $his best to @@.hotpink;make love to you@@ with $his gaze. - <<set $activeSlave.devotion += 4>> - <</replace>> -<</link>> - -<<case "shower slip">> - -<<link "Carry $him to where $he needs to go">> - <<replace "#result">> - You scoop $him up into a bridal carry. $He <<if $activeSlave.voice == 0>>gasps, since $he can't squeal<<else>>squeals cutely<</if>>, holding on for dear life, and keeps $his face nestled against $his <<= getWrittenTitle($activeSlave)>>. - <<set _carried = 1>> - <<if $activeSlave.belly >= 300000>> - <<if $activeSlave.bellyPreg > 3000>> - $His _belly pregnancy - <<else>> - $His _belly belly - <</if>> - makes holding $him extremely difficult, not including just how much it weighs, so you're forced to quickly return $him to $his feet. - <<set _carried = 0>> - <<elseif $activeSlave.boobs > 40000>> - $His expansive tits not only weigh $him down, but also keep you from holding $him up for long. - <<set _carried = 0>> - <<elseif $activeSlave.weight > 160>> - $He's certainly an armful and a little too fat for you to hold for long. - <<set _carried = 0>> - <<elseif $activeSlave.balls > 200>> - $His tremendous balls serve as an imposing anchor, quickly forcing you to lower $him back to the ground. - <<set _carried = 0>> - <<elseif $activeSlave.dick > 30>> - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - $His hanging dick adds tremendously to $his weight and touches the floor, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<else>> - $His hanging dick adds tremendously to $his weight and touches the floor, preventing you from really carrying $him very far. - <<set _carried = 0>> - <</if>> - <<elseif $activeSlave.belly >= 100000>> - <<if $activeSlave.bellyPreg > 3000>> - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - $His pregnancy is truly gigantic, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<else>> - $His pregnancy is truly gigantic and a little too big for you to safely carry without the risk of dropping, quickly forcing you to lower $him. - <<set _carried = 0>> - <</if>> - <<else>> - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - $His _belly belly is truly gigantic, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<else>> - $His _belly belly is truly an armful and a little to heavy for you to carry, quickly forcing you to lower $him. - <<set _carried = 0>> - <</if>> - <</if>> - <<elseif $activeSlave.boobs > 25000>> - $His enormous boobs - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - add tremendously to $his weight and are awkward to manage, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<else>> - add tremendously to $his weight and are awkward to manage, quickly forcing you to lower $him. - <<set _carried = 0>> - <</if>> - <<elseif $activeSlave.weight > 130>> - $He's a - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - fatty, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<else>> - fatty and a little too big and heavy for you to hold for long. - <<set _carried = 0>> - <</if>> - <<elseif $activeSlave.balls > 100>> - $His enormous balls - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - add tremendously to $his weight and dangle ponderously, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance, even though you have to step awkwardly to avoid kneeing $his sensitive sack. - <<else>> - add tremendously to $his weight and dangle ponderously, quickly forcing you to lower $him or risk accidentally kneeing the sensitive sack. - <<set _carried = 0>> - <</if>> - <<elseif $activeSlave.dick > 20>> - $His dangling cock adds tremendously to $his weight and is awkward to walk with, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.butt > 18>> - $His expansive ass - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - adds tremendously to $his weight and is awkward to handle, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<else>> - adds tremendously to $his weight and is awkward to handle, quickly forcing you to lower $him. - <<set _carried = 0>> - <</if>> - <<elseif $activeSlave.boobs > 8000>> - $His boobs add tremendously to $his weight, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.weight > 95>> - $He's got some extra weight on $him, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.height > 180>> - $He's a big $girl, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.weight > 30>> - $He's a chubby $girl, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.bellyPreg >= 10000>> - $He's heavily pregnant, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.bellyImplant >= 10000>> - $His belly is greatly laden with inert filler, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.bellyFluid >= 10000>> - $His belly is greatly laden with <<print $activeSlave.inflationType>>, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him some distance. - <<elseif $activeSlave.height > 160>> - $He's no little $girl, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him. - <<elseif $activeSlave.weight > 10>> - $He's got a deliciously plush body, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to carry $him. - <<else>> - You could carry the little slave like this as long as you like. - <</if>> - <<if _carried == 1>> - Knowing that $he'll need to get dressed before the next part of $his day, you carry $him to <<if $activeSlave.rules.living == "luxurious">>$his room<<else>>the part of the common area with where clothes are kept<</if>>. $He remains perfectly limp, letting $himself be carried without a word. When you set $him on $his feet, - <<else>> - Knowing that $he'll need to get dressed before the next part of $his day, you help $him to <<if $activeSlave.rules.living == "luxurious">>$his room<<else>>the part of the common area with where clothes are kept<</if>>. $He lets you do most of the work, letting $himself be guided without a word. When you set $him on $his bed, - <</if>> - there's a little unaccountable moisture in $his <<= App.Desc.eyesColor($activeSlave)>> @@.mediumaquamarine;for some reason.@@ $He gives you a kiss and thanks you prettily. - <<set $activeSlave.trust += 4>> - <</replace>> -<</link>> -<<if (canDoAnal($activeSlave) || canDoVaginal($activeSlave)) && $activeSlave.belly < 15000>> - <br><<link "Scoop $him up and fuck $him">> - <<replace "#result">> - You squat down, and $he plants $his feet, expecting to be given a swat on the bottom and sent on $his way. Instead, you run your hands down $his - <<if $activeSlave.weight > 130>> - well-padded - <<elseif $activeSlave.weight > 95>> - padded - <<elseif $activeSlave.muscles > 30>> - heavily muscled - <<elseif $activeSlave.weight > 30>> - chubby - <<elseif $activeSlave.weight > 10>> - plush - <<elseif $activeSlave.muscles > 5>> - toned - <<else>> - soft - <</if>> - thighs, producing a shiver from the $desc, and lift $him up against your chest, pinning $him there with your hands supporting the backs of $his knees. Giggling<<if $activeSlave.voice == 0>> mutely<</if>>, $he finds $himself held in a fetal position with $his back pressed against your <<if $PC.boobs >= 300>>tits<<else>>chest<</if>>. - <<if $activeSlave.boobs > 40000>> - $His expansive tits not only weigh $him down, but also force you to push $him against the shower wall for added support. - <<elseif $activeSlave.weight > 160>> - $He's certainly an armful and a little too fat, forcing you to push $him against the shower wall for added support. - <<elseif $activeSlave.balls > 200>> - $His tremendous balls serve as an imposing anchor, quickly forcing you to push $him against the shower wall for added support. - <<elseif $activeSlave.dick > 30>> - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - $His hanging dick adds tremendously to $his weight and touches the floor, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<else>> - $His hanging dick adds tremendously to $his weight and touches the floor, quickly forcing you to push $him against the shower wall for added support. - <</if>> - <<elseif $activeSlave.boobs > 25000>> - $His enormous boobs - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - add tremendously to $his weight and are awkward to manage, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<else>> - add tremendously to $his weight and are awkward to manage, quickly forcing you to push $him against the shower wall for added support. - <</if>> - <<elseif $activeSlave.weight > 130>> - $He's a - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - fatty, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<else>> - fatty and a little too big and heavy, quickly forcing you to push $him against the shower wall with a wet slap. - <</if>> - <<elseif $activeSlave.balls > 100>> - $His enormous balls - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - add tremendously to $his weight and dangle ponderously, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<else>> - add tremendously to $his weight and dangle ponderously, quickly forcing you to push $him against the shower wall for added support. - <</if>> - <<elseif $activeSlave.dick > 20>> - $His dangling cock adds tremendously to $his weight and dangles heavily, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.butt > 18>> - $His expansive ass - <<if $arcologies[0].FSPhysicalIdealist != "unset">> - adds tremendously to $his weight and is awkward to handle, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<else>> - adds tremendously to $his weight and is awkward to handle, quickly forcing you to push $him against the shower wall for added support. - <</if>> - <<elseif $activeSlave.boobs > 8000>> - $His boobs add tremendously to $his weight, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.weight > 95>> - $He's got some extra weight on $him, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.height > 180>> - $He's a big $girl, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.weight > 30>> - $He's a chubby $girl, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.bellyPreg >= 10000>> - $He's heavily pregnant, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.bellyImplant >= 10000>> - $His belly is greatly laden with inert filler, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.bellyFluid >= 10000>> - $His belly is greatly laden with <<print $activeSlave.inflationType>>, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him. - <<elseif $activeSlave.height > 160>> - $He's no little $girl, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him with ease. - <<elseif $activeSlave.weight > 10>> - $He's got a deliciously plush body, but you're <<if $PC.title == 1>>strong<<else>>fit<</if>> enough to lift $him with ease. - <<else>> - You can hold the little slave like this as long as you like. - <</if>> - You shift your grip to hold $him with one hand so you can - <<if $PC.dick != 0>> - maneuver your cock inside $him, and then resume your original hold so you can slide $him up and down your shaft. <<if $PC.vagina != -1>>You make sure $he's really hilted at the height of each stroke, putting some nice pressure on your pussy.<</if>> - <<else>> - slide your fingers inside $his <<if canDoVaginal($activeSlave)>>pussy<<else>>ass<</if>>, since you're not putting $him down to get a strap-on. Knowing $he can't reach your cunt to return the favor like this, $he relaxes and lets you play with $him. - <</if>> - Helpless, $he has nothing to do but <<if canSee($activeSlave)>>watch $himself get fucked in a full length mirror. $He stares, fascinated, and the sight<<else>>let $his hands wander across $his body. Teasing $his nipples<<if $activeSlave.bellyPreg >= 5000>> and pregnant belly<</if>><</if>> gets $him off quickly, - <<if $activeSlave.dick == 0>> - $his muscles tensing prettily with female orgasm. - <<elseif ($activeSlave.chastityPenis == 1)>> - a dribble of cum flowing from the tip of $his chastity cage. - <<elseif canAchieveErection($activeSlave)>> - $his stiffly waving cock jetting cum onto the floor. - <<elseif $activeSlave.dick > 6>> - $his absurd cock twitching lazily as $his ejaculate makes it down its length. - <<elseif $activeSlave.balls == 0>> - $his bitchclit dribbling weakly. - <<elseif $activeSlave.dick > 0>> - $his limp dick twitching as $he cums. - <<else>> - making $him shudder. - <</if>> - When you're done, you let $him down, and the first thing $he does is spin in your embrace to give you an @@.hotpink;earnest kiss.@@ - <<= VCheck.Simple($activeSlave, 1)>> - <<set $activeSlave.devotion += 4>> - <</replace>> - <</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave))>>//This option will take $his virginity//<<elseif (($activeSlave.anus == 0) && canDoAnal($activeSlave))>>//This option will take $his anal virginity//<</if>> -<</if>> - -<<case "happy dance">> - -<<link "Enjoy the show">> - <<replace "#result">> - There are low leather ottomans scattered all over the penthouse, for rest, relaxation, and sex. You seat yourself on the nearest one, enjoying the spectacle. $He feels your eyes on $him, a sensation $he knows well, and turns with a little smile on $his $activeSlave.faceShape face, putting an extra swing in $his hips<<if $activeSlave.belly >= 5000>>, causing $his weighty middle to swing wide<</if>>. $He's still dancing alone, but now $he's giving you a private show. You give $him the proper music, instructing $assistant.name to play the track $he was humming. - <br><br> - $He advances on you slowly, sensually, relishing the beat and doing $his best to show off $his body. - <<if $activeSlave.dick > 0>> - $His - <<if ($activeSlave.chastityPenis == 1)>> - chastity cage sways - <<elseif canAchieveErection($activeSlave)>> - erection waves back and forth - <<elseif $activeSlave.dick > 6>> - soft python of a cock swings lewdly - <<else>> - bitchclit bounces - <</if>> - with $his rhythm. - <</if>> - <<if $activeSlave.vagina > -1>> - $His - <<if ($activeSlave.chastityVagina)>> - <<elseif $activeSlave.clit > 1>> - chastity catches your eye - <<elseif $activeSlave.labia > 0>> - generous petals catch your eye - <<elseif $activeSlave.vaginaLube > 1>> - wet cunt glistens - <<else>> - womanhood is $his center - <</if>> - as $he moves. - <</if>> - $He gives you an excellent nude lap dance, expressing the art at the level only the finest old world strippers can manage. The interaction is all about you, your eyes on $his body, your desire for $his touch, and finally your <<if $PC.dick != 0>>cum flowing into $his mouth as $he sucks your dick<<if $PC.vagina != -1>> and the wetness against $his fingers as they tease your pussy<</if>><<else>>pussyjuice coating $his lips as $he eats you out<</if>>. $He @@.mediumaquamarine;knows $his place@@ very well. - <<set $activeSlave.trust += 4>> - <<run seX($activeSlave, "oral", $PC, "penetrative")>> - <</replace>> -<</link>> -<br><<link "Dance along with $him">> - <<replace "#result">> - $He doesn't <<if canSee($activeSlave)>>see<<else>>notice<</if>> you advance on $him; $he's facing away from you, and in any case, $he's lost in $his own little world. At the same moment, however, $he begins to hear the track you're humming, in perfect synchrony with the way $he's humming it, and senses a presence at $his side. You timed it perfectly, directing the sound system here to play the right track, match it to $him, and fade it in as you approached and began to dance beside $him. - <<if $PC.title == 0>> - You've got a woman's body, and you match $his moves, though an observer might see greater power and dominance in the way you dance. - <<else>> - You make your moves the masculine companion to $hers, moving like a paragon of frank male - <<if $PC.belly >= 1500>> - sexuality, despite the fecund curve to your stomach. - <<elseif $PC.boobs >= 300>> - sexuality, despite the pair of breasts bouncing on your chest. - <<else>> - sexuality. - <</if>> - <</if>> - <br><br> - There's a momentary flaw in $his rhythm, a catch in $his breath as $he realizes what you're doing, but $he gets right back into it, displaying $his pleasure with nothing more than a ghost of a smile - <<if canSee($activeSlave) || canHear($activeSlave)>> - and a - <<if canSee($activeSlave)>> - widening of $his eye<<if hasBothEyes($activeSlave)>>s<</if>> as $he looks you up and down - <<else>> - slight perk of $his ears as $he tracks your motion - <</if>> - <</if>>. - $He doesn't shove $himself against you; that would be coarse. Instead $he dances alluringly, just out of your grasp. Taking the dominant role, you encircle $him in your arms and draw $him in close, $his heat perceptible against your skin before the very first graze of $his $activeSlave.skin body against yours. $He continues to dance gorgeously as $he helps you out of your clothes. - <br><br> - When you're nude, $he turns $his back to you and starts to grind, letting you feel $his - <<if $activeSlave.weight > 160>> - rippling - <<elseif $activeSlave.weight > 95>> - thick - <<elseif $activeSlave.weight > 30>> - chubby - <<elseif $activeSlave.muscles > 95>> - ripped - <<elseif $activeSlave.muscles > 30>> - muscled - <<elseif $activeSlave.weight > 10>> - plush - <<elseif ($activeSlave.muscles > 5)>> - toned - <<elseif $activeSlave.weight < -10>> - thin - <<else>> - soft - <</if>> - body all up and down your front. Feeling your <<if $PC.dick == 0>>building heat, $he begins to incorporate gentle caresses of your womanhood<<else>>erection brushing against $him, $he begins to corral it between $his buttocks and thighs<</if>>, and you return the favor by teasing $his nipples<<if canDoVaginal($activeSlave)>>, pussylips, clit,<</if>> and even $his ass. You orgasm one after the other, and as the music fades, $he @@.hotpink;throws $his arms around you.@@ - <<set $activeSlave.devotion += 4>> - <<run seX($activeSlave, "oral", $PC, "penetrative")>> - <</replace>> -<</link>> - -<<case "orchiectomy please">> - -<<link "Order $him to behave $himself">> - <<replace "#result">> - You give $him stern orders to be a good $girl and behave $himself, regardless of $his silly moods. You don't deign to directly deny $his request for a genital reconfiguration, and $he has the presence of mind not to ask for an explicit denial. $He offers you profoundly submissive promises to control $his emotions and be a good slave, though $he can't hide a glimmer of @@.gold;fear@@ that $he'll fail and suffer punishment. - <<set $activeSlave.trust -= 2>> - <</replace>> -<</link>> -<br><<link "Reassure $him about $his body">> - <<replace "#result">> - You tell $him you aren't planning to do that to $him. You explain that $he might be feeling like $he's fully integrated into a life of sexual slavery now, but $he's not even close; $he's got a long way to go before $he's perfectly devoted and trusting. The words might sound harsh, but you deliver them kindly, making the statement one of hope. $He listens without disappointment, and brightens further when you predict that in a few weeks, $he'll get used to $his body's chemistry and accept it. Finally, you add, $his current configuration is the best for $his sex drive. $He bites $his lip and gives you a daring little look when $he <<if canHear($activeSlave)>>hears<<else>>understands<</if>> that, but you decide to keep $him waiting and send $him on $his way. $He @@.hotpink;thanks you@@ without dissembling, not realizing how profoundly $his life has changed, for $him to be reassured by that. - <<set $activeSlave.devotion += 4>> - <</replace>> -<</link>> -<<if canDoAnal($activeSlave)>> - <br><<link "Agree and make sure $he doesn't regret it">> - <<replace "#result">> - You agree and send $him straight to the surgery. $He looks a little hesitant, as though the prospect is intimidating now that it's actually about to happen, but $he complies obediently. You direct $assistant.name to bring $him back to your office as soon as $he's fully recovered. The curatives applied right after surgery hasten $his recovery, and $he's back the next day, standing a little gingerly, $his limp dick looking a bit sore. $He greets you properly, and comes over willingly when you recline in your chair and <<if canSee($activeSlave)>>crook a finger at<<else>>beckon<</if>> $him. <<if canSee($activeSlave)>>As $he approaches, $he notices that <<if $PC.dick != 0>>you've got your<<if $PC.vagina != -1>> futa<</if>> dick out<<else>>you're wearing a strap-on<</if>>, and looks a little apprehensive<<else>>$He approaches gingerly, still slightly sore<</if>>, but $he sits down obediently, <<if $PC.dick != 0>>your erection<<else>>the phallus<</if>> coming to rest between $his legs and lower buttocks, resting against $his perineum and the smooth, recently healed patch of skin at the base of $his dick where $his ballsack used to be. $He gasps at the sensation of <<if $PC.dick != 0>>your hot cock<<if $PC.vagina != -1>> and the wet pussy beneath it<</if>><<else>>the hard thing<</if>> pressed against $his most intimate area, but $he doesn't flinch away. - <br><br> - You take your time with $him, leaning back in your chair so that $he's lying - <<if $PC.boobs >= 1400>> - against your enormous <<if $PC.boobsImplant != 0>>fake breasts<<else>>cow tits<</if>>. - <<elseif $PC.boobs >= 1200>> - against your huge<<if $PC.boobsImplant != 0>> firm<<else>> soft<</if>> breasts. - <<elseif $PC.boobs >= 1000>> - against your big<<if $PC.boobsImplant != 0>> firm<</if>> breasts. - <<elseif $PC.boobs >= 300>> - against your tits - <<elseif $PC.title == 0>> - against your flat chest - <<else>> - on your chest - <</if>> - and bringing $his head around so you can make out. You play with $his - <<if $activeSlave.boobs > 1000>> - udders - <<elseif $activeSlave.boobs > 300>> - boobs - <<else>> - nipples - <</if>> - for a while, slowly starting to grind <<if $PC.dick != 0>>your dick<<if $PC.vagina != -1>> and the pussy attached to it<</if>><<else>>the strap-on<</if>> back and forth between $his legs. $He starts to ride you, and starts to beg you to fuck $him. You take $him under the arms and pull $him up, letting <<if $PC.dick != 0>>your erection<<else>>the dildo<</if>> spring free; $he takes the cue and lines its head up with $his - <<if $activeSlave.anus > 2>> - asspussy. - <<elseif $activeSlave.anus > 1>> - asshole. - <<else>> - tight pucker. - <</if>> - <<= VCheck.Anal($activeSlave, 1)>> - $He shivers with pleasure as you lower $him onto it and $he feels the pressure - <<if $activeSlave.prostate > 0>> - against $his prostate. - <<else>> - in $his rectum. - <</if>> - $He's so aroused that $he climaxes immediately, shuddering as $his - <<if $activeSlave.dick > 6>> - monstrous floppy dick twitches, dripping - <<elseif $activeSlave.dick > 3>> - big but now permanently soft dick drips - <<elseif $activeSlave.dick > 1>> - little bouncing bitch dick dribbles - <<else>> - shockingly tiny penis dribbles - <</if>> - <<if $activeSlave.prostate > 2>> - an obscene - <<elseif $activeSlave.prostate > 1>> - a large - <<elseif $activeSlave.prostate == 0>> - a negligible - <<else>> - a small - <</if>> - amount of clear fluid. By the time you carry $his @@.hotpink;limply submissive@@ body to the shower, $he's orgasmed twice more to your artful anal lovemaking. - <<set $activeSlave.devotion += 4>> - <<set $activeSlave.balls = 0>> - <<set $activeSlave.scrotum = 0>> - <<run healthDamage($activeSlave, 1)>> - <</replace>> - <</link>><<if $activeSlave.anus == 0>> //This option will take $his virginity//<</if>> -<</if>> - -<<case "torpedo squeeze">> - -<<link "Give them a surprise massage">> - <<replace "#result">> - You move stealthily up behind $him in a predatory crouch, your arms forward and your fingers spread. When $he reaches up to <<if $activeSlave.makeup != 0>>do $his eyes<<else>>massage $his forehead<</if>>, you take advantage of $his newly vulnerable flanks and reach around $him to take $his torpedo tits in hand. $He <<if $activeSlave.voice != 0>>howls<<else>>makes the raspy noise that mute slaves make when<</if>> in shock, writhing away from the grasping digits. Your hands aren't particularly cold, but $he's deliciously warm from the shower and you're holding onto $him firmly. $His - <<if $activeSlave.butt > 12>> - titanic ass - <<elseif $activeSlave.butt > 5>> - massive ass - <<elseif $activeSlave.butt > 2>> - plush bottom - <<else>> - trim behind - <</if>> - bumps into you as $he recoils, and $he freezes, realizing who you are. You slide your grip back towards $him, down away from the point of each tit, grab $his back where $he's broader, and knead $him gently, moving forward down $his breasts. - <<if $activeSlave.fetish == "boobs">> - <<if $activeSlave.fetishKnown != 1>> - $His chest swells in your embrace as $he sucks in $his breath, stiffening with arousal. $He seems to @@.lightcoral;love breast play,@@ and if properly encouraged, might orgasm to it. - <<set $activeSlave.fetishKnown = 1>> - <<else>> - $He stiffens with arousal, since breast play is the main sexual event as far as $he's concerned. - <<if canAchieveErection($activeSlave) && ($activeSlave.chastityPenis == 1)>>There's an audible little smack as $he achieves an erection, bringing $his dickhead against the bottom of the counter.<</if>> - <</if>> - <<elseif $activeSlave.devotion > 50>> - $He softens into your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>, wriggling $his back into you to get comfortable. - <<elseif $activeSlave.devotion > 20>> - $He makes an effort to relax, and you can feel the stiffness go out of $his back, pressed against your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>. - <<else>> - $He remains stiff and afraid, shivering a little against your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>. - <</if>> - $He expects to get fucked, but you just massage $his breasts thoroughly, give $his <<if $activeSlave.pregKnown == 1>>belly<<else>>butt<</if>> a possessive pat, and continue on your way. $He thanks you <<if $activeSlave.devotion > 50>>with touching sincerity<<elseif $activeSlave.devotion > 20>>sincerely<<else>>hesitantly<</if>> and returns to $his business, @@.mediumaquamarine;smiling a little.@@ - <<set $activeSlave.trust += 4>> - <<if $activeSlave.lactation > 0>> - <<set $activeSlave.lactationDuration = 2>> - <<set $activeSlave.boobs -= $activeSlave.boobsMilk, $activeSlave.boobsMilk = 0>> - <<else>> - <<= induceLactation($activeSlave, 3)>> - <</if>> - <</replace>> -<</link>> -<<if canDoAnal($activeSlave) || canDoVaginal($activeSlave)>> - <br><<link "Make $him bounce them painfully">> - <<replace "#result">> - Appearing behind $him, you order $him to bounce up and down. You don't mention $his prominent tits, but $he knows exactly what you mean and is - <<if $activeSlave.devotion > 50>>eager to please<<elseif $activeSlave.devotion > 20>>willing to please<<else>>willing to debase $himself to avoid punishment<</if>>. - $He bounces up and down, watching for your reaction in the mirror. Harder, you tell $him, and $he bounces harder. Harder, you tell $him again, and then again. $He jumps up and down hard enough that $his promontories slap painfully against $him, - <<if $activeSlave.fetish == "masochist">> - <<if $activeSlave.fetishKnown != 1>> - making $him gasp with arousal. $He stares at $himself in shock, and then at your reflection, mystified and a little frightened that you might have seen. You did see, and you're not perplexed. $activeSlave.slaveName is a @@.lightcoral;sexual masochist,@@ and if properly encouraged, can probably be trained to be a proper slut for pain. - <<set $activeSlave.fetishKnown = 1>> - <<else>> - making the masochistic $desc gasp with arousal. - <</if>> - <<elseif $activeSlave.devotion > 50>> - extracting a gasp as $he willingly causes $himself considerable discomfort at your command. - <<elseif $activeSlave.devotion > 20>> - making $him wince. $He starts to look afraid. - <<else>> - and $he starts to cry, more from fear than from the pain. - <</if>> - <br><br> - Pleased, you tell $him to keep it up as best $he can, and trap $his hips against the edge of the counter before sliding <<if $PC.dick != 0>>your cock<<else>>a strap-on<</if>> <<if canDoVaginal($activeSlave)>>into $his pussy<<else>>up $his asshole<</if>>. It's not a comfortable angle, and between the rough penetration and the continued mammary torture,<<if $activeSlave.fetish == "masochist">>$he orgasms promptly<<if $activeSlave.balls > 0>>, scattering cum all over the counter<</if>><<else>>tears begin to run down $his cheeks<</if>>. When you climax, you grab the undersides of $his breasts and hoist $him up in a parody of exaltation, thrusting as far into $him as you can manage<<if $PC.dick != 0>> and <<if canDoVaginal($activeSlave)>>coming inside $him<<else>>blowing your load in $his butt<</if>><</if>>. The thrust, the lift, and the harsh hold on $his poor boobs extracts <<if $activeSlave.voice != 0>>a shriek<<else>>the pathetic little gasping noise that mute slaves make when in agony<</if>> from $his<<if $activeSlave.lactation > 0>>, not to mention <<if $activeSlave.lactation == 1>>a few drops of milk<<else>>an ejaculation-like stream of milk<</if>> from each of $his nipples<</if>>. You discard your toy on the counter, - <<if $activeSlave.fetish == "masochist">> - leaving the poor pain addict in a state of @@.hotpink;high sexual satiation,@@ even if $he does move $his battered breasts gingerly as $he climbs down. - <<set $activeSlave.devotion += 4>> - <<else>> - leaving $him to climb down $himself, @@.gold;fearfully@@ watching your receding back as $he gets off the counter, favoring $his battered breasts. - <<set $activeSlave.trust -= 4>> - <</if>> - <<= VCheck.Simple($activeSlave, 1)>> - <</replace>> - <</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>> -<</if>> - - -<<case "subjugation blues">> - -<<link "Surgically alter $him to be of the inferior $arcologies[0].FSSubjugationistRace race, and give $him a public debut">> - <<replace "#result">> - Some slaves have a bigger potential price to pay for disobedience than they realize. $activeSlave.slaveName is $activeSlave.race, which is - <<if $activeSlave.race != $arcologies[0].FSSupremacistRace>> - not particularly noteworthy. - <<else>> - advantageous to $him, as it is generally unpopular to enslave a $girl of the superior race. - <</if>> - However, $he's about to learn that $his racial appearance isn't immutable, and in your arcology, it can make a big difference in how $he is treated. You escort the struggling <<if $activeSlave.pregKnown == 1 && $activeSlave.bellyPreg >= 1500>>mother-to-be<<else>>$girl<</if>> to the surgery center and instruct $assistant.name to alter $his appearance so that $he appears to be <<print $arcologies[0].FSSubjugationistRace>>. The full meaning of your instructions - <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant < -15>> - slowly start to dawn on <<print $activeSlave.slaveName>>'s stupid face - <<else>> - spark a quick reaction <<if canSee($activeSlave)>>from <<print $activeSlave.slaveName>>'s intelligent eyes<<else>>on <<print $activeSlave.slaveName>>'s intelligent face<</if>> - <</if>> - and $he whimpers and begs for you to reconsider even as $he's strapped onto the operating table. - <br><br> - By the time $he wakes up from the anesthesia, you've already made the necessary alterations to $his permanent records, which now clearly indicate that $he was born <<print $arcologies[0].FSSubjugationistRace>>, and as such, can be rightfully regarded as the racially inferior fuck-animal $he now is. Of course, your fellow slaveowners and the slave market will be savvy enough to see through the alterations you've forced upon $him, but when you make $him available for a day of use in the public square, all your average citizen knows is that the $girl they are fucking is simply a worthless $arcologies[0].FSSubjugationistRace slut who doesn't deserve much more than a stomach full of cum. The surgery @@.health.dec;negatively effects $his health,@@ but by the end of a long day $he'll likely never forget, $he has gotten a crash course in what it means to be a $arcologies[0].FSSubjugationistRace slave in your arcology, and any evidence that $he was born $activeSlave.race has been efficiently expunged from $his records. <<if ($activeSlave.vagina == 0 || $activeSlave.anus == 0)>>@@.lime;All vestiges of $his virginity have been unceremoniously stripped away@@.<</if>> The experience has @@.hotpink;broken down $his resistance,@@ and your willingness to go to such extremes to subjugate $him @@.gold;greatly increases $his fear of you.@@ - <<set $activeSlave.devotion += 5, $activeSlave.trust -= 10, $activeSlave.anus++>> - <<run seX($activeSlave, "anal", "public", "penetrative", 25)>> - <<run seX($activeSlave, "oral", "public", "penetrative", 35)>> - <<if $activeSlave.vagina > -1>> - <<set $activeSlave.vagina++>> - <<run seX($activeSlave, "vaginal", "public", "penetrative", 20)>> - <</if>> - <<run knockMeUp($activeSlave, 100, 2, -2)>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> - <<run surgeryDamage($activeSlave, 20)>> - <<set $activeSlave.race = $arcologies[0].FSSubjugationistRace>> - <<set $activeSlave.skin = randomRaceSkin($arcologies[0].FSSubjugationistRace)>> - <<run setEyeColor($activeSlave, randomRaceEye($arcologies[0].FSSubjugationistRace))>> - <<set $activeSlave.hColor = randomRaceHair($arcologies[0].FSSubjugationistRace)>> - <<set $activeSlave.override_Skin = 1, $activeSlave.override_Eye_Color = 1, $activeSlave.override_H_Color = 1>> - <</replace>> -<</link>><<if ($activeSlave.anus == 0) || ($activeSlave.vagina == 0)>> //This option will take $his virginity and ignore $his chastity//<</if>> -<br><<link "No surgery today, but give $him something to think about">> - <<setNonlocalPronouns $seeDicks>> - <<replace "#result">> - You stroke <<print $activeSlave.slaveName>>'s $activeSlave.skin cheek and tell $him that $he has much more to lose than $he realizes. You decide to give $him a tour of the arcology to show $him what you mean. You make sure to <<if canSee($activeSlave)>>point out<<else>>explain<</if>> everything that makes living in your arcology as a $arcologies[0].FSSubjugationistRace slut special. - <<if $dairy > 0>> - There are the specially calibrated "<<print $arcologies[0].FSSubjugationistRace>> only" industrial human milking machines in $dairyName which have been set for maximum milking efficiency, disregarding any need for slave comfort. - <<else>> - There are the segregated milking stalls, where only the dirtiest and most dilapidated machines are reserved for filthy $arcologies[0].FSSubjugationistRace sluts. - <</if>> - <<if $club > 0>> - There are the "refresher" sinks in $clubName where normal slaves can go to periodically clean the cum out of their holes before returning to service more citizens — but such a luxury is off limits to $arcologies[0].FSSubjugationistRace animals, who simply have to work through their long shifts with ever increasing amount of ejaculate covering their worthless bodies. - <<else>> - There are the "animal fuckers" in the public square — groups of racial purists who specifically seek out slaves of the inferior $arcologies[0].FSSubjugationistRace race to mistreat through extreme public use. - <</if>> - <<if $clinic > 0>> - While $clinicName is available to normal slaves to recover from injuries and general ill health, such things aren't afforded to $arcologies[0].FSSubjugationistRace whores. They have to work through it, no matter the outcome. - <<if $activeSlave.ovaries == 1 || $activeSlave.mpreg == 1>> - A slave in the throes of labor catches $his attention. Assisted birth is a luxury; gravid $arcologies[0].FSSubjugationistRace whores receive no aid with childbirth, nor are contraceptives wasted on them. - <</if>> - <<else>> - As you tour, you pass an exhausted $arcologies[0].FSSubjugationistRace _girlU struggling to give birth. _HeU'll be left to handle the act alone as medical care is seldom given to $arcologies[0].FSSubjugationistRace mongrels. - <<if $activeSlave.ovaries == 1 || $activeSlave.mpreg == 1>> - It's a common occurrence for pregnant subhumans, since they aren't worth the cost of contraception. - <</if>> - <</if>> - Finally - <<if $arcade > 0>> - you take $him over to $arcadeName, and <<if canSee($activeSlave)>>give $him an up close view of<<else>>let $him feel<</if>> the brutal ring gag used to pry open the $arcologies[0].FSSubjugationistRace sluts' mouths for relentless cock-milking purposes. - <<else>> - you take $him over to the glory hole area, where distinct labels adorn the holes reserved for members of the slave race, and $arcologies[0].FSSubjugationistRace fuck-holes are afforded "special attention" by "sympathetic" citizens of the arcology. - <</if>> - <br><br> - At first $activeSlave.slaveName is confused as to why you are showing $him these things, but you soon make your point clear. You explain that if $he doesn't start accepting $his role, you can easily alter $his appearance and force $him to accept a much different role instead. You see $his <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant < -15>> stupid <<if canSee($activeSlave)>>eyes<<else>>face<</if>> finally start to show signs of understanding<<else>>intelligent <<if canSee($activeSlave)>>eyes<<else>>face<</if>> quickly realize what you are talking about<</if>> and $he starts to whimper helplessly, begging you not to turn $him into a $arcologies[0].FSSubjugationistRace subhuman. By the end of the tour $he better realizes exactly what it means to be a slave. $He is starting to understand the @@.hotpink;power you have over $him,@@ and @@.gold;$he fears you even more because of it.@@ - <<set $activeSlave.devotion += 5, $activeSlave.trust -= 10>> - <</replace>> -<</link>> -<br><<link "Discipline $him normally. Artificial racial subjugation is going too far">> - <<replace "#result">> - You look $activeSlave.slaveName over, and something about $him makes you reconsider playing games with $his racial appearance. <<if $activeSlave.race == $arcologies[0].FSSupremacistRace>>Perhaps $his natural $activeSlave.race supremacy is too sacrosanct for you to go to such lengths. <</if>>You'll not make such an extreme example of $him. Still, $he is a disobedient slave, and $he cannot be allowed to openly defy your orders and inspections. You - <<if $activeSlave.belly >= 300000>> - shove $him onto $his _belly belly, expose $his bare ass - <<else>> - take $him over your knee, expose $his bare ass - <</if>> - and spank $him hard and relentlessly. $He screams and whines and struggles, and you call in an obedient slave to help keep control of $him as you punish $his reddened bottom. You also make sure to tell $him how lucky $he is that $he isn't one of those worthless subhuman $arcologies[0].FSSubjugationistRace sluts, and that $he is getting off easy. But you also remind $him that there are worse owners to belong to, and if $he continues to resist your will, you will be very selective about who you sell $him to. - <br><br> - By the time you've finished with $his sensitive ass, it shines red, and $he is crying and whimpering in pain. You send $him away, having @@.hotpink;dampened $his resistance a bit,@@ and @@.gold;scared $him with your tales of how much worse life could be@@ for $him - <<if $activeSlave.race == $arcologies[0].FSSupremacistRace>> - if $he weren't born of the supreme race. - <<else>> - under a less forgiving owner. - <</if>> - <<set $activeSlave.devotion += 5, $activeSlave.trust -= 5>> - <</replace>> -<</link>> - -<<case "transition anxiety">> - -<<if canDoAnal($activeSlave)>> - <<link "Fuck $him">> - <<replace "#result">> - You announce that you're going to fuck $his <<if $activeSlave.anus == 0>>virgin <</if>>asspussy. To your complete lack of surprise, $he can't hide $his horror at the prospect of <<if $PC.dick != 0>>having a cock inside $him<<else>>being fucked with a strap-on<</if>>, and $his <<if canSee($activeSlave)>>wide, <<= App.Desc.eyesColor($activeSlave)>> track<<else>>terrified face follows<</if>> your movements closely as you stand up and <<if $PC.dick != 0>>reveal the formidable member<<else>>don the strap-on<</if>> you're about to breed $him with. You order $him to <<if hasAnyLegs($activeSlave)>>kneel<<else>>get<</if>> on the couch, which $he does, @@.gold;cringing in fear of being buttfucked, but knowing disobedience will be worse;@@ and then you order $him to reach down and spread $his butt for you, as wide as it'll go. $He complies, - <<if $activeSlave.butt > 12>> - grabbing as much flesh as $he can of each monstrous buttock and heaving them as far apart as $he can manage in an attempt - <<elseif $activeSlave.butt > 6>> - taking a handful of each massive buttock and heaving them apart to reveal $his - <<elseif $activeSlave.butt > 3>> - pulling $his plush buttocks apart - <<else>> - even though $his cute ass doesn't have to be spread - <</if>> - to reveal $his - <<if $activeSlave.anus > 2>> - whorish anal slit. - <<elseif $activeSlave.butt > 1>> - relaxed rear hole. - <<else>> - tight little rosebud. - <</if>> - You let $him soak in $his discomfort, <<if $PC.dick != 0>>stroking your cock gently<<else>>rubbing a little lube on the tip of your phallus<</if>> and letting $him see how big it is. $His cringing even extends to $his asshole, - <<if $activeSlave.analArea > 3>> - the huge area of crinkled skin - <<elseif $activeSlave.analArea > 1>> - the crinkled skin around $his anus - <<else>> - $his little pucker - <</if>> - tensing as $he anticipates anal sex. - <<set $activeSlave.trust -= 3>> - <br><br><span id="result2"> - <<link "Make sure $he gets off on it">> - <<replace "#result2">> - You press <<if $PC.dick != 0>>yourself<<else>>your weapon<</if>> past $his sphincter with care, and $his posture softens a little as $he realizes you aren't going to hurt $him. Once you've hilted <<if $PC.dick != 0>>your cock<<else>>the strap-on<</if>> inside $him, you caress $his - <<if $activeSlave.belly >= 150000>> - _belly distended - <<elseif $activeSlave.weight > 95>> - fat - <<elseif $activeSlave.belly >= 5000>> - <<if $activeSlave.bellyPreg >= 3000>> - pregnancy swollen - <<elseif $activeSlave.bellyImplant >= 3000>> - implant swollen - <<else>> - <<print $activeSlave.inflationType>>-bloated - <</if>> - <<elseif $activeSlave.weight > 30>> - chubby - <<elseif $activeSlave.waist < -95>> - narrow - <<elseif $activeSlave.muscles > 30>> - muscular - <<elseif $activeSlave.waist < -10>> - wasp - <<elseif $activeSlave.weight > 10>> - soft - <<elseif $activeSlave.muscles > 5>> - toned - <<else>> - thin - <</if>> - waist, running your hands across $his skin. Then you <<if $activeSlave.clitPiercing == 3>>activate $his smart frenulum piercing<<else>>secure a couple of little egg vibes to $his dick<</if>>. $He gasps as the vibration starts, and then gasps again as $his anus tightens involuntarily with the stimulation, squeezing the <<if $PC.dick != 0>>warm penis<<else>>phallus<</if>> that fills it. $He <<if $activeSlave.voice > 0>>moans openly<<else>>rasps mutely<</if>> as you pull out and then thrust into $him. Much against $his will, $he <<if canAchieveErection($activeSlave)>>quickly becomes erect<<else>>starts to drip precum, which is $his ballsless body's way of showing arousal<</if>>. - <<if $activeSlave.fetish == "buttslut">> - <<if $activeSlave.fetishKnown == 1>> - <<if $activeSlave.fetishStrength > 95>> - Every time $he takes it up the butt, $he's reminded that $he's a natural buttslut, and the reminder @@.lightsalmon;helps $him relax and accept sodomy.@@ - <<set $activeSlave.fetishStrength += 10>> - <<else>> - $He knows $he gets off easily on anal stimulation, but taking it like this still isn't $his favorite activity. Still, the <<if $activeSlave.prostate > 0>>prostate<<else>>rectal<</if>> stimulation does its work, and $he @@.hotpink;submits to having $his favorite hole pleasured.@@ - <<set $activeSlave.devotion += 3>> - <</if>> - <<else>> - You notice that $he stiffens again, looking down at $his traitorous member in shock at how much $he enjoys the sensation of <<if $activeSlave.prostate > 0>>prostate<<else>>rectal<</if>> stimulation. @@.lightsalmon;$He's a buttslut!@@ - <<set $activeSlave.fetishKnown = 1>> - <</if>> - <</if>> - <<= VCheck.Anal($activeSlave, 1)>> - Not long after you penetrate $him, $he - <<if $activeSlave.balls > 0>> - squirts a weak ejaculation onto the couch. - <<else>> - shivers and releases some watery fluid. - <</if>> - $He had almost forgotten that $he was being fucked like a girl, and stiffens uncomfortably when $he feels you <<if $PC.dick != 0>>fill $his rectum with your hot seed<<else>>grip $his hips harder and shake with your own climax<</if>>. As $he gets up from the couch, $he seems @@.hotpink;subdued and submissive.@@ After all, if $he's submitting to you, that absolves $him of responsibility for what $he's becoming. - <<set $activeSlave.devotion += 5>> - <</replace>> - <</link>> - <br><<link "Rape $him">> - <<replace "#result2">> - You grab $his hips, getting a good grip, and spear the poor $desc without any hint of mercy. $He <<if $activeSlave.voice > 0>>screams in pain and fear<<else>>sucks in a great sobbing gasp<</if>>, and tries to wriggle away despite $his intention of submitting to your use, but you hold $him in place and rape $his ass. - <<= VCheck.Anal($activeSlave, 1)>> - $He tries to maintain $his position, crying openly, but eventually slides off $his perch on the couch, pulling $his hole off your <<if $PC.dick != 0>>dick<<else>>strap-on<</if>>. You grab $him by <<if $activeSlave.hLength > 20>>hair<<else>>neck<</if>> and smash $his face into the angle of the couch, leaving $his poor butt completely vulnerable. $He can't see you line up to ream $him again, but $he knows it's coming and cries, quivering. After a while, you haul $him up to $his feet and keep fucking $him, the uncomfortable angle of standing anal forcing new <<if $activeSlave.voice > 0>>squeals<<else>>rasps<</if>> out of $him. You pour degradation into $his ear as you take your pleasure from $his unhappy body, telling $him that $he's your fuckmeat. $He believes you, and when you finally orgasm and let $him slide off your hateful <<if $PC.dick != 0>>penis<<else>>strap-on<</if>>, $he's @@.gold;already terrified@@ of the next time you feel like fucking $him. - <<set $activeSlave.trust -= 5>> - <</replace>> - <</link>> - </span> - <</replace>> - <</link>><<if $activeSlave.anus == 0>> //This option will take $his anal virginity//<</if>> -<</if>> -<br><<link "Humiliate $him in public">> - <<replace "#result">> - You get up from behind your desk, drawing an apprehensive <<if canSee($activeSlave)>>stare<<else>>look<</if>>. To $his bemusement, you order $him to follow you and leave your office. $He hurries to obey, $his footsteps pattering along behind you, but they become much more hesitant as you make your way out of the penthouse and $he realizes that $he's about to be in public, naked. You don't bother looking back, knowing that $he's sufficiently afraid of you to obey. On the border between your private domain and the public hustle and bustle of the arcology's public life, $he stops for a long moment before scurrying to catch up with you, barely even noticing that @@.hotpink;$he just swallowed $his sense of shame@@ to obey you and avoid punishment. You stroll along, greeting leading citizens and taking in the hum of your people. $activeSlave.slaveName grows increasingly embarrassed under the hot stares of passersby, cringing closer and closer to your protective side as $he notices how <<if canSee($activeSlave)>>many gazes rest with open hunger on<<else>>many lewd comments focus on<</if>> $his mouth, $his crotch, and $his ass. - <<set $activeSlave.devotion += 3>> - <br><br><span id="result2"> - <<link "Make $him perform oral on you, right here">> - <<replace "#result2">> - You reach around, place a dominating hand on $his shoulder, pull $him around in front of you, and push $him down to $his knees. $He quickly realizes what's coming, and $his $activeSlave.skin cheeks blush furiously as you reveal your <<if $PC.dick != 0>>meaty dick<<else>>flushed pussy<</if>> and offer it to $him. $He gets busy, burying $his head against you with a speed that seems surprising until it occurs to you that this allows $him to hide $his face. Deciding to accept this tiny compromise, you run a possessive hand <<if $activeSlave.hLength < 5>>across $his smooth scalp<<elseif $activeSlave.hLength < 20>>through $his short hair<<else>>through $his tresses<</if>> and murmur praise for $his enthusiasm. $He stiffens at the implication that $he wants to be <<if $PC.dick != 0>>polishing your penis<<else>>eating you out<</if>> in broad daylight, but after a slight pause $he decides that this isn't bad. As <<if $PC.dick != 0>>$his head continues to bob back and forth as $he sucks your dick<<else>>$he continues nuzzling $his nose and mouth against your wet cunt<</if>>, $he fails to notice $his @@.hotpink;second major submission today.@@ - <<if $activeSlave.fetish == "humiliation">> - <<if $activeSlave.fetishKnown == 1>> - Since $he has a humiliation fetish, the embarrassment has been arousing $him even as it's been torturing $him. Unsatisfied with just this, $his need to be shamed obliges $him to cock $his hips and make sure onlookers can see $his asspussy as $he services you with $his mouth. - <<if $activeSlave.fetishStrength > 95>> - @@.lightsalmon;$His need for humiliation has deepened.@@ - <<set $activeSlave.fetishStrength += 10>> - <<else>> - Such abject sluttery @@.hotpink;helps convince $him of $his status as a slave $girl.@@ - <<set $activeSlave.devotion += 3>> - <</if>> - <<else>> - To your surprise, $he even starts to glance around, checking to verify that $he's still being watched. @@.lightsalmon;$He's a humiliation slut!@@ - <<set $activeSlave.fetishKnown = 1>> - <</if>> - <</if>> - <<set $activeSlave.devotion += 5>> - <<run seX($activeSlave, "oral", $PC, "penetrative")>> - <</replace>> - <</link>> - <br><<link "Make $him cum in public">> - <<replace "#result2">> - You produce three little egg vibrators, which instantly steal $his anxious attention away from the passersby who <<if canSee($activeSlave)>>stare<<else>>whistle catcalls<</if>> at $him. You require $him to hold $his dick out while you use an elastic band to attach one of the vibrators to the underside of its head. $He doesn't get to touch $himself much anymore, and the half-forgotten sensations of doing so almost make $him forget that $he's naked in public, and almost certainly about to do something very embarrassing. Then you order $him to hold $his dick up and place another vibrator <<if $activeSlave.scrotum > 0>>against $his sensitive scrotum<<else>>against the sensitive skin where $his scrotum used to be<</if>>. Finally, you order $him to bend over and offer you $his asshole. $He obeys, with apprehension, and is actually relieved when you just place the final vibrator against, but not inside, $his <<if $activeSlave.anus > 1>>asspussy<<else>>pucker<</if>>. $He finds $himself ordered to kneel and put $his hands on $his head; and ordering $him to hold this position, you use remote control of the vibrators to force $him to cum twice. $He can't <<if canSee($activeSlave)>>tear $his eyes away from<<else>>tune out<</if>> the citizens who stare and laugh as $he <<if $activeSlave.balls > 0>>spurts $his seed<<else>>dribbles weakly<</if>> onto the floor. - <<if $activeSlave.fetish == "humiliation">> - <<if $activeSlave.fetishKnown == 1>> - <<if $activeSlave.fetishStrength > 95>> - Though $he's still unhappy about being a slave $girl, @@.lightsalmon;appetite for humiliation has deepened.@@ - <<set $activeSlave.fetishStrength += 10>> - <<else>> - The abject humiliation slut climaxes harder each time, and can't stop $himself @@.mediumaquamarine;glancing at you with something like trust.@@ - <<set $activeSlave.trust += 3>> - <</if>> - <<else>> - With a mix of horror and dawning arousal, $he discovers that $he enjoys the stares. @@.lightsalmon;$He's a humiliation slut!@@ - <<set $activeSlave.fetishKnown = 1>> - <</if>> - <</if>> - As $he follows you back to your penthouse, $he seems almost cheerful, and will definitely be @@.mediumaquamarine;more trusting of strange orders@@ in the future. - <<set $activeSlave.trust += 5>> - <</replace>> - <</link>> - </span> - <</replace>> -<</link>> - <<case "breast expansion blues">> <<link "Let $him know $he'll be growing as fast as possible">>