diff --git a/src/events/RETS/reTasteTest.js b/src/events/RETS/reTasteTest.js index 51fb6458122d5d2589d9a587f19c483a3e85e4e6..6ce7b5389939893de974c9d5d2327efed79f2534 100644 --- a/src/events/RETS/reTasteTest.js +++ b/src/events/RETS/reTasteTest.js @@ -9,21 +9,23 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { [ // event slave /domslave s => s.fetish !== "mindbroken", hasAnyArms, - hasAnyLegs, + canMove, canTalk, + canHear, canTaste, s => s.devotion > 20, s => s.energy > 80, - s => s.rules.living === "luxurious", + s => s.chastityVagina === 0 || s.chastityPenis === 0, ], [ // and subslave s => s.fetish !== "mindbroken", canWalk, canTalk, - s => s.rules.living === "luxurious", + canHear, + canTaste, s => s.devotion >= -20, assignmentVisible, - s => (canDoAnal(s) && s.anus !== 0), + s => s.chastityVagina === 0 || s.chastityPenis === 0, ] ]; } @@ -34,9 +36,13 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { const { He, he, his, him, His } = getPronouns(eventSlave); + const {say: say} = getEnunciation(eventSlave); + const arms = hasBothArms(eventSlave) ? "arms" : "arm"; const { he2, his2, him2, He2 } = getPronouns(subSlave).appendSuffix("2"); + const {say: say2} = getEnunciation(subSlave); + const arms2 = hasBothArms(subSlave) ? "arms" : "arm"; V.nextLink = "Next Week"; @@ -45,15 +51,12 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { let t = []; - t.push(`You look into the part of the kitchens used for slave feeding one morning during a quiet time, finding the area deserted except for`); t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, "DOM"), `. ${He}`)); if (canSee(eventSlave)) { t.push(`sees you enter`); - } else if (canHear(eventSlave)) { - t.push(`hears you enter`); } else { - t.push(`feels a light touch on ${his} shoulder`); + t.push(`hears you enter`); } t.push(`and`); if (V.cockFeeder === 1) { @@ -64,10 +67,8 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { t.push(`but you make a dismissive "go back to what you were doing"`); if (canSee(eventSlave)) { t.push(`gesture,`); - } else if (canHear(eventSlave)) { - t.push(`sound,`); } else { - t.push(`nudge,`); + t.push(`sound,`); } t.push(`and ${he} obediently`); if (V.cockFeeder === 1) { @@ -102,7 +103,7 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { App.Events.addParagraph(node, t); t = []; - t.push(`"Oh," says ${subSlave.slaveName}. ${Spoken(subSlave, `"Um, can I try some?"`)}`); + t.push(`"Oh," ${say2}s ${subSlave.slaveName}. ${Spoken(subSlave, `"Um, can I try some?"`)}`); App.Events.addParagraph(node, t); t = []; @@ -136,49 +137,51 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { } else { t.push(`nudity`); } + t.push(`and`); } else { - t.push(`noticed ${his2}`); + t.push(`picked up on the sound`); if (subSlave.dick > 4) { - t.push(`enormous cock`); + t.push(`of ${his2} enormous cock slapping against ${his2} thighs`); } else if (subSlave.boobs > 5000) { - t.push(`enormous bare udders`); + t.push(`of ${his2} enormous bare udders flopping around as ${he2} moves`); } else if (subSlave.belly >= 5000) { if (subSlave.bellyPreg >= 5000) { - t.push(`pregnancy, nudity,`); + t.push(`of ${his2} pregnancy pestering ${him2}`); } else if (subSlave.bellyImplant >= 5000) { - t.push(`big belly, nudity`); + t.push(`of ${his2} big belly bumping things`); } else { - t.push(`${subSlave.inflationType}-filled belly, nudity`); + t.push(`of ${his2} ${subSlave.inflationType}-filled belly gurgling`); } } else if (subSlave.lactation > 1) { - t.push(`milky nipples`); + t.push(`of the milk dripping from ${his2} nipples`); } else { - t.push(`nudity`); + t.push(`of ${his2} bare skin against the cool air`); } + t.push(`in addition to ${his2}`); } - t.push(`and sleepy willingness to be friendly. ${eventSlave.slaveName}`); + t.push(`sleepy willingness to be friendly. ${eventSlave.slaveName}`); if (V.cockFeeder === 1) { t.push(`turns to ${his} phallus and sucks it powerfully, drawing`); } else { t.push(`raises ${his} cup again and draws`); } t.push(`liquid food into ${his} mouth. ${He} turns to ${subSlave.slaveName}.`); - t.push(`"Go ahead," ${he} says carefully, enunciating past ${his} mouthful of fluid, and then purses ${his} lips. ${subSlave.slaveName} is taken aback for a moment, but decides ${he2}'s game and steps in, planting ${his2} lips on ${eventSlave.slaveName}'s.`); + t.push(`"Go ahead," ${he} ${say}s carefully, enunciating past ${his} mouthful of fluid, and then purses ${his} lips. ${subSlave.slaveName} is taken aback for a moment, but decides ${he2}'s game and steps in, planting ${his2} lips on ${eventSlave.slaveName}'s.`); if ((eventSlave.boobs > 3000) && (subSlave.boobs > 3000)) { t.push(`(Their tits are so huge that ${he2} has to fight to get close enough to kiss.)`); } else if (eventSlave.boobs > 5000) { - t.push(`(slave.slaveName's tits are so huge that ${he2} has to press hard against them to get close enough to kiss.)`); + t.push(`(${eventSlave.slaveName}'s tits are so huge that ${he2} has to press hard against them to get close enough to kiss.)`); } else if (subSlave.boobs > 5000) { - t.push(`(subSlave.slaveName's tits are so huge that ${he2} has to press them hard against slave.slaveName to get close enough to kiss.)`); - } else if ((eventSlave.belly >= 5000) && (subSlave.belly >= 5000)) { + t.push(`(subSlave.slaveName's tits are so huge that ${he2} has to press them hard against ${eventSlave.slaveName} to get close enough to kiss.)`); + } else if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) { t.push(`(Their bellies are so swollen`); - if ((eventSlave.preg > eventSlave.pregData.normalBirth/8) && (subSlave.preg > subSlave.pregData.normalBirth/8)) { + if ((eventSlave.preg > eventSlave.pregData.normalBirth / 8) && (subSlave.preg > subSlave.pregData.normalBirth / 8)) { t.push(`with life`); } t.push(`that ${he2} has to fight to get close enough to kiss.)`); } else if (eventSlave.belly >= 300000) { t.push(`(${eventSlave.slaveName}'s`); - if (eventSlave.preg > eventSlave.pregData.normalBirth/8) { + if (eventSlave.preg > eventSlave.pregData.normalBirth / 8) { t.push(`pregnancy`); } else { t.push(`belly`); @@ -186,15 +189,15 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { t.push(`is so massive that ${he2} has to practically climb atop it to get close enough to kiss.)`); } else if (subSlave.belly >= 300000) { t.push(`(${subSlave.slaveName}'s`); - if (subSlave.preg > subSlave.pregData.normalBirth/8) { + if (subSlave.preg > subSlave.pregData.normalBirth / 8) { t.push(`pregnancy`); } else { t.push(`belly`); } - t.push(`is so massive that ${he2} has to practically climb atop it to get close enough to kiss.)`); + t.push(`is so massive that ${he2} has to practically lift ${eventSlave.slaveName} with it to get close enough to kiss.)`); } else if (eventSlave.belly >= 10000) { t.push(`(${eventSlave.slaveName}'s`); - if (eventSlave.preg > eventSlave.pregData.normalBirth/8) { + if (eventSlave.preg > eventSlave.pregData.normalBirth / 8) { t.push(`pregnancy`); } else { t.push(`belly`); @@ -202,14 +205,14 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { t.push(`is so big that ${he2} has to press hard against it to get close enough to kiss.)`); } else if (subSlave.belly >= 10000) { t.push(`(${subSlave.slaveName}'s`); - if (subSlave.preg > subSlave.pregData.normalBirth/8) { + if (subSlave.preg > subSlave.pregData.normalBirth / 8) { t.push(`pregnancy`); } else { t.push(`belly`); } t.push(`is so big that ${he2} has to press it firmly against ${eventSlave.slaveName} to get close enough to kiss.)`); } - t.push(`${He2} stiffens with the lewd feeling of the warm fluid pressing into ${his2} mouth. After a moment ${he2} tries to back off and concentrate on the food, but ${eventSlave.slaveName} is having none of that, and uses ${his} arms to hug ${subSlave.slaveName} close, making out with ${his} catch.`); + t.push(`${He2} stiffens with the lewd feeling of the warm fluid pressing into ${his2} mouth. After a moment ${he2} tries to back off and concentrate on the food, but ${eventSlave.slaveName} is having none of that, and uses ${his} ${arms} to hug ${subSlave.slaveName} close, making out with ${his} catch.`); if (subSlave.energy > 60) { t.push(`${subSlave.slaveName}'s own powerful sex drive is waking up, and ${he2} clearly doesn't mind.`); } else { @@ -221,7 +224,10 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { App.Events.addResponses(node, [ new App.Events.Result("This belongs on a live feed", feed), new App.Events.Result("Get involved in the taste testing", involved), - new App.Events.Result("Look, a bare butt", butt), + ((canDoAnal(subSlave) && subSlave.anus !== 0) || (canDoVaginal(subSlave) && subSlave.vagina !== 0) + ? new App.Events.Result("Look, a bare butt", butt) + : new App.Events.Result() + ), ]); @@ -229,23 +235,24 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { t = []; t.push(`You let them continue kissing, but use your tablet to slave one of the plaza's bigger screens to a feed of their nude makeout session. They have no way of knowing, and progress innocently from deep kissing to open mutual masturbation. This is a common sex act among your slaves: it's quick and clean and lets them achieve release before getting back to their duties. When they've both climaxed, you manipulate the situation again, setting a wallscreen in the kitchen to display a feed of the crowd in the plaza enjoying the feed of the situation in the kitchen.`); - if ((eventSlave.fetish === "humiliation") && (eventSlave.fetishKnown === 1) && (subSlave.fetish === "humiliation") && (subSlave.fetishKnown === 1)) { - t.push(`They both blush crimson at the realization, but the pair of humiliation fetishists <span class="hotpink">live for this</span> and wave at the camera, enjoying the afterglow.`); + if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1 && subSlave.fetish === "humiliation" && subSlave.fetishKnown === 1) { + t.push(`They both blush crimson at the realization, but the pair of humiliation fetishists <span class="devotion inc">live for this</span> and wave at the camera, enjoying the afterglow.`); eventSlave.devotion += 2; subSlave.devotion += 2; - } else if ((subSlave.fetish === "humiliation") && (subSlave.fetishKnown === 1)) { - t.push(`${subSlave.slaveName}, a confirmed humiliation slut, <span class="hotpink">lives for this</span> and waves at the camera, enjoying the afterglow.`); + } else if (subSlave.fetish === "humiliation" && subSlave.fetishKnown === 1) { + t.push(`${subSlave.slaveName}, a confirmed humiliation slut, <span class="devotion inc">lives for this</span> and waves at the camera, enjoying the afterglow.`); subSlave.devotion += 2; - } else if ((eventSlave.fetish === "humiliation") && (eventSlave.fetishKnown === 1)) { - t.push(`${eventSlave.slaveName}, a confirmed humiliation slut, <span class="hotpink">lives for this</span> and waves at the camera, enjoying the afterglow.`); + } else if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1) { + t.push(`${eventSlave.slaveName}, a confirmed humiliation slut, <span class="devotion inc">lives for this</span> and waves at the camera, enjoying the afterglow.`); eventSlave.devotion += 2; - } else { + } else if (canSee(eventSlave) || canSee(subSlave)) { t.push(`They blush crimson and both turn back towards each other, desperate to look anywhere but at the sight of the crowd that just watched them jerk each other off.`); + } else { + t.push(`They blush crimson and both turn back towards each other, desperate to look anywhere but at the crowd, but unable to tell where the camera actually is.`); } - t.push(`Such honesty is very tough to fake, and the crowd <span class="green">knows they just saw real pleasure.</span>`); + t.push(`Such honesty is very tough to fake, and the crowd <span class="reputation inc">knows they just saw real pleasure.</span>`); repX(500, "event", eventSlave); seX(subSlave, "oral", eventSlave, "oral"); - V.oralTotal += 2; return t; } @@ -259,7 +266,7 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { } else { t.push(`notices`); } - t.push(`your approach, and you see the corners of ${his} mouth quirk upward. ${He} breaks the lip lock and says breathily,`); + t.push(`your approach, and you see the corners of ${his} mouth quirk upward. ${He} breaks the lip lock and ${say}s breathily,`); t.push(Spoken(eventSlave, `"Hey ${subSlave.slaveName}, I think there's something else you should taste test."`)); App.Events.addParagraph(frag, t); @@ -279,10 +286,22 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { t.push(`eat your pussy.`); } t.push(`This leaves poor ${eventSlave.slaveName} without anyone to make out with, so you step in there, grabbing ${him} and pulling the giggling slave in to kiss ${him} deeply. ${His} mouth is indeed a bit`); - if (eventSlave.preg > eventSlave.pregData.normalBirth/2) { - t.push(`sour.`); + let aftertaste = ""; + if (eventSlave.dietCum === 2) { + aftertaste = ", once you get past the overwhelming taste of cum"; + } else if (eventSlave.dietCum === 1 && eventSlave.dietMilk === 0) { + aftertaste = ", though not without a hint of cum"; + } else if (eventSlave.dietCum === 1 && eventSlave.dietMilk === 1) { + aftertaste = ", though not without hints of cum and milk"; + } else if (eventSlave.dietMilk === 1 && eventSlave.dietCum === 0) { + aftertaste = ", with a hint of breast milk too"; + } else if (eventSlave.dietMilk === 2) { + aftertaste = ", but mostly tastes like mother's milk"; + } + if (eventSlave.preg > eventSlave.pregData.normalBirth / 2) { + t.push(`sour${aftertaste}.`); } else { - t.push(`tart.`); + t.push(`tart${aftertaste}.`); } t.push(`${He} moans into your mouth as ${he} feels ${his} nipples press against`); if (V.PC.boobs >= 300) { @@ -293,19 +312,28 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { t.push(`and then again as your tongue invades ${him}. When you`); if (V.PC.dick !== 0) { t.push(`fill ${subSlave.slaveName}'s mouth with cum,`); + seX(subSlave, "oral", V.PC, "penetrative"); } else { t.push(`climax wetly against ${subSlave.slaveName}'s mouth,`); + seX(subSlave, "oral", V.PC, "vaginal"); + } + t.push(`you pull away slightly, letting the slave on ${his2} knees below you gasp ${Spoken(subSlave, `"You taste great, ${getWrittenTitle(subSlave)}!"`)} before you spin ${him2} around in turn so ${he2} can give ${eventSlave.slaveName} ${his} own allotment of oral sex. You leave them to it. They <span class="trust inc">trust you a bit more</span> after such a lighthearted little escapade.`); + if (eventSlave.dick > 0 && eventSlave.chastityPenis === 0) { + seX(subSlave, "oral", eventSlave, "penetrative"); + } else if (canDoVaginal(eventSlave)) { + seX(subSlave, "oral", eventSlave, "vaginal"); + } else { + actX(subSlave, "oral"); } - t.push(`you pull away slightly, letting the slave on ${his2} knees below you gasp ${Spoken(subSlave, `"You taste great, ${getWrittenTitle(subSlave)}!"`)} before you spin ${him2} around in turn so ${he2} can give ${eventSlave.slaveName} ${his} own allotment of oral sex. You leave them to it. They <span class="mediumaquamarine">trust you a bit more</span> after such a lighthearted little escapade.`); eventSlave.trust += 2; subSlave.trust += 2; - seX(subSlave, "oral", eventSlave, "penetrative", 2); App.Events.addParagraph(frag, t); return frag; } function butt() { + const sexTarget = (canDoVaginal(subSlave) && subSlave.vagina !== 0) ? "vaginal" : "anal"; t = []; t.push(`You move in, looking intently at ${subSlave.slaveName}'s bare, vulnerable butt. ${eventSlave.slaveName}`); @@ -333,9 +361,9 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { } else { t.push(`waist`); } - t.push(`and ${his2} arms around ${eventSlave.slaveName}'s`); + t.push(`and ${his2} ${arms2} around ${eventSlave.slaveName}'s`); if (subSlave.belly >= 5000) { - t.push(`shoulders, pushing their `); + t.push(`shoulder${hasBothArms(subSlave) ? "s" : ""}, pushing their`); if (eventSlave.bellyPreg >= 2000) { t.push(`pregnancies`); } else { @@ -343,7 +371,7 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { } t.push(`together`); } else { - t.push("shoulders."); + t.push(`shoulder${hasBothArms(subSlave) ? "s" : ""}.`); } t.push(`${eventSlave.slaveName}`); if (subSlave.butt > 6) { @@ -370,23 +398,52 @@ App.Events.RETSTasteTest = class RETSTasteTest extends App.Events.BaseEvent { } else { t.push(`two fingers`); } - t.push(`press against and then inside ${his2} butthole. ${He2} tries to turn away from ${eventSlave.slaveName} and greet you properly, but ${eventSlave.slaveName} won't let ${him2}, so ${he2} tries to mumble a greeting into ${eventSlave.slaveName}'s mouth and then settles for a spastic wave of one hand. This is an alluringly awkward process made desperate by the distracting feeling of you fucking ${his2} ass. You could have done something more inventive with the situation, but the feeling of`); + if (sexTarget === "vaginal") { + t.push(`trace ${his2} pussy lips before slipping inside.`); + } else { + t.push(`press against and then inside ${his2} butthole.`); + } + t.push(`${He2} tries to turn away from ${eventSlave.slaveName} and greet you properly, but ${eventSlave.slaveName} won't let ${him2}, so ${he2} tries to mumble a greeting into ${eventSlave.slaveName}'s mouth and then settles for a spastic wave of ${hasBothArms(subSlave) ? "one hand" : "a foot"}. This is an alluringly awkward process made desperate by the distracting feeling of you`); + if (sexTarget === "vaginal") { + t.push(`fucking ${him2}.`); + } else { + t.push(`fucking ${his2} ass.`); + } + t.push(`You could have done something more inventive with the situation, but the feeling of`); if (V.PC.dick !== 0) { t.push(`an anal sphincter around the base of your dick`); } else { t.push(`finger fucking a compliant slave's submissive asspussy while you look after yourself with your other hand`); } - t.push(`never gets old. Why complicate things? An hour later you leave your fucktoys stumbling tiredly towards the shower, <span class="hotpink">sexually satiated</span> and anally dominated.`); - eventSlave.trust += 2; - subSlave.trust += 2; - seX(subSlave, "anal", V.PC, "penetrative", 2); - seX(eventSlave, "anal", V.PC, "penetrative", 2); - if (canImpreg(eventSlave, V.PC)) { - t.push(knockMeUp(eventSlave, 5, 1, -1, true)); + t.push(`never gets old. Why complicate things? An hour later you leave your fucktoys stumbling tiredly towards the shower, <span class="devotion inc">sexually satiated</span> and ${(sexTarget === "anal") ? "anally" : "thoroughly"} dominated.`); + eventSlave.devotion += 2; + subSlave.devotion += 2; + if (sexTarget === "vaginal") { + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 0, -1, true)); + } + } else { + if (canImpreg(subSlave, V.PC)) { + t.push(knockMeUp(subSlave, 5, 1, -1, true)); + } } - if (canImpreg(subSlave, V.PC)) { - t.push(knockMeUp(subSlave, 5, 1, -1, true)); + seX(subSlave, sexTarget, V.PC, "penetrative", 2); + seX(eventSlave, "oral", subSlave, "oral", 2); + if (canDoVaginal(eventSlave) && eventSlave.vagina !== 0) { + seX(eventSlave, "vaginal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 0, -1, true)); + } + seX(eventSlave, "oral", subSlave, "oral"); + } + if (canDoAnal(subSlave) && subSlave.anus !== 0) { + seX(eventSlave, "anal", V.PC, "penetrative"); + if (canImpreg(eventSlave, V.PC)) { + t.push(knockMeUp(eventSlave, 5, 0, -1, true)); + } + seX(eventSlave, "oral", subSlave, "oral"); } + return t; } } diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index 1569a49c521c60d0bac0649c9641f67efd916075..28ea635f285f176185505f4a25fdd67d62190778 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -2307,7 +2307,7 @@ Lately, you've noticed that $he reacts to these <<if canSee($activeSlave)>>sight <<case "huge naturals">> -<<= App.UI.slaveDescriptionDialog($activeSlave)>> comes before you naked for a routine inspection. You take particular care to examine $his massive breasts, since they've grown so large it's necessary to check for unsightly veins, stretch marks, and the like. You note $his big nipples with appreciation. Since $his breasts are so enormous and completely free of implants, they're quite saggy. When $he stands, +<<= App.UI.slaveDescriptionDialog($activeSlave)>> comes before you naked for a routine inspection. You take particular care to examine $his massive breasts, since they've grown so large it's necessary to check for unsightly veins, stretch marks, and the like. You note $his big nipples with appreciation. Since $his breasts are so enormous and completely free of implants, they're quite heavy. When $he stands, <<if $activeSlave.boobShape == "saggy" || $activeSlave.boobShape == "downward-facing">> $his nipples face out and down. <<else>> @@ -12017,7 +12017,7 @@ $He cranes $his neck, glancing over $his shoulder to give you a pleading look. <</if>> <</replace>> <</link>> -<<if canDoAnal($activeSlave) || canDoVaginal($activeSlave) && $activeSlave.belly < 100000>> +<<if (canDoAnal($activeSlave) || canDoVaginal($activeSlave)) && $activeSlave.belly < 100000>> <br><<link "Use $him so they swing around">> <<replace "#result">> You tell $him to kneel on the smooth floor. $He knows this means doggy style, so $he compliantly arches $his back and cocks $his hips to offer $himself to you. You<<if $PC.dick == 0>> don a strap-on and<</if>> enter