From 030ba34116802d1f97ea93a764fbc4fb967e31a0 Mon Sep 17 00:00:00 2001 From: kopareigns <kopareigns@gmail.com> Date: Sun, 19 Jul 2020 17:58:29 -0400 Subject: [PATCH] Obedient Idiot to JS --- src/events/RESS/obedientIdiot.js | 163 +++++++++++++++++++++++++++++++ src/events/randomEvent.js | 1 + src/js/eventSelectionJS.js | 20 ---- src/uncategorized/RESS.tw | 80 +-------------- 4 files changed, 165 insertions(+), 99 deletions(-) create mode 100644 src/events/RESS/obedientIdiot.js diff --git a/src/events/RESS/obedientIdiot.js b/src/events/RESS/obedientIdiot.js new file mode 100644 index 00000000000..9714de6e9a8 --- /dev/null +++ b/src/events/RESS/obedientIdiot.js @@ -0,0 +1,163 @@ +App.Events.RESSObedientIdiot = class RESSObedientIdiot extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.cockFeeder === 0 + ]; + } + + actorPrerequisites() { + return [ + [ // single event slave + s => s.fetish !== "mindbroken", + hasAnyArms, + s => s.intelligence + s.intelligenceImplant < -50, + s => s.devotion <= 50, + s => s.devotion > -20 || s.trust < -20 + ] + ]; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + let [eventSlave] = this.actors.map(a => getSlave(a)); + const { + He, he, His, his, him, girl + } = getPronouns(eventSlave); + const {HeA, heA} = getPronouns(assistant.pronouns().main).appendSuffix('A'); + const {S, s, say, title: Master} = getEnunciation(eventSlave); + const belly = bellyAdjective(eventSlave); + + /** @type {App.Entity.PlayerState} */ + let PC = V.PC; + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, eventSlave, "no clothing"); + + let t = []; + + t.push(`${capFirstChar(V.assistant.name)} breaks in on your work at your desk. "${assistant.personality === 0 ? properTitle() : "Sweetheart"}," ${heA} says, "`); + t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave)); + t.push("is having trouble figuring out the meal dispenser again."); + if (V.assistant.personality === 0) { + t.push(`The report is deadpan, but ${heA} brings up a visual feed.`); + } else { + t.push(`${HeA} brings up a visual feed. "Poor baby!" ${heA} exclaims.`); + } + App.Events.addParagraph(node, t); + t = []; + + t.push(`Slaves are supposed to place a cup under a spigot, which detects the cup's presence and dispenses the appropriate nutrition for the ${girl}. Unfortunately this concept seems a little tough for ${eventSlave.slaveName}. With no one around to ask for help, ${he} has resorted to trying to suck food out of the spigot with ${his} mouth. With no cup to be detected, ${he}'s not getting very far, and is getting bitterly frustrated.`); + App.Events.addParagraph(node, t); + t = []; + + App.Events.addResponses(node, [ + new App.Events.Result(`Give ${him} something more appropriate to suck on`, suck), + new App.Events.Result(`Reassure ${him} and get ${him} to slow down`, reassure), + new App.Events.Result(`Spank the stupid out of ${him}`, spank), + V.arcade > 0 + ? new App.Events.Result(`Sentence ${him} to a month in the arcade`, arcade) + : new App.Events.Result() + ]); + + function suck() { + t = []; + + t.push(`${capFirstChar(V.assistant.name)}, as usual, has to give the stupid slut considerable coaching to get ${him} to your office without getting lost. This is a near-miraculous imbecility, as the penthouse is expressly designed to make it nearly impossible to get anywhere from anywhere else without passing by the office door. ${He} understands orders to`); + if (PC.dick === 0) { + t.push(`perform cunnilingus, though, and gets down to it eagerly enough. When ${he} finishes the job, ${he} wipes ${his} mouth and then looks up at you doubtfully.`); + } else { + t.push(`suck a dick, though, and gets down to it eagerly enough. When ${he} finishes the job, ${he} busily swallows every drop of your ejaculate and then looks up at you doubtfully.`); + } + if (!canTalk(eventSlave)) { + t.push(`${He} slowly spells out a question with ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"}, asking if ${he}'s a good slave.`); + } else { + t.push(`${He} mumbles a hesitant question: "${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}, am I a good ${s}lave?"`); + } + t.push(`You tell ${him} that ${he} is, running a hand ${eventSlave.hStyle === "shaved bald" ? `across ${his} bald scalp` : `through ${his} hair`}. ${He} seems <span class="hotpink">reassured,</span> and thankful when you give ${him} a cup of ${his} proper rations from your own hand.`); + + eventSlave.devotion += 4; + seX(eventSlave, "oral", PC, "penetrative"); + return t; + } + + function reassure() { + t = []; + + t.push(`${He}'s so intent on trying to suck off the food dispenser that ${he} doesn't ${canHear(eventSlave) ? "hear" : "notice"} you enter the room. ${He} starts with surprise when you encircle ${his}`); + if (eventSlave.belly >= 1500) { + t.push(`${belly} ${eventSlave.bellyPreg >= 1500 ? "pregnant" : ""} belly`); + } else { + t.push("waist"); + } + t.push(`with your arms and ${canHear(eventSlave) ? `murmur reassuringly in ${his} ear` : `give ${him} a reassuring squeeze`}.`); + if (canTalk(eventSlave)) { + t.push(`${He} ${say}s sadly, "${S}orry ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}. I'm trying to be a good ${s}lave but it'${s} hard."`); + } else { + t.push(`${He} sadly gestures at the spigot and then flicks ${his} own head.`); + } + t.push(`You kindly tell ${him} that you know ${he}'s trying, and that that's what really matters.`); + if (canTalk(eventSlave)) { + t.push(`"Really, ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}?" ${he} asks hopefully.`); + } else { + if (hasBothArms(eventSlave)) { + t.push(`${His} hands awkwardly ask, "Really?"`); + } else { + t.push(`${His} hand awkwardly asks, "Really?"`); + } + } + t.push(`You whisper into ${his} ear that yes, ${he} will be all right as long as ${he} does ${his} best. ${He} wiggles ${his} butt against you a little and giggles`); + if (PC.dick !== 0) { + t.push(`at the responding stiffness ${he} feels between ${his} buttocks. ${He} shimmies down and takes you into ${his} mouth${PC.vagina !== 1 ? ` and does ${his} best to reach the top of your pussy with the tip of ${his} tongue` : ""},`); + } else { + t.push(`as you shove ${him} to ${his} knees. ${He} shimmies down and eats you out,`); + } + t.push(`${canSee(eventSlave) ? "looking you in the eyes the whole time and" : ""} <span class="hotpink">smiling</span> as much as ${he} can manage with ${PC.dick !== 0 ? `a dick in ${his} mouth` : `${his} tongue working your clit`}.`); + + eventSlave.devotion += 4; + seX(eventSlave, "oral", PC, "penetrative"); + return t; + } + + function spank() { + t = []; + + t.push(`${He}'s so intent on trying to suck off the food dispenser that ${he} doesn't ${canHear(eventSlave) ? "hear" : "notice"} you enter the room. ${He} starts with surprise when you seize ${him} and push ${him}`); + if (eventSlave.belly >= 300000) { + t.push(`over ${his} _belly belly, face-down into the counter.`); + } else { + t.push(`face-down across the counter.`); + } + t.push(`After making ${him} confirm that ${canHear(eventSlave) ? `${he} can hear you` : `${he}'s paying attention`}, you patiently repeat the very simple instructions for getting meals from the kitchen. Then, you tell ${him} to repeat them. ${He} manages the first step fine and has completely forgotten the second. The moment ${he} hesitates, ${he} has an instant to ${canHear(eventSlave) ? "hear" : "feel"} the rush of air trying to get out of the way of your speeding palm before it contacts the eventSlave.skin skin of ${his} buttocks. ${He} writhes and cries and promises to try harder, but ${his} poor rear end is almost raw before ${he} gets it all right. ${He} leaves the kitchen snuffling sadly to ${him}self, but in the coming days ${he} really does seem to <span class="gold">do ${his} best</span> to avoid another beating.`); + + eventSlave.trust -= 5; + return t; + } + + function arcade() { + t = []; + + t.push(`${eventSlave.slaveName} screams and begs when ${he} realizes what ${his} punishment for being stupid is to be, but you are obdurate.`); + if (eventSlave.muscles > 30) { + t.push(`${His} powerful form has to be sedated for immurement in the arcade.`); + } else if (eventSlave.weight >= 190) { + t.push(`${He} is so massively fat that immuring ${him} in the arcade is a struggle, even when ${he} isn't trying to.`); + } else if (eventSlave.belly >= 120000) { + t.push(`${He} is so enormously gravid that immuring ${him} in the arcade is a hassle, even though ${his} ${belly} middle limits ${his} ability to struggle.`); + } else if (eventSlave.weight >= -10) { + t.push(`${His} desperate struggles make immuring ${him} in the arcade difficult.`); + } else if (eventSlave.belly >= 1500) { + t.push(`${His} ${eventSlave.bellyPreg >= 3000 ? "pregnant" : `${belly}`} body makes it slightly difficult to fit ${him} properly into the restraints for immurement in the arcade.`); + } else if (eventSlave.muscles < -15) { + t.push(`${His} weak body makes immuring ${him} in the arcade pathetically easy.`); + } else { + t.push(`${His} thin form makes immuring ${him} in the arcade pathetically easy.`); + } + t.push(`After ${he}'s properly confined, the only sign of ${his} discomfiture is a slight movement of ${his} ${eventSlave.skin} butt as ${he} wriggles desperately against ${his} restraints.`); + + assignJob(eventSlave, "be confined in the arcade"); + eventSlave.sentence = 4; + return t; + } + } +}; diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index a1fbce69e6f..ec625c1f7c0 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -18,6 +18,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RESSMoistPussy(), new App.Events.RESSMuscles(), new App.Events.RESSObedientBitchy(), + new App.Events.RESSObedientIdiot(), new App.Events.RESSRetchingCum(), new App.Events.RESSSuppositoryResistance(), new App.Events.RESSWaistlineWoes(), diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js index 622b14fac36..a7dfab27dd7 100644 --- a/src/js/eventSelectionJS.js +++ b/src/js/eventSelectionJS.js @@ -1306,16 +1306,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) { } } /* closes mute exempt */ - if (V.cockFeeder === 0) { - if (eventSlave.intelligence + eventSlave.intelligenceImplant < -50) { - if (eventSlave.devotion <= 50) { - if (eventSlave.devotion >= -20 || eventSlave.trust < -20) { - V.RESSevent.push("obedient idiot"); - } - } - } - } - if (eventSlave.boobs > 25000) { if (eventSlave.belly < 100000) { V.RESSevent.push("tittymonster inspection"); @@ -2478,16 +2468,6 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) { } } /* closes mute exempt */ - if (V.cockFeeder === 0) { - if (eventSlave.intelligence + eventSlave.intelligenceImplant < -50) { - if (eventSlave.devotion <= 50) { - if (eventSlave.devotion >= -20 || eventSlave.trust < -20) { - V.RESSevent.push("obedient idiot"); - } - } - } - } - if (V.assistant > 1) { if (eventSlave.fetishKnown === 1) { if (eventSlave.energy > 95) { diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw index d51472911af..b7feb0ce713 100644 --- a/src/uncategorized/RESS.tw +++ b/src/uncategorized/RESS.tw @@ -44,7 +44,7 @@ <<set _clothesTemp = $activeSlave.clothes>> <<switch $RESSevent>> /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/ -<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">> +<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">> <<set $activeSlave.clothes = "no clothing">> <<case "whore rebellious">> /* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */ @@ -1355,12 +1355,6 @@ The showers your slaves use are well vented and transparent walled so that you c <</if>> <</if>> -<<case "obedient idiot">> - -<<= capFirstChar($assistant.name)>> breaks in on your work at your desk. <<if $assistant.personality == 0>>"<<= properTitle()>>,"<<else>>"Sweetheart,"<</if>> $he says, "<<= App.UI.slaveDescriptionDialog($activeSlave)>> is having trouble figuring out the meal dispenser again." <<if $assistant.personality == 0>>The report is deadpan, but $he brings up a visual feed.<<else>>$He brings up a visual feed. "Poor baby!" $he exclaims.<</if>> -<br><br> -Slaves are supposed to place a cup under a spigot, which detects the cup's presence and dispenses the appropriate nutrition for the $girl. Unfortunately this concept seems a little tough for $activeSlave.slaveName. With no one around to ask for help, $he has resorted to trying to suck food out of the spigot with $his mouth. With no cup to be detected, $he's not getting very far, and is getting bitterly frustrated. - <<case "devoted old">> At the end of a long week, <<= App.UI.slaveDescriptionDialog($activeSlave)>> moves past your office toward bed. This is completely normal part of the arcology routine, but you notice as $he passes that $he's wearing a preoccupied, almost sad expression. You call $him over, and $he makes a visible effort to brighten up as $he comes before you and asks your pleasure. You ask $him what's the matter, and $his face falls. @@ -8735,78 +8729,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h <</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 "obedient idiot">> - -<<link "Give $him something more appropriate to suck on">> - <<replace "#result">> - <<= capFirstChar($assistant.name)>>, as usual, has to give the stupid slut considerable coaching to get $him to your office without getting lost. This is a near-miraculous imbecility, as the penthouse is expressly designed to make it nearly impossible to get anywhere from anywhere else without passing by the office door. $He understands orders to <<if $PC.dick == 0>>perform cunnilingus<<else>>suck a dick<</if>>, though, and gets down to it eagerly enough. When $he finishes the job, <<if $PC.dick == 0>>wipes $his mouth<<else>>$he busily swallows every drop of your ejaculate<</if>> and then looks up at you doubtfully. - <<if !canTalk($activeSlave)>> - $He slowly spells out a question with $his hand<<if hasBothArms($activeSlave)>>s<</if>>, asking if $he's a good slave. - <<else>> - $He mumbles a hesitant question: "<<if $activeSlave.rudeTitle == 1>><<= PoliteRudeTitle($activeSlave)>><<else>><<Master>><</if>>, am I a good <<s>>lave?" - <</if>> - You tell $him that $he is, running a hand <<if $activeSlave.hStyle == "shaved bald">>across $his bald scalp<<else>>through $his hair<</if>>. $He seems @@.hotpink;reassured,@@ and thankful when you give $him a cup of $his proper rations from your own hand. - <<set $activeSlave.devotion += 4>> - <<run seX($activeSlave, "oral", $PC, "penetrative")>> - <</replace>> -<</link>> -<br><<link "Reassure $him and get $him to slow down">> - <<replace "#result">> - $He's so intent on trying to suck off the food dispenser that $he doesn't <<if canHear($activeSlave)>>hear<<else>>notice<</if>> you enter the room. $He starts with surprise when you encircle $his<<if $activeSlave.belly >= 1500>> _belly<<if $activeSlave.bellyPreg >= 1500>> pregnant<</if>> belly<<else>> waist<</if>> with your arms and <<if canHear($activeSlave)>>murmur reassuringly in $his ear<<else>>give $him a reassuring squeeze<</if>>. - <<if !canTalk($activeSlave)>> - $He sadly gestures at the spigot and then flicks $his own head. - <<else>> - $He <<say>>s sadly, "<<S>>orry <<if $activeSlave.rudeTitle == 1>><<= PoliteRudeTitle($activeSlave)>><<else>><<Master>><</if>>. I'm trying to be a good <<s>>lave but it'<<s>> hard." - <</if>> - You kindly tell $him that you know $he's trying, and that that's what really matters. - <<if !canTalk($activeSlave)>> - $His hands awkwardly ask, "Really?" - <<else>> - "Really, <<if $activeSlave.rudeTitle == 1>><<= PoliteRudeTitle($activeSlave)>><<else>><<Master>><</if>>?" $he asks hopefully. - <</if>> - You whisper into $his ear that yes, $he will be all right as long as $he does $his best. $He wiggles $his butt against you a little and giggles <<if $PC.dick != 0>>at the responding stiffness $he feels between $his buttocks<<else>>as you shove $him to $his knees<</if>>. $He shimmies down and <<if $PC.dick != 0>>takes you into $his mouth<<if $PC.vagina != -1>> and does $his best to reach the top of your pussy with the tip of $his tongue<</if>><<else>>eats you out<</if>>, <<if canSee($activeSlave)>>looking you in the eyes the whole time and <</if>>@@.hotpink;smiling@@ as much as $he can manage with <<if $PC.dick != 0>>a dick in $his mouth<<else>>$his tongue working your clit<</if>>. - <<set $activeSlave.devotion += 4>> - <<run seX($activeSlave, "oral", $PC, "penetrative")>> - <</replace>> -<</link>> -<br><<link "Spank the stupid out of $him">> - <<replace "#result">> - $He's so intent on trying to suck off the food dispenser that $he doesn't <<if canHear($activeSlave)>>hear<<else>>notice<</if>> you enter the room. $He starts with surprise when you seize $him and push $him - <<if $activeSlave.belly >= 300000>> - over $his _belly belly, face-down into the counter. - <<else>> - face-down across the counter. - <</if>> - After making $him confirm that $he <<if canHear($activeSlave)>>can hear<<else>>acknowledges<</if>> you, you patiently repeat the very simple instructions for getting meals from the kitchen. Then, you tell $him to repeat them. $He manages the first step fine and has completely forgotten the second. The moment $he hesitates, $he has an instant to <<if canHear($activeSlave)>>hear<<else>>feel<</if>> the rush of air trying to get out of the way of your speeding palm before it contacts the $activeSlave.skin skin of $his buttocks. $He writhes and cries and promises to try harder, but $his poor rear end is almost raw before $he gets it all right. $He leaves the kitchen snuffling sadly to $himself, but in the coming days $he really does seem to @@.gold;do $his best@@ to avoid another beating. - <<set $activeSlave.trust -= 5>> - <</replace>> -<</link>> -<<if $arcade > 0>> - <br><<link "Sentence $him to a month in the arcade">> - <<replace "#result">> - $activeSlave.slaveName screams and begs when $he realizes what $his punishment for being stupid is to be, but you are obdurate. - <<if ($activeSlave.muscles > 30)>> - $His powerful form has to be sedated for immurement in the arcade. - <<elseif ($activeSlave.weight >= 190)>> - $He is so massively fat that immuring $him in the arcade is a struggle, even when $he isn't trying to. - <<elseif $activeSlave.belly >= 120000>> - $He is so enormously gravid that immuring $him in the arcade is a hassle, even though $his _belly middle limits $his ability to struggle. - <<elseif ($activeSlave.weight >= -10)>> - $His desperate struggles make immuring $him in the arcade difficult. - <<elseif $activeSlave.belly >= 1500>> - $His <<if $activeSlave.bellyPreg >= 3000>>pregnant<<else>>_belly<</if>> body makes it slightly difficult to fit $him properly into the restraints for immurement in the arcade. - <<elseif $activeSlave.muscles < -15>> - $His weak body makes immuring $him in the arcade pathetically easy. - <<else>> - $His thin form makes immuring $him in the arcade pathetically easy. - <</if>> - After $he's properly confined, the only sign of $his discomfiture is a slight movement of $his $activeSlave.skin butt as $he wriggles desperately against $his restraints. - <<= assignJob($activeSlave, "be confined in the arcade")>> - <<set $activeSlave.sentence = 4>> - <</replace>> - <</link>> -<</if>> - <<case "devoted old">> <<if canDoAnal($activeSlave) || canDoVaginal($activeSlave)>> -- GitLab