diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js index f68063e5489b7a581305522e9eced4b357405b3a..7065f9607994cfa08e6b482855a2a1dad9072821 100644 --- a/src/interaction/siWork.js +++ b/src/interaction/siWork.js @@ -417,13 +417,13 @@ 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)) { + if (canImpreg(slave, V.PC) || canFemImpreg(slave, V.PC)) { sexOptions.push({ text: `Impregnate ${him} yourself`, scene: () => App.Interact.fPCImpreg(slave), }); } - if (canImpreg(slave, slave)) { + if (canImpreg(slave, slave) || canFemImpreg(slave, slave)) { sexOptions.push({text: `Use ${his} own seed to impregnate ${him}`, scene: () => App.Interact.fSlaveSelfImpreg(slave)}); } sexOptions.push({text: `Use another slave to impregnate ${him}`, scene: new App.Interact.fSlaveImpregChoosePartner(slave)}); diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js index 67e43411674b073d94ffeb3c1dbb46b0799ac9df..c233c42c517d2649bf097c6f605989931da31b7f 100644 --- a/src/npc/interaction/fPCImpreg.js +++ b/src/npc/interaction/fPCImpreg.js @@ -19,6 +19,8 @@ App.Interact.fPCImpreg = function(slave) { const hesitant = slave.devotion >= -20 && slave.devotion <= 20; const resistant = slave.devotion < -20; + const hasPenis = V.PC.dick > 0; + const loseVirginity = () => { if (slave.mpreg) { slave.anus = 1; @@ -57,7 +59,9 @@ App.Interact.fPCImpreg = function(slave) { throw new Error(`Unexpected anus value '${slave.anus}' in fPCImpreg()`); } - text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum, and who are you to deny its request?`); + if (slave.vaginaTat === "lewd crest") { + text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum, and who are you to deny its request?`); + } } else { if (slave.vagina > 2) { text.push(`fuck ${his} gaping, fertile cunt.`); @@ -104,6 +108,13 @@ App.Interact.fPCImpreg = function(slave) { } } + if (!hasPenis) { + text.push(`You wear a special strap-on with a micro-pump that ensures any ejaculate will be expelled through the artificial member.`); + if (V.PC.clit > 3) { + text.push(`The attached dildo is hollow and comfortablely fits around your ${clitDesc(V.PC, true)}, providing additional stimulation.`); + } + } + if (virgin) { if (pregnancyFetish) { if (isSexuallyPure(slave)) { diff --git a/src/npc/interaction/fSlaveSelfImpreg.js b/src/npc/interaction/fSlaveSelfImpreg.js index 90eef7b2c70bf969b814091a11cf7f4c2a8c2dc9..51a7853c329d3ca7786105eeec7d7341441cb614 100644 --- a/src/npc/interaction/fSlaveSelfImpreg.js +++ b/src/npc/interaction/fSlaveSelfImpreg.js @@ -1,4 +1,5 @@ /** + * Works with slaves that only have balls and no penis. * * @param {FC.SlaveState} slave * @returns {DocumentFragment} @@ -18,6 +19,21 @@ App.Interact.fSlaveSelfImpreg = function(slave) { let enjoy = true; const superfetation = (slave.geneticQuirks.superfetation === 2 && slave.pregKnown === 1) ? 1 : 0; + let masturbationAction = `jacking off`; + if (slave.dick === 0) { + if (canDoVaginal(slave)) { + masturbationAction = `rubbing ${his} ${clitDesc(slave, true)}`; + } else if (canDoAnal(slave)) { + if (slave.prostate > 0) { + masturbationAction = `massaging ${his} prostate`; + } else { + masturbationAction = `fingering ${his} anus`; + } + } else { + masturbationAction= `stimulating ${his} nipples`; + } + } + if (slave.fetish !== Fetish.MINDBROKEN) { if (slave.devotion <= 20) { if (slave.devotion < -20) { @@ -91,7 +107,13 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } if (slave.fetish === Fetish.MINDBROKEN) { - r.push(`${slave.slaveName} is dully cooperative as you ensure ${he} is positioned conveniently on a bench to give you access to both aspects of ${his} genitalia. A quick dose of vasodilators ensures that ${he} is ready to perform, even if ${he} is unable to fully comprehend what is about to happen. Once ${he} is fully erect, your personal assistant uses a mechanical toy to efficiently stimulate ${him} to climax, while you hold a small container in place to collect ${his} emission. Moments later, you've loaded ${slave.slaveName}'s seed into a syringe and dispensed the contents deep within ${his}`); + r.push(`${slave.slaveName} is dully cooperative as you ensure ${he} is positioned conveniently on a bench to give you access`); + if (slave.dick > 0) { + r.push(`to both aspects of ${his} genitalia. A quick dose of vasodilators ensures that ${he} is ready to perform, even if ${he} is unable to fully comprehend what is about to happen. Once ${he} is fully erect,`); + } else { + r.push(`to ${his} fertile ${slave.mpreg === 1 ? 'anus' : 'pussy'}. Once positioned correctly,`); + } + r.push(`your personal assistant uses a mechanical toy to efficiently stimulate ${him} to climax, while you hold a small container in place to collect ${his} emission. Moments later, you've loaded ${slave.slaveName}'s seed into a syringe and dispensed the contents deep within ${his}`); if (slave.mpreg === 1) { r.push(`ass.`); } else { @@ -103,7 +125,7 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } else if (enjoy) { r.push(`A maelstrom of emotions fill ${slave.slaveName}'s face as you carry ${him} to a bench, and produce a sample cup and syringe.`); - if (slave.dick > 6) { + if (slave.dick > maxErectionSize(slave)) { r.push(`You can't tell if ${he}'s relieved or disappointed when ${his} excessive size interferes, as usual, with ${his} erection, but an injection of vasodilators quickly makes the question moot.`); } r.push(`At your instruction, your personal assistant descends with a selection of toys to ensure quick ejaculation. Pleasure, lust, terror, and loathing play across ${slave.slaveName}'s face as ${his} arousal mounts and ${his} hips begin to buck. By the time ${he} begins to ejaculate, pleasure and lust have won out and ${he} throws ${his} head back in abandon as ${his} emission fills the cup in your hands.`); @@ -128,7 +150,12 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } else { r.push(`watch`); } - r.push(`in helpless horror as the vasodilators you inject bring ${his} manhood to complete erectness and your personal assistant, at your instruction, begins stimulating ${him}. ${He} sobs in helpless despair as ${his} rigid shaft begins to throb, filling the cup with a terribly potent load of ${his} seed; ${he} frantically shakes ${his} head, face streaked with tears, as you dip the syringe into the cup, withdraw the plunger, insert it into ${his} exposed`); + r.push(`in helpless horror as`); + if (slave.dick > 0) { + r.push(`the vasodilators you inject bring ${his} manhood to complete erectness and`); + } + r.push(`your personal assistant, at your instruction, begins stimulating ${him}. ${He} sobs in helpless despair as ${his} rigid shaft begins to throb, filling the cup with a terribly potent load of ${his} seed; ${he} frantically shakes ${his} head, face streaked with tears, as you dip the syringe into the cup, withdraw the plunger, insert it into ${his} exposed`); + if (slave.mpreg === 1) { r.push(`ass,`); } else { @@ -215,12 +242,12 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } r.push(`eagerly drinks up ${his} own seed.`); } else { - if (slave.trust < -20) { + if (slave.trust < -20 && slave.dick > 0) { r.push(`Although ${he} is aroused by the idea of impregnating ${himself}, ${slave.slaveName} is too terrified to achieve an erection without assistance. It takes an injection of vasodilators to overcome ${his} nerves and restore ${his} manhood to proper functioning.`); - } else if (slave.dick > maxErectionSize(slave)) { + } else if (slave.dick > maxErectionSize(slave) && slave.dick > 0) { r.push(`Although ${he} is aroused by the idea of impregnating ${himself}, ${slave.slaveName}'s cock is simply too large to easily become erect. A quick injection of vasodilators later, and ${he}'s ready to go. Because ${he}'s so eager, you simply stand back and let the magic happen.`); } else { - r.push(`Merely thinking about what you're about to do has ${slave.slaveName} fully erect, with a small bead of precum running down ${his} shaft and blending with the`); + r.push(`Merely thinking about what you're about to do has ${slave.slaveName} ${slave.dick > 0 ? `fully erect, with a small bead of precum running down ${his} shaft and blending with the` : 'looking at you with anticipation, with copious amounts of'}`); if (slave.mpreg === 1) { r.push(`lubricant dripping from between ${his} cheeks.`); } else { @@ -233,7 +260,9 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } } // TODO: if slave has lover/wife, let them "do the honors" - if (slave.balls > 4) { + if (slave.dick < 1) { + r.push(`Since ${he} has no member to fuck ${himself} with, you produce a special toy for ${slave.slaveName} — a catheter attached by a flexible tube to a dildo, with an embedded micro-pump to ensure any fluid makes its way out of the dildo.`); + } else if (slave.balls > 4) { r.push(`Since ${his} balls are too large to permit any other options, you produce a special toy for ${slave.slaveName} — an onahole attached by a flexible tube to a dildo, with an embedded micro-pump to ensure any fluid in the onahole makes its way out of the dildo.`); } else { r.push(`Since ${he}'s not large enough to simply fuck ${himself}, you produce a special toy for ${slave.slaveName} — an onahole attached by a flexible tube to a dildo, with an embedded micro-pump to ensure any fluid in the onahole makes its way out of the dildo.`); @@ -270,7 +299,16 @@ App.Interact.fSlaveSelfImpreg = function(slave) { r.push(`dripping pussy.`); } } - r.push(`You help ${him} keep the dildo in place while ${he} works the onahole onto ${his} cock and begins stroking up and down. The stimulation of being filled and having ${his} dick stroked doesn't give ${him} much time to enjoy what ${he}'s doing before ${his} hips buck wildly and you see semen traveling from the pump, along the clear plastic tube, and into the base of the dildo embedded deeply in ${slave.slaveName}'s throbbing`); + if (slave.dick > 0) { + r.push(`You help ${him} keep the dildo in place while ${he} works the onahole onto ${his} cock and begins stroking up and down. The stimulation of being filled and having ${his} dick stroked doesn't give ${him} much time to enjoy what ${he}'s doing before ${his} hips buck wildly and you see semen traveling from the pump, along the clear plastic tube, and into the base of the dildo embedded deeply in ${slave.slaveName}'s throbbing`); + } else { + if (slave.prostate > 0) { + r.push(`You massage ${his} prostate while ${he} fucks ${himself} with the dildo in ${his} ${slave.mpreg ? anusDesc(slave, true) : vaginaDesc(slave, true)}. The stimulation of being filled and having ${his} prostate stimulated`); + } else { + r.push(`You massage ${his} ${boobsDesc(slave, true)} while ${he} fucks ${himself} with the dildo in ${his} ${slave.mpreg ? anusDesc(slave, true) : vaginaDesc(slave, true)}. The stimulation of being filled and having ${his} nipples stimulated`); + } + r.push(`doesn't give ${him} much time to enjoy what ${he}'s doing before ${his} hips buck wildly and you see semen traveling from ${his} urethra, along the clear plastic tube, and into the base of the dildo embedded deeply in ${slave.slaveName}'s throbbing`); + } if (slave.mpreg === 1) { r.push(`asshole.`); } else { @@ -278,13 +316,13 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } } } else { - if (slave.devotion > 50) { + if (slave.devotion > 50 && slave.dick > 0) { if (slave.dick > maxErectionSize(slave)) { r.push(`No matter how hard ${he} tries, ${slave.slaveName}'s dick is simply too large for ${him} to achieve erection on ${his} own. You're about to inject ${him} with a vasodilator to remedy the problem, when ${he} tries to take the syringe from your hand. Normally such impudence would be a grave violation, but it's obvious that ${his} actions are only motivated by loyalty — ${he} wants to fix this problem ${himself} so ${he} can feel like ${he} isn't failing you because of a physical inadequacy that is, admittedly, not ${his} fault. You relinquish the syringe and watch as ${he} injects ${himself} with the drugs necessary to achieve a full erection.`); } else { r.push(`Despite a complete lack of sexual interest in the procedure, ${slave.slaveName} is able to quickly bring ${himself} to full erectness without any help.`); } - } else { + } else if (slave.dick > 0) { if (slave.dick > maxErectionSize(slave)) { r.push(`${slave.slaveName}`); r.push(`doesn't try all that hard to achieve erection, but it's obvious that the ${slave.dick > 6 ? "sheer" : "proportional"} size of ${his} cock would make it impossible anyway. ${He} silently cooperates as you inject ${him} with vasodilators to forcibly make ${him} erect.`); @@ -293,7 +331,7 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } } // TODO: if slave has lover/wife, let them "do the honors" - r.push(`You produce a sample container and syringe; ${slave.slaveName} gets the idea and immediately begins jacking off. When ${he} ejaculates, ${he} carefully holds the cup`); + r.push(`You produce a sample container and syringe; ${slave.slaveName} gets the idea and immediately begins ${masturbationAction}. When ${he} ejaculates, ${he} carefully holds the cup`); if (hasBothArms(slave)) { r.push(`with one hand`); } else { @@ -327,7 +365,7 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } else { if (enjoy) { r.push(`Although ${slave.slaveName} is anything but eager to cooperate, you don't have to drag ${him}. It's obvious that ${his} resistance is conflicting with the raw desire to fill ${himself} with ${his} own seed.`); - if (slave.dick > maxErectionSize(slave) && slave.balls <= 4) { + if (slave.dick > maxErectionSize(slave) && slave.balls <= 4 && slave.dick > 0) { r.push(`While the size of ${his} cock makes it necessary for you to inject ${him} with vasodilators for ${him} to become properly erect, ${his} resistance is minimal.`); if (slave.vagina === 0) { r.push(`You instruct ${him} to fuck ${himself}; by this point, ${he}'s too far gone to object, even though obeying will rob ${him} of ${his} virginity. ${His}`); @@ -360,10 +398,10 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } else { if (slave.dick > maxErectionSize(slave)) { r.push(`${slave.slaveName}'s balls are too large to make any other options possible, but ${he} is still too large to achieve erection easily. You can't tell if ${he} is disappointed, or relieved, by this fact, but a quick injection of vasodilators makes the question moot either way.`); - } else { + } else if (slave.dick > 0) { r.push(`${His} cock is rigidly erect almost immediately, a fact which brings a confusing mixture of shame and arousal to ${his} face.`); } - r.push(`You produce a sample container and syringe; ${slave.slaveName} gets the idea and reluctantly begins jacking off. When ${he} ejaculates, ${he} carefully holds the cup with one hand to catch every drop of ${his} seed. A moment later ${he} dips the syringe into the container and withdraws the plunger. ${He} hesitates, likely because the release has restored some of ${his} self control to ${him}, but before ${he} can do anything to escape, you press ${him} down with one hand and feed the syringe into ${his}`); + r.push(`You produce a sample container and syringe; ${slave.slaveName} gets the idea and reluctantly begins ${masturbationAction}. When ${he} ejaculates, ${he} carefully holds the cup with one hand to catch every drop of ${his} seed. A moment later ${he} dips the syringe into the container and withdraws the plunger. ${He} hesitates, likely because the release has restored some of ${his} self control to ${him}, but before ${he} can do anything to escape, you press ${him} down with one hand and feed the syringe into ${his}`); if (slave.mpreg === 1) { r.push(`anus,`); } else { @@ -373,7 +411,17 @@ App.Interact.fSlaveSelfImpreg = function(slave) { // possible TODO: allow Head Girl to do this part? } } else { - r.push(`The repulsion ${slave.slaveName} feels toward both you and what you're about to force ${him} to do make ${his} cooperation entirely out of the question. You are forced to restrain ${him} with straps, kicking and sobbing; the sobbing only gets louder when ${he} feels the prick of a needle shooting vasodilators into ${his} crotch. Moments later, despite ${his} best efforts, ${he} is painfully erect and ready for you to proceed. Since ${he}'s guaranteed to make this as difficult as possible, you opt for the simplest solution: you take a condom and apply it to ${his} penis; once ${he}'s sheathed, you instruct your personal assistant, using toys, to forcibly stimulate ${him} until ${he} ejaculates and remove the condom. Loading the contents into a syringe and injecting them into ${his}`); + r.push(`The repulsion ${slave.slaveName} feels toward both you and what you're about to force ${him} to do make ${his} cooperation entirely out of the question. You are forced to restrain ${him} with straps, kicking and sobbing.`); + if (slave.dick > 0) { + r.push(`The sobbing only gets louder when ${he} feels the prick of a needle shooting vasodilators into ${his} crotch. Moments later, despite ${his} best efforts, ${he} is painfully erect and ready for you to proceed.`); + } + r.push(`Since ${he}'s guaranteed to make this as difficult as possible, you opt for the simplest solution:`); + if (slave.dick > 0) { + r.push(`you take a condom and apply it to ${his} penis; once ${he}'s sheathed, you instruct ${V.assistant.name}, using toys, to forcibly stimulate ${him} until ${he} ejaculates and remove the condom.`); + } else { + r.push(`you grab a catheter and attach one end to a cup; once it's inserted in ${his} urethra, you instruct ${V.assistant.name}, using toys, to forcibly stimulate ${him} until ${he} ejaculates.`); + } + r.push(`Loading the contents into a syringe and injecting them into ${his}`); if (slave.mpreg === 1) { r.push(`ass`); } else { diff --git a/src/npc/interaction/passage/fSlaveImpreg.js b/src/npc/interaction/passage/fSlaveImpreg.js index d1b4162f0a69b2fad3c040c747798a64e3c49308..a8f3555f2d4aa438c5a269f54570fbbe8af82899 100644 --- a/src/npc/interaction/passage/fSlaveImpreg.js +++ b/src/npc/interaction/passage/fSlaveImpreg.js @@ -1,13 +1,13 @@ App.Interact.fSlaveImpregChoosePartner = class extends App.Interact.BaseChoosePartnerRenderer { constructor(slave) { super(slave); - this.intro = `${slave.slaveName} is fertile; now you must select a slave with both a penis and potent testicles.`; + this.intro = `${slave.slaveName} is fertile; now you must select a slave with potent testicles.`; this.noneEligible = `You have no slaves capable of inseminating others.`; this.execute = App.Interact.fSlaveImpreg; } eligible(candidate) { - return canImpreg(this.slave, candidate) && canPenetrate(candidate); + return (canImpreg(this.slave, candidate) && canPenetrate(candidate)) || canFemImpreg(this.slave, candidate); } renderDetail(candidate, container) { @@ -66,6 +66,8 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { const assCunt = (slave.mpreg === 1) ? `ass` : `cunt`; const prostate = (impregnatrix.prostate !== 0) ? `prostate` : `internals`; + const hasPenis = impregnatrix.dick > 0; + if (impregnatrix.fetish === "pregnancy" && impregnatrix.fetishKnown === 1 && impregnatrix.fetishStrength > 60 && impregnatrix.devotion >= -20) { r.push(`This is very easy, since ${impregnatrix.slaveName} has an impregnation fetish.`); if (impregnatrix.pregKnown === 1) { @@ -76,44 +78,66 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { r.push(`${He2}'s been deeply unhappy that there's no prospect of ${him2} ever being able to carry a child, and this is the <span class="hotpink">next best thing</span> for ${him2}.`); } impregnatrix.devotion += 4; - if (impregnatrix.preg === -3) { + if (!canAchieveErection(impregnatrix) && hasPenis) { r.push(`${His2} member remains limp despite the prospect of getting another slave pregnant, but a direct injection of vasodilators quickly fixes that for this special occasion.`); - } else { + } else if (hasPenis) { r.push(`${His2} member springs instantly to attention at the prospect of getting another slave pregnant.`); + } else { + r.push(`A special strap-on is fitted onto ${his2} urethra. The dildo includes a micro-pump that ensures any seed released will be sent out from the tip of the artificial member.`); } - } else if (impregnatrix.attrXX > 65 && impregnatrix.attrKnown === 1 && impregnatrix.devotion >= -20) { + } else if (impregnatrix.attrXX > 65 && impregnatrix.attrKnown === 1 && impregnatrix.devotion >= -20 && hasPenis) { r.push(`Since ${impregnatrix.slaveName} likes sticking ${his2} cock in girls, ${he2} doesn't take much convincing.`); - if (impregnatrix.preg === -3) { + if (!canAchieveErection(impregnatrix)) { r.push(`${His2} member remains limp despite the prospect of ${assPussy}, but a direct injection of vasodilators quickly fixes that for this special occasion.`); } else { r.push(`${His2} member springs instantly to attention at the prospect of pussy.`); } } else if (impregnatrix.devotion > 50) { r.push(`Since ${impregnatrix.slaveName} is devoted to you, ${he2}'ll eagerly fuck anything you tell ${him2} to fuck.`); - if (impregnatrix.preg === -3) { + if (!canAchieveErection(impregnatrix) && hasPenis) { r.push(`${He2} accepts a direct injection of vasodilators to counteract the hormones keeping ${him2} soft,`); - } else { + } else if (hasPenis) { r.push(`${He2} quickly gets ${himself2} hard,`); + } else { + r.push(`A special strap-on is fitted onto ${his2} urethra, `); } r.push(`only a certain confusion in ${his2} look betraying that ${he2} realizes how special an occasion this is.`); - } else if (impregnatrix.devotion > 20) { + if (!hasPenis) { + r.push(`The dildo includes a micro-pump that ensures any seed released will be sent out from the tip of the artificial member.`); + } + } else if (impregnatrix.devotion > 20 && hasPenis) { r.push(`Since ${impregnatrix.slaveName} is obedient, ${he2}'ll fuck anything you tell ${him2} to fuck.`); - if (impregnatrix.preg === -3) { + if (!canAchieveErection(impregnatrix) && hasPenis) { r.push(`${He2} accepts a direct injection of vasodilators to counteract the hormones keeping ${him2} soft,`); - } else { + } else if (hasPenis) { r.push(`${He2} hurriedly gets ${himself2} hard,`); + } else { + r.push(`A special strap-on is fitted onto ${his2} urethra,`); } r.push(`only a slight hesitation betraying ${his2} realization that this is a special occasion.`); - } else if (impregnatrix.devotion >= -20) { + if (!hasPenis) { + r.push(`The dildo includes a micro-pump that ensures any seed released will be sent out from the tip of the artificial member.`); + } + } else if (impregnatrix.devotion >= -20 && hasPenis) { r.push(`Since ${impregnatrix.slaveName} does not resist your will, ${he2} should comply reasonably well.`); - if (impregnatrix.preg === -3) { + if (!canAchieveErection(impregnatrix) && hasPenis) { r.push(`${He2} accepts a direct injection of vasodilators to counteract the hormones keeping ${him2} soft,`); - } else { + } else if (hasPenis) { r.push(`${He2} has to work to get ${himself2} hard despite ${his2} doubts,`); + } else { + r.push(`A special strap-on is fitted onto ${his2} urethra,`); } r.push(`fear and disgust showing on ${his2} face as ${he2} absorbs the perversion of the natural order of things ${he2}'s about to experience.`); + if (!hasPenis) { + r.push(`The dildo includes a micro-pump that ensures any seed released will be sent out from the tip of the artificial member.`); + } } else { - r.push(`Since ${impregnatrix.slaveName} is unlikely to comply willingly, you simply restrain ${him2} and administer a massive dose of vasodilators, directly where they will do the most good. ${impregnatrix.slaveName} writhes with the pain of the injection, which is compounded as ${he2} springs agonizingly erect.`); + r.push(`Since ${impregnatrix.slaveName} is unlikely to comply willingly, you simply restrain ${him2}`); + if (hasPenis) { + r.push(`and administer a massive dose of vasodilators, directly where they will do the most good. ${impregnatrix.slaveName} writhes with the pain of the injection, which is compounded as ${he2} springs agonizingly erect.`); + } else { + r.push(`and forcefully attach a special strap-on to ${his2} urethrea. ${impregnatrix.slaveName} writhes with pain as a catheter is inserted to ensure any cum will be ejected directly from the tip of the long artificial member.`); + } } r.toParagraph(); @@ -200,8 +224,10 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { r.toParagraph(); + const penetrationTool = hasPenis ? dickDesc(impregnatrix, true) : 'artificial cock'; + if (slave.devotion < -20 && impregnatrix.devotion < -20) { - r.push(`Since you have two restrained slaves, it's up to you to do all the work. You put ${slave.slaveName} on the couch with ${his} ${assPussy} available, and then maneuver ${impregnatrix.slaveName}'s dick into place. The two slaves make no further moves until you deal ${impregnatrix.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. After watching them mechanically go at it for a while, you stop ${impregnatrix.slaveName}, insert an electrostimulator up ${his2} rectum, and administer a shock to ${his2} ${prostate} that forces ${him2} to empty ${his2} nuts into ${slave.slaveName}. Both slaves <span class="mediumorchid">resent</span> what you made them do and <span class="gold">fear you</span> as a result.`); + r.push(`Since you have two restrained slaves, it's up to you to do all the work. You put ${slave.slaveName} on the couch with ${his} ${assPussy} available, and then maneuver ${impregnatrix.slaveName}'s ${penetrationTool} into place. The two slaves make no further moves until you deal ${impregnatrix.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. After watching them mechanically go at it for a while, you stop ${impregnatrix.slaveName}, insert an electrostimulator up ${his2} rectum, and administer a shock to ${his2} ${prostate} that forces ${him2} to empty ${his2} nuts into ${slave.slaveName}. Both slaves <span class="mediumorchid">resent</span> what you made them do and <span class="gold">fear you</span> as a result.`); slave.devotion -= 5; slave.trust -= 5; impregnatrix.devotion -= 5; @@ -214,7 +240,7 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { impregnatrix.anus = 1; } } else if (impregnatrix.devotion < -20) { - r.push(`Since your semen ${donatrix} is restrained, you order ${slave.slaveName} to present ${himself} on the couch, and then maneuver ${impregnatrix.slaveName}'s dick into place. ${slave.slaveName} does ${his} best to hump ${himself} against the unwilling cock until you deal ${impregnatrix.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. After watching ${him2} mechanically fuck for a while, you stop ${him2}, push an electrostimulator up ${his2} butt, and administer a shock to ${his2} ${prostate} that forces ${him2} to empty ${his2} nuts into ${slave.slaveName}. ${He} <span class="mediumorchid">resents</span> what you made ${him2} do and <span class="gold">fears you</span> as a result. Though ${slave.slaveName} accepts the situation, ${he} looks into ${impregnatrix.slaveName}'s eyes with obvious apology.`); + r.push(`Since your semen ${donatrix} is restrained, you order ${slave.slaveName} to present ${himself} on the couch, and then maneuver ${impregnatrix.slaveName}'s ${penetrationTool} into place. ${slave.slaveName} does ${his} best to hump ${himself} against the unwilling ${penetrationTool} until you deal ${impregnatrix.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. After watching ${him2} mechanically fuck for a while, you stop ${him2}, push an electrostimulator up ${his2} butt, and administer a shock to ${his2} ${prostate} that forces ${him2} to empty ${his2} nuts into ${slave.slaveName}. ${He} <span class="mediumorchid">resents</span> what you made ${him2} do and <span class="gold">fears you</span> as a result. Though ${slave.slaveName} accepts the situation, ${he} looks into ${impregnatrix.slaveName}'s eyes with obvious apology.`); impregnatrix.devotion -= 5; impregnatrix.trust -= 5; seX(impregnatrix, "anal", V.PC); @@ -225,7 +251,7 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { impregnatrix.anus = 1; } } else if (impregnatrix.fetish === "pregnancy" && impregnatrix.fetishStrength > 60 && impregnatrix.devotion > 20 && slave.devotion < -20) { - r.push(`You arrange ${slave.slaveName} on the couch with ${his} fertile pussy defenseless and available, and then tell the randy ${impregnatrix.slaveName} that it's all ${hers2}. The slave life has so affected ${impregnatrix.slaveName} that ${he2} is quite eager to rape another slave pregnant${(superfetation === 1) ? `, even more so since ${he} is already with child` : ``} to fulfill ${his2} desire to reproduce. ${He2} finishes with indecent speed and looks almost disappointed until you tell ${him2} to take ${his2} time and be thorough. By the end of the day ${slave.slaveName}'s ${assCunt} is dripping cum, to ${his} <span class="gold">horror</span> and <span class="mediumorchid">resentment,</span> while ${impregnatrix.slaveName} is lying next to ${him} on the couch in a state of obvious <span class="hotpink">satiation and bliss.</span> ${impregnatrix.slaveName} kisses ${slave.slaveName}'s ${belly} stomach and expresses the hope that ${he}'ll produce a good new slave.`); + r.push(`You arrange ${slave.slaveName} on the couch with ${his} fertile ${assPussy} defenseless and available, and then tell the randy ${impregnatrix.slaveName} that it's all ${hers2}. The slave life has so affected ${impregnatrix.slaveName} that ${he2} is quite eager to rape another slave pregnant${(superfetation === 1) ? `, even more so since ${he} is already with child` : ``} to fulfill ${his2} desire to reproduce. ${He2} finishes with indecent speed and looks almost disappointed until you tell ${him2} to take ${his2} time and be thorough. By the end of the day ${slave.slaveName}'s ${assCunt} is dripping cum, to ${his} <span class="gold">horror</span> and <span class="mediumorchid">resentment,</span> while ${impregnatrix.slaveName} is lying next to ${him} on the couch in a state of obvious <span class="hotpink">satiation and bliss.</span> ${impregnatrix.slaveName} kisses ${slave.slaveName}'s ${belly} stomach and expresses the hope that ${he}'ll produce a good new slave.`); slave.devotion -= 5; slave.trust -= 5; @@ -236,9 +262,9 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { slave.trust -= 5; impregnatrix.devotion += 4; } else if (slave.devotion <= 20 || impregnatrix.devotion <= 20) { - r.push(`You order ${slave.slaveName} onto the couch and tell ${impregnatrix.slaveName} to get on with it. They fuck mechanically, gazing with roiling emotions into each other's eyes. They do seem to come to some sort of a nonverbal understanding on the necessity of getting it done, and there is no real unhappiness in either of them when they finish and disentangle themselves, with ${impregnatrix.slaveName}'s rapidly softening dick slipping easily out of ${slave.slaveName}'s cum-filled ${assPussy}.`); + r.push(`You order ${slave.slaveName} onto the couch and tell ${impregnatrix.slaveName} to get on with it. They fuck mechanically, gazing with roiling emotions into each other's eyes. They do seem to come to some sort of a nonverbal understanding on the necessity of getting it done, and there is no real unhappiness in either of them when they finish and disentangle themselves, with ${impregnatrix.slaveName}'s ${hasPenis ? `rapidly softening dick` : `fluid covered strap-on`} slipping easily out of ${slave.slaveName}'s cum-filled ${assPussy}.`); } else if (slave.devotion <= 50 || impregnatrix.devotion <= 50) { - r.push(`You order ${slave.slaveName} and ${impregnatrix.slaveName} to get on with it. They fuck mechanically at first, gazing with roiling emotions into each other's eyes. Eventually, they begin to enjoy the extreme intimacy of the act, finding between themselves a hint of a life before slavery, when men and women had sex within the bonds of marriage for the purpose of procreation${(superfetation === 1) ? `, even though one of them is already heavy with child` : ``}. They finish and resume life as slaves, the light of this intimacy diminishing, softening with ${impregnatrix.slaveName}'s dick and dripping away with the contents of ${slave.slaveName}'s cum-filled ${assPussy}.`); + r.push(`You order ${slave.slaveName} and ${impregnatrix.slaveName} to get on with it. They fuck mechanically at first, gazing with roiling emotions into each other's eyes. Eventually, they begin to enjoy the extreme intimacy of the act, finding between themselves a hint of a life before slavery, when men and women had sex within the bonds of marriage for the purpose of procreation${(superfetation === 1) ? `, even though one of them is already heavy with child` : ``}. They finish and resume life as slaves, the light of this intimacy diminishing, ${hasPenis ? `softening with ${impregnatrix.slaveName}'s dick and ` : ``}dripping away with the contents of ${slave.slaveName}'s cum-filled ${assPussy}.`); } else if (slave.mpreg === 1) { r.push(`The parents-to-be need little encouragement. They embrace happily and turn eagerly to the business of anal sex in`); if (slave.belly + impregnatrix.belly >= 5000) { @@ -246,7 +272,7 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { } else { r.push(`the`); } - r.push(`cowgirl position. They take their time, humping slowly and gazing into each other's eyes. After a little while, though, ${slave.slaveName} looks over to where you're sitting, the invitation clear in ${his} eyes. As soon as you stand to come over, ${slave.slaveName} turns around on ${impregnatrix.slaveName}'s cock and opens wide for you. You and ${impregnatrix.slaveName} enjoy the`); + r.push(`cowgirl position. They take their time, humping slowly and gazing into each other's eyes. After a little while, though, ${slave.slaveName} looks over to where you're sitting, the invitation clear in ${his} eyes. As soon as you stand to come over, ${slave.slaveName} turns around on ${impregnatrix.slaveName}'s ${penetrationTool} and opens wide for you. You and ${impregnatrix.slaveName} enjoy the`); if (superfetation === 1) { r.push(`gravid ${girl}`); } else { @@ -340,7 +366,7 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { } else { r.push(`lube the phallus with some saliva`); } - r.push(`as ${he} continues riding cock. Once`); + r.push(`as ${he} continues riding${hasPenis ? ` cock` : ``}. Once`); if (V.PC.dick !== 0) { r.push(`stiff,`); } else { @@ -389,7 +415,7 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { } } - r.push(`Throughout the week, you keep ${slave.slaveName}'s ${assPussy} intimate with ${impregnatrix.slaveName}'s cock. In the end, you are certain ${slave.slaveName}`); + r.push(`Throughout the week, you keep ${slave.slaveName}'s ${assPussy} intimate with ${impregnatrix.slaveName}'s ${penetrationTool}. In the end, you are certain ${slave.slaveName}`); if (superfetation === 1) { r.push(`has <span class="lime">added ${impregnatrix.slaveName}'s child</span> to ${his} pregnancy.`); } else {