diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js index 0814507dc1f9f8ebe2b333e24cef6096e8de1682..b60d9d51dc2c160998f0896672f34474ce4c088d 100644 --- a/src/npc/interaction/fPCImpreg.js +++ b/src/npc/interaction/fPCImpreg.js @@ -558,11 +558,126 @@ function consummationBigBalls(slave) { return frag; } +/** @param {App.Entity.SlaveState} slave */ +function consummationSubmissive(slave) { + const frag = new DocumentFragment(); + + const {He, he, him, his, himself} = getPronouns(slave); + + const text = []; + + let fillsHim = ''; + + if (V.PC.prostate > 1) { + fillsHim = `fills ${him} until ${his} belly is distended and wobbling with your cum`; + } else if (V.PC.prostate > 0) { + fillsHim = `pours into ${him} until ${he} is stuffed with your cum`; + } else if (V.PC.balls > 8) { + fillsHim = `pours into ${him}`; + } else { + fillsHim = `jets into ${his} welcoming depths`; + } + + text.push(`${He} ${slave.belly >= 10000 ? `waddles` : `comes`} submissively over, smiling a little submissive smile, and spreads ${himself} for you. ${slave.belly < 5000 + ? `You take ${him} on the couch next to your desk in the missionary position. ${He} hugs ${his} torso to you and ${his} breasts press against your chest; you can feel ${his} heart beating hard.` + : `You take ${him} from behind against your desk. ${He} steadies ${himself} as ${he} feels your hands roaming across ${his} ${bellyAdjective(slave)} belly. As the sex reaches its climax, ${his} breaths grow short and ${his} moans passionate.`} + As the sex reaches its climax your semen ${fillsHim} as ${he} begs you to use ${his} unworthy body to make a new slave.`); + + frag.append(text.join(' ')); + + return frag; +} + +/** @param {App.Entity.SlaveState} slave */ +function consummationAcceptingNonvirgin(slave) { + const frag = new DocumentFragment(); + + const {He, he, him, his, himself} = getPronouns(slave); + + const text = []; + + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + + let fillingHim = ''; + + if (V.PC.prostate > 1) { + fillingHim = `flowing into ${him} until ${his} stomach is distended and wobbling with your cum`; + } else if (V.PC.prostate > 0) { + fillingHim = `pouring into ${him} until ${he} is stuffed with your cum`; + } else if (V.PC.balls > 8) { + fillingHim = `pouring into ${him}`; + } else { + fillingHim = `jetting into ${him}`; + } + + text.push(`${slave.belly < 5000 + ? `${He} skips over smiling and gives you a quick kiss. You take ${him} on the couch next to your desk in the missionary position. ${He} hugs ${his} torso to you and ${his} breasts press against your ${V.PC.boobs > 300 ? `own;` : `chest; `} you can feel ${his} heart beating hard. As the sex reaches its climax, ${his} kisses grow urgent and passionate. ${He} clings to you,` + : `${He} waddles over smiling and leans in to give you a quick kiss. You decide to take ${him} from behind against your desk. ${He} steadies ${himself} against the furniture as ${he} feels your hands roaming across ${his} ${bellyAdjective(slave)} belly. You begin to pound into ${him} and as the sex reaches its climax, ${his} breaths grow short and ${his} moans passionate. As you reach your respective peaks, ${he} pushes ${himself} back against you, feeling`} + your semen ${fillingHim} as ${he} rides the downslope of ${his} orgasm. ${He} kisses you and promises to do ${his} best to use ${his} womb to make ${superfetation ? `another` : `a`} good slave for you.`); + + frag.append(text.join(' ')); + + return frag; +} + +/** @param {App.Entity.SlaveState} slave */ +function consummationHesitantNonvirgin(slave) { + const frag = new DocumentFragment(); + + const {He, he, him, his, himself} = getPronouns(slave); + + const text = []; + + let full = ''; + + if (V.PC.prostate > 1) { + full = `far beyond capacity`; + } else if (V.PC.prostate > 0) { + full = `beyond capacity`; + } else if (V.PC.balls > 8) { + full = `to capacity`; + } + + text.push(`${He} obeys, lying on the couch next to your desk${hasAnyLegs(slave) ? ` with ${his} leg${hasBothLegs(slave) ? `s spread` : ` moved aside`}` : ``}. You kneel on the ground and enter ${him}${hasAnyLegs(slave) ? `, a hand on ${hasBothLegs(slave) ? `each of ${his} legs` : `${his} leg`} to give you purchase` : ``}. The pounding is hard and fast, and ${he} gasps and whines. ${slave.belly > 100000 ? `You reach a hand up to tease ${his} already taut dome of a pregnancy.` : `You reach a hand down to maul ${his} breasts.`} ${He} begs you not to cum inside ${him}, knowing ${he}'s fertile, but soon loses track of ${his} fears as ${he} enjoys ${himself}. ${He} bites ${his} lip and moans as ${he} climaxes. You follow ${him} over the edge as you give one final, deep thrust before filling ${his} squeezing fuckhole${full} with your cum; ${he} realizes what you've done with a gasp and a worried look.`); + + frag.append(text.join(' ')); + + return frag; +} + +/** @param {App.Entity.SlaveState} slave */ +function consummationResistantNonvirgin(slave) { + const frag = new DocumentFragment(); + + const {He, His, he, him, his} = getPronouns(slave); + + const text = []; + + let fillHim = ''; + + if (V.PC.prostate > 1) { + fillHim = `filling ${him} until ${his} belly is distended and wobbling with your cum`; + } else if (V.PC.prostate > 0) { + fillHim = `pouring into ${him} until ${he} is stuffed with your cum`; + } else if (V.PC.balls > 8) { + fillHim = `pouring into ${him}`; + } else { + fillHim = `blow your load`; + } + + text.push(`${He} tries to refuse, so you bend the disobedient slave over your desk and take ${him} hard from behind. ${His} breasts slide back and forth across the desk. You give ${his} buttocks some nice hard swats as you pound ${him}. ${He} grunts and moans but knows better than to try to get away. ${He} begs you not to cum inside ${him}, knowing ${he}'s fertile, and sobs when ${he} feels you ${fillHim} despite ${his} pleas.`); + + frag.append(text.join(' ')); + + return frag; +} + + /** @param {App.Entity.SlaveState} slave */ function consummationVirgin(slave) { const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown; const accepting = slave.devotion > 20; - const hesitant = slave.devotion >= -20; + const hesitant = slave.devotion >= -20 && slave.devotion <= 20; const resistant = slave.devotion < -20; if (pregnancyFetish) { @@ -579,6 +694,10 @@ function consummationVirgin(slave) { /** @param {App.Entity.SlaveState} slave */ function consummationNonvirgin(slave) { const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown; + const submissive = slave.fetish === 'submissive' && slave.fetishStrength > 60 && slave.fetishKnown; + const accepting = slave.devotion > 20; + const hesitant = slave.devotion >= -20 && slave.devotion <= 20; + const resistant = slave.devotion < -20; if (pregnancyFetish) { return consummationPregnancyFetishNonvirgin(slave); @@ -596,6 +715,14 @@ function consummationNonvirgin(slave) { return consummationBigDick(slave); } else if (tooBigBalls(slave)) { return consummationBigBalls(slave); + } else if (submissive) { + return consummationSubmissive(slave); + } else if (accepting) { + return consummationAcceptingNonvirgin(slave); + } else if (hesitant) { + return consummationHesitantNonvirgin(slave); + } else if (resistant) { + return consummationResistantNonvirgin(slave); } }