diff --git a/Changelog.txt b/Changelog.txt index 433e09d8bd901b4fdaa676634982c3ce97a41bc4..236a101a3095354fe34926c2cea1fcf5e63520f8 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -2,12 +2,18 @@ Pregmod 0.10.7.1-3.8.x + 11/06/2020 + + 2 + -weather updates -overhauled smart and dumb vibrators -added polyhydramnios, galactorrhea, neoteny and progeria genetic quirks -added gumjob trendsetting -added support for deep pregnancy editing to cheat edit slave new -RA can now be set to only apply once to a slave + -fixes + -further code optimization 10/04/2020 diff --git a/devTools/types/assistant.d.ts b/devTools/types/assistant.d.ts index c6093f3eab13d4f620c7d05659c665164e1f738f..d6eb8fbf6c879e98afed21be490d57c79444a4b5 100644 --- a/devTools/types/assistant.d.ts +++ b/devTools/types/assistant.d.ts @@ -1,6 +1,6 @@ interface assistant { appearance: "normal" | "monstergirl" | "shemale" | "amazon" | "businesswoman" | "goddess" | "hypergoddess" | "schoolgirl" | "loli" | "preggololi" | "fairy" | "pregnant fairy" | "slimegirl" | "angel" | "cherub" | "imp" | "witch" | "ERROR_1606_APPEARANCE_FILE_CORRUPT" | "incubus" | "succubus"; - fsAppearance: "default" | "paternalist" | "degradationist" | "supremacist" | "subjugationist" | "roman revivalist" | "aztec revivalist" | "egyptian revivalist" | "edo revivalist" | "arabian revivalist" | "chinese revivalist" | "chattel religionist" | "repopulation focus" | "eugenics" | "physical idealist" | "hedonistic decadence" | "gender radicalist" | "gender fundamentalist" | "asset expansionist" | "transformation fetishist" | "pastoralist" | "maturity preferentialist" | "youth preferentialist" | "slimness enthusiast" | "body purist" | "intellectual dependency" | "slave professionalism" | "petite admiration" | "statuesque glorification" | "neo imperialist"; + fsAppearance: "default" | "paternalist" | "degradationist" | "supremacist" | "subjugationist" | "roman revivalist" | "aztec revivalist" | "egyptian revivalist" | "edo revivalist" | "arabian revivalist" | "chinese revivalist" | "chattel religionist" | "repopulation focus" | "eugenics" | "physical idealist" | "hedonistic decadence" | "gender radicalist" | "gender fundamentalist" | "asset expansionist" | "transformation fetishist" | "pastoralist" | "maturity preferentialist" | "youth preferentialist" | "slimness enthusiast" | "body purist" | "intellectual dependency" | "slave professionalism" | "petite admiration" | "statuesque glorification" | "neoimperialist"; personality: 1 | 0; name: string; power: number; @@ -65,5 +65,5 @@ interface fsAppearance { "slave professionalism": string, "petite admiration": string, "statuesque glorification": string, - "neo imperialist": string, + "neoimperialist": string, } \ No newline at end of file diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index b06a6b49a996227e5ac7df68662632f812bc2155..5d34499acb133f50d59815133f687494efec9c52 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -1,6 +1,6 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. - pmod: "3.8.0", + pmod: "3.8.2", commitHash: null, release: 1109 // When gettting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. }; diff --git a/src/endWeek/brothelReport.js b/src/endWeek/brothelReport.js index cfe0b2bb3d81490e36b9889a4f2b48ef78173709..a7df34a613a6ae9de947f566c4052414ed32a003 100644 --- a/src/endWeek/brothelReport.js +++ b/src/endWeek/brothelReport.js @@ -1,13 +1,13 @@ globalThis.brothelReport = function() { const el = document.createElement("p"); - let His, He, he, him, his, himself, wife; let r; const brothelStats = document.createElement("span"); el.append(brothelStats); const slaves = App.Utils.sortedEmployees(App.Entity.facilities.brothel); - let SL = slaves.length, FLsFetish = 0, profits = 0; + const SL = slaves.length; + let profits = 0; V.legendaryWhoreID = 0; V.legendaryWombID = 0; @@ -18,6 +18,7 @@ globalThis.brothelReport = function() { const brothelNameCaps = capFirstChar(V.brothelName); function madamText() { + let FLsFetish = 0; let r = []; if (V.MadamID !== 0) { if (S.Madam.health.condition < -80) { @@ -58,9 +59,9 @@ globalThis.brothelReport = function() { } /* Make sure we have registered living expenses as for any other slave */ getSlaveStatisticData(S.Madam, V.facility.brothel); - ({ + const { he, him, his, himself, He, His, wife - } = getPronouns(S.Madam)); + } = getPronouns(S.Madam); /* apply following SA passages to facility leader */ r = []; @@ -211,9 +212,6 @@ globalThis.brothelReport = function() { } if ((SL + V.brothelSlavesGettingHelp < 10) && V.MadamNoSex !== 1 && !slaveResting(S.Madam)) { - ({ - he, him, his, himself, He, His, wife - } = getPronouns(S.Madam)); let oldCash = V.cash; if (V.showEWD !== 0) { App.Events.addParagraph( @@ -289,9 +287,6 @@ globalThis.brothelReport = function() { } let oldCash = V.cash; for (const slave of slaves) { - ({ - he, him, his, himself, He, His, wife - } = getPronouns(slave)); if ((V.legendaryWombID === 0) && (!isAmputee(slave)) && (slave.preg > slave.pregData.normalBirth / 1.33) && (slave.broodmother === 0) && (slave.eggType === "human") && (slave.counter.births > 10) && (slave.devotion > 50) && (slave.prestige === 0)) { V.legendaryWombID = slave.ID; } @@ -335,6 +330,7 @@ globalThis.brothelReport = function() { } if (V.showEWD !== 0) { + const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); if (V.seeImages && V.seeReportImages) { App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); @@ -349,17 +345,16 @@ globalThis.brothelReport = function() { } App.Events.addNode(slaveEntry, r, "div"); - const indented = document.createElement("div"); - indented.classList.add("indent"); App.Events.addNode( - indented, + slaveEntry, [ He, App.SlaveAssignment.whore(slave), App.SlaveAssignment.standardSlaveReport(slave, false) - ] + ], + "div", + "indented" ); - slaveEntry.append(indented); } else { // discard return values silently App.SlaveAssignment.choosesOwnJob(slave); diff --git a/src/endWeek/economics/fsDevelopments.js b/src/endWeek/economics/fsDevelopments.js index 4651c79739bf7adfaec028e433a3d8f92caa66f6..54bc362f3737f342e0f63e9453e24ff69d27903c 100644 --- a/src/endWeek/economics/fsDevelopments.js +++ b/src/endWeek/economics/fsDevelopments.js @@ -451,7 +451,7 @@ App.EndWeek.FSDevelopments = function() { if (["amazon", "businesswoman", "incubus", "shemale", "angel"].includes(V.assistant.fsAppearance)) { V.arcologies[0].FSNeoImperialist += 0.1 * V.FSSingleSlaveRep; seed = 1; - } else if (V.assistant.fsAppearance === "neo imperialist") { + } else if (V.assistant.fsAppearance === "neoimperialist") { V.arcologies[0].FSNeoImperialist += 0.1 * V.FSSingleSlaveRep; seed = 2; } @@ -1262,7 +1262,7 @@ App.EndWeek.FSDevelopments = function() { } if (V.arcologies[0].FSNeoImperialist < 0) { FutureSocieties.remove("FSNeoImperialist"); - if (V.assistant.fsAppearance === "neo imperialist") { + if (V.assistant.fsAppearance === "neoimperialist") { V.assistant.fsAppearance = "default"; } r.push(`<span class="red">Your future society project has failed:</span> your citizens were repelled from your idea more than they were attracted to it. <span class="yellow">You may select another option, or elect to try again.</span>`); diff --git a/src/endWeek/reports/clubReport.js b/src/endWeek/reports/clubReport.js new file mode 100644 index 0000000000000000000000000000000000000000..de98b3b10aa2a49b8c96c8edccb3b48456b25b6d --- /dev/null +++ b/src/endWeek/reports/clubReport.js @@ -0,0 +1,269 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.clubReport = function() { + const el = new DocumentFragment(); + let r; + let he, him, his, He, His, wife, himself; + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.club); + const DL = slaves.length; + V.legendaryEntertainerID = 0; + let FLsFetish = 0; + V.legendaryWombID = 0; + + // Statistics gathering; income is rep boosts in numbers, and profit will be rep per cash unit, or cash unit per rep + V.facility = V.facility || {}; + V.facility.club = initFacilityStatistics(V.facility.club); + const clubStats = document.createElement("div"); + el.append(clubStats); + + if (S.DJ) { + r = []; + if (S.DJ.health.condition < -80) { + improveCondition(S.DJ, 20); + } else if (S.DJ.health.condition < -40) { + improveCondition(S.DJ, 15); + } else if (S.DJ.health.condition < 0) { + improveCondition(S.DJ, 10); + } else if (S.DJ.health.condition < 90) { + improveCondition(S.DJ, 7); + } + if (S.DJ.devotion <= 60) { + S.DJ.devotion += 5; + } + if (S.DJ.trust < 60) { + S.DJ.trust += 3; + } + if (S.DJ.fetishStrength <= 95) { + if (S.DJ.fetish !== "humiliation") { + if (fetishChangeChance(S.DJ) > random(0, 100)) { + FLsFetish = 1; + S.DJ.fetishKnown = 1; + S.DJ.fetish = "humiliation"; + } + } else if (S.DJ.fetishKnown === 0) { + FLsFetish = 1; + S.DJ.fetishKnown = 1; + } else { + FLsFetish = 2; + S.DJ.fetishStrength += 4; + } + } + if (S.DJ.rules.living !== "luxurious") { + S.DJ.rules.living = "luxurious"; + } + if (S.DJ.rules.rest !== "restrictive") { + S.DJ.rules.rest = "restrictive"; + } + /* Make sure we have registered living expenses as for any other slave */ + getSlaveStatisticData(S.DJ, V.facility.club); + ({ + he, him, his, He, His, wife + } = getPronouns(S.DJ)); + r.push(`${SlaveFullName(S.DJ)} is performing as the DJ.`); + if (S.DJ.relationship === -3 && S.DJ.devotion > 50) { + r.push(`${He} tries ${his} best to be your energetic, cheerful ${wife}.`); + } + if (FLsFetish === 1) { + r.push(`${He}'s expected to be the innovative, beautiful DJ spinning beats one minute, and come out of ${his} booth to grind on the floor the next; ${he} enjoys the interplay, and finds greater <span class="lightcoral">pleasure in exhibitionism.</span>`); + } else if ((FLsFetish === 2)) { + r.push(`Every day ${he} gets to enjoy hundreds of stares on ${his} skin, and <span class="lightsalmon">becomes more of an exhibitionist.</span>`); + } + if (getBestVision(S.DJ) === 0) { + r.push(`${His} lack of eyesight doesn't slow ${him} down; rather, it strengthens ${his} other senses. ${His} tracks have a distinct sound, since ${he} experiences noise as ${his} sight.`); + } + if (S.DJ.skill.entertainment <= 10) { + r.push(`Though ${S.DJ.slaveName} does ${his} best to lead on the club, with ${his} lack of skill ${he} can do little.`); + } else if (S.DJ.skill.entertainment <= 30) { + r.push(`${S.DJ.slaveName}'s basic skills marginally <span class="green">improve</span> the atmosphere in ${V.clubName}.`); + } else if (S.DJ.skill.entertainment <= 60) { + r.push(`${S.DJ.slaveName}'s skills <span class="green">improve</span> the atmosphere in ${V.clubName}.`); + } else if (S.DJ.skill.entertainment < 100) { + r.push(`${S.DJ.slaveName}'s skills greatly <span class="green">improve</span> the atmosphere in ${V.clubName}.`); + } else if (S.DJ.skill.entertainment >= 100) { + r.push(`${S.DJ.slaveName}'s mastery immensely <span class="green">improves</span> the atmosphere in ${V.clubName}.`); + } + if (S.DJ.muscles > 5 && S.DJ.muscles <= 95) { + r.push(`${His} toned body helps ${him} lead ${his} fellow club sluts by letting ${him} dance all night.`); + } + if (S.DJ.intelligence + S.DJ.intelligenceImplant > 15) { + r.push(`${He}'s smart enough to make an actual contribution to the music, greatly enhancing the entire experience.`); + } + if (S.DJ.face > 95) { + r.push(`${His} great beauty is a further draw, even when ${he}'s in ${his} DJ booth, but especially when ${he} comes out to dance.`); + } + if (setup.DJCareers.includes(S.DJ.career)) { + r.push(`${He} has musical experience from ${his} life before ${he} was a slave, a grounding that gives ${his} tracks actual depth.`); + } else if (S.DJ.skill.DJ >= V.masteredXP) { + r.push(`${He} has musical experience from working for you, giving ${his} tracks actual depth.`); + } else { + S.DJ.skill.DJ += random(1, Math.ceil((S.DJ.intelligence + S.DJ.intelligenceImplant) / 15) + 8); + } + App.Events.addNode(el, r, "p", "indent"); + if (DL + V.clubSlavesGettingHelp < 10 && V.DJnoSex !== 1 && !slaveResting(S.DJ)) { + if (V.legendaryEntertainerID === 0 && S.DJ.prestige === 0 && S.DJ.skill.entertainment >= 100 && S.DJ.devotion > 50) { + V.legendaryEntertainerID = S.DJ.ID; + } + App.Events.addNode( + el, + [`Since ${he} doesn't have enough sluts in ${V.clubName} to make it worthwhile for ${him} to be on stage 24/7, ${he} spends ${his} extra time slutting it up ${himself}. ${He} has sex with ${S.DJ.sexAmount} citizens, <span class="green">pleasing them immensely,</span> since it's more appealing to fuck the DJ than some club slut.`], + "div", + "indent" + ); + if (V.showEWD !== 0) { + App.Events.addNode( + el, + [ + He, + App.SlaveAssignment.serveThePublic(S.DJ) + ], + "div", + "indent" + ); + } else { + App.SlaveAssignment.serveThePublic(S.DJ); + } + } + } + + if (DL > 0) { + r = []; + if (DL !== 1) { + r.push(App.UI.DOM.makeElement("span", `The ${DL} slaves pleasing citizens in ${V.clubName}`, "bold")); + } else { + r.push(App.UI.DOM.makeElement("span", `The one slave pleasing citizens in ${V.clubName}`, "bold")); + } + r.push(`worked hard to <span class="green">increase your reputation</span> this week.`); + App.Events.addNode(el, r, "p", "indent"); + } + + if (S.DJ) { + const slave = S.DJ; + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const DJEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", DJEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + DJEntry.append(App.EndWeek.favoriteIcon(slave), " "); + App.Events.addNode( + DJEntry, + [ + App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name"), + `is performing as the DJ in ${V.clubName}.`, + App.SlaveAssignment.standardSlaveReport(slave, false), + ] + ); + } else { + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + if (DL > 0) { + for (const slave of slaves) { + ({ + he, him, his, He, His, wife + } = getPronouns(slave)); + if (V.legendaryEntertainerID === 0 && slave.prestige === 0 && slave.skill.entertainment >= 100 && slave.devotion > 50) { + V.legendaryEntertainerID = slave.ID; + } + if (V.legendaryWombID === 0 && !isAmputee(slave) && slave.preg > slave.pregData.normalBirth / 1.33 && slave.broodmother === 0 && slave.eggType === "human" && slave.counter.births > 10 && slave.devotion > 50 && slave.prestige === 0) { + V.legendaryWombID = slave.ID; + } + if (slave.devotion <= 20 && slave.trust >= -20) { + slave.devotion -= 5; + slave.trust -= 5; + } else if (slave.devotion < 45) { + slave.devotion += 4; + } else if (slave.devotion > 50) { + slave.devotion -= 4; + } + + if (slave.trust < 30) { + slave.trust += 5; + } + + if (slave.health.condition < -80) { + improveCondition(slave, 20); + } else if ((slave.health.condition < -40)) { + improveCondition(slave, 15); + } else if ((slave.health.condition < 0)) { + improveCondition(slave, 10); + } else if ((slave.health.condition < 90)) { + improveCondition(slave, 7); + } + + if (slave.rules.living !== "normal") { + slave.rules.living = "normal"; + } + + if (V.showEWD !== 0) { + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); + r = []; + r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); + if (slave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(slave)); + } else { + r.push(`is serving in ${V.clubName}.`); + } + App.Events.addNode(slaveEntry, r, "div"); + + App.Events.addNode( + slaveEntry, + [ + He, + App.SlaveAssignment.serveThePublic(slave), + App.SlaveAssignment.standardSlaveReport(slave, false) + ], + "div", + "indented" + ); + } else { + // discard return values silently + App.SlaveAssignment.choosesOwnJob(slave); + App.SlaveAssignment.serveThePublic(slave); + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + App.Events.addNode(el, [App.Ads.report("club")], "p", "indented"); + + // Record statistics gathering + const b = State.variables.facility.club; + b.whoreIncome = 0; + b.customers = 0; + b.whoreCosts = 0; + b.rep = 0; + for (const si of b.income.values()) { + b.whoreIncome += si.income; + b.customers += si.customers; + b.whoreCosts += si.cost; + b.rep += si.rep; + } + b.adsCosts = State.variables.clubAdsSpending; + b.maintenance = State.variables.club * State.variables.facilityCost * (1.0 + 0.2 * State.variables.clubUpgradePDAs); + b.totalIncome = b.whoreIncome + b.adsIncome; + b.totalExpenses = b.whoreCosts + b.adsCosts + b.maintenance; + b.profit = b.totalIncome / b.totalExpenses; + if (V.clubDecoration !== "standard") { + App.Events.addNode( + el, + [ + `${capFirstChar(V.clubName)}'s customers enjoy <span class="green">having sex in ${V.clubDecoration} surroundings.</span>` + ], + "p", + "indented" + ); + } + + // Club stats + el.append(App.Facilities.Club.Stats(false)); + clubStats.append(App.Facilities.Club.Stats(true)); + } + return el; +}; diff --git a/src/endWeek/reports/dairyReport.js b/src/endWeek/reports/dairyReport.js new file mode 100644 index 0000000000000000000000000000000000000000..78b75d9d63353f74f24a0ee70f0da9298894f467 --- /dev/null +++ b/src/endWeek/reports/dairyReport.js @@ -0,0 +1,1415 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.dairyReport = function() { + const el = new DocumentFragment(); + let r; + + let MMWorkout = 0; + const BF = App.Data.misc.bioreactorFluids; + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.dairy); + const DL = slaves.length; + let anusesStretched = 0, cumWeek = 0, femCumWeek = 0, FLsFetish = 0, milkWeek = 0, balltacular = 0, boobtacular = 0, careerForgotten = 0, chemMinor = 0, chemSevere = 0, desterilized = 0, hateFilled = 0, horrified = 0, intelligenceLost = 0, mindbroken = 0, skillsLost = 0, stupidified = 0, vaginasStretched = 0; + let cmSlave, dsSlave, hfSlave, hrSlave, slSlave, cfSlave, stSlave, btSlave; + const inflatedSlaves = App.Facilities.Dairy.inflation(); + const dairySettings = V.dairyStimulatorsSetting + V.dairyFeedersSetting + V.dairyPregSetting; + const restrainedInjected = V.dairyRestraintsSetting + V.injectionUpgrade; + const boobsMultiplier = Math.trunc(V.injectionUpgrade * 2) + V.dairyRestraintsSetting + V.dairyFeedersSetting; + V.bioreactorPerfectedID = 0; + V.legendaryBallsID = 0; + V.legendaryCowID = 0; + V.milkmaidDevotionBonus = 1; + V.milkmaidHealthBonus = 0; + V.milkmaidTrustBonus = 1; + V.milkmaidDevotionThreshold = 45; + V.milkmaidTrustThreshold = 35; + let growth; + let cashValue; + let outputMilk; + let outputCum; + const dairyNameCaps = capFirstChar(V.dairyName); + + // Statistics gathering + V.facility = V.facility || {}; + V.facility.dairy = initFacilityStatistics(V.facility.dairy); + const dairyStats = document.createElement("div"); + el.append(dairyStats); + + if (V.MilkmaidID !== 0) { + r = []; + let milkmaidImpregnated = 0, milkers = 0, cummers = 0, breeders = 0, prostateStim = 0; + + for (const slave of slaves) { + if (slave.lactation > 0) { + milkers++; + } + if (slave.balls > 0 && slave.ballType === "human") { + cummers++; + } + if (slave.bellyPreg >= 500 && V.dairyPregSetting > 0) { + breeders++; + } + if (V.milkmaidImpregnates === 1 && canPenetrate(S.Milkmaid) && S.Milkmaid.pubertyXY === 1 && !slaveResting(S.Milkmaid)) { + if (canImpreg(slave, S.Milkmaid)) { + slave.preg = 1; + slave.pregSource = V.MilkmaidID; + slave.pregKnown = 1; + slave.pregWeek = 1; + milkmaidImpregnated++; + if (slave.mpreg === 1) { + slave.counter.anal += 10; + V.analTotal += 10; + } else { + slave.counter.vaginal += 10; + V.vaginalTotal += 10; + } + slave.pregType = setPregType(slave); + WombImpregnate(slave, slave.pregType, V.MilkmaidID, 1); + } + } + /* how much effort the MM must take to force a slave into a stall */ + if (slave.devotion <= 20) { + MMWorkout++; + } + if (slave.trust < 20) { + MMWorkout++; + } + if (slave.muscles >= 30 || slave.muscles < -30) { + MMWorkout++; + } + if (slave.weight >= 70) { + MMWorkout++; + } + if (slave.weight >= 160) { + MMWorkout++; + } + if (slave.boobs >= 20000) { + MMWorkout++; + } + if (slave.balls >= 30) { + MMWorkout++; + } + if (slave.belly >= 5000) { + MMWorkout++; + } + if (!canMove(slave)) { // big bonus if they can't move themselves and are fat as cows + if (slave.weight >= 70) { + MMWorkout += 2; + } + if (slave.weight >= 160) { + MMWorkout += 2; + } + if (slave.boobs >= 20000) { + MMWorkout += 2; + } + if (slave.balls >= 30) { + MMWorkout += 2; + } + if (slave.belly >= 5000) { + MMWorkout += 2; + } + } else if (!canWalk(slave)) { // smaller bonus if they are fat as cows and need assistance with moving + if (slave.weight >= 70) { + MMWorkout += 1; + } + if (slave.weight >= 160) { + MMWorkout += 1; + } + if (slave.boobs >= 20000) { + MMWorkout += 1; + } + if (slave.balls >= 30) { + MMWorkout += 1; + } + if (slave.belly >= 5000) { + MMWorkout += 1; + } + } + if (V.dairyStimulatorsSetting < 2 && S.Milkmaid.dick > 4 && canPenetrate(S.Milkmaid) && prostateStim !== 1) { + if (slave.balls > 0 && slave.prostate > 0) { + prostateStim = 1; + } + } + } + + if (S.Milkmaid.health.condition < 90) { + S.Milkmaid.curatives = 2; + } else { + S.Milkmaid.curatives = 0; + } + if (S.Milkmaid.diet !== "healthy") { + (S.Milkmaid.diet = "healthy"); + } + if (S.Milkmaid.devotion <= 60) { + S.Milkmaid.devotion += 5; + } + if (S.Milkmaid.trust < 60) { + S.Milkmaid.trust += 5; + } + if (S.Milkmaid.skill.oral > 0) { + V.milkmaidDevotionBonus += Math.trunc(S.Milkmaid.skill.oral / 30); + } + if (S.Milkmaid.health.condition >= 80) { + V.milkmaidHealthBonus++; + } + if (S.Milkmaid.rules.living !== "luxurious") { + S.Milkmaid.rules.living = "luxurious"; + } + if (S.Milkmaid.rules.rest !== "restrictive") { + S.Milkmaid.rules.rest = "restrictive"; + } + if (S.Milkmaid.fetishStrength <= 95) { + if (milkers >= cummers && milkers >= breeders) { + if (S.Milkmaid.fetish !== "boobs") { + if (fetishChangeChance(S.Milkmaid) > random(0, 100)) { + FLsFetish = 1; + S.Milkmaid.fetishKnown = 1; + S.Milkmaid.fetish = "boobs"; + } + } else if (S.Milkmaid.fetishKnown === 0) { + FLsFetish = 1; + S.Milkmaid.fetishKnown = 1; + } else { + FLsFetish = 2; + S.Milkmaid.fetishStrength += 4; + } + } else if (cummers >= breeders) { + if (S.Milkmaid.fetish !== "cumslut") { + if (fetishChangeChance(S.Milkmaid) > random(0, 100)) { + FLsFetish = 3; + S.Milkmaid.fetishKnown = 1; + S.Milkmaid.fetish = "cumslut"; + } + } else if (S.Milkmaid.fetishKnown === 0) { + FLsFetish = 3; + S.Milkmaid.fetishKnown = 1; + } else { + FLsFetish = 4; + S.Milkmaid.fetishStrength += 4; + } + } else { + if (S.Milkmaid.fetish !== "pregnancy") { + if (fetishChangeChance(S.Milkmaid) > random(0, 100)) { + FLsFetish = 5; + S.Milkmaid.fetishKnown = 1; + S.Milkmaid.fetish = "pregnancy"; + } + } else if (S.Milkmaid.fetishKnown === 0) { + FLsFetish = 5; + S.Milkmaid.fetishKnown = 1; + } else { + FLsFetish = 6; + S.Milkmaid.fetishStrength += 4; + } + } + } + getSlaveStatisticData(S.Milkmaid, V.facility.dairy); + const { + he, him, his, He, His, wife, girl + } = getPronouns(S.Milkmaid); + r.push(`${SlaveFullName(S.Milkmaid)} is serving as your Milkmaid.`); + if (S.Milkmaid.relationship === -3 && S.Milkmaid.devotion > 50) { + V.milkmaidDevotionBonus += 2; + V.milkmaidTrustBonus += 2; + r.push(`${He} tries ${his} best to be your perfect farm${wife}.`); + } + if (milkmaidImpregnated > 0) { + r.push(`It's ${his} responsibility to keep ${his} charges pregnant, and ${he} constantly`); + if (milkmaidImpregnated === 1) { + r.push(`breeds the one fertile cow.`); + } else { + r.push(`fills the ${milkmaidImpregnated} cows' cunts with ${his} cum.`); + } + if (S.Milkmaid.career === "a breeding bull") { + r.push(`${He} was conditioned to fill empty wombs, so ${he} takes a <span class="hotpink">deep pleasure</span> in ${his} job.`); + S.Milkmaid.devotion++; + } else if (S.Milkmaid.fetish === "pregnancy" && S.Milkmaid.fetishKnown === 1) { + r.push(`${He} has a pregnancy fetish, so ${he} finds ${his} job <span class="hotpink">quite enjoyable,</span> especially when ${he} gets to watch the cows swell with ${his} children.`); + S.Milkmaid.devotion += Math.ceil(S.Milkmaid.fetishStrength / 25); + S.Milkmaid.fetishStrength += 2; + } + actX(S.Milkmaid, "penetrative", (milkmaidImpregnated * 10)); + S.Milkmaid.need = 0; + } + switch (FLsFetish) { + case 1: + r.push(`In ${his} line of work, ${he} touches more breasts than even you do. ${He} lives in an atmosphere of quivering, heaving, milky breastflesh; of girls who shudder and moan when ${he} touches their creamy nipples. ${He} has <span class="lightcoral">become more of a breast ${girl}.</span>`); + break; + case 2: + r.push(`It's a hard life, pulling teats and washing cows, but it does <span class="lightsalmon">make ${him} more of a breast fetishist.</span>`); + break; + case 3: + r.push(`In ${his} line of work, ${he} touches more dicks and balls than most sluts. ${He} lives in an atmosphere of constant orgasm and ejaculation; of girls who shudder and moan when ${he} touches their engorged members. ${He} has <span class="lightcoral">become more of a cum ${girl}.</span>`); + break; + case 4: + r.push(`It's a hard life, cupping balls, cleaning dicks, and observing semen quality, but it does <span class="lightsalmon">make ${him} more of a cum fetishist.</span>`); + break; + case 5: + r.push(`In ${his} line of work, ${he} fondles more pregnancies than most clinics. ${He} lives in an atmosphere of swollen, hanging, baby-filled bellies; of girls who shudder and moan when ${he} runs ${his} hands across their bellies. ${He} has <span class="lightcoral">grown a taste for girls laden with child.</span>`); + break; + case 6: + r.push(`It's a hard life, washing bellies and inspecting pussies, but it does <span class="lightsalmon">make ${him} more of a pregnancy fetishist.</span>`); + break; + } + if (S.Milkmaid.muscles > 30) { + V.milkmaidHealthBonus++; + r.push(`${His} muscles help ${him} handle the fattest or most reluctant cow.`); + } + if (MMWorkout > random(1, 30 - S.Milkmaid.geneticQuirks.mLoss + S.Milkmaid.geneticQuirks.mGain) && S.Milkmaid.muscles < 60) { + r.push(`Constantly having to wrestle unruly or aiding heavy cows into their stalls forces ${him} to <span class="lime">build muscle.</span>`); + S.Milkmaid.muscles++; + } + if (S.Milkmaid.skill.oral > 30) { + r.push(`${His} skilled tongue helps ${him} keep ${his} cattle happy.`); + } + if (S.Milkmaid.skill.oral < 90) { + slaveSkillIncrease('oral', S.Milkmaid, 3); + } + if (S.Milkmaid.sexualQuirk === "caring") { + V.milkmaidTrustBonus++; + r.push(`${He}'s very caring, and does ${his} best to get the cows to trust ${him}.`); + } + if (S.Milkmaid.behavioralQuirk === "funny") { + V.milkmaidTrustBonus++; + r.push(`${He}'s funny, and does ${his} best to get the cows to trust ${him} by keeping them laughing.`); + } + if (setup.milkmaidCareers.includes(S.Milkmaid.career)) { + V.milkmaidHealthBonus++; + r.push(`${He} has career experience dealing with milk animals.`); + } else if (S.Milkmaid.skill.milkmaid >= V.masteredXP) { + V.milkmaidHealthBonus++; + r.push(`${He} has experience harvesting slave products from working for you.`); + } else { + S.Milkmaid.skill.milkmaid += random(1, Math.ceil((S.Milkmaid.intelligence + S.Milkmaid.intelligenceImplant) / 15) + 8); + } + if (prostateStim === 1) { + r.push(`${He} uses ${his} turgid cock to give prostate stimulation to slaves that need help ejaculating.`); + S.Milkmaid.need -= 50; + } + V.milkmaidDevotionThreshold += (5 * V.milkmaidDevotionBonus); + V.milkmaidTrustThreshold += (5 * V.milkmaidTrustBonus); + for (const slave of slaves) { + if (S.Milkmaid.rivalryTarget === slave.ID) { + const {he2} = getPronouns(slave).appendSuffix("2"); + r.push(`${He} either neglects or harasses ${his} ${rivalryTerm(S.Milkmaid)}, ${slave.slaveName}, making sure ${he2} is unhappy and uncomfortable.`); + slave.devotion -= 3; + slave.trust -= 3; + if (random(1, 100) > 65) { + S.Milkmaid.rivalry++; + slave.rivalry++; + } + } else if (S.Milkmaid.relationshipTarget === slave.ID) { + const {he2} = getPronouns(slave).appendSuffix("2"); + r.push(`${He} dotes over ${his} ${relationshipTerm(S.Milkmaid)}, ${slave.slaveName}, making sure ${he2} is happy and comfortable.`); + slave.devotion++; + slave.trust++; + } else if (areRelated(S.Milkmaid, slave)) { + const {he2} = getPronouns(slave).appendSuffix("2"); + r.push(`${He} pays special attention to ${his} ${relativeTerm(S.Milkmaid, slave)}, ${slave.slaveName}, making sure ${he2} is well kept and happy.`); + slave.trust++; + } + if (slave.prestigeDesc === "$He is remembered for winning best in show as a dairy cow.") { + if (slave.lactation > 0 && (slave.boobs - slave.boobsImplant) > 6000) { + r.push(`${He} spends extra time with ${slave.slaveName}, the well-known cow. ${He} is fascinated by ${slave.slaveName}'s massive ${commaNum(slave.boobs)}cc breasts and spends extra time massaging and kneading them to maximize production.`); + slave.devotion += 3; + slave.trust += 3; + } else { + r.push(`${He} is disappointed that the well-known cow ${slave.slaveName}${(slave.lactation === 0) ? ` isn't producing milk anymore` : `'s breasts have shrunken considerably from their heyday`}.`); + } + } + if (slave.prestigeDesc === "$He is remembered for winning best in show as a cockmilker.") { + if ((slave.balls > 6 && slave.dick !== 0) || (slave.balls > 4 && slave.dick !== 0 && slave.prostate > 1)) { + r.push(`${He} spends extra time with ${slave.slaveName}, the massive ejaculating cow. ${He} can't help but massage the cow's dick and testes to stimulate them further and coax more from them.`); + slave.devotion += 3; + slave.trust += 3; + } else { + r.push(`${He} is disappointed that the (formerly) massive ejaculating cow`); + if (slave.balls === 0 || slave.dick === 0) { + r.push(`${slave.slaveName} is incapable of giving cum.`); + } else if (slave.prostate < 2) { + r.push(`${slave.slaveName} no longer possesses a hyperactive prostate.`); + } else { + r.push(`${slave.slaveName}'s balls are considerably smaller than at their heyday.`); + } + } + } + if (slave.prestigeDesc === "$He is remembered for winning best in show as a breeder." && slave.bellyPreg >= 1500) { + const {his2} = getPronouns(slave).appendSuffix("2"); + r.push(`${He} spends extra time with ${slave.slaveName}, the well-known breeder. ${S.Milkmaid.slaveName} is fascinated by ${his2} growing pregnancy and popular womb. ${He} makes sure ${his2} belly and its occupants are nice and comfortable.`); + slave.devotion += 3; + slave.trust += 3; + } + } + App.Events.addNode(el, r, "p", "indent"); + } + + const bioreactors = App.Entity.facilities.dairy.nonEmployeeOccupantsCount; + if (DL + bioreactors > 0) { + r = []; + if (DL !== 1) { + r.push(App.UI.DOM.makeElement("span", `There are ${DL} cows in ${V.dairyName}.`, "bold")); + } else { + r.push(App.UI.DOM.makeElement("span", `There is one cow in ${V.dairyName}.`, "bold")); + } + if (V.dairyRestraintsSetting > 1) { + r.push(`The facility functions as an industrial slave products factory.`); + } + if (bioreactors > 0) { + r.push(`${bioreactors} milking machines have permanent biological components, making a total of ${bioreactors + DL} milk-producing bodies.`); + } + App.Events.addNode(el, r, "div"); + } + + if (V.MilkmaidID !== 0) { + const slave = S.Milkmaid; + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const milkMaidEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", milkMaidEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + milkMaidEntry.append(App.EndWeek.favoriteIcon(slave), " "); + App.Events.addNode( + milkMaidEntry, + [ + App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name"), + `is serving as your Milkmaid.`, + App.SlaveAssignment.standardSlaveReport(slave, false), + ] + ); + } else { + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + const oldCash = V.cash; + for (const slave of slaves) { + /* Special attention section */ + if (slave.devotion > 50 && slave.prestige === 0) { + if ( + V.legendaryCowID === 0 && slave.lactation > 0 && + (slave.boobs - slave.boobsImplant - slave.boobsMilk) > 6000 + ) { + V.legendaryCowID = slave.ID; + } + if ( + V.legendaryBallsID === 0 && slave.dick !== 0 && + (slave.balls > 5 || (slave.balls > 4 && slave.prostate > 1)) + ) { + V.legendaryBallsID = slave.ID; + } + } + + + /* Perform facility based rule changes */ + + // Set diet + if (V.dairySlimMaintain === 0) { + if (V.dairyWeightSetting === 0) { + if (slave.weight <= 30) { + slave.diet = "fattening"; + } else { + slave.diet = "healthy"; + } + } else if (V.dairyWeightSetting === 1) { + if (slave.weight <= 95) { + slave.diet = "fattening"; + } else { + slave.diet = "healthy"; + } + } else if (V.dairyWeightSetting === 2) { + if (slave.weight <= 130) { + slave.diet = "fattening"; + } else { + slave.diet = "healthy"; + } + } else if (V.dairyWeightSetting === 3) { + if (slave.weight <= 160) { + slave.diet = "fattening"; + } else { + slave.diet = "healthy"; + } + } else if (V.dairyWeightSetting === 4) { + if (slave.weight <= 195) { + slave.diet = "fattening"; + } else { + slave.diet = "healthy"; + } + } else if (V.dairyRestraintsSetting > 1) { + slave.diet = "healthy"; + } + } else if (slave.weight > 10) { + slave.diet = "restricted"; + } else if (slave.diet === "fattening" || slave.diet === "healthy" || V.dairyRestraintsSetting > 1) { + slave.diet = "healthy"; + } + + // Set clothing and accessories + if (V.dairyRestraintsSetting > 1) { + slave.collar = "none"; + slave.faceAccessory = "none"; + slave.mouthAccessory = "none"; + slave.choosesOwnClothes = 0; + slave.clothes = "no clothing"; + slave.vaginalAccessory = "none"; + slave.vaginalAttachment = "none"; + slave.dickAccessory = "none"; + slave.buttplug = "none"; + slave.chastityAnus = 0; + slave.chastityPenis = 0; + slave.chastityVagina = 0; + } + + // Set living standard + switch (V.dairyDecoration) { + case "Arabian Revivalist": + case "Aztec Revivalist": + case "Chattel Religionist": + case "Chinese Revivalist": + case "Degradationist": + case "Edo Revivalist": + case "Egyptian Revivalist": + case "Roman Revivalist": + case "Subjugationist": + case "Supremacist": + slave.rules.living = "spare"; + break; + default: + slave.rules.living = "normal"; + } + + // Set child destination + if (V.dairyPregSetting > 0) { + WombCleanGenericReserve(slave, "incubator", 9999); + WombCleanGenericReserve(slave, "nursery", 9999); + } + + /* General End of Week effects */ + const milkResults = App.SlaveAssignment.getMilked(slave); + milkWeek += milkResults.milk; + cumWeek += milkResults.cum; + if (V.showEWD !== 0) { + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); + r = []; + r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); + if (slave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(slave)); + } else { + r.push(`is serving as a cow in ${V.dairyName}.`); + } + App.Events.addNode(slaveEntry, r, "div"); + + const {He} = getPronouns(slave); + App.Events.addNode( + slaveEntry, + [ + He, + milkResults.text, + App.SlaveAssignment.standardSlaveReport(slave, false) + ], + "div", + "indent" + ); + } else { + // discard return values silently + App.SlaveAssignment.choosesOwnJob(slave); + App.SlaveAssignment.standardSlaveReport(slave, true); + } + + /* Facility Specific End of Week effects */ + if (slave.devotion <= 20 && slave.trust >= -20) { + slave.devotion -= 5; + slave.trust -= 5; + } + + // Heal + if (slave.health.condition < -80) { + improveCondition(slave, 20); + } else if (slave.health.condition < -40) { + improveCondition(slave, 10); + } else if (slave.health.condition < 0) { + improveCondition(slave, 7); + } else if (slave.health.condition < 90) { + improveCondition(slave, 3); + } + + // Empty inflation + if (slave.inflation > 0) { + deflate(slave); + } + + // Boobs grow + const gigantomastiaMod = slave.geneticQuirks.gigantomastia === 2 ? (slave.geneticQuirks.macromastia === 2 ? 3 : 2) : 1; + if (slave.lactation > 0 && (V.dairySlimMaintain === 0 || slave.boobs > 700)) { + if (slave.boobs < 2000) { + growth = 100; + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50; + } else if (slave.boobs < 10000 * gigantomastiaMod) { + growth = 25; + } else { + growth = 0; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + + // Prostate growth + if (slave.prostate === 1) { + slave.prostate = 2; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); + } + + // Undo Vasectomy + if (slave.vasectomy === 1) { + slave.vasectomy = 0; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); + } + + // Force lactation + if (V.dairySlimMaintain === 0) { + if (V.dairyImplantsSetting <= 1) { + if (slave.lactation < 2 && (slave.boobs > 300 || slave.balls === 0 || slave.lactation === 1 || V.dairyImplantsSetting === 1)) { + slave.lactation = 2; + slave.lactationDuration = 2; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); + } + } else if (V.dairyImplantsSetting === 3) { + if (slave.lactation < 1 && (slave.boobs > 300 || slave.balls === 0)) { + induceLactation(slave, 9); + } + } + } + + // Hormones + if (V.dairyHormonesSetting >= 0) { + if (slave.lactation > 0) { + slave.hormones = V.dairyHormonesSetting; + } else if (slave.balls > 0) { + slave.hormones = -1 * V.dairyHormonesSetting; + } else { + slave.hormones = V.dairyHormonesSetting; + } + } + + // Feeders + if (V.dairyFeedersUpgrade === 1 && V.dairyFeedersSetting > 0) { + if (V.dairySlimMaintain === 0 && slave.diet === "fattening") { + slave.weight += 2; + if (slave.weightDirection === 1) { + slave.weight += 2; + } + } + if (slave.health.condition < 75) { + improveCondition(slave, 25); + } else { + if (V.dairySlimMaintain === 0 && slave.lactation > 0) { + if (V.dairyStimulatorsSetting > 0) { + if (V.dairyFeedersSetting > 1) { + if (slave.boobs < 50000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } else { + /* slave.boobs = 50000;*/ + } + } else { + if (slave.boobs < 25000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + } + } else if (V.dairyFeedersSetting > 1) { + if (slave.boobs < 10000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + } else { + if (slave.boobs < 5000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + } + } + if (slave.balls > 0) { + const ballFormula = 10 * (slave.balls - restrainedInjected); + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.geneMods.NCS === 0 && slave.balls < 125) { + slave.balls++; + } else if ( + slave.geneMods.NCS === 1 && slave.balls < 125 && + random(1, 600) > (30 + ballFormula) + ) { + slave.balls++; + } + if (slave.balls >= 125) { + balltacular++; + btSlave = slave; + } + } else if (slave.balls < 10) { + if (slave.geneMods.NCS === 0 && random(1, 100) > (40 + ballFormula)) { + slave.balls++; + } else if ( + slave.geneMods.NCS === 1 && slave.balls < 125 && random(1, 50) > (40 + ballFormula)) { + slave.balls++; + } + if (slave.balls >= 10) { + balltacular++; + btSlave = slave; + } + } + if (slave.dick > 0) { + const dickFormula = 10 * (4 + slave.dick - restrainedInjected); + if (slave.dick < 10) { + if (slave.geneMods.NCS === 0 && random(1, 100) > dickFormula) { + slave.dick++; + } else if (slave.geneMods.NCS === 1 && random(1, 50) > dickFormula) { + slave.dick++; + } + } + } + } + } + } + + // Stimulators + if (V.dairyStimulatorsUpgrade === 1 && V.dairyStimulatorsSetting > 0) { + if (V.dairyStimulatorsSetting > 1 && slave.anus < 4) { + slave.anus++; + if (slave.anus >= 4) { + anusesStretched++; + } + } else if (slave.anus < 3) { + slave.anus++; + } + if (slave.health.condition < 60) { + improveCondition(slave, 20); + } else if (V.dairySlimMaintain === 0 && slave.lactation > 0) { + if (V.dairyFeedersSetting > 1) { + if (slave.boobs < 50000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + } else if (V.dairyFeedersSetting > 0) { + if (slave.boobs < 25000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + } else { + if (slave.boobs < 10000) { + if (V.arcologies[0].FSAssetExpansionistResearch === 1) { + if (slave.boobs < 2000) { + growth = 75 * boobsMultiplier + (50 / 4); + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50 * boobsMultiplier + (50 / 4); + } else { + growth = 25 * boobsMultiplier + (50 / 4); + } + } else { + growth = 25 * boobsMultiplier + ((50 - slave.physicalAge) / 4); + } + if (slave.boobs <= 20000 && slave.boobs + growth > 20000) { + boobtacular++; + } + if (slave.geneMods.NCS === 1) { + growth = Math.trunc(growth / 2); + } + slave.boobs += growth; + } + } + } + } + + // Restraints + if (V.dairyRestraintsSetting > 1) { + if (slave.lactation > 0) { + slave.lactationAdaptation += 1; + } + if (slave.muscles > -100) { + slave.muscles -= 1 + slave.geneticQuirks.mLoss; + } + if (slave.fetish === "mindbroken") { + if (slave.boobs > 48000 && (slave.balls >= 10 || slave.balls === 0)) { + V.bioreactorPerfectedID = slave.ID; + } + } else { + if (slave.sexualFlaw !== "self hating") { + if (slave.sexualFlaw !== "cum addict" || V.dairyFeedersSetting === 0) { + if (slave.sexualFlaw !== "anal addict" || V.dairyStimulatorsSetting === 0) { + if (slave.sexualFlaw !== "breeder" || slave.preg < 0 || V.dairyPregSetting === 0) { + if (V.dairyStimulatorsSetting > 1) { + if (slave.sexualFlaw !== "hates anal" && slave.sexualQuirk !== "painal queen") { + slave.sexualFlaw = "hates anal"; + } + } + if (V.dairyPregSetting > 1) { + if (slave.sexualFlaw !== "hates penetration" && slave.sexualQuirk !== "strugglefuck queen") { + slave.sexualFlaw = "hates penetration"; + } + } + if (V.dairyFeedersSetting > 1) { + if (slave.sexualFlaw !== "hates oral" && slave.sexualQuirk !== "gagfuck queen") { + slave.sexualFlaw = "hates oral"; + } + } + } + } + } + } + } + if (slave.chem > 250) { + chemSevere++; + } else if (slave.chem > 100) { + chemMinor++; + cmSlave = slave; + } + } + + // Stimulator + Feeders + Pregnancy + if (dairySettings > 5) { + if (slave.devotion <= 95 && slave.sexualFlaw !== "self hating") { + if (slave.sexualFlaw !== "breeder" || slave.preg < 0) { + if (slave.devotion > -75) { + slave.devotion -= 10; + if (slave.devotion < -65) { + hateFilled++; + hfSlave = slave; + } + } else if (slave.trust > -75) { + slave.trust -= 10; + if (slave.trust < -65) { + horrified++; + hrSlave = slave; + } + } else if (slave.skill.vaginal > 0) { + slave.skill.vaginal -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.skill.oral > 0) { + slave.skill.oral -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.skill.anal > 0) { + slave.skill.anal -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.career !== "a bioreactor") { + slave.career = "a bioreactor"; + careerForgotten++; + cfSlave = slave; + } else if (slave.intelligenceImplant > 0) { + slave.intelligenceImplant = Math.clamp(slave.intelligenceImplant - 5, 0, 30); + skillsLost++; + slSlave = slave; + } else if (slave.intelligence >= -15) { + slave.intelligence -= 5; + intelligenceLost++; + } else if (slave.devotion >= -20) { + slave.devotion -= 10; + } else if (slave.trust >= -20) { + slave.trust -= 10; + } else if (slave.skill.whoring > 0) { + slave.skill.whoring -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.skill.entertainment > 0) { + slave.skill.entertainment -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.intelligence >= -50) { + slave.intelligence -= 5; + if (slave.intelligence < -50) { + stupidified++; + stSlave = slave; + } + } else if (slave.fetish !== "mindbroken") { + slave.fetish = "mindbroken"; + mindbroken++; + } + } + } + if (slave.career !== "a bioreactor" && + ( + (slave.counter.milk > 1000 && slave.boobs > 12000) || + (slave.counter.cum > 1000 && slave.balls >= 10) + ) + ) { + slave.career = "a bioreactor"; + careerForgotten++; + cfSlave = slave; + } + if (V.arcologies[0].FSBodyPuristLaw === 0 && V.healthyDrugsUpgrade === 0) { + slave.chem += 5; + } else { + slave.chem += 2; + } + } else if (dairySettings > 3) { + if (slave.devotion < 75) { + if (slave.devotion > -75) { + slave.devotion -= 5; + if (slave.devotion < -70) { + hateFilled++; + hfSlave = slave; + } + } else if (slave.trust > -75) { + slave.trust -= 5; + if (slave.trust < -70) { + horrified++; + hrSlave = slave; + } + } else if (slave.skill.vaginal >= 20) { + slave.skill.vaginal -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.skill.oral >= 20) { + slave.skill.oral -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.skill.anal >= 20) { + slave.skill.anal -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.career !== "a bioreactor") { + slave.career = "a bioreactor"; + careerForgotten++; + cfSlave = slave; + } else if (slave.intelligenceImplant > 0) { + slave.intelligenceImplant = Math.clamp(slave.intelligenceImplant - 5, 0, 30); + skillsLost++; + slSlave = slave; + } else if (slave.intelligence >= -15) { + slave.intelligence -= 5; + intelligenceLost++; + } else if (slave.devotion >= -20) { + slave.devotion -= 8; + } else if (slave.trust >= -20) { + slave.trust -= 8; + } else if (slave.skill.whoring >= 20) { + slave.skill.whoring -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.skill.entertainment >= 20) { + slave.skill.entertainment -= 10; + skillsLost++; + slSlave = slave; + } else if (slave.intelligence >= -50) { + slave.intelligence -= 5; + if (slave.intelligence < -50) { + stupidified++; + stSlave = slave; + } + } else if (slave.fetish !== "mindbroken") { + slave.fetish = "mindbroken"; + mindbroken++; + } + } else if (slave.career !== "a bioreactor" && + ( + (slave.counter.milk > 1000 && slave.boobs > 12000) || + (slave.counter.cum > 1000 && slave.balls >= 10) + ) + ) { + slave.career = "a bioreactor"; + careerForgotten++; + cfSlave = slave; + } + if (V.arcologies[0].FSBodyPuristLaw === 0 && V.healthyDrugsUpgrade === 0) { + slave.chem += 2; + } else { + slave.chem++; + } + } + + // Pregnancy + if (V.dairyPregUpgrade === 1 && V.dairyPregSetting > 0) { + if (slave.ovaries === 1 && slave.vagina > -1) { + femCumWeek += girlCumAmount(slave); + if (slave.preg === -2) { + slave.preg = 0; + desterilized++; + dsSlave = slave; + } + if (isFertile(slave)) { + if (slave.eggType === "human") { + slave.preg = 1; + slave.pregWeek = 1; + slave.pregKnown = 1; + if (V.dairyPregSetting > 2) { + slave.pregType = random(10, 29); + } else if (V.dairyPregSetting > 1) { + slave.pregType = random(3, 6); + } else { + slave.pregType = either(1, 1, 1, 1, 2, 2, 2, 3, 3, 4); + } + slave.pregSource = -2; + WombImpregnate(slave, slave.pregType, -2, 1); + } /* closes eggType */ + if (slave.vagina === 0) { + slave.vagina++; + } + } else if (slave.pregKnown === 1) { + if (V.dairyPregSetting > 2) { + cashValue = 100; + } else if (V.dairyPregSetting > 1) { + cashValue = 50; + } else { + cashValue = 25; + } + cashX(cashValue, "slaveAssignmentDairy", slave); + if (V.dairyPregSetting > 1 && slave.vagina < 4) { + slave.vagina++; + if (slave.vagina === 4) { + vaginasStretched++; + } + } else if (slave.vagina < 3) { + slave.vagina++; + } + } + } + } + } // End slave loop. + + // Inflation + if (inflatedSlaves.milk > 0) { + milkWeek -= ((8 * inflatedSlaves.milk * 10) + 8); + } + if (inflatedSlaves.cum > 0) { + cumWeek -= ((80 * inflatedSlaves.cum * 10) + 80); + if (cumWeek < 0) { + cumWeek = 0; + } + } + + if (bioreactors > 0) { + r = []; + const tempCash = V.cash; + + let seed; + seed = (BF.XY.cum * V.bioreactorsXY) + (BF.herm.cum * V.bioreactorsHerm); + cumWeek += seed; + if (V.arcologies[0].FSPastoralistLaw === 1) { + cashValue = seed * random(40, 50); + } else if (V.arcologies[0].FSPastoralist !== "unset") { + cashValue = seed * (random(25, 35) + Math.trunc(V.arcologies[0].FSPastoralist / 10)); + } else { + cashValue = seed * random(25, 35); + } + cashX(cashValue, "menialBioreactors"); + + seed = (BF.XX.femCum * V.bioreactorsXX) + (BF.herm.femCum * V.bioreactorsHerm); + femCumWeek += seed; + if (V.arcologies[0].FSPastoralistLaw === 1) { + cashValue = seed * random(40, 50); + } else if (V.arcologies[0].FSPastoralist !== "unset") { + cashValue = seed * (random(25, 35) + Math.trunc(V.arcologies[0].FSPastoralist / 10)); + } else { + cashValue = seed * random(25, 35); + } + cashX(cashValue, "menialBioreactors"); + + seed = (BF.XX.milk * V.bioreactorsXX) + (BF.barren.milk * V.bioreactorsBarren) + (BF.XY.milk * V.bioreactorsXY) + (BF.herm.milk * V.bioreactorsHerm); + milkWeek += seed; + if (V.arcologies[0].FSPastoralist !== "unset" && V.arcologies[0].FSPastoralistLaw === 1) { + cashValue = seed * (13 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); + } else if (V.arcologies[0].FSPastoralist !== "unset") { + cashValue = seed * (8 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); + } else { + cashValue = seed * 9; + } + cashX(cashValue, "menialBioreactors"); + r.push(`${bioreactors} permanently converted biological`); + if (bioreactors > 1) { + r.push(`"machines" produce`); + } else { + r.push(`"machine" produces`); + } + r.push(`<span class="yellowgreen">${cashFormat(V.cash - tempCash)}</span> income.`); + App.Events.addParagraph(el, r); + } + + if (inflatedSlaves.milk > 0) { + cashX(forceNeg(Math.trunc((600 * (inflatedSlaves.milk) + 8) + random(50, 200))), "slaveAssignmentDairy"); + } + if (inflatedSlaves.cum > 0) { + cashX(forceNeg(Math.trunc((300 * (inflatedSlaves.cum + 8)) + random(25, 100))), "slaveAssignmentDairy"); + } + + const profits = V.cash - oldCash; + r = []; + + if (chemSevere > 1) { + r.push(`${chemSevere} cows' productivity is being reduced by the long term effects of industrial use.`); + } else if (chemSevere > 0) { + r.push(`One cow's productivity is being reduced by the long term effects of industrial use.`); + } + + if (chemMinor > 1) { + r.push(`${chemMinor} cows have been drugged and used long enough that they require increased curative doses, slightly reducing their output.`); + } else if (chemMinor > 0) { + const {he, his} = getPronouns(cmSlave); + r.push(`One cow has been drugged and used long enough that ${he} requires increased curative doses, slightly reducing ${his} output.`); + } + + if (desterilized > 1) { + r.push(`${desterilized} cows had minor health issues preventing their fertile womb from conceiving; the issues have been resolved and they have been impregnated.`); + } else if (desterilized > 0) { + const {he, his} = getPronouns(dsSlave); + r.push(`One cow had minor health issues preventing ${his} fertile womb from conceiving; they have been resolved and ${he} has been impregnated.`); + } + + if (hateFilled > 1) { + r.push(`${hateFilled} cows stopped struggling so much when fucked by the machines; it seems they have sunk into a fugue.`); + } else if (hateFilled > 0) { + const {he} = getPronouns(hfSlave); + r.push(`One cow stopped struggling so much when fucked by the machines; it seems ${he} has sunk into a fugue.`); + } + + if (horrified > 1) { + r.push(`${horrified} cows' emotional activity dropped significantly; this indicates acceptance that they are not likely to leave ${V.dairyName}, ever again.`); + } else if (horrified > 0) { + const {he} = getPronouns(hrSlave); + r.push(`One cow's emotional activity dropped significantly; this indicates acceptance that ${he} is not likely to leave ${V.dairyName}, ever again.`); + } + + if (skillsLost > 1) { + r.push(`${skillsLost} cows forgot skills due to their inability to focus on anything but machine rape.`); + } else if (skillsLost > 0) { + const {his} = getPronouns(slSlave); + r.push(`One cow forgot skills due to ${his} inability to focus on anything but machine rape.`); + } + + if (careerForgotten > 1) { + r.push(`${careerForgotten} cows forgot the details of their past professional lives; all they can remember now is this.`); + } else if (careerForgotten > 0) { + const {he, his} = getPronouns(cfSlave); + r.push(`One cow forgot the details of ${his} past professional life; all ${he} can remember now is this.`); + } + + if (vaginasStretched > 1) { + r.push(`${vaginasStretched} cows' vaginas were broken in for machine use, and are unlikely to be any use for anything other than receiving cum and medication, and giving birth.`); + } else if (vaginasStretched > 0) { + r.push(`One cow's vagina was broken in for machine use, and is unlikely to be any use for anything other than receiving cum and medication, and giving birth.`); + } + + if (anusesStretched > 1) { + r.push(`${anusesStretched} cows' anuses were loosened by machine sodomy, and are now permanently gaped.`); + } else if (anusesStretched > 0) { + r.push(`One cow's anus was loosened by machine sodomy, and is now permanently gaped.`); + } + + if (intelligenceLost > 1) { + r.push(`${intelligenceLost} cows suffered some loss of intelligence due to accumulated mental stress from life attached to a milking machine.`); + } else if (intelligenceLost > 0) { + r.push(`One cow suffered some loss of intelligence due to accumulated mental stress from life attached to a milking machine.`); + } + + if (stupidified > 1) { + r.push(`${stupidified} cows were so mentally dulled by use as biological factories that they were reduced to a very low level of intelligence.`); + } else if (stupidified > 0) { + const {he} = getPronouns(stSlave); + r.push(`One cow was so mentally dulled by use as biological factories that ${he} was reduced to a very low level of intelligence.`); + } + + if (mindbroken > 1) { + r.push(`${mindbroken} cows finally lost higher mental function, and are now nothing more than industrial equipment made of meat.`); + } else if (mindbroken > 0) { + r.push(`One cow finally lost higher mental function, and is now nothing more than industrial equipment made of meat.`); + } + + if (boobtacular > 1) { + r.push(`${boobtacular} cows grew past 30 kilograms of breasts, a remarkable advance in capacity.`); + } else if (boobtacular > 0) { + r.push(`One cow grew past 30 kilograms of breasts, a remarkable advance in capacity.`); + } + + if (balltacular > 1) { + r.push(`${balltacular} cows' testicles reached the largest size drug treatments can produce; the machines will now focus on buttfucking them with extra force.`); + } else if (balltacular > 0) { + const {him} = getPronouns(btSlave); + r.push(`One cow's testicles reached the largest size drug treatments can produce; the machines will now focus on buttfucking ${him} with extra force.`); + } + + if (V.dairyPregUpgrade === 1) { + if (V.dairyPregSetting >= 2) { + r.push(`Fertile cows make you a significant profit through contract pregnancies.`); + } else if (V.dairyPregSetting === 1) { + r.push(`Fertile cows make you a small profit through contract pregnancies.`); + } + } + cumWeek = Math.trunc(cumWeek / 10); + V.cumPipeline = cumWeek; + V.milkPipeline = milkWeek; + if (inflatedSlaves.milk > 0) { + outputMilk = ((8 * inflatedSlaves.milk * 10) + 8); + } else { + outputMilk = 0; + } + if (inflatedSlaves.cum > 0) { + outputCum = (((80 * inflatedSlaves.cum * 10) + 80) / 10); + } else { + outputCum = 0; + } + r.push(`${dairyNameCaps} produced ${commaNum(milkWeek + outputMilk)} liters of milk`); + if (cumWeek > 0) { + r.push(`and ${commaNum(cumWeek + outputCum)} liters of cum`); + } + r.push(`this week.`); + if (inflatedSlaves.milk > 0) { + r.push(`${commaNum(outputMilk)} liters of milk were pumped into your penthouse for filling slaves this week.`); + } + if (inflatedSlaves.cum > 0) { + if (inflatedSlaves.milk > 0) { + r.push(`and`); + } + r.push(`${commaNum(outputCum)} liters of cum were pumped into your penthouse`); + if (inflatedSlaves.milk > 0) { + r.push(`as well.`); + } else { + r.push(`this week.`); + } + } + if (femCumWeek > 0) { + r.push(`The machines also managed to reclaim ${commaNum(femCumWeek)} liters of salable vaginal secretions.`); + } + + if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (V.dairyPregSetting > 0) { + r.push(`The Societal Elite know what you are doing with your cows. <span class="red">They do not approve.</span>`); + V.failedElite += 5; + } + if (V.milkmaidImpregnates === 1) { + r.push(`The Societal Elite know you've ordered ${S.Milkmaid.slaveName} to impregnate your cows. <span class="red">They are not amused by your disinterest in eugenics.</span>`); + V.failedElite += 10; + } + } + + // Record statistics gathering + let b = State.variables.facility.dairy; + b.whoreIncome = 0; + b.whoreCosts = 0; + b.rep = 0; + for (let si of b.income.values()) { + b.whoreIncome += si.income; + b.whoreCosts += si.cost; + b.rep += si.rep; + } + b.maintenance = (V.bioreactorsXY + V.bioreactorsXX + V.bioreactorsHerm + V.bioreactorsBarren); + if (b.maintenance > 0) { + b.maintenance *= 100; + } else { + b.maintenance = 0; + } + b.maintenance += V.dairy * V.facilityCost * (1.0 + 0.2 * V.dairyFeedersUpgrade + 0.1 * V.dairyPregUpgrade); + b.totalIncome = b.whoreIncome; + b.totalExpenses = b.whoreCosts + b.maintenance; + b.profit = b.totalIncome - b.totalExpenses; + if (profits > 0) { + r.push(`The sale of these products makes a profit of <span class="yellowgreen">${cashFormat(profits)}.</span>`); + } else if (profits < 0) { + r.push(`Due to`); + if (V.dairyImplantsSetting !== 3) { + r.push(`one-off costs of hormonal implants to encourage fluid production,`); + } else { + r.push(`the need to induce lactation in some cows,`); + } + r.push(`your dairy made a loss of <span class="red">${cashFormat(profits)}.</span>`); + } else { + r.push(`Due to`); + if (V.dairyImplantsSetting !== 3) { + r.push(`one-off costs of hormonal implants to encourage fluid production`); + } else { + r.push(`the need to induce lactation in some cows`); + } + r.push(`paired with existing output, your dairy broke even this week.`); + } + + if (V.arcologies[0].FSPastoralistLaw === 1) { + r.push(`Slave products have completely replaced traditional dairy, making the facility extremely lucrative.`); + } + App.Events.addParagraph(el, r); + + if (V.dairySlimMaintainUpgrade === 1 && V.dairySlimMaintain === 1) { + r = []; + if (V.arcologies[0].FSSlimnessEnthusiast > 80) { + r.push(`Because of your arcology's great enthusiasm for small breasted slaves, the dairy's milking systems have been carefully overhauled and optimized for maximum milk extraction from slaves with smaller endowments — providing a significant boost to their otherwise modest output. This also prevents unfashionable breast expansion of already slim slaves through the milking process.`); + } else if (V.arcologies[0].FSSlimnessEnthusiast > 20) { + r.push(`In keeping with your arcology's ideals, ${V.dairyName} has been modified to handle slim slaves with minimal impact to their body shapes. This limits potential profitability, but prevents unfashionable breast expansion of already slim slaves through the milking process.`); + } else { + r.push(`Due to your arcology's lack of enthusiasm for small breasted slaves the dairy has discontinued using milking techniques that prevent breast growth through the milking process.`); + V.dairySlimMaintain = 0; + V.dairySlimMaintainUpgrade = 0; + } + App.Events.addParagraph(el, r); + } + + if (V.createBioreactors === 1 && V.bioreactorPerfectedID !== 0) { + const bioreactor = getSlave(V.bioreactorPerfectedID); + if (bioreactor) { + let gender; + if (bioreactor.ovaries === 1) { + if (bioreactor.balls === 0) { + V.bioreactorsXX++; + gender = "XX"; + } else { + V.bioreactorsHerm++; + gender = "herm"; + } + } else { + if (bioreactor.balls === 0) { + V.bioreactorsBarren++; + gender = "barren"; + } else { + V.bioreactorsXY++; + gender = "XY"; + } + } + const {he, He} = getPronouns(bioreactor); + const ageInWeeks = 52 * (V.retirementAge - bioreactor.physicalAge); + r = []; + r.push(`${SlaveFullName(bioreactor)}'s breasts,`); + if (bioreactor.balls > 0) { + r.push(`balls,`); + } + if (bioreactor.ovaries === 1) { + r.push(`belly,`); + } + r.push(`body, and mind have been completely adapted to synthesize useful products. ${He} has been reclassified as part of the machine ${he}'s now permanently attached to. This combination is projected to produce approximately`); + if (bioreactor.balls > 0) { + r.push(commaNum(1000 * Math.trunc(BF[gender].cum * ageInWeeks) / 1000)); + r.push(`liters of cum,`); + } + if (bioreactor.ovaries === 1) { + r.push(commaNum(100 * Math.trunc(BF[gender].femCum * ageInWeeks) / 100)); + r.push(`liters of vaginal secretions,`); + if (V.dairyPregSetting === 3) { + r.push((13 * (V.retirementAge - bioreactor.physicalAge)).toString()); + } else { + r.push((5 * (V.retirementAge - bioreactor.physicalAge)).toString()); + } + r.push(`slaves,`); + } + r.push(`and`); + r.push(commaNum(1000 * Math.trunc(BF[gender].milk * ageInWeeks) / 1000)); + r.push(`liters of milk over a ${V.retirementAge - bioreactor.physicalAge} year period before its biological components must be replaced.`); + App.Events.addParagraph(el, r); + removeSlave(bioreactor); + } + } + + if (V.dairyDecoration !== "standard") { + r = []; + r.push(`${dairyNameCaps}'s`); + r.push(App.UI.DOM.makeElement("span", `${V.dairyDecoration} style is well known.`, "green")); + App.Events.addParagraph(el, r); + } + + if (DL > 0) { + // Dairy stats + el.append(App.Facilities.Dairy.Stats(false)); + dairyStats.append(App.Facilities.Dairy.Stats(true)); + } + return el; +}; diff --git a/src/endWeek/reports/spaReport.js b/src/endWeek/reports/spaReport.js new file mode 100644 index 0000000000000000000000000000000000000000..f2057ae42464bce93b6889fd4233a9bc113ca749 --- /dev/null +++ b/src/endWeek/reports/spaReport.js @@ -0,0 +1,443 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.spaReport = function() { + const el = new DocumentFragment(); + let r; + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.spa); + let DL = slaves.length; + let bonusToggle = 0, healthBonus = 0, idleBonus = 0, restedSlaves = 0, restedSlave, devBonus; + + if (V.spaDecoration !== "standard") { + devBonus = 1; + } else { + devBonus = 0; + } + V.flSex = App.EndWeek.getFLSex(App.Entity.facilities.spa); /* FIXME: should be local, passed as a parameter to saRules */ + + if (V.AttendantID !== 0) { + r = []; + if (S.Attendant.health.condition < 100) { + improveCondition(S.Attendant, normalRandInt(20)); + } + if (S.Attendant.devotion <= 60) { + S.Attendant.devotion++; + } + if (S.Attendant.trust < 60) { + S.Attendant.trust++; + } + if (S.Attendant.rules.living !== "luxurious") { + S.Attendant.rules.living = "luxurious"; + } + let FLsFetish = 0; + if (S.Attendant.fetishStrength <= 95) { + if (S.Attendant.fetish !== "submissive") { + if (fetishChangeChance(S.Attendant) > random(0, 100)) { + FLsFetish = 1; + S.Attendant.fetishKnown = 1; + S.Attendant.fetish = "submissive"; + } + } else if (S.Attendant.fetishKnown === 0) { + FLsFetish = 1; + S.Attendant.fetishKnown = 1; + } else { + FLsFetish = 2; + S.Attendant.fetishStrength += 4; + } + } + if (S.Attendant.fetish === "none" || S.Attendant.fetish === "submissive") { + devBonus++; + } + S.Attendant.devotion += devBonus; + const { + He, His, + he, his, him, himself, wife + } = getPronouns(S.Attendant); + r.push(`${SlaveFullName(S.Attendant)} is serving as the spa attendant.`); + if (S.Attendant.relationship === -3 && S.Attendant.devotion > 50) { + r.push(`${He} tries ${his} best to be your perfect attentive, caring and loving ${wife}.`); + } + if (FLsFetish === 1) { + r.push(`When ${he} is paid a visit by a slave with sexual issues to work out, ${he} provides them with an understanding, willing, giving partner. ${He} finds real satisfaction in helping your slaves find sexual gratification, and <span class="lightsalmon">becomes a submissive.</span>`); + } else if ((FLsFetish === 2)) { + r.push(`Every new slave in the spa is a new person ${he} gets to connect with and serve. Sexually. <span class="lightsalmon">${He} becomes more submissive.</span>`); + } + if (setup.attendantCareers.includes(S.Attendant.career)) { + r.push(`${He} has experience with counseling from ${his} life before ${he} was a slave, making ${him} better at building rapport with troubled slaves, and giving ${him} a better chance of softening flaws into beneficial quirks.`); + bonusToggle = 1; + idleBonus++; + } else if (S.Attendant.skill.attendant >= V.masteredXP) { + r.push(`${He} has experience with counseling from working for you, making ${him} better at building rapport with troubled slaves, and giving ${him} a better chance of softening flaws into beneficial quirks.`); + bonusToggle = 1; + idleBonus++; + } else { + S.Attendant.skill.attendant += random(1, Math.ceil((S.Attendant.intelligence + S.Attendant.intelligenceImplant) / 15) + 8); + } + if (!canSee(S.Attendant)) { + r.push(`${His} blindness allows ${him} to deeply connect with ${his} charges.`); + idleBonus++; + } + if (S.Attendant.fetish === "none") { + r.push(`${S.Attendant.slaveName} respects the slaves lounging in the spa, allowing them to relax completely.`); + idleBonus++; + } else if (S.Attendant.fetish === "submissive") { + r.push(`${S.Attendant.slaveName} lets the slaves resting in the spa take the lead sexually, doing ${his} best to please them.`); + idleBonus++; + } else if (S.Attendant.fetishKnown === 1) { + r.push(`${S.Attendant.slaveName} can't keep ${his} ${hasBothArms(S.Attendant) ? `hands` : `hand`} to ${himself}, preventing the slaves in the spa from relaxing completely.`); + } + if (S.Attendant.visualAge > 35) { + r.push(`${His} apparent maturity encourages the slaves in the spa to relax and pour out their troubles to ${him}.`); + healthBonus++; + idleBonus++; + } + if (S.Attendant.intelligence + S.Attendant.intelligenceImplant > 15) { + r.push(`${He}'s so intelligent ${he} can suss out the cause of slaves' emotional issues and counsel them effectively.`); + idleBonus++; + } + if (isFertile(S.Attendant) || (S.Attendant.bellyPreg >= 1500) || (S.Attendant.counter.birthsTotal > 0) || (S.Attendant.bellyImplant >= 1500)) { + r.push(`${He} has a natural mothering instinct and really makes ${his} charges feel at home.`); + idleBonus++; + healthBonus++; + } + let attendantUsedCure = 0; + App.Events.addNode(el, r, "div", "indent"); + for (const slave of slaves) { + const {he2, his2, him2} = getPronouns(slave).appendSuffix("2"); + r = []; + if (slave.fetish === "mindbroken" && slave.health.condition > 20 && attendantUsedCure === 0 && V.spaFix !== 2) { + attendantUsedCure = 1; + if (random(1, 100) > 90 - S.Attendant.devotion) { + const curedSlave = App.UI.DOM.makeElement("div", null, "indent"); + const curedArray = [`<span class="green">Something almost miraculous has happened.</span> ${S.Attendant.slaveName} has always refused to believe that ${slave.slaveName} could not be reached, and has lavished patient tenderness on ${him2} in ${V.spaName}. ${slave.slaveName} has begun to respond, and is stirring from ${his2} mental torpor.`]; + slave.devotion = -3; + slave.sexualFlaw = "apathetic"; + slave.behavioralFlaw = either("hates men", "odd"); + slave.fetish = "none"; + slave.fetishKnown = 1; + const gp = V.genePool.find(s => s.ID === slave.ID); + if (gp.intelligence >= -95) { + slave.intelligence = gp.intelligence - 30; + } + if (V.arcologies[0].FSPaternalist !== "unset" && V.arcologies[0].FSPaternalist > 0) { + curedArray.push(`Society <span class="green">strongly approves</span> of${slave.slaveName} being restored to sanity, which advances ideals about enlightened slaveownership.`); + V.arcologies[0].FSPaternalist += 0.01 * V.FSSingleSlaveRep; + repX(2 * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel), "spa", slave); + } + App.Events.addNode(curedSlave, curedArray); + r.push(curedSlave); + } + } + const seed = bonusToggle * 10; + if (bonusToggle === 1 && slave.trust < 60) { + slave.trust++; + } + if (S.Attendant.rivalryTarget === slave.ID) { + r.push(`${He} constantly harasses ${his} ${rivalryTerm(S.Attendant)}, ${slave.slaveName}, preventing ${him2} from getting comfortable and forcing ${him2} to keep ${his2} guard up.`); + slave.devotion -= 4; + slave.trust -= 4; + if (random(1, 100) > 35) { + S.Attendant.rivalry++; + S.Attendant.rivalry++; + slave.rivalry++; + } + } else if (S.Attendant.relationshipTarget === slave.ID) { + r.push(`${He} dedicates most of ${his} attention to ${his} ${relationshipTerm(S.Attendant)}, ${slave.slaveName}, making ${his2} stress, both physical and mental, wash away.`); + slave.devotion += 3; + slave.trust += 3; + } else if (areRelated(S.Attendant, slave)) { + r.push(`${He} makes sure to spend extra time caring for ${his} ${relativeTerm(S.Attendant, slave)}, ${slave.slaveName}.`); + slave.trust++; + improveCondition(slave, 1); + } + switch (slave.prestigeDesc) { + case "$He is a famed Free Cities whore, and commands top prices.": + r.push(`${He} does ${his} best to relax the famous whore,${slave.slaveName}, making sure to`); + if (slave.vagina > 2 || slave.anus > 2) { + r.push(`pay special attention to ${his2} worn holes.`); + } else { + r.push(`get ${him2} clean and relaxed for ${his2} next usage.`); + } + slave.devotion += 3; + slave.trust += 3; + break; + case "$He is a famed Free Cities slut, and can please anyone.": + r.push(`${He} does ${his} best to soothe the famous entertainer, ${slave.slaveName}, letting ${him2} relax in blissful peace.`); + slave.devotion += 3; + slave.trust += 3; + break; + case "$He is remembered for winning best in show as a cockmilker.": + if (slave.balls > 6 && slave.dick !== 0) { + if (S.Attendant.fetish === "cumslut") { + r.push(`${He} can't keep ${his} ${hasBothArms(S.Attendant) ? `hands` : `hand`} off ${slave.slaveName}'s cock and balls, but ${he2} doesn't mind being milked constantly. Before long, strands of cum can be found floating all throughout the bath.`); + S.Attendant.fetishStrength += 4; + } else { + r.push(`${He} does ${his} best to accommodate ${slave.slaveName}'s massive genitals and tends to ${him2} whenever ${he2} feels a need for release.`); + if (random(1, 100) > 65 && S.Attendant.fetish === "none") { + r.push(`After taking several massive loads to the face, ${S.Attendant.slaveName} begins to find satisfaction in being coated in cum.`); + S.Attendant.fetish = "cumslut"; + } + } + } + slave.devotion += 3; + slave.trust += 3; + break; + case "$He is remembered for winning best in show as a dairy cow.": + if (slave.lactation > 0 && (slave.boobs - slave.boobsImplant) > 6000) { + if (S.Attendant.fetish === "boobs") { + r.push(`${He} can't keep ${his} ${hasBothArms(S.Attendant) ? `hands` : `hand`} off ${slave.slaveName}'s huge breasts, but ${he2} doesn't mind being milked constantly. Before long the bath gains a white tint.`); + S.Attendant.fetishStrength += 4; + S.Attendant.fetishStrength += 4; + } else { + r.push(`${He} does ${his} best to accommodate ${slave.slaveName}'s massive breasts and tends to ${him2} whenever ${he2} feels a need for release.`); + if (random(1, 100) > 65 && S.Attendant.fetish === "none") { + r.push(`After multiple milking sessions, ${S.Attendant.slaveName} begins to find ${himself} fantasizing about having giant milky breasts too.`); + S.Attendant.fetish = "boobs"; + } + } + slave.devotion += 3; + slave.trust += 3; + slave.lactationDuration = 2; + slave.boobs -= slave.boobsMilk; + slave.boobsMilk = 0; + } + break; + case "$He is remembered for winning best in show as a breeder.": + if (slave.bellyPreg >= 5000) { + if (S.Attendant.fetish === "pregnancy") { + r.push(`${He} can't keep ${his} ${hasBothArms(S.Attendant) ? `hands` : `hand`} off ${slave.slaveName}'s pregnancy, but ${he2} doesn't mind ${his2} full belly being fondled.`); + S.Attendant.fetishStrength += 4; + S.Attendant.fetishStrength += 4; + } else { + r.push(`${He} does ${his} best to accommodate ${slave.slaveName}'s pregnancy and to make sure the mother-to-be is happy and comfortable.`); + if (random(1, 100) > 65 && S.Attendant.fetish === "none") { + r.push(`After massaging ${slave.slaveName}'s growing belly multiple times, ${S.Attendant.slaveName} begins to find ${himself} fantasizing about being swollen with life too.`); + S.Attendant.fetish = "pregnancy"; + } + } + slave.devotion += 3; + slave.trust += 3; + } else { + if (S.Attendant.fetish === "pregnancy") { + r.push(`${He} can't help but pester ${slave.slaveName} with questions about ${his2} famous pregnancy, limiting ${his2} ability to truly relax.`); + slave.devotion += 1; + slave.trust += 1; + } else if (canGetPregnant(slave)) { + r.push(`${He} does ${his} best to encourage ${slave.slaveName}'s fertilization by performing any fertility boosting actions ${he} can.`); + slave.devotion += 3; + slave.trust += 3; + } + } + } + if ( + (S.Attendant.intelligence + S.Attendant.intelligenceImplant > 15) && + (attendantUsedCure === 0) && + (S.Attendant.intelligence + S.Attendant.intelligenceImplant + seed) > random(1, 200) && + (V.spaFix === 0) + ) { + if (slave.behavioralFlaw !== "none") { + SoftenBehavioralFlaw(slave); + attendantUsedCure += 1; + r.push(`${S.Attendant.slaveName} works carefully with ${slave.slaveName}, and successfully`); + r.push(App.UI.DOM.makeElement("span", `softens ${his2} behavioral flaw`, "green")); + r.push(`into an appealing quirk.`); + } else if (slave.sexualFlaw !== "none") { + SoftenSexualFlaw(slave); + attendantUsedCure += 1; + r.push(`${S.Attendant.slaveName} works carefully with ${slave.slaveName}, and successfully`); + r.push(App.UI.DOM.makeElement("span", `softens ${his2} sexual flaw`, "green")); + r.push(`into an appealing quirk.`); + } + } + if (slave.lactation > 0) { + r.push(`${S.Attendant.slaveName} takes care to keep ${slave.slaveName}'s breasts comfortably drained.`); + slave.lactationDuration = 2; + slave.boobs -= slave.boobsMilk; + slave.boobsMilk = 0; + } + App.Events.addNode(el, r, "div", "indent"); + } + + if (DL < V.spa) { + const seed = random(1, 10) + ((V.spa - DL) * (random(150, 170) + (idleBonus * 10))); + cashX(seed, "spa", S.Attendant); + r = []; + r.push(`Since ${he} doesn't have enough slaves to occupy all ${his} time, the spa takes in citizens' slaves on a contract basis and ${he} helps them too, earning <span class="yellowgreen"> ${cashFormat(seed)}.</span>`); + if (V.arcologies[0].FSHedonisticDecadence > 0 && DL === 0) { + r.push(`Society <span class="green">loves</span> being allowed to lounge in your spa, greatly advancing your laid back culture.`); + FutureSocieties.Change("Hedonistic", 2); + } + App.Events.addNode(el, r, "div", "indent"); + } + } + + if (DL > 0) { + r = []; + if (DL > 1) { + r.push(`There are ${DL} slaves`); + } else { + r.push(`There is one slave`); + } + r.push(`resting and recuperating in the spa.`); + if (V.arcologies[0].FSHedonisticDecadence > 0 && DL === 0) { + r.push(`Society <span class="green">approves</span> of your slaves being pampered this way, greatly advancing your laid back culture.`); + FutureSocieties.Change("Hedonistic", 1); + } + App.Events.addNode(el, r, "p", ["indent", "bold"]); + } + + if (S.Attendant) { + const slave = S.Attendant; + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const attendantEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", attendantEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + attendantEntry.append(App.EndWeek.favoriteIcon(slave), " "); + App.Events.addNode( + attendantEntry, + [ + App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name"), + `is serving as the Attendant in ${V.spaName}`, + App.SlaveAssignment.standardSlaveReport(slave, false), + ] + ); + } else { + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + for (const slave of slaves) { + const {He, he, his} = getPronouns(slave); + slave.devotion += devBonus; + improveCondition(slave, 5 + healthBonus); + if (slave.health.condition < -80) { + improveCondition(slave, 15); + } else if (slave.health.condition < -40) { + improveCondition(slave, 10); + } else if (slave.health.condition < 0) { + improveCondition(slave, 5); + } + if (V.spaUpgrade === 1 && slave.health.condition < 100) { + improveCondition(slave, normalRandInt(8)); + } + if (slave.devotion < 60 && slave.trust < 60) { + slave.devotion++; + slave.trust++; + } else if ((slave.trust < 40)) { + slave.trust += 10; + } else if ((slave.devotion < 40)) { + slave.devotion += 10; + } + switch (V.spaDecoration) { + case "Chattel Religionist": + case "Chinese Revivalist": + slave.rules.living = "normal"; + break; + case "Degradationist": + slave.rules.living = "spare"; + break; + default: + slave.rules.living = "luxurious"; + } + if (slave.health.condition >= 20 && slave.health.tired <= 30 && slave.trust > 60 && slave.devotion > 60 && slave.fetish !== "mindbroken" && slave.sexualFlaw === "none" && slave.behavioralFlaw === "none") { + const slaveFixed = App.UI.DOM.makeElement("p"); + App.Events.addNode( + slaveFixed, + [ + App.UI.DOM.makeElement("span", slave.slaveName, "slave-name"), + `is feeling well enough to leave ${V.spaName}, ` + ] + ); + r = []; + if (V.assignmentRecords[slave.ID]) { + const oldJob = V.assignmentRecords[slave.ID]; + assignJobSafely(slave, oldJob); + if (slave.choosesOwnAssignment === 1) { + r.push(`and ${he} is resting before choosing another task.`); + } else if (slave.assignment === "rest") { + if (oldJob !== "rest") { + r.push(`and since ${he} was unable to return to ${his} old task to ${oldJob}, ${his} assignment has defaulted to rest.`); + } else { + r.push(`so ${he} has returned to rest.`); + } + } else { + r.push(`so ${he} goes back to ${slave.assignment}.`); + } + } else { + r.push(`so ${his} assignment has defaulted to rest.`); + removeJob(slave, "rest in the spa"); + } + App.Events.addNode(slaveFixed, r, "span", "noteworthy"); + el.append(slaveFixed); + restedSlaves++; + restedSlave = slave; + DL--; + continue; + } + + if (V.showEWD !== 0) { + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); + } + slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); + r = []; + r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); + if (slave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(slave)); + } else { + r.push(`is resting in ${V.spaName}.`); + } + App.Events.addNode(slaveEntry, r, "div"); + + r = []; + r.push(He); + r.push(App.SlaveAssignment.rest(slave)); + + if (slave.fetish === "mindbroken") { + r.push(`${He} remains in the Spa, completely mindbroken.`); + } else if (slave.sexualFlaw !== "none" || slave.behavioralFlaw !== "none") { + r.push(`${He} remains in the Spa, stubborn in ${his} flaw.`); + } else if (slave.trust < 60 || slave.devotion < 60) { + r.push(`${He} remains in the Spa, as ${he} is still learning to accept life as a slave.`); + } else if (slave.health.condition < 20) { + r.push(`${He} remains in the Spa, as ${he} is benefiting from its healing properties.`); + } else if (slave.health.tired > 30) { + r.push(`${He} remains in the Spa, continuing to soak away ${his} fatigue.`); + } + r.push(App.SlaveAssignment.standardSlaveReport(slave, false)); + App.Events.addNode(slaveEntry, r, "div", "indent"); + } else { + // discard return values silently + App.SlaveAssignment.choosesOwnJob(slave); + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + if (restedSlaves > 0) { + const {he, him} = getPronouns(restedSlave); + r = []; + if (restedSlaves === 1) { + r.push(`One slave has rested until ${he} reached a state of <span class="hotpink">devotion</span> and <span class="mediumaquamarine">trust</span> and will leave the spa before the end of the week.`); + } else { + r.push(`${restedSlaves} slaves have rested until they reached a state of <span class="hotpink">devotion</span> and <span class="mediumaquamarine">trust</span> and will leave the spa before the end of the week.`); + } + App.Events.addNode(el, r, "p", "indent"); + if (V.spaDecoration !== "standard") { + r = []; + r.push(`${capFirstChar(V.spaName)}'s ${V.spaDecoration} atmosphere <span class="hotpink">had an impact on`); + if (restedSlaves === 1) { + r.push(`${him} while ${he} was`); + } else { + r.push(`them while they were`); + } + r.push(`</span> resting.`); + App.Events.addNode(el, r, "p", "indent"); + } + } + + return el; +}; diff --git a/src/endWeek/reportsTW/clubReport.tw b/src/endWeek/reportsTW/clubReport.tw new file mode 100644 index 0000000000000000000000000000000000000000..c345a8117e0533450cebafdeec7c0338106ce2b7 --- /dev/null +++ b/src/endWeek/reportsTW/clubReport.tw @@ -0,0 +1,3 @@ +:: Club Report [nobr] + +<<includeDOM App.EndWeek.clubReport()>> diff --git a/src/endWeek/reportsTW/dairyReport.tw b/src/endWeek/reportsTW/dairyReport.tw new file mode 100644 index 0000000000000000000000000000000000000000..c299f843e0c2d1a866783854c32efe328bb221be --- /dev/null +++ b/src/endWeek/reportsTW/dairyReport.tw @@ -0,0 +1,3 @@ +:: Dairy Report [nobr] + +<<includeDOM App.EndWeek.dairyReport()>> diff --git a/src/endWeek/reportsTW/spaReport.tw b/src/endWeek/reportsTW/spaReport.tw new file mode 100644 index 0000000000000000000000000000000000000000..66addcfb79267c42028517494fb0128cb299fc59 --- /dev/null +++ b/src/endWeek/reportsTW/spaReport.tw @@ -0,0 +1,3 @@ +:: Spa Report [nobr] + +<<includeDOM App.EndWeek.spaReport()>> diff --git a/src/endWeek/saLiveWithHG.js b/src/endWeek/saLiveWithHG.js index 01d248a243de9b298b3ecdfe1b3c20407a209359..bd6c5eb51b69c7149e92987115ce40d674ab77f3 100644 --- a/src/endWeek/saLiveWithHG.js +++ b/src/endWeek/saLiveWithHG.js @@ -72,7 +72,7 @@ App.SlaveAssignment.liveWithHG = (function() { if (slave.devotion > 50) { HGCausesFetish(slave, S.HeadGirl); } - HGSexualSatiaion(slave, S.HeadGirl); + HGSexualSatiation(slave, S.HeadGirl); HGManagesTiredness(slave, S.HeadGirl); HGDressesSlave(slave, S.HeadGirl); if (S.HeadGirl.energy > 95) { @@ -288,7 +288,7 @@ App.SlaveAssignment.liveWithHG = (function() { slave.devotion += 5; } } else if (slave.devotion <= 20) { - r.push(`Since ${he} is not yet well trained, ${HG.slaveName} instructs ${him}, <span class="devotin inc">training</span> ${him} to be a proper assistant.`); + r.push(`Since ${he} is not yet well trained, ${HG.slaveName} instructs ${him}, <span class="devoting inc">training</span> ${him} to be a proper assistant.`); slave.devotion += 4; } else if (slave.devotion <= 50) { r.push(`Since ${he} is not yet a devoted slave, ${HG.slaveName} works with ${him}, <span class="devotion inc">training</span> ${him} to be a good assistant.`); @@ -729,7 +729,7 @@ App.SlaveAssignment.liveWithHG = (function() { * @param {App.Entity.SlaveState} slave * @param {App.Entity.SlaveState} HG */ - function HGSexualSatiaion(slave, HG) { + function HGSexualSatiation(slave, HG) { if (HG.energy > 95) { r.push(`${slave.slaveName} spends a lot of time getting fucked in whichever hole or cranny ${HG.slaveName} decides to shove ${his2}`); if (canPenetrate(HG)) { @@ -1188,7 +1188,7 @@ App.SlaveAssignment.liveWithHG = (function() { * @param {App.Entity.SlaveState} HG */ function narcissistHG(slave, HG) { - if (HG.bald !== 1&& HG.hLength > 0) { + if (HG.bald !== 1 && HG.hLength > 0) { if (slave.bald !== 1) { if (!hasHColorRule(slave, V.defaultRules)) { if (slave.hColor !== HG.hColor) { diff --git a/src/events/PE/concubineInterview.js b/src/events/PE/concubineInterview.js index f56b4c9efceda93ce6545f0bba6d4ee354753c50..9d64498a8df7c4bd0deebc08769dd33166690d4e 100644 --- a/src/events/PE/concubineInterview.js +++ b/src/events/PE/concubineInterview.js @@ -199,7 +199,7 @@ App.Events.PEConcubineInterview = class PEConcubineInterview extends App.Events. t.push(`a child is born into the world, live on screen.`); t.push(`a child is born into ${his}`); - switch(eventSlave.clothes) { + switch (eventSlave.clothes) { case "a toga": t.push(`toga.`); break; diff --git a/src/events/eventUtils.js b/src/events/eventUtils.js index da56dda3a448cebf229c30f51f71f2e763546619..6a117d3f283b325621417b3d09bd237fd7d42943 100644 --- a/src/events/eventUtils.js +++ b/src/events/eventUtils.js @@ -144,12 +144,14 @@ App.Events.addParagraph = function(node, sentences) { }; /** assemble an element from an array of DOM nodes, sentences or sentence fragments (which may contain HTML) + * @template {keyof HTMLElementTagNameMap} K * @param {Node} node * @param {Array<string|HTMLElement|DocumentFragment>} sentences - * @param {string} [element] + * @param {K} [element] + * @param {string|Array<string>} [classNames] */ -App.Events.addNode = function(node, sentences, element) { - const el = (element) ? document.createElement(element) : new DocumentFragment(); +App.Events.addNode = function(node, sentences, element, classNames) { + const el = (element) ? App.UI.DOM.makeElement(element, null, classNames) : new DocumentFragment(); $(el).append(...App.Events.spaceSentences(sentences)); node.appendChild(el); }; diff --git a/src/facilities/farmyard/farmyard.js b/src/facilities/farmyard/farmyard.js index 13d284aa0c360ffd5addf42cfc1d7b9e461e300f..51c3e7de30c4b68302ba905b342c649da583324b 100644 --- a/src/facilities/farmyard/farmyard.js +++ b/src/facilities/farmyard/farmyard.js @@ -146,7 +146,9 @@ App.Facilities.Farmyard.farmyard = function() { V.farmyardStables = 0; V.farmyardCages = 0; - V.pit.animal = null; + if (V.pit) { + V.pit.animal = null; + } V.farmyardUpgrades = { pump: 0, diff --git a/src/facilities/incubator/incubatorInteract.js b/src/facilities/incubator/incubatorInteract.js index 037cdf5a6e0c05f6e3a90dc725f3b1dedecfe915..deaea3a58b6d211de4038f165444daea6c343cb8 100644 --- a/src/facilities/incubator/incubatorInteract.js +++ b/src/facilities/incubator/incubatorInteract.js @@ -1418,25 +1418,25 @@ App.UI.incubator = function() { if (V.incubatorPregAdaptationPower === 1) { row.append(`Pregnancy adaptation programmed to advanced procedures. Up to triplet pregnancy should be safe for the subjects.`); } else { - linkArray.push(makeLink(`Advanced`, () => { V.incubatorPregAdaptationSetting = 1; }, refresh)); + linkArray.push(makeLink(`Advanced`, () => { V.incubatorPregAdaptationPower = 1; }, refresh)); } if (V.incubatorPregAdaptationPower === 2) { row.append(`Pregnancy adaptation programmed to intensive procedures. Up to octuplet pregnancy should be possible for the subjects. Warning! Side effects may occur to health and mental condition.`); } else { - linkArray.push(makeLink(`Intensive`, () => { V.incubatorPregAdaptationSetting = 2; }, refresh)); + linkArray.push(makeLink(`Intensive`, () => { V.incubatorPregAdaptationPower = 2; }, refresh)); } if (V.incubatorPregAdaptationPower === 3) { row.append(`Pregnancy adaptation programmed to extreme procedures. Normally unsustainable pregnancies may be possible for some subjects. Actual capacity will vary with genetic and other individual conditions. WARNING! Extreme side effects may occur to health and mental condition!`); } else { - linkArray.push(makeLink(`Extreme`, () => { V.incubatorPregAdaptationSetting = 3; }, refresh)); + linkArray.push(makeLink(`Extreme`, () => { V.incubatorPregAdaptationPower = 3; }, refresh)); } if (V.incubatorPregAdaptationPower === 0) { row.append(`Pregnancy adaptation programmed to standard procedures. Normal pregnancy should be safe for subjects.`); } else { - linkArray.push(makeLink(`Standard`, () => { V.incubatorPregAdaptationSetting = 0; }, refresh)); + linkArray.push(makeLink(`Standard`, () => { V.incubatorPregAdaptationPower = 0; }, refresh)); } row.append(App.UI.DOM.generateLinksStrip(linkArray)); App.UI.DOM.appendNewElement("span", row, `Due to the high complexity and steep risks of the procedure, settings will not be changed on tanks in use.`, "note"); @@ -1547,7 +1547,7 @@ App.UI.incubator = function() { } else if (V.incubatorUpgradeOrgans < 1) { row.append(`${_incubatorNameCaps} lacks the ability to extract tissue samples. Construction not possible.`); } else if (V.dispensaryUpgrade < 1) { - row.append(`${_incubatorNameCaps} lacks a connection to an advanced pharmaceutical fabricator.Cutting - edge targeted serums production needed as integral part. Construction not possible.`); + row.append(`${_incubatorNameCaps} lacks a connection to an advanced pharmaceutical fabricator. Cutting-edge targeted serums production needed as integral part. Construction not possible.`); } else if (V.bellyImplants < 1) { row.append(`${_incubatorNameCaps} lacks a connection with an implant manufacturing to construct fillable abdominal implants to simulate expansion. Construction not possible.`); } else if (V.incubatorUpgradeGrowthStims < 1) { diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js index dd09ab878aa6a95331c097be2e49308401c5b4c7..af755da26c28da46baf9a07e80299fa8c20bbeb9 100644 --- a/src/facilities/pit/pit.js +++ b/src/facilities/pit/pit.js @@ -48,10 +48,7 @@ App.Facilities.Pit.pit = function() { link.append(App.UI.DOM.passageLink(`Decommission ${V.pit.name}`, "Main", () => { V.pit = null; - V.pit.fighterIDs = []; - // FIXME: fix this - // @ts-ignore App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Market, "Pit", "Markets"); })); diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js index 212e9128d9acc433718dac356a44ba3cd97b16cf..84d4ec3d3850ab54108d5167f8f0d4c62db858c2 100644 --- a/src/js/birth/birth.js +++ b/src/js/birth/birth.js @@ -6824,7 +6824,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {}) r.push(`As ${he} is helped back to ${his} bed and to give birth, ${his} water breaks and ${he} slumps to the ground. As ${his} helper rushes off to find aid, ${he} begins laboring on ${his} ${babies}. However, ${he} soon finds that ${he} is incapable of actually giving birth to ${his} ${children}. As blood begins to seep from ${his} nethers, ${he} desperately tries to get anyone's attention.`); App.Events.addParagraph(el, r); r = []; - r.push(`${His} helper arrives with aid far too late.${HeU} screams when ${heU} sees ${slave.slaveName}'s gravid corpse,`); + r.push(`${His} helper arrives with aid far too late. ${HeU} screams when ${heU} sees ${slave.slaveName}'s gravid corpse,`); if (slave.mpreg === 1) { r.push(`asshole`); } else { diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js index fa376797fdd51b276e6355dfd6685e8274a4295e..366846f2b8af1cc0673d587f37b5a45969b23a65 100644 --- a/src/npc/descriptions/boobs/boobs.js +++ b/src/npc/descriptions/boobs/boobs.js @@ -1800,10 +1800,18 @@ App.Desc.nipples = function(slave, {market, eventDescription} = {}) { if ((slave.assignment === App.Data.Facilities.dairy.jobs.cow.assignment) && (V.dairyRestraintsSetting > 1)) { r += ` The transparent lines coming off the cups attached to each of ${his} nipples are white with a constant stream of milk.`; } else if (slave.lactation === 1) { - if (slave.boobsMilk > 0) { - r += ` ${His} breasts are painfully engorged with milk.`; + if (slave.boobs > 300) { + if (slave.boobsMilk > 0) { + r += ` ${His} breasts are painfully engorged with milk.`; + } else { + r += ` ${His} motherly breasts are full of milk.`; + } } else { - r += ` ${His} motherly breasts are full of milk.`; + if (slave.boobsMilk > 0) { + r += ` ${His} chest is painfully engorged with milk and leaks with the slightest provocation.`; + } else { + r += ` ${His} sensitive chest is swollen with milk.`; + } } } else if (slave.fuckdoll > 0) { r += ` ${His} overworked, overfull breasts press its nipples through the holes mercilessly.`; diff --git a/src/npc/descriptions/descriptionWidgets.js b/src/npc/descriptions/descriptionWidgets.js index 6853a91f83a27ba1d32fef55b12bde62cea74141..50c04bce23830c5408f9264359fc6739aa8fe28c 100644 --- a/src/npc/descriptions/descriptionWidgets.js +++ b/src/npc/descriptions/descriptionWidgets.js @@ -633,6 +633,7 @@ App.Desc.ageAndHealth = function(slave) { } } } else if (slave.physicalAge !== slave.visualAge) { + let neoteny; if (slave.geneticQuirks.neoteny === 2 && slave.physicalAge > slave.visualAge && (V.geneticMappingUpgrade >= 1 || slave.physicalAge >= slave.visualAge + 5)) { if (V.geneticMappingUpgrade >= 1) { r += `Due to ${his} neotenic qualities, `; @@ -640,6 +641,7 @@ App.Desc.ageAndHealth = function(slave) { r += `Oddly enough, `; } r += `${he} still resembles a young ${boy} of around ${slave.visualAge}. `; + neoteny = true; } else if (slave.visualAge <= slave.physicalAge - 20 || slave.visualAge >= slave.physicalAge + 20) { r += ` ${He} has undergone radical age therapy that makes ${him} look `; } else if (slave.visualAge <= slave.physicalAge - 10 || slave.visualAge >= slave.physicalAge + 10) { @@ -649,83 +651,85 @@ App.Desc.ageAndHealth = function(slave) { } else { r += ` For various reasons, ${he} looks `; } - if (slave.physicalAge > slave.visualAge) { - if (slave.physicalAge < slave.visualAge + 5) { - r += `a slightly younger ${slave.visualAge}. `; - } else if (slave.visualAge < 20) { - r += `like ${he}'s barely an adult. `; - } else if (slave.visualAge < 25) { - r += `barely into ${his} early twenties. `; - } else if (slave.visualAge < 30) { - r += `like ${he}'s still in ${his} twenties. `; - } else if (slave.visualAge < 35) { - r += `barely thirty. `; - } else if (slave.visualAge < 40) { - r += `still in ${his} thirties. `; - } else if (slave.visualAge < 45) { - r += `barely forty. `; - } else if (slave.visualAge < 50) { - r += `still in ${his} forties. `; - } else if (slave.visualAge < 55) { - r += `barely fifty. `; - } else if (slave.visualAge < 60) { - r += `still in ${his} fifties. `; - } else if (slave.visualAge < 65) { - r += `barely sixty. `; - } else if (slave.visualAge < 70) { - r += `still in ${his} sixties. `; - } else if (slave.visualAge < 75) { - r += `barely seventy. `; - } else if (slave.visualAge < 80) { - r += `still in ${his} seventies. `; - } else if (slave.visualAge < 85) { - r += `barely eighty. `; - } else if (slave.visualAge < 90) { - r += `still in ${his} eighties. `; - } else if (slave.visualAge < 95) { - r += `barely ninety. `; - } else if (slave.visualAge < 100) { - r += `still in ${his} nineties. `; + if (!neoteny) { + if (slave.physicalAge > slave.visualAge) { + if (slave.physicalAge < slave.visualAge + 5) { + r += `a slightly younger ${slave.visualAge}. `; + } else if (slave.visualAge < 20) { + r += `like ${he}'s barely an adult. `; + } else if (slave.visualAge < 25) { + r += `barely into ${his} early twenties. `; + } else if (slave.visualAge < 30) { + r += `like ${he}'s still in ${his} twenties. `; + } else if (slave.visualAge < 35) { + r += `barely thirty. `; + } else if (slave.visualAge < 40) { + r += `still in ${his} thirties. `; + } else if (slave.visualAge < 45) { + r += `barely forty. `; + } else if (slave.visualAge < 50) { + r += `still in ${his} forties. `; + } else if (slave.visualAge < 55) { + r += `barely fifty. `; + } else if (slave.visualAge < 60) { + r += `still in ${his} fifties. `; + } else if (slave.visualAge < 65) { + r += `barely sixty. `; + } else if (slave.visualAge < 70) { + r += `still in ${his} sixties. `; + } else if (slave.visualAge < 75) { + r += `barely seventy. `; + } else if (slave.visualAge < 80) { + r += `still in ${his} seventies. `; + } else if (slave.visualAge < 85) { + r += `barely eighty. `; + } else if (slave.visualAge < 90) { + r += `still in ${his} eighties. `; + } else if (slave.visualAge < 95) { + r += `barely ninety. `; + } else if (slave.visualAge < 100) { + r += `still in ${his} nineties. `; + } else { + r += `a younger ${slave.visualAge}. `; + } } else { - r += `a younger ${slave.visualAge}. `; - } - } else { - if (slave.physicalAge > slave.visualAge - 5) { - r += `a slightly older ${slave.visualAge}. `; - } else if (slave.visualAge < 20) { - r += `like a fresh adult. `; - } else if (slave.visualAge < 25) { - r += `just over twenty. `; - } else if (slave.visualAge < 30) { - r += `nearly thirty. `; - } else if (slave.visualAge < 35) { - r += `just over thirty. `; - } else if (slave.visualAge < 40) { - r += `nearly forty. `; - } else if (slave.visualAge < 45) { - r += `just over forty. `; - } else if (slave.visualAge < 50) { - r += `nearly fifty. `; - } else if (slave.visualAge < 55) { - r += `just over fifty. `; - } else if (slave.visualAge < 60) { - r += `nearly sixty. `; - } else if (slave.visualAge < 65) { - r += `just over sixty. `; - } else if (slave.visualAge < 70) { - r += `nearly seventy. `; - } else if (slave.visualAge < 75) { - r += `just over seventy. `; - } else if (slave.visualAge < 80) { - r += `nearly eighty. `; - } else if (slave.visualAge < 85) { - r += `just over eighty. `; - } else if (slave.visualAge < 90) { - r += `nearly ninety. `; - } else if (slave.visualAge < 95) { - r += `just over ninety. `; - } else { - r += `an ancient ${slave.visualAge}. `; + if (slave.physicalAge > slave.visualAge - 5) { + r += `a slightly older ${slave.visualAge}. `; + } else if (slave.visualAge < 20) { + r += `like a fresh adult. `; + } else if (slave.visualAge < 25) { + r += `just over twenty. `; + } else if (slave.visualAge < 30) { + r += `nearly thirty. `; + } else if (slave.visualAge < 35) { + r += `just over thirty. `; + } else if (slave.visualAge < 40) { + r += `nearly forty. `; + } else if (slave.visualAge < 45) { + r += `just over forty. `; + } else if (slave.visualAge < 50) { + r += `nearly fifty. `; + } else if (slave.visualAge < 55) { + r += `just over fifty. `; + } else if (slave.visualAge < 60) { + r += `nearly sixty. `; + } else if (slave.visualAge < 65) { + r += `just over sixty. `; + } else if (slave.visualAge < 70) { + r += `nearly seventy. `; + } else if (slave.visualAge < 75) { + r += `just over seventy. `; + } else if (slave.visualAge < 80) { + r += `nearly eighty. `; + } else if (slave.visualAge < 85) { + r += `just over eighty. `; + } else if (slave.visualAge < 90) { + r += `nearly ninety. `; + } else if (slave.visualAge < 95) { + r += `just over ninety. `; + } else { + r += `an ancient ${slave.visualAge}. `; + } } } if (slave.geneMods.immortality === 1) { diff --git a/src/npc/descriptions/face.js b/src/npc/descriptions/face.js index eb3c7d6aaf64c9dc81581b372461e14a5f536b5d..d363083d9ce69312a3d890cccaf82c993b681eaf 100644 --- a/src/npc/descriptions/face.js +++ b/src/npc/descriptions/face.js @@ -154,13 +154,13 @@ App.Desc.face = function(slave) { if (slave.faceImplant > 5) { r.push(`${He}'s`); if (slave.faceImplant > 95) { - r.push(`had so much cosmetic surgery that ${his} face is located at the bottom of the uncanny valley`); + r.push(`had so much cosmetic surgery that ${his} face is located at the bottom of the uncanny`); if (slave.face < -10) { - r.push(`in addition to its ugliness.`); + r.push(`valley in addition to its ugliness.`); } else if (slave.face <= 10) { - r.push(`the only thing really distinctive about it.`); + r.push(`valley; the only thing really distinctive about it.`); } else { - r.push(`its attractiveness notwithstanding.`); + r.push(`valley, its attractiveness notwithstanding.`); } } else if (slave.faceImplant > 60) { r.push(`obviously gotten a lot of facial cosmetic surgery.`); diff --git a/src/npc/descriptions/womb/pregnancy.js b/src/npc/descriptions/womb/pregnancy.js index 46642bde30b0b33c4012a77416090d605c736c5a..7cce96f9d391045d6deb6232a01a699cab376170 100644 --- a/src/npc/descriptions/womb/pregnancy.js +++ b/src/npc/descriptions/womb/pregnancy.js @@ -706,12 +706,12 @@ App.Desc.pregnancy = function(slave, {market, eventDescription} = {}) { r.push(App.Desc.superfetation(slave, {market: market})); } else if (slave.bellyImplant > 0) { r.push(`${He} has an abdominal implant, though it doesn't round out ${his} belly too much yet at a tiny ${slave.bellyImplant}ccs.`); - } else if (slave.bellyImplant === 0) { + } else if (slave.bellyImplant === 0 && !market) { r.push(`${He} has an abdominal implant, but it is completely empty.`); } else if (slave.pregKnown === 1) { r.push(`${He} is <span class="pink">pregnant,</span> though it isn't visible yet.`); r.push(App.Desc.superfetation(slave, {market: market})); - } else if (slave.preg > 0 && slave.pregKnown === 0) { + } else if (slave.preg > 0 && slave.pregKnown === 0 && !market) { r.push(`${His} period is late.`); } if (slave.preg + 5 <= slave.pregWeek && slave.preg <= slave.pregData.normalBirth + 2 && slave.bellyPreg >= 100) { diff --git a/src/npc/generate/newChildIntro.js b/src/npc/generate/newChildIntro.js index c352d5c1e598c54675ec484d40a51f0e3f18f54e..8b5739af97aaddf21abc9ef419186047c6ca8dea 100644 --- a/src/npc/generate/newChildIntro.js +++ b/src/npc/generate/newChildIntro.js @@ -291,11 +291,11 @@ App.UI.newChildIntro = function(slave) { r.push(`${He} glances at ${his} mother`); if (tempMom.relationship === -3) { if (tempMom.fetish === "mindbroken") { - r.push(`and <span class="mediumorchid">notices how dull</span> the look on ${his2} face is.${tempMom.slaveName} is standing there blankly. ${He2} doesn't even recognize ${his2} ${daughter}, <span class="gold">frightening</span> the poor ${girl}.`); + r.push(`and <span class="mediumorchid">notices how dull</span> the look on ${his2} face is. ${tempMom.slaveName} is standing there blankly. ${He2} doesn't even recognize ${his2} ${daughter}, <span class="gold">frightening</span> the poor ${girl}.`); slave.trust -= 25; slave.devotion -= 10; } else if (tempMom.devotion + tempMom.trust >= 175) { - r.push(`and <span class="hotpink">notices how happy</span> the look on ${his2} face is.${tempMom.slaveName} is positively beaming with pride at `); + r.push(`and <span class="hotpink">notices how happy</span> the look on ${his2} face is. ${tempMom.slaveName} is positively beaming with pride at `); if (slave.father === -1) { r.push(`the result of your union.`); } else { @@ -304,11 +304,11 @@ App.UI.newChildIntro = function(slave) { slave.trust += 35; slave.devotion += 35; } else if (tempMom.devotion < -20 && tempMom.trust > 20) { - r.push(`and <span class="gold">notices the look of hatred</span> on ${his2} face.${tempMom.slaveName} scowls at ${his2} unwelcome spawn, <span class="hotpink">frightening the poor ${girl} into your arms.</span>`); + r.push(`and <span class="gold">notices the look of hatred</span> on ${his2} face. ${tempMom.slaveName} scowls at ${his2} unwelcome spawn, <span class="hotpink">frightening the poor ${girl} into your arms.</span>`); slave.trust -= 50; slave.devotion += 50; } else if (tempMom.devotion < -20) { - r.push(`and notices the <span class="mediumorchid">look of defeat</span> on ${his2} face.${tempMom.slaveName} immediately tears up when ${he2} `); + r.push(`and notices the <span class="mediumorchid">look of defeat</span> on ${his2} face. ${tempMom.slaveName} immediately tears up when ${he2} `); if (canSee(tempMom)) { r.push(`sees`); } else { @@ -322,7 +322,7 @@ App.UI.newChildIntro = function(slave) { slave.trust -= 30; slave.devotion -= 30; } else { - r.push(`and <span class="hotpink">notices how obedient</span> the look on ${his2} face is.${tempMom.slaveName} is eagerly awaiting your reaction to `); + r.push(`and <span class="hotpink">notices how obedient</span> the look on ${his2} face is. ${tempMom.slaveName} is eagerly awaiting your reaction to `); if (slave.father === -1) { r.push(`the result of your union.`); } else { @@ -432,11 +432,11 @@ App.UI.newChildIntro = function(slave) { r.push(`${He} glances at ${his} father`); if (tempDad.relationship === -3) { if (tempDad.fetish === "mindbroken") { - r.push(`and <span class="mediumorchid">notices how dull</span> the look on ${his2} face is.${tempDad.slaveName} is standing there blankly. ${He2} doesn't even recognize ${his2} ${daughter}, <span class="gold">frightening</span> the poor ${girl}.`); + r.push(`and <span class="mediumorchid">notices how dull</span> the look on ${his2} face is. ${tempDad.slaveName} is standing there blankly. ${He2} doesn't even recognize ${his2} ${daughter}, <span class="gold">frightening</span> the poor ${girl}.`); slave.trust -= 25; slave.devotion -= 10; } else if (tempDad.devotion + tempDad.trust >= 175) { - r.push(`and <span class="hotpink">notices how happy</span> the look on ${his2} face is.${tempDad.slaveName} is positively beaming with pride at `); + r.push(`and <span class="hotpink">notices how happy</span> the look on ${his2} face is. ${tempDad.slaveName} is positively beaming with pride at `); if (slave.mother === -1) { r.push(`the result of your union.`); } else { @@ -445,11 +445,11 @@ App.UI.newChildIntro = function(slave) { slave.trust += 35; slave.devotion += 35; } else if (tempDad.devotion < -20 && tempDad.trust > 20) { - r.push(`and <span class="gold">notices the look of hatred</span> on ${his2} face.${tempDad.slaveName} scowls at ${his2} unwelcome spawn, <span class="hotpink">frightening the poor ${girl} into your arms.</span>`); + r.push(`and <span class="gold">notices the look of hatred</span> on ${his2} face. ${tempDad.slaveName} scowls at ${his2} unwelcome spawn, <span class="hotpink">frightening the poor ${girl} into your arms.</span>`); slave.trust -= 50; slave.devotion += 50; } else if (tempDad.devotion < -20) { - r.push(`and notices the <span class="mediumorchid">look of defeat</span> on ${his2} face.${tempDad.slaveName} immediately tears up when ${he2} `); + r.push(`and notices the <span class="mediumorchid">look of defeat</span> on ${his2} face. ${tempDad.slaveName} immediately tears up when ${he2} `); if (canSee(tempDad)) { r.push(`sees`); } else { @@ -463,7 +463,7 @@ App.UI.newChildIntro = function(slave) { slave.trust -= 30; slave.devotion -= 30; } else { - r.push(`and <span class="hotpink">notices how obedient</span> the look on ${his2} face is.${tempDad.slaveName} is eagerly awaiting your reaction to `); + r.push(`and <span class="hotpink">notices how obedient</span> the look on ${his2} face is. ${tempDad.slaveName} is eagerly awaiting your reaction to `); if (slave.mother === -1) { r.push(`the result of your union.`); } else { diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index 8086c27d61561fffb51554d06ba251b686f22963..b30e47e753eae6a327a09ff866b5ca509949f187 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -3313,13 +3313,14 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`${knockMeUp(V.PC, 100, 0, slave.ID)}`); r.push(`You groan as you rub your belly. You were fertile and are now likely <span class="lime">quite pregnant.</span>`); } - el.append(r.join(" ")); + App.Events.addNode(el, r); r = []; - const result2 = document.createElement("span"); + const result2 = document.createElement("p"); result2.id = "result2"; + el.append(result2); App.UI.DOM.appendNewElement( "div", - el, + result2, App.UI.DOM.link( `Let it slide for now`, () => { @@ -3333,7 +3334,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = App.UI.DOM.appendNewElement( "div", - el, + result2, App.UI.DOM.link( `Teach ${him} what ${he} did wrong`, () => { @@ -3348,7 +3349,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = App.UI.DOM.appendNewElement( "div", - el, + result2, App.UI.DOM.link( `Punish ${his} nuts`, () => { @@ -3363,7 +3364,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = App.UI.DOM.appendNewElement( "div", - el, + result2, App.UI.DOM.link( `Punish ${him} with a chastity belt`, () => { @@ -3380,7 +3381,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = if (V.seeExtreme === 1) { App.UI.DOM.appendNewElement( "div", - el, + result2, App.UI.DOM.link( `Geld ${him} as punishment`, () => { @@ -3410,7 +3411,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`${he} <span class="hotpink">complies meekly,</span> knowing you are the <span class="gold">dominant force</span> in ${his} life now.`); slave.devotion += 5; slave.trust -= 3; - el.append(r.join(" ")); + App.Events.addNode(el, r); } return el; } @@ -3517,7 +3518,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.fetishStrength = 20; } } else if (tankBorn && V.PC.pregMood === 1) { - r.push(`until ${he} has no choice but to wrap ${his} arms around it.${He} happily runs ${his} hands across your belly, cooing with delight at the tautness and warmth.${He} jumps back with a gasp the first time ${he} is met with a kick from within you, but < span class="hotpink" > giggles pleasantly</span > as you help ${him} back to ${his} feet and pull ${him} into an embrace, guiding ${him} to the couch.You tweak one of your nipples, encouraging your milk to flow and enticing`); + r.push(`until ${he} has no choice but to wrap ${his} arms around it. ${He} happily runs ${his} hands across your belly, cooing with delight at the tautness and warmth. ${He} jumps back with a gasp the first time ${he} is met with a kick from within you, but < span class="hotpink" > giggles pleasantly</span > as you help ${him} back to ${his} feet and pull ${him} into an embrace, guiding ${him} to the couch. You tweak one of your nipples, encouraging your milk to flow and enticing`); if (slave.mother === -1) { r.push(`your ${daughter} to suckle from ${his} mother.`); } else { @@ -3694,8 +3695,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.fetish = "dom"; slave.fetishStrength = 20; } - el.append(r.join(" ")); - const result2 = document.createElement("span"); + App.Events.addNode(el, r); + const result2 = document.createElement("p"); result2.id = "result2"; App.UI.DOM.appendNewElement( "div", @@ -3780,7 +3781,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = slave.fetish = "boobs"; slave.fetishStrength = 20; } - el.append(r.join(" ")); + App.Events.addNode(el, r); } } else { r.push(`You quickly strip off your shirt and draw close to ${slave.slaveName}. You grab ${him} as ${he} attempts to back away and pull ${his} tits directly into your own. Both sets of`); @@ -3803,7 +3804,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } } slave.devotion += 5; - el.append(r.join(" ")); + App.Events.addNode(el, r); } return el; }, diff --git a/src/npc/interaction/fPat.tw b/src/npc/interaction/fPat.tw index 57c3865213a3a04d1d1413858cb9331468cb82cb..f32a5d02a077f9892587cb148e6408edcd521580 100644 --- a/src/npc/interaction/fPat.tw +++ b/src/npc/interaction/fPat.tw @@ -188,7 +188,7 @@ with your fingertips. You move your hand to the side of your slave's head, strok This causes $him to shiver unconsciously. <<elseif getSlave($AS).trust <= -50>> This forces $his back rigid, in an effort not to move <<if $showInches == 2>>an inch<<else>>a centimeter<</if>>, out of fear. -<<elseif getSlave($AS) <= -21>> +<<elseif getSlave($AS).trust < -20>> This would cause $him to shiver with delight, but $his distaste for the situation makes that impossible. <</if>> diff --git a/src/personalAssistant/assistantAppearance.js b/src/personalAssistant/assistantAppearance.js index d281c7773ceba12b09c88de6f72fb52423dc60e4..85fb656c8f6b6c637a6dc8e83a01cbf792de461b 100644 --- a/src/personalAssistant/assistantAppearance.js +++ b/src/personalAssistant/assistantAppearance.js @@ -547,7 +547,7 @@ globalThis.PersonalAssistantAppearance = function() { if (V.assistant.market.relationship === "cute") { r.push(`They're deep in prayer for your benefit and the safety of you, your arcology and your slaves.`); } else if (V.assistant.market.relationship === "nonconsensual") { - r.push(`${V.assistant.name} is happily brushing the market assistant while humming happily. Upon noticing you watching,${HeA} hastily sneaks a hand down the assistant's dress and pinches a nipple, eliciting a squeak from the ${girlM}.`); + r.push(`${V.assistant.name} is happily brushing the market assistant while humming happily. Upon noticing you watching, ${HeA} hastily sneaks a hand down the assistant's dress and pinches a nipple, eliciting a squeak from the ${girlM}.`); } else if (V.assistant.market.relationship === "incestuous") { r.push(`${V.assistant.name} is naked and kissing ${hisA} equally bare ${sisterM}. You watch silently as they grind their bodies against each other until one notices your gaze. They both shriek, cover themselves with their wings and hustle out of sight.`); } else { @@ -747,7 +747,7 @@ globalThis.PersonalAssistantAppearance = function() { if (V.assistant.market.relationship === "cute") { r.push(`The market assistant has cleaned up nicely since the last time you saw ${himM}. ${heM} does a little twirl to show off ${hisM} new look before squeaking in shock as a burst of cum splashes across ${hisM} face. ${heM} pouts at ${V.assistant.name}, who is eagerly prepping a second load to fire at ${himM}.`); } else if (V.assistant.market.relationship === "nonconsensual") { - r.push(`The market assistant is being violently penetrated by ${V.assistant.name},${hisM} bloated belly swaying in tune to ${hisA} thrusts. The hapless ${girlM} struggles in discomfort as the incubus blows another load into ${hisM} already full womb, causing cum to backflow out of ${hisM} now loose pussy. ${V.assistant.name} leans back, motions to you, and asks, "Plenty of holes still to go around, if you want one!"`); + r.push(`The market assistant is being violently penetrated by ${V.assistant.name}, ${hisM} bloated belly swaying in tune to ${hisA} thrusts. The hapless ${girlM} struggles in discomfort as the incubus blows another load into ${hisM} already full womb, causing cum to backflow out of ${hisM} now loose pussy. ${V.assistant.name} leans back, motions to you, and asks, "Plenty of holes still to go around, if you want one!"`); } else if (V.assistant.market.relationship === "incestuous") { r.push(`The market assistant is eagerly riding ${hisM} big ${sisterA}, ${V.assistant.name}'s, dick. You can't help but notice how full ${hisM} breasts have gotten and how plump ${hisM} ass and thighs now are. ${heM} moans with lust as ${V.assistant.name} cums into ${hisM} fertile pussy; a glowing sigil appearing below ${hisM} navel. ${heM} is well on ${hisM} way to becoming the succubus consort of ${hisM} once human ${sisterA}.`); } else { @@ -881,7 +881,7 @@ globalThis.PersonalAssistantAppearance = function() { if (V.assistant.market.relationship === "cute") { r.push(`${V.assistant.name} has the market assistant's pants down and is eagerly sucking ${himM} off. ${heM} tenses with orgasm and sighs with relief only for ${V.assistant.name} to deeply kiss ${himM} and force ${himM} to taste ${hisM} cum with ${himA}.`); } else if (V.assistant.market.relationship === "nonconsensual") { - r.push(`The market assistant is being violently ridden by ${V.assistant.name},${hisA} fuller assets swaying in tune to ${hisA} movements. The hapless ${girlM} struggles pitifully as the succubus coaxes another load out of ${hisA} exhausted toy. ${V.assistant.name} leans back, strokes ${hisA} luscious body and says, "${HisM} energy is making me even more beautiful for you!"`); + r.push(`The market assistant is being violently ridden by ${V.assistant.name}, ${hisA} fuller assets swaying in tune to ${hisA} movements. The hapless ${girlM} struggles pitifully as the succubus coaxes another load out of ${hisA} exhausted toy. ${V.assistant.name} leans back, strokes ${hisA} luscious body and says, "${HisM} energy is making me even more beautiful for you!"`); } else if (V.assistant.market.relationship === "incestuous") { r.push(`The market assistant is being ridden by ${hisM} enormously pregnant big ${sisterA}, ${V.assistant.name}. ${HeM}'s supporting ${hisA} taut belly as ${heA} uses ${hisA} hands to hold their twins to ${hisA} swollen breasts. You can't help but notice how full ${hisM} balls have become and thick ${hisM} shaft is. ${heM} moans with lust as ${V.assistant.name} bucks with orgasm before painting ${hisA} womb with another coat of sperm. ${V.assistant.name} grunts slightly as ${hisM} dick grows larger inside ${himA} and ${hisM} balls swell for a second round. ${heM} is well on ${hisM} way to becoming the incubus lover of ${hisM} once human ${sisterA}.`); } else { @@ -1088,7 +1088,7 @@ globalThis.PersonalAssistantAppearance = function() { subjugationist: `with wild unkempt hair, dressed in ragged animal skins and crude bone jewelry.`, "roman revivalist": `wearing the armor of a Roman auxilia, complete with lorica hamata and oval shield painted with your arcology's symbols.`, "neoimperialist": `wearing a full set of advanced, powered battle armor, painted in your colors and with the crest of your family displayed prominently over a massive holographic tower shield.`, - "aztec revivalist": `wearing the battledress of the greatest warriors,${HeA} stands incredibly imposing, holding a spear and shield.`, + "aztec revivalist": `wearing the battledress of the greatest warriors, ${HeA} stands incredibly imposing, holding a spear and shield.`, "egyptian revivalist": `wearing a simple white linen dress, kohl eye shadow, and sandals, making ${himA} look like a barbarian immigrant to the land of the Nile.`, "edo revivalist": `wearing a Japanese warrior's robe with a pair of swords tucked into its sash.`, "arabian revivalist": `with a bare chest, loose pantaloons, and a broad silk sash wound around ${hisA} waist with a scimitar thrust into it.`, @@ -1119,7 +1119,7 @@ globalThis.PersonalAssistantAppearance = function() { "subjugationist": `wearing a nice, slightly-used suit. ${HeA} speaks with a stereotypical ${V.arcologies[0].FSSubjugationistRace} voice, but is otherwise the model of a perfect subservient secretary.`, "roman revivalist": `wearing a fine stola appropriate for a respectable Roman lady, with ${hisA} hair up in a complicated style.`, "neoimperialist": `wearing an elegant black suit tailored perfectly for ${hisA} holographic body, one that you recognize as being the latest in old-world fashion.`, - "aztec revivalist": `wearing a modest huipil,${hisA} hair braided to two ponytails, ${HeA}'s the picture of quiet elegance.`, + "aztec revivalist": `wearing a modest huipil, ${hisA} hair braided to two ponytails, ${HeA}'s the picture of quiet elegance.`, "egyptian revivalist": `wearing a simple white linen dress, kohl eye shadow, sandals, and a serene expression.`, "edo revivalist": `wearing a fine kimono, getae, tabi, and an expression of perfect serenity.`, "arabian revivalist": `wearing a tailored suit, a silk headscarf, and aviator sunglasses, making ${himA} look like a little oil heiress.`, @@ -1151,7 +1151,7 @@ globalThis.PersonalAssistantAppearance = function() { "subjugationist": `with swollen hips and breasts and a huge pregnant belly. ${HeA}'s nude aside from a crown of wilted flowers and the iron shackles on ${hisA} wrists and ankles.`, "roman revivalist": `with swollen hips and a big pregnant belly. ${HeA}'s clothed in a loose stola, with dozens of flowers woven into ${hisA} curly auburn hair.`, "neoimperialist": `with a heaving, pregnant belly. The crest of your family is emblazoned over ${hisA} womb, as if the unborn child is already your property.`, - "aztec revivalist": `glowing like a sun goddess,${hisA} full belly commands awe and respect in all who see ${himA}.`, + "aztec revivalist": `glowing like a sun goddess, ${hisA} full belly commands awe and respect in all who see ${himA}.`, "egyptian revivalist": `wielding an ankh-headed staff. ${HeA}'s wearing a gilded headdress and linen skirt, but leaves ${hisA} breasts and pregnant stomach bare to gleam like bronze.`, "edo revivalist": `${HisA} swollen hips and pregnant belly loosely wrapped in a red tomesode. ${HisA} waterfall of black hair is held by a comb shaped like big pointed fox ears.`, "arabian revivalist": `with swollen hips and breasts and a big pregnant belly. ${HeA}'s wrapped ${himselfA} in white silks, but only the veil around ${hisA} face is opaque.`, @@ -1164,7 +1164,7 @@ globalThis.PersonalAssistantAppearance = function() { "gender radicalist": `although ${heA}'d be nearly androgynous without the rounded pregnant belly. ${HisA} short hair and flowing robe conceal any other feminine traits.`, "gender fundamentalist": `with swollen hips and breasts and a huge pregnant belly. ${HeA}'s nude aside from a crown of roses, and makes no attempt to cover ${hisA} radiant body.`, "asset expansionist": `${HisA} big pregnant belly almost eclipsed by ${hisA} enormous breasts. ${HeA}'s nude aside from the sunflowers woven into ${hisA} long hair.`, - "transformation fetishist": `clad in a rainbow of flowers and latex pasties. Even pregnant,${hisA} breasts and ass are too firm to be natural, like a porn star who forgot ${hisA} birth control.`, + "transformation fetishist": `clad in a rainbow of flowers and latex pasties. Even pregnant, ${hisA} breasts and ass are too firm to be natural, like a porn star who forgot ${hisA} birth control.`, "pastoralist": `with oversized breasts pouring streams of milk down ${hisA} pregnant belly like a fountain. ${HeA}'s nude aside from the wildflowers tucked in ${hisA} hair.`, "maturity preferentialist": `with only ${hisA} huge hips and a wreath of flowers to protect ${hisA} modesty. ${HisA} stretch-marks and laugh-lines suggest the child ${heA}'s carrying is not ${hisA} first.`, "youth preferentialist": `with swollen breasts and a big pregnant belly. ${HeA}'s nude aside from a wreath of daffodils, ${hisA} body radiant with youthful energy.`, @@ -1223,7 +1223,7 @@ globalThis.PersonalAssistantAppearance = function() { "subjugationist": `wearing a plaid skirt and a white shirt. ${HeA} speaks with a stereotypical ${V.arcologies[0].FSSubjugationistRace} accent, giving the impression of a foreign exchange student with much to learn.`, "roman revivalist": `wearing a ${girlA}'s stola, with ${hisA} hair pulled up into a proper upper-class Roman coiffure. ${HeA} usually carries a wax tablet and a stylus.`, "neoimperialist": `wearing a prim and proper school uniform, with your family crest on ${hisA} breast pocket. ${HisA} short plaid skirt occasionally flips up to flash a hint of ${hisA} holographic panties.`, - "aztec revivalist": `wearing only an overshirt,${hisA} cute little legs are complimented by ${hisA} twin tails.`, + "aztec revivalist": `wearing only an overshirt, ${hisA} cute little legs are complimented by ${hisA} twin tails.`, "egyptian revivalist": `wearing a simple white linen skirt, kohl eye shadow, sandals, and no top at all, baring ${hisA} perky young breasts.`, "edo revivalist": `wearing a simple robe appropriate for a proper, traditional Japanese lady.`, "arabian revivalist": `wearing a long plaid skirt, a clean white shirt, and a headscarf, making ${himA} look like an Arab ${girlA} attending a Western school.`, @@ -1291,7 +1291,7 @@ globalThis.PersonalAssistantAppearance = function() { "chinese revivalist": `belly wearing a tight silk qipao.`, "chattel religionist": `belly wearing the garb of a priestess of the new faith.`, "repopulation focus": `belly. ${HeA} recently adjusted ${hisA} pregnancy size to make it even larger. ${HisA} swelling ass and tits spill out from ${hisA} shorts and tube-top and the occasional kick can be seen from ${hisA} octuplets.`, - "eugenics": `belly, rather,${HeA} was. ${HisA} chastity belt has been torn open and ${hisA} belly is grotesquely swollen with subhuman spawn. Occasionally a malformed, impish child claws its way out of ${hisA} violated pussy.`, + "eugenics": `belly, rather, ${HeA} was. ${HisA} chastity belt has been torn open and ${hisA} belly is grotesquely swollen with subhuman spawn. Occasionally a malformed, impish child claws its way out of ${hisA} violated pussy.`, "degradationist": `belly wearing an open vest and a thong. It shows off ${hisA} pierced milky B-cup tits and swollen pregnant belly. A large bar is driven through ${hisA} popped navel.`, "physical idealist": `belly wearing spats and a tight shirt. ${HisA} shirt rides up on ${hisA} large belly and ${hisA} growing butt fills out ${hisA} spats nicely. ${HeA} cradles ${hisA} belly with a sullen look knowing it limits ${hisA} activities.`, "hedonistic decadence": `belly reclining on a chair with a big bowl of snack food. ${HeA} belches and pats ${hisA} belly happily.`, @@ -1693,15 +1693,15 @@ globalThis.PersonalAssistantAppearance = function() { "succubus": { "paternalist": `${HeA}'s wearing an absolutely stunning dress that perfectly hugs ${hisA} curves. Surprisingly, ${HeA} even has underwear on.`, "degradationist": `${HeA}'s recently added an obscene number of piercings to ${hisA} labia in addition to a pair of nipple rings and a big, heavy ring on ${hisA} clit. A thin chain links the clit ring to the heavy rings adorning ${hisA} chest.`, - "supremacist": `In fact,${HeA} is the most gorgeous ${V.arcologies[0].FSSupremacistRace} ${womanA} you've ever seen.`, - "subjugationist": `In fact,${HeA} is the most gorgeous ${V.arcologies[0].FSSubjugationistRace} ${womanA} you've ever seen.`, - "roman revivalist": `In fact,${HeA} is the most gorgeous Roman ${womanA} you've ever seen.`, - "neoimperialist": `In fact,${HeA} is the most gorgeous Imperial ${womanA} you've ever seen.`, - "aztec revivalist": `In fact,${HeA} is the most gorgeous Aztec ${womanA} you've ever seen.`, - "egyptian revivalist": `In fact,${HeA} is the most gorgeous Egyptian ${womanA} you've ever seen.`, - "edo revivalist": `In fact,${HeA} is the most gorgeous Japanese ${womanA} you've ever seen.`, - "arabian revivalist": `In fact,${HeA} is the most gorgeous Arabic ${womanA} you've ever seen.`, - "chinese revivalist": `In fact,${HeA} is the most gorgeous Chinese ${womanA} you've ever seen.`, + "supremacist": `In fact, ${HeA} is the most gorgeous ${V.arcologies[0].FSSupremacistRace} ${womanA} you've ever seen.`, + "subjugationist": `In fact, ${HeA} is the most gorgeous ${V.arcologies[0].FSSubjugationistRace} ${womanA} you've ever seen.`, + "roman revivalist": `In fact, ${HeA} is the most gorgeous Roman ${womanA} you've ever seen.`, + "neoimperialist": `In fact, ${HeA} is the most gorgeous Imperial ${womanA} you've ever seen.`, + "aztec revivalist": `In fact, ${HeA} is the most gorgeous Aztec ${womanA} you've ever seen.`, + "egyptian revivalist": `In fact, ${HeA} is the most gorgeous Egyptian ${womanA} you've ever seen.`, + "edo revivalist": `In fact, ${HeA} is the most gorgeous Japanese ${womanA} you've ever seen.`, + "arabian revivalist": `In fact, ${HeA} is the most gorgeous Arabic ${womanA} you've ever seen.`, + "chinese revivalist": `In fact, ${HeA} is the most gorgeous Chinese ${womanA} you've ever seen.`, "chattel religionist": `${HeA} is wearing a tight dress modeled after the symbol of your new religion; it leaves ${hisA} nipples and crotch fully exposed.`, get "physical idealist"() { if (V.arcologies[0].FSPhysicalIdealistStrongFat === 1) { diff --git a/src/personalAssistant/assistantEvents.tw b/src/personalAssistant/assistantEvents.tw index 8a18191e4fba2b1834d0648c7845e1518c41f794..cf51e700b29417d2389930de8534dfde0c121dfe 100644 --- a/src/personalAssistant/assistantEvents.tw +++ b/src/personalAssistant/assistantEvents.tw @@ -1656,7 +1656,7 @@ <<elseif $arcologies[0].FSRomanRevivalist != "unset">> <<set $assistant.fsAppearance = "roman revivalist">> <<elseif $arcologies[0].FSNeoImperialist != "unset">> - <<set $assistant.fsAppearance = "neo-imperialist">> + <<set $assistant.fsAppearance = "neoimperialist">> <<elseif $arcologies[0].FSAztecRevivalist != "unset">> <<set $assistant.fsAppearance = "aztec revivalist">> <<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> @@ -1925,7 +1925,7 @@ Can my new body be a virgin? I want the arcology to turn me into a priestess!" <<case "roman revivalist">> Can my new body be Roman?" - <<case "neo-imperialist">> + <<case "neoimperialist">> Can my new body be Imperial? I want to be part of your new Empire!" <<case "aztec revivalist">> Can my new body be Aztec?" diff --git a/src/uncategorized/clubReport.tw b/src/uncategorized/clubReport.tw deleted file mode 100644 index c7a90861626efa418ba0b9d01d45b18888383d61..0000000000000000000000000000000000000000 --- a/src/uncategorized/clubReport.tw +++ /dev/null @@ -1,258 +0,0 @@ -:: Club Report [nobr] - -<span id="club-stats"></span> - -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.club)>> -<<set _DL = _slaves.length, _SL = $slaves.length, $legendaryEntertainerID = 0, _FLsFetish = 0>> -<<set $legendaryWombID = 0>> -<<set _minBonus = 50, _maxBonus = 150>> - -<!-- Statistics gathering; income is rep boosts in numbers, and profit will be rep per cash unit, or cash unit per rep --> -<<set $facility = $facility || {}, $facility.club = initFacilityStatistics($facility.club)>> - -<<if _S.DJ>> - <<if (_S.DJ.health.condition < -80)>> - <<run improveCondition(_S.DJ, 20)>> - <<elseif _S.DJ.health.condition < -40>> - <<run improveCondition(_S.DJ, 15)>> - <<elseif _S.DJ.health.condition < 0>> - <<run improveCondition(_S.DJ, 10)>> - <<elseif _S.DJ.health.condition < 90>> - <<run improveCondition(_S.DJ, 7)>> - <</if>> - <<if _S.DJ.devotion <= 60>> - <<set _S.DJ.devotion += 5>> - <</if>> - <<if _S.DJ.trust < 60>> - <<set _S.DJ.trust += 3>> - <</if>> - <<if _S.DJ.fetishStrength <= 95>> - <<if _S.DJ.fetish != "humiliation">> - <<if fetishChangeChance(_S.DJ) > random(0,100)>> - <<set _FLsFetish = 1, _S.DJ.fetishKnown = 1, _S.DJ.fetish = "humiliation">> - <</if>> - <<elseif _S.DJ.fetishKnown == 0>> - <<set _FLsFetish = 1, _S.DJ.fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 2, _S.DJ.fetishStrength += 4>> - <</if>> - <</if>> - <<if _S.DJ.rules.living != "luxurious">> - <<set _S.DJ.rules.living = "luxurious">> - <</if>> - <<if _S.DJ.rules.rest != "restrictive">> - <<set _S.DJ.rules.rest = "restrictive">> - <</if>> - /% Make sure we have registered living expenses as for any other slave %/ - <<run getSlaveStatisticData(_S.DJ, $facility.club)>> - <<setLocalPronouns _S.DJ>> - <<= SlaveFullName(_S.DJ)>> is performing as the DJ. - <<if _S.DJ.relationship == -3 && _S.DJ.devotion > 50>> - $He tries $his best to be your energetic, cheerful $wife. - <</if>> - <<if (_FLsFetish == 1)>> - $He's expected to be the innovative, beautiful DJ spinning beats one minute, and come out of $his booth to grind on the floor the next; $he enjoys the interplay, and finds greater @@.lightcoral;pleasure in exhibitionism.@@ - <<elseif (_FLsFetish == 2)>> - Every day $he gets to enjoy hundreds of stares on $his skin, and @@.lightsalmon;becomes more of an exhibitionist.@@ - <</if>> - <<if getBestVision(_S.DJ) === 0>> - $His lack of eyesight doesn't slow $him down; rather, it strengthens $his other senses. $His tracks have a distinct sound, since $he experiences noise as $his sight. - <</if>> - <<if (_S.DJ.skill.entertainment <= 10)>> - Though _S.DJ.slaveName does $his best to lead on the club, with $his lack of skill $he can do little. - <<elseif (_S.DJ.skill.entertainment <= 30)>> - _S.DJ.slaveName's basic skills marginally @@.green;improve@@ the atmosphere in $clubName. - <<elseif (_S.DJ.skill.entertainment <= 60)>> - _S.DJ.slaveName's skills @@.green;improve@@ the atmosphere in $clubName. - <<elseif (_S.DJ.skill.entertainment < 100)>> - _S.DJ.slaveName's skills greatly @@.green;improve@@ the atmosphere in $clubName. - <<elseif (_S.DJ.skill.entertainment >= 100)>> - _S.DJ.slaveName's mastery immensely @@.green;improves@@ the atmosphere in $clubName. - <</if>> - <<if (_S.DJ.muscles > 5) && (_S.DJ.muscles <= 95)>> - $His toned body helps $him lead $his fellow club sluts by letting $him dance all night. - <</if>> - <<if (_S.DJ.intelligence+_S.DJ.intelligenceImplant > 15)>> - $He's smart enough to make an actual contribution to the music, greatly enhancing the entire experience. - <</if>> - <<if (_S.DJ.face > 95)>> - $His great beauty is a further draw, even when $he's in $his DJ booth, but especially when $he comes out to dance. - <</if>> - <<if setup.DJCareers.includes(_S.DJ.career)>> - $He has musical experience from $his life before $he was a slave, a grounding that gives $his tracks actual depth. - <<elseif _S.DJ.skill.DJ >= $masteredXP>> - $He has musical experience from working for you, giving $his tracks actual depth. - <<else>> - <<set _S.DJ.skill.DJ += random(1,Math.ceil((_S.DJ.intelligence+_S.DJ.intelligenceImplant)/15) + 8)>> - <</if>> - <<if (_DL + $clubSlavesGettingHelp < 10) && $DJnoSex != 1 && !slaveResting(_S.DJ)>> - <<if ($legendaryEntertainerID == 0) && (_S.DJ.prestige == 0) && (_S.DJ.skill.entertainment >= 100) && (_S.DJ.devotion > 50)>> - <<set $legendaryEntertainerID = _S.DJ.ID>> - <</if>> - <br> Since $he doesn't have enough sluts in $clubName to make it worthwhile for $him to be on stage 24/7, $he spends $his extra time slutting it up $himself. $He has sex with _S.DJ.sexAmount citizens, @@.green;pleasing them immensely,@@ since it's more appealing to fuck the DJ than some club slut. - <<if $showEWD != 0>> - <br> $He <<= App.SlaveAssignment.serveThePublic(_S.DJ)>> - <<else>> - <<run App.SlaveAssignment.serveThePublic(_S.DJ)>> - <</if>> - <</if>> - <<if (_DL > 0)>><br><br><</if>> -<</if>> - -<<if (_DL > 0)>> - <<set _possibleBonuses = 0>> - <<if (_DL != 1)>>''The _DL slaves pleasing citizens in $clubName''<<else>>''The one slave pleasing citizens in $clubName''<</if>> worked hard to @@.green;increase your reputation@@ this week. -<</if>> - -<<if _S.DJ>> - <<set $i = $slaveIndices[$djID]>> /* apply following SA passages to facility leader */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_S.DJ, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<includeDOM App.EndWeek.favoriteIcon(_S.DJ)>> - <span class='slave-name'><<= SlaveFullName(_S.DJ)>></span> is performing as the DJ in $clubName. - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_S.DJ)>> - <<run tired(_S.DJ)>> - <<includeDOM App.SlaveAssignment.rules(_S.DJ)>> - <<= App.SlaveAssignment.diet(_S.DJ)>> - <<includeDOM App.SlaveAssignment.longTermEffects(_S.DJ)>> - <<= App.SlaveAssignment.drugs(_S.DJ)>> - <<= App.SlaveAssignment.relationships(_S.DJ)>> - <<= App.SlaveAssignment.rivalries(_S.DJ)>> - <br> <<= App.SlaveAssignment.devotion(_S.DJ)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnClothes(_S.DJ)>> - <<run tired(_S.DJ)>> - <<run App.SlaveAssignment.rules(_S.DJ)>> - <<run App.SlaveAssignment.diet(_S.DJ)>> - <<run App.SlaveAssignment.longTermEffects(_S.DJ)>> - <<run App.SlaveAssignment.drugs(_S.DJ)>> - <<run App.SlaveAssignment.relationships(_S.DJ)>> - <<run App.SlaveAssignment.rivalries(_S.DJ)>> - <<run App.SlaveAssignment.devotion(_S.DJ)>> - <</if>> -<</if>> - -<<if (_DL > 0)>> - <<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave>> - <<if ($legendaryEntertainerID == 0) && (_slave.prestige == 0) && (_slave.skill.entertainment >= 100) && (_slave.devotion > 50)>> - <<set $legendaryEntertainerID = _slave.ID>> - <</if>> - <<if ($legendaryWombID == 0) && (!isAmputee(_slave)) && (_slave.preg > _slave.pregData.normalBirth/1.33) && (_slave.broodmother == 0) && (_slave.eggType == "human") && (_slave.counter.births > 10) && (_slave.devotion > 50) && (_slave.prestige == 0)>> - <<set $legendaryWombID = _slave.ID>> - <</if>> - <<if (_slave.devotion <= 20) && (_slave.trust >= -20)>> - <<set _slave.devotion -= 5, _slave.trust -= 5>> - <<elseif (_slave.devotion < 45)>> - <<set _slave.devotion += 4>> - <<elseif (_slave.devotion > 50)>> - <<set _slave.devotion -= 4>> - <</if>> - - <<if (_slave.trust < 30)>> - <<set _slave.trust += 5>> - <</if>> - - <<if (_slave.health.condition < -80)>> - <<run improveCondition(_slave, 20)>> - <<elseif (_slave.health.condition < -40)>> - <<run improveCondition(_slave, 15)>> - <<elseif (_slave.health.condition < 0)>> - <<run improveCondition(_slave, 10)>> - <<elseif (_slave.health.condition < 90)>> - <<run improveCondition(_slave, 7)>> - <</if>> - - <<if _slave.rules.living != "normal">> - <<set _slave.rules.living = "normal">> - <</if>> - - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_slave, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<includeDOM App.EndWeek.favoriteIcon(_slave)>> - <span class='slave-name'><<= SlaveFullName(_slave)>></span> - <<if _slave.choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob(_slave)>> - <<else>> - is serving in $clubName. - <</if>> - <br> $He <<= App.SlaveAssignment.serveThePublic(_slave)>> - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<includeDOM App.SlaveAssignment.rules(_slave)>> - <<= App.SlaveAssignment.diet(_slave)>> - <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> - <<= App.SlaveAssignment.drugs(_slave)>> - <<= App.SlaveAssignment.relationships(_slave)>> - <<= App.SlaveAssignment.rivalries(_slave)>> - <br> <<= App.SlaveAssignment.devotion(_slave)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnJob(_slave)>> - <<run App.SlaveAssignment.serveThePublic(_slave)>> - <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<includeDOM App.SlaveAssignment.rules(_slave)>> - <<run App.SlaveAssignment.diet(_slave)>> - <<run App.SlaveAssignment.longTermEffects(_slave)>> - <<run App.SlaveAssignment.drugs(_slave)>> - <<run App.SlaveAssignment.relationships(_slave)>> - <<run App.SlaveAssignment.rivalries(_slave)>> - <<run App.SlaveAssignment.devotion(_slave)>> - <</if>> - <</for>> - <p> - <<= App.Ads.report("club")>> - </p> - - <!-- Record statistics gathering --> - <<script>> - var b = State.variables.facility.club; - b.whoreIncome = 0; - b.customers = 0; - b.whoreCosts = 0; - b.rep = 0; - for (var si of b.income.values()) { - b.whoreIncome += si.income; - b.customers += si.customers; - b.whoreCosts += si.cost; - b.rep += si.rep; - } - b.adsCosts = State.variables.clubAdsSpending; - b.maintenance = State.variables.club * State.variables.facilityCost * (1.0 + 0.2 * State.variables.clubUpgradePDAs); - b.totalIncome = b.whoreIncome + b.adsIncome; - b.totalExpenses = b.whoreCosts + b.adsCosts + b.maintenance; - b.profit = b.totalIncome / b.totalExpenses; - <</script>> - <<if $clubDecoration != "standard">> - <p> - <<= capFirstChar($clubName)>>'s customers enjoy @@.green;having sex in $clubDecoration surroundings.@@ - </p> - <</if>> - - <!-- Statistics output --> - <<includeDOM App.Facilities.Club.Stats(false)>> - <<timed 50ms>> - <<replace #club-stats>> - <<includeDOM App.Facilities.Club.Stats(true)>> - <</replace>> - <</timed>> -<</if>> - -<<if _DL > 0 || _S.DJ>> - <br><br> -<</if>> diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw deleted file mode 100644 index 14409cb005a55d468e4c80bb3a27c6ac6a8493d4..0000000000000000000000000000000000000000 --- a/src/uncategorized/dairyReport.tw +++ /dev/null @@ -1,1212 +0,0 @@ -:: Dairy Report [nobr] - -<span id="dairy-stats"> -</span> - -<<set _MMWorkout = 0>> -<<set _BF = App.Data.misc.bioreactorFluids>> -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.dairy)>> -<<set _DL = _slaves.length, _SL = $slaves.length, $bioreactorPerfectedID = 0, $legendaryBallsID = 0, $legendaryCowID = 0, $milkmaidDevotionBonus = 1, $milkmaidHealthBonus = 0, $milkmaidTrustBonus = 1, $milkmaidDevotionThreshold = 45, $milkmaidTrustThreshold = 35, _anusesStretched = 0, _birthers = 0, _births = 0, _cumWeek = 0, _femCumWeek = 0, _FLsFetish = 0, _milkWeek = 0, _balltacular = 0, _boobtacular = 0, _careerForgotten = 0, _chemMinor = 0, _chemSevere = 0, _desterilized = 0, _hateFilled = 0, _horrified = 0, _intelligenceLost = 0, _mindbroken = 0, _profits = 0, _skillsLost = 0, _stupidified = 0, _vaginasStretched = 0, _cmSlave = 0, _dsSlave = 0, _hfSlave = 0, _hrSlave = 0, _slSlave = 0, _cfSlave = 0, _stSlave = 0, _btSlave = 0, _inflatedSlaves = App.Facilities.Dairy.inflation()>> - -<!-- Statistics gathering --> -<<set $facility = $facility || {}, $facility.dairy = initFacilityStatistics($facility.dairy)>> - -<<set _dairyNameCaps = capFirstChar($dairyName)>> - -<<if ($MilkmaidID != 0)>> - <<set _FLs = $slaveIndices[$MilkmaidID]>> - <<set _milkmaidImpregnated = 0, _milkers = 0, _cummers = 0, _breeders = 0, _prostateStim = 0>> - - <<if (_DL > 0)>> - <<for _slave range _slaves>> - <<if _slave.lactation > 0>> - <<set _milkers++>> - <</if>> - <<if _slave.balls > 0 && _slave.ballType == "human">> - <<set _cummers++>> - <</if>> - <<if (_slave.bellyPreg >= 500 && $dairyPregSetting > 0)>> - <<set _breeders++>> - <</if>> - <<if ($milkmaidImpregnates == 1) && (canPenetrate(_S.Milkmaid)) && _S.Milkmaid.pubertyXY == 1 && !slaveResting(_S.Milkmaid)>> - <<if (canImpreg(_slave, _S.Milkmaid))>> - <<set _slave.preg = 1, _slave.pregSource = $MilkmaidID, _slave.pregKnown = 1, _slave.pregWeek = 1, _milkmaidImpregnated++>> - <<if _slave.mpreg == 1>> - <<set _slave.counter.anal += 10, $analTotal += 10>> - <<else>> - <<set _slave.counter.vaginal += 10, $vaginalTotal += 10>> - <</if>> - <<set _slave.pregType = setPregType(_slave)>> - <<set WombImpregnate(_slave, _slave.pregType, $MilkmaidID, 1)>> - <</if>> - <</if>> - /* how much effort the MM must take to force a slave into a stall */ - <<if _slave.devotion <= 20>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.trust < 20>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.muscles >= 30 || _slave.muscles < -30>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.weight >= 70>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.weight >= 160>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.boobs >= 20000>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.balls >= 30>> - <<set _MMWorkout++>> - <</if>> - <<if _slave.belly >= 5000>> - <<set _MMWorkout++>> - <</if>> - <<if !canMove(_slave)>> /* big bonus if they can't move themselves and are fat as cows */ - <<if _slave.weight >= 70>> - <<set _MMWorkout += 2>> - <</if>> - <<if _slave.weight >= 160>> - <<set _MMWorkout += 2>> - <</if>> - <<if _slave.boobs >= 20000>> - <<set _MMWorkout += 2>> - <</if>> - <<if _slave.balls >= 30>> - <<set _MMWorkout += 2>> - <</if>> - <<if _slave.belly >= 5000>> - <<set _MMWorkout += 2>> - <</if>> - <<elseif !canWalk(_slave)>> /* smaller bonus if they are fat as cows and need assistance with moving */ - <<if _slave.weight >= 70>> - <<set _MMWorkout += 1>> - <</if>> - <<if _slave.weight >= 160>> - <<set _MMWorkout += 1>> - <</if>> - <<if _slave.boobs >= 20000>> - <<set _MMWorkout += 1>> - <</if>> - <<if _slave.balls >= 30>> - <<set _MMWorkout += 1>> - <</if>> - <<if _slave.belly >= 5000>> - <<set _MMWorkout += 1>> - <</if>> - <</if>> - <<if ($dairyStimulatorsSetting < 2) && (_S.Milkmaid.dick > 4) && (canPenetrate(_S.Milkmaid)) && _prostateStim != 1>> - <<if (_slave.balls > 0) && (_slave.prostate > 0)>> - <<set _prostateStim = 1>> - <</if>> - <</if>> - <</for>> - <</if>> - - <<if _S.Milkmaid.health.condition < 90>> - <<set _S.Milkmaid.curatives = 2>> - <<else>> - <<set _S.Milkmaid.curatives = 0>> - <</if>> - <<if (_S.Milkmaid.diet != "healthy")>> - <<set (_S.Milkmaid.diet = "healthy")>> - <</if>> - <<if _S.Milkmaid.devotion <= 60>> - <<set _S.Milkmaid.devotion += 5>> - <</if>> - <<if _S.Milkmaid.trust < 60>> - <<set _S.Milkmaid.trust += 5>> - <</if>> - <<if (_S.Milkmaid.skill.oral > 0)>> - <<set $milkmaidDevotionBonus += Math.trunc(_S.Milkmaid.skill.oral/30)>> - <</if>> - <<if (_S.Milkmaid.health.condition >= 80)>> - <<set $milkmaidHealthBonus++>> - <</if>> - <<if _S.Milkmaid.rules.living != "luxurious">> - <<set _S.Milkmaid.rules.living = "luxurious">> - <</if>> - <<if _S.Milkmaid.rules.rest != "restrictive">> - <<set _S.Milkmaid.rules.rest = "restrictive">> - <</if>> - <<if _S.Milkmaid.fetishStrength <= 95>> - <<if _milkers >= _cummers && _milkers >= _breeders>> - <<if _S.Milkmaid.fetish != "boobs">> - <<if fetishChangeChance(_S.Milkmaid) > random(0,100)>> - <<set _FLsFetish = 1, _S.Milkmaid.fetishKnown = 1, _S.Milkmaid.fetish = "boobs">> - <</if>> - <<elseif _S.Milkmaid.fetishKnown == 0>> - <<set _FLsFetish = 1, _S.Milkmaid.fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 2, _S.Milkmaid.fetishStrength += 4>> - <</if>> - <<elseif _cummers >= _breeders>> - <<if _S.Milkmaid.fetish != "cumslut">> - <<if fetishChangeChance(_S.Milkmaid) > random(0,100)>> - <<set _FLsFetish = 3, _S.Milkmaid.fetishKnown = 1, _S.Milkmaid.fetish = "cumslut">> - <</if>> - <<elseif _S.Milkmaid.fetishKnown == 0>> - <<set _FLsFetish = 3, _S.Milkmaid.fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 4, _S.Milkmaid.fetishStrength += 4>> - <</if>> - <<else>> - <<if _S.Milkmaid.fetish != "pregnancy">> - <<if fetishChangeChance(_S.Milkmaid) > random(0,100)>> - <<set _FLsFetish = 5, _S.Milkmaid.fetishKnown = 1, _S.Milkmaid.fetish = "pregnancy">> - <</if>> - <<elseif _S.Milkmaid.fetishKnown == 0>> - <<set _FLsFetish = 5, _S.Milkmaid.fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 6, _S.Milkmaid.fetishStrength += 4>> - <</if>> - <</if>> - <</if>> - <<run getSlaveStatisticData(_S.Milkmaid, $facility.dairy)>> - <<set $i = _FLs>> - <<setLocalPronouns _S.Milkmaid>> - <<= SlaveFullName(_S.Milkmaid)>> is serving as your Milkmaid. - <<if _S.Milkmaid.relationship == -3 && _S.Milkmaid.devotion > 50>> - <<set $milkmaidDevotionBonus += 2, $milkmaidTrustBonus += 2>> - $He tries $his best to be your perfect farm<<= $wife>>. - <</if>> - <<if _milkmaidImpregnated > 0>> - It's $his responsibility to keep $his charges pregnant, and $he constantly - <<if _milkmaidImpregnated == 1>> - breeds the one fertile cow. - <<else>> - fills the _milkmaidImpregnated cows' cunts with $his cum. - <</if>> - <<if _S.Milkmaid.career == "a breeding bull">> - $He was conditioned to fill empty wombs, so $he takes a @@.hotpink;deep pleasure@@ in $his job. - <<set _S.Milkmaid.devotion++>> - <<elseif (_S.Milkmaid.fetish == "pregnancy" && _S.Milkmaid.fetishKnown == 1)>> - $He has a pregnancy fetish, so $he finds $his job @@.hotpink;quite enjoyable,@@ especially when $he gets to watch the cows swell with $his children. - <<set _S.Milkmaid.devotion += Math.ceil(_S.Milkmaid.fetishStrength/25)>> - <<set _S.Milkmaid.fetishStrength += 2>> - <</if>> - <<set _Tmult = (_milkmaidImpregnated * 10), _S.Milkmaid.counter.penetrative += _Tmult, $penetrativeTotal += _Tmult>> - <<set _S.Milkmaid.need = 0>> - <</if>> - <<if (_FLsFetish == 1)>> - In $his line of work, $he touches more breasts than even you do. $He lives in an atmosphere of quivering, heaving, milky breastflesh; of girls who shudder and moan when $he touches their creamy nipples. $He has @@.lightcoral;become more of a breast $girl.@@ - <<elseif (_FLsFetish == 2)>> - It's a hard life, pulling teats and washing cows, but it does @@.lightsalmon;make $him more of a breast fetishist.@@ - <<elseif (_FLsFetish == 3)>> - In $his line of work, $he touches more dicks and balls than most sluts. $He lives in an atmosphere of constant orgasm and ejaculation; of girls who shudder and moan when $he touches their engorged members. $He has @@.lightcoral;become more of a cum $girl.@@ - <<elseif (_FLsFetish == 4)>> - It's a hard life, cupping balls, cleaning dicks, and observing semen quality, but it does @@.lightsalmon;make $him more of a cum fetishist.@@ - <<elseif (_FLsFetish == 5)>> - In $his line of work, $he fondles more pregnancies than most clinics. $He lives in an atmosphere of swollen, hanging, baby-filled bellies; of girls who shudder and moan when $he runs $his hands across their bellies. $He has @@.lightcoral;grown a taste for girls laden with child.@@ - <<elseif (_FLsFetish == 6)>> - It's a hard life, washing bellies and inspecting pussies, but it does @@.lightsalmon;make $him more of a pregnancy fetishist.@@ - <</if>> - <<if (_S.Milkmaid.muscles > 30)>> - <<set $milkmaidHealthBonus++>> - $His muscles help $him handle the fattest or most reluctant cow. - <</if>> - <<if (_MMWorkout > random(1,30-_S.Milkmaid.geneticQuirks.mLoss+_S.Milkmaid.geneticQuirks.mGain)) && _S.Milkmaid.muscles < 60>> - Constantly having to wrestle unruly or aiding heavy cows into their stalls forces $him to @@.lime;build muscle.@@ - <<set _S.Milkmaid.muscles++>> - <</if>> - <<if (_S.Milkmaid.skill.oral > 30)>> - $His skilled tongue helps $him keep $his cattle happy. - <</if>> - <<if (_S.Milkmaid.skill.oral < 90)>> - <<= slaveSkillIncrease('oral', _S.Milkmaid, 3)>> - <</if>> - <<if (_S.Milkmaid.sexualQuirk == "caring")>> - <<set $milkmaidTrustBonus++>> - $He's very caring, and does $his best to get the cows to trust $him. - <</if>> - <<if (_S.Milkmaid.behavioralQuirk == "funny")>> - <<set $milkmaidTrustBonus++>> - $He's funny, and does $his best to get the cows to trust $him by keeping them laughing. - <</if>> - <<if setup.milkmaidCareers.includes(_S.Milkmaid.career)>> - <<set $milkmaidHealthBonus++>> - $He has career experience dealing with milk animals. - <<elseif _S.Milkmaid.skill.milkmaid >= $masteredXP>> - <<set $milkmaidHealthBonus++>> - $He has experience harvesting slave products from working for you. - <<else>> - <<set _S.Milkmaid.skill.milkmaid += random(1,Math.ceil((_S.Milkmaid.intelligence+_S.Milkmaid.intelligenceImplant)/15) + 8)>> - <</if>> - <<if _prostateStim == 1>> - $He uses $his turgid cock to give prostate stimulation to slaves that need help ejaculating. - <<set _S.Milkmaid.need -= 50>> - <</if>> - <<set $milkmaidDevotionThreshold += (5*$milkmaidDevotionBonus), $milkmaidTrustThreshold += (5*$milkmaidTrustBonus)>> - <<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<if _S.Milkmaid.rivalryTarget == _slave.ID>> - <<setLocalPronouns _slave 2>> - $He either neglects or harasses $his <<print rivalryTerm(_S.Milkmaid)>>, _slave.slaveName, making sure _he2 is unhappy and uncomfortable. - <<set _slave.devotion -= 3, _slave.trust -= 3>> - <<if random(1,100) > 65>> - <<set _S.Milkmaid.rivalry++, _slave.rivalry++>> - <</if>> - <<elseif _S.Milkmaid.relationshipTarget == _slave.ID>> - <<setLocalPronouns _slave 2>> - $He dotes over $his <<print relationshipTerm(_S.Milkmaid)>>, _slave.slaveName, making sure _he2 is happy and comfortable. - <<set _slave.devotion++, _slave.trust++>> - <<elseif areRelated(_S.Milkmaid, _slave)>> - <<setLocalPronouns _slave 2>> - $He pays special attention to $his <<print relativeTerm(_S.Milkmaid,_slave)>>, _slave.slaveName, making sure _he2 is well kept and happy. - <<set _slave.trust++>> - <</if>> - <<if _slave.prestigeDesc == "$He is remembered for winning best in show as a dairy cow.">> - <<if (_slave.lactation > 0) && ((_slave.boobs-_slave.boobsImplant) > 6000)>> - $He spends extra time with _slave.slaveName, the well-known cow. $He is fascinated by _slave.slaveName's massive _slave.boobs cc breasts and spends extra time massaging and kneading them to maximize production. - <<set _slave.devotion += 3, _slave.trust += 3>> - <<else>> - $He is disappointed that the well-known cow _slave.slaveName<<if (_slave.lactation == 0)>> isn't producing milk anymore. <<else>>'s breasts have shrunken considerably from their heyday.<</if>> - <</if>> - <</if>> - <<if _slave.prestigeDesc == "$He is remembered for winning best in show as a cockmilker.">> - <<if ((_slave.balls > 6) && (_slave.dick != 0)) || ((_slave.balls > 4) && (_slave.dick != 0) && (_slave.prostate > 1))>> - $He spends extra time with _slave.slaveName, the massive ejaculating cow. $He can't help but massage the cow's dick and testes to stimulate them further and coax more from them. - <<set _slave.devotion += 3, _slave.trust += 3>> - <<else>> - $He is disappointed that the (formerly) massive ejaculating cow _slave.slaveName<<if _slave.balls == 0 || _slave.dick == 0>> is incapable of giving cum<<elseif _slave.prostate < 2>> no longer possesses a hyperactive prostate<<else>>'s balls are considerably smaller than at their heyday<</if>>. - <</if>> - <</if>> - <<if _slave.prestigeDesc == "$He is remembered for winning best in show as a breeder." && _slave.bellyPreg >= 1500>> - <<setLocalPronouns _slave 2>> - $He spends extra time with _slave.slaveName, the well-known breeder. _S.Milkmaid.slaveName is fascinated by _his2 growing pregnancy and popular womb. $He makes sure _his2 belly and its occupants are nice and comfortable. - <<set _slave.devotion += 3, _slave.trust += 3>> - <</if>> - <</for>> -<</if>> - -<<set _Tadd = ($bioreactorsXY + $bioreactorsXX + $bioreactorsHerm + $bioreactorsBarren)>> -<<if (_DL + _Tadd > 0)>> - <<if ($MilkmaidID != 0)>><br><br><</if>> - <<if (_DL != 1)>>''There are _DL cows in $dairyName.''<<else>>''There is one cow in $dairyName.''<</if>> - <<if ($dairyRestraintsSetting > 1)>> - The facility functions as an industrial slave products factory. - <</if>> - <<if (_Tadd > 0)>> - _Tadd milking machines have permanent biological components, making a total of <<print _Tadd + _DL>> milk-producing bodies. - <</if>> -<</if>> - -<<if ($MilkmaidID != 0)>> - <<set $i = _FLs>> /* apply following SA passages to facility leader */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_S.Milkmaid, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<includeDOM App.EndWeek.favoriteIcon(_S.Milkmaid)>> - <span class='slave-name'><<= SlaveFullName(_S.Milkmaid)>></span> is serving as your Milkmaid. - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_S.Milkmaid)>> - <<run tired(_S.Milkmaid)>> - <<includeDOM App.SlaveAssignment.rules(_S.Milkmaid)>> - <<= App.SlaveAssignment.diet(_S.Milkmaid)>> - <<includeDOM App.SlaveAssignment.longTermEffects(_S.Milkmaid)>> - <<= App.SlaveAssignment.drugs(_S.Milkmaid)>> - <<= App.SlaveAssignment.relationships(_S.Milkmaid)>> - <<= App.SlaveAssignment.rivalries(_S.Milkmaid)>> - <br> <<= App.SlaveAssignment.devotion(_S.Milkmaid)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnClothes(_S.Milkmaid)>> - <<run tired(_S.Milkmaid)>> - <<run App.SlaveAssignment.rules(_S.Milkmaid)>> - <<run App.SlaveAssignment.diet(_S.Milkmaid)>> - <<run App.SlaveAssignment.longTermEffects(_S.Milkmaid)>> - <<run App.SlaveAssignment.drugs(_S.Milkmaid)>> - <<run App.SlaveAssignment.relationships(_S.Milkmaid)>> - <<run App.SlaveAssignment.rivalries(_S.Milkmaid)>> - <<run App.SlaveAssignment.devotion(_S.Milkmaid)>> - <</if>> -<</if>> - -<<set _oldCash = $cash>> -<<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave>> - /* Special attention section */ - <<if ($legendaryCowID == 0) && (_slave.lactation > 0) && ((_slave.boobs-_slave.boobsImplant-_slave.boobsMilk) > 6000) && (_slave.devotion > 50) && (_slave.prestige == 0)>> - <<set $legendaryCowID = _slave.ID>> - <</if>> - <<if ($legendaryBallsID == 0) && (_slave.dick != 0) && (_slave.balls > 5 || (_slave.balls > 4 && _slave.prostate > 1)) && (_slave.devotion > 50) && (_slave.prestige == 0)>> - <<set $legendaryBallsID = _slave.ID>> - <</if>> - - /* Perform facility based rule changes */ - <<if ($dairySlimMaintain == 0)>> - <<if $dairyWeightSetting == 0>> - <<if _slave.weight <= 30>> - <<set _slave.diet = "fattening">> - <<else>> - <<set _slave.diet = "healthy">> - <</if>> - <<elseif $dairyWeightSetting == 1>> - <<if _slave.weight <= 95>> - <<set _slave.diet = "fattening">> - <<else>> - <<set _slave.diet = "healthy">> - <</if>> - <<elseif $dairyWeightSetting == 2>> - <<if _slave.weight <= 130>> - <<set _slave.diet = "fattening">> - <<else>> - <<set _slave.diet = "healthy">> - <</if>> - <<elseif $dairyWeightSetting == 3>> - <<if _slave.weight <= 160>> - <<set _slave.diet = "fattening">> - <<else>> - <<set _slave.diet = "healthy">> - <</if>> - <<elseif $dairyWeightSetting == 4>> - <<if _slave.weight <= 195>> - <<set _slave.diet = "fattening">> - <<else>> - <<set _slave.diet = "healthy">> - <</if>> - <<elseif $dairyRestraintsSetting > 1>> - <<set _slave.diet = "healthy">> - <</if>> - <<elseif _slave.weight > 10>> - <<set _slave.diet = "restricted">> - <<elseif (_slave.diet == "fattening") || _slave.diet == "healthy" || ($dairyRestraintsSetting > 1)>> - <<set _slave.diet = "healthy">> - <</if>> - <<if $dairyRestraintsSetting > 1>> - <<set _slave.collar = "none", _slave.faceAccessory = "none", _slave.mouthAccessory = "none", _slave.choosesOwnClothes = 0, _slave.clothes = "no clothing", _slave.vaginalAccessory = "none", _slave.vaginalAttachment = "none", _slave.dickAccessory = "none", _slave.buttplug = "none", _slave.chastityAnus = 0, _slave.chastityPenis = 0, _slave.chastityVagina = 0>> - <</if>> - <<switch $dairyDecoration>> - <<case "Arabian Revivalist" "Aztec Revivalist" "Chattel Religionist" "Chinese Revivalist" "Degradationist" "Edo Revivalist" "Egyptian Revivalist" "Roman Revivalist" "Subjugationist" "Supremacist">> - <<set _slave.rules.living = "spare">> - <<default>> - <<set _slave.rules.living = "normal">> - <</switch>> - <<if $dairyPregSetting > 0>> - <<set WombCleanGenericReserve(_slave, "incubator", 9999)>> - <<set WombCleanGenericReserve(_slave, "nursery", 9999)>> - <</if>> - - /* General End of Week effects */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_slave, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <span class='slave-name'><<= SlaveFullName(_slave)>></span> - <<if _slave.choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob(_slave)>> - <<else>> - is serving as a cow in $dairyName. - <</if>> - <<includeDOM App.EndWeek.favoriteIcon(_slave)>> - <<set _milkResults = App.SlaveAssignment.getMilked(_slave)>> - <br> $He <<= _milkResults.text>> - <br> - <<includeDOM App.SlaveAssignment.rules(_slave)>> - <<= App.SlaveAssignment.diet(_slave)>> - <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> - <<= App.SlaveAssignment.drugs(_slave)>> - <<= App.SlaveAssignment.relationships(_slave)>> - <<= App.SlaveAssignment.rivalries(_slave)>> - <br> <<= App.SlaveAssignment.devotion(_slave)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnJob(_slave)>> - <<set _milkResults = App.SlaveAssignment.getMilked(_slave)>> - <<run App.SlaveAssignment.rules(_slave)>> - <<run App.SlaveAssignment.diet(_slave)>> - <<run App.SlaveAssignment.longTermEffects(_slave)>> - <<run App.SlaveAssignment.drugs(_slave)>> - <<run App.SlaveAssignment.relationships(_slave)>> - <<run App.SlaveAssignment.rivalries(_slave)>> - <<run App.SlaveAssignment.devotion(_slave)>> - <</if>> - <<set _milkWeek += _milkResults.milk, _cumWeek += _milkResults.cum>> - - /* Facility Specific End of Week effects */ - <<if (_slave.devotion <= 20) && (_slave.trust >= -20)>> - <<set _slave.devotion -= 5, _slave.trust -= 5>> - <</if>> - <<if (_slave.health.condition < -80)>> - <<run improveCondition(_slave, 20)>> - <<elseif (_slave.health.condition < -40)>> - <<run improveCondition(_slave, 10)>> - <<elseif (_slave.health.condition < 0)>> - <<run improveCondition(_slave, 7)>> - <<elseif (_slave.health.condition < 90)>> - <<run improveCondition(_slave, 3)>> - <</if>> - <<if (_slave.inflation > 0)>> - <<run deflate(_slave)>> - <</if>> - <<set _gigantomastiaMod = _slave.geneticQuirks.gigantomastia == 2 ? (_slave.geneticQuirks.macromastia == 2 ? 3 : 2) : 1>> - <<if (_slave.lactation > 0) && (($dairySlimMaintain == 0) || (_slave.boobs > 700))>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 100>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50>> - <<elseif (_slave.boobs < 10000*_gigantomastiaMod)>> - <<set _growth = 25>> - <<else>> - <<set _growth = 0>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <<if _slave.prostate == 1>> - <<set _slave.prostate = 2>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", _slave), surgeryDamage(_slave, 10)>> - <</if>> - <<if _slave.vasectomy == 1>> - <<set _slave.vasectomy = 0>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", _slave), surgeryDamage(_slave, 10)>> - <</if>> - <<if ($dairySlimMaintain == 0)>> - <<if $dairyImplantsSetting <= 1>> - <<if (_slave.lactation < 2) && (_slave.boobs > 300 || _slave.balls == 0 || _slave.lactation == 1 || $dairyImplantsSetting == 1)>> - <<set _slave.lactation = 2, _slave.lactationDuration = 2>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", _slave), surgeryDamage(_slave, 10)>> - <</if>> - <<elseif $dairyImplantsSetting == 3>> - <<if (_slave.lactation < 1) && (_slave.boobs > 300 || _slave.balls == 0)>> - <<run induceLactation(_slave, 9)>> - <</if>> - <</if>> - <</if>> - <<if $dairyHormonesSetting >= 0>> - <<if _slave.lactation > 0>> - <<set _slave.hormones = $dairyHormonesSetting>> - <<elseif _slave.balls > 0>> - <<set _slave.hormones = -1 * $dairyHormonesSetting>> - <<else>> - <<set _slave.hormones = $dairyHormonesSetting>> - <</if>> - <</if>> - <<if ($dairyFeedersUpgrade == 1) && ($dairyFeedersSetting > 0)>> - <<if $dairySlimMaintain == 0 && _slave.diet == "fattening">> - <<set _slave.weight += 2>> - <<if _slave.weightDirection == 1>> - <<set _slave.weight += 2>> - <</if>> - <</if>> - <<if (_slave.health.condition < 75)>> - <<run improveCondition(_slave, 25)>> - <<else>> - <<if ($dairySlimMaintain == 0) && _slave.lactation > 0>> - <<if $dairyFeedersSetting > 1 && $dairyStimulatorsSetting > 0>> - <<if _slave.boobs < 50000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <<else>> - /*<<set _slave.boobs = 50000>>*/ - <</if>> - <<elseif $dairyFeedersSetting > 0 && $dairyStimulatorsSetting > 0>> - <<if _slave.boobs < 25000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <<elseif $dairyFeedersSetting > 1>> - <<if _slave.boobs < 10000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <<else>> - <<if _slave.boobs < 5000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <</if>> - <</if>> - <<if (_slave.balls > 0)>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.geneMods.NCS == 0) && (_slave.balls < 125)>> - <<set _slave.balls++>> - <<elseif (_slave.geneMods.NCS == 1) && (_slave.balls < 125) && (random(1,600) > (30+(10*_slave.balls)-(10*$dairyRestraintsSetting)-($injectionUpgrade*10)))>> - <<set _slave.balls++>> - <</if>> - <<if (_slave.balls >= 125)>> - <<set _balltacular++>> - <<set _btSlave = _slave>> - <</if>> - <<elseif (_slave.balls < 10)>> - <<if (_slave.geneMods.NCS == 0) && (random(1,100) > (40+(10*_slave.balls)-(10*$dairyRestraintsSetting)-($injectionUpgrade*10)))>> - <<set _slave.balls++>> - <<elseif (_slave.geneMods.NCS == 1) && (_slave.balls < 125) && (random(1,50) > (40+(10*_slave.balls)-(10*$dairyRestraintsSetting)-($injectionUpgrade*10)))>> - <<set _slave.balls++>> - <</if>> - <<if (_slave.balls >= 10)>> - <<set _balltacular++>> - <<set _btSlave = _slave>> - <</if>> - <</if>> - <<if _slave.dick > 0>> - <<if _slave.dick < 10>> - <<if ((_slave.geneMods.NCS == 0) && (random(1,100) > (40+(10*_slave.dick)-(10*$dairyRestraintsSetting)-($injectionUpgrade*10))))>> - <<set _slave.dick++>> - <<elseif ((_slave.geneMods.NCS == 1) && (random(1,50) > (40+(10*_slave.dick)-(10*$dairyRestraintsSetting)-($injectionUpgrade*10))))>> - <<set _slave.dick++>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> /* closes ($dairyFeedersUpgrade == 1) && ($dairyFeedersSetting > 0) */ - <<if ($dairyStimulatorsUpgrade == 1) && $dairyStimulatorsSetting > 0>> - <<if ($dairyStimulatorsSetting > 1) && (_slave.anus < 4)>> - <<set _slave.anus++>> - <<if (_slave.anus >= 4)>> - <<set _anusesStretched++>> - <</if>> - <<elseif (_slave.anus < 3)>> - <<set _slave.anus++>> - <</if>> - <<if (_slave.health.condition < 60)>> - <<run improveCondition(_slave, 20)>> - <<elseif $dairySlimMaintain == 0 && _slave.lactation > 0>> - <<if $dairyFeedersSetting > 1>> - <<if _slave.boobs < 50000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <<elseif $dairyFeedersSetting > 0>> - <<if _slave.boobs < 25000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <<else>> - <<if _slave.boobs < 10000>> - <<if $arcologies[0].FSAssetExpansionistResearch == 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 75*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50)/4))>> - <</if>> - <<else>> - <<set _growth = 25*Math.trunc(($injectionUpgrade*2)+$dairyFeedersSetting+$dairyRestraintsSetting+((50-_slave.physicalAge)/4))>> - <</if>> - <<if _slave.boobs <= 20000 && _slave.boobs+_growth > 20000>> - <<set _boobtacular++>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - <<set _growth = Math.trunc(_growth/2)>> - <</if>> - <<set _slave.boobs += _growth>> - <</if>> - <</if>> - <</if>> - <</if>> - <<if ($dairyRestraintsSetting > 1)>> - <<if _slave.lactation > 0>> - <<set _slave.lactationAdaptation += 1>> - <</if>> - <<if (_slave.muscles > -100)>> - <<set _slave.muscles -= 1+_slave.geneticQuirks.mLoss>> - <</if>> - <<if (_slave.fetish == "mindbroken")>> - <<if (_slave.boobs > 48000) && ((_slave.balls >= 10) || (_slave.balls == 0))>> - <<set $bioreactorPerfectedID = _slave.ID>> - <</if>> - <<else>> - <<if (_slave.sexualFlaw != "self hating")>> - <<if (_slave.sexualFlaw != "cum addict") || ($dairyFeedersSetting == 0)>> - <<if (_slave.sexualFlaw != "anal addict") || ($dairyStimulatorsSetting == 0)>> - <<if (_slave.sexualFlaw != "breeder") || (_slave.preg < 0) || ($dairyPregSetting == 0)>> - <<if $dairyStimulatorsSetting > 1>> - <<if (_slave.sexualFlaw != "hates anal") && (_slave.sexualQuirk != "painal queen")>> - <<set _slave.sexualFlaw = "hates anal">> - <</if>> - <</if>> - <<if $dairyPregSetting > 1>> - <<if (_slave.sexualFlaw != "hates penetration") && (_slave.sexualQuirk != "strugglefuck queen")>> - <<set _slave.sexualFlaw = "hates penetration">> - <</if>> - <</if>> - <<if $dairyFeedersSetting > 1>> - <<if (_slave.sexualFlaw != "hates oral") && (_slave.sexualQuirk != "gagfuck queen")>> - <<set _slave.sexualFlaw = "hates oral">> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <</if>> - <<if _slave.chem > 250>> - <<set _chemSevere++>> - <<elseif _slave.chem > 100>> - <<set _chemMinor++>> - <<set _cmSlave = _slave>> - <</if>> - <</if>> - <<if ($dairyStimulatorsSetting + $dairyFeedersSetting + $dairyPregSetting) > 5>> - <<if _slave.devotion <= 95 && _slave.sexualFlaw != "self hating">> - <<if (_slave.sexualFlaw != "breeder") || (_slave.preg < 0)>> - <<if (_slave.devotion > -75)>> - <<set _slave.devotion -= 10>> - <<if (_slave.devotion < -65)>> - <<set _hateFilled++>> - <<set _hfSlave = _slave>> - <</if>> - <<elseif (_slave.trust > -75)>> - <<set _slave.trust -= 10>> - <<if (_slave.trust < -65)>> - <<set _horrified++>> - <<set _hrSlave = _slave>> - <</if>> - <<elseif (_slave.skill.vaginal > 0)>> - <<set _slave.skill.vaginal -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.skill.oral > 0)>> - <<set _slave.skill.oral -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.skill.anal > 0)>> - <<set _slave.skill.anal -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.career != "a bioreactor")>> - <<set _slave.career = "a bioreactor", _careerForgotten++>> - <<set _cfSlave = _slave>> - <<elseif (_slave.intelligenceImplant > 0)>> - <<set _slave.intelligenceImplant = Math.clamp(_slave.intelligenceImplant-5, 0, 30), _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.intelligence >= -15)>> - <<set _slave.intelligence -= 5, _intelligenceLost++>> - <<elseif (_slave.devotion >= -20)>> - <<set _slave.devotion -= 10>> - <<elseif (_slave.trust >= -20)>> - <<set _slave.trust -= 10>> - <<elseif (_slave.skill.whoring > 0)>> - <<set _slave.skill.whoring -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.skill.entertainment > 0)>> - <<set _slave.skill.entertainment -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.intelligence >= -50)>> - <<set _slave.intelligence -= 5>> - <<if _slave.intelligence < -50>> - <<set _stupidified++>> - <<set _stSlave = _slave>> - <</if>> - <<elseif (_slave.fetish != "mindbroken")>> - <<set _slave.fetish = "mindbroken", _mindbroken++>> - <</if>> - <</if>> - <</if>> - <<if ((_slave.counter.milk > 1000) && (_slave.boobs > 12000) || (_slave.counter.cum > 1000) && (_slave.balls >= 10)) && (_slave.career != "a bioreactor")>> - <<set _slave.career = "a bioreactor", _careerForgotten++>> - <<set _cfSlave = _slave>> - <</if>> - <<if ($arcologies[0].FSBodyPuristLaw == 0) && ($healthyDrugsUpgrade == 0)>> - <<set _slave.chem += 5>> - <<else>> - <<set _slave.chem += 2>> - <</if>> - <<elseif ($dairyStimulatorsSetting + $dairyFeedersSetting + $dairyPregSetting) > 3>> - <<if (_slave.devotion < 75)>> - <<if (_slave.devotion > -75)>> - <<set _slave.devotion -= 5>> - <<if (_slave.devotion < -70)>> - <<set _hateFilled++>> - <<set _hfSlave = _slave>> - <</if>> - <<elseif (_slave.trust > -75)>> - <<set _slave.trust -= 5>> - <<if (_slave.trust < -70)>> - <<set _horrified++>> - <<set _hrSlave = _slave>> - <</if>> - <<elseif (_slave.skill.vaginal >= 20)>> - <<set _slave.skill.vaginal -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.skill.oral >= 20)>> - <<set _slave.skill.oral -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.skill.anal >= 20)>> - <<set _slave.skill.anal -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.career != "a bioreactor")>> - <<set _slave.career = "a bioreactor", _careerForgotten++>> - <<set _cfSlave = _slave>> - <<elseif (_slave.intelligenceImplant > 0)>> - <<set _slave.intelligenceImplant = Math.clamp(_slave.intelligenceImplant-5, 0, 30), _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.intelligence >= -15)>> - <<set _slave.intelligence -= 5, _intelligenceLost++>> - <<elseif (_slave.devotion >= -20)>> - <<set _slave.devotion -= 8>> - <<elseif (_slave.trust >= -20)>> - <<set _slave.trust -= 8>> - <<elseif (_slave.skill.whoring >= 20)>> - <<set _slave.skill.whoring -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.skill.entertainment >= 20)>> - <<set _slave.skill.entertainment -= 10, _skillsLost++>> - <<set _slSlave = _slave>> - <<elseif (_slave.intelligence >= -50)>> - <<set _slave.intelligence -= 5>> - <<if _slave.intelligence < -50>> - <<set _stupidified++>> - <<set _stSlave = _slave>> - <</if>> - <<elseif (_slave.fetish != "mindbroken")>> - <<set _slave.fetish = "mindbroken", _mindbroken++>> - <</if>> - <<elseif ((_slave.counter.milk > 1000) && (_slave.boobs > 12000) || (_slave.counter.cum > 1000) && (_slave.balls >= 10)) && (_slave.career != "a bioreactor")>> - <<set _slave.career = "a bioreactor", _careerForgotten++>> - <<set _cfSlave = _slave>> - <</if>> - <<if ($arcologies[0].FSBodyPuristLaw == 0) && ($healthyDrugsUpgrade == 0)>> - <<set _slave.chem += 2>> - <<else>> - <<set _slave.chem++>> - <</if>> - <</if>> /* closes ($dairyStimulatorsSetting + $dairyFeedersSetting + $dairyPregSetting) > 5 */ - <<if ($dairyPregUpgrade == 1) && ($dairyPregSetting > 0)>> - <<if (_slave.ovaries == 1) && (_slave.vagina > -1)>> - <<set _femCumWeek += girlCumAmount(_slave)>> - <<if (_slave.preg == -2)>> - <<set _slave.preg = 0, _desterilized++>> - <<set _dsSlave = _slave>> - <</if>> - <<if isFertile(_slave)>> - <<if _slave.eggType == "human">> - <<set _slave.preg = 1, _slave.pregWeek = 1, _slave.pregKnown = 1>> - <<if ($dairyPregSetting > 2)>> - <<set _slave.pregType = random(10,29)>> - <<elseif ($dairyPregSetting > 1)>> - <<set _slave.pregType = random(3,6)>> - <<else>> - <<set _slave.pregType = either(1, 1, 1, 1, 2, 2, 2, 3, 3, 4)>> - <</if>> - <<set _slave.pregSource = -2>> - <<set WombImpregnate(_slave, _slave.pregType, -2, 1)>> - <</if>> /*closes eggType */ - <<if (_slave.vagina == 0)>> - <<set _slave.vagina++>> - <</if>> - <<elseif (_slave.pregKnown == 1)>> - <<if ($dairyPregSetting > 2)>> - <<run cashX(100, "slaveAssignmentDairy", _slave)>> - <<elseif ($dairyPregSetting > 1)>> - <<run cashX(50, "slaveAssignmentDairy", _slave)>> - <<else>> - <<run cashX(25, "slaveAssignmentDairy", _slave)>> - <</if>> - <<if ($dairyPregSetting > 1) && (_slave.vagina < 4)>> - <<set _slave.vagina++>> - <<if (_slave.vagina == 4)>> - <<set _vaginasStretched++>> - <</if>> - <<elseif (_slave.vagina < 3)>> - <<set _slave.vagina++>> - <</if>> - <</if>> - <</if>> - <</if>> -<</for>> - -<<if _inflatedSlaves.milk > 0>> - <<set _milkWeek -= ((8*_inflatedSlaves.milk*10)+8)>> -<</if>> -<<if _inflatedSlaves.cum > 0>> - <<set _cumWeek -= ((80*_inflatedSlaves.cum*10)+80)>> - <<if _cumWeek < 0>> - <<set _cumWeek = 0>> - <</if>> -<</if>> - -<<if (_Tadd > 0)>> - <<set _tempCash = $cash>> - - <<set _seed = (_BF.XY.cum*$bioreactorsXY) + (_BF.herm.cum*$bioreactorsHerm), _cumWeek += _seed>> - <<if ($arcologies[0].FSPastoralistLaw == 1)>> - <<set _cashX = _seed*random(40,50)>> - <<run cashX(_cashX, "menialBioreactors")>> - <<elseif ($arcologies[0].FSPastoralist != "unset")>> - <<set _cashX = _seed*(random(25,35)+Math.trunc($arcologies[0].FSPastoralist/10))>> - <<run cashX(_cashX, "menialBioreactors")>> - <<else>> - <<set _cashX = _seed*random(25,35)>> - <<run cashX(_cashX, "menialBioreactors")>> - <</if>> - - <<set _seed = (_BF.XX.femCum*$bioreactorsXX) + (_BF.herm.femCum*$bioreactorsHerm), _femCumWeek += _seed>> - <<if ($arcologies[0].FSPastoralistLaw == 1)>> - <<set _cashX = _seed*random(40,50)>> - <<run cashX(_cashX, "menialBioreactors")>> - <<elseif ($arcologies[0].FSPastoralist != "unset")>> - <<set _cashX = _seed*(random(25,35)+Math.trunc($arcologies[0].FSPastoralist/10))>> - <<run cashX(_cashX, "menialBioreactors")>> - <<else>> - <<set _cashX = _seed*random(25,35)>> - <<run cashX(_cashX, "menialBioreactors")>> - <</if>> - - <<set _seed = (_BF.XX.milk*$bioreactorsXX) + (_BF.barren.milk*$bioreactorsBarren) + (_BF.XY.milk*$bioreactorsXY) + (_BF.herm.milk*$bioreactorsHerm), _milkWeek += _seed>> - <<if ($arcologies[0].FSPastoralistLaw == 1)>> - <<set _cashX = _seed*(13+Math.trunc($arcologies[0].FSPastoralist/30))>> - <<run cashX(_cashX, "menialBioreactors")>> - <<elseif ($arcologies[0].FSPastoralist != "unset")>> - <<set _cashX = _seed*(8+Math.trunc($arcologies[0].FSPastoralist/30))>> - <<run cashX(_cashX, "menialBioreactors")>> - <<else>> - <<set _cashX = _seed*9>> - <<run cashX(_cashX, "menialBioreactors")>> - <</if>> - <br><br>_Tadd permanently converted biological "machine<<if _Tadd > 1>>s<</if>>" produce<<if _Tadd == 1>>s<</if>> @@.yellowgreen;<<print cashFormat($cash-_tempCash)>>@@ income. -<</if>> - -<<if _inflatedSlaves.milk > 0>> - <<set _cashX -= Math.trunc(((600*(_inflatedSlaves.milk)+8)+random(50,200)))>> - <<run cashX(_cashX, "slaveAssignmentDairy")>> -<</if>> -<<if _inflatedSlaves.cum > 0>> - <<set _cashX -= Math.trunc(((300*(_inflatedSlaves.cum+8))+random(25,100)))>> - <<run cashX(_cashX, "slaveAssignmentDairy")>> -<</if>> - -<<set _profits = $cash-_oldCash>> -<br><br> -<<if _chemSevere > 1>> - _chemSevere cows' productivity is being reduced by the long term effects of industrial use. -<<elseif _chemSevere > 0>> - One cow's productivity is being reduced by the long term effects of industrial use. -<</if>> -<<if _chemMinor > 1>> - _chemMinor cows have been drugged and used long enough that they require increased curative doses, slightly reducing their output. -<<elseif _chemMinor > 0>> - <<setLocalPronouns _cmSlave>> - One cow has been drugged and used long enough that $he requires increased curative doses, slightly reducing $his output. -<</if>> -<<if _desterilized > 1>> - _desterilized cows had minor health issues preventing their fertile womb from conceiving; the issues have been resolved and they have been impregnated. -<<elseif _desterilized > 0>> - <<setLocalPronouns _dsSlave>> - One cow had minor health issues preventing $his fertile womb from conceiving; they have been resolved and $he has been impregnated. -<</if>> -<<if _hateFilled > 1>> - _hateFilled cows stopped struggling so much when fucked by the machines; it seems they have sunk into a fugue. -<<elseif _hateFilled > 0>> - <<setLocalPronouns _hfSlave>> - One cow stopped struggling so much when fucked by the machines; it seems $he has sunk into a fugue. -<</if>> -<<if _horrified > 1>> - _horrified cows' emotional activity dropped significantly; this indicates acceptance that they are not likely to leave $dairyName, ever again. -<<elseif _horrified > 0>> - <<setLocalPronouns _hrSlave>> - One cow's emotional activity dropped significantly; this indicates acceptance that $he is not likely to leave $dairyName, ever again. -<</if>> -<<if _skillsLost > 1>> - _skillsLost cows forgot skills due to their inability to focus on anything but machine rape. -<<elseif _skillsLost > 0>> - <<setLocalPronouns _slSlave>> - One cow forgot skills due to $his inability to focus on anything but machine rape. -<</if>> -<<if _careerForgotten > 1>> - _careerForgotten cows forgot the details of their past professional lives; all they can remember now is this. -<<elseif _careerForgotten > 0>> - <<setLocalPronouns _cfSlave>> - One cow forgot the details of $his past professional life; all $he can remember now is this. -<</if>> -<<if _vaginasStretched > 1>> - _vaginasStretched cows' vaginas were broken in for machine use, and are unlikely to be any use for anything other than receiving cum and medication, and giving birth. -<<elseif _vaginasStretched > 0>> - One cow's vagina was broken in for machine use, and is unlikely to be any use for anything other than receiving cum and medication, and giving birth. -<</if>> -<<if _anusesStretched > 1>> - _anusesStretched cows' anuses were loosened by machine sodomy, and are now permanently gaped. -<<elseif _anusesStretched > 0>> - One cow's anus was loosened by machine sodomy, and is now permanently gaped. -<</if>> -<<if _intelligenceLost > 1>> - _intelligenceLost cows suffered some loss of intelligence due to accumulated mental stress from life attached to a milking machine. -<<elseif _intelligenceLost > 0>> - One cow suffered some loss of intelligence due to accumulated mental stress from life attached to a milking machine. -<</if>> -<<if _stupidified > 1>> - _stupidified cows were so mentally dulled by use as biological factories that they were reduced to a very low level of intelligence. -<<elseif _stupidified > 0>> - <<setLocalPronouns _stSlave>> - One cow was so mentally dulled by use as biological factories that $he was reduced to a very low level of intelligence. -<</if>> -<<if _mindbroken > 1>> - _mindbroken cows finally lost higher mental function, and are now nothing more than industrial equipment made of meat. -<<elseif _mindbroken > 0>> - One cow finally lost higher mental function, and is now nothing more than industrial equipment made of meat. -<</if>> -<<if _boobtacular > 1>> - _boobtacular cows grew past 30 kilograms of breasts, a remarkable advance in capacity. -<<elseif _boobtacular > 0>> - One cow grew past 30 kilograms of breasts, a remarkable advance in capacity. -<</if>> -<<if _balltacular > 1>> - _balltacular cows' testicles reached the largest size drug treatments can produce; the machines will now focus on buttfucking them with extra force. -<<elseif _balltacular > 0>> - <<setLocalPronouns _btSlave>> - One cow's testicles reached the largest size drug treatments can produce; the machines will now focus on buttfucking $him with extra force. -<</if>> - -<<if ($dairyPregUpgrade == 1)>> - <<if ($dairyPregSetting >= 2)>> - Fertile cows make you a significant profit through contract pregnancies. - <<elseif ($dairyPregSetting == 1)>> - Fertile cows make you a small profit through contract pregnancies. - <</if>> -<</if>> -<<set _cumWeek = Math.trunc(_cumWeek/10)>> -<<set $cumPipeline = _cumWeek, $milkPipeline = _milkWeek>> -<<if _inflatedSlaves.milk > 0>> - <<set _outputMilk = ((8*_inflatedSlaves.milk*10)+8)>> -<<else>> - <<set _outputMilk = 0>> -<</if>> -<<if _inflatedSlaves.cum > 0>> - <<set _outputCum = (((80*_inflatedSlaves.cum*10)+80)/10)>> -<<else>> - <<set _outputCum = 0>> -<</if>> -_dairyNameCaps produced <<print _milkWeek+_outputMilk>> liters of milk<<if _cumWeek > 0>> and <<print _cumWeek+_outputCum>> liters of cum<</if>> this week. -<<if _inflatedSlaves.milk > 0>> - _outputMilk liters of milk were pumped into your penthouse for filling slaves this week. -<</if>> -<<if _inflatedSlaves.cum > 0>> - <<if _inflatedSlaves.milk > 0>>and <</if>>_outputCum liters of cum were pumped into your penthouse<<if _inflatedSlaves.milk > 0>> as well<<else>> this week<</if>>. -<</if>> -<<if _femCumWeek > 0>> - The machines also managed to reclaim _femCumWeek liters of salable vaginal secretions. -<</if>> -<<if _births > 1>> - Additionally, _birthers cows gave birth<<if _births > _birthers>> to a total of _births calves<</if>> this week. -<<elseif _births > 0>> - Additionally, one cow gave birth<<if _births > _birthers>> to a total of _births calves<</if>> this week. -<</if>> - -<<if $arcologies[0].FSRestart != "unset" && $eugenicsFullControl != 1>> - <<if $dairyPregSetting > 0>> - The Societal Elite know what you are doing with your cows. @@.red;They do not approve.@@ - <<set $failedElite += 5>> - <</if>> - <<if _milkmaidImpregnates == 1>> - The Societal Elite know you've ordered _S.Milkmaid.slaveName to impregnate your cows. @@.red;They are not amused by your disinterest in eugenics.@@ - <<set $failedElite += 10>> - <</if>> -<</if>> - -<!-- Record statistics gathering --> -<<script>> - var b = State.variables.facility.dairy; - b.whoreIncome = 0; - b.whoreCosts = 0; - b.rep = 0; - for (var si of b.income.values()) { - b.whoreIncome += si.income; - b.whoreCosts += si.cost; - b.rep += si.rep; - } - b.maintenance = (State.variables.bioreactorsXY + State.variables.bioreactorsXX + State.variables.bioreactorsHerm + State.variables.bioreactorsBarren); - if (b.maintenance > 0) { - b.maintenance *= 100; - } else { - b.maintenance = 0; - } - b.maintenance += State.variables.dairy * State.variables.facilityCost * (1.0 + 0.2 * State.variables.dairyFeedersUpgrade + 0.1 * State.variables.dairyPregUpgrade); - b.totalIncome = b.whoreIncome; - b.totalExpenses = b.whoreCosts + b.maintenance; - b.profit = b.totalIncome - b.totalExpenses; -<</script>> -<<if (_profits > 0)>> - The sale of these products makes a profit of @@.yellowgreen;<<print cashFormat(_profits)>>.@@ -<<elseif (_profits < 0)>> - Due to <<if $dairyImplantsSetting != 3>>one-off costs of hormonal implants to encourage fluid production<<else>>the need to induce lactation in some cows<</if>>, your dairy made a loss of @@.red;<<print cashFormat(_profits)>>.@@ -<<else>> - Due to <<if $dairyImplantsSetting != 3>>one-off costs of hormonal implants to encourage fluid production<<else>>the need to induce lactation in some cows<</if>> paired with existing output, your dairy broke even this week. -<</if>> - -<<if ($arcologies[0].FSPastoralistLaw == 1)>> - Slave products have completely replaced traditional dairy, making the facility extremely lucrative. -<</if>> - -<<if ($dairySlimMaintainUpgrade == 1 && $dairySlimMaintain == 1)>> - <br> - <<if $arcologies[0].FSSlimnessEnthusiast > 80>> - Because of your arcology's great enthusiasm for small breasted slaves, the dairy's milking systems have been carefully overhauled and optimized for maximum milk extraction from slaves with smaller endowments — providing a significant boost to their otherwise modest output. This also prevents unfashionable breast expansion of already slim slaves through the milking process. - <<elseif $arcologies[0].FSSlimnessEnthusiast > 20>> - In keeping with your arcology's ideals, $dairyName has been modified to handle slim slaves with minimal impact to their body shapes. This limits potential profitability, but prevents unfashionable breast expansion of already slim slaves through the milking process. - <<else>> - Due to your arcology's lack of enthusiasm for small breasted slaves the dairy has discontinued using milking techniques that prevent breast growth through the milking process. - <<set $dairySlimMaintain = 0, $dairySlimMaintainUpgrade = 0>> - <</if>> -<</if>> - -<<if ($createBioreactors == 1) && ($bioreactorPerfectedID != 0)>> - <<for _slave range _slaves>> - <<if (_slave.ID == $bioreactorPerfectedID)>> - <<if (_slave.ovaries == 1)>> - <<if (_slave.balls == 0)>> - <<set $bioreactorsXX++, _gender = "XX">> - <<else>> - <<set $bioreactorsHerm++, _gender = "herm">> - <</if>> - <<else>> - <<if (_slave.balls == 0)>> - <<set $bioreactorsBarren++, _gender = "barren">> - <<else>> - <<set $bioreactorsXY++, _gender = "XY">> - <</if>> - <</if>> - <<setLocalPronouns _slave>> - <<set _ageInWeeks = 52*($retirementAge-_slave.physicalAge)>> - <br><br> <<= SlaveFullName(_slave)>>'s breasts<<if _slave.balls > 0>>, balls<</if>><<if _slave.ovaries == 1>>, belly<</if>>, body, and mind have been completely adapted to synthesize useful products. $He has been reclassified as part of the machine $he's now permanently attached to. This combination is projected to produce approximately - <<if _slave.balls > 0>> - <<print 1000*Math.trunc((_BF[_gender].cum*_ageInWeeks)/1000)>> - liters of cum, - <</if>> - <<if _slave.ovaries == 1>> - <<print 100*Math.trunc((_BF[_gender].femCum*_ageInWeeks)/100)>> - liters of vaginal secretions, - <<if $dairyPregSetting == 3>> - <<print 13*($retirementAge-_slave.physicalAge)>> - <<else>> - <<print 5*($retirementAge-_slave.physicalAge)>> - <</if>> - slaves, - <</if>> - and - <<print 1000*Math.trunc((_BF[_gender].milk*_ageInWeeks)/1000)>> - liters of milk over a - <<print $retirementAge-_slave.physicalAge>> - year period before its biological components must be replaced. - <<= removeSlave(_slave)>> - <<break>> - <</if>> - <</for>> -<</if>> - -<<if $dairyDecoration != "standard">> - <br><br> _dairyNameCaps's @@.green;$dairyDecoration style is well known.@@ -<</if>> - -<<if _DL > 0>> - <!-- Statistics output --> - <<includeDOM App.Facilities.Dairy.Stats(false)>> - <<timed 50ms>> - <<replace #dairy-stats>> - <<includeDOM App.Facilities.Dairy.Stats(true)>> - <</replace>> - <</timed>> -<</if>> -<<if (_DL + _Tadd) > 0 || $MilkmaidID != 0>> - <br><br> -<</if>> diff --git a/src/uncategorized/futureSociety.tw b/src/uncategorized/futureSociety.tw index 52e94fa66944f1873fd7207d206740f663e1bcea..4b4d4ddc5b963b89ed607d88294fa902ad482109 100644 --- a/src/uncategorized/futureSociety.tw +++ b/src/uncategorized/futureSociety.tw @@ -1574,7 +1574,7 @@ You are spending <<print cashFormat($FSSpending)>> each week to support your soc <span class="detail"> <<link "Abandon" "Future Society">> <<run FutureSocieties.remove("FSNeoImperialist")>> - <<if $assistant.fsAppearance == "neo-imperialist">> + <<if $assistant.fsAppearance == "neoimperialist">> <<set $assistant.fsAppearance = "default">> <</if>> <</link>> diff --git a/src/uncategorized/officeDescription.tw b/src/uncategorized/officeDescription.tw index 3c08f3cb5c5d57f464f61ce65b634a06535e71f8..ec20b11748e5eae5de8221a82590d1ce2835f3c1 100644 --- a/src/uncategorized/officeDescription.tw +++ b/src/uncategorized/officeDescription.tw @@ -108,6 +108,8 @@ _heA's depicted striking a pose showing off _hisA countless piercings. <<case "roman revivalist">> _heA's depicted in a stola, flashing _hisA tits. + <<case "neoimperialist">> + _heA's depicted in a tight Imperial bodysuit that shows off every curve. <<case "egyptian revivalist">> _heA's depicted groping _hisA perfect bronze breasts while blowing a kiss. <<case "edo revivalist">> diff --git a/src/uncategorized/spaReport.tw b/src/uncategorized/spaReport.tw deleted file mode 100644 index 0ea1ed2eaaefe49c2f8cfe4fc76b5d65296e5c6d..0000000000000000000000000000000000000000 --- a/src/uncategorized/spaReport.tw +++ /dev/null @@ -1,376 +0,0 @@ -:: Spa Report [nobr] - -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.spa)>> -<<set _DL = _slaves.length, _SL = $slaves.length, _bonusToggle = 0, _healthBonus = 0, _idleBonus = 0, _restedSlaves = 0, _trustBonus = 0>> - -<<if $spaDecoration != "standard">> - <<set _devBonus = 1>> -<<else>> - <<set _devBonus = 0>> -<</if>> -<<set $flSex = App.EndWeek.getFLSex(App.Entity.facilities.spa)>> /* FIXME: should be local, passed as a parameter to saRules */ - -<<if $AttendantID != 0>> - <<if (_S.Attendant.health.condition < 100)>> - <<run improveCondition(_S.Attendant, normalRandInt(20))>> - <</if>> - <<if (_S.Attendant.devotion <= 60)>> - <<set _S.Attendant.devotion++>> - <</if>> - <<if _S.Attendant.trust < 60>> - <<set _S.Attendant.trust++>> - <</if>> - <<if _S.Attendant.rules.living != "luxurious">> - <<set _S.Attendant.rules.living = "luxurious">> - <</if>> - <<set _FLsFetish = 0>> - <<if _S.Attendant.fetishStrength <= 95>> - <<if _S.Attendant.fetish != "submissive">> - <<if fetishChangeChance(_S.Attendant) > random(0,100)>> - <<set _FLsFetish = 1, _S.Attendant.fetishKnown = 1, _S.Attendant.fetish = "submissive">> - <</if>> - <<elseif _S.Attendant.fetishKnown == 0>> - <<set _FLsFetish = 1, _S.Attendant.fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 2, _S.Attendant.fetishStrength += 4>> - <</if>> - <</if>> - <<if (_S.Attendant.fetish == "none") || (_S.Attendant.fetish == "submissive")>> - <<set _devBonus++>> - <</if>> - <<set _S.Attendant.devotion += _devBonus>> - <<setLocalPronouns _S.Attendant>> - <<= SlaveFullName(_S.Attendant)>> is serving as the spa attendant.<<if _S.Attendant.relationship == -3 && _S.Attendant.devotion > 50>> $He tries $his best to be your perfect attentive, caring and loving $wife.<</if>> - <<if (_FLsFetish == 1)>> - When $he is paid a visit by a slave with sexual issues to work out, $he provides them with an understanding, willing, giving partner. $He finds real satisfaction in helping your slaves find sexual gratification, and @@.lightsalmon;becomes a submissive.@@ - <<elseif (_FLsFetish == 2)>> - Every new slave in the spa is a new person $he gets to connect with and serve. Sexually. @@.lightsalmon;$He becomes more submissive.@@ - <</if>> - <<if setup.attendantCareers.includes(_S.Attendant.career)>> - $He has experience with counseling from $his life before $he was a slave, making $him better at building rapport with troubled slaves, and giving $him a better chance of softening flaws into beneficial quirks. - <<set _bonusToggle = 1, _idleBonus++>> - <<elseif _S.Attendant.skill.attendant >= $masteredXP>> - $He has experience with counseling from working for you, making $him better at building rapport with troubled slaves, and giving $him a better chance of softening flaws into beneficial quirks. - <<set _bonusToggle = 1, _idleBonus++>> - <<else>> - <<set _S.Attendant.skill.attendant += random(1,Math.ceil((_S.Attendant.intelligence+_S.Attendant.intelligenceImplant)/15) + 8)>> - <</if>> - <<if !canSee(_S.Attendant)>> - $His blindness allows $him to deeply connect with $his charges. - <<set _idleBonus++>> - <</if>> - <<if (_S.Attendant.fetish == "none")>> - _S.Attendant.slaveName respects the slaves lounging in the spa, allowing them to relax completely. - <<set _idleBonus++>> - <<elseif (_S.Attendant.fetish == "submissive")>> - _S.Attendant.slaveName lets the slaves resting in the spa take the lead sexually, doing $his best to please them. - <<set _idleBonus++>> - <<elseif (_S.Attendant.fetishKnown == 1)>> - _S.Attendant.slaveName can't keep $his hand<<if hasBothArms(_S.Attendant)>>s<</if>> to $himself, preventing the slaves in the spa from relaxing completely. - <</if>> - <<if (_S.Attendant.visualAge > 35)>> - $His apparent maturity encourages the slaves in the spa to relax and pour out their troubles to $him. - <<set _healthBonus++, _idleBonus++>> - <</if>> - <<if (_S.Attendant.intelligence+_S.Attendant.intelligenceImplant > 15)>> - $He's so intelligent $he can suss out the cause of slaves' emotional issues and counsel them effectively. - <<set _idleBonus++>> - <</if>> - <<if isFertile(_S.Attendant) || (_S.Attendant.bellyPreg >= 1500) || (_S.Attendant.counter.birthsTotal > 0) || (_S.Attendant.bellyImplant >= 1500)>> - $He has a natural mothering instinct and really makes $his charges feel at home. - <<set _idleBonus++, _healthBonus++>> - <</if>> - <<set _attendantUsedCure = 0>> - <<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave 2>> - <<if (_slave.fetish == "mindbroken") && (_slave.health.condition > 20) && (_attendantUsedCure == 0) && ($spaFix != 2)>> - <<set _attendantUsedCure = 1>> - <<if (random(1,100) > 90-_S.Attendant.devotion)>> - <br> @@.green;Something almost miraculous has happened.@@ _S.Attendant.slaveName has always refused to believe that _slave.slaveName could not be reached, and has lavished patient tenderness on _him2 in $spaName. _slave.slaveName has begun to respond, and is stirring from _his2 mental torpor. - <<set _slave.devotion = -3, _slave.sexualFlaw = "apathetic", _slave.behavioralFlaw = either("hates men", "odd"), _slave.fetish = "none", _slave.fetishKnown = 1>> - <<set _spr = $genePool.findIndex(function(s) { return s.ID == _slave.ID; })>> - <<if $genePool[_spr].intelligence >= -95>> - <<set _slave.intelligence = $genePool[_spr].intelligence-30>> - <</if>> - <<if ($arcologies[0].FSPaternalist > 0)>> - Society @@.green;strongly approves@@ of _slave.slaveName being restored to sanity, which advances ideals about enlightened slaveownership. - <<set $arcologies[0].FSPaternalist += 0.01*$FSSingleSlaveRep>> - <<run repX(2*$FSSingleSlaveRep*($arcologies[0].FSPaternalist/$FSLockinLevel), "spa", _slave)>> - <</if>> - <</if>> - <</if>> - <<set _seed = _bonusToggle * 10>> - <<if _bonusToggle == 1 && _slave.trust < 60>> - <<set _slave.trust++>> - <</if>> - <<if _S.Attendant.rivalryTarget == _slave.ID>> - $He constantly harasses $his <<print rivalryTerm(_S.Attendant)>>, _slave.slaveName, preventing _him2 from getting comfortable and forcing _him2 to keep _his2 guard up. - <<set _slave.devotion -= 4, _slave.trust -= 4>> - <<if random(1,100) > 35>> - <<set _S.Attendant.rivalry++, _S.Attendant.rivalry++, _slave.rivalry++>> - <</if>> - <<elseif _S.Attendant.relationshipTarget == _slave.ID>> - $He dedicates most of $his attention to $his <<print relationshipTerm(_S.Attendant)>>, _slave.slaveName, making _his2 stress, both physical and mental, wash away. - <<set _slave.devotion += 3, _slave.trust += 3>> - <<elseif areRelated(_S.Attendant, _slave)>> - $He makes sure to spend extra time caring for $his <<print relativeTerm(_S.Attendant,_slave)>>, _slave.slaveName. - <<set _slave.trust++>> - <<run improveCondition(_slave, 1)>> - <</if>> - <<switch _slave.prestigeDesc>> - <<case "$He is a famed Free Cities whore, and commands top prices.">> - $He does $his best to relax the famous whore, _slave.slaveName, making sure to - <<if _slave.vagina > 2 || _slave.anus > 2>> - pay special attention to _his2 worn holes. - <<else>> - get _him2 clean and relaxed for _his2 next usage. - <</if>> - <<set _slave.devotion += 3, _slave.trust += 3>> - <<case "$He is a famed Free Cities slut, and can please anyone.">> - $He does $his best to soothe the famous entertainer, _slave.slaveName, letting _him2 relax in blissful peace. - <<set _slave.devotion += 3, _slave.trust += 3>> - <<case "$He is remembered for winning best in show as a cockmilker.">> - <<if (_slave.balls > 6) && (_slave.dick != 0)>> - <<if _S.Attendant.fetish == "cumslut">> - $He can't keep $his hand<<if hasBothArms(_S.Attendant)>>s<</if>> off _slave.slaveName's cock and balls, but _he2 doesn't mind being milked constantly. Before long, strands of cum can be found floating all throughout the bath. - <<set _S.Attendant.fetishStrength += 4>> - <<else>> - $He does $his best to accommodate _slave.slaveName's massive genitals and tends to _him2 whenever _he2 feels a need for release. - <<if random(1,100) > 65 && _S.Attendant.fetish == "none">> - After taking several massive loads to the face, _S.Attendant.slaveName begins to find satisfaction in being coated in cum. - <<set _S.Attendant.fetish = "cumslut">> - <</if>> - <</if>> - <</if>> - <<set _slave.devotion += 3, _slave.trust += 3>> - <<case "$He is remembered for winning best in show as a dairy cow.">> - <<if (_slave.lactation > 0) && ((_slave.boobs-_slave.boobsImplant) > 6000)>> - <<if _S.Attendant.fetish == "boobs">> - $He can't keep $his hand<<if hasBothArms(_S.Attendant)>>s<</if>> off _slave.slaveName's huge breasts, but _he2 doesn't mind being milked constantly. Before long the bath gains a white tint. - <<set _S.Attendant.fetishStrength += 4, _S.Attendant.fetishStrength += 4>> - <<else>> - $He does $his best to accommodate _slave.slaveName's massive breasts and tends to _him2 whenever _he2 feels a need for release. - <<if random(1,100) > 65 && _S.Attendant.fetish == "none">> - After multiple milking sessions, _S.Attendant.slaveName begins to find $himself fantasizing about having giant milky breasts too. - <<set _S.Attendant.fetish = "boobs">> - <</if>> - <</if>> - <<set _slave.devotion += 3, _slave.trust += 3, _slave.lactationDuration = 2, _slave.boobs -= _slave.boobsMilk, _slave.boobsMilk = 0>> - <</if>> - <<case "$He is remembered for winning best in show as a breeder.">> - <<if _slave.bellyPreg >= 5000>> - <<if _S.Attendant.fetish == "pregnancy">> - $He can't keep $his hand<<if hasBothArms(_S.Attendant)>>s<</if>> off _slave.slaveName's pregnancy, but _he2 doesn't mind _his2 full belly being fondled. - <<set _S.Attendant.fetishStrength += 4, _S.Attendant.fetishStrength += 4>> - <<else>> - $He does $his best to accommodate _slave.slaveName's pregnancy and to make sure the mother-to-be is happy and comfortable. - <<if random(1,100) > 65 && _S.Attendant.fetish == "none">> - After massaging _slave.slaveName's growing belly multiple times, _S.Attendant.slaveName begins to find $himself fantasizing about being swollen with life too. - <<set _S.Attendant.fetish = "pregnancy">> - <</if>> - <</if>> - <<set _slave.devotion += 3, _slave.trust += 3>> - <<else>> - <<if _S.Attendant.fetish == "pregnancy">> - $He can't help but pester _slave.slaveName with questions about _his2 famous pregnancy, limiting _his2 ability to truly relax. - <<set _slave.devotion += 1, _slave.trust += 1>> - <<elseif canGetPregnant(_slave)>> - $He does $his best to encourage _slave.slaveName's fertilization by performing any fertility boosting actions $he can. - <<set _slave.devotion += 3, _slave.trust += 3>> - <</if>> - <</if>> - <</switch>> - <<if (_S.Attendant.intelligence+_S.Attendant.intelligenceImplant > 15) && (_attendantUsedCure == 0) && ((_S.Attendant.intelligence+_S.Attendant.intelligenceImplant)+_seed) > random(1,200) && ($spaFix == 0)>> - <<if _slave.behavioralFlaw != "none">> - <<run SoftenBehavioralFlaw(_slave)>> - <<set _attendantUsedCure += 1>> - <br> _S.Attendant.slaveName works carefully with _slave.slaveName, and successfully @@.green;softens _his2 behavioral flaw@@ into an appealing quirk. - <<elseif _slave.sexualFlaw != "none">> - <<run SoftenSexualFlaw(_slave)>> - <<set _attendantUsedCure += 1>> - <br> _S.Attendant.slaveName works carefully with _slave.slaveName, and successfully @@.green;softens _his2 sexual flaw@@ into an appealing quirk. - <</if>> - <</if>> - <<if _slave.lactation > 0>> - _S.Attendant.slaveName takes care to keep _slave.slaveName's breasts comfortably drained. - <<set _slave.lactationDuration = 2, _slave.boobs -= _slave.boobsMilk, _slave.boobsMilk = 0>> - <</if>> - <</for>> - <<if (_DL < $spa)>> - <<set _seed = random(1,10)+(($spa-_DL)*(random(150,170)+(_idleBonus*10)))>> - <<run cashX(_seed, "spa", _S.Attendant)>> - <br> Since $he doesn't have enough slaves to occupy all $his time, the spa takes in citizens' slaves on a contract basis and $he helps them too, earning @@.yellowgreen;<<print cashFormat(_seed)>>.@@ - <<if ($arcologies[0].FSHedonisticDecadence > 0) && (_DL == 0)>> - Society @@.green;loves@@ being allowed to lounge in your spa, greatly advancing your laid back culture. - <<run FutureSocieties.Change("Hedonistic", 2)>> - <</if>> - <</if>> - <<if (_DL > 0)>><br><br><</if>> -<</if>> - -<<if (_DL > 0)>> - ''<<if (_DL > 1)>>There are _DL slaves<<else>>There is one slave<</if>> resting and recuperating in the spa.'' - <<if ($arcologies[0].FSHedonisticDecadence > 0) && (_DL == 0)>> - Society @@.green;approves@@ of your slaves being pampered this way, greatly advancing your laid back culture. - <<run FutureSocieties.Change("Hedonistic", 1)>> - <</if>> -<</if>> - -<<if _S.Attendant>> - <<set $i = $slaveIndices[$AttendantID]>> /* apply following SA passages to facility leader */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef smlImg"> - <<= SlaveArt(_S.Attendant, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<includeDOM App.EndWeek.favoriteIcon(_S.Attendant)>> - <span class='slave-name'><<= SlaveFullName(_S.Attendant)>></span> is serving as the Attendant in $spaName. - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_S.Attendant)>> - <<run tired(_S.Attendant)>> - <<includeDOM App.SlaveAssignment.rules(_S.Attendant)>> - <<= App.SlaveAssignment.diet(_S.Attendant)>> - <<includeDOM App.SlaveAssignment.longTermEffects(_S.Attendant)>> - <<= App.SlaveAssignment.drugs(_S.Attendant)>> - <<= App.SlaveAssignment.relationships(_S.Attendant)>> - <<= App.SlaveAssignment.rivalries(_S.Attendant)>> - <br> <<= App.SlaveAssignment.devotion(_S.Attendant)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnClothes(_S.Attendant)>> - <<run tired(_S.Attendant)>> - <<run App.SlaveAssignment.rules()>> - <<run App.SlaveAssignment.diet(_S.Attendant)>> - <<run App.SlaveAssignment.longTermEffects(_S.Attendant)>> - <<run App.SlaveAssignment.drugs(_S.Attendant)>> - <<run App.SlaveAssignment.relationships(_S.Attendant)>> - <<run App.SlaveAssignment.rivalries(_S.Attendant)>> - <<run App.SlaveAssignment.devotion(_S.Attendant)>> - <</if>> -<</if>> - -<<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave>> - <<set _slave.devotion += _devBonus, _slave.trust += _trustBonus>> - <<run improveCondition(_slave, 5 + _healthBonus)>> - <<if (_slave.health.condition < -80)>> - <<run improveCondition(_slave, 15)>> - <<elseif _slave.health.condition < -40>> - <<run improveCondition(_slave, 10)>> - <<elseif _slave.health.condition < 0>> - <<run improveCondition(_slave, 5)>> - <</if>> - <<if ($spaUpgrade == 1) && (_slave.health.condition < 100)>> - <<run improveCondition(_slave, normalRandInt(8))>> - <</if>> - <<if (_slave.devotion < 60) && (_slave.trust < 60)>> - <<set _slave.devotion++, _slave.trust++>> - <<elseif (_slave.trust < 40)>> - <<set _slave.trust += 10>> - <<elseif (_slave.devotion < 40)>> - <<set _slave.devotion += 10>> - <</if>> - <<switch $spaDecoration>> - <<case "Chattel Religionist" "Chinese Revivalist">> - <<set _slave.rules.living = "normal">> - <<case "Degradationist">> - <<set _slave.rules.living = "spare">> - <<default>> - <<set _slave.rules.living = "luxurious">> - <</switch>> - <<if (_slave.health.condition >= 20) && (_slave.health.tired <= 30) && (_slave.trust > 60) && (_slave.devotion > 60) && (_slave.fetish != "mindbroken") && (_slave.sexualFlaw == "none") && (_slave.behavioralFlaw == "none")>> - <p> - <span class="slave-name">_slave.slaveName</span> is feeling well enough to leave $spaName, - <span class="noteworthy"> - <<if $assignmentRecords[_slave.ID]>> - <<set _oldJob = $assignmentRecords[_slave.ID]>> - <<= assignJobSafely(_slave, _oldJob)>> - <<if _slave.choosesOwnAssignment === 1>> - and $he is resting before choosing another task. - <<elseif _slave.assignment === "rest">> - <<if _oldJob != "rest">> - and since $he was unable to return to $his old task to <<print _oldJob>>, $his assignment has defaulted to rest. - <<else>> - so $he has returned to rest. - <</if>> - <<else>> - so $he goes back to <<print _slave.assignment>>. - <</if>> - <<else>> - so $his assignment has defaulted to rest. - <<= removeJob(_slave, "rest in the spa")>> - <</if>> - </span> - </p> - <<set _restedSlaves++, _DL--, _dI-->> - <<continue>> - <</if>> - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef smlImg"> - <<= SlaveArt(_slave, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<includeDOM App.EndWeek.favoriteIcon(_slave)>> - <span class='slave-name'><<= SlaveFullName(_slave)>></span> - <<if _slave.choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob(_slave)>> - <<else>> - is resting in $spaName. - <</if>> - <br> $He <<= App.SlaveAssignment.rest(_slave)>> - <<if (_slave.fetish == "mindbroken")>> - $He remains in the Spa, completely mindbroken. - <<elseif(_slave.sexualFlaw != "none") || (_slave.behavioralFlaw != "none")>> - $He remains in the Spa, stubborn in $his flaw. - <<elseif (_slave.trust < 60) || (_slave.devotion < 60)>> - $He remains in the Spa, as $he is still learning to accept life as a slave. - <<elseif (_slave.health.condition < 20)>> - $He remains in the Spa, as $he is benefiting from its healing properties. - <<elseif (_slave.health.tired > 30)>> - $He remains in the Spa, continuing to soak away $his fatigue. - <</if>> - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<includeDOM App.SlaveAssignment.rules(_slave)>> - <<= App.SlaveAssignment.diet(_slave)>> - <<includeDOM App.SlaveAssignment.longTermEffects(_slave)>> - <<= App.SlaveAssignment.drugs(_slave)>> - <<= App.SlaveAssignment.relationships(_slave)>> - <<= App.SlaveAssignment.rivalries(_slave)>> - <br> <<= App.SlaveAssignment.devotion(_slave)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnJob(_slave)>> - <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<run App.SlaveAssignment.rest(_slave)>> - <<run App.SlaveAssignment.rules(_slave)>> - <<run App.SlaveAssignment.diet(_slave)>> - <<run App.SlaveAssignment.longTermEffects(_slave)>> - <<run App.SlaveAssignment.drugs(_slave)>> - <<run App.SlaveAssignment.relationships(_slave)>> - <<run App.SlaveAssignment.rivalries(_slave)>> - <<run App.SlaveAssignment.devotion(_slave)>> - <</if>> -<</for>> -<<if (_restedSlaves > 0)>> - <br><br> - <<if (_restedSlaves == 1)>> - One slave has rested until $he reached a state of @@.hotpink;devotion@@ and @@.mediumaquamarine;trust@@ and will leave the spa before the end of the week. - <<else>> - _restedSlaves slaves have rested until they reached a state of @@.hotpink;devotion@@ and @@.mediumaquamarine;trust@@ and will leave the spa before the end of the week. - <</if>> - <<if $spaDecoration != "standard">> - <br><br> <<= capFirstChar($spaName)>>'s $spaDecoration atmosphere @@.hotpink;had an impact on <<if _restedSlaves == 1>>$him while $he was<<else>>them while they were<</if>>@@ resting. - <</if>> -<</if>> -<<if _DL > 0 || _S.Attendant>> - <br><br> -<</if>> diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw index ce4713c9bacbc6e244683358f8df44eef89e0212..60868fbf1ca0592e2a693a12819181c61787cab3 100644 --- a/src/uncategorized/surgeryDegradation.tw +++ b/src/uncategorized/surgeryDegradation.tw @@ -2754,7 +2754,7 @@ As the remote surgery's long recovery cycle completes, <<case "womb">> It's not immediately apparent to $him what kind of surgery $he received, since all $he's left with is a terrible nonspecific ache in $his lower belly. As with all invasive surgery @@.red;$his health has been greatly affected.@@ -<<case "elasticity treatment" "immortality" "gene treatment">> +<<case "elasticity treatment" "immortality treatment" "gene treatment">> The procedure spans the week, with $him spending every other day in the surgery room for a series of 4 sets of injections. A few hours after each session, $he feels terribly ill. $He doesn't quite understand what it's about, just that $he feels pretty bad. The process involves <<if ($PC.skill.medicine >= 100)>>you<<else>>the remote surgeon<</if>> injecting the serum across $his entire body, every few <<if $showInches == 2>>inches<<else>>centimeters<</if>>, leaving small needle marks that fade out within minutes. Despite not leaving a lasting evidence, the process is very invasive work, and leaves $him @@.red;feeling weak and tired.@@ <<case "retrograde virus injection NCS">>