diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js index 01df2aef5f450cc76ab2b4201f459cc3bc1e4c08..1d61f6b9d70bcc0a4add37a661fbde6719ee3a95 100644 --- a/src/npc/interaction/fPCImpreg.js +++ b/src/npc/interaction/fPCImpreg.js @@ -15,849 +15,849 @@ App.Interact.fPCImpreg = function(slave) { knockMeUp(slave, 100, 2, -1, true); return frag; -}; - -/** @param {App.Entity.SlaveState} slave */ -function introAnus(slave) { - const {his, him} = getPronouns(slave); - - const asshole = slave.geneticQuirks.superfetation === 2 && slave.pregKnown - ? `asshole and put another baby in ${him}` - : `asshole`; - - if (slave.anus > 2) { - return `fuck ${his} gaping, fertile ${asshole}.`; - } else if (slave.anus === 2) { - return `use ${his} whorish, fertile ${asshole}.`; - } else if (slave.anus === 1) { - return `use ${his} tight, fertile ${asshole}.`; - } else if (slave.anus === 0) { - return `take ${his} fertile, virgin ${asshole}.`; - } else { - throw new Error(`Unexpected anus value '${slave.anus}' in impregnateAnus()`); - } -} - -/** @param {App.Entity.SlaveState} slave */ -function introVagina(slave) { - const {his} = getPronouns(slave); - - if (slave.vagina > 2) { - return `fuck ${his} gaping, fertile cunt.`; - } else if (slave.vagina === 2) { - return `use ${his} whorish, fertile cunt.`; - } else if (slave.vagina === 1) { - return `use ${his} tight, fertile cunt.`; - } else if (slave.vagina === 0) { - return `take ${his} fertile, virgin pussy.`; - } else { - throw new Error(`Unexpected vagina value '${slave.vagina}' in impregnateVagina()`); - } -} - -/** @param {App.Entity.SlaveState} slave */ -function getVaginaTat(slave) { - const {his, him} = getPronouns(slave); - - if (slave.vaginaTat === "tribal patterns") { - return `The tattoos on ${his} abdomen certainly draw attention there.`; - } else if (slave.vaginaTat === "scenes") { - return `The tattoos on ${his} abdomen nicely illustrate what you mean to do to ${him}.`; - } else if (slave.vaginaTat === "degradation") { - return `The tattoos on ${his} abdomen ask you to, after all.`; - } else if (slave.vaginaTat === "lewd crest") { - return `The crest on ${his} abdomen eagerly awaits a womb stuffed with cum.`; - } -} - -/** @param {App.Entity.SlaveState} slave */ -function getClit(slave) { - const {His} = getPronouns(slave); - - if (slave.clit === 1) { - return `${His} big clit ${slave.foreskin ? `peeks out from under its hood` : `can't be missed`}.`; - } else if (slave.clit > 1) { - return `${His} huge clit is impossible to miss.`; - } -} - -/** @param {App.Entity.SlaveState} slave */ -function getPiercings(slave) { - const {His, him} = getPronouns(slave); - - if (slave.vaginaPiercing > 1) { - return `${His} pierced lips and clit have ${him} nice and wet.`; - } else if (slave.vaginaPiercing === 1) { - return `${His} pierced clit has ${him} nice and moist.`; - } -} - -/** - * @param {App.Entity.SlaveState} slave - * @returns {DocumentFragment} - */ -function intro(slave) { - const frag = new DocumentFragment(); - - const {him, his} = getPronouns(slave); - const text = []; - - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - - text.push(`You call ${him} over so you can`); + /** @param {App.Entity.SlaveState} slave */ + function introAnus(slave) { + const {his, him} = getPronouns(slave); + + const asshole = slave.geneticQuirks.superfetation === 2 && slave.pregKnown + ? `asshole and put another baby in ${him}` + : `asshole`; + + if (slave.anus > 2) { + return `fuck ${his} gaping, fertile ${asshole}.`; + } else if (slave.anus === 2) { + return `use ${his} whorish, fertile ${asshole}.`; + } else if (slave.anus === 1) { + return `use ${his} tight, fertile ${asshole}.`; + } else if (slave.anus === 0) { + return `take ${his} fertile, virgin ${asshole}.`; + } else { + throw new Error(`Unexpected anus value '${slave.anus}' in impregnateAnus()`); + } + } - if (slave.mpreg) { - text.push(introAnus(slave)); + /** @param {App.Entity.SlaveState} slave */ + function introVagina(slave) { + const {his} = getPronouns(slave); + + if (slave.vagina > 2) { + return `fuck ${his} gaping, fertile cunt.`; + } else if (slave.vagina === 2) { + return `use ${his} whorish, fertile cunt.`; + } else if (slave.vagina === 1) { + return `use ${his} tight, fertile cunt.`; + } else if (slave.vagina === 0) { + return `take ${his} fertile, virgin pussy.`; + } else { + throw new Error(`Unexpected vagina value '${slave.vagina}' in impregnateVagina()`); + } + } - text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum, and who are you to deny its request?`); - } else { - text.push(introVagina(slave)); + /** @param {App.Entity.SlaveState} slave */ + function getVaginaTat(slave) { + const {his, him} = getPronouns(slave); - if (superfetation) { - text.push(`You plan on putting another baby in ${him}.`); + if (slave.vaginaTat === "tribal patterns") { + return `The tattoos on ${his} abdomen certainly draw attention there.`; + } else if (slave.vaginaTat === "scenes") { + return `The tattoos on ${his} abdomen nicely illustrate what you mean to do to ${him}.`; + } else if (slave.vaginaTat === "degradation") { + return `The tattoos on ${his} abdomen ask you to, after all.`; + } else if (slave.vaginaTat === "lewd crest") { + return `The crest on ${his} abdomen eagerly awaits a womb stuffed with cum.`; } + } - if (slave.vaginaTat) { - text.push(getVaginaTat(slave)); - } + /** @param {App.Entity.SlaveState} slave */ + function getClit(slave) { + const {His} = getPronouns(slave); - if (slave.clit > 0) { - text.push(getClit(slave)); + if (slave.clit === 1) { + return `${His} big clit ${slave.foreskin ? `peeks out from under its hood` : `can't be missed`}.`; + } else if (slave.clit > 1) { + return `${His} huge clit is impossible to miss.`; } + } + + /** @param {App.Entity.SlaveState} slave */ + function getPiercings(slave) { + const {His, him} = getPronouns(slave); - if (slave.vaginaPiercing > 0) { - text.push(getPiercings(slave)); + if (slave.vaginaPiercing > 1) { + return `${His} pierced lips and clit have ${him} nice and wet.`; + } else if (slave.vaginaPiercing === 1) { + return `${His} pierced clit has ${him} nice and moist.`; } } - frag.append(text.join(' ')); + /** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function intro(slave) { + const frag = new DocumentFragment(); - return frag; -} + const {him, his} = getPronouns(slave); -/** @param {App.Entity.SlaveState} slave */ -function consummationPregnancyFetishVirgin(slave) { - const frag = new DocumentFragment(); - const devotionSpan = document.createElement('span'); - const virginityLossSpan = document.createElement('span'); + const text = []; - const {He, His, he, his, him} = getPronouns(slave); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const text = []; + text.push(`You call ${him} over so you can`); - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + if (slave.mpreg) { + text.push(introAnus(slave)); - let fillHim = ''; - let firstTime = ''; + text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum, and who are you to deny its request?`); + } else { + text.push(introVagina(slave)); - 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}`; - } + if (superfetation) { + text.push(`You plan on putting another baby in ${him}.`); + } - if (isSexuallyPure(slave)) { - firstTime = `, knowing that ${his} first time will always be special to ${him}`; - } + if (slave.vaginaTat) { + text.push(getVaginaTat(slave)); + } - devotionSpan.classList.add('devotion', 'inc'); - devotionSpan.textContent = `increases ${his} devotion to you.`; + if (slave.clit > 0) { + text.push(getClit(slave)); + } - virginityLossSpan.classList.add('virginity', 'loss'); - virginityLossSpan.textContent = `${His} ${slave.mpreg ? `asshole` : `pussy`} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.`; + if (slave.vaginaPiercing > 0) { + text.push(getPiercings(slave)); + } + } - text.push(` ${He} cries with joy and presents ${his} virgin`); + frag.append(text.join(' ')); - if (slave.mpreg) { - text.push(`asshole for fertilization.`); - } else if (['bushy', 'very bushy', 'bushy in the front and neat in the rear'].includes(slave.pubicHStyle)) { - text.push(`treasure, barely visible within her tangle of pubic hair, but ready for fertilization.`); - } else if (slave.pubicHStyle === 'in a strip') { - text.push(`pussy, accented by ${his} strip of pubic hair, ready for fertilization.`); - } else if (slave.pubicHStyle === 'neat') { - text.push(`neatly trimmed pussy, ready for fertilization.`); - } else if (slave.pubicHStyle === 'waxed') { - text.push(`pussy, smooth and bare, ready for fertilization.`); - } else { - text.push(`pussy, ready for fertilization.`); + return frag; } - text.push(`You waste no time with foreplay as you mount ${him} and get to work. As you claim ${his} pearl, ${his} breath hitches in ${his} throat, but pleasure quickly overcomes the pain. ${He} groans as your pelvis repeatedly slaps against ${him} over and over, anticipating what's to come. Just before you reach your peak, you hilt yourself within ${him}, signaling that it's time. ${He} sobs with happiness when ${he} finally feels your hot seed${fillHim}${firstTime}. ${He} spends the rest of the day cherishing ${his} ${bellyAdjective(slave)} stomach. This new connection with ${his} ${getWrittenTitle(slave)} `); + /** @param {App.Entity.SlaveState} slave */ + function consummationPregnancyFetishVirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); + const virginityLossSpan = document.createElement('span'); - slave.devotion += 15; + const {He, His, he, his, him} = getPronouns(slave); - if (slave.mpreg) { - slave.anus = 1; - } else { - slave.vagina = 1; - } + const text = []; - frag.append(text.join(' '), devotionSpan, virginityLossSpan); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - return frag; -} + let fillHim = ''; + let firstTime = ''; -/** @param {App.Entity.SlaveState} slave */ -function consummationPregnancyFetishNonvirgin(slave) { - const frag = new DocumentFragment(); - const devotionSpan = document.createElement('span'); + 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}`; + } - const {He, he, his, him} = getPronouns(slave); + if (isSexuallyPure(slave)) { + firstTime = `, knowing that ${his} first time will always be special to ${him}`; + } - const text = []; + devotionSpan.classList.add('devotion', 'inc'); + devotionSpan.textContent = `increases ${his} devotion to you.`; + + virginityLossSpan.classList.add('virginity', 'loss'); + virginityLossSpan.textContent = `${His} ${slave.mpreg ? `asshole` : `pussy`} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.`; + + text.push(` ${He} cries with joy and presents ${his} virgin`); + + if (slave.mpreg) { + text.push(`asshole for fertilization.`); + } else if (['bushy', 'very bushy', 'bushy in the front and neat in the rear'].includes(slave.pubicHStyle)) { + text.push(`treasure, barely visible within her tangle of pubic hair, but ready for fertilization.`); + } else if (slave.pubicHStyle === 'in a strip') { + text.push(`pussy, accented by ${his} strip of pubic hair, ready for fertilization.`); + } else if (slave.pubicHStyle === 'neat') { + text.push(`neatly trimmed pussy, ready for fertilization.`); + } else if (slave.pubicHStyle === 'waxed') { + text.push(`pussy, smooth and bare, ready for fertilization.`); + } else { + text.push(`pussy, ready for fertilization.`); + } - let fillHim = ''; + text.push(`You waste no time with foreplay as you mount ${him} and get to work. As you claim ${his} pearl, ${his} breath hitches in ${his} throat, but pleasure quickly overcomes the pain. ${He} groans as your pelvis repeatedly slaps against ${him} over and over, anticipating what's to come. Just before you reach your peak, you hilt yourself within ${him}, signaling that it's time. ${He} sobs with happiness when ${he} finally feels your hot seed${fillHim}${firstTime}. ${He} spends the rest of the day cherishing ${his} ${bellyAdjective(slave)} stomach. This new connection with ${his} ${getWrittenTitle(slave)} `); - 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}`; - } + slave.devotion += 15; - devotionSpan.classList.add('devotion', 'inc'); - devotionSpan.textContent = `increases ${his} devotion to you.`; + if (slave.mpreg) { + slave.anus = 1; + } else { + slave.vagina = 1; + } - text.push(`${He} cries with joy and presents ${his} fertile`); + frag.append(text.join(' '), devotionSpan, virginityLossSpan); - if (slave.mpreg) { - text.push(`asshole for breeding.`); - } else if (['bushy', 'very bushy', 'bushy in the front and neat in the rear'].includes(slave.pubicHStyle)) { - text.push(`pussy, barely visible within her tangle of pubic hair but ripe for breeding.`); - } else if (slave.pubicHStyle === 'in a strip') { - text.push(`pussy, accented by ${his} strip of pubic hair and ripe for breeding.`); - } else if (slave.pubicHStyle === 'neat') { - text.push(`neatly trimmed pussy, ripe for breeding.`); - } else if (slave.pubicHStyle === 'waxed') { - text.push(`pussy, smooth, bare, and ripe for breeding.`); - } else { - text.push(`pussy, ripe for breeding.`); + return frag; } - text.push(`You waste no time with foreplay as you mount ${him} and get to work. ${He} groans as your pelvis repeatedly slaps against ${him} over and over, anticipating what's to come. Just before you reach your peak, you hilt yourself within ${him}, signaling that it's time. ${He} sobs with happiness when ${he} finally feels your hot seed${fillHim}. ${He} spends the rest of the day cherishing ${his} ${bellyAdjective(slave)} stomach. This new connection with ${his} ${getWrittenTitle(slave)} `); + /** @param {App.Entity.SlaveState} slave */ + function consummationPregnancyFetishNonvirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); - slave.devotion += 10; + const {He, he, his, him} = getPronouns(slave); - frag.append(text.join(' '), devotionSpan); + const text = []; - return frag; -} + let fillHim = ''; -/** @param {App.Entity.SlaveState} slave */ -function consummationAcceptingVirgin(slave) { - const frag = new DocumentFragment(); - const devotionSpan = document.createElement('span'); - const virginityLossSpan = document.createElement('span'); + 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}`; + } - const {He, His, he, his, him} = getPronouns(slave); + devotionSpan.classList.add('devotion', 'inc'); + devotionSpan.textContent = `increases ${his} devotion to you.`; + + text.push(`${He} cries with joy and presents ${his} fertile`); + + if (slave.mpreg) { + text.push(`asshole for breeding.`); + } else if (['bushy', 'very bushy', 'bushy in the front and neat in the rear'].includes(slave.pubicHStyle)) { + text.push(`pussy, barely visible within her tangle of pubic hair but ripe for breeding.`); + } else if (slave.pubicHStyle === 'in a strip') { + text.push(`pussy, accented by ${his} strip of pubic hair and ripe for breeding.`); + } else if (slave.pubicHStyle === 'neat') { + text.push(`neatly trimmed pussy, ripe for breeding.`); + } else if (slave.pubicHStyle === 'waxed') { + text.push(`pussy, smooth, bare, and ripe for breeding.`); + } else { + text.push(`pussy, ripe for breeding.`); + } - const text = []; + text.push(`You waste no time with foreplay as you mount ${him} and get to work. ${He} groans as your pelvis repeatedly slaps against ${him} over and over, anticipating what's to come. Just before you reach your peak, you hilt yourself within ${him}, signaling that it's time. ${He} sobs with happiness when ${he} finally feels your hot seed${fillHim}. ${He} spends the rest of the day cherishing ${his} ${bellyAdjective(slave)} stomach. This new connection with ${his} ${getWrittenTitle(slave)} `); - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + slave.devotion += 10; - let fillHim = ''; + frag.append(text.join(' '), devotionSpan); - 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}`; + return frag; } - devotionSpan.classList.add('devotion', 'inc'); - devotionSpan.textContent = `increases ${his} devotion to you.`; + /** @param {App.Entity.SlaveState} slave */ + function consummationAcceptingVirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); + const virginityLossSpan = document.createElement('span'); + + const {He, His, he, his, him} = getPronouns(slave); + + const text = []; + + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; + + 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}`; + } - virginityLossSpan.classList.add('virginity', 'loss'); - virginityLossSpan.textContent = `${His} ${hole} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.`; + devotionSpan.classList.add('devotion', 'inc'); + devotionSpan.textContent = `increases ${his} devotion to you.`; - text.push(`${He} accepts your orders without comment and presents ${his} virgin ${hole} for fertilization. ${He} gasps in shock when ${he} feels your hot seed${fillHim}. ${He} spends the rest of the day struggling with roiling emotions. Since ${he} is already well broken${superfetation ? ` and pregnant` : ``}, this new connection with ${his} ${getWrittenTitle(slave)}`); + virginityLossSpan.classList.add('virginity', 'loss'); + virginityLossSpan.textContent = `${His} ${hole} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.`; - slave.devotion += 10; + text.push(`${He} accepts your orders without comment and presents ${his} virgin ${hole} for fertilization. ${He} gasps in shock when ${he} feels your hot seed${fillHim}. ${He} spends the rest of the day struggling with roiling emotions. Since ${he} is already well broken${superfetation ? ` and pregnant` : ``}, this new connection with ${his} ${getWrittenTitle(slave)}`); - if (slave.mpreg) { - slave.anus = 1; - } else { - slave.vagina = 1; + slave.devotion += 10; + + if (slave.mpreg) { + slave.anus = 1; + } else { + slave.vagina = 1; + } + + frag.append(text.join(' '), devotionSpan, virginityLossSpan); + + return frag; } - frag.append(text.join(' '), devotionSpan, virginityLossSpan); + /** @param {App.Entity.SlaveState} slave */ + function consummationHesitantVirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); + const virginityLossSpan = document.createElement('span'); - return frag; -} + const {He, His, he, his} = getPronouns(slave); -/** @param {App.Entity.SlaveState} slave */ -function consummationHesitantVirgin(slave) { - const frag = new DocumentFragment(); - const devotionSpan = document.createElement('span'); - const virginityLossSpan = document.createElement('span'); + const text = []; - const {He, His, he, his} = getPronouns(slave); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const text = []; + devotionSpan.classList.add('devotion', 'inc'); + devotionSpan.textContent = `increases ${his} devotion to you.`; - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + virginityLossSpan.classList.add('virginity', 'loss'); + virginityLossSpan.textContent = `${His} ${hole} has been broken in.`; - devotionSpan.classList.add('devotion', 'inc'); - devotionSpan.textContent = `increases ${his} devotion to you.`; + text.push(`${He} is clearly unhappy at losing ${his} pearl of great price to you; this probably isn't what ${he} imagined ${his} first real sex would be like. Worse, ${he} knows ${he}'s fertile and realizes ${superfetation ? `${his} existing pregnancy is not going to stop you from adding another baby to ${his} womb.` : `${he}'ll likely get pregnant.`} Nevertheless, this new connection with ${his} ${getWrittenTitle(slave)}`); - virginityLossSpan.classList.add('virginity', 'loss'); - virginityLossSpan.textContent = `${His} ${hole} has been broken in.`; + slave.devotion += 4; - text.push(`${He} is clearly unhappy at losing ${his} pearl of great price to you; this probably isn't what ${he} imagined ${his} first real sex would be like. Worse, ${he} knows ${he}'s fertile and realizes ${superfetation ? `${his} existing pregnancy is not going to stop you from adding another baby to ${his} womb.` : `${he}'ll likely get pregnant.`} Nevertheless, this new connection with ${his} ${getWrittenTitle(slave)}`); + if (slave.mpreg) { + slave.anus = 1; + } else { + slave.vagina = 1; + } - slave.devotion += 4; + frag.append(text.join(' '), devotionSpan, virginityLossSpan); - if (slave.mpreg) { - slave.anus = 1; - } else { - slave.vagina = 1; + return frag; } - frag.append(text.join(' '), devotionSpan, virginityLossSpan); + /** @param {App.Entity.SlaveState} slave */ + function consummationResistantVirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); + const trustSpan = document.createElement('span'); + const virginityLossSpan = document.createElement('span'); - return frag; -} + const {He, His, he, his, him} = getPronouns(slave); -/** @param {App.Entity.SlaveState} slave */ -function consummationResistantVirgin(slave) { - const frag = new DocumentFragment(); - const devotionSpan = document.createElement('span'); - const trustSpan = document.createElement('span'); - const virginityLossSpan = document.createElement('span'); + const text = []; - const {He, His, he, his, him} = getPronouns(slave); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const text = []; + devotionSpan.classList.add('devotion', 'dec'); + devotionSpan.textContent = `decreases ${his} devotion to you`; - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + trustSpan.classList.add('trust', 'dec'); + trustSpan.textContent = `fills ${him} with fear.`; - devotionSpan.classList.add('devotion', 'dec'); - devotionSpan.textContent = `decreases ${his} devotion to you`; + virginityLossSpan.classList.add('virginity', 'loss'); + virginityLossSpan.textContent = `${His} ${hole} has been broken in.`; - trustSpan.classList.add('trust', 'dec'); - trustSpan.textContent = `fills ${him} with fear.`; + text.push(`As you anticipated, ${he} refuses to give you ${his} virginity. And as you expected, ${he} is unable to resist you. ${He} cries as you force yourself on ${him}, your cock piercing ${his} fresh, tight hole. Afterwards, ${he} ${hasAnyArms(slave) ? `clutches ${his} ${bellyAdjective(slave)} stomach` : `lies there`} and sobs, horrified by the knowledge that ${superfetation ? `${his} unborn ${slave.pregType === 1 ? `child is` : `children are`} now sharing quarters with ${his} rapist's child.` : `${he}'s probably carrying ${his} rapist's child.`}`); - virginityLossSpan.classList.add('virginity', 'loss'); - virginityLossSpan.textContent = `${His} ${hole} has been broken in.`; + slave.devotion -= 5; + slave.trust -= 5; - text.push(`As you anticipated, ${he} refuses to give you ${his} virginity. And as you expected, ${he} is unable to resist you. ${He} cries as you force yourself on ${him}, your cock piercing ${his} fresh, tight hole. Afterwards, ${he} ${hasAnyArms(slave) ? `clutches ${his} ${bellyAdjective(slave)} stomach` : `lies there`} and sobs, horrified by the knowledge that ${superfetation ? `${his} unborn ${slave.pregType === 1 ? `child is` : `children are`} now sharing quarters with ${his} rapist's child.` : `${he}'s probably carrying ${his} rapist's child.`}`); + if (slave.mpreg) { + slave.anus = 1; + } else { + slave.vagina = 1; + } - slave.devotion -= 5; - slave.trust -= 5; + frag.append(text.join(' '), devotionSpan, ' and ', trustSpan, virginityLossSpan); - if (slave.mpreg) { - slave.anus = 1; - } else { - slave.vagina = 1; + return frag; } - frag.append(text.join(' '), devotionSpan, ' and ', trustSpan, virginityLossSpan); + /** @param {App.Entity.SlaveState} slave */ + function consummationAmputee(slave) { + const frag = new DocumentFragment(); - return frag; -} + const {He, he, him, his} = getPronouns(slave); -/** @param {App.Entity.SlaveState} slave */ -function consummationAmputee(slave) { - const frag = new DocumentFragment(); + const text = []; - const {He, he, him, his} = getPronouns(slave); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const text = []; + let fillHim = ''; - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + 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}`; + } + + text.push(`You have ${his} limbless torso set on the end of the couch, face-${superfetation ? `up` : `down`}, with ${his} hips up in the air. This way, you get the greatest degree of penetration into ${his} fertile ${hole} you can manage. ${He} moans <<if _superfetation == 1>>openly<<else>>into the cushions<</if>>, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - text.push(`You have ${his} limbless torso set on the end of the couch, face-${superfetation ? `up` : `down`}, with ${his} hips up in the air. This way, you get the greatest degree of penetration into ${his} fertile ${hole} you can manage. ${He} moans <<if _superfetation == 1>>openly<<else>>into the cushions<</if>>, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationBigBelly(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationBigBelly(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const {He, he, him, his} = getPronouns(slave); + let fillHim = ''; - const text = []; + if (V.PC.prostate > 1) { + fillHim = ` filling ${him} until ${his} the pressure forces it to spray around your shaft`; + } 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + text.push(`Since ${he} already has trouble moving with ${his} ${bellyAdjective(slave)} belly, you just tip ${him} onto it; this leaves ${his} fertile ${hole} exposed and vulnerable. ${He} moans${hasAnyArms(slave) ? ` as ${he} clutches the sides of ${his} stomach` : ``}, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably gotten ${superfetation ? `another bun added to the oven` : `pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - if (V.PC.prostate > 1) { - fillHim = ` filling ${him} until ${his} the pressure forces it to spray around your shaft`; - } 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}`; + return frag; } - text.push(`Since ${he} already has trouble moving with ${his} ${bellyAdjective(slave)} belly, you just tip ${him} onto it; this leaves ${his} fertile ${hole} exposed and vulnerable. ${He} moans${hasAnyArms(slave) ? ` as ${he} clutches the sides of ${his} stomach` : ``}, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably gotten ${superfetation ? `another bun added to the oven` : `pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationFat(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationFat(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const {He, he, him, his} = getPronouns(slave); + let fillHim = ''; - const text = []; + 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s pinned in place by the weight of ${his} own body, and you get the greatest degree of penetration into ${his} fertile ${hole}; after you push into ${his} soft folds enough to reach it, of course. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s pinned in place by the weight of ${his} own body, and you get the greatest degree of penetration into ${his} fertile ${hole}; after you push into ${his} soft folds enough to reach it, of course. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationBigBreasts(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationBigBreasts(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const {He, he, him, his} = getPronouns(slave); + let fillHim = ''; - const text = []; + 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s pinned in place by the weight of ${his} ridiculous tits, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s pinned in place by the weight of ${his} ridiculous tits, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationBigButt(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationBigButt(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const {He, he, him, his} = getPronouns(slave); + let fillHim = ''; - const text = []; + 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s stuck under ${his} ridiculous ass, you get an amazingly soft rear to pound, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s stuck under ${his} ridiculous ass, you get an amazingly soft rear to pound, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationBigDick(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationBigDick(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const {He, he, him, his} = getPronouns(slave); + let fillHim = ''; - const text = []; + 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s anchored in place by the weight of ${his} ridiculous cock, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s anchored in place by the weight of ${his} ridiculous cock, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationBigBalls(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationBigBalls(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; - const {He, he, him, his} = getPronouns(slave); + let fillHim = ''; - const text = []; + 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const hole = slave.mpreg ? `asshole` : `pussy`; + text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s anchored in place by the weight of ${his} ridiculous balls, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s anchored in place by the weight of ${his} ridiculous balls, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationSubmissive(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his, himself} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationSubmissive(slave) { - const frag = new DocumentFragment(); + let fillsHim = ''; - const {He, he, him, his, himself} = getPronouns(slave); + 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`; + } - const text = []; + 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.`); - let fillsHim = ''; + frag.append(text.join(' ')); - 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`; + return frag; } - 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.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationAcceptingNonvirgin(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his, himself} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationAcceptingNonvirgin(slave) { - const frag = new DocumentFragment(); + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; - const {He, he, him, his, himself} = getPronouns(slave); + let fillingHim = ''; - const text = []; + 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}`; + } - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + 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.`); - let fillingHim = ''; + frag.append(text.join(' ')); - 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}`; + return frag; } - 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.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationHesitantNonvirgin(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, he, him, his, himself} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationHesitantNonvirgin(slave) { - const frag = new DocumentFragment(); + let full = ''; - const {He, he, him, his, himself} = getPronouns(slave); + 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`; + } - const text = []; + 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.`); - let full = ''; + frag.append(text.join(' ')); - 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`; + return frag; } - 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.`); + /** @param {App.Entity.SlaveState} slave */ + function consummationResistantNonvirgin(slave) { + const frag = new DocumentFragment(); - frag.append(text.join(' ')); + const {He, His, he, him, his} = getPronouns(slave); - return frag; -} + const text = []; -/** @param {App.Entity.SlaveState} slave */ -function consummationResistantNonvirgin(slave) { - const frag = new DocumentFragment(); + let fillHim = ''; - const {He, His, he, him, his} = getPronouns(slave); + 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`; + } - const text = []; + 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.`); - let fillHim = ''; + frag.append(text.join(' ')); - 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`; + return frag; } - 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.`); + function consummationRepeat(slave) { + const frag = new DocumentFragment(); + const pregnancySpan = document.createElement('span'); - frag.append(text.join(' ')); + const {his} = getPronouns(slave); - return frag; -} + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; -function consummationRepeat(slave) { - const frag = new DocumentFragment(); - const pregnancySpan = document.createElement('span'); + pregnancySpan.className = 'pregnant'; + pregnancySpan.textContent = superfetation ? `added your child` : `carrying your child.`; - const {his} = getPronouns(slave); + frag.append(`You repeat this ritual throughout the week, ensuring that ${slave.slaveName} `); - const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + if (superfetation) { + frag.append(`has `, pregnancySpan, ` to ${his} pregnancy.`); + } else { + frag.append(`is `, pregnancySpan); + } - pregnancySpan.className = 'pregnant'; - pregnancySpan.textContent = superfetation ? `added your child` : `carrying your child.`; + return frag; + } - frag.append(`You repeat this ritual throughout the week, ensuring that ${slave.slaveName} `); + /** @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 && slave.devotion <= 20; + const resistant = slave.devotion < -20; - if (superfetation) { - frag.append(`has `, pregnancySpan, ` to ${his} pregnancy.`); - } else { - frag.append(`is `, pregnancySpan); + if (pregnancyFetish) { + return consummationPregnancyFetishVirgin(slave); + } else if (accepting) { + return consummationAcceptingVirgin(slave); + } else if (hesitant) { + return consummationHesitantVirgin(slave); + } else if (resistant) { + return consummationResistantVirgin(slave); + } } - 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 && slave.devotion <= 20; - const resistant = slave.devotion < -20; - - if (pregnancyFetish) { - return consummationPregnancyFetishVirgin(slave); - } else if (accepting) { - return consummationAcceptingVirgin(slave); - } else if (hesitant) { - return consummationHesitantVirgin(slave); - } else if (resistant) { - return consummationResistantVirgin(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); - } else if (isAmputee(slave)) { - return consummationAmputee(slave); - } else if (tooBigBelly(slave)) { - return consummationBigBelly(slave); - } else if (tooFatSlave(slave)) { - return consummationFat(slave); - } else if (tooBigBreasts(slave)) { - return consummationBigBreasts(slave); - } else if (tooBigButt(slave)) { - return consummationBigButt(slave); - } else if (tooBigDick(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); - } -} + /** @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); + } else if (isAmputee(slave)) { + return consummationAmputee(slave); + } else if (tooBigBelly(slave)) { + return consummationBigBelly(slave); + } else if (tooFatSlave(slave)) { + return consummationFat(slave); + } else if (tooBigBreasts(slave)) { + return consummationBigBreasts(slave); + } else if (tooBigButt(slave)) { + return consummationBigButt(slave); + } else if (tooBigDick(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); + } + } -/** - * @param {App.Entity.SlaveState} slave - * @returns {DocumentFragment} - */ -function consummation(slave) { - const frag = new DocumentFragment(); + /** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function consummation(slave) { + const frag = new DocumentFragment(); - const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0); + const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0); - if (virgin) { - frag.appendChild(consummationVirgin(slave)); - } else { - frag.appendChild(consummationNonvirgin(slave)); - } + if (virgin) { + frag.appendChild(consummationVirgin(slave)); + } else { + frag.appendChild(consummationNonvirgin(slave)); + } - frag.appendChild(consummationRepeat(slave)); + frag.appendChild(consummationRepeat(slave)); - return frag; -} + return frag; + } -function getEugenicsEffects() { - const frag = new DocumentFragment(); - const reputationSpan = document.createElement('span'); + function getEugenicsEffects() { + const frag = new DocumentFragment(); + const reputationSpan = document.createElement('span'); - reputationSpan.classList.add('reputation', 'dec'); - reputationSpan.textContent = 'very displeased'; + reputationSpan.classList.add('reputation', 'dec'); + reputationSpan.textContent = 'very displeased'; - frag.append(`Rumors spread about you fucking your slaves pregnant; the Societal Elite are`, reputationSpan, ` by these rumors.`); + frag.append(`Rumors spread about you fucking your slaves pregnant; the Societal Elite are`, reputationSpan, ` by these rumors.`); - V.failedElite += 5; + V.failedElite += 5; - return frag; -} + return frag; + } -/** @param {App.Entity.SlaveState} slave */ -function getGenderRadicalistEffects(slave) { - const frag = new DocumentFragment(); - const reputationSpan = document.createElement('span'); + /** @param {App.Entity.SlaveState} slave */ + function getGenderRadicalistEffects(slave) { + const frag = new DocumentFragment(); + const reputationSpan = document.createElement('span'); - reputationSpan.classList.add('reputation', 'inc'); - reputationSpan.textContent = 'approves'; + reputationSpan.classList.add('reputation', 'inc'); + reputationSpan.textContent = 'approves'; - frag.append(`Society `, reputationSpan, ` of your fucking your slaves' asses pregnant; this advances the ideal all a slave needs is ${getPronouns(slave).his} rear.`); + frag.append(`Society `, reputationSpan, ` of your fucking your slaves' asses pregnant; this advances the ideal all a slave needs is ${getPronouns(slave).his} rear.`); - // FIXME: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. - repX(V.FSSingleSlaveRep * (V.arcologies[0].FSGenderRadicalist / V.FSLockinLevel), 'futureSocieties', slave); - // FIXME: Operator '+=' cannot be applied to types 'string | number' and 'number'. - V.arcologies[0].FSGenderRadicalist += 0.05 * V.FSSingleSlaveRep; + // FIXME: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. + repX(V.FSSingleSlaveRep * (V.arcologies[0].FSGenderRadicalist / V.FSLockinLevel), 'futureSocieties', slave); + // FIXME: Operator '+=' cannot be applied to types 'string | number' and 'number'. + V.arcologies[0].FSGenderRadicalist += 0.05 * V.FSSingleSlaveRep; - return frag; -} + return frag; + } -/** @param {App.Entity.SlaveState} slave */ -function getGenderFundamentalistEffectsApproving(slave) { - const frag = new DocumentFragment(); - const reputationSpan = document.createElement('span'); + /** @param {App.Entity.SlaveState} slave */ + function getGenderFundamentalistEffectsApproving(slave) { + const frag = new DocumentFragment(); + const reputationSpan = document.createElement('span'); - reputationSpan.classList.add('reputation', 'inc'); - reputationSpan.textContent = 'approves'; + reputationSpan.classList.add('reputation', 'inc'); + reputationSpan.textContent = 'approves'; - frag.append(`Society `, reputationSpan, ` of your putting a new slave in ${getPronouns(slave).him}; this advances the idea that all slaves should bear their masters' babies.`); + frag.append(`Society `, reputationSpan, ` of your putting a new slave in ${getPronouns(slave).him}; this advances the idea that all slaves should bear their masters' babies.`); - repX(forceNeg(V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel)), 'futureSocieties', slave); - V.arcologies[0].FSGenderFundamentalist -= 0.05 * V.FSSingleSlaveRep; + repX(forceNeg(V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel)), 'futureSocieties', slave); + V.arcologies[0].FSGenderFundamentalist -= 0.05 * V.FSSingleSlaveRep; - return frag; -} + return frag; + } -/** @param {App.Entity.SlaveState} slave */ -function getGenderFundamentalistEffectsDisapproving(slave) { - const frag = new DocumentFragment(); - const reputationSpan = document.createElement('span'); + /** @param {App.Entity.SlaveState} slave */ + function getGenderFundamentalistEffectsDisapproving(slave) { + const frag = new DocumentFragment(); + const reputationSpan = document.createElement('span'); - reputationSpan.classList.add('reputation', 'dec'); - reputationSpan.textContent = 'is disgusted'; + reputationSpan.classList.add('reputation', 'dec'); + reputationSpan.textContent = 'is disgusted'; - frag.append(`Society `, reputationSpan, ` by this degenerate form of reproduction.`); + frag.append(`Society `, reputationSpan, ` by this degenerate form of reproduction.`); - repX(V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel), 'futureSocieties', slave); - V.arcologies[0].FSGenderFundamentalist += 0.05 * V.FSSingleSlaveRep; + repX(V.FSSingleSlaveRep * (V.arcologies[0].FSGenderFundamentalist / V.FSLockinLevel), 'futureSocieties', slave); + V.arcologies[0].FSGenderFundamentalist += 0.05 * V.FSSingleSlaveRep; - return frag; -} + return frag; + } -/** @param {App.Entity.SlaveState} slave */ -function getGenderFundamentalistEffects(slave) { - if (slave.mpreg) { - return getGenderFundamentalistEffectsDisapproving(slave); - } else { - return getGenderFundamentalistEffectsApproving(slave); + /** @param {App.Entity.SlaveState} slave */ + function getGenderFundamentalistEffects(slave) { + if (slave.mpreg) { + return getGenderFundamentalistEffectsDisapproving(slave); + } else { + return getGenderFundamentalistEffectsApproving(slave); + } } -} -/** - * @param {App.Entity.SlaveState} slave - * @returns {DocumentFragment} - */ -function effects(slave) { - const frag = new DocumentFragment(); + /** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function effects(slave) { + const frag = new DocumentFragment(); - if (V.arcologies[0].FSRestart !== 'unset' && (!slave.breedingMark || !V.propOutcome) && V.eugenicsFullControl) { - frag.appendChild(getEugenicsEffects()); - } + if (V.arcologies[0].FSRestart !== 'unset' && (!slave.breedingMark || !V.propOutcome) && V.eugenicsFullControl) { + frag.appendChild(getEugenicsEffects()); + } - if (V.arcologies[0].FSGenderRadicalist !== 'unset' && slave.mpreg) { - frag.appendChild(getGenderRadicalistEffects(slave)); - } else if (V.arcologies[0].FSGenderFundamentalist !== 'unset') { - frag.appendChild(getGenderFundamentalistEffects(slave)); - } + if (V.arcologies[0].FSGenderRadicalist !== 'unset' && slave.mpreg) { + frag.appendChild(getGenderRadicalistEffects(slave)); + } else if (V.arcologies[0].FSGenderFundamentalist !== 'unset') { + frag.appendChild(getGenderFundamentalistEffects(slave)); + } - return frag; -} + return frag; + } +};