diff --git a/src/interaction/siPhysicalRegimen.js b/src/interaction/siPhysicalRegimen.js new file mode 100644 index 0000000000000000000000000000000000000000..6c0e86dfbe2ab78fe3b185c864269a21ae76efc1 --- /dev/null +++ b/src/interaction/siPhysicalRegimen.js @@ -0,0 +1,1081 @@ +/** + * @param {App.Entity.SlaveState} slave + */ +App.UI.SlaveInteract.drugs = function(slave) { + let el = document.createElement('div'); + + const drugLevelOptions = []; + const lips = []; + const breasts = []; + const nipples = []; + const butt = []; + const dick = []; + const balls = []; + const fertility = []; + const hormones = []; + const psych = []; + const misc = []; + + if (slave.drugs !== "no drugs") { + drugLevelOptions.push({text: `None`, updateSlave: {drugs: `no drugs`}}); + } + if (slave.indentureRestrictions < 2) { + // Psych + if (slave.intelligence > -100 && slave.indentureRestrictions < 1) { + psych.push({text: `Psychosuppressants`, updateSlave: {drugs: `psychosuppressants`}}); + } else if (slave.intelligence > -100) { + psych.push({text: `Psychosuppressants`, disabled: `Cannot suppress indentured slave`}); + } else if (slave.indentureRestrictions < 1) { + psych.push({text: `Psychosuppressants`, disabled: `Too stupid to suppress`}); + } else { + psych.push({text: `Psychosuppressants`, disabled: `Too stupid and indentured to suppress`}); + } + if (V.arcologies[0].FSSlaveProfessionalismResearch === 1) { + if (canImproveIntelligence(slave)) { + psych.push({text: `Psychostimulants`, updateSlave: {drugs: `psychostimulants`}}); + } else { + psych.push({text: `Psychostimulants`, disabled: `Cannot improve intelligence`}); + } + } + + // Breasts + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if ((slave.boobs - slave.boobsImplant - slave.boobsMilk) > 100) { + breasts.push({text: `Reducers`, updateSlave: {drugs: `breast redistributors`}}); + } else { + breasts.push({text: `Reducers`, disabled: `Boobs are too small`}); + } + } + if (slave.boobs < 50000) { + breasts.push({text: `Enhancement`, updateSlave: {drugs: `breast injections`}}); + breasts.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive breast injections`}}); + } else { + breasts.push({text: `Enhancement`, disabled: `Boobs are too large`}); + } + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 50000) { + breasts.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper breast injections`}}); + } else { + breasts.push({text: `Hyper enhancement`, disabled: `Boobs are too large`}); + } + } + + // Nipples + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.nipples === "huge" || slave.nipples === "puffy" || slave.nipples === "cute") { + nipples.push({text: `Reducers`, updateSlave: {drugs: `nipple atrophiers`}}); + } else { + nipples.push({text: `Reducers`, disabled: `Nipples are ${slave.nipples}`}); + } + } + if (V.dispensary) { + if (["inverted", "partially inverted", "cute", "tiny", "puffy"].includes(slave.nipples)) { + nipples.push({text: `Enhancement`, updateSlave: {drugs: `nipple enhancers`}}); + } else if (slave.nipples === "huge") { + nipples.push({text: `Enhancement`, disabled: `Nipples are already huge`}); + } else { + nipples.push({text: `Enhancement`, disabled: `Has no effect on ${slave.nipples} nipples`}); + } + } + + // Butt + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.butt - slave.buttImplant > 0) { + butt.push({text: `Reducers`, updateSlave: {drugs: `butt redistributors`}}); + } else { + butt.push({text: `Reducers`, disabled: `Butt is too small`}); + } + } + if (slave.butt < 9) { + butt.push({text: `Enhancement`, updateSlave: {drugs: `butt injections`}}); + butt.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive butt injections`}}); + } else { + butt.push({text: `Enhancement`, disabled: `Butt is too large`}); + } + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.butt < 20) { + butt.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper butt injections`}}); + } else { + butt.push({text: `Hyper enhancement`, disabled: `Butt is too large`}); + } + } + + // Lips + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.lips - slave.lipsImplant > 0) { + lips.push({text: `Reducers`, updateSlave: {drugs: `lip atrophiers`}}); + } else { + lips.push({text: `Reducers`, disabled: `Lips are too small`}); + } + } + if (slave.lips <= 95 || (slave.lips <= 85 && V.seeExtreme !== 1)) { + lips.push({text: `Enhancement`, updateSlave: {drugs: `lip injections`}}); + } else { + lips.push({text: `Enhancement`, disabled: `Lips are too large`}); + } + + // Fertility + fertility.push({text: `Fertility`, updateSlave: {drugs: `fertility drugs`}}); + if (V.seeHyperPreg === 1 && slave.indentureRestrictions < 1 && V.superFertilityDrugs === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + fertility.push({text: `Fertility+`, updateSlave: {drugs: `super fertility drugs`}}); + } + + // Dick/clit + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.dick > 1) { + dick.push({text: `Reducers`, updateSlave: {drugs: `penis atrophiers`}}); + } else if (slave.dick === 1) { + dick.push({text: `Reducers`, disabled: `Dick is already at minimum size`}); + } + if (slave.clit > 0) { + dick.push({text: `Reducers`, updateSlave: {drugs: `clitoris atrophiers`}}); + } + } + if (slave.dick > 0) { + if (slave.dick < 10) { + dick.push({text: `Enhancement`, updateSlave: {drugs: `penis enhancement`}}); + dick.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive penis enhancement`}}); + } else { + dick.push({text: `Enhancement`, disabled: `Dick is too large`}); + } + } else { + if (slave.clit < 5) { + dick.push({text: `Enhancement`, updateSlave: {drugs: `penis enhancement`}}); + dick.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive penis enhancement`}}); + } else { + dick.push({text: `Enhancement`, disabled: `Clit is too large`}); + } + } + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.dick > 0) { + if (slave.dick < 31) { + dick.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper penis enhancement`}}); + } else { + dick.push({text: `Hyper enhancement`, disabled: `Dick is too large`}); + } + } else { + if (slave.clit < 5) { + dick.push({text: `Hyper enhancement`, updateSlave: {drugs: `penis enhancement`}}); + } else { + dick.push({text: `Hyper enhancement`, disabled: `Clit is too large`}); + } + } + } + if (slave.dick > 0 && slave.dick < 11 && !canAchieveErection(slave) && slave.chastityPenis !== 1) { + dick.push({text: `Erectile dysfunction circumvention`, updateSlave: {drugs: `priapism agents`}}); + } + + // Balls + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.balls > 1) { + balls.push({text: `Reducers`, updateSlave: {drugs: `testicle atrophiers`}}); + } else if (slave.balls === 1) { + balls.push({text: `Reducers`, disabled: `Balls are already at minimum size`}); + } + } + if (slave.balls > 0) { + balls.push({text: `Enhancement`, updateSlave: {drugs: `testicle enhancement`}}); + balls.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive testicle enhancement`}}); + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + balls.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper testicle enhancement`}}); + } + } + + // Hormones + if (V.precociousPuberty === 1 && V.pubertyHormones === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if ((slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX === 0) { + hormones.push({text: `Female injections`, updateSlave: {drugs: `female hormone injections`}}); + } + if (slave.balls > 0 && slave.pubertyXY === 0) { + hormones.push({text: `Male injections`, updateSlave: {drugs: `male hormone injections`}}); + } + } + hormones.push({text: `Blockers`, updateSlave: {drugs: `hormone blockers`}}); + hormones.push({text: `Enhancement`, updateSlave: {drugs: `hormone enhancers`}}); + + // Misc + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.labia > 0) { + misc.push({text: `Labia reducers`, updateSlave: {drugs: `labia atrophiers`}}); + } + } + if (V.growthStim === 1) { + if (canImproveHeight(slave)) { + misc.push({text: `Growth Stimulants`, updateSlave: {drugs: `growth stimulants`}}); + } else { + misc.push({text: `Growth Stimulants`, disabled: `Cannot increase height further`}); + } + } + if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { + if (slave.weight > -95) { + misc.push({text: `Weight loss pills`, updateSlave: {drugs: `appetite suppressors`}}); + } else { + misc.push({text: `Weight loss pills`, disabled: `Slave is already at low weight`}); + } + } + misc.push({text: `Steroids`, updateSlave: {drugs: `steroids`}}); + if (slave.boobs > 250 && slave.boobShape !== "saggy" && V.purchasedSagBGone === 1) { + misc.push({text: `Sag-B-Gone breast lifting cream`, updateSlave: {drugs: `sag-B-gone`}}); + } + if (V.arcologies[0].FSYouthPreferentialistResearch === 1) { + if (slave.visualAge > 18) { + misc.push({text: `Anti-aging cream`, updateSlave: {drugs: `anti-aging cream`}}); + } else { + misc.push({text: `Anti-aging cream`, disabled: `Slave already looks young enough`}); + } + } + } + + let title = document.createElement('div'); + title.textContent = `Drugs: `; + let chosenDrug = document.createElement('span'); + chosenDrug.textContent = `${capFirstChar(slave.drugs)}. `; + chosenDrug.style.fontWeight = "bold"; + title.append(chosenDrug); + title.appendChild(App.UI.SlaveInteract.generateRows(drugLevelOptions, slave)); + el.append(title); + + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Lips", lips, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Breasts", breasts, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Nipples", nipples, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Butt", butt, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, slave.dick > 0 ? "Dick" : "Clit", dick, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Balls", balls, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Fertility", fertility, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Hormones", hormones, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Psych", psych, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Misc", misc, slave); + + return jQuery('#drugs').empty().append(el); +}; + +App.UI.SlaveInteract.curatives = function(slave) { + const curativeOptions = []; + + curativeOptions.push({text: `None`, updateSlave: {curatives: 0}}); + curativeOptions.push({text: `Preventatives`, updateSlave: {curatives: 1}}); + curativeOptions.push({text: `Curatives`, updateSlave: {curatives: 2}}); + + let el = document.createElement('div'); + let title = document.createElement('div'); + title.append(`Health: `); + let chosenOption = document.createElement('span'); + chosenOption.style.fontWeight = "bold"; + if (slave.curatives > 1) { + chosenOption.textContent = `curatives`; + } else if (slave.curatives > 0) { + chosenOption.textContent = `preventatives`; + } else { + chosenOption.textContent = `none`; + } + title.appendChild(chosenOption); + title.append(`.`); + let link = document.createElement('div'); + link.className = "choices"; + link.appendChild(App.UI.SlaveInteract.generateRows(curativeOptions, slave)); + el.append(title); + el.append(link); + return jQuery('#curatives').empty().append(el); +}; + +App.UI.SlaveInteract.aphrodisiacs = function(slave) { + const aphrodisiacOptions = []; + + aphrodisiacOptions.push({text: `None`, updateSlave: {aphrodisiacs: 0}}); + aphrodisiacOptions.push({text: `Aphrodisiacs`, updateSlave: {aphrodisiacs: 1}}); + aphrodisiacOptions.push({text: `Extreme aphrodisiacs`, updateSlave: {aphrodisiacs: 2}}); + aphrodisiacOptions.push({text: `Anaphrodisiacs`, updateSlave: {aphrodisiacs: -1}, note: `Suppresses libido`}); + + + let el = document.createElement('div'); + let title = document.createElement('div'); + title.append(`Aphrodisiacs: `); + let chosenOption = document.createElement('span'); + chosenOption.style.fontWeight = "bold"; + if (slave.aphrodisiacs > 1) { + chosenOption.textContent = `extreme`; + } else if (slave.aphrodisiacs > 0) { + chosenOption.textContent = `applied`; + } else if (slave.aphrodisiacs === -1) { + chosenOption.textContent = `anaphrodisiacs`; + } else { + chosenOption.textContent = `none`; + } + title.appendChild(chosenOption); + title.append(`.`); + let link = document.createElement('div'); + link.className = "choices"; + link.appendChild(App.UI.SlaveInteract.generateRows(aphrodisiacOptions, slave)); + el.append(title); + el.append(link); + return jQuery('#aphrodisiacs').empty().append(el); +}; + +App.UI.SlaveInteract.fertility = function(slave) { + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + let fertilityBlock = document.createElement('span'); + let linkArray = []; + if (slave.ovaries === 1 || slave.mpreg === 1 || slave.preg > 0) { + let note = ""; + if (slave.preg < -1) { + note += `${He} is sterile`; + } else if (slave.pubertyXX === 0 && slave.preg < 1) { + note += `${He} is not yet fertile`; + } else if (slave.ovaryAge >= 47 && slave.preg < 1) { + note += `${He} is too old to become pregnant`; + if (slave.preg === -1) { + slave.preg = 0; + SetBellySize(slave); + } + } else if (slave.broodmotherOnHold === 1) { + note += `${His} pregnancy implant is turned off`; + if (slave.broodmotherCountDown > 0) { + note += `${he} is expected to be completely emptied of ${his} remaining brood in ${slave.broodmotherCountDown} week`; + if (slave.broodmotherCountDown > 1) { + note += `s`; + } + note += `.`; + linkArray.push(App.UI.DOM.link( + `Turn on implant`, + () => { + slave.broodmotherOnHold = 0; + slave.broodmotherCountDown = 0; + App.UI.SlaveInteract.refreshAll(slave); + }, + )); + } + } else if (slave.preg >= -1) { + fertilityBlock.append("Contraception and fertility: "); + let fertility = ""; + // fertility.id = "fertility"; + if (slave.preg === -1) { + fertility = "using contraceptives"; + } else if (slave.pregWeek < 0) { + fertility = "postpartum"; + } else if (slave.preg === 0) { + fertility = "fertile"; + } else if (slave.preg < 4 && (slave.broodmother === 0 || slave.broodmotherOnHold === 1)) { + fertility = "may be pregnant"; + } else if (slave.preg < 2) { + fertility = "1 week pregnant"; + } else { + fertility = `${Math.trunc(slave.preg * 1000) / 1000} weeks pregnant`; // * and / needed to avoid seeing something like 20.1000000008 in some cases. + if (slave.broodmother > 0) { + fertility += " broodmother"; + } + } + fertility += ". "; + App.UI.DOM.appendNewElement("span", fertilityBlock, fertility, "bold"); + + if (slave.preg === 0) { + linkArray.push(App.UI.DOM.link( + `Use contraceptives`, + () => { + slave.preg = -1; + App.UI.SlaveInteract.refreshAll(slave); + }, + )); + } else if (slave.preg === -1) { + linkArray.push(App.UI.DOM.link( + `Let ${him} get pregnant`, + () => { + slave.preg = 0; + App.UI.SlaveInteract.refreshAll(slave); + }, + )); + } else if (isInduced(slave)) { + note += `Hormones are being slipped into ${his} food; ${he} will give birth suddenly and rapidly this week`; + } else if ( + slave.preg > slave.pregData.normalBirth - 2 && + slave.preg > slave.pregData.minLiveBirth && + slave.broodmother === 0 && + !isInLabor(slave) + ) { + linkArray.push(App.UI.DOM.link( + `Induce labor`, + () => { + induce(slave); + App.UI.SlaveInteract.refreshAll(slave); + }, + )); + linkArray.push(App.UI.DOM.passageLink(`Give ${him} a cesarean section`, "csec")); + } else if (slave.broodmother > 0) { + if (slave.broodmotherOnHold !== 1) { + linkArray.push(App.UI.DOM.link( + `Turn off implant`, + () => { + slave.broodmotherOnHold = 1; + slave.broodmotherCountDown = 38 - WombMinPreg(slave); + App.UI.SlaveInteract.refreshAll(slave); + }, + )); + } + if (slave.preg > 37) { + linkArray.push(App.UI.DOM.passageLink(`Induce mass childbirth`, "BirthStorm")); + } + } else if (slave.preg > slave.pregData.minLiveBirth) { + linkArray.push(App.UI.DOM.link( + `Give ${him} a cesarean section`, + () => { + slave.broodmotherOnHold = 0; + slave.broodmotherCountDown = 0; + }, + [], + "csec" + )); + } else if (slave.preg > 0 && slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { + note += "You are forbidden from aborting an Elite child"; + } else if (slave.preg > 0) { + linkArray.push(App.UI.DOM.link( + `Abort ${his} pregnancy`, + () => { + slave.broodmotherOnHold = 0; + slave.broodmotherCountDown = 0; + }, + [], + "Abort" + )); + } + } + App.UI.DOM.appendNewElement("span", fertilityBlock, note, "note"); + App.UI.DOM.appendNewElement("div", fertilityBlock, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + } + if ( + (slave.pregKnown === 1) && + (V.pregSpeedControl === 1) && + ( + slave.breedingMark !== 1 || + V.propOutcome === 0 || + V.eugenicsFullControl === 1 || + V.arcologies[0].FSRestart === "unset" + ) && + (slave.indentureRestrictions < 1) && + (slave.broodmother === 0) && + V.seePreg !== 0 + ) { + let title = document.createElement('div'); + let underline = document.createElement('span'); + underline.style.textDecoration = "underline"; + underline.textContent = "Pregnancy control"; + title.appendChild(underline); + title.append(": "); + + if (slave.pregControl === "labor suppressors") { + title.append("Labor is suppressed. "); + } else if (slave.pregControl === "slow gestation") { + title.append("Slowed gestation speed. "); + } else if (slave.pregControl === "speed up") { + title.append("Faster gestation speed, staffed clinic recommended. "); + } else { + title.append("Normal gestation and birth. "); + } + fertilityBlock.appendChild(title); + + linkArray = []; + if (slave.pregControl !== "none") { + linkArray.push(App.UI.DOM.link( + `Normal ${slave.preg < slave.pregData.normalBirth ? "Gestation" : "Birth"}`, + () => { + slave.pregControl = "none"; + App.UI.SlaveInteract.fertility(slave); + }, + )); + } + if (slave.preg < slave.pregData.normalBirth) { + if (slave.pregControl !== "slow gestation") { + linkArray.push(App.UI.DOM.link( + `Slow Gestation`, + () => { + slave.pregControl = "slow gestation"; + App.UI.SlaveInteract.fertility(slave); + }, + )); + } + if (slave.pregControl !== "speed up") { + linkArray.push(App.UI.DOM.link( + `Fast Gestation`, + () => { + slave.pregControl = "speed up"; + App.UI.SlaveInteract.fertility(slave); + }, + )); + } + } + if (slave.preg >= slave.pregData.minLiveBirth) { + if (slave.pregControl !== "labor suppressors") { + linkArray.push(App.UI.DOM.link( + `Suppress Labor`, + () => { + slave.pregControl = "labor suppressors"; + App.UI.SlaveInteract.fertility(slave); + }, + )); + } + } + App.UI.DOM.appendNewElement("div", fertilityBlock, App.UI.DOM.generateLinksStrip(linkArray), "choices"); + } + return jQuery('#fertility-block').empty().append(fertilityBlock); +}; + +/** + * @param {App.Entity.SlaveState} slave + */ +App.UI.SlaveInteract.incubator = function(slave) { + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + V.reservedChildren = FetusGlobalReserveCount("incubator"); + let _reservedIncubator = WombReserveCount(slave, "incubator"); + let _reservedNursery = WombReserveCount(slave, "nursery"); + let _WL = slave.womb.length; + let el = document.createElement('div'); + + if (V.incubator > 0) { + if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") { + if ((slave.assignment !== Job.DAIRY || V.dairyPregSetting === 0) && (slave.assignment !== Job.FARMYARD || V.farmyardBreeding === 0)) { + let title = document.createElement('div'); + let link = document.createElement('div'); + link.className = "choices"; + if (_WL - _reservedNursery === 0) { + title.textContent = `${His} children are already reserved for ${V.nurseryName}`; + title.style.fontStyle = "italic"; + } else { + const freeTanks = (V.incubator - V.tanks.length); + if (_reservedIncubator > 0) { + if (_WL === 1) { + title.textContent = `${His} child will be placed in ${V.incubatorName}. `; + } else if (_reservedIncubator < _WL) { + title.textContent = `${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}.`; + } else if (_WL === 2) { + title.textContent = `Both of ${his} children will be placed in ${V.incubatorName}. `; + } else { + title.textContent = `All ${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}. `; + } + if ((_reservedIncubator + _reservedNursery < _WL) && (V.reservedChildren < freeTanks)) { + link.appendChild( + App.UI.DOM.link(`Keep another child`, () => wombUpdateIncubator(1, true)) + ); + if (_reservedIncubator > 0) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep one less child`, () => wombUpdateIncubator(1, false)) + ); + } + if (_reservedIncubator > 1) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateIncubator(9999, false)) + ); + } + if ((V.reservedChildren + _WL - _reservedIncubator) <= freeTanks) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep the rest of ${his} children`, () => wombUpdateIncubator(9999, true)) + ); + } + } else if ((_reservedIncubator === _WL) || (V.reservedChildren === freeTanks) || (_reservedIncubator - _reservedNursery >= 0)) { + link.appendChild( + App.UI.DOM.link(`Keep one less child`, () => wombUpdateIncubator(1, false)) + ); + if (_reservedIncubator > 1) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateIncubator(9999, false)) + ); + } + } + } else if (V.reservedChildren < freeTanks) { + title.textContent = `${He} is pregnant and you have `; + if (freeTanks === 1) { + title.textContent += `an `; + } + let tank = document.createElement('span'); + tank.className = "lime"; + tank.textContent = `available aging tank`; + if (freeTanks > 1) { + tank.textContent += `s`; + } + tank.textContent += `.`; + let _cCount = (_WL > 1 ? "a" : "the"); + link.appendChild( + App.UI.DOM.link(`Keep ${_cCount} child`, () => wombUpdateIncubator(1, true)) + ); + title.appendChild(tank); + if ((_WL > 1) && (V.reservedChildren + _WL) <= freeTanks) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep all of ${his} children`, () => wombUpdateIncubator(9999, true)) + ); + } + } else if (V.reservedChildren === freeTanks) { + title.textContent = `You have no available tanks for ${his} children. `; + } + } + el.append(title); + el.append(link); + } + } + } + + function wombUpdateIncubator(count, addToWomb) { + if (addToWomb) { + WombAddToGenericReserve(slave, "incubator", count); + } else { + WombCleanGenericReserve(slave, "incubator", count); + } + V.reservedChildren = FetusGlobalReserveCount("incubator"); + App.UI.SlaveInteract.refreshAll(slave); + } + + return jQuery('#incubator').empty().append(el); +}; + +App.UI.SlaveInteract.nursery = function(slave) { + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + let el = document.createElement('div'); + if (V.nursery > 0) { + V.reservedChildrenNursery = FetusGlobalReserveCount("nursery"); + let reservedIncubator = WombReserveCount(slave, "incubator"); + let reservedNursery = WombReserveCount(slave, "nursery"); + let _WL = slave.womb.length; + if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") { + if ((slave.assignment !== Job.DAIRY || V.dairyPregSetting === 0) && (slave.assignment !== Job.FARMYARD || V.farmyardBreeding === 0)) { + let title = document.createElement('div'); + let link = document.createElement('div'); + link.className = "choices"; + if (_WL - reservedIncubator === 0) { + V.reservedChildren = 0; + title.textContent = `${His} children are already reserved for ${V.incubatorName}`; + title.style.fontStyle = "italic"; + } else { + const freeCribs = (V.nursery - V.cribs.length); + if (reservedNursery > 0) { + if (_WL === 1) { + title.textContent = `${His} child will be placed in ${V.nurseryName}. `; + } else if (reservedNursery < _WL) { + title.textContent = `_reservedNursery of ${his} children will be placed in ${V.nurseryName}.`; + } else if (_WL === 2) { + title.textContent = `Both of ${his} children will be placed in ${V.nurseryName}. `; + } else { + title.textContent = `All ${reservedNursery} of ${his} children will be placed in ${V.nurseryName}. `; + } + if ((reservedIncubator + reservedNursery < _WL) && (V.reservedChildrenNursery < freeCribs)) { + link.appendChild( + App.UI.DOM.link(`Keep another child`, () => wombUpdateNursery(1, true)) + ); + + if (reservedNursery > 0) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep one less child`, () => wombUpdateNursery(1, false)) + ); + } + if (reservedNursery > 1) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateNursery(9999, false)) + ); + } + if ((V.reservedChildrenNursery + _WL - reservedNursery) <= freeCribs) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep the rest of ${his} children`, () => wombUpdateNursery(9999, true)) + ); + } + } else if ((reservedNursery === _WL) || (V.reservedChildrenNursery === freeCribs) || (reservedNursery - reservedIncubator >= 0)) { + link.appendChild( + App.UI.DOM.link(`Keep one less child`, () => wombUpdateNursery(1, false)) + ); + + if (reservedNursery > 1) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateNursery(9999, false)) + ); + } + } + } else if (V.reservedChildrenNursery < freeCribs) { + title.textContent = `${He} is pregnant and you have `; + if (freeCribs === 1) { + title.textContent += `an `; + } + let crib = document.createElement('span'); + crib.className = "lime"; + crib.textContent = `available room`; + if (freeCribs > 1) { + crib.textContent += `s`; + } + crib.textContent += `.`; + let _cCount = (_WL > 1 ? "a" : "the"); + link.appendChild( + App.UI.DOM.link(`Keep ${_cCount} child`, () => wombUpdateNursery(1, true)) + ); + title.appendChild(crib); + if ((_WL > 1) && (V.reservedChildrenNursery + _WL) <= freeCribs) { + link.append(` | `); + link.appendChild( + App.UI.DOM.link(`Keep all of ${his} children`, () => wombUpdateNursery(9999, true)) + ); + } + } else if (V.reservedChildrenNursery === freeCribs) { + title.textContent = `You have no available rooms for ${his} children. `; + } + } + el.append(title); + el.append(link); + } + } + } + + function wombUpdateNursery(count, addToWomb) { + if (addToWomb) { + WombAddToGenericReserve(slave, "nursery", count); + } else { + WombCleanGenericReserve(slave, "nursery", count); + } V.reservedChildren = FetusGlobalReserveCount("nursery"); + App.UI.SlaveInteract.refreshAll(slave); + } + + return jQuery('#nursery').empty().append(el); +}; + +/* TODO: breeder eligibility +<<if $propOutcome == 1 && $arcologies[0].FSRestart != "unset">> + <<if getSlave($AS).breedingMark == 0 && getSlave($AS).fuckdoll == 0 && getSlave($AS).eggType == "human" && isFertile(getSlave($AS)) && getSlave($AS).preg == 0>> + <br> + [[Breeder Eligibility Exam|BreedingTest]] + <</if>> + <</if>> + */ + +App.UI.SlaveInteract.bloating = function(slave) { + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + let bloating = document.createElement('div'); + if (slave.inflation > 0) { + let intro = document.createElement('span'); + intro.textContent = "Required Bloating"; + intro.style.textDecoration = "underline"; + bloating.append(intro); + + bloating.append(": "); + + let requirement = document.createElement('span'); + requirement.style.fontWeight = "bold"; + requirement.id = "inflate"; + if (slave.inflation === 3) { + requirement.textContent = `${He} is required to keep 2 gallons of ${slave.inflationType} in ${him} at all times`; + } else if (slave.inflation === 2) { + requirement.textContent = `${He} is required to keep 4 liters of ${slave.inflationType} in ${him} at all times`; + } else if (slave.inflation === 1) { + requirement.textContent = `${He} is required to keep 2 liters of ${slave.inflationType} in ${him} at all times`; + } + bloating.append(requirement); + bloating.append(". "); + + let link = App.UI.DOM.link( + `Let ${him} deflate`, + () => { + deflate(slave); + App.UI.SlaveInteract.refreshAll(slave); + }, + ); + bloating.append(link); + } + // make sure it updates itself after run + return jQuery('#bloating').empty().append(bloating); +}; + +App.UI.SlaveInteract.hormones = function(slave) { + let el = document.createElement('div'); + const options = []; + const level = []; + + if (slave.hormones !== 0) { + level.push({text: `None`, updateSlave: {hormones: 0}}); + } + + if (slave.indentureRestrictions < 2) { + options.push({text: `Intensive Female`, updateSlave: {hormones: 2}}); + } else { + options.push({text: `Intensive Female`, disabled: `Cannot use intensive hormones on indentured slaves`}); + } + options.push({text: `Female`, updateSlave: {hormones: 1}}); + options.push({text: `Male`, updateSlave: {hormones: -1}}); + if (slave.indentureRestrictions < 2) { + options.push({text: `Intensive Male`, updateSlave: {hormones: -2}}); + } else { + options.push({text: `Intensive Male`, disabled: `Cannot use intensive hormones on indentured slaves`}); + } + + let title = document.createElement('div'); + title.textContent = `Hormones: `; + let choice = document.createElement('span'); + choice.style.fontWeight = "bold"; + switch (slave.hormones) { + case 2: { + choice.textContent = `intensive female. `; + break; + } + case 1: { + choice.textContent = `female. `; + break; + } + case 0: { + choice.textContent = `none. `; + break; + } + case -1: { + choice.textContent = `male. `; + break; + } + case -2: { + choice.textContent = `intensive male. `; + break; + } + default: { + choice.textContent = `Not set. `; + } + } + + title.append(choice); + title.appendChild(App.UI.SlaveInteract.generateRows(level, slave)); + el.append(title); + + let links = document.createElement('div'); + links.appendChild(App.UI.SlaveInteract.generateRows(options, slave)); + links.className = "choices"; + el.append(links); + + return jQuery('#hormones').empty().append(el); +}; + +App.UI.SlaveInteract.diet = function(slave) { + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + let el = document.createElement('div'); + + let title = document.createElement('div'); + title.textContent = `Diet: `; + let choice = document.createElement('span'); + choice.style.fontWeight = "bold"; + choice.textContent = `${capFirstChar(slave.diet)}. `; + + title.append(choice); + el.append(title); + + const health = []; + health.push({text: `Healthy`, updateSlave: {diet: "healthy"}}); + if (V.dietCleanse === 1) { + if (slave.health.condition < 90 || slave.chem >= 10) { + health.push({text: `Cleanse`, updateSlave: {diet: "cleansing"}}); + } else { + health.push({text: `Cleanse`, disabled: `${He} is already healthy`}); + } + } + + const weight = []; + if (slave.weight >= -95) { + weight.push({text: `Lose weight`, updateSlave: {diet: "restricted"}}); + } else { + weight.push({text: `Lose weight`, disabled: `${He} is already underweight`}); + } + if (slave.fuckdoll === 0 && slave.fetish !== "mindbroken" && V.feeder === 1) { + if (slave.weight > 10 || slave.weight < -10) { + weight.push({text: `Correct weight`, updateSlave: {diet: "corrective"}}); + } else { + weight.push({text: `Correct weight`, disabled: `${He} is already a healthy weight`}); + } + } + if (slave.weight <= 200) { + weight.push({text: `Fatten`, updateSlave: {diet: "fattening"}}); + } else { + weight.push({text: `Fatten`, disabled: `${He} is already overweight`}); + } + + const muscle = []; + if (slave.muscles < 100 && !isAmputee(slave)) { + muscle.push({text: `Build muscle`, updateSlave: {diet: "muscle building"}}); + } else if (!isAmputee(slave)) { + muscle.push({text: `Build muscle`, disabled: `${He} is maintaining ${his} enormous musculature`}); + } else { + muscle.push({text: `Build muscle`, disabled: `${He} has no limbs and thus can't effectively build muscle`}); + } + + if ((slave.muscles > 0 || slave.fuckdoll === 0) && canWalk(slave)) { + muscle.push({text: `Slim down`, updateSlave: {diet: "slimming"}}); + } else if (!canWalk(slave)) { + muscle.push({text: `Slim down`, disabled: `${He} can't walk and thus can't trim down`}); + } else if (slave.fuckdoll > 0) { + muscle.push({text: `Slim down`, disabled: `${He} has no muscles left to lose`}); + } + + const production = []; + if (slave.balls > 0 && V.cumProDiet === 1) { + production.push({text: `Cum production`, updateSlave: {diet: "cum production"}}); + } + if (((isFertile(slave) && slave.preg === 0) || (slave.geneticQuirks.superfetation === 2 && canGetPregnant(slave) && V.geneticMappingUpgrade !== 0)) && V.dietFertility === 1) { + production.push({text: `Fertility`, updateSlave: {diet: "fertility"}}); + } + + const hormone = []; + if (V.feeder === 1) { + hormone.push({text: `Estrogen enriched`, updateSlave: {diet: "XX"}}); + hormone.push({text: `Testosterone enriched`, updateSlave: {diet: "XY"}}); + if (V.dietXXY === 1 && slave.balls > 0 && (slave.ovaries === 1 || slave.mpreg === 1)) { + hormone.push({text: `Herm hormone blend`, updateSlave: {diet: "XXY"}}); + } + } + + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Health", health, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Weight", weight, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Muscle", muscle, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Production", production, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Hormone", hormone, slave); + + return jQuery('#diet').empty().append(el); +}; + +App.UI.SlaveInteract.dietBase = function(slave) { + let el = document.createElement('div'); + const milk = []; + const cum = []; + + // Milk + if (slave.dietCum < 2) { + milk.push({text: `Milk added`, updateSlave: {dietMilk: 1}}); + if (slave.dietCum < 2) { + milk.push({text: `Milk based`, updateSlave: {dietMilk: 2, dietCum: 0}}); + } + if (slave.dietMilk) { + milk.push({text: `Remove milk`, updateSlave: {dietMilk: 0}}); + } + } else { + milk.push({text: `Milk`, disabled: `Diet is based entirely on cum`}); + } + + // Cum + if (slave.dietMilk < 2) { + cum.push({text: `Cum added`, updateSlave: {dietCum: 1}}); + cum.push({text: `Cum based`, updateSlave: {dietCum: 2, dietMilk: 0}}); + if (slave.dietCum) { + cum.push({text: `Remove cum`, updateSlave: {dietCum: 0}}); + } + } else { + cum.push({text: `Cum`, disabled: `Diet is based entirely on milk`}); + } + + let title = document.createElement('div'); + title.textContent = `Diet base: `; + let choice = document.createElement('span'); + choice.style.fontWeight = "bold"; + if (slave.dietCum === 2) { + choice.textContent = `cum based. `; + } else if (slave.dietCum === 1 && slave.dietMilk === 0) { + choice.textContent = `cum added. `; + } else if (slave.dietCum === 1 && slave.dietMilk === 1) { + choice.textContent = `cum and milk added. `; + } else if (slave.dietMilk === 1 && slave.dietCum === 0) { + choice.textContent = `milk added. `; + } else if (slave.dietMilk === 2) { + choice.textContent = `milk based. `; + } else if (slave.dietCum === 0 && slave.dietMilk === 0) { + choice.textContent = `normal. `; + } else { + choice.textContent = `THERE HAS BEEN AN ERROR.`; + } + + title.append(choice); + el.append(title); + + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Milk", milk, slave); + App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Cum", cum, slave); + + return jQuery('#diet-base').empty().append(el); +}; + +App.UI.SlaveInteract.snacks = function(slave) { + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + let el = document.createElement('div'); + let options = []; + + if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { + let title = document.createElement('div'); + title.textContent = `Solid Slave Food Access: `; + let choice = document.createElement('span'); + choice.style.fontWeight = "bold"; + if (slave.onDiet === 0) { + choice.textContent = `Free to stuff ${himself}.`; + } else { + choice.textContent = `On a strict diet.`; + } + title.append(choice); + el.append(title); + + options.push({text: `No access`, updateSlave: {onDiet: 1}}); + options.push({text: `Full access`, updateSlave: {onDiet: 0}}); + + let links = document.createElement('div'); + links.appendChild(App.UI.SlaveInteract.generateRows(options, slave)); + links.className = "choices"; + el.append(links); + } + + return jQuery('#snacks').empty().append(el); +}; diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js index a70da2d2f9ac1dd11bb838a2cea7e7507d8708e6..8b1f8c4307fed393b3524c3bb578738eb457dd47 100644 --- a/src/interaction/slaveInteract.js +++ b/src/interaction/slaveInteract.js @@ -511,514 +511,6 @@ App.UI.SlaveInteract.tutorBlock = function(slave) { return el; }; -/** - * @param {App.Entity.SlaveState} slave - */ -App.UI.SlaveInteract.drugs = function(slave) { - let el = document.createElement('div'); - - const drugLevelOptions = []; - const lips = []; - const breasts = []; - const nipples = []; - const butt = []; - const dick = []; - const balls = []; - const fertility = []; - const hormones = []; - const psych = []; - const misc = []; - - if (slave.drugs !== "no drugs") { - drugLevelOptions.push({text: `None`, updateSlave: {drugs: `no drugs`}}); - } - if (slave.indentureRestrictions < 2) { - // Psych - if (slave.intelligence > -100 && slave.indentureRestrictions < 1) { - psych.push({text: `Psychosuppressants`, updateSlave: {drugs: `psychosuppressants`}}); - } else if (slave.intelligence > -100) { - psych.push({text: `Psychosuppressants`, disabled: `Cannot suppress indentured slave`}); - } else if (slave.indentureRestrictions < 1) { - psych.push({text: `Psychosuppressants`, disabled: `Too stupid to suppress`}); - } else { - psych.push({text: `Psychosuppressants`, disabled: `Too stupid and indentured to suppress`}); - } - if (V.arcologies[0].FSSlaveProfessionalismResearch === 1) { - if (canImproveIntelligence(slave)) { - psych.push({text: `Psychostimulants`, updateSlave: {drugs: `psychostimulants`}}); - } else { - psych.push({text: `Psychostimulants`, disabled: `Cannot improve intelligence`}); - } - } - - // Breasts - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if ((slave.boobs - slave.boobsImplant - slave.boobsMilk) > 100) { - breasts.push({text: `Reducers`, updateSlave: {drugs: `breast redistributors`}}); - } else { - breasts.push({text: `Reducers`, disabled: `Boobs are too small`}); - } - } - if (slave.boobs < 50000) { - breasts.push({text: `Enhancement`, updateSlave: {drugs: `breast injections`}}); - breasts.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive breast injections`}}); - } else { - breasts.push({text: `Enhancement`, disabled: `Boobs are too large`}); - } - if (V.arcologies[0].FSAssetExpansionistResearch === 1) { - if (slave.boobs < 50000) { - breasts.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper breast injections`}}); - } else { - breasts.push({text: `Hyper enhancement`, disabled: `Boobs are too large`}); - } - } - - // Nipples - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.nipples === "huge" || slave.nipples === "puffy" || slave.nipples === "cute") { - nipples.push({text: `Reducers`, updateSlave: {drugs: `nipple atrophiers`}}); - } else { - nipples.push({text: `Reducers`, disabled: `Nipples are ${slave.nipples}`}); - } - } - if (V.dispensary) { - if (["inverted", "partially inverted", "cute", "tiny", "puffy"].includes(slave.nipples)) { - nipples.push({text: `Enhancement`, updateSlave: {drugs: `nipple enhancers`}}); - } else if (slave.nipples === "huge") { - nipples.push({text: `Enhancement`, disabled: `Nipples are already huge`}); - } else { - nipples.push({text: `Enhancement`, disabled: `Has no effect on ${slave.nipples} nipples`}); - } - } - - // Butt - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.butt - slave.buttImplant > 0) { - butt.push({text: `Reducers`, updateSlave: {drugs: `butt redistributors`}}); - } else { - butt.push({text: `Reducers`, disabled: `Butt is too small`}); - } - } - if (slave.butt < 9) { - butt.push({text: `Enhancement`, updateSlave: {drugs: `butt injections`}}); - butt.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive butt injections`}}); - } else { - butt.push({text: `Enhancement`, disabled: `Butt is too large`}); - } - if (V.arcologies[0].FSAssetExpansionistResearch === 1) { - if (slave.butt < 20) { - butt.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper butt injections`}}); - } else { - butt.push({text: `Hyper enhancement`, disabled: `Butt is too large`}); - } - } - - // Lips - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.lips - slave.lipsImplant > 0) { - lips.push({text: `Reducers`, updateSlave: {drugs: `lip atrophiers`}}); - } else { - lips.push({text: `Reducers`, disabled: `Lips are too small`}); - } - } - if (slave.lips <= 95 || (slave.lips <= 85 && V.seeExtreme !== 1)) { - lips.push({text: `Enhancement`, updateSlave: {drugs: `lip injections`}}); - } else { - lips.push({text: `Enhancement`, disabled: `Lips are too large`}); - } - - // Fertility - fertility.push({text: `Fertility`, updateSlave: {drugs: `fertility drugs`}}); - if (V.seeHyperPreg === 1 && slave.indentureRestrictions < 1 && V.superFertilityDrugs === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { - fertility.push({text: `Fertility+`, updateSlave: {drugs: `super fertility drugs`}}); - } - - // Dick/clit - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.dick > 1) { - dick.push({text: `Reducers`, updateSlave: {drugs: `penis atrophiers`}}); - } else if (slave.dick === 1) { - dick.push({text: `Reducers`, disabled: `Dick is already at minimum size`}); - } - if (slave.clit > 0) { - dick.push({text: `Reducers`, updateSlave: {drugs: `clitoris atrophiers`}}); - } - } - if (slave.dick > 0) { - if (slave.dick < 10) { - dick.push({text: `Enhancement`, updateSlave: {drugs: `penis enhancement`}}); - dick.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive penis enhancement`}}); - } else { - dick.push({text: `Enhancement`, disabled: `Dick is too large`}); - } - } else { - if (slave.clit < 5) { - dick.push({text: `Enhancement`, updateSlave: {drugs: `penis enhancement`}}); - dick.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive penis enhancement`}}); - } else { - dick.push({text: `Enhancement`, disabled: `Clit is too large`}); - } - } - if (V.arcologies[0].FSAssetExpansionistResearch === 1) { - if (slave.dick > 0) { - if (slave.dick < 31) { - dick.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper penis enhancement`}}); - } else { - dick.push({text: `Hyper enhancement`, disabled: `Dick is too large`}); - } - } else { - if (slave.clit < 5) { - dick.push({text: `Hyper enhancement`, updateSlave: {drugs: `penis enhancement`}}); - } else { - dick.push({text: `Hyper enhancement`, disabled: `Clit is too large`}); - } - } - } - if (slave.dick > 0 && slave.dick < 11 && !canAchieveErection(slave) && slave.chastityPenis !== 1) { - dick.push({text: `Erectile dysfunction circumvention`, updateSlave: {drugs: `priapism agents`}}); - } - - // Balls - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.balls > 1) { - balls.push({text: `Reducers`, updateSlave: {drugs: `testicle atrophiers`}}); - } else if (slave.balls === 1) { - balls.push({text: `Reducers`, disabled: `Balls are already at minimum size`}); - } - } - if (slave.balls > 0) { - balls.push({text: `Enhancement`, updateSlave: {drugs: `testicle enhancement`}}); - balls.push({text: `Intensive enhancement`, updateSlave: {drugs: `intensive testicle enhancement`}}); - if (V.arcologies[0].FSAssetExpansionistResearch === 1) { - balls.push({text: `Hyper enhancement`, updateSlave: {drugs: `hyper testicle enhancement`}}); - } - } - - // Hormones - if (V.precociousPuberty === 1 && V.pubertyHormones === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { - if ((slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX === 0) { - hormones.push({text: `Female injections`, updateSlave: {drugs: `female hormone injections`}}); - } - if (slave.balls > 0 && slave.pubertyXY === 0) { - hormones.push({text: `Male injections`, updateSlave: {drugs: `male hormone injections`}}); - } - } - hormones.push({text: `Blockers`, updateSlave: {drugs: `hormone blockers`}}); - hormones.push({text: `Enhancement`, updateSlave: {drugs: `hormone enhancers`}}); - - // Misc - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.labia > 0) { - misc.push({text: `Labia reducers`, updateSlave: {drugs: `labia atrophiers`}}); - } - } - if (V.growthStim === 1) { - if (canImproveHeight(slave)) { - misc.push({text: `Growth Stimulants`, updateSlave: {drugs: `growth stimulants`}}); - } else { - misc.push({text: `Growth Stimulants`, disabled: `Cannot increase height further`}); - } - } - if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) { - if (slave.weight > -95) { - misc.push({text: `Weight loss pills`, updateSlave: {drugs: `appetite suppressors`}}); - } else { - misc.push({text: `Weight loss pills`, disabled: `Slave is already at low weight`}); - } - } - misc.push({text: `Steroids`, updateSlave: {drugs: `steroids`}}); - if (slave.boobs > 250 && slave.boobShape !== "saggy" && V.purchasedSagBGone === 1) { - misc.push({text: `Sag-B-Gone breast lifting cream`, updateSlave: {drugs: `sag-B-gone`}}); - } - if (V.arcologies[0].FSYouthPreferentialistResearch === 1) { - if (slave.visualAge > 18) { - misc.push({text: `Anti-aging cream`, updateSlave: {drugs: `anti-aging cream`}}); - } else { - misc.push({text: `Anti-aging cream`, disabled: `Slave already looks young enough`}); - } - } - } - - let title = document.createElement('div'); - title.textContent = `Drugs: `; - let chosenDrug = document.createElement('span'); - chosenDrug.textContent = `${capFirstChar(slave.drugs)}. `; - chosenDrug.style.fontWeight = "bold"; - title.append(chosenDrug); - title.appendChild(App.UI.SlaveInteract.generateRows(drugLevelOptions, slave)); - el.append(title); - - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Lips", lips, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Breasts", breasts, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Nipples", nipples, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Butt", butt, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, slave.dick > 0 ? "Dick" : "Clit", dick, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Balls", balls, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Fertility", fertility, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Hormones", hormones, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Psych", psych, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Misc", misc, slave); - - return jQuery('#drugs').empty().append(el); -}; - -App.UI.SlaveInteract.hormones = function(slave) { - let el = document.createElement('div'); - const options = []; - const level = []; - - if (slave.hormones !== 0) { - level.push({text: `None`, updateSlave: {hormones: 0}}); - } - - if (slave.indentureRestrictions < 2) { - options.push({text: `Intensive Female`, updateSlave: {hormones: 2}}); - } else { - options.push({text: `Intensive Female`, disabled: `Cannot use intensive hormones on indentured slaves`}); - } - options.push({text: `Female`, updateSlave: {hormones: 1}}); - options.push({text: `Male`, updateSlave: {hormones: -1}}); - if (slave.indentureRestrictions < 2) { - options.push({text: `Intensive Male`, updateSlave: {hormones: -2}}); - } else { - options.push({text: `Intensive Male`, disabled: `Cannot use intensive hormones on indentured slaves`}); - } - - let title = document.createElement('div'); - title.textContent = `Hormones: `; - let choice = document.createElement('span'); - choice.style.fontWeight = "bold"; - switch (slave.hormones) { - case 2: { - choice.textContent = `intensive female. `; - break; - } - case 1: { - choice.textContent = `female. `; - break; - } - case 0: { - choice.textContent = `none. `; - break; - } - case -1: { - choice.textContent = `male. `; - break; - } - case -2: { - choice.textContent = `intensive male. `; - break; - } - default: { - choice.textContent = `Not set. `; - } - } - - title.append(choice); - title.appendChild(App.UI.SlaveInteract.generateRows(level, slave)); - el.append(title); - - let links = document.createElement('div'); - links.appendChild(App.UI.SlaveInteract.generateRows(options, slave)); - links.className = "choices"; - el.append(links); - - return jQuery('#hormones').empty().append(el); -}; - -App.UI.SlaveInteract.diet = function(slave) { - const { - // eslint-disable-next-line no-unused-vars - he, - him, - his, - hers, - himself, - boy, - He, - His - } = getPronouns(slave); - let el = document.createElement('div'); - - let title = document.createElement('div'); - title.textContent = `Diet: `; - let choice = document.createElement('span'); - choice.style.fontWeight = "bold"; - choice.textContent = `${capFirstChar(slave.diet)}. `; - - title.append(choice); - el.append(title); - - const health = []; - health.push({text: `Healthy`, updateSlave: {diet: "healthy"}}); - if (V.dietCleanse === 1) { - if (slave.health.condition < 90 || slave.chem >= 10) { - health.push({text: `Cleanse`, updateSlave: {diet: "cleansing"}}); - } else { - health.push({text: `Cleanse`, disabled: `${He} is already healthy`}); - } - } - - const weight = []; - if (slave.weight >= -95) { - weight.push({text: `Lose weight`, updateSlave: {diet: "restricted"}}); - } else { - weight.push({text: `Lose weight`, disabled: `${He} is already underweight`}); - } - if (slave.fuckdoll === 0 && slave.fetish !== "mindbroken" && V.feeder === 1) { - if (slave.weight > 10 || slave.weight < -10) { - weight.push({text: `Correct weight`, updateSlave: {diet: "corrective"}}); - } else { - weight.push({text: `Correct weight`, disabled: `${He} is already a healthy weight`}); - } - } - if (slave.weight <= 200) { - weight.push({text: `Fatten`, updateSlave: {diet: "fattening"}}); - } else { - weight.push({text: `Fatten`, disabled: `${He} is already overweight`}); - } - - const muscle = []; - if (slave.muscles < 100 && !isAmputee(slave)) { - muscle.push({text: `Build muscle`, updateSlave: {diet: "muscle building"}}); - } else if (!isAmputee(slave)) { - muscle.push({text: `Build muscle`, disabled: `${He} is maintaining ${his} enormous musculature`}); - } else { - muscle.push({text: `Build muscle`, disabled: `${He} has no limbs and thus can't effectively build muscle`}); - } - - if ((slave.muscles > 0 || slave.fuckdoll === 0) && canWalk(slave)) { - muscle.push({text: `Slim down`, updateSlave: {diet: "slimming"}}); - } else if (!canWalk(slave)) { - muscle.push({text: `Slim down`, disabled: `${He} can't walk and thus can't trim down`}); - } else if (slave.fuckdoll > 0) { - muscle.push({text: `Slim down`, disabled: `${He} has no muscles left to lose`}); - } - - const production = []; - if (slave.balls > 0 && V.cumProDiet === 1) { - production.push({text: `Cum production`, updateSlave: {diet: "cum production"}}); - } - if (((isFertile(slave) && slave.preg === 0) || (slave.geneticQuirks.superfetation === 2 && canGetPregnant(slave) && V.geneticMappingUpgrade !== 0)) && V.dietFertility === 1) { - production.push({text: `Fertility`, updateSlave: {diet: "fertility"}}); - } - - const hormone = []; - if (V.feeder === 1) { - hormone.push({text: `Estrogen enriched`, updateSlave: {diet: "XX"}}); - hormone.push({text: `Testosterone enriched`, updateSlave: {diet: "XY"}}); - if (V.dietXXY === 1 && slave.balls > 0 && (slave.ovaries === 1 || slave.mpreg === 1)) { - hormone.push({text: `Herm hormone blend`, updateSlave: {diet: "XXY"}}); - } - } - - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Health", health, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Weight", weight, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Muscle", muscle, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Production", production, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Hormone", hormone, slave); - - return jQuery('#diet').empty().append(el); -}; - -App.UI.SlaveInteract.dietBase = function(slave) { - let el = document.createElement('div'); - const milk = []; - const cum = []; - - // Milk - if (slave.dietCum < 2) { - milk.push({text: `Milk added`, updateSlave: {dietMilk: 1}}); - if (slave.dietCum < 2) { - milk.push({text: `Milk based`, updateSlave: {dietMilk: 2, dietCum: 0}}); - } - if (slave.dietMilk) { - milk.push({text: `Remove milk`, updateSlave: {dietMilk: 0}}); - } - } else { - milk.push({text: `Milk`, disabled: `Diet is based entirely on cum`}); - } - - // Cum - if (slave.dietMilk < 2) { - cum.push({text: `Cum added`, updateSlave: {dietCum: 1}}); - cum.push({text: `Cum based`, updateSlave: {dietCum: 2, dietMilk: 0}}); - if (slave.dietCum) { - cum.push({text: `Remove cum`, updateSlave: {dietCum: 0}}); - } - } else { - cum.push({text: `Cum`, disabled: `Diet is based entirely on milk`}); - } - - let title = document.createElement('div'); - title.textContent = `Diet base: `; - let choice = document.createElement('span'); - choice.style.fontWeight = "bold"; - if (slave.dietCum === 2) { - choice.textContent = `cum based. `; - } else if (slave.dietCum === 1 && slave.dietMilk === 0) { - choice.textContent = `cum added. `; - } else if (slave.dietCum === 1 && slave.dietMilk === 1) { - choice.textContent = `cum and milk added. `; - } else if (slave.dietMilk === 1 && slave.dietCum === 0) { - choice.textContent = `milk added. `; - } else if (slave.dietMilk === 2) { - choice.textContent = `milk based. `; - } else if (slave.dietCum === 0 && slave.dietMilk === 0) { - choice.textContent = `normal. `; - } else { - choice.textContent = `THERE HAS BEEN AN ERROR.`; - } - - title.append(choice); - el.append(title); - - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Milk", milk, slave); - App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Cum", cum, slave); - - return jQuery('#diet-base').empty().append(el); -}; - -App.UI.SlaveInteract.snacks = function(slave) { - const { - // eslint-disable-next-line no-unused-vars - he, - him, - his, - hers, - himself, - boy, - He, - His - } = getPronouns(slave); - let el = document.createElement('div'); - let options = []; - - if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { - let title = document.createElement('div'); - title.textContent = `Solid Slave Food Access: `; - let choice = document.createElement('span'); - choice.style.fontWeight = "bold"; - if (slave.onDiet === 0) { - choice.textContent = `Free to stuff ${himself}.`; - } else { - choice.textContent = `On a strict diet.`; - } - title.append(choice); - el.append(title); - - options.push({text: `No access`, updateSlave: {onDiet: 1}}); - options.push({text: `Full access`, updateSlave: {onDiet: 0}}); - - let links = document.createElement('div'); - links.appendChild(App.UI.SlaveInteract.generateRows(options, slave)); - links.className = "choices"; - el.append(links); - } - - return jQuery('#snacks').empty().append(el); -}; - App.UI.SlaveInteract.useSlaveDisplay = function(slave) { // Goal: Be able to write the entire "use her" block with only dom fragments. let el = document.createElement('div'); @@ -1438,570 +930,7 @@ App.UI.SlaveInteract.useSlaveDisplay = function(slave) { return el; }; -App.UI.SlaveInteract.bloating = function(slave) { - const { - // eslint-disable-next-line no-unused-vars - he, - him, - his, - hers, - himself, - boy, - He, - His - } = getPronouns(slave); - let bloating = document.createElement('div'); - if (slave.inflation > 0) { - let intro = document.createElement('span'); - intro.textContent = "Required Bloating"; - intro.style.textDecoration = "underline"; - bloating.append(intro); - - bloating.append(": "); - - let requirement = document.createElement('span'); - requirement.style.fontWeight = "bold"; - requirement.id = "inflate"; - if (slave.inflation === 3) { - requirement.textContent = `${He} is required to keep 2 gallons of ${slave.inflationType} in ${him} at all times`; - } else if (slave.inflation === 2) { - requirement.textContent = `${He} is required to keep 4 liters of ${slave.inflationType} in ${him} at all times`; - } else if (slave.inflation === 1) { - requirement.textContent = `${He} is required to keep 2 liters of ${slave.inflationType} in ${him} at all times`; - } - bloating.append(requirement); - bloating.append(". "); - - let link = App.UI.DOM.link( - `Let ${him} deflate`, - () => { - deflate(slave); - App.UI.SlaveInteract.refreshAll(slave); - }, - ); - bloating.append(link); - } - // make sure it updates itself after run - return jQuery('#bloating').empty().append(bloating); -}; - -App.UI.SlaveInteract.fertility = function(slave) { - const { - // eslint-disable-next-line no-unused-vars - he, - him, - his, - hers, - himself, - boy, - He, - His - } = getPronouns(slave); - let fertilityBlock = document.createElement('span'); - let linkArray = []; - if (slave.ovaries === 1 || slave.mpreg === 1 || slave.preg > 0) { - let note = ""; - if (slave.preg < -1) { - note += `${He} is sterile`; - } else if (slave.pubertyXX === 0 && slave.preg < 1) { - note += `${He} is not yet fertile`; - } else if (slave.ovaryAge >= 47 && slave.preg < 1) { - note += `${He} is too old to become pregnant`; - if (slave.preg === -1) { - slave.preg = 0; - SetBellySize(slave); - } - } else if (slave.broodmotherOnHold === 1) { - note += `${His} pregnancy implant is turned off`; - if (slave.broodmotherCountDown > 0) { - note += `${he} is expected to be completely emptied of ${his} remaining brood in ${slave.broodmotherCountDown} week`; - if (slave.broodmotherCountDown > 1) { - note += `s`; - } - note += `.`; - linkArray.push(App.UI.DOM.link( - `Turn on implant`, - () => { - slave.broodmotherOnHold = 0; - slave.broodmotherCountDown = 0; - App.UI.SlaveInteract.refreshAll(slave); - }, - )); - } - } else if (slave.preg >= -1) { - fertilityBlock.append("Contraception and fertility: "); - let fertility = ""; - // fertility.id = "fertility"; - if (slave.preg === -1) { - fertility = "using contraceptives"; - } else if (slave.pregWeek < 0) { - fertility = "postpartum"; - } else if (slave.preg === 0) { - fertility = "fertile"; - } else if (slave.preg < 4 && (slave.broodmother === 0 || slave.broodmotherOnHold === 1)) { - fertility = "may be pregnant"; - } else if (slave.preg < 2) { - fertility = "1 week pregnant"; - } else { - fertility = `${Math.trunc(slave.preg * 1000) / 1000} weeks pregnant`; // * and / needed to avoid seeing something like 20.1000000008 in some cases. - if (slave.broodmother > 0) { - fertility += " broodmother"; - } - } - fertility += ". "; - App.UI.DOM.appendNewElement("span", fertilityBlock, fertility, "bold"); - - if (slave.preg === 0) { - linkArray.push(App.UI.DOM.link( - `Use contraceptives`, - () => { - slave.preg = -1; - App.UI.SlaveInteract.refreshAll(slave); - }, - )); - } else if (slave.preg === -1) { - linkArray.push(App.UI.DOM.link( - `Let ${him} get pregnant`, - () => { - slave.preg = 0; - App.UI.SlaveInteract.refreshAll(slave); - }, - )); - } else if (isInduced(slave)) { - note += `Hormones are being slipped into ${his} food; ${he} will give birth suddenly and rapidly this week`; - } else if ( - slave.preg > slave.pregData.normalBirth - 2 && - slave.preg > slave.pregData.minLiveBirth && - slave.broodmother === 0 && - !isInLabor(slave) - ) { - linkArray.push(App.UI.DOM.link( - `Induce labor`, - () => { - induce(slave); - App.UI.SlaveInteract.refreshAll(slave); - }, - )); - linkArray.push(App.UI.DOM.passageLink(`Give ${him} a cesarean section`, "csec")); - } else if (slave.broodmother > 0) { - if (slave.broodmotherOnHold !== 1) { - linkArray.push(App.UI.DOM.link( - `Turn off implant`, - () => { - slave.broodmotherOnHold = 1; - slave.broodmotherCountDown = 38 - WombMinPreg(slave); - App.UI.SlaveInteract.refreshAll(slave); - }, - )); - } - if (slave.preg > 37) { - linkArray.push(App.UI.DOM.passageLink(`Induce mass childbirth`, "BirthStorm")); - } - } else if (slave.preg > slave.pregData.minLiveBirth) { - linkArray.push(App.UI.DOM.link( - `Give ${him} a cesarean section`, - () => { - slave.broodmotherOnHold = 0; - slave.broodmotherCountDown = 0; - }, - [], - "csec" - )); - } else if (slave.preg > 0 && slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { - note += "You are forbidden from aborting an Elite child"; - } else if (slave.preg > 0) { - linkArray.push(App.UI.DOM.link( - `Abort ${his} pregnancy`, - () => { - slave.broodmotherOnHold = 0; - slave.broodmotherCountDown = 0; - }, - [], - "Abort" - )); - } - } - App.UI.DOM.appendNewElement("span", fertilityBlock, note, "note"); - App.UI.DOM.appendNewElement("div", fertilityBlock, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - } - if ( - (slave.pregKnown === 1) && - (V.pregSpeedControl === 1) && - ( - slave.breedingMark !== 1 || - V.propOutcome === 0 || - V.eugenicsFullControl === 1 || - V.arcologies[0].FSRestart === "unset" - ) && - (slave.indentureRestrictions < 1) && - (slave.broodmother === 0) && - V.seePreg !== 0 - ) { - let title = document.createElement('div'); - let underline = document.createElement('span'); - underline.style.textDecoration = "underline"; - underline.textContent = "Pregnancy control"; - title.appendChild(underline); - title.append(": "); - - if (slave.pregControl === "labor suppressors") { - title.append("Labor is suppressed. "); - } else if (slave.pregControl === "slow gestation") { - title.append("Slowed gestation speed. "); - } else if (slave.pregControl === "speed up") { - title.append("Faster gestation speed, staffed clinic recommended. "); - } else { - title.append("Normal gestation and birth. "); - } - fertilityBlock.appendChild(title); - - linkArray = []; - if (slave.pregControl !== "none") { - linkArray.push(App.UI.DOM.link( - `Normal ${slave.preg < slave.pregData.normalBirth ? "Gestation" : "Birth"}`, - () => { - slave.pregControl = "none"; - App.UI.SlaveInteract.fertility(slave); - }, - )); - } - if (slave.preg < slave.pregData.normalBirth) { - if (slave.pregControl !== "slow gestation") { - linkArray.push(App.UI.DOM.link( - `Slow Gestation`, - () => { - slave.pregControl = "slow gestation"; - App.UI.SlaveInteract.fertility(slave); - }, - )); - } - if (slave.pregControl !== "speed up") { - linkArray.push(App.UI.DOM.link( - `Fast Gestation`, - () => { - slave.pregControl = "speed up"; - App.UI.SlaveInteract.fertility(slave); - }, - )); - } - } - if (slave.preg >= slave.pregData.minLiveBirth) { - if (slave.pregControl !== "labor suppressors") { - linkArray.push(App.UI.DOM.link( - `Suppress Labor`, - () => { - slave.pregControl = "labor suppressors"; - App.UI.SlaveInteract.fertility(slave); - }, - )); - } - } - App.UI.DOM.appendNewElement("div", fertilityBlock, App.UI.DOM.generateLinksStrip(linkArray), "choices"); - } - return jQuery('#fertility-block').empty().append(fertilityBlock); -}; - -App.UI.SlaveInteract.curatives = function(slave) { - const curativeOptions = []; - - curativeOptions.push({text: `None`, updateSlave: {curatives: 0}}); - curativeOptions.push({text: `Preventatives`, updateSlave: {curatives: 1}}); - curativeOptions.push({text: `Curatives`, updateSlave: {curatives: 2}}); - let el = document.createElement('div'); - let title = document.createElement('div'); - title.append(`Health: `); - let chosenOption = document.createElement('span'); - chosenOption.style.fontWeight = "bold"; - if (slave.curatives > 1) { - chosenOption.textContent = `curatives`; - } else if (slave.curatives > 0) { - chosenOption.textContent = `preventatives`; - } else { - chosenOption.textContent = `none`; - } - title.appendChild(chosenOption); - title.append(`.`); - let link = document.createElement('div'); - link.className = "choices"; - link.appendChild(App.UI.SlaveInteract.generateRows(curativeOptions, slave)); - el.append(title); - el.append(link); - return jQuery('#curatives').empty().append(el); -}; - -App.UI.SlaveInteract.aphrodisiacs = function(slave) { - const aphrodisiacOptions = []; - - aphrodisiacOptions.push({text: `None`, updateSlave: {aphrodisiacs: 0}}); - aphrodisiacOptions.push({text: `Aphrodisiacs`, updateSlave: {aphrodisiacs: 1}}); - aphrodisiacOptions.push({text: `Extreme aphrodisiacs`, updateSlave: {aphrodisiacs: 2}}); - aphrodisiacOptions.push({text: `Anaphrodisiacs`, updateSlave: {aphrodisiacs: -1}, note: `Suppresses libido`}); - - - let el = document.createElement('div'); - let title = document.createElement('div'); - title.append(`Aphrodisiacs: `); - let chosenOption = document.createElement('span'); - chosenOption.style.fontWeight = "bold"; - if (slave.aphrodisiacs > 1) { - chosenOption.textContent = `extreme`; - } else if (slave.aphrodisiacs > 0) { - chosenOption.textContent = `applied`; - } else if (slave.aphrodisiacs === -1) { - chosenOption.textContent = `anaphrodisiacs`; - } else { - chosenOption.textContent = `none`; - } - title.appendChild(chosenOption); - title.append(`.`); - let link = document.createElement('div'); - link.className = "choices"; - link.appendChild(App.UI.SlaveInteract.generateRows(aphrodisiacOptions, slave)); - el.append(title); - el.append(link); - return jQuery('#aphrodisiacs').empty().append(el); -}; - -/** - * @param {App.Entity.SlaveState} slave - */ -App.UI.SlaveInteract.incubator = function(slave) { - const { - // eslint-disable-next-line no-unused-vars - he, - him, - his, - hers, - himself, - boy, - He, - His - } = getPronouns(slave); - V.reservedChildren = FetusGlobalReserveCount("incubator"); - let _reservedIncubator = WombReserveCount(slave, "incubator"); - let _reservedNursery = WombReserveCount(slave, "nursery"); - let _WL = slave.womb.length; - let el = document.createElement('div'); - - if (V.incubator > 0) { - if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") { - if ((slave.assignment !== Job.DAIRY || V.dairyPregSetting === 0) && (slave.assignment !== Job.FARMYARD || V.farmyardBreeding === 0)) { - let title = document.createElement('div'); - let link = document.createElement('div'); - link.className = "choices"; - if (_WL - _reservedNursery === 0) { - title.textContent = `${His} children are already reserved for ${V.nurseryName}`; - title.style.fontStyle = "italic"; - } else { - const freeTanks = (V.incubator - V.tanks.length); - if (_reservedIncubator > 0) { - if (_WL === 1) { - title.textContent = `${His} child will be placed in ${V.incubatorName}. `; - } else if (_reservedIncubator < _WL) { - title.textContent = `${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}.`; - } else if (_WL === 2) { - title.textContent = `Both of ${his} children will be placed in ${V.incubatorName}. `; - } else { - title.textContent = `All ${_reservedIncubator} of ${his} children will be placed in ${V.incubatorName}. `; - } - if ((_reservedIncubator + _reservedNursery < _WL) && (V.reservedChildren < freeTanks)) { - link.appendChild( - App.UI.DOM.link(`Keep another child`, () => wombUpdateIncubator(1, true)) - ); - if (_reservedIncubator > 0) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep one less child`, () => wombUpdateIncubator(1, false)) - ); - } - if (_reservedIncubator > 1) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateIncubator(9999, false)) - ); - } - if ((V.reservedChildren + _WL - _reservedIncubator) <= freeTanks) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep the rest of ${his} children`, () => wombUpdateIncubator(9999, true)) - ); - } - } else if ((_reservedIncubator === _WL) || (V.reservedChildren === freeTanks) || (_reservedIncubator - _reservedNursery >= 0)) { - link.appendChild( - App.UI.DOM.link(`Keep one less child`, () => wombUpdateIncubator(1, false)) - ); - if (_reservedIncubator > 1) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateIncubator(9999, false)) - ); - } - } - } else if (V.reservedChildren < freeTanks) { - title.textContent = `${He} is pregnant and you have `; - if (freeTanks === 1) { - title.textContent += `an `; - } - let tank = document.createElement('span'); - tank.className = "lime"; - tank.textContent = `available aging tank`; - if (freeTanks > 1) { - tank.textContent += `s`; - } - tank.textContent += `.`; - let _cCount = (_WL > 1 ? "a" : "the"); - link.appendChild( - App.UI.DOM.link(`Keep ${_cCount} child`, () => wombUpdateIncubator(1, true)) - ); - title.appendChild(tank); - if ((_WL > 1) && (V.reservedChildren + _WL) <= freeTanks) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep all of ${his} children`, () => wombUpdateIncubator(9999, true)) - ); - } - } else if (V.reservedChildren === freeTanks) { - title.textContent = `You have no available tanks for ${his} children. `; - } - } - el.append(title); - el.append(link); - } - } - } - - function wombUpdateIncubator(count, addToWomb) { - if (addToWomb) { - WombAddToGenericReserve(slave, "incubator", count); - } else { - WombCleanGenericReserve(slave, "incubator", count); - } - V.reservedChildren = FetusGlobalReserveCount("incubator"); - App.UI.SlaveInteract.refreshAll(slave); - } - - return jQuery('#incubator').empty().append(el); -}; - -App.UI.SlaveInteract.nursery = function(slave) { - const { - // eslint-disable-next-line no-unused-vars - he, - him, - his, - hers, - himself, - boy, - He, - His - } = getPronouns(slave); - let el = document.createElement('div'); - if (V.nursery > 0) { - V.reservedChildrenNursery = FetusGlobalReserveCount("nursery"); - let reservedIncubator = WombReserveCount(slave, "incubator"); - let reservedNursery = WombReserveCount(slave, "nursery"); - let _WL = slave.womb.length; - if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") { - if ((slave.assignment !== Job.DAIRY || V.dairyPregSetting === 0) && (slave.assignment !== Job.FARMYARD || V.farmyardBreeding === 0)) { - let title = document.createElement('div'); - let link = document.createElement('div'); - link.className = "choices"; - if (_WL - reservedIncubator === 0) { - V.reservedChildren = 0; - title.textContent = `${His} children are already reserved for ${V.incubatorName}`; - title.style.fontStyle = "italic"; - } else { - const freeCribs = (V.nursery - V.cribs.length); - if (reservedNursery > 0) { - if (_WL === 1) { - title.textContent = `${His} child will be placed in ${V.nurseryName}. `; - } else if (reservedNursery < _WL) { - title.textContent = `_reservedNursery of ${his} children will be placed in ${V.nurseryName}.`; - } else if (_WL === 2) { - title.textContent = `Both of ${his} children will be placed in ${V.nurseryName}. `; - } else { - title.textContent = `All ${reservedNursery} of ${his} children will be placed in ${V.nurseryName}. `; - } - if ((reservedIncubator + reservedNursery < _WL) && (V.reservedChildrenNursery < freeCribs)) { - link.appendChild( - App.UI.DOM.link(`Keep another child`, () => wombUpdateNursery(1, true)) - ); - - if (reservedNursery > 0) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep one less child`, () => wombUpdateNursery(1, false)) - ); - } - if (reservedNursery > 1) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateNursery(9999, false)) - ); - } - if ((V.reservedChildrenNursery + _WL - reservedNursery) <= freeCribs) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep the rest of ${his} children`, () => wombUpdateNursery(9999, true)) - ); - } - } else if ((reservedNursery === _WL) || (V.reservedChildrenNursery === freeCribs) || (reservedNursery - reservedIncubator >= 0)) { - link.appendChild( - App.UI.DOM.link(`Keep one less child`, () => wombUpdateNursery(1, false)) - ); - - if (reservedNursery > 1) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep none of ${his} children`, () => wombUpdateNursery(9999, false)) - ); - } - } - } else if (V.reservedChildrenNursery < freeCribs) { - title.textContent = `${He} is pregnant and you have `; - if (freeCribs === 1) { - title.textContent += `an `; - } - let crib = document.createElement('span'); - crib.className = "lime"; - crib.textContent = `available room`; - if (freeCribs > 1) { - crib.textContent += `s`; - } - crib.textContent += `.`; - let _cCount = (_WL > 1 ? "a" : "the"); - link.appendChild( - App.UI.DOM.link(`Keep ${_cCount} child`, () => wombUpdateNursery(1, true)) - ); - title.appendChild(crib); - if ((_WL > 1) && (V.reservedChildrenNursery + _WL) <= freeCribs) { - link.append(` | `); - link.appendChild( - App.UI.DOM.link(`Keep all of ${his} children`, () => wombUpdateNursery(9999, true)) - ); - } - } else if (V.reservedChildrenNursery === freeCribs) { - title.textContent = `You have no available rooms for ${his} children. `; - } - } - el.append(title); - el.append(link); - } - } - } - - function wombUpdateNursery(count, addToWomb) { - if (addToWomb) { - WombAddToGenericReserve(slave, "nursery", count); - } else { - WombCleanGenericReserve(slave, "nursery", count); - } V.reservedChildren = FetusGlobalReserveCount("nursery"); - App.UI.SlaveInteract.refreshAll(slave); - } - - return jQuery('#nursery').empty().append(el); -}; App.UI.SlaveInteract.custom = (function() { let el;