From f25b1834e407ce65f9120ace4195a350952c06e3 Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 09:45:03 -0400 Subject: [PATCH 1/7] start --- src/npc/interaction/fKiss.js | 578 +++++++++++++++++++++++++++++++++++ src/npc/interaction/fKiss.tw | 326 -------------------- 2 files changed, 578 insertions(+), 326 deletions(-) create mode 100644 src/npc/interaction/fKiss.js delete mode 100644 src/npc/interaction/fKiss.tw diff --git a/src/npc/interaction/fKiss.js b/src/npc/interaction/fKiss.js new file mode 100644 index 00000000000..32e9abad78c --- /dev/null +++ b/src/npc/interaction/fKiss.js @@ -0,0 +1,578 @@ +/** + * + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ +App.Interact.fKiss = function(slave) { + const node = new DocumentFragment(); + let r = []; + + const { + He, His, + he, his, him, himself, wife, woman, girl + } = getPronouns(slave); + + const {title: Master, say: say} = getEnunciation(slave); + + const {womanP} = getPronouns(V.PC).appendSuffix("P"); + let _tempGag = ""; + r.push(`You tell ${slave.slaveName} to`); + switch (slave.mouthAccessory) { + case "none": + if (canMove(slave)) { + r.push(`approach you.`); + } else { + r.push(`have another slave help ${him} to your desk.`); + } + case "dildo gag": + if (hasAnyArms(slave) && canMove(slave)) { + r.push(`remove ${his} dildo gag and approach you.`); + } else { + r.push(`have another slave remove ${his} dildo gag and set ${him} down on your desk.`); + } + _tempGag = slave.mouthAccessory; + slave.mouthAccessory = "none"; + case "massive dildo gag": + if (hasAnyArms(slave) && canMove(slave)) { + r.push(`pull ${his} enormous dildo gag out of the depths of ${his} throat and approach you.`); + } else { + r.push(`have another slave pull the enormous dildo gag out of the depths of ${his} throat and set ${him} down on your desk.`); + } + _tempGag = slave.mouthAccessory, slave.mouthAccessory = "none"; + default: + if (hasAnyArms(slave) && canMove(slave)) { + r.push(`undo ${his} gag and approach you.`); + } else { + r.push(`have another slave undo ${his} gag and set ${him} down on your desk.`); + } + _tempGag = slave.mouthAccessory, slave.mouthAccessory = "none"; + } + + if (slave.fetish === "mindbroken" && slave.relationship !== -3) { + r.push(`${He} complies mechanically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment.`); + } else if (slave.relationship === -2) { + r.push(`${He} hurriedly complies, happy to be near the object of ${his} longing. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} `); + App.Desc.eyesColor(slave); + r.push(`. ${He} finds the intense look from the ${womanP} ${he} loves overwhelming, and ${his} eyes flick downward after a moment.`); + } else { + r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he} loves and finds it overwhelming, and after a moment glances away.`); + } + r.push(`${He} blushes furiously.`); + } else if (slave.relationship === -3) { + if (slave.fetish === "mindbroken") { + r.push(`${He} complies mechanically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment. You kiss ${him} deeply and intensely; ${he} doesn't understand why.`); + } else if (slave.devotion+slave.trust >= 175) { + r.push(`${He} complies in a ${wife}ly fashion, moving ${his} body as ${he} approaches to best catch your desire. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a smile, running ${his} eyes over your `); + if (V.PC.boobs >= 300) { + r.push(`bosom`); + } else { + r.push(`chest`); + } + r.push(`.`); + } else { + r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s married to and finds it affirming, and looks down with a smile.`); + } + } else if (slave.devotion < -20 && slave.trust > 20) { + r.push(`${He} complies. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to disturbing, and quickly breaks eye contact.`); + } else { + r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s forcibly married to and finds it disturbing, and quickly turns ${his} face away.`); + } + } else if (slave.devotion < -20) { + r.push(`${He} complies fearfully. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} tearing ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to horrifying, and quickly breaks eye contact.`); + } else { + r.push(`upon ${his} tear-streaked face. ${He} senses the intense look from the ${womanP} ${he}'s forcibly married to and finds it horrifying, and quickly turns ${his} face away.`); + } + } else { + r.push(`${He} complies obediently. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to reassuring, and looks down with a slight smile, running ${his} eyes over your `); + if (V.PC.boobs >= 300) { + r.push(`bosom`); + } else { + r.push(`chest`); + } + r.push(`.`); + } else { + r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s married to and finds it reassuring, and looks down with a slight smile.`); + } + } + } else if (slave.devotion > 75) { + r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from ${his} beloved ${getWrittenTitle(slave)}`); + + r.push(` disconcerting, and ${his} eyes flick downward after a moment.`); + } else { + r.push(`upon ${his} face. ${He} senses the intense look from ${his} beloved ${getWrittenTitle(slave)} and finds it disconcerting, and after a moment glances away.`); + } + r.push(`${He} blushes furiously.`); + } else if (slave.devotion > 50) { + r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)}`); + + r.push(` disconcerting, and ${he} looks down after a moment, blushing.`); + } else { + r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and ${he} looks down after a moment, blushing.`); + } + } else if (slave.devotion > 20) { + r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, blushing nervously.`); + } else { + r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, blushing nervously.`); + } + } else if (slave.devotion >= -20 && slave.trust >= -20) { + r.push(`${He} visibly considers disobedience, but decides that complying with such an apparently harmless order is safe, for now. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, ${his} lower lip trembling with nervousness.`); + } else { + r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and turns away after a moment, ${his} lower lip trembling with nervousness.`); + } + } else if (slave.trust < -20) { + r.push(`The command terrifies ${him}, but ${he}'s more frightened still of the consequences of disobedience, and ${he} complies. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. After a mere instant of locked gazes, ${he} looks down fearfully, and begins to shake with terror, tears leaking silently down ${his} cheeks.`); + } else { + r.push(`upon ${his} face. After a mere instant of locked faces, ${he} looks down fearfully, and begins to shake with terror, tears leaking silently down ${his} cheeks.`); + } + } else { + r.push(`${He} pauses, obviously considering whether to resist, but eventually decides to save ${his} strength to fight more onerous orders, and gives in. Once ${he}'s close, you take a moment to gaze deeply`); + if (canSee(slave)) { + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} stares back, but after a few moments ${he} loses the contest of wills and looks down.`); + } else { + r.push(`upon ${his} face. ${He} faces you defiantly, but after a few moments ${he} loses the contest of wills and looks down.`); + } + } + + r.push(`You extend a`); + if (V.PC.title === 1) { + r.push(`manly`); + } else { + r.push(`feminine`); + } + r.push(` hand and graze your fingertips along the line of ${his} cheekbone.`); + if (slave.lipsTat !== 0) { + r.push(`Your fingers trace ${his} facial tattoos, slowly picking out the patterns against ${his} ${slave.skin} skin.`); + } + if (slave.lipsPiercing+slave.tonguePiercing > 2) { + r.push(`You touch each of ${his} facial piercings, one by one, feeling the hard metal contrast with ${his} pliant flesh.`); + } + r.push(`Then, you gently raise ${his} `); + if (slave.face > 95) { + r.push(`heartrendingly beautiful`); + } else if (slave.face > 10) { + r.push(`lovely`); + } else if (slave.face >= -10) { + r.push(`pretty`); + } else if (slave.face >= -40) { + r.push(`homely`); + } else { + r.push(`ugly`); + } + r.push(` chin and kiss ${him} right on ${his} `); + if (slave.lips > 95) { + r.push(`facepussy`); + } else { + if (slave.lips > 70) { + r.push(`pillowlike `); + } else if (slave.lips > 40) { + r.push(`generous `); + } else if (slave.lips > 20) { + r.push(`plush `); + } + r.push(`lips`); + } + r.push(`.`); + + if (slave.relationship === -3) { + if (slave.fetish === "mindbroken") { + r.push(`${His} mouth opens to accept the kiss, and is compliant with your questing tongue. You kiss your broken ${wife} deeply. ${His} posture remains completely unchanged. Being kissed affects ${him} as little as being penetrated, being struck, being loved, or being your V.wife: not at all. When you pull away,`); + if (canSee(slave)) { + r.push(`${his} ${App.Desc.eyesColor(slave)} track you carefully, awaiting further use of ${his} body.`); + } else { + r.push(`${he} exposes ${himself} to you, awaiting further use of ${his} body.`); + } + } else if (slave.devotion+slave.trust >= 175) { + r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`); + if (slave.teeth === "pointy" || slave.teeth === "fangs" || slave.teeth === "fang") { + r.push(` (Though you're quite careful around ${his} sharp dentition.)`); + } + r.push(` ${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); + if (hasAnyArms(slave)) { + r.push(` A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`); + } + if (slave.accent >= 3) { + r.push(`${He} does ${his} best to communicate love with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + } else if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${He} does ${his} best to communicate love with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`.`); + } else if (!canTalk(slave)) { + r.push(`${He} signs that ${he} loves you.`); + } else { + r.push(`"I love you, ${Master}," ${he} says dreamily.`); + } + } else if (slave.devotion < -20 && slave.trust > 20) { + r.push(`${He} reflexively turns ${his} head away from you, but you catch your ${wife} by ${his} jaw and kiss ${him} harder. You wrap your arms around ${him} so ${he} cannot escape. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} glares at you.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes demand`); + } else { + r.push(`expression demands`); + } + r.push(` an answer: are you done?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs irritably, asking if you're done.`); + } else { + r.push(`${He} splutters, "Are you done, ${Master}?"`); + } + } else if (slave.devotion < -20) { + r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him} deeply. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with your ${wife} and pull away, ${he} stares at you in utter incomprehension.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes beg`); + } else { + r.push(`expression begs`); + } + r.push(` for an answer: is that it?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs spastically, begging fearfully to know if that's it.`); + } else { + r.push(`${He} asks nervously before cringing, "I-is that it, ${Master}?"`); + } + } else { + r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the `); + if (slave.physicalAge > 30) { + r.push(`${woman};`); + } else { + r.push(`${girl};`); + } + r.push(`${he}'s doing ${his} duty as a ${wife} by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss,`); + if (canSee(slave)) { + r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly`); + } else { + r.push(`${he} gazes at you`); + } + r.push(`, looking for answers that are not there.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes beg`); + } else { + r.push(`expression begs`); + } + r.push(` for an answer: is that it?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs hesitantly, asking if that's it.`); + } else { + r.push(`${He} asks hesitantly, "I-is that it, ${Master}?"`); + } + } + } else if (slave.fetish === "mindbroken") { + r.push(`${His} mouth opens to accept the kiss, and is compliant with your questing tongue. ${His} posture remains completely unchanged. Being kissed affects ${him} as little as being penetrated, being struck, or being loved: not at all. When you pull away,`); + if (canSee(slave)) { + r.push(`${his} ${App.Desc.eyesColor(slave)} track you carefully, awaiting further use of ${his} body.`); + } else { + r.push(`${he} exposes ${himself} to you, awaiting further use of ${his} body.`); + } + } else if (slave.relationship === -2) { + r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`); + if (slave.teeth === "pointy" || slave.teeth === "fangs" || slave.teeth === "fang") { + r.push(` (Though you're quite careful around ${his} sharp dentition.)`); + } + r.push(` ${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); + if (hasAnyArms(slave)) { + r.push(` A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`); + } + if (slave.accent >= 3) { + r.push(`${He} does ${his} best to communicate love with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + } else if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${He} does ${his} best to communicate love with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`.`); + } else if (!canTalk(slave)) { + r.push(`${He} signs that ${he} loves you.`); + } else { + r.push(`"I love you, ${Master},"`); + r.push(`${he} ${say}s dreamily.`); + } + } else if (slave.devotion > 50 && slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength > 60) { + r.push(`${He} giggles into you and kisses you back with vigor, ${his} head pressing insistently forward. The two of you make out rather aggressively`); + if (slave.teeth === "pointy") { + r.push(`, ${his} sharp teeth drawing a bit of blood from your lips and tongue`); + } else if (slave.teeth === "fangs") { + r.push(`, ${his} fangs drawing a bit of blood from your lips and tongue`); + } else if (slave.teeth === "fang") { + r.push(`, ${his} pointy fang drawing a bit of blood from your lips and tongue`); + } + r.push(`. ${He} takes ${his} tendency towards sexual dominance right up to the edge of insubordination, ${his} active tongue only retreating when yours presses against it. When you finally shove ${him} away, ${he}'s breathing hard through ${his} grin.`); + if (slave.accent >= 3) { + r.push(`${He} does ${his} best to communicate excitement with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + } else if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${He} does ${his} best to communicate excitement with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`.`); + } else if (!canTalk(slave)) { + r.push(`${He} signs that ${he} liked that.`); + } else { + r.push(`"That was fun, ${Master}," ${he} `); + + r.push(`${say}s cheerfully.`); + } + } else if (slave.devotion > 50 && slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength > 60) { + r.push(`${He} stiffens with arousal. ${His} sexuality is complex, focusing on cum, but with a heavy layer of oral fixation. As your tongue plunders ${his} mouth, ${he} reacts almost as though ${he}'s receiving oral, whimpering and moaning into you and pressing ${himself} lewdly against your`); + if (V.PC.boobs >= 1400) { + r.push(`giant tits.`); + } else if (V.PC.boobs >= 1200) { + r.push(`huge breasts.`); + } else if (V.PC.boobs >= 1000) { + r.push(`big breasts.`); + } else if (V.PC.boobs >= 800) { + r.push(`prominent breasts.`); + } else if (V.PC.boobs >= 650) { + r.push(`unremarkable breasts.`); + } else if (V.PC.boobs >= 500) { + r.push(`breasts.`); + } else if (V.PC.boobs >= 300) { + r.push(`tiny breasts.`); + } else if (V.PC.title > 0) { + r.push(`manly chest.`); + } else { + r.push(`non-existent breasts.`); + } + if (slave.teeth === "pointy") { + r.push(`${He}'s very careful to avoid spearing your tongue with ${his} sharp teeth.`); + } else if (slave.teeth === "fangs") { + r.push(`${He}'s very careful to avoid spearing your tongue with ${his} fangs.`); + } else if (slave.teeth === "fang") { + r.push(`${He}'s very careful to avoid poking you with ${his} fang.`); + } + r.push(`${He} achieves a weak orgasm before you tire of making out with ${him}.`); + if (slave.accent >= 3) { + r.push(`${He} does ${his} best to communicate undiminished lust with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + } else if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${He} does ${his} best to communicate undiminished lust with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`.`); + } else if (!canTalk(slave)) { + r.push(`${He} signs that ${he} liked that.`); + } else { + r.push(`"That was fun, ${Master},"`); + r.push(` ${he} ${say}s lustfully.`); + } + } else if (slave.devotion > 50) { + r.push(`${His} mouth accepts yours with devotion, matching itself carefully to your insistent lips and tongue.`); + if (slave.teeth === "pointy") { + r.push(`${He} is exquisitely careful to keep ${his} sharp teeth clear of you.`); + } else if (slave.teeth === "fangs") { + r.push(`${He} is exquisitely careful to keep ${his} fangs from poking you.`); + } else if (slave.teeth === "fang") { + r.push(`${He} is exquisitely careful to keep ${his} fang from getting into trouble.`); + } + r.push(`${He} presses ${himself} against you, ${his} warmth wonderful against your`); + if (V.PC.boobs >= 1400) { + r.push(`expansive `); + if (V.PC.boobsImplant/V.PC.boobs >= .60) { + r.push(`firm`); + } else { + r.push(`soft`); + } + r.push(` chest.`); + } else if (V.PC.boobs >= 1200) { + r.push(`huge `); + if (V.PC.boobsImplant/V.PC.boobs >= .60) { + r.push(`firm`); + } else { + r.push(`soft`); + } + r.push(` breasts.`); + } else if (V.PC.boobs >= 1000) { + r.push(`big `); + if (V.PC.boobsImplant/V.PC.boobs >= .60) { + r.push(`firm`); + } else { + r.push(`soft`); + } + r.push(` breasts.`); + } else if (V.PC.boobs >= 800) { + r.push(`soft breasts.`); + } else if (V.PC.boobs >= 500) { + r.push(`breasts.`); + } else if (V.PC.boobs >= 300) { + r.push(`small chest.`); + } else if (V.PC.title > 0) { + r.push(`manly chest.`); + } else { + r.push(`flat chest.`); + } + r.push(`When you finally break the kiss, ${he} runs ${his} tongue rapturously across ${his} moistened lips`); + if (hasAnyArms(slave)) { + r.push(` and then runs a finger across them as well`); + } + r.push(`, an openly sexual look on ${his} ${slave.skin} face.`); + if (slave.accent >= 3) { + r.push(`${He} does ${his} best to communicate devotion with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`, since ${he}'s not confident in ${his} ability to express it in ${V.language}.`); + } else if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${He} does ${his} best to communicate devotion with ${his} `); + if (canSee(slave)) { + r.push(App.Desc.eyesColor(slave)); + } else { + r.push(`facial expressions`); + } + r.push(`.`); + } else if (!canTalk(slave)) { + r.push(`${He} signs that ${he} loves you.`); + } else { + r.push(`"I love you, ${Master},"`); + r.push(`${he} ${say}s forthrightly.`); + } + } else if (slave.devotion > 20) { + r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the `); + if (slave.physicalAge > 30) { + r.push(`${woman};`); + } else { + r.push(`${girl};`); + } + r.push(`${he}'s doing ${his} duty as a slave by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss, `); + if (canSee(slave)) { + r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly`); + } else { + r.push(`${he} gazes at you`); + } + r.push(`, looking for answers that are not there.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes beg`); + } else { + r.push(`expression begs`); + } + r.push(` for an answer: is that it?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs hesitantly, asking if that's it.`); + } else { + r.push(`${He} asks hesitantly, `); + r.push(`"I-is that it, ${Master}?"`); + } + } else if (slave.devotion >= -20 && slave.trust < -20) { + r.push(`${He} accepts the kiss fearfully. As you kiss ${his} unresisting mouth, ${his} eagerness to avoid punishment leads ${him} to kiss you back, though nervousness makes ${him} mechanical. You kiss ${him} harder, enjoying ${his} fear, and the physical intimacy slowly does its work. ${He} becomes softer and more natural, ${his} resistance easing. When you pull away from ${him} for a moment, ${he} `); + if (canSee(slave)) { + r.push(`looks`); + } else { + r.push(`gazes`); + } + r.push(` at you for a long moment, ${his} mouth still hanging open, before visibly catching ${himself} with a reminder that ${he}'s a slave and you're ${his} owner.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes beg`); + } else { + r.push(`expression begs`); + } + r.push(` for an answer: is that it?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs hesitantly, asking if that's it.`); + } else { + r.push(`${He} asks hesitantly, "I-is that it, ${Master}?"`); + } + } else if (slave.trust < -50) { + r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him}. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with the poor `); + if (slave.physicalAge > 30) { + r.push(`${woman}`); + } else { + r.push(`${girl}`); + } + r.push(` and pull away, ${he} stares at you in utter incomprehension.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes beg`); + } else { + r.push(`expression begs`); + } + r.push(` for an answer: is that it?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs spastically, begging fearfully to know if that's it.`); + } else { + r.push(`${He} asks nervously before cringing, "I-is that it, ${Master}?"`); + } + } else { + r.push(`${He} reflexively turns ${his} head away from you, but you catch ${his} jaw and kiss ${him} harder. Spluttering, ${he} flees backwards, but you tip forward with ${him} and pin ${him} against your desk, plundering ${his} mouth without mercy. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} stares at you in utter incomprehension.`); + if (!hasAnyArms(slave) && !canTalk(slave)) { + r.push(`${His} `); + if (canSee(slave)) { + r.push(`eyes demand`); + } else { + r.push(`expression demands`); + } + r.push(` an answer: is that it?`); + } else if (!canTalk(slave)) { + r.push(`${He} signs irritably, asking whether that's it.`); + } else { + r.push(`${He} splutters, "Is that it, ${Master}!?"`); + } + } + + if (_tempGag) { + slave.mouthAccessory = _tempGag; + } + App.Events.addParagraph(node, r); + return node; +}; diff --git a/src/npc/interaction/fKiss.tw b/src/npc/interaction/fKiss.tw deleted file mode 100644 index 1019969fc2f..00000000000 --- a/src/npc/interaction/fKiss.tw +++ /dev/null @@ -1,326 +0,0 @@ -:: FKiss [nobr no-history] - -<<run App.Utils.setLocalPronouns(getSlave($AS))>> -<<setPlayerPronouns>> - -You tell <<= getSlave($AS).slaveName>> to -<<switch getSlave($AS).mouthAccessory>> -<<case "none">> - <<if canMove(getSlave($AS))>> - approach you. - <<else>> - have another slave help $him to your desk. - <</if>> -<<case "dildo gag">> - <<if hasAnyArms(getSlave($AS)) && canMove(getSlave($AS))>> - remove $his dildo gag and approach you. - <<else>> - have another slave remove $his dildo gag and set $him down on your desk. - <</if>> - <<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">> -<<case "massive dildo gag">> - <<if hasAnyArms(getSlave($AS)) && canMove(getSlave($AS))>> - pull $his enormous dildo gag out of the depths of $his throat and approach you. - <<else>> - have another slave pull the enormous dildo gag out of the depths of $his throat and set $him down on your desk. - <</if>> - <<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">> -<<default>> - <<if hasAnyArms(getSlave($AS)) && canMove(getSlave($AS))>> - undo $his gag and approach you. - <<else>> - have another slave undo $his gag and set $him down on your desk. - <</if>> - <<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">> -<</switch>> - -<<run Enunciate(getSlave($AS))>> - -<<if (getSlave($AS).fetish == "mindbroken") && (getSlave($AS).relationship != -3)>> - $He complies mechanically. $He remembers that when <<= getWrittenTitle(getSlave($AS))>>'s commands are not obeyed, there is punishment. -<<elseif (getSlave($AS).relationship == -2)>> - $He hurriedly complies, happy to be near the object of $his longing. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he loves overwhelming, and $his eyes flick downward after a moment. - <<else>> - upon $his face. $He senses the intense look from the _womanP $he loves and finds it overwhelming, and after a moment glances away. - <</if>> - $He blushes furiously. -<<elseif (getSlave($AS).relationship == -3)>> - <<if getSlave($AS).fetish == "mindbroken">> - $He complies mechanically. $He remembers that when <<= getWrittenTitle(getSlave($AS))>>'s commands are not obeyed, there is punishment. You kiss $him deeply and intensely; $he doesn't understand why. - <<elseif getSlave($AS).devotion+getSlave($AS).trust >= 175>> - $He complies in a <<= $wife>>ly fashion, moving $his body as $he approaches to best catch your desire. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he's married to affirming, and looks down with a smile, running $his eyes over your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>. - <<else>> - upon $his face. $He senses the intense look from the _womanP $he's married to and finds it affirming, and looks down with a smile. - <</if>> - <<elseif getSlave($AS).devotion < -20 && getSlave($AS).trust > 20>> - $He complies. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he's forcibly married to disturbing, and quickly breaks eye contact. - <<else>> - upon $his face. $He senses the intense look from the _womanP $he's forcibly married to and finds it disturbing, and quickly turns $his face away. - <</if>> - <<elseif getSlave($AS).devotion < -20>> - $He complies fearfully. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his tearing <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he's forcibly married to horrifying, and quickly breaks eye contact. - <<else>> - upon $his tear-streaked face. $He senses the intense look from the _womanP $he's forcibly married to and finds it horrifying, and quickly turns $his face away. - <</if>> - <<else>> - $He complies obediently. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he's married to reassuring, and looks down with a slight smile, running $his eyes over your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>. - <<else>> - upon $his face. $He senses the intense look from the _womanP $he's married to and finds it reassuring, and looks down with a slight smile. - <</if>> - <</if>> -<<elseif (getSlave($AS).devotion > 75)>> - $He hurriedly complies, happy to be near you. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from $his beloved <<= getWrittenTitle(getSlave($AS))>> disconcerting, and $his eyes flick downward after a moment. - <<else>> - upon $his face. $He senses the intense look from $his beloved <<= getWrittenTitle(getSlave($AS))>> and finds it disconcerting, and after a moment glances away. - <</if>> - $He blushes furiously. -<<elseif (getSlave($AS).devotion > 50)>> - $He hurriedly complies, happy to be near you. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense attention from $his <<= getWrittenTitle(getSlave($AS))>> disconcerting, and $he looks down after a moment, blushing. - <<else>> - upon $his face. $He finds the intense attention from $his <<= getWrittenTitle(getSlave($AS))>> disconcerting, and $he looks down after a moment, blushing. - <</if>> -<<elseif (getSlave($AS).devotion > 20)>> - $He hurriedly complies, happy to be near you. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense attention from $his <<= getWrittenTitle(getSlave($AS))>> worrying, and $he looks down after a moment, blushing nervously. - <<else>> - upon $his face. $He finds the intense attention from $his <<= getWrittenTitle(getSlave($AS))>> worrying, and $he looks down after a moment, blushing nervously. - <</if>> -<<elseif (getSlave($AS).devotion >= -20) && (getSlave($AS).trust >= -20)>> - $He visibly considers disobedience, but decides that complying with such an apparently harmless order is safe, for now. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense attention from $his <<= getWrittenTitle(getSlave($AS))>> worrying, and $he looks down after a moment, $his lower lip trembling with nervousness. - <<else>> - upon $his face. $He finds the intense attention from $his <<= getWrittenTitle(getSlave($AS))>> worrying, and turns away after a moment, $his lower lip trembling with nervousness. - <</if>> -<<elseif (getSlave($AS).trust < -20)>> - The command terrifies $him, but $he's more frightened still of the consequences of disobedience, and $he complies. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. After a mere instant of locked gazes, $he looks down fearfully, and begins to shake with terror, tears leaking silently down $his cheeks. - <<else>> - upon $his face. After a mere instant of locked faces, $he looks down fearfully, and begins to shake with terror, tears leaking silently down $his cheeks. - <</if>> -<<else>> - $He pauses, obviously considering whether to resist, but eventually decides to save $his strength to fight more onerous orders, and gives in. Once $he's close, you take a moment to gaze deeply - <<if canSee(getSlave($AS))>> - into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He stares back, but after a few moments $he loses the contest of wills and looks down. - <<else>> - upon $his face. $He faces you defiantly, but after a few moments $he loses the contest of wills and looks down. - <</if>> -<</if>> - -You extend a <<if $PC.title == 1>>manly<<else>>feminine<</if>> hand and graze your fingertips along the line of $his cheekbone. -<<if (getSlave($AS).lipsTat != 0)>> - Your fingers trace $his facial tattoos, slowly picking out the patterns against $his <<= getSlave($AS).skin>> skin. -<</if>> -<<if (getSlave($AS).lipsPiercing+getSlave($AS).tonguePiercing > 2)>> - You touch each of $his facial piercings, one by one, feeling the hard metal contrast with $his pliant flesh. -<</if>> -Then, you gently raise $his <<if getSlave($AS).face > 95>>heartrendingly beautiful<<elseif getSlave($AS).face > 10>>lovely<<elseif getSlave($AS).face >= -10>>pretty<<elseif getSlave($AS).face >= -40>>homely<<else>>ugly<</if>> chin and kiss $him right on $his <<if getSlave($AS).lips > 95>>facepussy<<else>><<if getSlave($AS).lips > 70>>pillowlike <<elseif getSlave($AS).lips > 40>>generous <<elseif getSlave($AS).lips > 20>>plush <</if>>lips<</if>>. - -<<if (getSlave($AS).relationship == -3)>> - <<if getSlave($AS).fetish == "mindbroken">> - $His mouth opens to accept the kiss, and is compliant with your questing tongue. You kiss your broken $wife deeply. $His posture remains completely unchanged. Being kissed affects $him as little as being penetrated, being struck, being loved, or being your $wife: not at all. When you pull away, - <<if canSee(getSlave($AS))>> - $his <<= App.Desc.eyesColor(getSlave($AS))>> track you carefully, awaiting further use of $his body. - <<else>> - $he exposes $himself to you, awaiting further use of $his body. - <</if>> - <<elseif getSlave($AS).devotion+getSlave($AS).trust >= 175>> - $His mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.<<if (getSlave($AS).teeth == "pointy") || (getSlave($AS).teeth == "fangs") || (getSlave($AS).teeth == "fang")>> (Though you're quite careful around $his sharp dentition.)<</if>> $He melts into you, sighing ever so gently. When you finally break the kiss, $his mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses $his face.<<if hasAnyArms(getSlave($AS))>> A hand reaches dumbly up to $his mouth to trace $his lips where yours last touched.<</if>> - <<if (getSlave($AS).accent >= 3)>> - $He does $his best to communicate love with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>, since $he does not speak $language well enough to express $himself. - <<elseif !hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS)))>> - $He does $his best to communicate love with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>. - <<elseif !canTalk(getSlave($AS))>> - $He signs that $he loves you. - <<else>> - "I love you, <<Master>>," $he <<say>>s dreamily. - <</if>> - <<elseif getSlave($AS).devotion < -20 && getSlave($AS).trust > 20>> - $He reflexively turns $his head away from you, but you catch your $wife by $his jaw and kiss $him harder. You wrap your arms around $him so $he cannot escape. $He wriggles desperately, but $his struggles slowly subside as $he realizes that you're not taking this any farther. When you bore of it and pull away, $he glares at you. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes demand<<else>>expression demands<</if>> an answer: are you done? - <<elseif !canTalk(getSlave($AS))>> - $He signs irritably, asking if you're done. - <<else>> - $He splutters, "Are you done, <<Master>>?" - <</if>> - <<elseif getSlave($AS).devotion < -20>> - $He is nearly frozen with fear, and does not resist as you kiss $him deeply. In fact, $he barely reacts at all. $He opens $his mouth mechanically in response to your insistent tongue, but it's like kissing a doll. $He is so filled with terror that $he remains stiff even as it becomes clear to $him you're not going to hurt $him. When you bore of making out with your $wife and pull away, $he stares at you in utter incomprehension. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes beg<<else>>expression begs<</if>> for an answer: is that it? - <<elseif !canTalk(getSlave($AS))>> - $He signs spastically, begging fearfully to know if that's it. - <<else>> - $He asks nervously before cringing, "I-i<<s>> that it, <<Master>>?" - <</if>> - <<else>> - $He accepts the kiss willingly. As you are so close to $him, you sense considerable turmoil in the <<if (getSlave($AS).physicalAge > 30)>>$woman<<else>>$girl<</if>>; $he's doing $his duty as a $wife by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of $his mind by your lips and tongue. When you finally break the kiss, <<if canSee(getSlave($AS))>>$his <<= App.Desc.eyesColor(getSlave($AS))>> gaze into yours searchingly<<else>>$he gazes at you<</if>>, looking for answers that are not there. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes beg<<else>>expression begs<</if>> for an answer: is that it? - <<elseif !canTalk(getSlave($AS))>> - $He signs hesitantly, asking if that's it. - <<else>> - $He asks hesitantly, "I-i<<s>> that it, <<Master>>?" - <</if>> - <</if>> -<<elseif (getSlave($AS).fetish == "mindbroken")>> - $His mouth opens to accept the kiss, and is compliant with your questing tongue. $His posture remains completely unchanged. Being kissed affects $him as little as being penetrated, being struck, or being loved: not at all. When you pull away, - <<if canSee(getSlave($AS))>> - $his <<= App.Desc.eyesColor(getSlave($AS))>> track you carefully, awaiting further use of $his body. - <<else>> - $he exposes $himself to you, awaiting further use of $his body. - <</if>> -<<elseif (getSlave($AS).relationship == -2)>> - $His mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.<<if (getSlave($AS).teeth == "pointy") || (getSlave($AS).teeth == "fangs") || (getSlave($AS).teeth == "fang")>> (Though you're quite careful around $his sharp dentition.)<</if>> $He melts into you, sighing ever so gently. When you finally break the kiss, $his mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses $his face.<<if hasAnyArms(getSlave($AS))>> A hand reaches dumbly up to $his mouth to trace $his lips where yours last touched.<</if>> - <<if (getSlave($AS).accent >= 3)>> - $He does $his best to communicate love with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>, since $he does not speak $language well enough to express $himself. - <<elseif !hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS)))>> - $He does $his best to communicate love with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>. - <<elseif !canTalk(getSlave($AS))>> - $He signs that $he loves you. - <<else>> - "I love you, <<Master>>," $he <<say>>s dreamily. - <</if>> -<<elseif (getSlave($AS).devotion > 50) && (getSlave($AS).fetish == "dom") && (getSlave($AS).fetishKnown == 1) && (getSlave($AS).fetishStrength > 60)>> - $He giggles into you and kisses you back with vigor, $his head pressing insistently forward. The two of you make out rather aggressively<<if (getSlave($AS).teeth == "pointy")>>, $his sharp teeth drawing a bit of blood from your lips and tongue<<elseif (getSlave($AS).teeth == "fangs")>>, $his fangs drawing a bit of blood from your lips and tongue<<elseif (getSlave($AS).teeth == "fang")>>, $his pointy fang drawing a bit of blood from your lips and tongue<</if>>. $He takes $his tendency towards sexual dominance right up to the edge of insubordination, $his active tongue only retreating when yours presses against it. When you finally shove $him away, $he's breathing hard through $his grin. - <<if (getSlave($AS).accent >= 3)>> - $He does $his best to communicate excitement with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>, since $he does not speak $language well enough to express $himself. - <<elseif !hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS)))>> - $He does $his best to communicate excitement with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>. - <<elseif !canTalk(getSlave($AS))>> - $He signs that $he liked that. - <<else>> - "That wa<<s>> fun, <<Master>>," $he <<say>>s cheerfully. - <</if>> -<<elseif (getSlave($AS).devotion > 50) && (getSlave($AS).fetish == "cumslut") && (getSlave($AS).fetishKnown == 1) && (getSlave($AS).fetishStrength > 60)>> - $He stiffens with arousal. $His sexuality is complex, focusing on cum, but with a heavy layer of oral fixation. As your tongue plunders $his mouth, $he reacts almost as though $he's receiving oral, whimpering and moaning into you and pressing $himself lewdly against your - <<if $PC.boobs >= 1400>> - giant tits. - <<elseif $PC.boobs >= 1200>> - huge breasts. - <<elseif $PC.boobs >= 1000>> - big breasts. - <<elseif $PC.boobs >= 800>> - prominent breasts. - <<elseif $PC.boobs >= 650>> - unremarkable breasts. - <<elseif $PC.boobs >= 500>> - breasts. - <<elseif $PC.boobs >= 300>> - tiny breasts. - <<elseif $PC.title > 0>> - manly chest. - <<else>> - non-existent breasts. - <</if>> - <<if (getSlave($AS).teeth == "pointy")>> - $He's very careful to avoid spearing your tongue with $his sharp teeth. - <<elseif (getSlave($AS).teeth == "fangs")>> - $He's very careful to avoid spearing your tongue with $his fangs. - <<elseif (getSlave($AS).teeth == "fang")>> - $He's very careful to avoid poking you with $his fang. - <</if>> - $He achieves a weak orgasm before you tire of making out with $him. - <<if (getSlave($AS).accent >= 3)>> - $He does $his best to communicate undiminished lust with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>, since $he does not speak $language well enough to express $himself. - <<elseif !hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS)))>> - $He does $his best to communicate undiminished lust with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>. - <<elseif !canTalk(getSlave($AS))>> - $He signs that $he liked that. - <<else>> - "That wa<<s>> fun, <<Master>>," $he <<say>>s lustfully. - <</if>> -<<elseif (getSlave($AS).devotion > 50)>> - $His mouth accepts yours with devotion, matching itself carefully to your insistent lips and tongue. - <<if (getSlave($AS).teeth == "pointy")>> - $He is exquisitely careful to keep $his sharp teeth clear of you. - <<elseif (getSlave($AS).teeth == "fangs")>> - $He is exquisitely careful to keep $his fangs from poking you. - <<elseif (getSlave($AS).teeth == "fang")>> - $He is exquisitely careful to keep $his fang from getting into trouble. - <</if>> - $He presses $himself against you, $his warmth wonderful against your - <<if $PC.boobs >= 1400>> - expansive <<if $PC.boobsImplant/$PC.boobs >= .60>>firm<<else>>soft<</if>> chest. - <<elseif $PC.boobs >= 1200>> - huge <<if $PC.boobsImplant/$PC.boobs >= .60>>firm<<else>>soft<</if>> breasts. - <<elseif $PC.boobs >= 1000>> - big <<if $PC.boobsImplant/$PC.boobs >= .60>>firm<<else>>soft<</if>> breasts. - <<elseif $PC.boobs >= 800>> - soft breasts. - <<elseif $PC.boobs >= 500>> - breasts. - <<elseif $PC.boobs >= 300>> - small chest. - <<elseif $PC.title > 0>> - manly chest. - <<else>> - flat chest. - <</if>> - When you finally break the kiss, $he runs $his tongue rapturously across $his moistened lips<<if hasAnyArms(getSlave($AS))>> and then runs a finger across them as well<</if>>, an openly sexual look on $his <<= getSlave($AS).skin>> face. - <<if (getSlave($AS).accent >= 3)>> - $He does $his best to communicate devotion with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>, since $he's not confident in $his ability to express it in $language. - <<elseif !hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS)))>> - $He does $his best to communicate devotion with $his <<if canSee(getSlave($AS))>><<= App.Desc.eyesColor(getSlave($AS))>><<else>>facial expressions<</if>>. - <<elseif !canTalk(getSlave($AS))>> - $He signs that $he loves you. - <<else>> - "I love you, <<Master>>," $he <<say>>s forthrightly. - <</if>> -<<elseif (getSlave($AS).devotion > 20)>> - $He accepts the kiss willingly. As you are so close to $him, you sense considerable turmoil in the <<if (getSlave($AS).physicalAge > 30)>>$woman<<else>>$girl<</if>>; $he's doing $his duty as a slave by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of $his mind by your lips and tongue. When you finally break the kiss, <<if canSee(getSlave($AS))>>$his <<= App.Desc.eyesColor(getSlave($AS))>> gaze into yours searchingly<<else>>$he gazes at you<</if>>, looking for answers that are not there. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes beg<<else>>expression begs<</if>> for an answer: is that it? - <<elseif !canTalk(getSlave($AS))>> - $He signs hesitantly, asking if that's it. - <<else>> - $He asks hesitantly, "I-i<<s>> that it, <<Master>>?" - <</if>> -<<elseif (getSlave($AS).devotion >= -20) && (getSlave($AS).trust < -20)>> - $He accepts the kiss fearfully. As you kiss $his unresisting mouth, $his eagerness to avoid punishment leads $him to kiss you back, though nervousness makes $him mechanical. You kiss $him harder, enjoying $his fear, and the physical intimacy slowly does its work. $He becomes softer and more natural, $his resistance easing. When you pull away from $him for a moment, $he <<if canSee(getSlave($AS))>>looks<<else>>gazes<</if>> at you for a long moment, $his mouth still hanging open, before visibly catching $himself with a reminder that $he's a slave and you're $his owner. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes beg<<else>>expression begs<</if>> for an answer: is that it? - <<elseif !canTalk(getSlave($AS))>> - $He signs hesitantly, asking if that's it. - <<else>> - $He asks hesitantly, "I-i<<s>> that it, <<Master>>?" - <</if>> -<<elseif (getSlave($AS).trust < -50)>> - $He is nearly frozen with fear, and does not resist as you kiss $him. In fact, $he barely reacts at all. $He opens $his mouth mechanically in response to your insistent tongue, but it's like kissing a doll. $He is so filled with terror that $he remains stiff even as it becomes clear to $him you're not going to hurt $him. When you bore of making out with the poor <<if (getSlave($AS).physicalAge > 30)>>$woman<<else>>$girl<</if>> and pull away, $he stares at you in utter incomprehension. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes beg<<else>>expression begs<</if>> for an answer: is that it? - <<elseif !canTalk(getSlave($AS))>> - $He signs spastically, begging fearfully to know if that's it. - <<else>> - $He asks nervously before cringing, "I-i<<s>> that it, <<Master>>?" - <</if>> -<<else>> - $He reflexively turns $his head away from you, but you catch $his jaw and kiss $him harder. Spluttering, $he flees backwards, but you tip forward with $him and pin $him against your desk, plundering $his mouth without mercy. $He wriggles desperately, but $his struggles slowly subside as $he realizes that you're not taking this any farther. When you bore of it and pull away, $he stares at you in utter incomprehension. - <<if (!hasAnyArms(getSlave($AS)) && (!canTalk(getSlave($AS))))>> - $His <<if canSee(getSlave($AS))>>eyes demand<<else>>expression demands<</if>> an answer: is that it? - <<elseif !canTalk(getSlave($AS))>> - $He signs irritably, asking whether that's it. - <<else>> - $He splutters, "I<<s>> that it, <<Master>>!?" - <</if>> -<</if>> - -<<if def _tempGag>> - <<set getSlave($AS).mouthAccessory = _tempGag>> -<</if>> -- GitLab From 32faf447d7d4a9715584264ce10696a31e6110a0 Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 09:49:16 -0400 Subject: [PATCH 2/7] fix console warnings --- src/npc/interaction/fKiss.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/npc/interaction/fKiss.js b/src/npc/interaction/fKiss.js index 32e9abad78c..16d349cf59a 100644 --- a/src/npc/interaction/fKiss.js +++ b/src/npc/interaction/fKiss.js @@ -24,6 +24,7 @@ App.Interact.fKiss = function(slave) { } else { r.push(`have another slave help ${him} to your desk.`); } + break; case "dildo gag": if (hasAnyArms(slave) && canMove(slave)) { r.push(`remove ${his} dildo gag and approach you.`); @@ -32,20 +33,24 @@ App.Interact.fKiss = function(slave) { } _tempGag = slave.mouthAccessory; slave.mouthAccessory = "none"; + break; case "massive dildo gag": if (hasAnyArms(slave) && canMove(slave)) { r.push(`pull ${his} enormous dildo gag out of the depths of ${his} throat and approach you.`); } else { r.push(`have another slave pull the enormous dildo gag out of the depths of ${his} throat and set ${him} down on your desk.`); } - _tempGag = slave.mouthAccessory, slave.mouthAccessory = "none"; + _tempGag = slave.mouthAccessory; + slave.mouthAccessory = "none"; + break; default: if (hasAnyArms(slave) && canMove(slave)) { r.push(`undo ${his} gag and approach you.`); } else { r.push(`have another slave undo ${his} gag and set ${him} down on your desk.`); } - _tempGag = slave.mouthAccessory, slave.mouthAccessory = "none"; + _tempGag = slave.mouthAccessory; + slave.mouthAccessory = "none"; } if (slave.fetish === "mindbroken" && slave.relationship !== -3) { -- GitLab From 59196203c81da4677f4e0d178db9b41a0bd1e412 Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 09:57:48 -0400 Subject: [PATCH 3/7] fixes --- src/npc/interaction/fKiss.js | 257 ++++++++++++++++------------------- 1 file changed, 120 insertions(+), 137 deletions(-) diff --git a/src/npc/interaction/fKiss.js b/src/npc/interaction/fKiss.js index 16d349cf59a..6b3f5fd6938 100644 --- a/src/npc/interaction/fKiss.js +++ b/src/npc/interaction/fKiss.js @@ -15,7 +15,7 @@ App.Interact.fKiss = function(slave) { const {title: Master, say: say} = getEnunciation(slave); const {womanP} = getPronouns(V.PC).appendSuffix("P"); - let _tempGag = ""; + let assignedGag = ""; r.push(`You tell ${slave.slaveName} to`); switch (slave.mouthAccessory) { case "none": @@ -31,7 +31,7 @@ App.Interact.fKiss = function(slave) { } else { r.push(`have another slave remove ${his} dildo gag and set ${him} down on your desk.`); } - _tempGag = slave.mouthAccessory; + assignedGag = slave.mouthAccessory; slave.mouthAccessory = "none"; break; case "massive dildo gag": @@ -40,7 +40,7 @@ App.Interact.fKiss = function(slave) { } else { r.push(`have another slave pull the enormous dildo gag out of the depths of ${his} throat and set ${him} down on your desk.`); } - _tempGag = slave.mouthAccessory; + assignedGag = slave.mouthAccessory; slave.mouthAccessory = "none"; break; default: @@ -49,7 +49,7 @@ App.Interact.fKiss = function(slave) { } else { r.push(`have another slave undo ${his} gag and set ${him} down on your desk.`); } - _tempGag = slave.mouthAccessory; + assignedGag = slave.mouthAccessory; slave.mouthAccessory = "none"; } @@ -58,9 +58,7 @@ App.Interact.fKiss = function(slave) { } else if (slave.relationship === -2) { r.push(`${He} hurriedly complies, happy to be near the object of ${his} longing. Once ${he}'s close, you take a moment to gaze deeply`); if (canSee(slave)) { - r.push(`into ${his} `); - App.Desc.eyesColor(slave); - r.push(`. ${He} finds the intense look from the ${womanP} ${he} loves overwhelming, and ${his} eyes flick downward after a moment.`); + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he} loves overwhelming, and ${his} eyes flick downward after a moment.`); } else { r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he} loves and finds it overwhelming, and after a moment glances away.`); } @@ -68,16 +66,15 @@ App.Interact.fKiss = function(slave) { } else if (slave.relationship === -3) { if (slave.fetish === "mindbroken") { r.push(`${He} complies mechanically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment. You kiss ${him} deeply and intensely; ${he} doesn't understand why.`); - } else if (slave.devotion+slave.trust >= 175) { + } else if (slave.devotion + slave.trust >= 175) { r.push(`${He} complies in a ${wife}ly fashion, moving ${his} body as ${he} approaches to best catch your desire. Once ${he}'s close, you take a moment to gaze deeply`); if (canSee(slave)) { - r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a smile, running ${his} eyes over your `); + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a smile, running ${his} eyes over your`); if (V.PC.boobs >= 300) { - r.push(`bosom`); + r.push(`bosom.`); } else { - r.push(`chest`); + r.push(`chest.`); } - r.push(`.`); } else { r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s married to and finds it affirming, and looks down with a smile.`); } @@ -98,13 +95,12 @@ App.Interact.fKiss = function(slave) { } else { r.push(`${He} complies obediently. Once ${he}'s close, you take a moment to gaze deeply`); if (canSee(slave)) { - r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to reassuring, and looks down with a slight smile, running ${his} eyes over your `); + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to reassuring, and looks down with a slight smile, running ${his} eyes over your`); if (V.PC.boobs >= 300) { - r.push(`bosom`); + r.push(`bosom.`); } else { - r.push(`chest`); + r.push(`chest.`); } - r.push(`.`); } else { r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s married to and finds it reassuring, and looks down with a slight smile.`); } @@ -112,9 +108,7 @@ App.Interact.fKiss = function(slave) { } else if (slave.devotion > 75) { r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`); if (canSee(slave)) { - r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from ${his} beloved ${getWrittenTitle(slave)}`); - - r.push(` disconcerting, and ${his} eyes flick downward after a moment.`); + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from ${his} beloved ${getWrittenTitle(slave)} disconcerting, and ${his} eyes flick downward after a moment.`); } else { r.push(`upon ${his} face. ${He} senses the intense look from ${his} beloved ${getWrittenTitle(slave)} and finds it disconcerting, and after a moment glances away.`); } @@ -122,9 +116,7 @@ App.Interact.fKiss = function(slave) { } else if (slave.devotion > 50) { r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`); if (canSee(slave)) { - r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)}`); - - r.push(` disconcerting, and ${he} looks down after a moment, blushing.`); + r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and ${he} looks down after a moment, blushing.`); } else { r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and ${he} looks down after a moment, blushing.`); } @@ -164,14 +156,14 @@ App.Interact.fKiss = function(slave) { } else { r.push(`feminine`); } - r.push(` hand and graze your fingertips along the line of ${his} cheekbone.`); + r.push(`hand and graze your fingertips along the line of ${his} cheekbone.`); if (slave.lipsTat !== 0) { r.push(`Your fingers trace ${his} facial tattoos, slowly picking out the patterns against ${his} ${slave.skin} skin.`); } - if (slave.lipsPiercing+slave.tonguePiercing > 2) { + if (slave.lipsPiercing + slave.tonguePiercing > 2) { r.push(`You touch each of ${his} facial piercings, one by one, feeling the hard metal contrast with ${his} pliant flesh.`); } - r.push(`Then, you gently raise ${his} `); + r.push(`Then, you gently raise ${his}`); if (slave.face > 95) { r.push(`heartrendingly beautiful`); } else if (slave.face > 10) { @@ -183,20 +175,19 @@ App.Interact.fKiss = function(slave) { } else { r.push(`ugly`); } - r.push(` chin and kiss ${him} right on ${his} `); + r.push(`chin and kiss ${him} right on ${his}`); if (slave.lips > 95) { - r.push(`facepussy`); + r.push(`facepussy.`); } else { if (slave.lips > 70) { - r.push(`pillowlike `); + r.push(`pillowlike`); } else if (slave.lips > 40) { - r.push(`generous `); + r.push(`generous`); } else if (slave.lips > 20) { - r.push(`plush `); + r.push(`plush`); } - r.push(`lips`); + r.push(`lips.`); } - r.push(`.`); if (slave.relationship === -3) { if (slave.fetish === "mindbroken") { @@ -206,46 +197,45 @@ App.Interact.fKiss = function(slave) { } else { r.push(`${he} exposes ${himself} to you, awaiting further use of ${his} body.`); } - } else if (slave.devotion+slave.trust >= 175) { + } else if (slave.devotion + slave.trust >= 175) { r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`); if (slave.teeth === "pointy" || slave.teeth === "fangs" || slave.teeth === "fang") { - r.push(` (Though you're quite careful around ${his} sharp dentition.)`); + r.push(`(Though you're quite careful around ${his} sharp dentition.)`); } - r.push(` ${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); + r.push(`${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); if (hasAnyArms(slave)) { - r.push(` A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`); + r.push(`A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`); } if (slave.accent >= 3) { - r.push(`${He} does ${his} best to communicate love with ${his} `); + r.push(`${He} does ${his} best to communicate love with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)},`); } else { - r.push(`facial expressions`); + r.push(`facial expressions,`); } - r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`); } else if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${He} does ${his} best to communicate love with ${his} `); + r.push(`${He} does ${his} best to communicate love with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)}.`); } else { - r.push(`facial expressions`); + r.push(`facial expressions.`); } - r.push(`.`); } else if (!canTalk(slave)) { r.push(`${He} signs that ${he} loves you.`); } else { - r.push(`"I love you, ${Master}," ${he} says dreamily.`); + r.push(Spoken(slave, `"I love you, ${Master}," ${he} says dreamily.`)); } } else if (slave.devotion < -20 && slave.trust > 20) { r.push(`${He} reflexively turns ${his} head away from you, but you catch your ${wife} by ${his} jaw and kiss ${him} harder. You wrap your arms around ${him} so ${he} cannot escape. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} glares at you.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes demand`); } else { r.push(`expression demands`); } - r.push(` an answer: are you done?`); + r.push(`an answer: are you done?`); } else if (!canTalk(slave)) { r.push(`${He} signs irritably, asking if you're done.`); } else { @@ -254,20 +244,20 @@ App.Interact.fKiss = function(slave) { } else if (slave.devotion < -20) { r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him} deeply. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with your ${wife} and pull away, ${he} stares at you in utter incomprehension.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes beg`); } else { r.push(`expression begs`); } - r.push(` for an answer: is that it?`); + r.push(`for an answer: is that it?`); } else if (!canTalk(slave)) { r.push(`${He} signs spastically, begging fearfully to know if that's it.`); } else { r.push(`${He} asks nervously before cringing, "I-is that it, ${Master}?"`); } } else { - r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the `); + r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the`); if (slave.physicalAge > 30) { r.push(`${woman};`); } else { @@ -275,19 +265,19 @@ App.Interact.fKiss = function(slave) { } r.push(`${he}'s doing ${his} duty as a ${wife} by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss,`); if (canSee(slave)) { - r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly`); + r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly,`); } else { - r.push(`${he} gazes at you`); + r.push(`${he} gazes at you,`); } - r.push(`, looking for answers that are not there.`); + r.push(`looking for answers that are not there.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes beg`); } else { r.push(`expression begs`); } - r.push(` for an answer: is that it?`); + r.push(`for an answer: is that it?`); } else if (!canTalk(slave)) { r.push(`${He} signs hesitantly, asking if that's it.`); } else { @@ -304,66 +294,65 @@ App.Interact.fKiss = function(slave) { } else if (slave.relationship === -2) { r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`); if (slave.teeth === "pointy" || slave.teeth === "fangs" || slave.teeth === "fang") { - r.push(` (Though you're quite careful around ${his} sharp dentition.)`); + r.push(`(Though you're quite careful around ${his} sharp dentition.)`); } - r.push(` ${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); + r.push(`${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); if (hasAnyArms(slave)) { - r.push(` A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`); + r.push(`A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`); } if (slave.accent >= 3) { - r.push(`${He} does ${his} best to communicate love with ${his} `); + r.push(`${He} does ${his} best to communicate love with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)},`); } else { - r.push(`facial expressions`); + r.push(`facial expressions,`); } - r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`); } else if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${He} does ${his} best to communicate love with ${his} `); + r.push(`${He} does ${his} best to communicate love with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)}.`); } else { - r.push(`facial expressions`); + r.push(`facial expressions.`); } - r.push(`.`); } else if (!canTalk(slave)) { r.push(`${He} signs that ${he} loves you.`); } else { - r.push(`"I love you, ${Master},"`); + r.push(Spoken(slave, `"I love you, ${Master},"`)); r.push(`${he} ${say}s dreamily.`); } } else if (slave.devotion > 50 && slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength > 60) { - r.push(`${He} giggles into you and kisses you back with vigor, ${his} head pressing insistently forward. The two of you make out rather aggressively`); + r.push(`${He} giggles into you and kisses you back with vigor, ${his} head pressing insistently forward. The two of you make out rather`); if (slave.teeth === "pointy") { - r.push(`, ${his} sharp teeth drawing a bit of blood from your lips and tongue`); + r.push(`aggressively, ${his} sharp teeth drawing a bit of blood from your lips and tongue.`); } else if (slave.teeth === "fangs") { - r.push(`, ${his} fangs drawing a bit of blood from your lips and tongue`); + r.push(`aggressively, ${his} fangs drawing a bit of blood from your lips and tongue.`); } else if (slave.teeth === "fang") { - r.push(`, ${his} pointy fang drawing a bit of blood from your lips and tongue`); + r.push(`aggressively, ${his} pointy fang drawing a bit of blood from your lips and tongue.`); + } else { + r.push(`aggressively.`); } - r.push(`. ${He} takes ${his} tendency towards sexual dominance right up to the edge of insubordination, ${his} active tongue only retreating when yours presses against it. When you finally shove ${him} away, ${he}'s breathing hard through ${his} grin.`); + r.push(`${He} takes ${his} tendency towards sexual dominance right up to the edge of insubordination, ${his} active tongue only retreating when yours presses against it. When you finally shove ${him} away, ${he}'s breathing hard through ${his} grin.`); if (slave.accent >= 3) { - r.push(`${He} does ${his} best to communicate excitement with ${his} `); + r.push(`${He} does ${his} best to communicate excitement with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)},`); } else { - r.push(`facial expressions`); + r.push(`facial expressions,`); } - r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`); } else if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${He} does ${his} best to communicate excitement with ${his} `); + r.push(`${He} does ${his} best to communicate excitement with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)}.`); } else { - r.push(`facial expressions`); + r.push(`facial expressions.`); } - r.push(`.`); } else if (!canTalk(slave)) { r.push(`${He} signs that ${he} liked that.`); } else { - r.push(`"That was fun, ${Master}," ${he} `); - - r.push(`${say}s cheerfully.`); + r.push(Spoken(slave, `"That was fun, ${Master},"`)); + r.push(`${he} ${say}s cheerfully.`); } } else if (slave.devotion > 50 && slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength > 60) { r.push(`${He} stiffens with arousal. ${His} sexuality is complex, focusing on cum, but with a heavy layer of oral fixation. As your tongue plunders ${his} mouth, ${he} reacts almost as though ${he}'s receiving oral, whimpering and moaning into you and pressing ${himself} lewdly against your`); @@ -395,26 +384,25 @@ App.Interact.fKiss = function(slave) { } r.push(`${He} achieves a weak orgasm before you tire of making out with ${him}.`); if (slave.accent >= 3) { - r.push(`${He} does ${his} best to communicate undiminished lust with ${his} `); + r.push(`${He} does ${his} best to communicate undiminished lust with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)},`); } else { - r.push(`facial expressions`); + r.push(`facial expressions,`); } - r.push(`, since ${he} does not speak ${V.language} well enough to express ${himself}.`); + r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`); } else if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${He} does ${his} best to communicate undiminished lust with ${his} `); + r.push(`${He} does ${his} best to communicate undiminished lust with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)}.`); } else { - r.push(`facial expressions`); + r.push(`facial expressions.`); } - r.push(`.`); } else if (!canTalk(slave)) { r.push(`${He} signs that ${he} liked that.`); } else { - r.push(`"That was fun, ${Master},"`); - r.push(` ${he} ${say}s lustfully.`); + r.push(Spoken(slave, `"That was fun, ${Master},"`)); + r.push(`${he} ${say}s lustfully.`); } } else if (slave.devotion > 50) { r.push(`${His} mouth accepts yours with devotion, matching itself carefully to your insistent lips and tongue.`); @@ -427,29 +415,29 @@ App.Interact.fKiss = function(slave) { } r.push(`${He} presses ${himself} against you, ${his} warmth wonderful against your`); if (V.PC.boobs >= 1400) { - r.push(`expansive `); - if (V.PC.boobsImplant/V.PC.boobs >= .60) { + r.push(`expansive`); + if (V.PC.boobsImplant / V.PC.boobs >= .60) { r.push(`firm`); } else { r.push(`soft`); } - r.push(` chest.`); + r.push(`chest.`); } else if (V.PC.boobs >= 1200) { - r.push(`huge `); - if (V.PC.boobsImplant/V.PC.boobs >= .60) { + r.push(`huge`); + if (V.PC.boobsImplant / V.PC.boobs >= .60) { r.push(`firm`); } else { r.push(`soft`); } - r.push(` breasts.`); + r.push(`breasts.`); } else if (V.PC.boobs >= 1000) { - r.push(`big `); - if (V.PC.boobsImplant/V.PC.boobs >= .60) { + r.push(`big`); + if (V.PC.boobsImplant / V.PC.boobs >= .60) { r.push(`firm`); } else { r.push(`soft`); } - r.push(` breasts.`); + r.push(`breasts.`); } else if (V.PC.boobs >= 800) { r.push(`soft breasts.`); } else if (V.PC.boobs >= 500) { @@ -461,98 +449,93 @@ App.Interact.fKiss = function(slave) { } else { r.push(`flat chest.`); } - r.push(`When you finally break the kiss, ${he} runs ${his} tongue rapturously across ${his} moistened lips`); - if (hasAnyArms(slave)) { - r.push(` and then runs a finger across them as well`); - } - r.push(`, an openly sexual look on ${his} ${slave.skin} face.`); + r.push(`When you finally break the kiss, ${he} runs ${his} tongue rapturously across ${his} moistened lips${hasAnyArms(slave) ? ` and then runs a finger across them as well` : ``}, an openly sexual look on ${his} ${slave.skin} face.`); if (slave.accent >= 3) { - r.push(`${He} does ${his} best to communicate devotion with ${his} `); + r.push(`${He} does ${his} best to communicate devotion with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)},`); } else { - r.push(`facial expressions`); + r.push(`facial expressions,`); } - r.push(`, since ${he}'s not confident in ${his} ability to express it in ${V.language}.`); + r.push(`since ${he}'s not confident in ${his} ability to express it in ${V.language}.`); } else if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${He} does ${his} best to communicate devotion with ${his} `); + r.push(`${He} does ${his} best to communicate devotion with ${his}`); if (canSee(slave)) { - r.push(App.Desc.eyesColor(slave)); + r.push(`${App.Desc.eyesColor(slave)}.`); } else { - r.push(`facial expressions`); + r.push(`facial expressions.`); } - r.push(`.`); } else if (!canTalk(slave)) { r.push(`${He} signs that ${he} loves you.`); } else { - r.push(`"I love you, ${Master},"`); + r.push(Spoken(slave, `"I love you, ${Master},"`)); r.push(`${he} ${say}s forthrightly.`); } } else if (slave.devotion > 20) { - r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the `); + r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the`); if (slave.physicalAge > 30) { r.push(`${woman};`); } else { r.push(`${girl};`); } - r.push(`${he}'s doing ${his} duty as a slave by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss, `); + r.push(`${he}'s doing ${his} duty as a slave by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss,`); if (canSee(slave)) { - r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly`); + r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly,`); } else { - r.push(`${he} gazes at you`); + r.push(`${he} gazes at you,`); } - r.push(`, looking for answers that are not there.`); + r.push(`looking for answers that are not there.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes beg`); } else { r.push(`expression begs`); } - r.push(` for an answer: is that it?`); + r.push(`for an answer: is that it?`); } else if (!canTalk(slave)) { r.push(`${He} signs hesitantly, asking if that's it.`); } else { - r.push(`${He} asks hesitantly, `); - r.push(`"I-is that it, ${Master}?"`); + r.push(`${He} asks hesitantly,`); + r.push(Spoken(slave, `"I-is that it, ${Master}?"`)); } } else if (slave.devotion >= -20 && slave.trust < -20) { - r.push(`${He} accepts the kiss fearfully. As you kiss ${his} unresisting mouth, ${his} eagerness to avoid punishment leads ${him} to kiss you back, though nervousness makes ${him} mechanical. You kiss ${him} harder, enjoying ${his} fear, and the physical intimacy slowly does its work. ${He} becomes softer and more natural, ${his} resistance easing. When you pull away from ${him} for a moment, ${he} `); + r.push(`${He} accepts the kiss fearfully. As you kiss ${his} unresisting mouth, ${his} eagerness to avoid punishment leads ${him} to kiss you back, though nervousness makes ${him} mechanical. You kiss ${him} harder, enjoying ${his} fear, and the physical intimacy slowly does its work. ${He} becomes softer and more natural, ${his} resistance easing. When you pull away from ${him} for a moment, ${he}`); if (canSee(slave)) { r.push(`looks`); } else { r.push(`gazes`); } - r.push(` at you for a long moment, ${his} mouth still hanging open, before visibly catching ${himself} with a reminder that ${he}'s a slave and you're ${his} owner.`); + r.push(`at you for a long moment, ${his} mouth still hanging open, before visibly catching ${himself} with a reminder that ${he}'s a slave and you're ${his} owner.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes beg`); } else { r.push(`expression begs`); } - r.push(` for an answer: is that it?`); + r.push(`for an answer: is that it?`); } else if (!canTalk(slave)) { r.push(`${He} signs hesitantly, asking if that's it.`); } else { r.push(`${He} asks hesitantly, "I-is that it, ${Master}?"`); } } else if (slave.trust < -50) { - r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him}. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with the poor `); + r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him}. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with the poor`); if (slave.physicalAge > 30) { r.push(`${woman}`); } else { r.push(`${girl}`); } - r.push(` and pull away, ${he} stares at you in utter incomprehension.`); + r.push(`and pull away, ${he} stares at you in utter incomprehension.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes beg`); } else { r.push(`expression begs`); } - r.push(` for an answer: is that it?`); + r.push(`for an answer: is that it?`); } else if (!canTalk(slave)) { r.push(`${He} signs spastically, begging fearfully to know if that's it.`); } else { @@ -561,13 +544,13 @@ App.Interact.fKiss = function(slave) { } else { r.push(`${He} reflexively turns ${his} head away from you, but you catch ${his} jaw and kiss ${him} harder. Spluttering, ${he} flees backwards, but you tip forward with ${him} and pin ${him} against your desk, plundering ${his} mouth without mercy. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} stares at you in utter incomprehension.`); if (!hasAnyArms(slave) && !canTalk(slave)) { - r.push(`${His} `); + r.push(`${His}`); if (canSee(slave)) { r.push(`eyes demand`); } else { r.push(`expression demands`); } - r.push(` an answer: is that it?`); + r.push(`an answer: is that it?`); } else if (!canTalk(slave)) { r.push(`${He} signs irritably, asking whether that's it.`); } else { @@ -575,8 +558,8 @@ App.Interact.fKiss = function(slave) { } } - if (_tempGag) { - slave.mouthAccessory = _tempGag; + if (assignedGag) { + slave.mouthAccessory = assignedGag; } App.Events.addParagraph(node, r); return node; -- GitLab From 1ca946886166a2b74b8dd4307d81cbdfca78af47 Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 10:00:35 -0400 Subject: [PATCH 4/7] sharp teeth to data --- js/003-data/slaveMods.js | 5 ++++- src/npc/interaction/fKiss.js | 32 ++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js index 72411ca7525..7a6180316a0 100644 --- a/js/003-data/slaveMods.js +++ b/js/003-data/slaveMods.js @@ -511,13 +511,16 @@ App.Medicine.Modification.teeth = new Map([ `.` ); }, - get requirements() { return (V.seeExtreme === 1); } + get requirements() { return (V.seeExtreme === 1); }, + sharp: true }], ["fangs", { desc: ``, + sharp: true }], ["fang", { desc: ``, + sharp: true }], ["baby", { desc: ``, diff --git a/src/npc/interaction/fKiss.js b/src/npc/interaction/fKiss.js index 6b3f5fd6938..4a4579c647b 100644 --- a/src/npc/interaction/fKiss.js +++ b/src/npc/interaction/fKiss.js @@ -199,7 +199,7 @@ App.Interact.fKiss = function(slave) { } } else if (slave.devotion + slave.trust >= 175) { r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`); - if (slave.teeth === "pointy" || slave.teeth === "fangs" || slave.teeth === "fang") { + if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) { r.push(`(Though you're quite careful around ${his} sharp dentition.)`); } r.push(`${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); @@ -293,7 +293,7 @@ App.Interact.fKiss = function(slave) { } } else if (slave.relationship === -2) { r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`); - if (slave.teeth === "pointy" || slave.teeth === "fangs" || slave.teeth === "fang") { + if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) { r.push(`(Though you're quite careful around ${his} sharp dentition.)`); } r.push(`${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`); @@ -375,12 +375,14 @@ App.Interact.fKiss = function(slave) { } else { r.push(`non-existent breasts.`); } - if (slave.teeth === "pointy") { - r.push(`${He}'s very careful to avoid spearing your tongue with ${his} sharp teeth.`); - } else if (slave.teeth === "fangs") { - r.push(`${He}'s very careful to avoid spearing your tongue with ${his} fangs.`); - } else if (slave.teeth === "fang") { - r.push(`${He}'s very careful to avoid poking you with ${his} fang.`); + if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) { + if (slave.teeth === "pointy") { + r.push(`${He}'s very careful to avoid spearing your tongue with ${his} sharp teeth.`); + } else if (slave.teeth === "fangs") { + r.push(`${He}'s very careful to avoid spearing your tongue with ${his} fangs.`); + } else if (slave.teeth === "fang") { + r.push(`${He}'s very careful to avoid poking you with ${his} fang.`); + } } r.push(`${He} achieves a weak orgasm before you tire of making out with ${him}.`); if (slave.accent >= 3) { @@ -406,12 +408,14 @@ App.Interact.fKiss = function(slave) { } } else if (slave.devotion > 50) { r.push(`${His} mouth accepts yours with devotion, matching itself carefully to your insistent lips and tongue.`); - if (slave.teeth === "pointy") { - r.push(`${He} is exquisitely careful to keep ${his} sharp teeth clear of you.`); - } else if (slave.teeth === "fangs") { - r.push(`${He} is exquisitely careful to keep ${his} fangs from poking you.`); - } else if (slave.teeth === "fang") { - r.push(`${He} is exquisitely careful to keep ${his} fang from getting into trouble.`); + if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) { + if (slave.teeth === "pointy") { + r.push(`${He} is exquisitely careful to keep ${his} sharp teeth clear of you.`); + } else if (slave.teeth === "fangs") { + r.push(`${He} is exquisitely careful to keep ${his} fangs from poking you.`); + } else if (slave.teeth === "fang") { + r.push(`${He} is exquisitely careful to keep ${his} fang from getting into trouble.`); + } } r.push(`${He} presses ${himself} against you, ${his} warmth wonderful against your`); if (V.PC.boobs >= 1400) { -- GitLab From de4e21ded178cd27403098ab486740421e5ff8e0 Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 10:01:06 -0400 Subject: [PATCH 5/7] hook up --- src/interaction/main/walkPast.js | 2 +- src/interaction/siWork.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index 53d7ea70211..c70028abf1d 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -9359,7 +9359,7 @@ globalThis.walkPast = (function() { } if (jsRandom(1, 3) === 1) { - target = "FKiss"; + target = "fKiss"; } else { target = "fLips"; } diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js index fb5bb154293..42159205857 100644 --- a/src/interaction/siWork.js +++ b/src/interaction/siWork.js @@ -353,7 +353,7 @@ App.UI.SlaveInteract.work = function(slave, refresh) { }); } sexOptions.push({text: `Use ${his} mouth`, scene: () => App.Interact.fLips(slave)}); - sexOptions.push({text: `Kiss ${him}`, scene: `FKiss`}); + sexOptions.push({text: `Kiss ${him}`, scene: () => App.Interact.fKiss(slave)}); if (hasAnyLegs(slave)) { sexOptions.push({text: `Have ${him} dance for you`, scene: () => App.Interact.fDance(slave)}); } -- GitLab From eeaac2bf8b63757dbf75e41ad9149d260bab711f Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 10:14:42 -0400 Subject: [PATCH 6/7] fuckdollery. Best part is they say NOTHING --- src/interaction/main/walkPast.js | 6 +- src/interaction/siWork.js | 8 +- src/npc/interaction/FFuckdollAnal.js | 147 +++++++++++++++++++ src/npc/interaction/FFuckdollAnal.tw | 51 ------- src/npc/interaction/FFuckdollImpreg.js | 182 ++++++++++++++++++++++++ src/npc/interaction/FFuckdollImpreg.tw | 87 ----------- src/npc/interaction/FFuckdollOral.js | 103 ++++++++++++++ src/npc/interaction/FFuckdollOral.tw | 32 ----- src/npc/interaction/FFuckdollVaginal.js | 148 +++++++++++++++++++ src/npc/interaction/FFuckdollVaginal.tw | 51 ------- 10 files changed, 587 insertions(+), 228 deletions(-) create mode 100644 src/npc/interaction/FFuckdollAnal.js delete mode 100644 src/npc/interaction/FFuckdollAnal.tw create mode 100644 src/npc/interaction/FFuckdollImpreg.js delete mode 100644 src/npc/interaction/FFuckdollImpreg.tw create mode 100644 src/npc/interaction/FFuckdollOral.js delete mode 100644 src/npc/interaction/FFuckdollOral.tw create mode 100644 src/npc/interaction/FFuckdollVaginal.js delete mode 100644 src/npc/interaction/FFuckdollVaginal.tw diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index c70028abf1d..1df621ff1e4 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -142,14 +142,14 @@ globalThis.walkPast = (function() { } else { switch (target) { case "fVagina": - links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "FFuckdollVaginal")); + links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "fFuckdollVaginal")); break; case "fButt": case "fAnus": - links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "FFuckdollAnal")); + links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "fFuckdollAnal")); break; default: - links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "FFuckdollOral")); + links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "fFuckdollOral")); } } diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js index 42159205857..f1696f2c775 100644 --- a/src/interaction/siWork.js +++ b/src/interaction/siWork.js @@ -713,17 +713,17 @@ App.UI.SlaveInteract.work = function(slave, refresh) { } } else { /* IS A FUCKDOLL */ - sexOptions.push({text: `Fuck ${his} face hole`, scene: `FFuckdollOral`}); + sexOptions.push({text: `Fuck ${his} face hole`, scene: () => App.Interact.fFuckdollOral(slave)}); if (canDoVaginal(slave)) { - sexOptions.push({text: `Fuck ${his} front hole`, scene: `FFuckdollVaginal`}); + sexOptions.push({text: `Fuck ${his} front hole`, scene: () => App.Interact.fFuckdollVaginal(slave)}); } if (canGetPregnant(slave) && (slave.geneticQuirks.superfetation !== 2 || V.geneticMappingUpgrade !== 0) && V.seePreg !== 0) { if (canImpreg(slave, V.PC)) { - sexOptions.push({text: `Put a baby in ${him}`, scene: `FFuckdollImpreg`}); + sexOptions.push({text: `Put a baby in ${him}`, scene: () => App.Interact.fFuckdollImpreg(slave)}); } } if (canDoAnal(slave)) { - sexOptions.push({text: `Fuck ${his} rear hole`, scene: `FFuckdollAnal`}); + sexOptions.push({text: `Fuck ${his} rear hole`, scene: () => App.Interact.fFuckdollAnal(slave)}); } } let activeSlaveRepSacrifice = repGainSacrifice(slave, V.arcologies[0]); diff --git a/src/npc/interaction/FFuckdollAnal.js b/src/npc/interaction/FFuckdollAnal.js new file mode 100644 index 00000000000..ee8968d3ee4 --- /dev/null +++ b/src/npc/interaction/FFuckdollAnal.js @@ -0,0 +1,147 @@ +/** + * + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ +App.Interact.fFuckdollAnal = function(slave) { + const node = new DocumentFragment(); + let r = []; + + const { + He, His, + he, his, him + } = getPronouns(slave); + + addPartner(slave, -1); + + seX(slave, "anal", V.PC, "penetrative"); + r.push(`You decide to use the Fuckdoll's`); + if (slave.anus > 3) { + r.push(`gaping`); + } else if (slave.anus === 3) { + r.push(`loose`); + } else if (slave.anus === 2) { + r.push(`relaxed`); + } else if (slave.anus === 1) { + r.push(`tight`); + } + r.push(`rear hole.`); + if (slave.fuckdoll <= 10) { + r.push(`Since ${he} is not well adapted to life as a living sex toy yet, ${he} won't respond to position commands. So, you simply`); + if (hasAnyLegs(slave)) { + r.push(`walk over to ${him}`); + } else { + r.push(`flip ${him} over`); + } + r.push(`and ram`); + if (V.PC.dick !== 0) { + r.push(`your cock`); + } else { + r.push(`a strap-on`); + } + r.push(`up ${his} rear hole.`); + } else if (slave.fuckdoll <= 80) { + r.push(`${He} can follow intermediate commands, so you order ${him} to present ${his} rear hole. ${He} obediently`); + if (hasAnyLegs(slave)) { + r.push(`bends over, arches ${his} back, and`); + } else { + r.push(`flips over and`); + } + r.push(`winks ${his} anus until you insert`); + if (V.PC.dick !== 0) { + r.push(`your cock.`); + } else { + r.push(`a strap-on.`); + } + } else { + r.push(`${He} can follow advanced commands, so you bring ${him} over to your chair`); + if (hasAnyLegs(slave)) { + r.push(`and order ${him} to squat down onto your`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`and slide ${his} anus up and down`); + if (V.PC.dick !== 0) { + r.push(`your`); + } else { + r.push(`the`); + } + r.push(`shaft.`); + } else { + r.push(`and impale ${him} on`); + if (V.PC.dick !== 0) { + r.push(`your cock,`); + } else { + r.push(`your strap-on,`); + } + r.push(`ordering ${him} to do ${his} feeble best to bounce.`); + } + } + if (slave.fuckdoll <= 20) { + r.push(`${He}'s not fully used to having things suddenly forced up ${his} ass, so ${he} struggles, and ${his} sphincter spasms deliciously.`); + } else if (slave.fuckdoll <= 40) { + r.push(`Aware that ${he} is supposed to relax and accept anal rape, ${he} does ${his} best to accommodate the sodomy.`); + } else { + r.push(`You command ${him} to milk your`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`with ${his} asshole, and ${he} obediently tightens ${his} sphincter against the invading phallus rhythmically.`); + } + if (slave.fuckdoll <= 60) { + if (slave.energy > 60) { + r.push(`Denied any other outlet for ${his} powerful sex drive, ${he} orgasms.`); + } + } else { + r.push(`Tuned to enjoy any use by total denial of all other stimulation, ${he} orgasms repeatedly as you fuck ${his} anus.`); + } + if (slave.voice === 0) { + r.push(`Though ${he} is mute, ${his} breath hisses loudly`); + if (slave.lips > 95) { + r.push(`past the lips of ${his} facepussy.`); + } else { + r.push(`through ${his} mouth insert.`); + } + } else { + r.push(`${He} moans,`); + if (slave.lips > 95) { + r.push(`and the lips of ${his} facepussy quiver.`); + } else { + r.push(`struggling to force the sound past ${his} mouth insert.`); + } + } + r.push(`You climax${(V.PC.dick !== 0) ? `, filling ${his} rectum with your cum,` : ``} and return ${him} to`); + if (hasAnyLegs(slave)) { + r.push(`a standing position.`); + } else { + r.push(`where ${he} was resting.`); + } + if (V.PC.dick !== 0) { + if (slave.anus > 2) { + r.push(`Your cum flows out of ${his} gaped rear hole and down the material of ${his} suit.`); + } else if (slave.anus === 2) { + r.push(`Your cum drips out of ${his} loosened rear hole and down the material of ${his} suit.`); + } else { + r.push(`${His} tight rear hole retains every drop of your cum.`); + } + if (canImpreg(slave, V.PC)) { + r.push(knockMeUp(slave, 5, 0, -1)); + } + r.push(`The Fuckdoll will be cleaned by another slave.`); + } + if (slave.anus === 0) { + if (slave.fetish !== "mindbroken") { + r.push(`As you return to your business, ${he} shakes slightly in place, and a few low moans come out of ${his} face hole. This is probably a reaction to losing ${his} anal virginity.`); + } else { + r.push(`${He} gives no external indication that ${he}'s aware that ${he}'s just lost ${his} anal virginity.`); + } + r.push(`In any case, <span class="virginity loss">${his} rear hole has been broken in.</span>`); + slave.anus = 1; + } + App.Events.addParagraph(node, r); + return node; +}; diff --git a/src/npc/interaction/FFuckdollAnal.tw b/src/npc/interaction/FFuckdollAnal.tw deleted file mode 100644 index 76cb99324db..00000000000 --- a/src/npc/interaction/FFuckdollAnal.tw +++ /dev/null @@ -1,51 +0,0 @@ -:: FFuckdollAnal [nobr no-history] - -<<run App.Utils.setLocalPronouns(getSlave($AS))>> -<<run addPartner(getSlave($AS), -1)>> - -<<set getSlave($AS).counter.anal++, $analTotal++>> -You decide to use the Fuckdoll's <<if getSlave($AS).anus > 3>>gaping<<elseif getSlave($AS).anus == 3>>loose<<elseif getSlave($AS).anus == 2>>relaxed<<elseif getSlave($AS).anus == 1>>tight<</if>> rear hole. -<<if getSlave($AS).fuckdoll <= 10>> - Since $he is not well adapted to life as a living sex toy yet, $he won't respond to position commands. So, you simply <<if hasAnyLegs(getSlave($AS))>>walk over to $him<<else>>flip $him over<</if>> and ram <<if $PC.dick != 0>>your cock<<else>>a strap-on<</if>> up $his rear hole. -<<elseif getSlave($AS).fuckdoll <= 80>> - $He can follow intermediate commands, so you order $him to present $his rear hole. $He obediently <<if hasAnyLegs(getSlave($AS))>>bends over, arches $his back, and<<else>>flips over and<</if>> winks $his anus until you insert <<if $PC.dick != 0>>your cock<<else>>a strap-on<</if>>. -<<else>> - $He can follow advanced commands, so you bring $him over to your chair <<if hasAnyLegs(getSlave($AS))>>and order $him to squat down onto your <<if $PC.dick != 0>>cock<<else>>strap-on<</if>> and slide $his anus up and down <<if $PC.dick != 0>>your<<else>>the<</if>> shaft.<<else>>and impale $him on <<if $PC.dick != 0>>your cock<<else>>your strap-on<</if>>, ordering $him to do $his feeble best to bounce.<</if>> -<</if>> -<<if getSlave($AS).fuckdoll <= 20>> - $He's not fully used to having things suddenly forced up $his ass, so $he struggles, and $his sphincter spasms deliciously. -<<elseif getSlave($AS).fuckdoll <= 40>> - Aware that $he is supposed to relax and accept anal rape, $he does $his best to accommodate the sodomy. -<<else>> - You command $him to milk your <<if $PC.dick != 0>>cock<<else>>strap-on<</if>> with $his asshole, and $he obediently tightens $his sphincter against the invading phallus rhythmically. -<</if>> -<<if getSlave($AS).fuckdoll <= 60>> - <<if getSlave($AS).energy > 60>>Denied any other outlet for $his powerful sex drive, $he orgasms.<</if>> -<<else>> - Tuned to enjoy any use by total denial of all other stimulation, $he orgasms repeatedly as you fuck $his anus. -<</if>> -<<if getSlave($AS).voice == 0>> - Though $he is mute, $his breath hisses loudly <<if getSlave($AS).lips > 95>>past the lips of $his facepussy<<else>>through $his mouth insert<</if>>. -<<else>> - $He moans, <<if getSlave($AS).lips > 95>>and the lips of $his facepussy quiver<<else>>struggling to force the sound past $his mouth insert<</if>>. -<</if>> -You climax<<if $PC.dick != 0>>, filling $his rectum with your cum,<</if>> and return $him to <<if hasAnyLegs(getSlave($AS))>>a standing position<<else>>where $he was resting<</if>>. -<<if $PC.dick != 0>> - <<if getSlave($AS).anus > 2>>Your cum flows out of $his gaped rear hole and down the material of $his suit. - <<elseif getSlave($AS).anus == 2>>Your cum drips out of $his loosened rear hole and down the material of $his suit. - <<else>>$His tight rear hole retains every drop of your cum. - <</if>> - <<if canImpreg(getSlave($AS), $PC)>> - <<= knockMeUp(getSlave($AS), 5, 0, -1)>> - <</if>> - The Fuckdoll will be cleaned by another slave. -<</if>> -<<if getSlave($AS).anus == 0>> - <<if getSlave($AS).fetish != "mindbroken">> - As you return to your business, $he shakes slightly in place, and a few low moans come out of $his face hole. This is probably a reaction to losing $his anal virginity. - <<else>> - $He gives no external indication that $he's aware that $he's just lost $his anal virginity. - <</if>> - In any case, <span class="virginity loss">$his rear hole has been broken in.</span> - <<set getSlave($AS).anus = 1>> -<</if>> diff --git a/src/npc/interaction/FFuckdollImpreg.js b/src/npc/interaction/FFuckdollImpreg.js new file mode 100644 index 00000000000..6abfbbaa87f --- /dev/null +++ b/src/npc/interaction/FFuckdollImpreg.js @@ -0,0 +1,182 @@ +/** + * + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ +App.Interact.fFuckdollImpreg = function(slave) { + const node = new DocumentFragment(); + let r = []; + + const { + He, His, + he, his, him + } = getPronouns(slave); + + addPartner(slave, -1); + const _bonus = random(6, 20); + + if (slave.mpreg === 1) { + slave.counter.anal += _bonus + 1; + V.analTotal += _bonus + 1; + } else { + slave.counter.vaginal += _bonus + 1; + V.vaginalTotal += _bonus + 1; + } + + r.push(`You decide to use the Fuckdoll's fertile womb to grow a child.`); + if (slave.fuckdoll <= 10) { + r.push(`Since ${he} is not well adapted to life as a living sex toy yet, ${he} won't respond to position commands. So, you simply`); + if (hasAnyLegs(slave)) { + r.push(`push ${him} down to lie on the couch`); + } else { + r.push(`set ${him} on your desk`); + } + r.push(`and shove`); + if (V.PC.dick !== 0) { + r.push(`your cock`); + } else { + r.push(`a strap-on`); + } + r.push(`inside ${his}`); + if (slave.mpreg === 1) { + r.push(`asshole.`); + } else { + r.push(`vagina.`); + } + } else if (slave.fuckdoll <= 70) { + r.push(`${He} can follow intermediate commands, so you order ${him} into a position for use of ${his}`); + if (slave.mpreg === 1) { + r.push(`rear`); + } else { + r.push(`front`); + } + r.push(`hole. ${He} obediently`); + if (hasAllLimbs(slave)) { + r.push(`gets down on all fours and`); + } + r.push(`cocks ${his} hips, offering ${his}`); + if (slave.mpreg === 1) { + r.push(`asspussy`); + } else { + r.push(`cunt`); + } + r.push(`until you insert your`); + if (V.PC.dick > 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`into ${his}`); + if (slave.mpreg === 1) { + r.push(`winking`); + } else { + r.push(`wet`); + } + r.push(`channel.`); + } else { + r.push(`${He} can follow advanced commands, so you bring ${him} over to your chair`); + if (hasAnyLegs(slave)) { + r.push(`and order ${him} to squat down onto your cock and ride.`); + } else { + r.push(`and impale ${him} on your cock, ordering ${him} to do ${his} feeble best to bounce.`); + } + } + if (slave.fuckdoll <= 20) { + r.push(`${He}'s not fully used to being raped without warning, so ${he} struggles, ${his} muscles spasming delightfully.`); + } else if (slave.fuckdoll <= 40) { + r.push(`Aware that ${he} is supposed to relax and accept rape, ${he} does ${his} best to let you take ${him} without resistance.`); + } else { + r.push(`You command ${him} to milk your cock with ${his}`); + if (slave.mpreg === 1) { + r.push(`anal`); + } else { + r.push(`vaginal`); + } + r.push(`walls, and ${he} obediently starts to flex ${his} well-developed`); + if (slave.mpreg === 1) { + r.push(`cunt`); + } else { + r.push(`anal`); + } + r.push(`muscles, squeezing you from base to tip.`); + } + if (slave.fuckdoll <= 60) { + if (slave.energy > 40) { + r.push(`Denied any other outlet for ${his} healthy sex drive, ${he} orgasms.`); + } + } else { + r.push(`${He} orgasmed for the first time as you entered ${him}, and ${he} continues to do so as you fuck ${him}. ${He}'s perfectly tuned.`); + } + if (slave.voice === 0) { + r.push(`Though ${he} is mute, ${his} breath hisses loudly`); + if (slave.lips > 95) { + r.push(`past the lips of ${his} facepussy.`); + } else { + r.push(`through ${his} mouth insert.`); + } + } else { + r.push(`${He} moans,`); + if (slave.lips > 95) { + r.push(`and the lips of ${his} facepussy quiver.`); + } else { + r.push(`struggling to force the sound past ${his} mouth insert.`); + } + } + r.push(`You climax, your cum shooting forward to splash against ${his} womb, and return ${he} to`); + if (hasAnyLegs(slave)) { + r.push(`a standing position`); + } else { + r.push(`where ${he} was resting`); + } + r.push(`to allow your seed to find ${his} mark.`); + if (slave.mpreg === 1) { + if (slave.anus > 2) { + r.push(`Your cum flows out of ${his} gaping rear hole and down the material of ${his} suit.`); + } else if (slave.anus === 2) { + r.push(`Your cum drips out of ${his} well-fucked rear hole and down the material of ${his} suit.`); + } else { + r.push(`${His} tight rear hole retains almost every drop of your cum. A few escape and run down the material of ${his} suit.`); + } + r.push(`The Fuckdoll will be cleaned by another slave.`); + if (slave.anus === 0) { + if (slave.fetish !== "mindbroken") { + r.push(`As you return to your business, ${he} shakes slightly in place, and a few low moans come out of ${his} face hole. This is probably a reaction to losing ${his} anal virginity.`); + } else { + r.push(`${He} gives no external indication that ${he}'s aware that ${he}'s just lost ${his} virginity.`); + } + r.push(`In any case, <span class="virginity loss">${his} rear hole has been broken in.</span>`); + slave.anus = 1; + } + } else { + if (slave.vagina >= 10) { + r.push(`Your cum steadily flows from its prolapsed front hole and down the material of ${his} suit.`); + } else if (slave.vagina > 2) { + r.push(`Your cum flows out of ${his} gaping front hole and down the material of ${his} suit.`); + } else if (slave.vagina === 2) { + r.push(`Your cum drips out of ${his} well-fucked front hole and down the material of ${his} suit.`); + } else { + r.push(`${His} tight front hole retains almost every drop of your cum. A few escape and run down the material of ${his} suit.`); + } + r.push(`The Fuckdoll will be cleaned by another slave.`); + if (slave.vagina === 0) { + if (slave.fetish !== "mindbroken") { + r.push(`As you return to your business, ${he} shakes slightly in place, and a few low moans come out of ${his} face hole. This is probably a reaction to losing ${his} virginity.`); + } else { + r.push(`${He} gives no external indication that ${he}'s aware that ${he}'s just lost ${his} virginity.`); + } + r.push(`In any case, <span class="virginity loss">${his} front hole has been broken in.</span>`); + slave.vagina = 1; + } + } + + r.push(`You repeat this ritual throughout the week, ensuring that ${he} will be an <span class="pregnant">incubator for your child.</span> ${knockMeUp(slave, 100, 2, -1, true)}`); + + if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (slave.breedingMark !== 1 || V.propOutcome === 0) { + r.push(`Rumors spread about you knocking up your playthings; the Societal Elite are <span class="elites.loss"> very displeased</span> by these rumors.`); + V.failedElite += 5; + } + } + App.Events.addParagraph(node, r); + return node; +}; diff --git a/src/npc/interaction/FFuckdollImpreg.tw b/src/npc/interaction/FFuckdollImpreg.tw deleted file mode 100644 index f521b5f02fa..00000000000 --- a/src/npc/interaction/FFuckdollImpreg.tw +++ /dev/null @@ -1,87 +0,0 @@ -:: FFuckdollImpreg [nobr no-history] - -<<run App.Utils.setLocalPronouns(getSlave($AS))>> -<<run addPartner(getSlave($AS), -1)>> -<<set _bonus = random(6,20)>> - -<<if getSlave($AS).mpreg == 1>> - <<set getSlave($AS).counter.anal += _bonus+1, $analTotal += _bonus+1>> -<<else>> - <<set getSlave($AS).counter.vaginal += _bonus+1, $vaginalTotal += _bonus+1>> -<</if>> - -You decide to use the Fuckdoll's fertile womb to grow a child. -<<if getSlave($AS).fuckdoll <= 10>> - Since $he is not well adapted to life as a living sex toy yet, $he won't respond to position commands. So, you simply <<if hasAnyLegs(getSlave($AS))>>push $him down to lie on the couch<<else>>set $him on your desk<</if>> and shove <<if $PC.dick != 0>>your cock<<else>>a strap-on<</if>> inside $his <<if getSlave($AS).mpreg == 1>>asshole<<else>>vagina<</if>>. -<<elseif getSlave($AS).fuckdoll <= 70>> - $He can follow intermediate commands, so you order $him into a position for use of $his <<if getSlave($AS).mpreg == 1>>rear<<else>>front<</if>> hole. $He obediently <<if hasAllLimbs(getSlave($AS))>>gets down on all fours and <</if>>cocks $his hips, offering $his <<if getSlave($AS).mpreg == 1>>asspussy<<else>>cunt<</if>> until you insert your - <<if $PC.dick > 0>> - cock - <<else>> - strap-on - <</if>> - into $his <<if getSlave($AS).mpreg == 1>>winking<<else>>wet<</if>> channel. -<<else>> - $He can follow advanced commands, so you bring $him over to your chair <<if hasAnyLegs(getSlave($AS))>>and order $him to squat down onto your cock and ride.<<else>>and impale $him on your cock, ordering $him to do $his feeble best to bounce.<</if>> -<</if>> -<<if getSlave($AS).fuckdoll <= 20>> - $He's not fully used to being raped without warning, so $he struggles, $his muscles spasming delightfully. -<<elseif getSlave($AS).fuckdoll <= 40>> - Aware that $he is supposed to relax and accept rape, $he does $his best to let you take $him without resistance. -<<else>> - You command $him to milk your cock with $his <<if getSlave($AS).mpreg == 1>>anal<<else>>vaginal<</if>> walls, and $he obediently starts to flex $his well-developed <<if getSlave($AS).mpreg == 1>>cunt<<else>>anal<</if>> muscles, squeezing you from base to tip. -<</if>> -<<if getSlave($AS).fuckdoll <= 60>> - <<if getSlave($AS).energy > 40>>Denied any other outlet for $his healthy sex drive, $he orgasms.<</if>> -<<else>> - $He orgasmed for the first time as you entered $him, and $he continues to do so as you fuck $him. $He's perfectly tuned. -<</if>> -<<if getSlave($AS).voice == 0>> - Though $he is mute, $his breath hisses loudly <<if getSlave($AS).lips > 95>>past the lips of $his facepussy<<else>>through $his mouth insert<</if>>. -<<else>> - $He moans, <<if getSlave($AS).lips > 95>>and the lips of $his facepussy quiver<<else>>struggling to force the sound past $his mouth insert<</if>>. -<</if>> -You climax, your cum shooting forward to splash against $his womb, and return $he to <<if hasAnyLegs(getSlave($AS))>>a standing position<<else>>where $he was resting<</if>> to allow your seed to find $his mark. -<<if getSlave($AS).mpreg == 1>> - <<if getSlave($AS).anus > 2>>Your cum flows out of $his gaping rear hole and down the material of $his suit. - <<elseif getSlave($AS).anus == 2>>Your cum drips out of $his well-fucked rear hole and down the material of $his suit. - <<else>>$His tight rear hole retains almost every drop of your cum. A few escape and run down the material of $his suit. - <</if>> - The Fuckdoll will be cleaned by another slave. - <<if getSlave($AS).anus == 0>> - <<if getSlave($AS).fetish != "mindbroken">> - As you return to your business, $he shakes slightly in place, and a few low moans come out of $his face hole. This is probably a reaction to losing $his anal virginity. - <<else>> - $He gives no external indication that $he's aware that $he's just lost $his virginity. - <</if>> - In any case, <span class="virginity loss">$his rear hole has been broken in.</span> - <<set getSlave($AS).anus = 1>> - <</if>> -<<else>> - <<if getSlave($AS).vagina >= 10>>Your cum steadily flows from its prolapsed front hole and down the material of $his suit. - <<elseif getSlave($AS).vagina > 2>>Your cum flows out of $his gaping front hole and down the material of $his suit. - <<elseif getSlave($AS).vagina == 2>>Your cum drips out of $his well-fucked front hole and down the material of $his suit. - <<else>>$His tight front hole retains almost every drop of your cum. A few escape and run down the material of $his suit. - <</if>> - The Fuckdoll will be cleaned by another slave. - <<if getSlave($AS).vagina == 0>> - <<if getSlave($AS).fetish != "mindbroken">> - As you return to your business, $he shakes slightly in place, and a few low moans come out of $his face hole. This is probably a reaction to losing $his virginity. - <<else>> - $He gives no external indication that $he's aware that $he's just lost $his virginity. - <</if>> - In any case, <span class="virginity loss">$his front hole has been broken in.</span> - <<set getSlave($AS).vagina = 1>> - <</if>> -<</if>> - -You repeat this ritual throughout the week, ensuring that $he will be an @@.pregnant;incubator for your child.@@ - -<<= knockMeUp(getSlave($AS), 100, 2, -1, 1)>> - -<<if $arcologies[0].FSRestart != "unset" && $eugenicsFullControl != 1>> - <<if getSlave($AS).breedingMark != 1 || $propOutcome == 0>> - Rumors spread about you knocking up your playthings; the Societal Elite are @@.elites.loss; very displeased@@ by these rumors. - <<set $failedElite += 5>> - <</if>> -<</if>> diff --git a/src/npc/interaction/FFuckdollOral.js b/src/npc/interaction/FFuckdollOral.js new file mode 100644 index 00000000000..6ea7b81106c --- /dev/null +++ b/src/npc/interaction/FFuckdollOral.js @@ -0,0 +1,103 @@ +/** + * + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ +App.Interact.fFuckdollOral = function(slave) { + const node = new DocumentFragment(); + let r = []; + + const { + He, + he, his, him + } = getPronouns(slave); + + addPartner(slave, -1); + + seX(slave, "oral", V.PC, "penetrative"); + r.push(`You decide to use the Fuckdoll's`); + if (slave.lips > 95) { + r.push(`facepussy.`); + } else { + r.push(`face hole.`); + } + if (slave.fuckdoll <= 10) { + r.push(`Since ${he} is not well adapted to life as a living sex toy yet, ${he} won't respond to position commands. So, you simply`); + if (hasBothLegs(slave)) { + r.push(`shove ${him} into a kneeling position`); + } else { + r.push(`set ${him} on the couch`); + } + r.push(`and straddle ${his} face.`); + } else if (slave.fuckdoll <= 80) { + r.push(`${He} can follow intermediate commands, so you order ${him} into a position for use of ${his} face hole. ${He} obediently`); + if (hasBothLegs(slave)) { + r.push(`gets to ${his} knees`); + } else { + r.push(`cranes ${his} neck up`); + } + r.push(`and sticks ${his} tongue out as far as it will go, wiggling it invitingly. You straddle ${his} face.`); + } else { + r.push(`${He} can follow advanced commands, so you order ${him} into a position for use of ${his} face hole. ${He} instantly`); + if (hasAnyLegs(slave)) { + if (V.PC.dick !== 0) { + r.push(`bends at the waist and turns ${his} head upward, placing ${his} throat horizontally and at waist height.`); + } else { + r.push(`gets to ${his} knees and turns ${his} head upward at just the right angle for a pussy to ride ${his} face hole.`); + } + } else { + r.push(`cranes ${his} neck up and sticks ${his} tongue out as far as it will go, wiggling it invitingly.`); + } + r.push(`You straddle ${his} face.`); + } + if (slave.fuckdoll <= 20) { + r.push(`${He}'s not fully used to being surprised with face rape, so ${he} struggles, and ${his} difficulty breathing`); + if (V.PC.dick !== 0) { + r.push(`makes ${his} throat spasm around your dickhead.`); + } else { + r.push(`feels lovely on your cunt.`); + } + } else if (slave.fuckdoll <= 50) { + r.push(`Aware that ${he} is supposed to relax and let you rape ${his} face, ${he} does ${his} best to let you`); + if (V.PC.dick !== 0) { + r.push(`fuck ${his} throat.`); + } else { + r.push(`ride ${his} face.`); + } + } else { + r.push(`You command ${him} to`); + if (V.PC.dick !== 0) { + r.push(`milk your dick, and ${he} begins to suck with almost frightening force.`); + } else { + r.push(`pleasure your cunt, and ${he} begins to eat you out with almost frightening hunger.`); + } + } + if (slave.fuckdoll <= 60) { + if (slave.energy > 80) { + r.push(`Denied any other outlet for ${his} extreme sex drive, ${he} orgasms from nothing more than oral stimulation.`); + } + } else { + r.push(`${He}'s so perfectly tuned that ${he} begins to orgasm from nothing more than oral stimulation, and ${he} continues to shiver with repeated orgasms as ${he} sucks.`); + } + r.push(`You climax,`); + if (V.PC.dick !== 0) { + r.push(`blowing your load down ${his} throat,`); + } else { + r.push(`giving ${him} a good amount of femcum to swallow,`); + } + r.push(`and return ${him} to`); + if (hasAnyLegs(slave)) { + r.push(`a standing position.`); + } else { + r.push(`where ${he} was resting.`); + } + if (V.PC.dick !== 0) { + if (slave.lips > 95) { + r.push(`${He} gives sloppy blowjobs, ${his} lips being too big for much control, and strings of your cum beribbon ${his} suit. The Fuckdoll will be cleaned by another slave.`); + } else { + r.push(`${He} swallows repeatedly as ${he} returns to ${his} resting posture.`); + } + } + App.Events.addParagraph(node, r); + return node; +}; diff --git a/src/npc/interaction/FFuckdollOral.tw b/src/npc/interaction/FFuckdollOral.tw deleted file mode 100644 index b3c5da8aa7c..00000000000 --- a/src/npc/interaction/FFuckdollOral.tw +++ /dev/null @@ -1,32 +0,0 @@ -:: FFuckdollOral [nobr no-history] - -<<run App.Utils.setLocalPronouns(getSlave($AS))>> -<<run addPartner(getSlave($AS), -1)>> - -<<set getSlave($AS).counter.oral++, $oralTotal++>> -You decide to use the Fuckdoll's <<if getSlave($AS).lips > 95>>facepussy<<else>>face hole<</if>>. -<<if getSlave($AS).fuckdoll <= 10>> - Since $he is not well adapted to life as a living sex toy yet, $he won't respond to position commands. So, you simply <<if hasBothLegs(getSlave($AS))>>shove $him into a kneeling position<<else>>set $him on the couch<</if>> and straddle $his face. -<<elseif getSlave($AS).fuckdoll <= 80>> - $He can follow intermediate commands, so you order $him into a position for use of $his face hole. $He obediently <<if hasBothLegs(getSlave($AS))>>gets to $his knees<<else>>cranes $his neck up<</if>> and sticks $his tongue out as far as it will go, wiggling it invitingly. You straddle $his face. -<<else>> - $He can follow advanced commands, so you order $him into a position for use of $his face hole. $He instantly <<if hasAnyLegs(getSlave($AS))>><<if $PC.dick != 0>>bends at the waist and turns $his head upward, placing $his throat horizontally and at waist height.<<else>>gets to $his knees and turns $his head upward at just the right angle for a pussy to ride $his face hole.<</if>><<else>>cranes $his neck up and sticks $his tongue out as far as it will go, wiggling it invitingly.<</if>> You straddle $his face. -<</if>> -<<if getSlave($AS).fuckdoll <= 20>> - $He's not fully used to being surprised with face rape, so $he struggles, and $his difficulty breathing <<if $PC.dick != 0>>makes $his throat spasm around your dickhead<<else>>feels lovely on your cunt<</if>>. -<<elseif getSlave($AS).fuckdoll <= 50>> - Aware that $he is supposed to relax and let you rape $his face, $he does $his best to let you <<if $PC.dick != 0>>fuck $his throat<<else>>ride $his face<</if>>. -<<else>> - You command $him to <<if $PC.dick != 0>>milk your dick, and $he begins to suck with almost frightening force<<else>>pleasure your cunt, and $he begins to eat you out with almost frightening hunger<</if>>. -<</if>> -<<if getSlave($AS).fuckdoll <= 60>> - <<if getSlave($AS).energy > 80>>Denied any other outlet for $his extreme sex drive, $he orgasms from nothing more than oral stimulation.<</if>> -<<else>> - $He's so perfectly tuned that $he begins to orgasm from nothing more than oral stimulation, and $he continues to shiver with repeated orgasms as $he sucks. -<</if>> -You climax, <<if $PC.dick != 0>>blowing your load down $his throat<<else>>giving $him a good amount of femcum to swallow<</if>>, and return $him to <<if hasAnyLegs(getSlave($AS))>>a standing position<<else>>where $he was resting<</if>>. -<<if $PC.dick != 0>> - <<if getSlave($AS).lips > 95>>$He gives sloppy blowjobs, $his lips being too big for much control, and strings of your cum beribbon $his suit. The Fuckdoll will be cleaned by another slave. - <<else>>$He swallows repeatedly as $he returns to $his resting posture. - <</if>> -<</if>> diff --git a/src/npc/interaction/FFuckdollVaginal.js b/src/npc/interaction/FFuckdollVaginal.js new file mode 100644 index 00000000000..a4ad469a6d2 --- /dev/null +++ b/src/npc/interaction/FFuckdollVaginal.js @@ -0,0 +1,148 @@ +/** + * + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ +App.Interact.fFuckdollVaginal = function(slave) { + const node = new DocumentFragment(); + let r = []; + + const { + He, His, + he, his, him + } = getPronouns(slave); + + addPartner(slave, -1); + + seX(slave, "vaginal", V.PC, "penetrative"); + r.push(`You decide to use the Fuckdoll's`); + if (slave.vagina > 3) { + r.push(`cavernous`); + } else if (slave.vagina === 3) { + r.push(`soft`); + } else if (slave.vagina === 2) { + r.push(`inviting`); + } else if (slave.vagina === 1) { + r.push(`tight`); + } + r.push(`front hole.`); + if (slave.fuckdoll <= 10) { + r.push(`Since ${he} is not well adapted to life as a living sex toy yet, ${he} won't respond to position commands. So, you simply`); + if (hasAnyLegs(slave)) { + r.push(`push ${him} down to lie on the couch`); + } else { + r.push(`set ${him} on your desk`); + } + r.push(`and shove`); + if (V.PC.dick !== 0) { + r.push(`your cock`); + } else { + r.push(`a strap-on`); + } + r.push(`inside ${his} vagina.`); + } else if (slave.fuckdoll <= 70) { + r.push(`${He} can follow intermediate commands, so you order ${him} into a position for use of ${his} front hole. ${He} obediently`); + if (hasAllLimbs(slave)) { + r.push(`gets down on all fours and`); + } else if (hasAnyLegs(slave)) { + r.push(`bends over and`); + } + r.push(`cocks ${his} hips, offering ${his} cunt until you insert`); + if (V.PC.dick !== 0) { + r.push(`your cock`); + } else { + r.push(`a strap-on`); + } + r.push(`into ${his} wet channel.`); + } else { + r.push(`${He} can follow advanced commands, so you bring ${him} over to your chair`); + if (hasAnyLegs(slave)) { + r.push(`and order ${him} to squat down onto your`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`and ride.`); + } else { + r.push(`and impale ${him} on`); + if (V.PC.dick !== 0) { + r.push(`your cock,`); + } else { + r.push(`your strap-on,`); + } + r.push(`ordering ${him} to do ${his} feeble best to bounce.`); + } + } + if (slave.fuckdoll <= 20) { + r.push(`${He}'s not fully used to being raped without warning, so ${he} struggles, ${his} muscles spasming delightfully.`); + } else if (slave.fuckdoll <= 40) { + r.push(`Aware that ${he} is supposed to relax and accept rape, ${he} does ${his} best to let you take ${him} without resistance.`); + } else { + r.push(`You command ${him} to milk your`); + if (V.PC.dick !== 0) { + r.push(`cock`); + } else { + r.push(`strap-on`); + } + r.push(`with ${his} vaginal walls, and ${he} obediently starts to flex ${his} well-developed cunt muscles, squeezing`); + if (V.PC.dick !== 0) { + r.push(`you`); + } else { + r.push(`your strap-on`); + } + r.push(`from base to tip.`); + } + if (slave.fuckdoll <= 60) { + if (slave.energy > 40) { + r.push(`Denied any other outlet for ${his} healthy sex drive, ${he} orgasms.`); + } + } else { + r.push(`${He} orgasmed for the first time as you entered ${him}, and ${he} continues to do so as you fuck ${him}. ${He}'s perfectly tuned.`); + } + if (slave.voice === 0) { + r.push(`Though ${he} is mute, ${his} breath hisses loudly`); + if (slave.lips > 95) { + r.push(`past the lips of ${his} facepussy.`); + } else { + r.push(`through ${his} mouth insert.`); + } + } else { + r.push(`${He} moans,`); + if (slave.lips > 95) { + r.push(`and the lips of ${his} facepussy quiver.`); + } else { + r.push(`struggling to force the sound past ${his} mouth insert.`); + } + } + r.push(`You climax${(V.PC.dick !== 0) ? `, your cum shooting forward to splash against ${his} womb,` : ``} and return ${him} to`); + if (hasAnyLegs(slave)) { + r.push(`a standing position.`); + } else { + r.push(`where ${he} was resting.`); + } + if (V.PC.dick !== 0) { + if (slave.vagina > 2) { + r.push(`Your cum flows out of ${his} gaping front hole and down the material of ${his} suit.`); + } else if (slave.vagina === 2) { + r.push(`Your cum drips out of ${his} well-fucked front hole and down the material of ${his} suit.`); + } else { + r.push(`${His} tight front hole retains almost every drop of your cum. A few escape and run down the material of ${his} suit.`); + } + if (canImpreg(slave, V.PC)) { + r.push(knockMeUp(slave, 5, 1, -1)); + } + r.push(`The Fuckdoll will be cleaned by another slave.`); + } + if (slave.vagina === 0) { + if (slave.fetish !== "mindbroken") { + r.push(`As you return to your business, ${he} shakes slightly in place, and a few low moans come out of ${his} face hole. This is probably a reaction to losing ${his} virginity.`); + } else { + r.push(`${He} gives no external indication that ${he}'s aware that ${he}'s just lost ${his} virginity.`); + } + r.push(`In any case, <span class="lime">${his} front hole has been broken in.</span>`); + slave.vagina = 1; + } + App.Events.addParagraph(node, r); + return node; +}; diff --git a/src/npc/interaction/FFuckdollVaginal.tw b/src/npc/interaction/FFuckdollVaginal.tw deleted file mode 100644 index 4c30c5c3372..00000000000 --- a/src/npc/interaction/FFuckdollVaginal.tw +++ /dev/null @@ -1,51 +0,0 @@ -:: FFuckdollVaginal [nobr no-history] - -<<run App.Utils.setLocalPronouns(getSlave($AS))>> -<<run addPartner(getSlave($AS), -1)>> - -<<set getSlave($AS).counter.vaginal++, $vaginalTotal++>> -You decide to use the Fuckdoll's <<if getSlave($AS).vagina > 3>>cavernous<<elseif getSlave($AS).vagina == 3>>soft<<elseif getSlave($AS).vagina == 2>>inviting<<elseif getSlave($AS).vagina == 1>>tight<</if>> front hole. -<<if getSlave($AS).fuckdoll <= 10>> - Since $he is not well adapted to life as a living sex toy yet, $he won't respond to position commands. So, you simply <<if hasAnyLegs(getSlave($AS))>>push $him down to lie on the couch<<else>>set $him on your desk<</if>> and shove <<if $PC.dick != 0>>your cock<<else>>a strap-on<</if>> inside $his vagina. -<<elseif getSlave($AS).fuckdoll <= 70>> - $He can follow intermediate commands, so you order $him into a position for use of $his front hole. $He obediently <<if hasAllLimbs(getSlave($AS))>>gets down on all fours and <<elseif hasAnyLegs(getSlave($AS))>>bends over and <</if>>cocks $his hips, offering $his cunt until you insert <<if $PC.dick != 0>>your cock<<else>>a strap-on<</if>> into $his wet channel. -<<else>> - $He can follow advanced commands, so you bring $him over to your chair <<if hasAnyLegs(getSlave($AS))>>and order $him to squat down onto your <<if $PC.dick != 0>>cock<<else>>strap-on<</if>> and ride.<<else>>and impale $him on <<if $PC.dick != 0>>your cock<<else>>your strap-on<</if>>, ordering $him to do $his feeble best to bounce.<</if>> -<</if>> -<<if getSlave($AS).fuckdoll <= 20>> - $He's not fully used to being raped without warning, so $he struggles, $his muscles spasming delightfully. -<<elseif getSlave($AS).fuckdoll <= 40>> - Aware that $he is supposed to relax and accept rape, $he does $his best to let you take $him without resistance. -<<else>> - You command $him to milk your <<if $PC.dick != 0>>cock<<else>>strap-on<</if>> with $his vaginal walls, and $he obediently starts to flex $his well-developed cunt muscles, squeezing <<if $PC.dick != 0>>you<<else>>your strap-on<</if>> from base to tip. -<</if>> -<<if getSlave($AS).fuckdoll <= 60>> - <<if getSlave($AS).energy > 40>>Denied any other outlet for $his healthy sex drive, $he orgasms.<</if>> -<<else>> - $He orgasmed for the first time as you entered $him, and $he continues to do so as you fuck $him. $He's perfectly tuned. -<</if>> -<<if getSlave($AS).voice == 0>> - Though $he is mute, $his breath hisses loudly <<if getSlave($AS).lips > 95>>past the lips of $his facepussy<<else>>through $his mouth insert<</if>>. -<<else>> - $He moans, <<if getSlave($AS).lips > 95>>and the lips of $his facepussy quiver<<else>>struggling to force the sound past $his mouth insert<</if>>. -<</if>> -You climax<<if $PC.dick != 0>>, your cum shooting forward to splash against $his womb,<</if>> and return $him to <<if hasAnyLegs(getSlave($AS))>>a standing position<<else>>where $he was resting<</if>>. -<<if $PC.dick != 0>> - <<if getSlave($AS).vagina > 2>>Your cum flows out of $his gaping front hole and down the material of $his suit. - <<elseif getSlave($AS).vagina == 2>>Your cum drips out of $his well-fucked front hole and down the material of $his suit. - <<else>>$His tight front hole retains almost every drop of your cum. A few escape and run down the material of $his suit. - <</if>> - <<if canImpreg(getSlave($AS), $PC)>> - <<= knockMeUp(getSlave($AS), 5, 1, -1)>> - <</if>> - The Fuckdoll will be cleaned by another slave. -<</if>> -<<if getSlave($AS).vagina == 0>> - <<if getSlave($AS).fetish != "mindbroken">> - As you return to your business, $he shakes slightly in place, and a few low moans come out of $his face hole. This is probably a reaction to losing $his virginity. - <<else>> - $He gives no external indication that $he's aware that $he's just lost $his virginity. - <</if>> - In any case, @@.lime;$his front hole has been broken in.@@ - <<set getSlave($AS).vagina = 1>> -<</if>> -- GitLab From 6f9d0d7330789d40977ff7f6ff04183e1e8a0d8e Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Tue, 11 May 2021 12:34:56 -0400 Subject: [PATCH 7/7] spoken addition --- src/npc/interaction/fKiss.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/npc/interaction/fKiss.js b/src/npc/interaction/fKiss.js index 4a4579c647b..de04aa1bc29 100644 --- a/src/npc/interaction/fKiss.js +++ b/src/npc/interaction/fKiss.js @@ -522,7 +522,10 @@ App.Interact.fKiss = function(slave) { } else if (!canTalk(slave)) { r.push(`${He} signs hesitantly, asking if that's it.`); } else { - r.push(`${He} asks hesitantly, "I-is that it, ${Master}?"`); + r.push( + `${He} asks hesitantly,`, + Spoken(slave, `"I-is that it, ${Master}?"`) + ); } } else if (slave.trust < -50) { r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him}. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with the poor`); @@ -543,7 +546,10 @@ App.Interact.fKiss = function(slave) { } else if (!canTalk(slave)) { r.push(`${He} signs spastically, begging fearfully to know if that's it.`); } else { - r.push(`${He} asks nervously before cringing, "I-is that it, ${Master}?"`); + r.push( + `${He} asks nervously before cringing,`, + Spoken(slave, `"I-is that it, ${Master}?"`) + ); } } else { r.push(`${He} reflexively turns ${his} head away from you, but you catch ${his} jaw and kiss ${him} harder. Spluttering, ${he} flees backwards, but you tip forward with ${him} and pin ${him} against your desk, plundering ${his} mouth without mercy. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} stares at you in utter incomprehension.`); @@ -558,7 +564,10 @@ App.Interact.fKiss = function(slave) { } else if (!canTalk(slave)) { r.push(`${He} signs irritably, asking whether that's it.`); } else { - r.push(`${He} splutters, "Is that it, ${Master}!?"`); + r.push( + `${He} splutters,`, + Spoken(slave, `"Is that it, ${Master}!?"`) + ); } } -- GitLab