From 006afe7948cb5db5287d2f6eb6bc1a33655fd6db Mon Sep 17 00:00:00 2001 From: Pregmodder <pregmodder@gmail.com> Date: Thu, 3 Feb 2022 14:52:18 -0500 Subject: [PATCH] prPregnancy work --- CHANGELOG.md | 3 + src/endWeek/player/playerReportUtils.js | 120 ++++++ src/endWeek/player/prPregnancy.js | 534 ++++++++++++++++++++++++ src/js/utilsPC.js | 2 + src/player/desc/pLongBelly.js | 4 +- src/player/desc/pLongCrotch.js | 2 +- 6 files changed, 663 insertions(+), 2 deletions(-) create mode 100644 src/endWeek/player/playerReportUtils.js create mode 100644 src/endWeek/player/prPregnancy.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 6174b56f77c..23bd1123696 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## Unreleased +* dairy converted to DOM +* personal attention applicable to master suite slaves * Cosmetic implant surgeries reworked to be more realistic: implant size that can be fit in is dynamically computed based on asset size, players don't need to begin with the smallest size anymore if a bigger fits. Cosmetic implant surgeries now cost a lot more (beware, autosurgery is also affected!) to compensate for achieving the grow targets quickly. Autosurgery can be tuned to use only specific set of implant types and its note in the end week logs became more detailed and visually detectable. +* fixes ## 0.10.7.1-4.0.0-alpha.12 - 2022-01-06 diff --git a/src/endWeek/player/playerReportUtils.js b/src/endWeek/player/playerReportUtils.js new file mode 100644 index 00000000000..5cdf20918cf --- /dev/null +++ b/src/endWeek/player/playerReportUtils.js @@ -0,0 +1,120 @@ +App.EndWeek.Player.bustUp = function(PC, oldCupSize) { + let outcome = ""; + + if (oldCupSize >= 10000) { + // do nothing + } else if (oldCupSize >= 9000) { + if (PC.boobs >= 10000) { + + } + } else if (oldCupSize >= 8500) { + if (PC.boobs >= 9000) { + + } + } else if (oldCupSize >= 8000) { + if (PC.boobs >= 8500) { + + } + } else if (oldCupSize >= 7500) { + if (PC.boobs >= 8000) { + + } + } else if (oldCupSize >= 7000) { + if (PC.boobs >= 7500) { + + } + } else if (oldCupSize >= 6500) { + if (PC.boobs >= 7000) { + + } + } else if (oldCupSize >= 5500) { + if (PC.boobs >= 6500) { + + } + } else if (oldCupSize >= 5100) { + if (PC.boobs >= 5500) { + + } + } else if (oldCupSize >= 4700) { + if (PC.boobs >= 5100) { + + } + } else if (oldCupSize >= 4300) { + if (PC.boobs >= 4700) { + + } + } else if (oldCupSize >= 3950) { + if (PC.boobs >= 4300) { + + } + } else if (oldCupSize >= 3600) { + if (PC.boobs >= 3950) { + + } + } else if (oldCupSize >= 3250) { + if (PC.boobs >= 3600) { + + } + } else if (oldCupSize >= 2900) { + if (PC.boobs >= 3250) { + + } + } else if (oldCupSize >= 2600) { + if (PC.boobs >= 2900) { + + } + } else if (oldCupSize >= 2300) { + if (PC.boobs >= 2600) { + + } + } else if (oldCupSize >= 2050) { + if (PC.boobs >= 2300) { + + } + } else if (oldCupSize >= 1800) { + if (PC.boobs >= 2050) { + + } + } else if (oldCupSize >= 1600) { + if (PC.boobs >= 1800) { + + } + } else if (oldCupSize >= 1400) { + if (PC.boobs >= 1600) { + + } + } else if (oldCupSize >= 1200) { + if (PC.boobs >= 1400) { + outcome = `Your desk is steadily starting to disappear; <span class="change positive">H-cups will do that.</span>`; + } + } else if (oldCupSize >= 1000) { + if (PC.boobs >= 1200) { + outcome = `Nothing fits comfortably now; your tailor says <span class="change positive">it's your G-cup knockers.</span> Your back agrees.`; + } + } else if (oldCupSize >= 800) { + if (PC.boobs >= 1000) { + outcome = `You popped your bra when you put it on; <span class="change positive">time to order some F-cups.</span>`; + } + } else if (oldCupSize >= 650) { + if (PC.boobs >= 800) { + outcome = `Their prominence, and a quick measuring, reveals <span class="change positive">you now sport DDs.</span>`; + } + } else if (oldCupSize >= 500) { + if (PC.boobs >= 650) { + outcome = `They're big, sensitive, <span class="change positive">and now a D-cup.</span>`; + } + } else if (oldCupSize >= 400) { + if (PC.boobs >= 500) { + outcome = `They spill dramatically out of your bra now, which means <span class="change positive">you've graduated to a C-cup.</span>`; + } + } else if (oldCupSize >= 300) { + if (PC.boobs >= 400) { + outcome = `A quick measuring after your top started to feel too constricting reveals <span class="change positive">you are now a B-cup!</span>`; + } + } else { + if (PC.boobs >= 300) { + outcome = `They've gotten so big that <span class="change positive">you can now fill an A-cup bra.</span>`; + } + } + return outcome; +}; diff --git a/src/endWeek/player/prPregnancy.js b/src/endWeek/player/prPregnancy.js new file mode 100644 index 00000000000..89b44674acf --- /dev/null +++ b/src/endWeek/player/prPregnancy.js @@ -0,0 +1,534 @@ +App.EndWeek.Player.pregnancy = function(PC = V.PC) { + const r = []; + + const gigantomastiaMod = PC.geneticQuirks.gigantomastia === 2 ? (PC.geneticQuirks.macromastia === 2 ? 3 : 2) : 1; + const rearQuirk = PC.geneticQuirks.rearLipedema === 2 ? 2 : 0; + const uterineHypersensitivityMod = PC.geneticQuirks.uterineHypersensitivity === 2 ? 2 : 1; + const boobSize = PC.boobs - PC.boobsImplant - PC.boobsMilk; + const oldBoobs = PC.boobs; + const buttSize = PC.butt - PC.buttImplant; + const hipSize = PC.hips - PC.hipsImplant; + const child = (PC.pregType > 1 ? "children" : "child"); + + if (PC.preg > 0) { + pregnancyEffects(); + } + if (V.seePreg !== 0) { + preconception(); + pregnancySanityCheck(); + } + + return r.join(" "); + + function pregnancyEffects() { + pregnancyDiscovery(); + pregnancyLibido(); + fetalAdjustment(); + if (PC.preg >= PC.pregData.normalBirth / 4) { + pregnancyAdjustments(); + laborText(); + pregnancyPhysicalEffects(); + } + if (PC.pregType === 0) { // Catch for strange cases - now with checking. + failSafe(); + } + } + + function pregnancyDiscovery() { + // Add passive discovery to this once periods are added + if (PC.bellyFluid > 2000) { + if (PC.inflation > 1) { + r.push(`While trying to inflate yourself with ${PC.inflationType}, you discover that you can't hold more <span class="noteworthy">two liters</span> without feeling seriously ill.`); + PC.inflation = 1; + } else { + r.push(`While pleasuring yourself by inflating with ${PC.inflationType}, you're forced to stop due to a sudden bout of extreme nausea.`); + PC.bellyFluid = 2000; + } + SetBellySize(PC); + if (PC.pregKnown === 0) { + r.push(`It turns out <span class="pregnancy">you're`); + if (PC.preg > PC.pregData.normalBirth / 4) { + r.push(`pregnant and have been for some time.</span>`); + } else { + r.push(`pregnant.</span>`); + } + } else { + r.push(`Unfortunately, this will likely be the case for the duration of your pregnancy; at least you'll still steadily swell, if a little slowly for your taste.`); + } + } + } + + function pregnancyLibido() { + // .need needs to consider this + // drop .energy on birth for uterine hypersensitivity + if (PC.geneticQuirks.uterineHypersensitivity === 2 && V.geneticMappingUpgrade >= 1) { + if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You're full-term and overwhelmed with arousal. Your uterine hypersensitivity combined with a full womb and upcoming birth confers a <span class="libido inc">huge improvement to your sexual appetite.</span>`); + PC.energy += 7; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`Being hugely pregnant with uterine hypersensitivity confers an <span class="libido inc">improvement to your sexual appetite</span> as your womb steadily stretches.`); + PC.energy += 5; + } else if (PC.preg > PC.pregData.normalBirth / 2) { + r.push(`Being pregnant with uterine hypersensitivity confers a <span class="libido inc">slow improvement to your sexual appetite</span> as your womb grows ever fuller.`); + PC.energy += 3; + } else if (PC.preg > PC.pregData.normalBirth / 4) { + r.push(`You eagerly anticipate the growth of your pregnancy, producing <span class="libido inc">a very slow improvement to your sexual appetite.</span>`); + PC.energy += 1; + } else if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + if (PC.counter.birthsTotal > 0) { + r.push(`The rigors of early pregnancy are easily tolerable when you can only quiver in anticipation of what's to come.`); + } else { + r.push(`The rigors of early pregnancy <span class="libido dec">slightly reduce your sexual appetite.</span>`); + PC.energy -= 1; + } + } + } else if (PC.geneticQuirks.uterineHypersensitivity === 2) { + if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You're full-term and overwhelmed with arousal. The sensation of your womb stretched so full ${PC.counter.birthsTotal > 0 ? "and the anticipation of another orgasmic birth " : ""}<span class="libido inc">sends your sexual appetite skyrocketing.</span>`); + PC.energy += 7; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`The feeling of your womb steadily expanding drives you wild, <span class="libido inc">improving your sexual appetite.</span>`); + PC.energy += 5; + } else if (PC.preg > PC.pregData.normalBirth / 2) { + r.push(`The life growing in your womb leaves you feeling especially energetic, granting a <span class="libido inc">slow improvement to your sexual appetite.</span>`); + PC.energy += 3; + } else if (PC.preg > PC.pregData.normalBirth / 4) { + r.push(`You feel a rush from your growing pregnancy, granting a <span class="libido inc">very slow improvement to your sexual appetite.</span>`); + PC.energy += 1; + } else if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + if (PC.counter.birthsTotal > 0) { + r.push(`The rigors of early pregnancy are easily tolerable when you can only quiver in anticipation of what's to come.`); + } else { + r.push(`The rigors of early pregnancy <span class="libido dec">slightly reduce your sexual appetite.</span>`); + PC.energy -= 1; + } + } + } else if (PC.pregMood === 2) { + if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + r.push(`The rigors of early pregnancy <span class="libido dec">take their toll on your sexual appetite.</span>`); + PC.energy -= 3; + } else if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You are full-term and <span class="libido inc">horny as hell.</span> Your hormones are out of control, driving you to fuck like a beast in heat despite your condition.`); + PC.energy += 4; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`With your pregnancy hormones raging, you <span class="libido inc">find your thoughts focusing on sex</span> more than usual.`); + PC.energy += 2; + } else if (PC.preg > PC.pregData.normalBirth / 2) { + r.push(`As your pregnancy grows, so does your desire for sex.`); + } + // } else if (PC.pregMood === 4) { unattractive + } else if (PC.energy >= 90) { + if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + r.push(`The rigors of early pregnancy <span class="libido dec">take their toll on your sexual appetite.</span>`); + PC.energy -= 3; + } else if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You are full-term and <span class="libido inc">horny as hell.</span> Between your hormones and already high libido, you're acting like you haven't had a good fuck in nine months.`); + PC.energy += 2; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`Your advanced pregnancy, combined with your already high libido, leaves you aching to be filled throughout the day.`); + } else if (PC.preg > PC.pregData.normalBirth / 2) { + r.push(`Your growing pregnancy, combined with your already high libido, has you always itching for some sex.`); + } + // } else if (PC.pregMood === 3) { frigid + // } else if (PC.pregMood === 5) { hotnhorny + } else if (PC.energy > 60) { + if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + r.push(`The rigors of early pregnancy <span class="libido dec">take their toll on your sexual appetite.</span>`); + PC.energy -= 3; + } else if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You are full-term and suffering from an <span class="libido inc">unquenchable need to be filled.</span>`); + PC.energy += 4; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`Your advanced pregnancy comes with a hugely increased libido, <span class="libido inc">greatly increasing your sexual drive.</span>`); + PC.energy += 3; + } else if (PC.preg > PC.pregData.normalBirth / 2) { + r.push(`Your growing pregnancy comes with an increased libido, <span class="libido inc">spurring your sexual appetite.</span>`); + PC.energy += 2; + } + } else if (PC.energy > 40) { + if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + r.push(`The rigors of early pregnancy <span class="libido dec">slightly reduce your sexual appetite.</span>`); + PC.energy -= 1; + } else if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You are full-term and <span class="libido inc">feeling rather frisky.</span>`); + PC.energy += 2; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`As your pregnancy grows, so does that<span class="libido inc">tingling feeling</span> in your crotch.`); + PC.energy += 1; + } + } else { + if (PC.preg <= PC.pregData.normalBirth / 4 && PC.preg > PC.pregData.normalBirth / 13.33) { + r.push(`The rigors of early pregnancy <span class="libido dec">take their toll on your sexual appetite.</span>`); + PC.energy -= 3; + } else if (PC.preg >= PC.pregData.normalBirth) { + r.push(`You are full-term and feeling way too full for sex, <span class="libido dec">greatly suppressing your sexual appetite.</span>`); + PC.energy -= 3; + } else if (PC.preg > PC.pregData.normalBirth / 1.33) { + r.push(`Your advanced pregnancy <span class="libido dec">greatly hinders your sexual appetite.</span>`); + PC.energy -= 2; + } else if (PC.preg > PC.pregData.normalBirth / 2) { + r.push(`Your growing pregnancy <span class="libido dec">suppresses your sexual appetite slightly.</span>`); + PC.energy -= 1; + } + } + } + + function fetalAdjustment() { + const oldCount = PC.pregType; + if (PC.preg <= 2 && PC.broodmother === 0) { + fetalSplit(PC, 1000); + WombCleanYYFetuses(PC); + } + if (V.pregnancyMonitoringUpgrade === 1 && PC.pregKnown) { + if (oldCount < PC.pregType) { + r.push(`While exploring your new pregnancy with the monitoring tools, you get quite the surprise; <span class="pregnancy">you are more pregnant than previously thought!</span>`); + } else if (oldCount > PC.pregType) { + r.push(`While exploring your new pregnancy with the monitoring tools, you make an unfortunate discovery; <span class="change negative">some of your fertilized ova have not made it.</span>`); + if (PC.pregType === 0) { + r.push(`Since there are now none present in your womb, <span class="noteworthy">you are technically no longer pregnant.</span>`); + TerminatePregnancy(PC); + } + } + } else if (oldCount > PC.pregType && PC.pregType === 0) { + TerminatePregnancy(PC); + } + } + + function pregnancyAdjustments() { + if (PC.geneticQuirks.gigantomastia === 3 && random(1, 200) < PC.hormoneBalance) { + PC.geneticQuirks.gigantomastia = 2; + } + if (PC.geneticQuirks.macromastia === 3 && random(1, 200) < PC.hormoneBalance) { + PC.geneticQuirks.macromastia = 2; + } + if (PC.geneticQuirks.galactorrhea === 2 && random(1, 100) < PC.hormoneBalance && PC.lactation === 0) { + PC.inappropriateLactation = 1; + } + // MOVE THIS + /* + if (PC.preg > PC.pregData.normalBirth / 2) { + if (PC.belly >= 300000) { + PC.need *= 0.5; + } else if (PC.belly >= 120000) { + PC.need *= 0.7; + } else if (PC.belly >= 60000) { + PC.need *= 0.9; + } else { + PC.need *= 1.5; + } + } + */ + } + + function laborText() { + const childIs = (PC.pregType > 1 ? "children are" : "child is"); + if (isInduced(PC)) { + r.push(`Your child${PC.pregType > 1 ? "ren stir" : "stirs"} restlessly as ${PC.pregType > 1 ? "they prepare" : "it prepares"} to enter the world. You experience several`); + if (PC.geneticQuirks.uterineHypersensitivity === 2) { + r.push(`${PC.counter.birthsTotal > 0 ? "overwhelmingly" : "unexpectedly"} orgasmic`); + } + r.push(`contractions, so it's best to stay put until it's time.`); + } else if (PC.pregControl === "labor suppressors") { + r.push(`Your ${childIs} far calmer that one would expect for their stage of development; it is unlikely you will give birth soon, despite being overdue.`); + } else { + if (PC.preg > PC.pregData.normalBirth + 1) { + r.push(`You are constantly beset by your squirming`); + if (PC.geneticQuirks.uterineHypersensitivity === 2) { + r.push(`${child} and uncontrollable orgasms.`); + } else { + r.push(`${child}.`); + } + r.push(`They're overdue, so your water could break at any moment, but for now they aren't quite ready to leave their home.`); + } else if (PC.preg > PC.pregData.normalBirth - 1 && PC.preg > PC.pregData.minLiveBirth) { + r.push(`You are constantly beset by your squirming`); + if (PC.geneticQuirks.uterineHypersensitivity === 2) { + r.push(`${child} and uncontrollable orgasms.`); + } else { + r.push(`${child}.`); + } + r.push(`Given their liveliness, and how far along you are, it is likely that you will go into labor at any time now.`); + } else if (PC.preg > PC.pregData.normalBirth - 2 && PC.preg > PC.pregData.minLiveBirth) { + r.push(`You often have to pause and soothe your kicking`); + if (PC.geneticQuirks.uterineHypersensitivity === 2) { + r.push(`${child}, to spontaneously orgasm,`); + } else { + r.push(`${child}`); + } + r.push(`or to catch your breath. With how far along you are, it's possible you may go into labor any day now.`); + } else if (PC.preg > PC.pregData.normalBirth - 3 && PC.preg > PC.pregData.minLiveBirth) { + r.push(`You often have to pause to soothe your kicking`); + if (PC.geneticQuirks.uterineHypersensitivity === 2) { + r.push(`${child} or to spontaneously orgasm.`); + } else { + r.push(`${child}.`); + } + r.push(`You are far enough along that you could enter labor early.`); + } + } + } + + function pregnancyPhysicalEffects() { + let boobTarget; + if (PC.geneMods.NCS === 1) { + // NCS: always working against secondary sexual characteristics even in pregnancies. + boobTarget = 0; + } else if (PC.geneticQuirks.androgyny === 2) { + boobTarget = 400; + } else if (PC.physicalAge >= 18) { + if (PC.pregType >= 50) { + boobTarget = 10000; + } else if (PC.pregType >= 30) { + boobTarget = 5000; + } else if (PC.pregType >= 10) { + boobTarget = 2000; + } else if (PC.pregType >= 2) { + boobTarget = 1000; + } else { + boobTarget = 800; + } + } else if (PC.physicalAge >= 13) { + if (PC.pregType >= 50) { + boobTarget = 5000; + } else if (PC.pregType >= 30) { + boobTarget = 3200; + } else if (PC.pregType >= 10) { + boobTarget = 1800; + } else if (PC.pregType >= 2) { + boobTarget = 1000; + } else { + boobTarget = 700; + } + } else if (PC.physicalAge >= 8) { + if (PC.pregType >= 50) { + boobTarget = 1800; + } else if (PC.pregType >= 30) { + boobTarget = 1400; + } else if (PC.pregType >= 10) { + boobTarget = 1000; + } else if (PC.pregType >= 2) { + boobTarget = 800; + } else { + boobTarget = 600; + } + } else { + if (PC.pregType >= 50) { + boobTarget = 1000; + } else if (PC.pregType >= 30) { + boobTarget = 800; + } else if (PC.pregType >= 10) { + boobTarget = 600; + } else { + boobTarget = 400; + } + } + boobTarget *= gigantomastiaMod; + if (PC.geneMods.NCS === 0) { + if (PC.pregType >= 30) { + if (PC.weight <= 65) { + r.push(`With the amount of food you eat to sustain your brood, <span class="change positive">you put on a little baby weight.</span>`); + PC.weight += 1; + } + if (random(1, 100) > 60) { + if (boobSize < boobTarget) { + boobsUpText(100); + if (PC.boobShape !== "saggy" && PC.preg > PC.pregData.normalBirth / 1.25 && (PC.boobsImplant / PC.boobs < 0.5) && PC.breastMesh !== 1 && PC.drugs !== "sag-B-gone") { + r.push(`Your immensely engorged <span class="change negative">mammaries begin to sag</span> as your body continues its motherly transformation in anticipation of breastfeeding.`); + PC.boobShape = "saggy"; + } + } + if (PC.geneticQuirks.androgyny !== 2) { + if (hipSize < 2) { + r.push(`Your hips <span class="change positive">widen</span> in preparation for the upcoming births.`); + PC.hips += 1; + } + if (buttSize < 14 + (rearQuirk * 3)) { + r.push(`Your butt <span class="change positive">swells with added fat</span> from your ripening body.`); + PC.butt += 1; + } + } + } + } else if (PC.pregType >= 10) { + if (random(1, 100) > 80 && boobSize < boobTarget) { + boobsUpText(50); + if (PC.boobShape !== "saggy" && (PC.boobsImplant / PC.boobs < 0.5) && PC.breastMesh !== 1 && PC.drugs !== "sag-B-gone") { + if (PC.preg > random(PC.pregData.normalBirth / 1.25, PC.pregData.normalBirth * 2.05)) { + r.push(`Your swollen <span class="change negative">mammaries begin to sag</span> as your body continues its motherly transformation in anticipation of breastfeeding.`); + PC.boobShape = "saggy"; + } + } + } + } else if (boobSize < boobTarget) { + if (random(1, 100) > 80) { + boobsUpText(25); + if (PC.boobShape !== "saggy" && PC.preg > random(PC.pregData.normalBirth / 1.25, PC.pregData.normalBirth * 2.5) && (PC.boobsImplant / PC.boobs < 0.5) && PC.breastMesh !== 1 && PC.drugs !== "sag-B-gone") { + r.push(`Your <span class="change negative">mammaries begin to sag</span> as your body continues its motherly transformation in anticipation of breastfeeding.`); + PC.boobShape = "saggy"; + } + } + } + if (PC.preg > PC.pregData.normalBirth / 1.25 && PC.physicalAge >= 18 && PC.hips === 1 && PC.hipsImplant === 0 && random(1, 100) > 90 / uterineHypersensitivityMod) { + r.push(`Your hips <span class="change positive">widen</span> to better support your gravidity.`); + PC.hips += 1; + } else if (PC.preg > PC.pregData.normalBirth / 1.42 && PC.physicalAge >= 16 && PC.hips === 0 && PC.hipsImplant === 0 && random(1, 100) > 70 / uterineHypersensitivityMod) { + r.push(`Your hips <span class="change positive">widen</span> to better support your gravidity.`); + PC.hips += 1; + } + if (PC.preg > PC.pregData.normalBirth / 1.42 && PC.physicalAge >= 12 && buttSize < (4 + (rearQuirk * 3)) && PC.weight >= -30 && random(1, 100) > 70) { + r.push(`Your butt <span class="change positive">gets a little bigger</span> as your body ripens.`); + PC.butt += 1; + } + } + if (PC.preg === PC.pregData.normalBirth / 2.66) { // change me when nipple color gets hardset + if (PC.pregKnown === 0) { + r.push(`Your areolae have gotten dark. Some cursory tests reveal <span class="pregnant">you are about fifteen weeks pregnant.</span> How did that manage to slip past you?`); + PC.pregKnown = 1; + } else { + r.push(`Your areolae have gotten dark. Just another step along your pregnancy.`); + } + } else if (PC.bellyPreg >= 1500) { + if (PC.preg > PC.pregData.normalBirth / 2 && PC.lactation === 0) { + if (PC.preg > random(PC.pregData.normalBirth / 2.22, PC.pregData.normalBirth / 1.33) && PC.health.condition >= -20 && PC.weight > -30) { + r.push(`A moist sensation on your breasts draws your attention; <span class="lime">your milk has come in.</span>`); + PC.lactation = 1; + } + } + if (PC.lactation === 1) { // If natural lactation, constantly refresh it. + PC.lactationDuration = 2; + } + } + } + + function boobsUpText(bustUp) { + if (PC.boobs >= 90000) { + r.push(`It's nearly impossible to tell if your inhuman breasts have gotten larger from your pregnancy, but your nipples sitting <span class="lime">further out of reach than ever</span> sure confirms they are.`); + } else if (PC.boobs >= 25000) { + r.push(`It's nearly impossible to tell if your obscene breasts are getting larger from your pregnancy, but as your nipples <span class="lime">slowly become harder to reach, you can't deny their growth.</span>`); + } else if (PC.boobs >= 15000) { + r.push(`It may be difficult to gauge growth in breasts as enormous as yours, but your back can sure feel <span class="lime">the extra weight on your chest</span> caused by your pregnancy.`); + } else if (PC.boobs >= 7500) { + r.push(`It may be difficult to gauge growth in breasts as large as yours, but you can still feel <span class="lime">the extra weight on your chest</span> caused by your pregnancy.`); + } else if (PC.boobs >= 3950) { + r.push(`Like the cow you are, your udders <span class="lime">have gotten even larger</span> with your pregnancy.`); + } else if (PC.boobs >= 1400) { + r.push(`Unsurprisingly, your cow tits <span class="lime">have swollen even larger</span> with your pregnancy.`); + } else if (PC.boobs >= 1200) { + r.push(`Your already huge breasts have <span class="lime">grown even heavier</span> with your pregnancy.`); + } else if (PC.boobs >= 1000) { + r.push(`Your already large breasts have <span class="lime">grown even larger</span> with your pregnancy.`); + } else if (PC.boobs >= 800) { + r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${child}.`); + } else if (PC.boobs >= 650) { + r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${child}.`); + } else if (PC.boobs >= 500) { + r.push(`Your breasts have <span class="lime">grown a bit larger</span> to feed your coming ${child}.`); + } else if (PC.boobs >= 400) { + r.push(`Your breasts have <span class="lime">gotten heavier</span> alongside your pregnancy.`); + } else if (PC.boobs >= 300) { + r.push(`Your breasts have <span class="lime">swollen</span> alongside your pregnancy.`); + } else { + r.push(`Your chest <span class="lime">has filled out slightly</span> with your pregnancy.`); + } + PC.boobs += bustUp; + r.push(App.EndWeek.Player.bustUp(PC, oldBoobs)); + } + + function failSafe() { + PC.pregType = setPregType(PC); + WombImpregnate(PC, PC.pregType, PC.pregSource, PC.preg); + } + + function preconception() { + if (isFertile(PC)) { // && PC.pregMood === 5 + needToBreed(); + } + if (canGetPregnant(PC)) { + impregnation(); + } + if (PC.ovaImplant === "asexual" && isFertile(PC) && (PC.preg === 0 || (PC.preg >= 0 && PC.geneticQuirks.superfetation === 2))) { + autoImpregnation(); + } + } + + function needToBreed() { + // Empty for now. Will be used for "breeder" .pregMood. + } + + function impregnation() { + if (PC.vagina === 0 || (PC.anus === 0 && PC.mpreg > 0)) { + // You aren't putting out. + } else if (random(1, 100) > (70 - (V.reproductionFormula * 10))) { + /** @type {Map<FC.Assignment, number>} */ + const assignmentWeight = new Map([ + [Job.CONCUBINE, 7], + [Job.MASTERSUITE, 4], + [Job.FUCKTOY, 3], + [Job.HOUSE, 1], + [Job.QUARTER, 1], + [Job.MILKED, 1], + [Job.BODYGUARD, 1], + [Job.HEADGIRL, 1], + [Job.RECRUITER, 1], + [Job.MATRON, 1], + [Job.NURSERY, 1], + [Job.ATTENDANT, 1], + [Job.STEWARD, 1], + [Job.TEACHER, 1] + ]); + const undesirableRace = (s) => (V.arcologies[0].FSSupremacist !== "unset" && (s.race !== V.arcologies[0].FSSupremacistRace)) || + (V.arcologies[0].FSSubjugationist !== "unset" && (s.race === V.arcologies[0].FSSubjugationistRace)); + const raceIsAcceptable = (s) => !undesirableRace(s) || + (s.relationship === -3) || + [Job.CONCUBINE, Job.MASTERSUITE, Job.FUCKTOY].includes(s.assignment); + const score = (/** @type {App.Entity.SlaveState} */s) => { + let weight = (assignmentWeight.get(s.assignment) || 0); + if (s.relationship === -3 && isSlaveAvailable(s)) { // assumes player will seek relations with slavewife if available + weight += 3; + } + if (onBedRest(PC) && weight < 3) { + weight = 0; + } + return weight; + }; + + let dadHash; + if (V.policies.sexualOpenness === 1) { + dadHash = V.slaves.filter(s => canImpreg(V.PC, s) && canAchieveErection(s) && s.devotion > 20 && raceIsAcceptable); + } else { + dadHash = V.slaves.filter(s => canImpreg(V.PC, s) && s.toyHole === "dick"); + } + dadHash.reduce((acc, cur) => Object.assign(acc, {[cur.ID]: score(cur)}), {}); + const chosenDadID = hashChoice(dadHash); + if (chosenDadID) { + knockMeUp(PC, 100, 2, chosenDadID); + } + } + } + + function autoImpregnation() { + knockMeUp(PC, 100, 2, PC.ID); + if (PC.geneticQuirks.superfetation === 2 && PC.pregKnown === 1) { + if (V.geneticMappingUpgrade === 0 && PC.counter.birthsTotal === 0) { + r.push(`You are wracked with frequent spontaneous orgasms from your asexual reproduction modifications despite already being pregnant.`); + } else { + r.push(`Your asexual reproduction modifications don't care that you've already got a bun in the oven, a fact made clear as they force you into adding <span class="pregnant">yet another child into your increasingly crowded womb.</span> At this rate, you will spend the rest of your fertile years as a constantly pregnant broodmother.`); + } + } else { + r.push(`Your asexual reproduction modifications leaves you writhing in constant orgasm for a short time. You are only released once you've <span class="pregnant">thoroughly impregnated yourself.</span>`); + PC.pregKnown = 1; + } + } + + function pregnancySanityCheck() { // PREGNANCY TYPE SANITY CHECK (not for pregnancies started above) + if (PC.preg <= 0) { + if (PC.pregType !== 0) { + WombFlush(PC); + } + } else if (PC.preg > 0 && PC.pregType === 0) { + PC.pregType = setPregType(PC); + WombImpregnate(PC, PC.pregType, PC.pregSource, 1); + } + if (PC.readyOva !== 0) { + PC.readyOva = 0; + } + } +}; diff --git a/src/js/utilsPC.js b/src/js/utilsPC.js index 260cad20086..1af0275030c 100644 --- a/src/js/utilsPC.js +++ b/src/js/utilsPC.js @@ -637,6 +637,8 @@ globalThis.onBedRest = function(actor) { return true; } else if (actor.bellyPreg >= actor.pregAdaptation * 2200) { return true; + } else if (isInduced(actor)) { + return true; } return false; }; diff --git a/src/player/desc/pLongBelly.js b/src/player/desc/pLongBelly.js index f4d87cc4b61..23c5903fd5a 100644 --- a/src/player/desc/pLongBelly.js +++ b/src/player/desc/pLongBelly.js @@ -1554,7 +1554,9 @@ App.Desc.Player.belly = function(PC = V.PC) { r.push(`You pat your middle as it starts to growl; your appetite is proportionate to your waistline these days.`); } } - if ((PC.dick > 0 || PC.genes === "XY") && PC.prostate > 0 && PC.preg > 0 && PC.preg > PC.pregData.normalBirth * .75) { // Do this here for dicks and males, otherwise do it in the special vagina description + if (PC.geneticQuirks.uterineHypersensitivity === 2) { + // fill me out + } else if ((PC.dick > 0 || PC.genes === "XY") && PC.prostate > 0 && PC.preg > 0 && PC.preg > PC.pregData.normalBirth * .75) { // Do this here for dicks and males, otherwise do it in the special vagina description r.push(`Not only is your bladder under constant pressure from your advanced pregnancy, but your prostate is too. Between that and your baby's movements, you find it difficult to not be in a state of constant arousal.`); } if (onBedRest(PC)) { diff --git a/src/player/desc/pLongCrotch.js b/src/player/desc/pLongCrotch.js index 0449d0f4a9c..a57bed0ede7 100644 --- a/src/player/desc/pLongCrotch.js +++ b/src/player/desc/pLongCrotch.js @@ -3,7 +3,7 @@ App.Desc.Player.crotch = function(PC = V.PC) { const {girlP} = getPronouns(PC).appendSuffix('P'); const legs = hasBothLegs(PC) ? "legs" : "leg"; const hands = hasBothArms(PC) ? "hands" : "hand"; - const isAroused = ((PC.prostate > 0 && PC.preg > 0 && PC.preg > PC.pregData.normalBirth * .75) || (PC.preg > 0 && PC.preg > PC.pregData.normalBirth * .66 && PC.pregMood === 2) || (PC.need > 0) || (PC.energy > 95) || (PC.aphrodisiacs > 0) || (PC.inflationType === "aphrodisiac") || (PC.drugs === "priapism agents")); + const isAroused = ((PC.prostate > 0 && PC.preg > 0 && PC.preg > PC.pregData.normalBirth * .75) || (PC.preg > 0 && PC.preg > PC.pregData.normalBirth * .66 && PC.pregMood === 2) || (PC.preg > 0 && PC.geneticQuirks.uterineHypersensitivity === 2 && PC.bellyPreg >= 10000) || (PC.need > 0) || (PC.energy > 95) || (PC.aphrodisiacs > 0) || (PC.inflationType === "aphrodisiac") || (PC.drugs === "priapism agents")); const isVirile = (PC.balls > 0 && PC.pubertyXY === 1 && PC.vasectomy === 0 && PC.ballType !== "sterile"); const cumTotal = (cumAmount(PC) / 70) || 0; const foreskinRatio = (PC.foreskin - PC.dick); -- GitLab