diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js index 36bbd38f42027d39a10b4ef24d045c0527bef9f5..e1ed9064b562cb6590d212e977f07e0f9e628f9f 100644 --- a/src/npc/interaction/fPCImpreg.js +++ b/src/npc/interaction/fPCImpreg.js @@ -246,12 +246,145 @@ function consummationPregnancyFetishNonvirgin(slave) { } /** @param {App.Entity.SlaveState} slave */ -function consummationPregnancyFetish(slave) { - const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0); +function consummationAcceptingVirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); + const virginityLossSpan = document.createElement('span'); - if (virgin) { - return consummationPregnancyFetishVirgin(slave); + 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}`; + } + + devotionSpan.classList.add('devotion', 'inc'); + devotionSpan.textContent = `increases ${his} devotion to you.`; + + 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`}.`; + + 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)}`); + + slave.devotion += 10; + + if (slave.mpreg) { + slave.anus = 1; + } else { + slave.vagina = 1; + } + + frag.append(text.join(' '), devotionSpan, virginityLossSpan); + + return frag; +} + +/** @param {App.Entity.SlaveState} slave */ +function consummationHesitantVirgin(slave) { + const frag = new DocumentFragment(); + const devotionSpan = document.createElement('span'); + const virginityLossSpan = document.createElement('span'); + + const {He, His, he, his} = getPronouns(slave); + + const text = []; + + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; + + devotionSpan.classList.add('devotion', 'inc'); + devotionSpan.textContent = `increases ${his} devotion to you.`; + + virginityLossSpan.classList.add('virginity', 'loss'); + virginityLossSpan.textContent = `${His} ${hole} has been broken in.`; + + 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)}`); + + slave.devotion += 4; + + if (slave.mpreg) { + slave.anus = 1; + } else { + slave.vagina = 1; + } + + frag.append(text.join(' '), devotionSpan, virginityLossSpan); + + return frag; +} + +/** @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 {He, His, he, his, him} = getPronouns(slave); + + const text = []; + + const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown; + const hole = slave.mpreg ? `asshole` : `pussy`; + + devotionSpan.classList.add('devotion', 'dec'); + devotionSpan.textContent = `decreases ${his} devotion to you`; + + trustSpan.classList.add('trust', 'dec'); + trustSpan.textContent = `fills ${him} with fear.`; + + virginityLossSpan.classList.add('virginity', 'loss'); + virginityLossSpan.textContent = `${His} ${hole} has been broken in.`; + + 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.`}`); + + slave.devotion -= 5; + slave.trust -= 5; + + if (slave.mpreg) { + slave.anus = 1; } else { + slave.vagina = 1; + } + + frag.append(text.join(' '), devotionSpan, ' and ', trustSpan, virginityLossSpan); + + 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 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; + + if (pregnancyFetish) { return consummationPregnancyFetishNonvirgin(slave); } } @@ -263,10 +396,12 @@ function consummationPregnancyFetish(slave) { function consummation(slave) { const frag = new DocumentFragment(); - const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown; + const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0); - if (pregnancyFetish) { - frag.appendChild(consummationPregnancyFetish(slave)); + if (virgin) { + frag.appendChild(consummationVirgin(slave)); + } else { + frag.appendChild(consummationNonvirgin(slave)); } return frag;