diff --git a/src/005-passages/interactPassages.js b/src/005-passages/interactPassages.js index ed27f32e8c1ebbd27a518a0d492b1db259a6571c..7fec5e17c7d0250a3055182fb97e3d3bc5cd48bb 100644 --- a/src/005-passages/interactPassages.js +++ b/src/005-passages/interactPassages.js @@ -419,4 +419,12 @@ new App.DomPassage("Inspect PC Fetus Tank Settings", V.nextLink = "Analyze PC Pregnancy"; return App.UI.inspectTankSettings(true, true); }, ["jump-from-safe"] +); + +new App.DomPassage("Transfer All Player Ova Select", +() => { + V.nextButton = "Cancel"; + V.nextLink = passage() + return App.UI.transferAllPlayerOvaSelect(); +} ); \ No newline at end of file diff --git a/src/player/managePersonalAffairs.js b/src/player/managePersonalAffairs.js index 2fc4c3db5f40073b3f655255914380ea0bceee30..b64cca379c48d5182a86faa051ae86299d32ccad 100644 --- a/src/player/managePersonalAffairs.js +++ b/src/player/managePersonalAffairs.js @@ -361,7 +361,7 @@ App.UI.managePersonalAffairs = function() { text.push(`You have a bun baking in the oven.`); if (arcology.FSRestart === "unset" || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { - text.push(App.UI.DOM.link(`Pop some morning after pills`, () => { + text.push(App.UI.DOM.link(`Pop some morning after pills.`, () => { WombFlush(V.PC); App.UI.DOM.replace(appearanceDiv, appearance); @@ -369,6 +369,12 @@ App.UI.managePersonalAffairs = function() { App.UI.DOM.replace(pregnancyDiv, pregnancy); })); } + if (V.pregnancyMonitoringUpgrade > 0) { + text.push(`But if you want to keep your progeny without having to give birth, you can`); + text.push(App.UI.DOM.passageLink(`transfer ${V.PC.womb.length > 1 ? "all your ova" : "your ovum"} to a slave.`, "Transfer All Player Ova Select", () => { + })); + + } } else if (PC.preg > 0) { text.push(`Your fertile ${PC.mpreg === 1 ? "ass" : ""}pussy has been thoroughly seeded; there is a chance you are pregnant.`); diff --git a/src/pregmod/surrogacy.js b/src/pregmod/surrogacy.js index 1eadac307093958748fb2645737b7ebf83fa4211..2b3d0b2c4bcf700fcff34ff64829efb4b609c9a1 100644 --- a/src/pregmod/surrogacy.js +++ b/src/pregmod/surrogacy.js @@ -245,3 +245,105 @@ App.UI.surrogacy = function() { App.Events.addParagraph(node, r); return node; }; + +/** Transfers all PC ova to a selected slave + */ +App.UI.transferAllPlayerOva = function() { + let fetus; + let receptrix = getSlave(V.receptrix.ID); + const ovaTotal = V.PC.womb.length; + let r = []; + + for (let ovusNum = 0; ovusNum < ovaTotal; ovusNum++) { + fetus = WombRemoveFetus(V.PC, ovusNum); + WombAddFetus(receptrix, fetus); + } + + WombNormalizePreg(receptrix); + WombNormalizePreg(V.PC); + cashX(forceNeg(V.surgeryCost * 2 * ovaTotal), "PCmedical"); + const { + He, + he, his, him + } = getPronouns(receptrix); + if (receptrix.fetish === Fetish.MINDBROKEN) { + r.push(`${receptrix.slaveName} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } else if ((receptrix.fetish === "pregnancy") && (receptrix.fetishStrength > 60) && (receptrix.fetishKnown === 1)) { + if (canSee(receptrix)) { + r.push(`Since the surgery required only a local anesthetic, ${receptrix.slaveName} remained fully aware throughout the procedure. ${He} was overjoyed at the sight of the syringe containing your child${ovaTotal > 1 ? "ren" : ""} emptying into ${his} womb.`); + } else { + r.push(`${receptrix.slaveName} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He} is <span class="devotion inc"> filled with joy</span> over the life resettling into ${his} womb and can't wait to see the result. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body.`); + receptrix.trust += 4; + receptrix.devotion += 10; + } else if (receptrix.devotion > 50) { + if (canSee(receptrix)) { + r.push(`Since the surgery required only a local anesthetic, ${receptrix.slaveName} remained fully aware throughout the procedure. ${He} watched the syringe containing ${his} new pregnancy empty into ${his} womb with rapt attention.`); + } else { + r.push(`${receptrix.slaveName} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He}'s <span class="devotion inc">grateful</span> that you think ${him} worthy of carrying this child in your stead, and a little nervous about how ${he}'ll perform as a surrogate.`); + receptrix.devotion += 4; + } else if (receptrix.devotion >= -20) { + if (canSee(receptrix)) { + r.push(`Since the surgery required only a local anesthetic, ${receptrix.slaveName} remained fully aware throughout the procedure. From the syringe making contact with ${his} skin, to the ${ovaTotal > 1 ? "eggs'" : "egg's"} delivery into ${his} womb and ${his} subsequent impregnation, ${he} couldn't look away.`); + } else { + r.push(`${receptrix.slaveName} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He} understands the realities of ${his} life as a slave, so it isn't much of a shock. ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and how you are forcing your pregnancy upon ${him}.`); + receptrix.trust -= 10; + } else { + if (canSee(receptrix)) { + r.push(`Since the surgery required only a local anesthetic, ${receptrix.slaveName} remained fully aware throughout the procedure. The moment ${he} realized what was happening, ${he} shut ${his} eyes tight, only opening them again as ${he} feels the slight tingle of the injector exiting ${his} lower abdomen.`); + } else { + r.push(`${receptrix.slaveName} leaves the surgery with a certain warmth in ${his} lower abdomen, ${he} knows that ${he} has been impregnated.`); + } + r.push(`${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> that you have forced ${him} to carry your child instead of doing so yourself.`); + r.push(`${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body and who else's troubles may be levied upon ${him}.`); + receptrix.trust -= 15; + receptrix.devotion -= 15; + } + + V.receptrix = 0; + + App.Events.addParagraph(node, r); + return node; +} + +/** Selecting a suitable slave for transferring all the player's womb content + */ +App.UI.transferAllPlayerOvaSelect = function() { + const node = new DocumentFragment(); + V.receptrix = 0; + let eligibility = 0; + const ovaTotal = V.PC.womb.length; + + App.UI.DOM.appendNewElement("p", node, `You've decided your fertilized ${ovaTotal > 1 ? "ova are'" : "ovum is"} to be transplanted; now you must select whose womb will be ${ovaTotal > 1 ? "their'" : "its"} new home.`, "scene-intro"); + + App.UI.DOM.appendNewElement("h2", node, "Select a slave to serve as the host"); + + for (const slave of V.slaves) { + if ((slave.ovaries > 0 || slave.mpreg > 0) && + isSlaveAvailable(slave) && slave.preg >= 0 && slave.preg < slave.pregData.normalBirth / 10 && + slave.pregWeek >= 0 && slave.pubertyXX === 1 && slave.pregType + V.PC.womb.length <= 12 && + slave.bellyImplant === -1 && slave.broodmother === 0 && slave.inflation <= 2 && slave.physicalAge < 70 + ) { + const div = App.UI.DOM.appendNewElement("div", node, App.UI.DOM.referenceSlaveWithPreview(slave, SlaveFullName(slave))); + div.append(" ", App.UI.DOM.passageLink( + "Select", "transferAllPlayerOva", + () => { + V.receptrix = slave; + } + )); + if (slave.pregType >= 4) { + App.UI.DOM.appendNewElement("span", div, `Using a slave carrying multiples is inadvisable`, ["note"]); + } + eligibility = 1; + } + } + if (eligibility === 0) { + App.UI.DOM.appendNewElement("div", node, "You have no slaves capable of acting as a surrogate."); + } + return node; +}; \ No newline at end of file