diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js index e5d725032e7b7f2c332cd9832e90d7e7b8a5dbe1..b0cf25ab354e879fc695dce693b211625e0f9425 100644 --- a/src/interaction/siWork.js +++ b/src/interaction/siWork.js @@ -409,7 +409,10 @@ App.UI.SlaveInteract.work = function(slave, refresh) { if (canGetPregnant(slave) && (slave.geneticQuirks.superfetation !== 2 || V.geneticMappingUpgrade !== 0) && (slave.fuckdoll === 0) && V.seePreg !== 0) { if (canImpreg(slave, V.PC)) { - sexOptions.push({text: `Impregnate ${him} yourself`, scene: `FPCImpreg`}); + sexOptions.push({ + text: `Impregnate ${him} yourself`, + get scene() { return App.Interact.fPCImpreg(slave); }, + }); } if (canImpreg(slave, slave)) { sexOptions.push({text: `Use ${his} own seed to impregnate ${him}`, scene: `FSlaveSelfImpreg`}); diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js new file mode 100644 index 0000000000000000000000000000000000000000..7bfd3e45a715876bd3b3096a1b2d9f7d62ff3f69 --- /dev/null +++ b/src/npc/interaction/fPCImpreg.js @@ -0,0 +1,132 @@ +/** + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ +App.Interact.fPCImpreg = function(slave) { + const frag = new DocumentFragment(); + + frag.append(intro(slave)); + + addPartner(slave, -1); + + return frag; +}; + +/** @param {App.Entity.SlaveState} slave */ +function impregnateAnus(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 impregnateVagina(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.anus === 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`); + + if (slave.mpreg) { + text.push(impregnateAnus(slave)); + + 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(impregnateVagina(slave)); + + if (superfetation) { + text.push(`You plan on putting another baby in ${him}.`); + } + + if (slave.vaginaTat) { + text.push(getVaginaTat(slave)); + } + + if (slave.clit > 0) { + text.push(getClit(slave)); + } + + if (slave.vaginaPiercing > 0) { + text.push(getPiercings(slave)); + } + } + + App.UI.DOM.appendNewElement('div', frag, App.UI.DOM.toSentence(text)); + + return frag; +}