diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index 0a3cbb9e094c031bf45ea4aae64ee9a9640170ee..16aa0642711d0d91a09d3da4fdb20b8e44cc5c41 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -64,6 +64,7 @@ App.Data.defaultGameStateVariables = { FSNamePref: 0, HGFormality: 1, HGSeverity: 0, + HGPiercings: 1, abbreviateSidebar: 1, adamPrinciple: 0, allowFamilyTitles: 0, @@ -363,7 +364,6 @@ App.Data.resetOnNGPlus = { eliteAuctioned: 0, slavesSacrificedThisWeek: 0, - HGtraining: "", mercenariesTitle: "", hormones: 0, FSReminder: 0, diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js index 34d649d8b22098c1c1c3f00accfb9f14eff2f393..49dd193da628e3b133346b71704ab7dc9096dd1e 100644 --- a/js/003-data/miscData.js +++ b/js/003-data/miscData.js @@ -1554,9 +1554,9 @@ App.Data.misc = { fakeBellies: ["a huge empathy belly", "a large empathy belly", "a medium empathy belly", "a small empathy belly"], /* lets fake bellies be separated from other .bellyAccessory */ - modestClothes: ["a ball gown", "a biyelgee costume", "a bunny outfit", "a burkini", "a burqa", "a comfortable bodysuit", "a cybersuit", "a dirndl", "a gothic lolita dress", "a halter top dress", "a hanbok", "a hijab and abaya", "a hijab and blouse", "a huipil", "a kimono", "a klan robe", "a latex catsuit", "a leotard", "a long qipao", "a maternity dress", "a military uniform", "a mini dress", "a mounty outfit", "a nice maid outfit", "a nice nurse outfit", "a niqab and abaya", "a one-piece swimsuit", "a penitent nuns habit", "a police uniform", "a red army uniform", "a schoolgirl outfit", "a schutzstaffel uniform", "a slave gown", "a slutty maid outfit", "a slutty nurse outfit", "a slutty qipao", "a sweater and cutoffs", "a t-shirt and jeans", "a toga", "an oversized t-shirt and boyshorts", "battlearmor", "battledress", "conservative clothing", "cutoffs and a t-shirt", "leather pants and a tube top", "lederhosen", "nice business attire", "restrictive latex", "slutty business attire", "spats and a tank top", "sport shorts and a sports bra", "sport shorts and a t-shirt", "stretch pants and a crop-top", "Imperial Plate",], + modestClothes: ["a ball gown", "a biyelgee costume", "a bunny outfit", "a burkini", "a burqa", "a comfortable bodysuit", "a cybersuit", "a dirndl", "a gothic lolita dress", "a halter top dress", "a hanbok", "a hijab and abaya", "a hijab and blouse", "a huipil", "a kimono", "a klan robe", "a latex catsuit", "a leotard", "a long qipao", "a maternity dress", "a military uniform", "a mini dress", "a mounty outfit", "a nice maid outfit", "a nice nurse outfit", "a niqab and abaya", "a one-piece swimsuit", "a penitent nuns habit", "a police uniform", "a red army uniform", "a schoolgirl outfit", "a schutzstaffel uniform", "a slave gown", "a slutty maid outfit", "a slutty nurse outfit", "a slutty qipao", "a sweater and cutoffs", "a t-shirt and jeans", "a toga", "an oversized t-shirt and boyshorts", "battlearmor", "battledress", "conservative clothing", "cutoffs and a t-shirt", "leather pants and a tube top", "lederhosen", "nice business attire", "restrictive latex", "slutty business attire", "spats and a tank top", "sport shorts and a sports bra", "sport shorts and a t-shirt", "stretch pants and a crop-top", "Imperial Plate"], - sluttyClothes: ["a bimbo outfit", "a chattel habit", "a cheerleader outfit", "a fallen nuns habit", "a schoolgirl outfit", "a skimpy loincloth", "a slutty klan robe", "a slutty maid outfit", "a slutty nurse outfit", "a slutty outfit", "a slutty pony outfit", "a slutty qipao", "a slutty schutzstaffel uniform", "a string bikini", "a succubus outfit", "a t-shirt and panties", "a t-shirt and thong", "a tank-top and panties", "a tube top and thong", "attractive lingerie", "attractive lingerie for a pregnant woman", "clubslut netting", "kitty lingerie", "leather pants and a tube top", "leather pants and pasties", "panties and pasties", "pasties", "slutty business attire", "slutty jewelry", "sport shorts and a sports bra", "striped underwear", "a tight Imperial bodysuit",], + sluttyClothes: ["a bimbo outfit", "a chattel habit", "a cheerleader outfit", "a fallen nuns habit", "a schoolgirl outfit", "a skimpy loincloth", "a slutty klan robe", "a slutty maid outfit", "a slutty nurse outfit", "a slutty outfit", "a slutty pony outfit", "a slutty qipao", "a slutty schutzstaffel uniform", "a string bikini", "a succubus outfit", "a t-shirt and panties", "a t-shirt and thong", "a tank-top and panties", "a tube top and thong", "attractive lingerie", "attractive lingerie for a pregnant woman", "clubslut netting", "kitty lingerie", "leather pants and a tube top", "leather pants and pasties", "panties and pasties", "pasties", "slutty business attire", "slutty jewelry", "sport shorts and a sports bra", "striped underwear", "a tight Imperial bodysuit"], /* stuff that reveals genitals */ humiliatingClothes: ["a bra", "a button-up shirt", "a chattel habit", "a fallen nuns habit", "a skimpy loincloth", "a sports bra", "a string bikini", "a striped bra", "a succubus outfit", "a sweater", "a t-shirt", "a tank-top", "a thong", "a tube top", "clubslut netting", "pasties", "restrictive latex", "shibari ropes", "slutty jewelry", "uncomfortable straps", "Western clothing"], diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index 4a6ea4b083a0a3dba8f0c6ee3775e293e26c2969..5d8c6aeb2ffbe532c4171dee1734fd618c6cc0bf 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -3199,10 +3199,20 @@ fertility + hyperFertility - slave will have multiples, even shorter pregnancy r superfetation - pregnancy does not block ovulation, slave can become pregnant even while pregnant +polyhydramnios - fetal overproduction of amniotic fluid + +uterineHypersensitivity - Hyper sensitive uterus + pleasurable birth + +galactorrhea - inappropriate lactation + gigantism - slave is abnormally tall dwarfism - slave is abnormally short gigantism + dwarfism - slave is very average +neoteny - retains childlike characteristics +progeria - rapid aging +neoteny + progeria = progeria + pFace - slave has a flawless face uFace - slave has a hideous face pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index b748bfaf42ff7d5a0bcfa3e231e73a69fbbdfb1d..4a33309be7527b7d23479dd55d44930de38fcb47 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -1693,7 +1693,7 @@ globalThis.FacilityDatatypeCleanup = (function() { V.arcade = Math.max(+V.arcade, 0) || 0; V.arcadeUpgradeInjectors = Math.clamp(+V.arcadeUpgradeInjectors, 0, 1) || 0; V.arcadeUpgradeCollectors = Math.clamp(+V.arcadeUpgradeCollectors, 0, 1.5) || 0; - V.arcadeUpgradeFuckdolls = Math.clamp(+V.arcadeUpgradeFuckdolls, 0, 2) || 0; + V.arcadeUpgradeFuckdolls = Math.clamp(+V.arcadeUpgradeFuckdolls, 0, 3) || 0; V.arcadeUpgradeHealth = Math.clamp(+V.arcadeUpgradeHealth, -1, 2) || 0; } diff --git a/src/endWeek/brothelReport.js b/src/endWeek/brothelReport.js index cfe0b2bb3d81490e36b9889a4f2b48ef78173709..852fd941bb951196dc1f70af88d2920755e11b7e 100644 --- a/src/endWeek/brothelReport.js +++ b/src/endWeek/brothelReport.js @@ -1,13 +1,13 @@ -globalThis.brothelReport = function() { +App.EndWeek.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 = []; @@ -102,11 +103,11 @@ globalThis.brothelReport = function() { } App.Events.addParagraph(el, r); + r = []; for (const slave of slaves) { const { he2, him2, his2 } = getPronouns(slave).appendSuffix('2'); - r = []; if (S.Madam.rivalryTarget === slave.ID) { r.push(`${He} forces ${his} ${rivalryTerm(S.Madam)}, to service all the men in the brothel.`); @@ -207,13 +208,10 @@ globalThis.brothelReport = function() { } } } - App.Events.addNode(el, r); } + App.Events.addNode(el, r); 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( @@ -238,11 +236,9 @@ globalThis.brothelReport = function() { oldCash = V.cash; } } - return r.join(" "); } - const madamEffects = App.UI.DOM.appendNewElement("p", el, '', "indent"); - $(madamEffects).append(madamText()); + madamText(); if (SL > 0) { const whoreNumber = document.createElement("p"); @@ -258,11 +254,10 @@ globalThis.brothelReport = function() { if (S.Madam) { const slave = S.Madam; + tired(slave); if (V.showEWD !== 0) { const madamEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", madamEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(madamEntry, slave); madamEntry.append(App.EndWeek.favoriteIcon(slave), " "); App.Events.addNode( madamEntry, @@ -289,9 +284,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,10 +327,9 @@ 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"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); r = []; r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); @@ -349,17 +340,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/clinicReport.js b/src/endWeek/clinicReport.js index b741896901b99e518f6093c35ed09ae52080da62..6246921be24a5e6490da43325781fbfcd03f694a 100644 --- a/src/endWeek/clinicReport.js +++ b/src/endWeek/clinicReport.js @@ -240,15 +240,14 @@ App.EndWeek.clinicReport = function() { if (S.Nurse) { const slave = S.Nurse; + tired(slave); /* apply following SA passages to facility leader */ if (V.showEWD !== 0) { const nurseEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", nurseEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(nurseEntry, slave); nurseEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(nurseEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> is serving as the clinical nurse.`); - $(nurseEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + nurseEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { App.SlaveAssignment.standardSlaveReport(slave, true); } @@ -375,9 +374,7 @@ App.EndWeek.clinicReport = function() { if (V.showEWD !== 0) { const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(slaveEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> `); if (slave.choosesOwnAssignment === 2) { @@ -388,7 +385,7 @@ App.EndWeek.clinicReport = function() { const patientContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); $(patientContent).append(`${He} ${App.SlaveAssignment.rest(slave)} `); $(patientContent).append(remainReason); - $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { // discard return values silently App.SlaveAssignment.choosesOwnJob(slave); diff --git a/src/endWeek/economics/fsDevelopments.js b/src/endWeek/economics/fsDevelopments.js index 54bc362f3737f342e0f63e9453e24ff69d27903c..e00f7de439de984c37076c5dbb05ae5c4b7b6524 100644 --- a/src/endWeek/economics/fsDevelopments.js +++ b/src/endWeek/economics/fsDevelopments.js @@ -88,18 +88,18 @@ App.EndWeek.FSDevelopments = function() { } else { r.push(`The <span class="yellow">oceanic location</span> of the arcology almost eliminates cultural interchange, allowing ${V.arcologies[0].name} to independently develop its culture.`); } - if (V.rep < 3000) { + if (V.rep < 3000 - V.enduringRep) { r.push(`<span class="red">Your weak reputation</span> reflects badly on your social projects.`); broadProgress -= 2; - } else if (V.rep < 6000) { + } else if (V.rep < 6000 - V.enduringRep) { r.push(`<span class="red">Your mediocre reputation</span> engenders skepticism towards your social development.`); broadProgress -= 1; - } else if (V.rep < 9000) { + } else if (V.rep < 9000 - V.enduringRep) { r.push(`<span class="yellow">Your reputation</span> is neither weak enough or strong enough to affect social development.`); - } else if (V.rep < 12000) { + } else if (V.rep < 12000 - V.enduringRep) { r.push(`<span class="green">Your strong reputation</span> helps support social development.`); broadProgress += 1; - } else if (V.rep < 16000) { + } else if (V.rep < 16000 - V.enduringRep) { r.push(`<span class="green">Your very strong reputation</span> increases acceptance of your social development.`); broadProgress += 2; } else { diff --git a/src/endWeek/economics/neighborsDevelopment.js b/src/endWeek/economics/neighborsDevelopment.js index 899cb539ae480e300e8b6781dca74e6608ceee09..8cd90356276c24740afa0b13f93f9ce2ad469307 100644 --- a/src/endWeek/economics/neighborsDevelopment.js +++ b/src/endWeek/economics/neighborsDevelopment.js @@ -3,9 +3,8 @@ */ App.EndWeek.neighborsDevelopment = function() { const el = document.createElement("p"); - let He, his; - const averageProsperity = _.mean(V.arcologies.map(a => Math.min(a.prosperity, 10))); + const averageProsperity = _.mean(V.arcologies.map(a => a.prosperity)); const corpBonus = V.corp.Incorporated ? Math.trunc(1000 * Math.pow(App.Corporate.value, 0.1)) : 0; let agentBonusValue = 0; let desc; @@ -57,7 +56,7 @@ App.EndWeek.neighborsDevelopment = function() { } const agent = App.currentAgent(i); if (arc.government === "your agent") { - ({He} = getPronouns(agent)); + const {He} = getPronouns(agent); r.push(`is being run by your agent <span class="deeppink">${SlaveFullName(agent)}.</span>`); if (agent && agent.assignment !== "be your agent") { r.push(`<span class="red">BUG: ${agent} also was ${agent.assignment}!</span>`); @@ -93,7 +92,7 @@ App.EndWeek.neighborsDevelopment = function() { } r.push(`<span class="yellow">After a brief power struggle, it undergoes a change of government.</span>`); if (agent) { - ({his} = getPronouns(agent)); + const {his} = getPronouns(agent); r.push(`<span class="deeppink">${agent.slaveName}</span> manages to escape with the help of a few loyal citizens and returns to you <span class="gold">fearing your displeasure at ${his} failure.</span>`); agent.trust -= 40; assignJob(agent, "rest"); // this takes care of necessary cleanup for agent and agent companion (if any) @@ -2567,41 +2566,41 @@ App.EndWeek.neighborsDevelopment = function() { /* AGENT ADOPTION*/ if (arc.government === "your agent") { const leader = App.currentAgent(i); - const {he, himself, woman, him, hers} = getPronouns(leader); + const {he, his, himself, woman, him, hers} = getPronouns(leader); if (validFSes.includes("FSRepopulationFocus") && leader.fetish === "pregnancy" && V.seePreg === 1) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Repopulationism,</span> since as a pregnancy fetishist, ${he} can't wait to see the female population's bellies swell with life.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Repopulationism,</span> since as a pregnancy fetishist, ${he} can't wait to see the female population's bellies swell with life.`); arc.FSRepopulationFocus = 5; return; } else if (validFSes.includes("FSRestart") && (leader.preg < -1 || (leader.ovaries === 0 && leader.mpreg !== 1)) && leader.genes === "XX") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Eugenics,</span> since if no-one can get pregnant, ${he} won't be alone.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Eugenics,</span> since if no-one can get pregnant, ${he} won't be alone.`); arc.FSRestart = 5; return; } if (validFSes.includes("FSGenderRadicalist") && leader.dick > 0) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Gender Radicalism,</span> since ${he}'s a walking, swinging argument for dickgirls.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Gender Radicalism,</span> since ${he}'s a walking, swinging argument for dickgirls.`); arc.FSGenderRadicalist = 5; return; } else if (validFSes.includes("FSGenderFundamentalist") && leader.pregKnown === 1 || leader.bellyPreg > 1500) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Gender Fundamentalism,</span> since its citizens find leadership by a pregnant ${woman} fascinating.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Gender Fundamentalism,</span> since its citizens find leadership by a pregnant ${woman} fascinating.`); arc.FSGenderFundamentalist = 5; return; } if (validFSes.includes("FSPaternalist") && leader.behavioralQuirk === "advocate") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Paternalism,</span> since as an advocate for slavery, ${he} believes in its benefits.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Paternalism,</span> since as an advocate for slavery, ${he} believes in its benefits.`); arc.FSPaternalist = 5; return; } else if (validFSes.includes("FSDegradationist") && leader.fetish === "sadist") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Degradationism,</span> since as a sexual sadist, ${he}'s excited by the idea of leading a society that applauds ${his} cruelest impulses.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Degradationism,</span> since as a sexual sadist, ${he}'s excited by the idea of leading a society that applauds ${his} cruelest impulses.`); arc.FSDegradationist = 5; return; } if (validFSes.includes("FSSlaveProfessionalism") && (leader.intelligence + leader.intelligenceImplant >= 120) && (leader.skill.vaginal + leader.skill.oral + leader.skill.anal + leader.skill.whoring + leader.skill.entertainment >= 400)) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Slave Professionalism,</span> since ${he} wishes to produce slaves you can be proud of.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Slave Professionalism,</span> since ${he} wishes to produce slaves you can be proud of.`); arc.FSSlaveProfessionalism = 5; return; } else if (validFSes.includes("FSIntellectualDependency") && (leader.intelligence + leader.intelligenceImplant >= 120) && (leader.behavioralFlaw === "arrogant" || leader.behavioralQuirk === "insecure")) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Intellectual Dependency,</span>`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Intellectual Dependency,</span>`); if (leader.behavioralQuirk === "insecure") { r.push(`since, due to ${his} own insecurities, needs to be frequently reassured that ${he} is smarter than the masses.`); } else { @@ -2611,125 +2610,125 @@ App.EndWeek.neighborsDevelopment = function() { return; } if (validFSes.includes("FSBodyPurist") && leader.chem > 50) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Body Purism,</span> since ${he} knows what long term drug damage feels like, and doesn't want any slave to ever experience it again.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Body Purism,</span> since ${he} knows what long term drug damage feels like, and doesn't want any slave to ever experience it again.`); arc.FSBodyPurist = 5; return; } else if (validFSes.includes("FSTransformationFetishist") && leader.boobsImplant > 1000) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Transformation Fetishism,</span> out of a perverse desire to subject all slaves to massive implants like ${hers}.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Transformation Fetishism,</span> out of a perverse desire to subject all slaves to massive implants like ${hers}.`); arc.FSTransformationFetishist = 5; return; } if (validFSes.includes("FSYouthPreferentialist") && leader.actualAge <= 25) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Youth Preferentialism,</span> to buttress acceptance of ${his} own young age.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Youth Preferentialism,</span> to buttress acceptance of ${his} own young age.`); arc.FSYouthPreferentialist = 5; return; } else if (validFSes.includes("FSMaturityPreferentialist") && leader.actualAge > 35) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Maturity Preferentialism,</span> since ${he} has a certain personal interest in promoting the idea that MILFs are sexy.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Maturity Preferentialism,</span> since ${he} has a certain personal interest in promoting the idea that MILFs are sexy.`); arc.FSMaturityPreferentialist = 5; return; } if (validFSes.includes("FSSlimnessEnthusiast") && leader.behavioralQuirk === "insecure") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Slimness Enthusiasm,</span> since ${his} history of anorexia has deeply impacted ${his} idea of beauty.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Slimness Enthusiasm,</span> since ${his} history of anorexia has deeply impacted ${his} idea of beauty.`); arc.FSSlimnessEnthusiast = 5; return; } else if (validFSes.includes("FSAssetExpansionist") && leader.fetish === "boobs") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Asset Expansionism,</span> since ${he}'s a breast expansion fetishist in addition to being a mere breast fetishist.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Asset Expansionism,</span> since ${he}'s a breast expansion fetishist in addition to being a mere breast fetishist.`); arc.FSAssetExpansionist = 5; return; } else if (validFSes.includes("FSAssetExpansionist") && leader.sexualQuirk === "size queen" && leader.vagina > 3) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Asset Expansionism,</span> since ${he}'s a stickler for big dicks and seeks to find one large enough to push ${him} to ${his} very limit.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Asset Expansionism,</span> since ${he}'s a stickler for big dicks and seeks to find one large enough to push ${him} to ${his} very limit.`); arc.FSAssetExpansionist = 5; return; } if (validFSes.includes("FSCummunism") && leader.fetish === "cumslut") { // this will become the cum focused condition, being replaced with breast focus for milk - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Cummunism,</span> since ${he} already loves sucking down huge loads of cum.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Cummunism,</span> since ${he} already loves sucking down huge loads of cum.`); arc.FSCummunism = 5; return; } else if (validFSes.includes("FSPastoralist") && leader.fetish === "boobs") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Pastoralism,</span> since ${he} loves boobs and adores suckling them.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Pastoralism,</span> since ${he} loves boobs and adores suckling them.`); arc.FSPastoralist = 5; return; } if (validFSes.includes("FSHedonisticDecadence") && leader.behavioralFlaw === "gluttonous") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Decadent Hedonism,</span> since ${he} already loves over-eating.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Decadent Hedonism,</span> since ${he} already loves over-eating.`); arc.FSHedonisticDecadence = 5; return; } else if (validFSes.includes("FSPhysicalIdealist") && leader.behavioralQuirk === "fitness") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Physical Idealism,</span> since ${he}'s a fitness fanatic ${himself}.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Physical Idealism,</span> since ${he}'s a fitness fanatic ${himself}.`); arc.FSPhysicalIdealist = 5; return; } else if (validFSes.includes("FSHedonisticDecadence") && leader.fetish !== "none" && leader.fetishStrength >= 100) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Decadent Hedonism,</span> since ${he} seeks to satisfy ${his} powerful fetish.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Decadent Hedonism,</span> since ${he} seeks to satisfy ${his} powerful fetish.`); arc.FSHedonisticDecadence = 5; return; } if (validFSes.includes("FSStatuesqueGlorification") && leader.height >= 200) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Statuesque Glorification,</span> since ${he} is tired of being one of the tallest in arcology.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Statuesque Glorification,</span> since ${he} is tired of being one of the tallest in arcology.`); arc.FSStatuesqueGlorification = 5; return; } else if (validFSes.includes("FSPetiteAdmiration") && leader.height >= 170 && leader.fetish === "dom") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Petite Admiration,</span> since it is far easier to dominate someone much smaller than oneself.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Petite Admiration,</span> since it is far easier to dominate someone much smaller than oneself.`); arc.FSPetiteAdmiration = 5; return; } if (validFSes.includes("FSIncestFetishist")) { const lover = V.slaves.find(s => (s.ID === leader.relationshipTarget && areRelated(s, leader) && s.assignment === "live with your agent")); if ((leader.behavioralQuirk === "sinful" || leader.sexualQuirk === "perverted") && lover && V.seeIncest === 1) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Incest Festishism,</span> to share the love and joy ${he} holds with ${his} ${relativeTerm(leader, lover)}.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Incest Festishism,</span> to share the love and joy ${he} holds with ${his} ${relativeTerm(leader, lover)}.`); arc.FSIncestFetishist = 5; return; } } if (validFSes.includes("FSChattelReligionist") && leader.behavioralFlaw === "devout") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Chattel Religionism,</span> to share and spread ${his} deeply held beliefs about the holiness of sexual service.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Chattel Religionism,</span> to share and spread ${his} deeply held beliefs about the holiness of sexual service.`); arc.FSChattelReligionist = 5; return; } else if (validFSes.includes("FSChattelReligionist") && leader.behavioralQuirk === "sinful") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Chattel Religionism,</span> since ${he}'s excited by the prospect of getting away with horrible sins against old religions in public.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Chattel Religionism,</span> since ${he}'s excited by the prospect of getting away with horrible sins against old religions in public.`); arc.FSChattelReligionist = 5; return; } if (validFSes.includes("FSEgyptianRevivalist") && leader.relationshipTarget !== 0) { const lover = getSlave(leader.relationshipTarget); if (lover && areRelated(leader, lover)) { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Egyptian Revivalism,</span> since ${he}'s already part of a gloriously incestuous relationship.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Egyptian Revivalism,</span> since ${he}'s already part of a gloriously incestuous relationship.`); arc.FSEgyptianRevivalist = 5; return; } } else if (validFSes.includes("FSChineseRevivalist") && leader.nationality === "Chinese") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Chinese Revivalism,</span> since ${he}'s Chinese ${himself} and can claim high honor in such a society.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Chinese Revivalism,</span> since ${he}'s Chinese ${himself} and can claim high honor in such a society.`); arc.FSChineseRevivalist = 5; return; } else if (validFSes.includes("FSEdoRevivalist") && leader.nationality === "Japanese") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Edo Revivalism,</span> since ${he}'s Japanese ${himself} and can claim high honor in such a society.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Edo Revivalism,</span> since ${he}'s Japanese ${himself} and can claim high honor in such a society.`); arc.FSEdoRevivalist = 5; return; } else if (validFSes.includes("FSAztecRevivalist") && leader.nationality === "Mexican") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Aztec Revivalism,</span> since ${he}'s Mexican ${himself} and can claim high honor in such a society.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Aztec Revivalism,</span> since ${he}'s Mexican ${himself} and can claim high honor in such a society.`); arc.FSAztecRevivalist = 5; return; } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "German") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s German ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s German ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); arc.FSNeoImperialist = 5; return; } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "French") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s French ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s French ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); arc.FSNeoImperialist = 5; return; } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "Spanish") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s Spanish ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s Spanish ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); arc.FSNeoImperialist = 5; return; } else if (validFSes.includes("FSNeoImperialist") && leader.nationality === "English") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s English ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Neo-Imperialism,</span> since ${he}'s English ${himself} and can easily cement ${his} rule with Imperial directives in your name.`); arc.FSNeoImperialist = 5; return; } else if (validFSes.includes("FSRomanRevivalist") && leader.behavioralQuirk === "confident") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Roman Revivalism,</span> since it appeals to ${his} confident, patrician nature.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Roman Revivalism,</span> since it appeals to ${his} confident, patrician nature.`); arc.FSRomanRevivalist = 5; return; } else if (validFSes.includes("FSArabianRevivalist") && leader.fetish === "dom") { - r.push(`Your agent <span class="pink">leader.slaveName</span> successfully pushes it to <span class="yellow">adopt Arabian Revivalism,</span> since ${he}'s sexually dominant and quite likes the idea of overseeing slave bazaars.`); + r.push(`Your agent <span class="pink">${leader.slaveName}</span> successfully pushes it to <span class="yellow">adopt Arabian Revivalism,</span> since ${he}'s sexually dominant and quite likes the idea of overseeing slave bazaars.`); arc.FSArabianRevivalist = 5; return; } diff --git a/src/endWeek/economics/reputation.js b/src/endWeek/economics/reputation.js index c7c614a887cce4e82f93e8b2fac989fa7cb60a22..bfa8e13f4941d5d51f412bcba86227c956888796 100644 --- a/src/endWeek/economics/reputation.js +++ b/src/endWeek/economics/reputation.js @@ -163,11 +163,12 @@ App.EndWeek.reputation = function() { repX(-100, "architecture"); } + _enduringRep = V.enduringRep; if (V.arcologies[0].FSRestartDecoration === 100) { r.push(`As a member of the Societal Elite, your appearance has no bearing on your reputation.`); } else { if (V.PC.dick === 0 && V.PC.boobs >= 300 && V.PC.title === 0) { - if (V.rep > 18000) { + if (V.rep > 18000 - _enduringRep) { r.push(`Your reputation is so well-established that society has accepted your notoriously feminine appearance despite how unusual it is for a prominent slaveowner to look like you do.`); if (V.arcologies[0].FSGenderRadicalist > 30) { r.push(`Indeed, society sees you as entirely male, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`); @@ -190,7 +191,7 @@ App.EndWeek.reputation = function() { } } } else if ((V.PC.boobs >= 300) || V.PC.title === 0) { - if (V.rep > 15000) { + if (V.rep > 15000 - _enduringRep) { r.push(`Your reputation is so strong that society has accepted your feminine appearance despite how unusual it is for a prominent slaveowner to look like you do.`); if (V.arcologies[0].FSGenderRadicalist > 30) { r.push(`Indeed, society sees you as entirely male, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`); @@ -213,7 +214,7 @@ App.EndWeek.reputation = function() { } } } else if ((V.PC.dick === 0) || (V.PC.vagina !== -1)) { - if (V.rep > 15000) { + if (V.rep > 15000 - _enduringRep) { r.push(`Your reputation is so strong that society has accepted your unorthodox arrangement downstairs, for an arcology owner.`); if (V.arcologies[0].FSGenderRadicalist > 30) { r.push(`Indeed, society sees you as entirely male, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`); @@ -244,7 +245,7 @@ App.EndWeek.reputation = function() { /* already handled above */ } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { if (V.PC.intelligence + V.PC.intelligenceImplant < -10) { - if (V.rep > 18000) { + if (V.rep > 18000 - _enduringRep) { r.push(`You've somehow built such a reputation for yourself that your lack of a brain is no longer a societal concern.`); } else { repX(forceNeg(Math.min((V.rep * 0.025), 100)), "PCappearance"); @@ -253,7 +254,7 @@ App.EndWeek.reputation = function() { } } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { if (V.PC.intelligence + V.PC.intelligenceImplant < 100) { - if (V.rep > 18000) { + if (V.rep > 18000 - _enduringRep) { r.push(`You've built such a reputation for yourself that you not being a genius is no longer a societal concern.`); } else { repX(forceNeg(Math.min((V.rep * 0.05), 750)), "PCappearance"); @@ -262,14 +263,14 @@ App.EndWeek.reputation = function() { } } } else if (V.PC.intelligence + V.PC.intelligenceImplant <= 10) { - if (V.rep > 18000) { + if (V.rep > 18000 - _enduringRep) { r.push(`You've managed to build such a reputation for yourself that your lack of intelligence is no longer a societal concern.`); } else { repX(forceNeg(Math.min((V.rep * 0.05), 750)), "PCappearance"); r.push(`Society <span class="red">is uncomfortable</span> being led by someone not smart. Your lack of intelligence brings your every action under scrutiny.`); } } else if (V.PC.intelligence + V.PC.intelligenceImplant <= 50) { - if (V.rep > 12000) { + if (V.rep > 12000 - _enduringRep) { r.push(`You've built such a reputation for yourself that your lack of intelligence is no longer a societal concern.`); } else { repX(forceNeg(Math.min((V.rep * 0.05), 500)), "PCappearance"); @@ -282,7 +283,7 @@ App.EndWeek.reputation = function() { /* already handled above */ } else { if (V.arcologies[0].FSGenderRadicalist !== "unset") { - if (V.rep > 18000) { + if (V.rep > 18000 - _enduringRep) { r.push(`You are so well regarded that society has acquiesced that getting penetrated is not a sure sign of femininity.`); } else { r.push(`Society views getting fucked as sign of femininity and is <span class="red">strongly against your sexual preferences.</span>`); @@ -290,7 +291,7 @@ App.EndWeek.reputation = function() { repX(-1000, "PCactions"); } } else if (V.arcologies[0].FSGenderFundamentalist !== "unset" && V.PC.vagina !== -1 && V.PC.title === 0) { - if (V.rep > 10000) { + if (V.rep > 10000 - _enduringRep) { r.push(`Society has grown accustomed to your efforts enough to not care that you enjoy slave dick. In fact, it even <span class="green">strengthens</span> traditional gender roles, even though you insist on breaking them.`); FutureSocieties.Change("GenderFundamentalist", 1); } else { @@ -299,7 +300,7 @@ App.EndWeek.reputation = function() { repX(-1000, "PCactions"); } } else { - if (V.rep > 15000) { + if (V.rep > 15000 - _enduringRep) { r.push(`You are so well liked that society has accepted that you enjoy taking everything a slave has to offer.`); } else { r.push(`Society finds your penchant for taking slave dick <span class="red">very distasteful</span> for a slaveowner.`); @@ -350,7 +351,7 @@ App.EndWeek.reputation = function() { } } else if (V.arcologies[0].FSSubjugationist !== "unset") { if (V.PC.race === V.arcologies[0].FSSubjugationistRace) { - if (V.rep > 15000) { + if (V.rep > 15000 - _enduringRep) { r.push(`Your reputation is so strong that society has accepted your ${V.PC.race}ness despite you being an inferior race.`); } else { r.push(`Society <span class="red">loathes;</span> being lead by an inferior ${V.PC.race}, believing that any other race would make a far better leader than you.`); @@ -508,6 +509,8 @@ App.EndWeek.reputation = function() { r.push(`penetration.`); } repX(10, "PCappearance"); + } else if (V.rep < 20000 - _enduringRep) { + r.push(`You have carved out such a name for yourself that society has come to terms with being led by a woman with child.`); } else { r.push(`Most prominent female owners avoid being penetrated on`); if (V.policies.sexualOpenness === 1) { @@ -520,13 +523,13 @@ App.EndWeek.reputation = function() { } } - if (V.PC.career === "escort" && V.rep < 16000) { + if (V.PC.career === "escort" && V.rep < 16000 - _enduringRep) { r.push(`Society <span class="red">frowns</span> over being run by an ex-whore. The presence of porn of you on the net doesn't aid your reputation either.`); repX(forceNeg(Math.min((V.rep * 0.05), 500)), "PCactions"); } else if (V.PC.career === "escort") { r.push(`Your reputation is so strong that society has accepted your previous endeavors despite how unusual it is for a prominent slaveowner to have once nearly been a slave.`); } - if (V.PC.career === "servant" && V.rep < 12000) { + if (V.PC.career === "servant" && V.rep < 12000 - _enduringRep) { r.push(`Society <span class="red">frowns</span> over being run by an ex-`); if (V.PC.title === 1) { r.push(`butler,`); @@ -538,10 +541,10 @@ App.EndWeek.reputation = function() { } else if (V.PC.career === "servant") { r.push(`Your reputation is so strong that society has accepted your previous vocation despite how unusual it is for a prominent slaveowner to have once been nothing more than a lowly servant.`); } - if (V.PC.career === "gang" && V.rep < 15000) { + if (V.PC.career === "gang" && V.rep < 15000 - _enduringRep) { r.push(`Society <span class="red">frowns</span> over being run by an ex-gang leader, no matter how strong they might have been.`); repX(forceNeg(Math.min((V.rep * 0.05), 500)), "PCactions"); - } else if (V.PC.career === "BlackHat" && V.rep < 15000) { + } else if (V.PC.career === "BlackHat" && V.rep < 15000 - _enduringRep) { r.push(`Society <span class="red">dislikes</span> being run by someone so capable of dredging up secrets, especially when they used to do it for the highest bidder.`); repX(forceNeg(Math.min((V.rep * 0.05), 500)), "PCactions"); } else if (V.PC.career === "gang" || V.PC.career === "BlackHat") { diff --git a/src/endWeek/incubatorReport.js b/src/endWeek/incubatorReport.js new file mode 100644 index 0000000000000000000000000000000000000000..4b61119b2ad0ecdff0889b7dd1901a6a5936dbf8 --- /dev/null +++ b/src/endWeek/incubatorReport.js @@ -0,0 +1,835 @@ +App.EndWeek.incubatorReport = function() { + const frag = document.createDocumentFragment(); + V.readySlaves = 0; + + for (const tank of V.tanks) { + const entry = App.UI.DOM.appendNewElement('p', frag); + let r = []; + const {He, he, His, his, him} = getPronouns(tank); + tank.birthWeek += 1; + if (tank.birthWeek >= 52) { + tank.birthWeek = 0; + if (V.seeAge === 1) { + tank.actualAge++; + tank.ovaryAge++; + } + } + if (tank.growTime > 0) { + tank.growTime -= V.incubatorUpgradeSpeed; + r.push(`<span class="pink">${tank.slaveName}'s</span> growth is currently being accelerated. ${He}`); + if (Math.round(tank.growTime/V.incubatorUpgradeSpeed) <= 0) { + r.push(`is <span class="lime">ready for release.</span> ${He} will be ejected from ${his} tank upon your approach.`); + } else { + r.push(`will be ready for release in about ${Math.round(tank.growTime/V.incubatorUpgradeSpeed)} weeks.`); + } + } else { + r.push(`<span class="pink">${tank.slaveName}</span> is <span class="lime">ready for release.</span> ${He} will be ejected from ${his} tank upon your approach.`); + V.readySlaves = 1; + } + App.Events.addNode(entry, r, "div"); + + r = []; + if (V.incubatorUpgradeWeight === 1) { + if (V.incubatorWeightSetting === 1) { + if (tank.weight < 200) { + if (V.incubatorUpgradeSpeed === 52) { + tank.weight += 70; + } else if (V.incubatorUpgradeSpeed === 18) { + tank.weight += 40; + } else if (V.incubatorUpgradeSpeed === 9) { + tank.weight += 20; + } else if (V.incubatorUpgradeSpeed === 6) { + tank.weight += 10; + } else if (V.incubatorUpgradeSpeed === 5) { + tank.weight += 5; + } + } + r.push(`The weight monitoring systems are overloading ${his} intake causing <span class="red">rapid weight gain.</span>`); + } else if (V.incubatorWeightSetting === 2) { + if (tank.weight > 10) { + if (V.incubatorUpgradeSpeed === 52) { + tank.weight -= 30; + } else if (V.incubatorUpgradeSpeed === 18) { + tank.weight -= 10; + } else if (V.incubatorUpgradeSpeed === 9) { + tank.weight -= 5; + } else if (V.incubatorUpgradeSpeed === 6) { + tank.weight -= 2; + } else if (V.incubatorUpgradeSpeed === 5) { + tank.weight -= 1; + } + r.push(`The weight monitoring systems detect ${he} is overweight and <span class="green">decrease ${his} caloric intake.</span>`); + } else if (tank.weight < -10) { + if (V.incubatorUpgradeSpeed === 52) { + tank.weight += 30; + } else if (V.incubatorUpgradeSpeed === 18) { + tank.weight += 10; + } else if (V.incubatorUpgradeSpeed === 9) { + tank.weight += 5; + } else if (V.incubatorUpgradeSpeed === 6) { + tank.weight += 2; + } else if (V.incubatorUpgradeSpeed === 5) { + tank.weight += 1; + } + r.push(`The weight monitoring systems detect ${he} is underweight and <span class="green">increase ${his} caloric intake.</span>`); + } else { + r.push(`${He} is <span class="lime">currently at a healthy weight;</span> efforts will be made to maintain it.`); + } + } else if (V.incubatorWeightSetting === 0) { + if (tank.weight > -100) { + r.push(`${His} developing body <span class="red">quickly sheds its gained weight.</span>`); + tank.weight -= 40; + } + } + } else { + if (tank.weight > -100) { + r.push(`${His} developing body <span class="red">quickly sheds its gained weight.</span>`); + tank.weight -= 40; + } + } + App.Events.addNode(entry, r, "div"); + + r = []; + if (V.incubatorUpgradeMuscles === 1) { + if (V.incubatorMusclesSetting === 2) { + if (tank.muscles < 100) { + if (V.incubatorUpgradeSpeed === 52) { + tank.muscles += 70; + } else if (V.incubatorUpgradeSpeed === 18) { + tank.muscles += 40; + } else if (V.incubatorUpgradeSpeed === 9) { + tank.muscles += 20; + } else if (V.incubatorUpgradeSpeed === 6) { + tank.muscles += 10; + } else if (V.incubatorUpgradeSpeed === 5) { + tank.muscles += 5; + } + } + r.push(`The strength monitoring systems are overloading ${him} with steroids causing <span class="green">rapid muscle development.</span>`); + } else if (V.incubatorMusclesSetting === 1) { + if (tank.muscles > 10) { + if (V.incubatorUpgradeSpeed === 52) { + tank.muscles -= 30; + } else if (V.incubatorUpgradeSpeed === 18) { + tank.muscles -= 10; + } else if (V.incubatorUpgradeSpeed === 9) { + tank.muscles -= 5; + } else if (V.incubatorUpgradeSpeed === 6) { + tank.muscles -= 2; + } else if (V.incubatorUpgradeSpeed === 5) { + tank.muscles--; + } + r.push(`The strength monitoring systems detect ${he} is overly muscular and <span class="green">decrease ${his} steroid dosage.</span>`); + } else if (tank.muscles < -10) { + if (V.incubatorUpgradeSpeed === 52) { + tank.muscles += 30; + } else if (V.incubatorUpgradeSpeed === 18) { + tank.muscles += 10; + } else if (V.incubatorUpgradeSpeed === 9) { + tank.muscles += 5; + } else if (V.incubatorUpgradeSpeed === 6) { + tank.muscles += 2; + } else if (V.incubatorUpgradeSpeed === 5) { + tank.muscles++; + } + r.push(`The strength monitoring systems detect ${he} is weak and <span class="green">increase ${his} steroid dosage.</span>`); + } else { + r.push(`${He} has <span class="lime">a healthy musculature;</span> efforts will be made to maintain it.`); + } + } else if (V.incubatorMusclesSetting === 0) { + if (tank.muscles > -100) { + r.push(`${His} developing body <span class="red">quickly loses its gained muscle.</span>`); + tank.muscles -= 40; + } + } + } else { + if (tank.muscles > -100) { + r.push(`${His} developing body <span class="red">quickly loses its gained muscle.</span>`); + tank.muscles -= 40; + } + } + App.Events.addNode(entry, r, "div"); + + r = []; + if (V.incubatorUpgradeGrowthStims === 1 && V.incubatorGrowthStimsSetting !== 0) { + let heightLimit = Math.trunc(Math.clamp((Height.mean(tank) * 1.25), 0, 274)); + let heightLimitAge = Height.forAge(tank.height, tank); + if (tank.geneticQuirks.dwarfism === 2 && tank.geneticQuirks.gigantism !== 2) { + heightLimit = Math.min(heightLimit, 160); + } + if (tank.geneMods.NCS === 1) { + /* NCS should block physical growth beyond that of a toddler, but some players might like + * a little more or less. So using V.minimumSlaveAge or 8, whichever is lesser. */ + const _limitAge = Math.min(8, V.minimumSlaveAge); + heightLimitAge = Height.forAge(tank.height, _limitAge, tank.genes); + heightLimit = heightLimitAge; + } else if (tank.geneticQuirks.neoteny === 2 && tank.actualAge > 12) { + heightLimitAge = Height.forAge(tank.height, 12, tank.genes); + heightLimit = heightLimitAge; + } + if (tank.height >= heightLimit) { + r.push(`The monitoring system detects ${his} body is not able to support further increases in height, so it carefully regulates stimulant injections to <span class="yellow">maintain ${his} current stature.</span>`); + tank.height = heightLimit; + } else if (V.incubatorGrowthStimsSetting === 2) { + if (tank.geneMods.NCS === 1) { + r.push(`The monitoring system floods ${his} body with growth stimulants, but ${his} <span class="orange">NCS prevents an increase in ${his} growth rate.</span>`); + tank.height = heightLimitAge; + } else { + r.push(`The monitoring system floods ${his} body with growth stimulants, causing <span class="green">a sharp increase in growth rate.</span>`); + if (V.incubatorWeightSetting >= 1 && V.incubatorMusclesSetting <= 1 && V.incubatorReproductionSetting <= 1) { + if (V.incubatorUpgradeSpeed === 52) { + tank.height += random(3, 6); + } else if (V.incubatorUpgradeSpeed === 18) { + tank.height += random(2, 5); + } else if (V.incubatorUpgradeSpeed === 9) { + tank.height += random(1, 4); + } else if (V.incubatorUpgradeSpeed === 6) { + tank.height += random(1, 3); + } else if (V.incubatorUpgradeSpeed === 5) { + tank.height += random(1, 2); + } + } else { + if (V.incubatorUpgradeSpeed === 52) { + tank.height += random(2, 5); + } else if (V.incubatorUpgradeSpeed === 18) { + tank.height += random(1, 4); + } else if (V.incubatorUpgradeSpeed === 9) { + tank.height += random(1, 3); + } else if (V.incubatorUpgradeSpeed === 6) { + tank.height += random(1, 2); + } else if (V.incubatorUpgradeSpeed === 5) { + tank.height += random(0, 1); + } + } + } + } else if (V.incubatorGrowthStimsSetting === 1) { + if (tank.geneMods.NCS === 1) { + r.push(`The monitoring system detects ${he} is near the expected height for ${his} <span class="orange">NCS</span> condition, so it carefully regulates stimulant injections to <span class="yellow">maintain ${his} current stature.</span>`); + tank.height = heightLimitAge; + } else if (tank.height > heightLimitAge) { + r.push(`The monitoring systems detect ${he} is near the expected height, so it carefully regulates stimulant injections to <span class="yellow">maintain ${his} current stature.</span>`); + if (random(1, 10) === 10) { + if (V.incubatorUpgradeSpeed === 52) { + tank.height += random(1, 4); + } else if (V.incubatorUpgradeSpeed === 18) { + tank.height += random(1, 3); + } else if (V.incubatorUpgradeSpeed === 9) { + tank.height += random(1, 2); + } else if (V.incubatorUpgradeSpeed === 6) { + tank.height += random(0, 1); + } else if (V.incubatorUpgradeSpeed === 5) { + tank.height += random(0, 1); + } + } + } else { + r.push(`The monitoring systems detect ${his} body is capable of developing more rapidly and <span class="green">increase ${his} growth stimulant dosage.</span>`); + if (V.incubatorUpgradeSpeed === 52) { + tank.height += random(1, 4); + } else if (V.incubatorUpgradeSpeed === 18) { + tank.height += random(1, 3); + } else if (V.incubatorUpgradeSpeed === 9) { + tank.height += random(1, 2); + } else if (V.incubatorUpgradeSpeed === 6) { + tank.height += random(0, 1); + } else if (V.incubatorUpgradeSpeed === 5) { + tank.height += random(0, 1); + } + } + } + tank.height = Math.clamp(tank.height, 0, heightLimit); + } else { + r.push(`With the growth stimulant injections offline, ${his} body is left to develop naturally.`); + } + App.Events.addNode(entry, r, "div"); + + r = []; + if (V.incubatorUpgradeReproduction === 1) { + const rearQuirk = tank.geneticQuirks.rearLipedema === 2 ? 2 : 1; + if (V.incubatorReproductionSetting === 2) { + r.push(`${His} developing body is being flooded with hormones.`); + if (V.incubatorWeightSetting === 1) { + r.push(`Combined with the abundant food provided to ${him}, ${his} body grows rapidly.`); + if (tank.ovaries === 1) { + tank.pubertyXX = 1; + if (tank.hormoneBalance < 500) { + tank.hormoneBalance += 100; + } + tank.readyOva = V.seeHyperPreg === 1 ? random(25, 45) : random(3, 8); + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess estrogen-laced growth hormones flooding ${his} body.`); + } else if (V.incubatorUpgradeSpeed === 52) { + if (tank.boobs < 8000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 2000; + } + if (tank.hips < 2 && random(1, 100) > 50) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips += 2; + } + if (tank.butt < 12*rearQuirk && random(1, 100) > 30/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt += 4; + } + } else if (V.incubatorUpgradeSpeed === 18) { + if (tank.boobs < 8000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 500; + } + if (tank.hips < 2 && random(1, 100) > 50) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 12*rearQuirk && random(1, 100) > 50/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt += 3; + } + } else if (V.incubatorUpgradeSpeed === 9) { + if (tank.boobs < 8000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 200; + } + if (tank.hips < 2 && random(1, 100) > 60) { + r.push(`The excess estrogen-laced growth hormones <span class="green">causes ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 12*rearQuirk && random(1, 100) > 50/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear grow fatter.</span>`); + tank.butt += 2; + } + } else if (V.incubatorUpgradeSpeed === 6) { + if (tank.boobs < 8000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 100; + } + if (tank.hips < 2 && random(1, 100) > 70) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 12*rearQuirk && random(1, 100) > 60/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 5) { + if (tank.boobs < 8000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 100; + } + if (tank.hips < 2 && random(1, 100) > 80) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 12*rearQuirk && random(1, 100) > 70/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } + } else if (tank.balls > 0) { + tank.pubertyXY = 1; + if (tank.hormoneBalance > -500) { + tank.hormoneBalance -= 100; + } + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess testosterone-laced growth hormones flooding ${his} body.`); + } else if (V.incubatorUpgradeSpeed === 52) { + if (tank.balls < 40) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls += 16; + } + if (tank.dick < 10 && random(1, 100) > 20) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick += 4; + } + } else if (V.incubatorUpgradeSpeed === 18) { + if (tank.balls < 40 && random(1, 100) > 10) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls += 9; + } + if (tank.dick < 10 && random(1, 100) > 30) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick += 3; + } + } else if (V.incubatorUpgradeSpeed === 9) { + if (tank.balls < 40 && random(1, 100) > 20) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls += 4; + } + if (tank.dick < 10 && random(1, 100) > 50) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick += 2; + } + } else if (V.incubatorUpgradeSpeed === 6) { + if (tank.balls < 40 && random(1, 100) > 30) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls += 2; + } + if (tank.dick < 10 && random(1, 100) > 70) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 5) { + if (tank.balls < 40 && random(1, 100) > 30) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 10 && random(1, 100) > 80) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } + } + } else if (V.incubatorWeightSetting === 2) { + r.push(`Combined with the healthy food provided to ${him}, ${his} body grows readily.`); + if (tank.ovaries === 1) { + tank.pubertyXX = 1; + if (tank.hormoneBalance < 500) { + tank.hormoneBalance += 100; + } + tank.readyOva = V.seeHyperPreg === 1 ? random(15, 25) : random(2, 6); + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess estrogen-laced growth hormones flooding ${his} body.`); + } else if (V.incubatorUpgradeSpeed === 52) { + if (tank.boobs < 4000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 1000; + } + if (tank.hips < 2 && random(1, 100) > 70) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 8*rearQuirk && random(1, 100) > 50/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt += 3; + } + } else if (V.incubatorUpgradeSpeed === 18) { + if (tank.boobs < 4000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 500; + } + if (tank.hips < 2 && random(1, 100) > 80) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 8*rearQuirk && random(1, 100) > 50/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 9) { + if (tank.boobs < 4000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 200; + } + if (tank.hips < 2 && random(1, 100) > 90) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 8*rearQuirk && random(1, 100) > 60/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 6) { + if (tank.boobs < 4000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 100; + } + if (tank.hips < 2 && random(1, 100) > 95) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 8*rearQuirk && random(1, 100) > 70/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 5) { + if (tank.boobs < 4000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 100; + } + if (tank.hips < 2 && random(1, 100) > 95) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 8*rearQuirk && random(1, 100) > 80/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } + } else if (tank.balls > 0) { + tank.pubertyXY = 1; + if (tank.hormoneBalance > -500) { + tank.hormoneBalance -= 100; + } + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess testosterone-laced growth hormones flooding ${his} body.`); + } else if (V.incubatorUpgradeSpeed === 52) { + if (tank.balls < 10) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls += 3; + } + if (tank.dick < 7 && random(1, 100) > 20) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick += 2; + } + } else if (V.incubatorUpgradeSpeed === 18) { + if (tank.balls < 10 && random(1, 100) > 10) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls += 2; + } + if (tank.dick < 7 && random(1, 100) > 30) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 9) { + if (tank.balls < 10 && random(1, 100) > 20) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 7 && random(1, 100) > 50) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 6) { + if (tank.balls < 10 && random(1, 100) > 30) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 7 && random(1, 100) > 70) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 5) { + if (tank.balls < 10 && random(1, 100) > 30) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 7 && random(1, 100) > 80) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } + } + } else { + r.push(`Since ${his} body has little to work with, ${his} growth is fairly minor.`); + if (tank.ovaries === 1) { + tank.pubertyXX = 1; + if (tank.hormoneBalance < 500) { + tank.hormoneBalance += 100; + } + tank.readyOva = V.seeHyperPreg === 1 ? random(10, 15) : random(2, 4); + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess estrogen-laced growth hormones flooding ${his} body.`); + } else if (V.incubatorUpgradeSpeed === 52) { + if (tank.boobs < 2000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 700; + } + if (tank.hips < 2 && random(1, 100) > 90) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips += 2; + } + if (tank.butt < 6*rearQuirk && random(1, 100) > 70/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt += 2; + } + } else if (V.incubatorUpgradeSpeed === 18) { + if (tank.boobs < 2000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 200; + } + if (tank.hips < 2 && random(1, 100) > 80) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 6*rearQuirk && random(1, 100) > 70/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 9) { + if (tank.boobs < 2000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly balloon ${his} breasts.</span>`); + tank.boobs += 50; + } + if (tank.hips < 2 && random(1, 100) > 80) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 6*rearQuirk && random(1, 100) > 90/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 6) { + if (tank.boobs < 2000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly grow ${his} breasts.</span>`); + tank.boobs += 20; + } + if (tank.hips < 2 && random(1, 100) > 90) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 6*rearQuirk && random(1, 100) > 90/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } else if (V.incubatorUpgradeSpeed === 5) { + if (tank.boobs < 2000) { + r.push(`The excess estrogen-laced growth hormones <span class="green">rapidly grow ${his} breasts.</span>`); + tank.boobs += 10; + } + if (tank.hips < 2 && random(1, 100) > 95) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); + tank.hips++; + } + if (tank.butt < 6*rearQuirk && random(1, 100) > 90/rearQuirk) { + r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`); + tank.butt++; + } + } + } else if (tank.balls > 0) { + tank.pubertyXY = 1; + if (tank.hormoneBalance > -500) { + tank.hormoneBalance -= 100; + } + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the excess testosterone-laced growth hormones flooding ${his} body.`); + } else if (V.incubatorUpgradeSpeed === 52) { + if (tank.balls < 6) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); + tank.balls += 2; + } + if (tank.dick < 4 && random(1, 100) > 60) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 18) { + if (tank.balls < 6 && random(1, 100) > 50) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 4 && random(1, 100) > 60) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 9) { + if (tank.balls < 6 && random(1, 100) > 60) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to balloon for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 4 && random(1, 100) > 70) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick += 2; + } + } else if (V.incubatorUpgradeSpeed === 6) { + if (tank.balls < 6 && random(1, 100) > 70) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 4 && random(1, 100) > 80) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } else if (V.incubatorUpgradeSpeed === 5) { + if (tank.balls < 6 && random(1, 100) > 80) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} balls to grow for extra cum production.</span>`); + tank.balls++; + } + if (tank.dick < 4 && random(1, 100) > 90) { + r.push(`The excess testosterone-laced growth hormones <span class="green">cause ${his} penis to swell.</span>`); + tank.dick++; + } + } + } + } + } else if (V.incubatorReproductionSetting === 1) { + r.push(`${His} hormone levels are being carefully managed, <span class="green">encouraging early puberty.</span>`); + if (tank.ovaries === 1) { + tank.pubertyXX = 1; + tank.hormoneBalance = 250; + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks growth</span> despite the added estrogen.`); + } else { + if (tank.boobs < 400 && random(1, 100) > 60) { + r.push(`The added estrogen <span class="green">causes ${his} breasts to swell.</span>`); + tank.boobs += 50; + } + if (tank.hips < 2 && random(1, 100) > 90) { + r.push(`The added estrogen <span class="green">causes ${his} hips to widen.</span>`); + tank.hips++; + } + if (tank.butt < 5*rearQuirk && random(1, 100) > 80/rearQuirk) { + r.push(`The added estrogen <span class="green">causes ${his} butt to grow.</span>`); + tank.butt++; + } + } + } else if (tank.balls > 0) { + tank.pubertyXY = 1; + tank.hormoneBalance = -250; + if (tank.geneMods.NCS === 1) { + /* NCS blocks hormonal growth of all secondary sexual characteristics */ + r.push(`${His} <span class="orange">NCS blocks all growth</span> despite the added testosterone.`); + } else { + if (tank.balls < 3 && random(1, 100) > 80) { + r.push(`The added testosterone <span class="green">causes ${his} balls to swell.</span>`); + tank.balls++; + } + if (tank.dick < 3 && random(1, 100) > 60) { + r.push(`The added testosterone <span class="green">causes ${his} penis to grow.</span>`); + tank.dick++; + } + } + } + } else { + if (tank.hormoneBalance > 100) { + tank.hormoneBalance -= 50; + } else if (tank.hormoneBalance < -100) { + tank.hormoneBalance += 50; + } + if (tank.balls > 0) { + if (tank.balls > 1) { + tank.balls -= 5; + } + if (tank.dick > 1) { + tank.dick -= 5; + } + if (tank.balls <= 0) { + tank.balls = 1; + } + if (tank.dick <= 0) { + tank.dick = 1; + } + } + if (tank.boobs > 0) { + tank.boobs -= 500; + } + if (tank.butt > 0) { + tank.butt -= 4; + } + } + } else { + if (tank.hormoneBalance > 100) { + tank.hormoneBalance -= 50; + } else if (tank.hormoneBalance < -100) { + tank.hormoneBalance += 50; + } + if (tank.balls > 0) { + if (tank.balls > 1) { + tank.balls -= 5; + } + if (tank.dick > 1) { + tank.dick -= 5; + } + if (tank.balls <= 0) { + tank.balls = 1; + } + if (tank.dick <= 0) { + tank.dick = 1; + } + } + if (tank.boobs > 0) { + tank.boobs -= 500; + } + if (tank.butt > 0) { + tank.butt -= 4; + } + } + App.Events.addNode(entry, r, "div"); + + if (V.incubatorReproductionSetting === 2) { + tank.energy = 80; + tank.need = 100; + } else if (V.incubatorReproductionSetting === 1) { + tank.energy = 50; + tank.need = 20; + } else { + tank.energy = 0; + tank.need = 0; + } + + r = []; + if (((V.incubatorPregAdaptationSetting === 1 && tank.genes === "XX") || (V.incubatorPregAdaptationSetting === 2 && tank.genes === "XY") || V.incubatorPregAdaptationSetting === 3) && tank.growTime > 0) { + r.push(`The incubator is working on adapting ${his} abdomen and reproductive organs for future pregnancies.`); + + let _weekAdapt = tank.incubatorPregAdaptationInWeek * V.incubatorUpgradeSpeed; + if (isNaN(_weekAdapt)) { + /* NaN check AFTER multiply operation, against it result is critical here. Need to be absolutely sure about this operation, not about just tank property itself. This give me two very unpleasant hours to catch this */ + tank.incubatorPregAdaptationInWeek = (15000 / 2000 - tank.pregAdaptation) / tank.growTime; + } + _weekAdapt = tank.incubatorPregAdaptationInWeek * V.incubatorUpgradeSpeed; + /* Now it should be fine */ + _weekAdapt *= 1 + (V.incubatorReproductionSetting / 5); + _weekAdapt *= 1 + (tank.hormoneBalance / 1500); + tank.pregAdaptation += _weekAdapt; + /* here goes side effect from intense and extreme settings: */ + if (random(0, 100) <= (tank.incubatorPregAdaptationPower - 1) * (V.incubatorUpgradeSpeed / 2 + 1)) { + switch (random(1, 9)) { /* side effect selection*/ + case 1: + tank.preg = -2; + r.push(`It caused <span class="red">reproductive damage</span> when excessive meddling damaged an organ.`); + break; + case 2: + if (tank.ovaries === 1 || tank.mpreg === 1) { + tank.preg = -3; + } + if (tank.balls > 0) { + tank.ballType = "sterile"; + } + r.push(`It caused <span class="red">severe reproductive damage</span> when excessive hormones shut down the associated organs.`); + break; + case 3: + tank.lactation = 1; + r.push(`It has <span class="orange">triggered a hormonal disorder,</span> causing ${his} breast glands begin producing milk.`); + break; + case 4: + tank.bellySag = 100; + tank.bellySagPreg = 100; + r.push(`It activated <span class="red">emergency protocols</span> when overpressure to ${his} abdominal tissues and skin reached critical levels. ${His} belly has lost muscle tone and has begun to strongly sag.`); + break; + case 5: + tank.health.condition -= 15; + r.push(`Overzealous prodding caused some <span class="red">internal bleeding.</span>`); + break; + case 6: + tank.weight += 50; + r.push(`An unexpected shift in hormones spurred <span class="red">massive weight gain</span> before it could be corrected.`); + break; + case 7: + tank.weight -= 50; + r.push(`An unexpected shift in hormones spurred <span class="red">massive weight loss</span> before it could be corrected.`); + break; + case 8: + tank.boobs += 5000; + tank.boobShape = "saggy"; + r.push(`An unexpected shift in hormones encouraged <span class="green">explosive breast growth</span> before it could be corrected.`); + break; + case 9: + tank.hips = 3; + r.push(`A malfunction in the skeletal reconstruction software caused it to <span class="green">overwiden ${his} hips.</span>`); + break; + } + } + } + App.Events.addNode(entry, r, "div"); + + if (tank.preg > 0) { + App.UI.DOM.appendNewElement("span", entry, `The incubator is displaying an alert that ${he} may be pregnant.`, 'red'); + } + + tank.weight = Math.clamp(tank.weight, -100, 200); + tank.muscles = Math.clamp(tank.muscles, -100, 100); + tank.dick = Math.clamp(tank.dick, 0, 10); + tank.hips = Math.clamp(tank.hips, -2, 2); + tank.balls = Math.clamp(tank.balls, 0, 40); + tank.boobs = Math.clamp(tank.boobs, 25, 30000); + tank.height = Math.clamp(tank.height, 0, 274); + tank.hormoneBalance = Math.clamp(tank.hormoneBalance, -500, 500); + tank.foreskin = tank.dick; /* simple, clean way of making sure foreskins and scrotums grow appropriately */ + tank.scrotum = tank.balls; /* if we want dicks/balls to outgrow foreskins/scrotums, this will have to be removed */ + } + + return frag; +}; diff --git a/src/endWeek/masterSuiteReport.js b/src/endWeek/masterSuiteReport.js index e038db401dc6a3150eeec16cd35ced52f24c1e04..4678dac4dbf40f282843373dc9ce6f64c737a5ff 100644 --- a/src/endWeek/masterSuiteReport.js +++ b/src/endWeek/masterSuiteReport.js @@ -426,19 +426,16 @@ App.EndWeek.masterSuiteReport = function() { } if (S.Concubine) { + tired(S.Concubine); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(S.Concubine, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, S.Concubine); slaveEntry.append(App.EndWeek.favoriteIcon(S.Concubine), " "); $(slaveEntry).append(concubineText(), commonText(S.Concubine)); } for (const slave of slaves) { const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(slaveEntry).append(nonConcubineText(slave), commonText(slave)); } diff --git a/src/endWeek/reports/arcadeReport.js b/src/endWeek/reports/arcadeReport.js new file mode 100644 index 0000000000000000000000000000000000000000..10c07796e885162a81ccaec9785ee7b5e2e37199 --- /dev/null +++ b/src/endWeek/reports/arcadeReport.js @@ -0,0 +1,302 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.arcadeReport = function() { + const el = new DocumentFragment(); + let r; + + const arcadeStats = document.createElement("span"); + el.append(arcadeStats); + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.arcade); + const slavesLength = slaves.length; + let cockmilked = 0, milked = 0, milkProfits = 0, profits = 0, boobsImplanted = 0, prostatesImplanted = 0, vasectomiesUndone = 0, mSlave, bSlave, pSlave, cSlave, milkResults, growth; + + // Statistics gathering + V.facility = V.facility || {}; + V.facility.arcade = initFacilityStatistics(V.facility.arcade); + const arcadeNameCaps = capFirstChar(V.arcadeName); + + if (slavesLength > 1) { + App.UI.DOM.appendNewElement("p", el, `There are ${slavesLength} inmates confined in ${V.arcadeName}.`, ["bold", "indent"]); + } else { + App.UI.DOM.appendNewElement("p", el, `There is one inmate confined in ${V.arcadeName}.`, ["bold", "indent"]); + } + r = []; + if (V.arcologies[0].FSDegradationist > 20) { + if (V.arcologies[0].FSDegradationistLaw === 1) { + r.push(`The tenants located near the arcade consider the facility a normal part of their surroundings, including the crowd of menial slaves waiting their turn spills out into the hallway, 24 hours a day.`); + } else { + r.push(`The tenants located near the arcade consider the facility a normal part of their surroundings.`); + } + } else if (V.arcologies[0].FSPaternalist > 20) { + r.push(`The tenants located near the arcade consider it an <span class="red">intolerable</span> establishment.`); + } + App.Events.addNode(el, r, "div", "indent"); + if (V.arcadeDecoration !== "standard") { + App.Events.addNode(el, [`${arcadeNameCaps}'s customers enjoy <span class="green">getting off in ${V.arcadeDecoration} surroundings.</span>`], "p", "indent"); + } + + for (const slave of slaves) { + const {He} = getPronouns(slave); + r = []; + /* for the included passages */ + + /* Perform facility based rule changes */ + slave.clothes = "no clothing"; + /* Health */ + if (V.arcadeUpgradeHealth === 2 && slave.health.condition < 40) { + improveCondition(slave, 2); + } else if (slave.health.condition > 20) { + healthDamage(slave, 5); + } else if (V.arcadeUpgradeHealth === 1 && slave.health.condition < -30) { + improveCondition(slave, 2); + } else if (slave.health.condition > -50) { + healthDamage(slave, 3); + } else if (slave.health.condition > -90) { + healthDamage(slave, 1); + } + /* Curatives */ + if (V.arcadeUpgradeHealth === 2) { + slave.curatives = 2; + } else if (V.arcadeUpgradeHealth === 1) { + slave.curatives = 1; + } + /* Stimulation or lack thereof trust/devotion effect */ + if (V.arcadeUpgradeInjectors > 0) { + if (V.arcadeUpgradeInjectors === 2) { + slave.aphrodisiacs = 2; + } + slave.devotion -= 5; + slave.trust -= 10; + } else { + slave.trust -= 5; + } + /* Muscles */ + if (slave.muscles > -100) { + slave.muscles--; + } + + if (V.showEWD !== 0) { + const {He} = getPronouns(slave); + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); + 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 confined in ${V.arcadeName}.`); + } + App.Events.addNode(slaveEntry, r, "div"); + + App.Events.addNode( + slaveEntry, + [ + He, + App.SlaveAssignment.workAGloryHole(slave), + ], + "div", + "indented" + ); + } else { + // discard return values silently + App.SlaveAssignment.choosesOwnJob(slave); + App.SlaveAssignment.workAGloryHole(slave); + } + + if (V.arcadeUpgradeCollectors > 0) { + if (slave.vasectomy === 1) { + slave.vasectomy = 0; + vasectomiesUndone++; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); + } else if (slave.lactation < 2) { + slave.lactation = 2; + boobsImplanted++; + bSlave = slave; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); + } else if (slave.prostate === 1) { + slave.prostate = 2; + prostatesImplanted++; + pSlave = slave; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + surgeryDamage(slave, 10); + } else if (slave.lactation > 0 || slave.balls > 0) { + milkResults = App.SlaveAssignment.getMilked(slave, 1.0); + if (V.showEWD !== 0) { + r.push(App.UI.DOM.makeElement("div", `${He} ${milkResults.text}`, "indent")); + } + milkProfits += milkResults.cash; + growth = 0; + const gigantomastiaMod = slave.geneticQuirks.gigantomastia === 2 ? (slave.geneticQuirks.macromastia === 2 ? 3 : 2) : 1; + if (slave.boobs < 2000) { + growth = 100; + } else if (slave.boobs < 5000 * gigantomastiaMod) { + growth = 50; + } else if (slave.boobs < 10000 * gigantomastiaMod) { + growth = 25; + } + if (slave.geneMods.NCS === 1) { + /* + ** NCS will allow some growth for Arcade milking, but not as much as the Dairy. + */ + growth = Math.trunc(growth / 3.5); + } + slave.boobs += growth; + if ( + (slave.balls > 0) && + (slave.balls < 10) && + (random(1, 100) > (40 + (10 * (slave.balls + (2 * slave.geneMods.NCS))))) + ) { + slave.balls++; + } + if ( + (slave.dick > 0) && + (slave.dick < 10) && + (random(1, 100) > (40 + (10 * slave.dick + (2 * slave.geneMods.NCS)))) + ) { + slave.dick++; + } + if (slave.lactation > 0) { + milked++; + mSlave = slave; + } + if (slave.balls > 0) { + cockmilked++; + cSlave = slave; + } + } + } + if (slave.inflation > 0) { + deflate(slave); + } + App.Events.addNode(el, r, "div", "indent"); + if (V.showEWD !== 0) { + el.append(App.SlaveAssignment.standardSlaveReport(slave, false)); + } else { + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + if (slavesLength + V.fuckdolls > 0) { + r = []; + if (milked === 1) { + const {his} = getPronouns(mSlave); + r.push(`One of them is lactating and spends ${his} time in ${V.arcadeName} being simultaneously milked and fucked.`); + } else if (milked > 1) { + r.push(`${capFirstChar(num(milked))} of them are lactating and spend their time in ${V.arcadeName} being simultaneously milked and fucked.`); + } + + if (vasectomiesUndone) { + if (vasectomiesUndone === 1) { + r.push(`One`); + } else { + r.push(capFirstChar(num(vasectomiesUndone))); + } + r.push(`of them had severed vas deferens, so they were reattached to allow sperm through, costing <span class="red">${cashFormat(V.surgeryCost * vasectomiesUndone)}.</span>`); + } + if (boobsImplanted) { + if (boobsImplanted === 1) { + const {he} = getPronouns(bSlave); + r.push(`One of them was not lactating, so ${he} was`); + } else { + r.push(`${capFirstChar(num(boobsImplanted))} of them were not lactating, so they were`); + } + r.push(`implanted with long-acting lactation inducing drugs, costing <span class="red">${cashFormat(V.surgeryCost * boobsImplanted)}.</span>`); + } + if (prostatesImplanted) { + if (prostatesImplanted === 1) { + const {he} = getPronouns(pSlave); + r.push(`One of them was not producing the maximum possible amount of precum, so ${he} was`); + } else { + r.push(`${capFirstChar(num(prostatesImplanted))} of them were not producing the maximum possible amount of precum, so they were`); + } + r.push(`implanted with long-acting prostate stimulation drugs, costing <span class="red">${cashFormat(V.surgeryCost * prostatesImplanted)}.</span>`); + } + if (cockmilked === 1) { + const {he} = getPronouns(cSlave); + r.push(`One of them retains testicles and is brutally cockmilked as ${he} is used.`); + } else if (cockmilked > 1) { + r.push(`${capFirstChar(num(cockmilked))} of them retain testicles and are brutally cockmilked as they are used.`); + } + + r.push(`The arcade makes you`); + if (V.policies.publicFuckdolls === 0) { + r.push(`<span class="yellowgreen">${cashFormat(profits)}</span> from selling the inmates' holes`); + } else { + r.push(`<span class="green">more reputable</span> from freely providing the inmates' holes`); + } + if (V.arcadeUpgradeCollectors > 0 && V.policies.publicFuckdolls === 0) { + r.push(`and`); + } + if (V.arcadeUpgradeCollectors > 0) { + r.push(`<span class="yellowgreen">${cashFormat(milkProfits)}</span> from selling the fluids they produced`); + } + r.push(`this week.`); + if (V.arcologies[0].FSPaternalist > 20) { + repX(forceNeg(Math.trunc(profits / 20)), "arcade"); + } + App.Events.addNode(el, r, "div", "indent"); + } + + if (V.arcadeUpgradeFuckdolls > 1) { + const fuckdolls = slaves.filter(s => fuckdollQualifier(s)); + if (fuckdolls.length > 0) { + // ascending sort by sexAmount...least popular slaves are converted first + fuckdolls.sort((a, b) => b.sexAmount - a.sexAmount); + for (const fuckdoll of fuckdolls) { + const {he} = getPronouns(fuckdoll); + App.UI.DOM.appendNewElement("div", el, `${fuckdoll.slaveName} is low-quality merchandise, so ${he} has been converted into a Fuckdoll.`, "indent"); + removeSlave(fuckdoll); + V.fuckdolls++; + if (V.arcadeUpgradeFuckdolls === 2) { + break; // convert at most one per week on this setting + } + } + } else { + App.UI.DOM.appendNewElement("div", el, `No slaves have failed quality inspection for Fuckdoll conversion. ${arcadeNameCaps} will remain overcrowded this week.`, "indent"); + } + } + + if (slavesLength > 0) { + // Record statistics gathering + let b = V.facility.arcade; + b.whoreIncome = 0; + b.customers = 0; + b.whoreCosts = 0; + b.rep = 0; + for (let si of b.income.values()) { + b.whoreIncome += si.income; + b.customers += si.customers; + b.whoreCosts += si.cost; + b.rep += si.rep; + } + b.maintenance = V.arcade * V.facilityCost * (0.05 + 0.02 * V.arcadeUpgradeInjectors + 0.05 * V.arcadeUpgradeCollectors); + b.totalIncome = b.whoreIncome; + b.totalExpenses = b.whoreCosts + b.maintenance; + b.profit = b.totalIncome - b.totalExpenses; + + + // Arcade stats + el.append(App.Facilities.Arcade.Stats(false)); + arcadeStats.append(App.Facilities.Arcade.Stats(true)); + } + return el; + + /** + * + * @param {App.Entity.SlaveState} slave + */ + function fuckdollQualifier(slave) { + if (slave.sentence === 0 && slave.fuckdoll === 0 && slave.fetish === "mindbroken") { + if (slave.physicalAge > 35) { + return true; + } else if (slave.vagina >= 4 || slave.anus >= 4) { + return true; + } + } + } +}; diff --git a/src/endWeek/reports/cellblockReport.js b/src/endWeek/reports/cellblockReport.js new file mode 100644 index 0000000000000000000000000000000000000000..9ca2d1e6c1f39b92e1a19957e8f83796f8641e9f --- /dev/null +++ b/src/endWeek/reports/cellblockReport.js @@ -0,0 +1,342 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.cellblockReport = function() { + const el = new DocumentFragment(); + let r; + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.cellblock); + let brokenSlaves = 0, idleBonus = 0, softenedQuirks = 0, trustMalus = 0, FLsFetish = 0; + let devBonus = (V.cellblockDecoration !== "standard") ? 1 : 0; + + const cellblockNameCaps = capFirstChar(V.cellblockName); + V.flSex = App.EndWeek.getFLSex(App.Entity.facilities.cellblock);/* FIXME: should be local, passed as a parameter to saRules */ + + if (S.Wardeness) { + const { + He, His, + he, his, him, wife + } = getPronouns(S.Wardeness); + r = []; + + if (S.Wardeness.health.condition < -80) { + improveCondition(S.Wardeness, 20); + } else if (S.Wardeness.health.condition < -40) { + improveCondition(S.Wardeness, 15); + } else if (S.Wardeness.health.condition < 0) { + improveCondition(S.Wardeness, 10); + } else if (S.Wardeness.health.condition < 90) { + improveCondition(S.Wardeness, 7); + } + if (S.Wardeness.devotion <= 60) { + S.Wardeness.devotion += 2; + } + S.Wardeness.devotion += devBonus; + if (S.Wardeness.trust < 60) { + S.Wardeness.trust += 3; + } + if (S.Wardeness.rules.living !== "luxurious") { + S.Wardeness.rules.living = "luxurious"; + } + if (S.Wardeness.rules.rest !== "restrictive") { + S.Wardeness.rules.rest = "restrictive"; + } + if (S.Wardeness.fetishStrength <= 95) { + if (S.Wardeness.fetish !== "sadist") { + if (fetishChangeChance(S.Wardeness) > random(0, 100)) { + FLsFetish = 1; + S.Wardeness.fetishKnown = 1; + S.Wardeness.fetish = "sadist"; + } + } else if (S.Wardeness.fetishKnown === 0) { + FLsFetish = 1; + S.Wardeness.fetishKnown = 1; + } else { + FLsFetish = 2; + S.Wardeness.fetishStrength += 4; + } + } + if (S.Wardeness.energy > 95 || S.Wardeness.fetish === "sadist") { + devBonus++; + trustMalus++; + idleBonus++; + } + r.push(`${SlaveFullName(S.Wardeness)} is serving as the Wardeness.`); + if (S.Wardeness.relationship === -3 && S.Wardeness.devotion > 50) { + devBonus++; + trustMalus++; + idleBonus++; + r.push(`As your ${wife}, ${he} tries ${his} best to break the disobedient slaves to your will.`); + } + if (FLsFetish === 1) { + r.push(`One day ${he} demands obedience. The next day ${he} strikes a slave when it isn't given. The next, ${he} seems more excited than embarrassed when beating a prisoner. Soon, ${he}'s looking for an excuse to punish. ${He}'s <span class="pink">become more of a sadist.</span>`); + } else if (FLsFetish === 2) { + r.push(`Being not only allowed but encouraged to get off while punishing prisoners <span class="lightsalmon">deepens ${his} sadism.</span>`); + } + if (setup.wardenessCareers.includes(S.Wardeness.career)) { + devBonus++; + trustMalus++; + idleBonus++; + r.push(`${He} has experience with detecting security issues and grinding down potential miscreants from ${his} life before ${he} was a slave, making ${him} more effective.`); + } else if (S.Wardeness.skill.wardeness >= V.masteredXP) { + devBonus++; + trustMalus++; + idleBonus++; + r.push(`${He} has experience with detecting security issues and grinding down potential miscreants from working for you, making ${him} more effective.`); + } else { + S.Wardeness.skill.wardeness += random(1, Math.ceil((S.Wardeness.intelligence + S.Wardeness.intelligenceImplant) / 15) + 8); + } + if (S.Wardeness.fetish === "sadist") { + r.push(`${He} uses the prisoners to gratify ${his} sadism, terrifying them and quickly breaking their resistance.`); + } else if (S.Wardeness.energy > 95) { + r.push(`${He} is so sexually depraved that ${he} constantly molests the prisoners, breaking them to a life of servitude.`); + } + if (S.Wardeness.sexualFlaw === "malicious" || S.Wardeness.sexualFlaw === "abusive") { + devBonus++; + trustMalus += 2; + idleBonus += 2; + r.push(`Sexual abuse of prisoners has become an end for ${him}, not a means. ${He} inspires ${his} prisoners to do everything possible to qualify to get away from ${him}, even as ${he} slowly grinds away their interest in sex to do it.`); + } else if (S.Wardeness.sexualQuirk === "caring") { + devBonus--; + trustMalus--; + idleBonus--; + r.push(`${His} kindness sometimes shows through ${his} tough facade, letting prisoners get off easier than they should.`); + } + if (S.Wardeness.dick > 2 && canPenetrate(S.Wardeness)) { + devBonus++; + trustMalus++; + idleBonus++; + r.push(`${His} molestation of the prisoners is more varied and effective because ${he} has a dick to fuck them with.`); + } + if (S.Wardeness.muscles > 35) { + devBonus++; + trustMalus++; + idleBonus++; + r.push(`${He} is strong enough to restrain anyone that tries anything with ${his} own hands.`); + } + if (S.Wardeness.devotion > 95) { + devBonus++; + trustMalus++; + idleBonus++; + r.push(`${His} devotion to you is so absolute that ${he} sees breaking bitches for your service as a noble calling.`); + } + App.Events.addNode(el, r, "div", "indent"); + for (const slave of slaves) { + r = []; + if (S.Wardeness.rivalryTarget === slave.ID) { + r.push(`${He} greatly enjoys breaking ${his} ${rivalryTerm(S.Wardeness)}, ${slave.slaveName}'s will.`); + slave.devotion++; + slave.trust -= 3; + if (random(1, 100) > 30) { + S.Wardeness.rivalry++; + slave.rivalry++; + } + } else if (S.Wardeness.relationshipTarget === slave.ID) { + r.push(`${He} hates having to break ${his} ${relationshipTerm(S.Wardeness)}, ${slave.slaveName}, but ${his} devotion to you wins out in the end.`); + slave.devotion++; + slave.trust -= 3; + if (random(1, 100) >= 50) { + r.push(`${His} and ${slave.slaveName}'s relationship has been shattered by these events.`); + S.Wardeness.relationship = 0; + S.Wardeness.relationshipTarget = 0; + slave.relationship = 0; + slave.relationshipTarget = 0; + } + } else if (areRelated(S.Wardeness, slave)) { + const {he2, his2} = getPronouns(slave).appendSuffix("2"); + r.push(`${He} shows ${his} ${relativeTerm(S.Wardeness, slave)} ${slave.slaveName} no mercy, making sure ${he2} understands ${his2} place.`); + slave.devotion++; + slave.trust--; + } + App.Events.addNode(el, r, "div", "indent"); + } + if (slaves.length < V.cellblock && !slaveResting(S.Wardeness)) { + const seed = random(1, 10) + ((V.cellblock - slaves.length) * (random(150, 170) + (idleBonus * 10))); + cashX(seed, "cellblock", S.Wardeness); + App.Events.addNode(el, [`Since ${he} doesn't have enough prisoners to manage to keep ${him} busy, ${he} works on citizens' slaves, earning <span class="yellowgreen"> ${cashFormat(seed)}.</span>`], "div", "indent"); + } + } + + if (slaves.length > 0) { + if (slaves.length === 1) { + App.UI.DOM.appendNewElement("div", el, `One slave is being confined in ${V.cellblockName} until they are willing to obey.`, "indent"); + } else { + App.UI.DOM.appendNewElement("div", el, `${slaves.length} slaves are being confined in ${V.cellblockName} until they are willing to obey.`, "indent"); + } + } + + + if (S.Wardeness) { + const slave = S.Wardeness; + tired(slave); + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const wardenessEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + App.SlaveAssignment.appendSlaveArt(wardenessEntry, slave); + wardenessEntry.append(App.EndWeek.favoriteIcon(slave), " "); + App.Events.addNode( + wardenessEntry, + [ + App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name"), + `is serving as the Wardeness in ${V.cellblockName}`, + App.SlaveAssignment.standardSlaveReport(slave, false), + ] + ); + } else { + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + + for (const slave of slaves) { + const {He} = getPronouns(slave); + if (slave.devotion <= 20) { + if (slave.trust >= -20) { + if ( + (slave.hears === -1 && slave.earwear !== "hearing aids") || + (slave.hears === 0 && slave.earwear === "muffling ear plugs") || + (slave.hears === -2) + ) { + slave.devotion -= 2; + slave.trust -= 2; + } else { + slave.devotion -= 4; + slave.trust -= 4; + } + } else { + slave.devotion++; + } + } + switch (V.cellblockDecoration) { + case "Paternalist": + slave.rules.living = "normal"; + if (slave.inflation > 0) { + deflate(slave); + } + break; + case "Pastoralist": + slave.rules.living = "spare"; + if (slave.inflation === 0) { + if (slave.pregKnown === 0 && slave.bellyImplant < 1500) { + slave.inflation = 2; + slave.inflationType = "milk"; + slave.inflationMethod = 1; + } else { + slave.inflation = 1; + slave.inflationType = "milk"; + slave.inflationMethod = 1; + } + SetBellySize(slave); + } + break; + case "Hedonistic": + slave.rules.living = "spare"; + if (slave.weight < 200) { + if (slave.weightDirection === 1) { + slave.weight += 5; + } else if (slave.weightDirection === -1) { + slave.weight += 1; + } else { + slave.weight += 3; + } + } + if (slave.muscles > -100) { + slave.muscles -= 2; + } + if (slave.inflation === 0) { + if (slave.pregKnown === 0 && slave.bellyImplant < 1500) { + slave.inflation = 3; + slave.inflationType = "food"; + slave.inflationMethod = 1; + } else { + slave.inflation = 1; + slave.inflationType = "food"; + slave.inflationMethod = 1; + } + SetBellySize(slave); + } + break; + default: + slave.rules.living = "spare"; + if (slave.inflation > 0) { + deflate(slave); + } + } + if (V.cellblockUpgrade === 1) { + if (slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") { + SoftenBehavioralFlaw(slave); + slave.devotion -= 10; + softenedQuirks++; + } else if (slave.sexualFlaw !== "none" && slave.sexualQuirk === "none") { + SoftenSexualFlaw(slave); + slave.devotion -= 10; + softenedQuirks++; + } + } + slave.devotion += devBonus; + slave.trust -= trustMalus; + if (S.Wardeness && S.Wardeness.sexualFlaw === "malicious" && slave.energy >= 2) { + slave.energy -= 2; + } + 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 < 40) { + improveCondition(slave, 7); + } else if (slave.health.condition < 100) { + improveCondition(slave, 3); + } + + if (V.showEWD !== 0) { + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); + 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 confined in ${V.cellblockName}.`); + } + App.Events.addNode(slaveEntry, r, "div"); + + r = []; + r.push(He); + r.push(App.SlaveAssignment.stayConfined(slave)); + 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.stayConfined(slave); + App.SlaveAssignment.standardSlaveReport(slave, true); + } + } + if (softenedQuirks || brokenSlaves) { + r = []; + if (softenedQuirks > 0) { + r.push(`${cellblockNameCaps}'s advanced compliance systems successfully softened`); + if (softenedQuirks === 1) { + r.push(`one slave's mental flaw into an <span class="green">appealing quirk,</span> though the constant correction caused them <span class="mediumorchid">considerable anguish.</span>`); + } else { + r.push(`${softenedQuirks} slaves' mental flaws into <span class="green">appealing quirks,</span> though the constant correction caused them <span class="mediumorchid">considerable anguish.</span>`); + } + } + if (brokenSlaves > 0) { + if (brokenSlaves === 1) { + r.push(`One slave is now willing to <span class="hotpink">do as they're told</span> and has been released.`); + } else { + r.push(`${brokenSlaves} slaves are now willing to <span class="hotpink">do as they're told</span> and have been released.`); + } + if (V.cellblockDecoration !== "standard") { + App.Events.addNode(el, r, "p", "indent"); + r = []; + r.push(`${cellblockNameCaps}'s ${V.cellblockDecoration} atmosphere <span class="hotpink">had an impact on them while they were</span> imprisoned.`); + } + } + App.Events.addNode(el, r, "p", "indent"); + } + return el; +}; diff --git a/src/endWeek/reports/clubReport.js b/src/endWeek/reports/clubReport.js new file mode 100644 index 0000000000000000000000000000000000000000..43fc5b9da180c6d17bb599b76ede4c7301ad8cc5 --- /dev/null +++ b/src/endWeek/reports/clubReport.js @@ -0,0 +1,262 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.clubReport = function() { + const el = new DocumentFragment(); + let r; + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.club); + V.legendaryEntertainerID = 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) { + let FLsFetish = 0; + 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); + const { + he, him, his, He, His, wife, himself + } = 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 (slaves.length + 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 (slaves.length > 0) { + r = []; + if (slaves.length !== 1) { + r.push(App.UI.DOM.makeElement("span", `The ${slaves.length} 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; + tired(slave); + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const DJEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + App.SlaveAssignment.appendSlaveArt(DJEntry, slave); + 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 (slaves.length > 0) { + for (const slave of slaves) { + 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"); + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); + 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"); + + const {He} = getPronouns(slave); + 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 = V.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 = V.clubAdsSpending; + b.maintenance = V.club * V.facilityCost * (1.0 + 0.2 * V.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 index 287f4673081f62ddd3f374ef8abaed2d12e63c05..bf6bd68443716c2182612854efeb733ec0300ecc 100644 --- a/src/endWeek/reports/dairyReport.js +++ b/src/endWeek/reports/dairyReport.js @@ -8,8 +8,8 @@ App.EndWeek.dairyReport = function() { let MMWorkout = 0; const BF = App.Data.misc.bioreactorFluids; const slaves = App.Utils.sortedEmployees(App.Entity.facilities.dairy); - let DL = slaves.length; - let 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; + 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; @@ -23,9 +23,6 @@ App.EndWeek.dairyReport = function() { V.milkmaidTrustBonus = 1; V.milkmaidDevotionThreshold = 45; V.milkmaidTrustThreshold = 35; - let He, His, he, his, him, wife, girl; - let he2, his2; - let milkResults; let growth; let cashValue; let outputMilk; @@ -42,70 +39,95 @@ App.EndWeek.dairyReport = function() { r = []; let milkmaidImpregnated = 0, milkers = 0, cummers = 0, breeders = 0, prostateStim = 0; - if (DL > 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); + 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 */ - let workoutEffect = 1; - if (slave.devotion <= 20) { - MMWorkout += workoutEffect; + } + /* 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.trust < 20) { - MMWorkout += workoutEffect; + if (slave.boobs >= 20000) { + MMWorkout += 2; } - if (slave.muscles >= 30 || slave.muscles < -30) { - MMWorkout += workoutEffect; + if (slave.balls >= 30) { + MMWorkout += 2; } - if (!canMove(slave)) { // big bonus if they can't move themselves and are fat as cows - workoutEffect += 2; - } else if (!canWalk(slave)) { // smaller bonus if they are fat as cows and need assistance with moving - workoutEffect += 1; + 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 += workoutEffect; + MMWorkout += 1; } if (slave.weight >= 160) { - MMWorkout += workoutEffect; + MMWorkout += 1; } if (slave.boobs >= 20000) { - MMWorkout += workoutEffect; + MMWorkout += 1; } if (slave.balls >= 30) { - MMWorkout += workoutEffect; + MMWorkout += 1; } if (slave.belly >= 5000) { - MMWorkout += workoutEffect; + 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 (V.dairyStimulatorsSetting < 2 && S.Milkmaid.dick > 4 && canPenetrate(S.Milkmaid) && prostateStim !== 1) { + if (slave.balls > 0 && slave.prostate > 0) { + prostateStim = 1; } } } @@ -182,9 +204,9 @@ App.EndWeek.dairyReport = function() { } } getSlaveStatisticData(S.Milkmaid, V.facility.dairy); - ({ + const { he, him, his, He, His, wife, girl - } = getPronouns(S.Milkmaid)); + } = 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; @@ -268,9 +290,7 @@ App.EndWeek.dairyReport = function() { V.milkmaidTrustThreshold += (5 * V.milkmaidTrustBonus); for (const slave of slaves) { if (S.Milkmaid.rivalryTarget === slave.ID) { - ({ - he2, his2 - } = getPronouns(slave).appendSuffix("2")); + 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; @@ -279,16 +299,12 @@ App.EndWeek.dairyReport = function() { slave.rivalry++; } } else if (S.Milkmaid.relationshipTarget === slave.ID) { - ({ - he2, his2 - } = getPronouns(slave).appendSuffix("2")); + 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)) { - ({ - he2, his2 - } = getPronouns(slave).appendSuffix("2")); + 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++; } @@ -298,7 +314,7 @@ App.EndWeek.dairyReport = function() { 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`}.`); + 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.") { @@ -318,9 +334,7 @@ App.EndWeek.dairyReport = function() { } } if (slave.prestigeDesc === "$He is remembered for winning best in show as a breeder." && slave.bellyPreg >= 1500) { - ({ - he2, his2 - } = getPronouns(slave).appendSuffix("2")); + 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; @@ -351,9 +365,7 @@ App.EndWeek.dairyReport = function() { /* 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"]); - } + App.SlaveAssignment.appendSlaveArt(milkMaidEntry, slave); milkMaidEntry.append(App.EndWeek.favoriteIcon(slave), " "); App.Events.addNode( milkMaidEntry, @@ -370,9 +382,6 @@ App.EndWeek.dairyReport = function() { const oldCash = V.cash; for (const slave of slaves) { - ({ - he, him, his, He, His, wife, girl - } = getPronouns(slave)); /* Special attention section */ if (slave.devotion > 50 && slave.prestige === 0) { if ( @@ -474,11 +483,12 @@ App.EndWeek.dairyReport = function() { } /* 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"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); r = []; r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); @@ -488,8 +498,8 @@ App.EndWeek.dairyReport = function() { r.push(`is serving as a cow in ${V.dairyName}.`); } App.Events.addNode(slaveEntry, r, "div"); - milkResults = App.SlaveAssignment.getMilked(slave); + const {He} = getPronouns(slave); App.Events.addNode( slaveEntry, [ @@ -503,11 +513,8 @@ App.EndWeek.dairyReport = function() { } else { // discard return values silently App.SlaveAssignment.choosesOwnJob(slave); - milkResults = App.SlaveAssignment.getMilked(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } - milkWeek += milkResults.milk; - cumWeek += milkResults.cum; /* Facility Specific End of Week effects */ if (slave.devotion <= 20 && slave.trust >= -20) { @@ -1126,7 +1133,7 @@ App.EndWeek.dairyReport = function() { cashX(forceNeg(Math.trunc((300 * (inflatedSlaves.cum + 8)) + random(25, 100))), "slaveAssignmentDairy"); } - profits = V.cash - oldCash; + const profits = V.cash - oldCash; r = []; if (chemSevere > 1) { @@ -1138,42 +1145,42 @@ App.EndWeek.dairyReport = function() { 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) { - ({he, his} = getPronouns(cmSlave)); + 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) { - ({he, his} = getPronouns(dsSlave)); + 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) { - ({he} = getPronouns(hfSlave)); + 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) { - ({he} = getPronouns(hrSlave)); + 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) { - ({his} = getPronouns(slSlave)); + 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) { - ({he, his} = getPronouns(cfSlave)); + const {he, his} = getPronouns(cfSlave); r.push(`One cow forgot the details of ${his} past professional life; all ${he} can remember now is this.`); } @@ -1198,7 +1205,7 @@ App.EndWeek.dairyReport = function() { 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) { - ({he} = getPronouns(stSlave)); + 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.`); } @@ -1217,7 +1224,7 @@ App.EndWeek.dairyReport = function() { 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) { - ({him} = getPronouns(btSlave)); + 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.`); } @@ -1263,19 +1270,6 @@ App.EndWeek.dairyReport = function() { if (femCumWeek > 0) { r.push(`The machines also managed to reclaim ${commaNum(femCumWeek)} liters of salable vaginal secretions.`); } - if (births > 1) { - r.push(`Additionally, ${birthers} cows gave birth`); - if (births > birthers) { - r.push(`to a total of ${births} calves`); - } - r.push(`this week.`); - } else if (births > 0) { - r.push(`Additionally, one cow gave birth`); - if (births > birthers) { - r.push(`to a total of ${births} calves`); - } - r.push(`this week.`); - } if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { if (V.dairyPregSetting > 0) { @@ -1298,13 +1292,13 @@ App.EndWeek.dairyReport = function() { b.whoreCosts += si.cost; b.rep += si.rep; } - b.maintenance = (State.variables.bioreactorsXY + State.variables.bioreactorsXX + State.variables.bioreactorsHerm + State.variables.bioreactorsBarren); + b.maintenance = (V.bioreactorsXY + V.bioreactorsXX + V.bioreactorsHerm + V.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.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; @@ -1368,9 +1362,7 @@ App.EndWeek.dairyReport = function() { gender = "XY"; } } - ({ - he, him, his, He, His, wife, girl - } = getPronouns(bioreactor)); + const {he, He} = getPronouns(bioreactor); const ageInWeeks = 52 * (V.retirementAge - bioreactor.physicalAge); r = []; r.push(`${SlaveFullName(bioreactor)}'s breasts,`); diff --git a/src/endWeek/reports/nurseryReport.js b/src/endWeek/reports/nurseryReport.js index 13d315fe65c1d9ec2e980f3b7ec9c2e782fc4410..aee524cb6f5b6968fc9f335f504a03ed4c6e5365 100644 --- a/src/endWeek/reports/nurseryReport.js +++ b/src/endWeek/reports/nurseryReport.js @@ -135,19 +135,14 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { } if (S.Matron) { - /** @type {App.Entity.SlaveState} */ const slave = S.Matron; if (V.showEWD !== 0) { const matronEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", matronEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } - + App.SlaveAssignment.appendSlaveArt(matronEntry, slave); matronEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(matronEntry).append(`<span class="slave-name">${SlaveFullName(slave)}</span> is serving as your Matron.`); - $(matronEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + matronEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { App.SlaveAssignment.standardSlaveReport(slave, true); } @@ -200,11 +195,7 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { if (V.showEWD) { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } - + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(slaveEntry).append(`<span class="slave-name">${SlaveFullName(slave)}</span> `); @@ -218,7 +209,7 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { $(nannyContent).append(`${He} ${App.SlaveAssignment.nanny(slave, matronBonus)}`); // FIXME: nanny() takes one argument - $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { // silently discard return values App.SlaveAssignment.nanny(slave, matronBonus); // FIXME: nanny() takes one argument App.SlaveAssignment.standardSlaveReport(slave, true); diff --git a/src/endWeek/reports/penthouseReport.js b/src/endWeek/reports/penthouseReport.js new file mode 100644 index 0000000000000000000000000000000000000000..4fe45ac6892c36bd6d571bc595ddad5758b5b1ef --- /dev/null +++ b/src/endWeek/reports/penthouseReport.js @@ -0,0 +1,702 @@ +App.EndWeek.penthouseReport = function() { + const el = document.createElement("p"); + + const HGSuiteSlaves = App.Utils.jobForAssignment(Job.HEADGIRLSUITE).employees(); + const hgSlave = HGSuiteSlaves.length > 0 ? HGSuiteSlaves[0] : null; + const HGTrainSlavesIDs = slavesToTrain(); + + // penthouse images are larger and on the right (for some reason), so we need to initialize a second batch renderer instead of using the global SA Report one + let penthouseArtRenderer = null; + if (V.seeImages && V.seeReportImages) { + const penthouseArtSlaveIDs = V.slaves.filter(s => assignmentVisible(s)).map(s => s.ID); + if (hgSlave) { + penthouseArtSlaveIDs.push(hgSlave.ID); + } + penthouseArtRenderer = new App.Art.SlaveArtBatch(penthouseArtSlaveIDs, 2); + el.append(penthouseArtRenderer.writePreamble()); + } + + for (const slave of V.slaves) { + if (assignmentVisible(slave)) { + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + if (penthouseArtRenderer) { + App.UI.DOM.appendNewElement("div", slaveEntry, penthouseArtRenderer.render(slave), ["imageRef", "medImg"]); + } + slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); + slaveEntry.append(fullReport(slave)); + + if (slave.ID === V.HeadGirlID && hgSlave) { + /* Output the HG's slave immediately after the hg */ + const {He2, he2} = getPronouns(hgSlave).appendSuffix("2"); + const r = []; + if (hgSlave.assignment !== Job.HEADGIRLSUITE) { + r.push(`<span class="red">${hgSlave.slaveName} had been assigned to live with your Head Girl, but this week ${he2} was assigned to ${hgSlave.assignment}. ${He2} has been released to your penthouse for reassignment.</span>`); + removeJob(hgSlave, Job.HEADGIRLSUITE); + } else { + r.push(App.UI.DOM.makeElement("span", SlaveFullName(hgSlave), "slave-name")); + if (hgSlave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(hgSlave)); + r.push(He2); + } + if (penthouseArtRenderer) { + r.push(App.UI.DOM.makeElement("div", penthouseArtRenderer.render(hgSlave), ["imageRef", "medImg"])); + } + r.push(App.SlaveAssignment.liveWithHG(hgSlave)); + } + App.Events.addNode(el, r, "div", "slave-report"); + } + } + } + + /* count open spots in facilities after all assignments have been decided for the week */ + V.brothelSpots = App.Entity.facilities.brothel.freeSpace; + V.clubSpots = App.Entity.facilities.club.freeSpace; + V.dairySpots = App.Entity.facilities.dairy.freeSpace; + V.servantsQuartersSpots = App.Entity.facilities.servantsQuarters.freeSpace; + + return el; + + /** + * @param {App.Entity.SlaveState} slave + */ + function fullReport(slave) { + const el = new DocumentFragment(); + const { + He, His, + he, him + } = getPronouns(slave); + let r = []; + let milkResults; + + r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); + if (slave.choosesOwnAssignment === 2) { + r.push(App.SlaveAssignment.choosesOwnJob(slave)); + r.push(He); + } + + switch (slave.assignment) { + case "rest": + r.push(App.SlaveAssignment.rest(slave)); + break; + case "whore": + r.push(App.SlaveAssignment.whore(slave)); + break; + case "serve the public": + r.push(App.SlaveAssignment.serveThePublic(slave)); + break; + case "work a glory hole": + r.push(App.SlaveAssignment.workAGloryHole(slave)); + break; + case "get milked": + milkResults = App.SlaveAssignment.getMilked(slave); + r.push(milkResults.text); + break; + case "take classes": + r.push(App.SlaveAssignment.takeClasses(slave)); + break; + case "please you": + r.push(App.SlaveAssignment.pleaseYou(slave)); + break; + case "be a subordinate slave": + r.push(App.SlaveAssignment.serveYourOtherSlaves(slave)); + break; + case "be a servant": + r.push(App.SlaveAssignment.servant(slave)); + break; + case "stay confined": + r.push(App.SlaveAssignment.stayConfined(slave)); + break; + case "guard you": + r.push(App.SlaveAssignment.guardYou(slave)); + break; + case "be your Head Girl": + r.push(App.SlaveAssignment.beYourHeadGirl(slave)); + break; + case "recruit girls": + r.push(App.SlaveAssignment.recruitGirls(slave)); + break; + default: + removeJob(slave, slave.assignment); + r.push(App.SlaveAssignment.rest(slave)); + } + + if (V.servantMilkers === 1 && slave.lactation > 0 && slave.assignment !== "get milked") { + r.push(`${His} assignment`); + if (App.Data.misc.servantMilkersJobs.includes(slave.assignment)) { + r.push(`is not strenuous, so ${he}`); + if (slave.devotion > 20) { + if (slave.fetish === "boobs") { + r.push(`eagerly`); + } + r.push(`uses`); + } else if (slave.devotion >= -20) { + r.push(`is required to use`); + } else { + r.push(`is forced to use`); + } + r.push(`the penthouse milkers frequently,`); + milkResults = App.SlaveAssignment.getMilked(slave, 0.5); + } else { + r.push(`keeps ${him} busy, but ${he}`); + if (slave.devotion > 20) { + if (slave.fetish === "boobs") { + r.push(`eagerly`); + } + r.push(`uses`); + } else if (slave.devotion >= -20) { + r.push(`is required to use`); + } else { + r.push(`is forced to use`); + } + r.push(`the penthouse milkers whenever ${he} can,`); + milkResults = App.SlaveAssignment.getMilked(slave, 0.25); + } + r.push(`and ${he} gives ${milkResults.milk} liters of milk over the week, which is sold for <span class="yellowgreen">${cashFormat(milkResults.milkSale)}.</span>`); + } + + App.Events.addNode(el, r, "div"); + + if (V.showEWD !== 0) { + r = []; + if (slave.minorInjury !== 0) { + r.push(`${His} ${slave.minorInjury} will heal by the end of the week.`); + } + r.push(App.SlaveAssignment.choosesOwnClothes(slave)); + r.push(...App.SlaveAssignment.individualSlaveReport(slave)); + App.Events.addNode(el, r, "div", "indent"); + } else { + // discard return values silently + App.SlaveAssignment.choosesOwnClothes(slave); + App.SlaveAssignment.individualSlaveReport(slave); + } + + r = []; + if (V.PC.health.shortDamage < 30 && Array.isArray(V.personalAttention) && V.personalAttention.some(s => s.ID === slave.ID)) { + r.push(personalAttention(slave)); + } + + if (HGTrainSlavesIDs.length > 0) { + const trainee = HGTrainSlavesIDs.find(trainee => slave.ID === trainee.ID); + if (trainee) { + r.push(HGApplication(slave, trainee.training)); + } + } + + r.push(`<div class="indent">${App.SlaveAssignment.devotion(slave)}</span>`); + App.Events.addNode(el, r); + return el; + } + + /** + * @param {App.Entity.SlaveState} slave + * @param {string} headGirlsTraining + */ + function HGApplication(slave, headGirlsTraining) { + const el = document.createElement("span"); + const { + He, His, + he, his, him, himself, girl + } = getPronouns(S.HeadGirl); + const {he2, his2, him2, himself2, girl2} = getPronouns(slave).appendSuffix("2"); + let r = []; + + slave.training = Math.clamp(slave.training, 0, 150); + let effectiveness = S.HeadGirl.actualAge + ((S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant) / 3) - (S.HeadGirl.accent * 5) + (V.HGSeverity * 10) + ((slave.intelligence + slave.intelligenceImplant) / 4) - (slave.accent * 5); + if (V.AgePenalty === 0) { + effectiveness += Math.max(0, (30 - S.HeadGirl.actualAge)); + } + if (S.HeadGirl.sexualFlaw === "abusive" && V.HGSeverity >= 0) { + effectiveness += 10; + } + if (headGirlsTraining !== "health") { + slave.health.tired += 25; + } + + r.push(`<span style="font-weight: bold">Your Head Girl</span> <span class='slave-name'>${S.HeadGirl.slaveName}</span> notices that <span class='slave-name'>${slave.slaveName}</span>`); + switch (headGirlsTraining) { + case "health": + r.push(`is unwell.`); + break; + case "obedience": + r.push(`is disobedient.`); + break; + case "paraphilia": + r.push(`has a paraphilia.`); + break; + case "flaw": + r.push(`has an unpleasant flaw worth fixing.`); + break; + case "soften": + r.push(`has an unpleasant flaw that ${he} can try to soften into a unique quirk.`); + break; + case "oral skill": + r.push(`isn't as orally skilled as ${he} is.`); + break; + case "anal skill": + r.push(`isn't as skilled at taking anal as ${he} is.`); + break; + case "fuck skill": + r.push(`isn't as skilled at vaginal intercourse as ${he} is.`); + break; + case "whore skill": + r.push(`isn't as skilled at the fine art of sex for money as ${he} is.`); + break; + case "entertain skill": + r.push(`isn't as skilled at entertainment as ${he} is.`); + } + + if (headGirlsTraining === "health") { + r.push(`${He} helps ${slave.slaveName} however ${he} can. The tender care has <span class="green">improved ${slave.slaveName}'s health.</span>`); + improveCondition(slave, 10); + slave.health.tired = Math.clamp(slave.health.tired - 10, 0, 1000); + slave.training = 0; + } else { + if (S.HeadGirl.career === "an arcology owner") { + r.push(`${He} was once an arcology owner ${himself}, making ${him} truly peerless as a Head Girl.`); + effectiveness += 50; + } else if (setup.HGCareers.includes(S.HeadGirl.career)) { + r.push(`${He} was used to giving commands and being obeyed in ${his} life before ${he} was a slave, experience ${he} can call on now.`); + effectiveness += 5; + } else if (S.HeadGirl.skill.headGirl >= V.masteredXP) { + r.push(`${He} is used to giving commands and being obeyed through experience, rendering ${him} more effective.`); + effectiveness += 5; + } + + if (S.HeadGirl.actualAge > 30) { + r.push(`${His} age and experience help ${him} as ${he} works with ${slave.slaveName}.`); + } else if (S.HeadGirl.actualAge < 25 && V.AgePenalty > 0) { + r.push(`${His} youth and inexperience impede ${him} as ${he} works with ${slave.slaveName}.`); + } + + if (S.HeadGirl.accent >= 3) { + r.push(`${He} does ${his} best to give orders in ${V.language}, but has to resort to a lot of unseemly gesticulation and shouting, making ${him} much less effective.`); + } else if (S.HeadGirl.accent === 2) { + r.push(`${His} heavy ${aNational(S.HeadGirl.nationality)} accent impedes ${his} clarity in ${V.language}, making ${him} somewhat less effective.`); + } + + if (headGirlsTraining === "obedience" || headGirlsTraining === "flaw" || headGirlsTraining === "soften") { + if (S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant > 50) { + if (slave.intelligence + slave.intelligenceImplant > 50) { + r.push(`${He} needs ${his} wits about ${him} to mold ${slave.slaveName}, who's quite intelligent ${himself2}.`); + } else if (slave.intelligence + slave.intelligenceImplant >= -50) { + r.push(`${His} intelligence helps ${him} mold ${slave.slaveName}.`); + } else { + r.push(`Molding ${slave.slaveName} is very easy, especially for a smart Head Girl like ${him}.`); + } + } + } else { + if (S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant > 50) { + if (slave.intelligence + slave.intelligenceImplant > 50) { + r.push(`Both slaves are quite intelligent, making ${his} job much easier.`); + } else if (slave.intelligence + slave.intelligenceImplant >= -50) { + r.push(`${He}'s quite intelligent and can teach ${slave.slaveName} well.`); + } else { + r.push(`${He} needs all ${his} considerable intelligence to get through to the idiot ${he} has to teach.`); + } + } + } + + if (V.HGSeverity > 0) { + r.push(`Your directives encourage ${him} to rape any slave that fails in the slightest way, a task ${he} approaches`); + if (S.HeadGirl.sexualFlaw === "abusive") { + r.push(`eagerly, since ${he} prefers to take ${his} pleasure without consent.`); + } else if (S.HeadGirl.fetish === "sadist") { + r.push(`with sadistic enthusiasm.`); + } else if (S.HeadGirl.fetish === "dom") { + r.push(`with confidence.`); + } else if (S.HeadGirl.energy > 95) { + r.push(`as a convenient way to`); + if (S.HeadGirl.balls > 0) { + r.push(`drain ${his} perpetually overfilled balls into a series of spasming holes.`); + } else { + r.push(`sate ${his} excess sexual appetite.`); + } + } else { + r.push(`dutifully.`); + } + if (slave.vagina === 0) { + r.push(`In ${slave.slaveName}'s case, ${he}'s careful to limit ${his2} sexual abuse to things that won't take the ${girl2}'s virginity. The slave`); + } else if (slave.anus === 0) { + r.push(`${He}'s careful to molest ${slave.slaveName} in ways that don't involve penetrating ${his2} virgin ass. The slave`); + } else { + r.push(`${slave.slaveName}`); + } + if (slave.devotion > 50) { + r.push(`accepts the abuse, believing ${he2} deserves to be raped.`); + } else if (slave.devotion >= -20) { + r.push(`is <span class="gold">frightened</span> by the unceasing abuse.`); + slave.trust -= 1; + } else { + r.push(`<span class="mediumorchid">hates</span> and <span class="gold">fears</span> the constant abuse.`); + slave.trust -= 1; + slave.devotion -= 1; + } + r.push(`${S.HeadGirl.slaveName} makes sure ${his} victim hates it, every time, and ${slave.slaveName} can't help but do ${his2} very best to avoid this treatment.`); + } else if (V.HGSeverity === 0) { + r.push(`You allow ${him} to use ${his} own judgment when punishing failures,`); + if (S.HeadGirl.sexualFlaw === "abusive") { + r.push(`and ${he} usually decides in favor of forcing misbehaving slaves to get ${him} off.`); + } else if (S.HeadGirl.fetish === "sadist") { + r.push(`permission the sadist uses for ${his} own gratification.`); + } else if (S.HeadGirl.fetish === "dom") { + r.push(`which the dominant ${girl} uses confidently.`); + } else if (S.HeadGirl.energy > 95) { + r.push(`which ${he} uses to`); + if (S.HeadGirl.balls > 0) { + r.push(`force ${his} subordinates to keep ${his} balls drained.`); + } else { + r.push(`extract the constant sexual favors ${his} libido demands.`); + } + } else { + r.push(`and ${he} does ${his} best to be fair.`); + } + r.push(`${slave.slaveName}`); + if (slave.devotion > 50) { + r.push(`is <span class="mediumaquamarine">grateful</span> that ${he2} is punished justly when ${he2} makes mistakes.`); + slave.trust += 1; + } else if (slave.devotion >= -20) { + r.push(`does ${his2} best to learn quickly and avoid punishment.`); + } else { + r.push(`is <span class="gold">scared</span> by ${his2} inability to get away with the smallest disobedience.`); + slave.trust -= 1; + } + } else { + r.push(`You require ${him} to use respect when punishing; ${he} does ${his} best to motivate, but is unable to use real fear as a tool. ${slave.slaveName} understands this, and <span class="mediumaquamarine">trusts</span> that if ${he2} fails, the consequences won't be too awful.`); + slave.trust += 1; + } + + if (headGirlsTraining === "obedience") { + slave.training = 0; + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + if (effectiveness <= 0) { + r.push(`${slave.slaveName} is smart enough to complicate things; ${he2} manages to outwit ${him} this week and makes no progress.`); + } else { + slave.devotion += Math.ceil(effectiveness / 4); + if (slave.devotion < -50) { + r.push(`${He} helps watch and restrain the rebellious ${slave.slaveName}, helping wear ${him2} down, <span class="gold">breaking ${slave.slaveName}'s rebelliousness.</span>`); + } else if (slave.devotion < -20) { + r.push(`${He} keeps ${slave.slaveName} constantly aware of ${his2} slavery, <span class="gold">breaking ${slave.slaveName}'s resistance.</span>`); + } else { + r.push(`${He} acts as another pair of eyes watching ${slave.slaveName} and metes out punishments, <span class="gold">improving ${slave.slaveName}'s servitude.</span>`); + } + } + } else if (headGirlsTraining === "paraphilia") { + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + slave.training += effectiveness; + r.push(`${S.HeadGirl.slaveName} does ${his} best to get ${slave.slaveName} past it with punishments and rewards,`); + if (slave.training > 100) { + r.push(`and <span class="green">resolves ${slave.slaveName}'s paraphilia.</span>`); + slave.training = 0; + slave.sexualFlaw = "none"; + } else { + r.push(`and makes partial progress.`); + } + } else if (headGirlsTraining === "flaw") { + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + slave.training += effectiveness; + r.push(`${S.HeadGirl.slaveName} punishes ${slave.slaveName} whenever ${he} catches ${him2} indulging in ${his2} bad habits,`); + if (slave.training > 100) { + r.push(`and <span class="green">fixes ${slave.slaveName}'s flaw.</span>`); + slave.training = 0; + if (slave.behavioralFlaw !== "none") { + slave.behavioralFlaw = "none"; + } else if (slave.sexualFlaw !== "none") { + slave.sexualFlaw = "none"; + } + } else { + r.push(`and makes partial progress.`); + } + } else if (headGirlsTraining === "soften") { + effectiveness -= (slave.intelligence + slave.intelligenceImplant) / 3; + slave.training += effectiveness; + r.push(`${He} punishes ${slave.slaveName} whenever ${he} sees ${him2} breaking the rules yet does ${his} best to retain what makes the slave special,`); + if (slave.training > 150) { + slave.training = 0; + r.push(`and successfully <span class="green">softens ${slave.slaveName}'s flaw.</span>`); + if (slave.behavioralFlaw !== "none") { + SoftenBehavioralFlaw(slave); + } else if (slave.sexualFlaw !== "none") { + SoftenSexualFlaw(slave); + } + } else { + r.push(`and makes partial progress.`); + } + } else if (headGirlsTraining === "oral skill") { + slave.training = 0; + if (S.HeadGirl.fetish === "cumslut" && S.HeadGirl.fetishStrength > 60) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. ${His} enthusiasm for oral sex is infectious. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + slaveSkillIncrease('oral', slave, random(5, 10)); + } else if ((S.HeadGirl.dick > 0) && canPenetrate(S.HeadGirl)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. Your Head Girl uses ${his} penis as an effective teaching tool. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + slaveSkillIncrease('oral', slave, random(5, 10)); + } else if ((S.HeadGirl.clit > 2)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. Your Head Girl uses ${his} pseudophallus-sized clit as an effective teaching tool. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + slaveSkillIncrease('oral', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to suck cocks, cunts, and assholes. ${slave.slaveName}'s <span class="green">oral skills have improved.</span>`); + } + slaveSkillIncrease('oral', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "anal skill") { + slave.training = 0; + if (S.HeadGirl.fetish === "buttslut" && S.HeadGirl.fetishStrength > 60) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take it up the ass. Your Head Girl's enthusiasm for backdoor loving is infectious. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + slaveSkillIncrease('anal', slave, random(5, 10)); + } else if ((S.HeadGirl.dick > 0) && canPenetrate(S.HeadGirl)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick up the butt. Your Head Girl uses ${his} penis as an effective teaching tool. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + slaveSkillIncrease('anal', slave, random(5, 10)); + } else if ((S.HeadGirl.clit > 2)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a phallus up the butt. Your Head Girl uses ${his} pseudophallus-sized clit as an effective teaching tool. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + slaveSkillIncrease('anal', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick up the butt. ${slave.slaveName}'s <span class="green">anal skills have improved.</span>`); + } + slaveSkillIncrease('anal', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "fuck skill") { + slave.training = 0; + if (S.HeadGirl.energy > 95) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick. Your Head Girl's enthusiasm for sex is infectious. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + slaveSkillIncrease('vaginal', slave, random(5, 10)); + } else if ((S.HeadGirl.dick > 0) && canPenetrate(S.HeadGirl)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick. Your Head Girl uses ${his} penis as an effective teaching tool. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + slaveSkillIncrease('vaginal', slave, random(5, 10)); + } else if ((S.HeadGirl.clit > 2)) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a phallus. Your Head Girl uses ${his} pseudophallus-sized clit as an effective teaching tool. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + slaveSkillIncrease('vaginal', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to take a dick. ${slave.slaveName}'s <span class="green">vanilla sex skills have improved.</span>`); + } + slaveSkillIncrease('vaginal', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "whore skill") { + slave.training = 0; + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to prostitute ${himself2}. ${slave.slaveName}'s <span class="green">whoring skills have improved.</span>`); + slaveSkillIncrease('whoring', slave, Math.ceil(effectiveness / 10)); + } else if (headGirlsTraining === "entertain skill") { + slave.training = 0; + if (S.HeadGirl.fetish === "humiliation" && S.HeadGirl.fetishStrength > 60) { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to entertain. Your Head Girl's enthusiasm for public display is infectious. ${slave.slaveName}'s <span class="green">entertainment skills have improved.</span>`); + slaveSkillIncrease('entertainment', slave, random(5, 10)); + } else { + r.push(`In spare moments ${he} teaches ${slave.slaveName} how to entertain. ${slave.slaveName}'s <span class="green">entertainment skills have improved.</span>`); + } + slaveSkillIncrease('entertainment', slave, Math.ceil(effectiveness / 10)); + } + } + + if (slave.devotion >= -20) { + if (slave.attrKnown === 0) { + slave.attrKnown = 1; + r.push(`${S.HeadGirl.slaveName} also investigates the slave's basic sexual orientation, finding that ${he2} is`); + if (slave.attrXY <= 40) { + r.push(`<span class="red">disgusted by men</span>`); + } else if ((slave.attrXY <= 60)) { + r.push(`indifferent to men`); + } else if ((slave.attrXY <= 80)) { + r.push(`<span class="green">attracted to men</span>`); + } else { + r.push(`<span class="green">intensely attracted to men</span>`); + } + r.push(`and`); + if (slave.attrXX <= 40) { + r.push(`<span class="red">disgusted by women.</span>`); + } else if ((slave.attrXX <= 60)) { + r.push(`indifferent to women.`); + } else if ((slave.attrXX <= 80)) { + r.push(`<span class="green">attracted to women.</span>`); + } else { + r.push(`<span class="green">intensely attracted to women.</span>`); + } + } + } + + if (V.HGPiercings) { + if (slave.devotion >= -20 && slave.genes === "XY" && slave.attrXY <= 35 && V.arcologies[0].FSBodyPurist === "unset" && (V.arcologies[0].FSPaternalist === "unset" || SlaveStatsChecker.modScore(slave).total < 13)) { + piercingCheck(); + } + } + + App.Events.addNode(el, r, "div", "indent"); + return el; + + function piercingCheck() { + let piercingForbidden = 0; + if (slave.earPiercing === 0 && slave.earShape !== "none") { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.earPiercing = 2; + } else { + slave.earPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.earPiercing !== V.slaveAfterRA.earPiercing) { + piercingForbidden = 1; + slave.earPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} has the slave's ears pierced. This will be a constant reminder that ${he2} is simply a sexual object here.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's ears pierced. A little feminine touch can make a big difference.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.nosePiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.nosePiercing = 2; + } else { + slave.nosePiercing = 1; + } + RulesDeconfliction(slave); + if (slave.nosePiercing !== V.slaveAfterRA.nosePiercing) { + piercingForbidden = 1; + slave.nosePiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} gives the slave nasal studs and a large septum ring. It should push ${slave.slaveName} to see ${himself2} as a sexual object for others to use.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} gives the slave a cute little nose piercing. It should help ${slave.slaveName} see ${himself2} as a bit more feminine.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.eyebrowPiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.eyebrowPiercing = 2; + } else { + slave.eyebrowPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.eyebrowPiercing !== V.slaveAfterRA.eyebrowPiercing) { + piercingForbidden = 1; + slave.eyebrowPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} gives the slave multiple eyebrow piercings. A slutty touch for a slave${girl2} should help ${him2} feel a little hungrier for cock.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} gives the slave a cute little eyebrow piercing. A slutty touch for a slave${girl2} should help ${him2} feel a little hungrier for cock.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.lipsPiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.lipsPiercing = 2; + } else { + slave.lipsPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.lipsPiercing !== V.slaveAfterRA.lipsPiercing) { + piercingForbidden = 1; + slave.lipsPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs to adjust to life as a slave${girl2}, so ${he} has the slave's lower lip pierced. ${his2} mouth is for pleasing penises now, so it'll help ${him2} if it looks like it.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's lower lip pierced. ${his2} mouth is for pleasing penises now, so it'll help ${him2} if it looks like it.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (slave.navelPiercing === 0) { + if (V.arcologies[0].FSDegradationist !== "unset") { + slave.navelPiercing = 2; + } else { + slave.navelPiercing = 1; + } + RulesDeconfliction(slave); + if (slave.navelPiercing !== V.slaveAfterRA.navelPiercing) { + piercingForbidden = 1; + slave.navelPiercing = 0; + } else { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's navel pierced with a big ring. Whatever ${he2} thinks in ${his2} mind, S.HeadGirl.slaveName makes clear to ${him2} that ${his2} body belongs to you.`); + } else { + r.push(`${S.HeadGirl.slaveName} knows that ${slave.slaveName} needs help adjusting to life as a slave${girl2}, so ${he} has the slave's navel pierced. The prettier ${his2} lower half looks, the less reluctant ${he2} should feel to take it up the butt.`); + } + cashX(forceNeg(V.modCost), "slaveMod", slave); + return; + } + } + if (piercingForbidden) { + if (V.arcologies[0].FSDegradationist !== "unset") { + r.push(`${S.HeadGirl.slaveName} thinks some piercings might push ${slave.slaveName} to adjust to life as a slave${girl2}, but ${he} also knows you have rules applied to this slave that forbid it.`); + } else { + r.push(`${S.HeadGirl.slaveName} thinks some cute piercings might help ${slave.slaveName} adjust to life as a slave${girl2}, but ${he} also knows you have rules applied to this slave that forbid it.`); + } + } + } + } + + /** + * @returns {FC.HeadGirlTrainee[]} + */ + function slavesToTrain() { + if (S.HeadGirl) { + /** @type {FC.HeadGirlTrainee[][]} */ + const HGPossibleSlaves = [[], [], [], [], [], []]; + for (const slave of V.slaves) { + if (!assignmentVisible(slave) || slave.fuckdoll === 1 || slave.ID === V.BodyguardID || slave.ID === V.HeadGirlID || slave.fetish === "mindbroken") { + continue; + } else if (Array.isArray(V.personalAttention) && V.personalAttention.some(p => p.ID === slave.ID)) { + continue; + } + + if (V.headGirlTrainsHealth && slave.health.condition < -20) { + HGPossibleSlaves[0].push({ID: slave.ID, training: "health"}); + continue; + } + + if (slave.health.tired < 50) { + const hasParaphilia = (App.Data.misc.paraphiliaList.includes(slave.sexualFlaw)); + if (V.headGirlTrainsParaphilias && hasParaphilia) { + HGPossibleSlaves[1].push({ID: slave.ID, training: "paraphilia"}); + continue; + } + + if (V.headGirlTrainsFlaws || V.headGirlSoftensFlaws) { + if (slave.behavioralFlaw !== "none" || (slave.sexualFlaw !== "none" && !hasParaphilia)) { + if (V.headGirlSoftensFlaws) { + if (slave.devotion > 20) { + if ((slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") || (slave.sexualFlaw !== "none" && slave.sexualQuirk === "none" && !hasParaphilia)) { + HGPossibleSlaves[3].push({ID: slave.ID, training: "soften"}); + } else { + HGPossibleSlaves[3].push({ID: slave.ID, training: "flaw"}); + } + continue; + } + } else if (V.headGirlTrainsFlaws) { + HGPossibleSlaves[2].push({ID: slave.ID, training: "flaw"}); + continue; + } + } + } + + if (V.headGirlTrainsObedience && slave.devotion <= 20 && slave.trust >= -20) { + HGPossibleSlaves[4].push({ID: slave.ID, training: "obedience"}); + continue; + } + + if (V.headGirlTrainsSkills) { + if (slave.skill.oral < S.HeadGirl.skill.oral) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "oral skill"}); + } else if ((slave.skill.vaginal < S.HeadGirl.skill.vaginal) && (slave.vagina > 0) && (canDoVaginal(slave))) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "fuck skill"}); + } else if ((slave.skill.anal < S.HeadGirl.skill.anal) && (slave.anus > 0) && (canDoAnal(slave))) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "anal skill"}); + } else if (slave.skill.whoring < S.HeadGirl.skill.whoring) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "whore skill"}); + } else if ((slave.skill.entertainment < S.HeadGirl.skill.entertainment) && !isAmputee(slave)) { + HGPossibleSlaves[5].push({ID: slave.ID, training: "entertain skill"}); + } + } + } + } + // @ts-ignore - SC's flatten() is not typed correctly + return HGPossibleSlaves.flatten().slice(0, App.EndWeek.saVars.HGEnergy); + } else { + return []; + } + } +}; diff --git a/src/endWeek/reports/personalAttention.js b/src/endWeek/reports/personalAttention.js index bbe8dcb0aae1eb2d99400a44db52ddc7c2e7af2c..384c10e3778c0f1246a9bb137fc3e38f300d8c8d 100644 --- a/src/endWeek/reports/personalAttention.js +++ b/src/endWeek/reports/personalAttention.js @@ -62,7 +62,7 @@ globalThis.personalAttention = (function() { el.append(`Since ${he}'s obedient, `); App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} behavioral flaw. `, "yellow"); pa.trainingRegimen = "soften her behavioral flaw"; - } else if ((slave.devotion > 20) && (slave.sexualQuirk === "none") && !["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { + } else if ((slave.devotion > 20) && (slave.sexualQuirk === "none") && !App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none") { el.append(`Since ${he}'s obedient, `); App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} sexual flaw. `, "yellow"); pa.trainingRegimen = "soften her sexual flaw"; @@ -70,7 +70,7 @@ globalThis.personalAttention = (function() { el.append(`Since ${he}'s obedient and already has a behavioral quirk, `); App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} behavioral flaw. `, "yellow"); pa.trainingRegimen = "fix her behavioral flaw"; - } else if ((slave.devotion > 20) && !["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { + } else if ((slave.devotion > 20) && !App.Data.misc.paraphiliaList.includes(slave.sexualFlaw)&& slave.sexualFlaw !== "none") { el.append(`Since ${he}'s obedient and already has a sexual quirk, `); App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} sexual flaw. `, "yellow"); pa.trainingRegimen = "fix her sexual flaw"; @@ -88,7 +88,7 @@ globalThis.personalAttention = (function() { /** * @param {App.Entity.SlaveState} slave - * @returns {Node} + * @returns {HTMLElement} */ function personalAttention(slave) { const el = document.createElement("p"); @@ -326,7 +326,7 @@ globalThis.personalAttention = (function() { r.push(`${slave.slaveName} got over ${his} behavioral flaw without you;`); coloredText = []; coloredText.push(`${his} training assignment has defaulted to`); - if (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw)) { + if (App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none") { if ((slave.devotion <= 20) && (slave.trust >= -20)) { coloredText.push(`breaking ${his} will.`); pa.trainingRegimen = "break her will"; diff --git a/src/endWeek/reports/spaReport.js b/src/endWeek/reports/spaReport.js new file mode 100644 index 0000000000000000000000000000000000000000..d1b9eee884326939d6862e1792dda986beb843d6 --- /dev/null +++ b/src/endWeek/reports/spaReport.js @@ -0,0 +1,433 @@ +/** + * @returns {DocumentFragment} + */ +App.EndWeek.spaReport = function() { + const el = new DocumentFragment(); + let r; + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.spa); + let healthBonus = 0, restedSlaves = 0, restedSlave; + let devBonus = (V.spaDecoration !== "standard") ? 1 : 0; + + V.flSex = App.EndWeek.getFLSex(App.Entity.facilities.spa); /* FIXME: should be local, passed as a parameter to saRules */ + + if (S.Attendant) { + let idleBonus = 0; + let bonusToggle = 0; + let FLsFetish = 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"; + } + 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 = false; + App.Events.addNode(el, r, "div", "indent"); + const softenFlawBonus = bonusToggle ? 10 : 0; + for (const slave of slaves) { + const {he2, his2, him2} = getPronouns(slave).appendSuffix("2"); + r = []; + if (slave.fetish === "mindbroken" && slave.health.condition > 20 && !attendantUsedCure && V.spaFix !== 2) { + attendantUsedCure = true; + 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); + } + } + 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 ( + !attendantUsedCure && + (S.Attendant.intelligence + S.Attendant.intelligenceImplant > 15) && + (S.Attendant.intelligence + S.Attendant.intelligenceImplant + softenFlawBonus) > random(1, 200) && + (V.spaFix === 0) + ) { + if (slave.behavioralFlaw !== "none") { + SoftenBehavioralFlaw(slave); + attendantUsedCure = true; + 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 = true; + 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 (slaves.length < V.spa) { + const seed = random(1, 10) + ((V.spa - slaves.length) * (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 && slaves.length === 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 (slaves.length > 0) { + r = []; + if (slaves.length > 1) { + r.push(`There are ${slaves.length} slaves`); + } else { + r.push(`There is one slave`); + } + r.push(`resting and recuperating in the spa.`); + App.Events.addNode(el, r, "p", ["indent", "bold"]); + } + + if (S.Attendant) { + const slave = S.Attendant; + tired(slave); + /* apply following SA passages to facility leader */ + if (V.showEWD !== 0) { + const attendantEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + App.SlaveAssignment.appendSlaveArt(attendantEntry, slave); + 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; + continue; + } + + if (V.showEWD !== 0) { + const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); + 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/brothelReport.tw b/src/endWeek/reportsTW/brothelReport.tw deleted file mode 100644 index 933e96f16f578fec98c6942a03cf9cd7f0223036..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/brothelReport.tw +++ /dev/null @@ -1,3 +0,0 @@ -:: Brothel Report [nobr] - -<<includeDOM brothelReport()>> diff --git a/src/endWeek/reportsTW/childrenReport.tw b/src/endWeek/reportsTW/childrenReport.tw deleted file mode 100644 index 25e61aba4a5364839ca02d639891c2e218bf7350..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/childrenReport.tw +++ /dev/null @@ -1,3 +0,0 @@ -:: Children Report [nobr] - -<<includeDOM App.Facilities.Nursery.childrenReport()>> diff --git a/src/endWeek/reportsTW/clinicReport.tw b/src/endWeek/reportsTW/clinicReport.tw deleted file mode 100644 index 8478322d5f928bfaa5782fe62866fe04b2d7989d..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/clinicReport.tw +++ /dev/null @@ -1,5 +0,0 @@ -:: Clinic Report [nobr] - -/* This passage probably isn't really necessary but it helps organize the profiler output. - * TODO: Once all the facility reports look like this, we should probably get rid of these intermediate passages. */ -<<includeDOM App.EndWeek.clinicReport()>> diff --git a/src/endWeek/reportsTW/dairyReport.tw b/src/endWeek/reportsTW/dairyReport.tw deleted file mode 100644 index c299f843e0c2d1a866783854c32efe328bb221be..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/dairyReport.tw +++ /dev/null @@ -1,3 +0,0 @@ -:: Dairy Report [nobr] - -<<includeDOM App.EndWeek.dairyReport()>> diff --git a/src/endWeek/reportsTW/farmyardReport.tw b/src/endWeek/reportsTW/farmyardReport.tw deleted file mode 100644 index f1f3443c0b0576a383498b8498646cc3c34cac52..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/farmyardReport.tw +++ /dev/null @@ -1,3 +0,0 @@ -:: Farmyard Report [nobr] - -<<includeDOM App.Facilities.Farmyard.farmyardReport()>> diff --git a/src/endWeek/reportsTW/masterSuiteReport.tw b/src/endWeek/reportsTW/masterSuiteReport.tw deleted file mode 100644 index de0391e8f8020139f88db5f4421f60af6b01f701..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/masterSuiteReport.tw +++ /dev/null @@ -1,5 +0,0 @@ -:: Master Suite Report [nobr] - -/* This passage probably isn't really necessary but it helps organize the profiler output. - * TODO: Once all the facility reports look like this, we should probably get rid of these intermediate passages. */ -<<includeDOM App.EndWeek.masterSuiteReport()>> diff --git a/src/endWeek/reportsTW/nurseryReport.tw b/src/endWeek/reportsTW/nurseryReport.tw deleted file mode 100644 index 4f318e0e1c9fdfb0c96f0fbea11a23034881c267..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/nurseryReport.tw +++ /dev/null @@ -1,3 +0,0 @@ -:: Nursery Report [nobr] - -<<includeDOM App.Facilities.Nursery.nurseryReport()>> diff --git a/src/endWeek/reportsTW/schoolroomReport.tw b/src/endWeek/reportsTW/schoolroomReport.tw deleted file mode 100644 index 2d651a8e6642991fa209ba41e731453c85bff245..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/schoolroomReport.tw +++ /dev/null @@ -1,5 +0,0 @@ -:: Schoolroom Report [nobr] - -/* This passage probably isn't really necessary but it helps organize the profiler output. - * TODO: Once all the facility reports look like this, we should probably get rid of these intermediate passages. */ -<<includeDOM App.EndWeek.schoolroomReport()>> diff --git a/src/endWeek/reportsTW/servantsQuartersReport.tw b/src/endWeek/reportsTW/servantsQuartersReport.tw deleted file mode 100644 index 6abf6fc4e9d59aec7819e2b6c0eaa63e013633f6..0000000000000000000000000000000000000000 --- a/src/endWeek/reportsTW/servantsQuartersReport.tw +++ /dev/null @@ -1,5 +0,0 @@ -:: Servants' Quarters Report [nobr] - -/* This passage probably isn't really necessary but it helps organize the profiler output. - * TODO: Once all the facility reports look like this, we should probably get rid of these intermediate passages. */ -<<includeDOM App.EndWeek.servantsQuartersReport()>> diff --git a/src/endWeek/saChoosesOwnJob.js b/src/endWeek/saChoosesOwnJob.js index f59353abde47fc5268fa7546b00439183a53685a..a4d853fcfcadd45bf222189bdece0b6f05b1da76 100644 --- a/src/endWeek/saChoosesOwnJob.js +++ b/src/endWeek/saChoosesOwnJob.js @@ -75,89 +75,89 @@ App.SlaveAssignment.choosesOwnJob = (function() { if (slave.relationship === -3 && slave.devotion < -20) { choice.push(`is reluctantly married to you, and ${he} thinks of all the ways ${he} <span class="devotion dec">can take advantage of this,</span>`); if (V.universalRulesAssignsSelfFacility === 1 && V.spa > spaL) { - choice.push(`so ${he} heads straight to ${V.spaName} to relax.`); + choice.push(`so ${he} <span class="job change">heads straight to ${V.spaName}</span> to relax.`); choice.push(assignJob(slave, "rest in the spa")); } else { - choice.push(`so ${he} cheerfully decides to lounge about the penthouse.`); + choice.push(`so ${he} cheerfully <span class="job change">decides to lounge about the penthouse.</span>`); choice.push(removeJob(slave, slave.assignment)); } } else { - choice.push(`decides to rest, taking advantage of your permission to <span class="devotion dec">remain indolent.</span>`); + choice.push(`<span class="job change">decides to rest,</span> taking advantage of your permission to <span class="devotion dec">remain indolent.</span>`); choice.push(removeJob(slave, slave.assignment)); } slave.devotion -= 5; } else if (slave.health.illness > 1) { if (V.universalRulesAssignsSelfFacility === 1 && V.clinic > clinicL) { - choice.push(`is ill, so ${he} decides to get treatment at ${V.clinicName}.`); + choice.push(`is ill, so ${he} <span class="job change">decides to get treatment at ${V.clinicName}.</span>`); choice.push(assignJob(slave, "get treatment in the clinic")); } else { - choice.push(`is ill, so ${he} decides to rest.`); + choice.push(`is ill, so ${he} <span class="job change">decides to rest.</span>`); choice.push(removeJob(slave, slave.assignment)); } } else if (slave.health.condition < 20) { if (V.universalRulesAssignsSelfFacility === 1 && V.spa > spaL) { - choice.push(`is unhealthy, so ${he} decides to get recover at ${V.spaName}.`); + choice.push(`is unhealthy, so ${he} <span class="job change">decides to recover at ${V.spaName}.</span>`); choice.push(assignJob(slave, "rest in the spa")); } else { - choice.push(`is unhealthy, so ${he} decides to rest.`); + choice.push(`is unhealthy, so ${he} <span class="job change">decides to rest.</span>`); choice.push(removeJob(slave, slave.assignment)); } } else if (slave.health.tired > 45) { if (V.universalRulesAssignsSelfFacility === 1 && V.spa > spaL) { - choice.push(`is tired, so ${he} decides to recover at ${V.spaName}.`); + choice.push(`is tired, so ${he} <span class="job change">decides to recover at ${V.spaName}.</span>`); choice.push(assignJob(slave, "rest in the spa")); } else { - choice.push(`is tired, so ${he} decides to rest.`); + choice.push(`is tired, so ${he} <span class="job change">decides to rest.</span>`); choice.push(removeJob(slave, slave.assignment)); } } else if (slave.boobsMilk > 0) { - choice.push(`rushes to get milked since ${his} breasts have become painfully engorged.`); + choice.push(`<span class="job change">rushes to get milked</span> since ${his} breasts have become painfully engorged.`); choice.push(assignJob(slave, "get milked")); } else if (slave.intelligenceImplant < 15 && slave.intelligence > 10 && (arcology.FSPaternalist > 20 || arcology.FSSlaveProfessionalism > 20) && arcology.FSGenderFundamentalistLawBimbo !== 1 ) { if (V.universalRulesAssignsSelfFacility === 1 && V.schoolroom > schoolL) { - choice.push(`is uneducated, so ${he} sits ${himself} down in ${V.schoolroomName}.`); + choice.push(`is uneducated, so ${he} <span class="job change">sits ${himself} down in ${V.schoolroomName}.</span>`); choice.push(assignJob(slave, "learn in the schoolroom")); } else { - choice.push(`is uneducated, so ${he} sits ${himself} down to learn.`); + choice.push(`is uneducated, so ${he} <span class="job change">sits ${himself} down to learn.</span>`); choice.push(assignJob(slave, "take classes")); } } else if ((S.Attendant && V.universalRulesAssignsSelfFacility === 1 && V.spa > spaL) && (slave.devotion < 45 || slave.trust < 45 || (slave.sexualFlaw !== "none" && !setup.paraphiliaList.includes(slave.sexualFlaw)) || slave.behavioralFlaw !== "none")) { - choice.push(`could use some counseling, so ${he} decides to visit ${V.spaName}.`); + choice.push(`could use some counseling, so ${he} <span class="job change">decides to visit ${V.spaName}.</span>`); choice.push(assignJob(slave, "rest in the spa")); } else if (slave.devotion <= 50 && canWalk(slave) && canSee(slave)) { if (V.universalRulesAssignsSelfFacility === 1 && V.servantsQuarters > servQL) { - choice.push(`is obedient but not devoted, so ${he} decides to work from ${V.servantsQuartersName} since it's the least sexually demanding job available.`); + choice.push(`is obedient but not devoted, so ${he} <span class="job change">decides to work from ${V.servantsQuartersName}</span> since it's the least sexually demanding job available.`); choice.push(assignJob(slave, "work as a servant")); } else { - choice.push(`is obedient but not devoted, so ${he} decides to work as a servant since it's the least sexually demanding job available.`); + choice.push(`is obedient but not devoted, so ${he} <span class="job change">decides to work as a servant</span> since it's the least sexually demanding job available.`); choice.push(assignJob(slave, "be a servant")); } } else if (V.universalRulesAssignsSelfFacility === 1 && slave.devotion > 50 && canWalk(slave) && canSee(slave) && V.nurseryNannies > nurseryL && (V.cribs.findIndex((c) => (c.mother === slave.ID || c.father === slave.ID)))) { if (V.cribs.findIndex((c) => (c.mother === slave.ID || c.father === slave.ID))) { - choice.push(`wants to look after ${his} child, so ${he} decides to work in ${V.nurseryName}.`); + choice.push(`wants to look after ${his} child, so ${he} <span class="job change">decides to work in ${V.nurseryName}.</span>`); choice.push(assignJob(slave, "work as a nanny")); } else { // motherly sexualQuirk - choice.push(`enjoys taking care of children, so ${he} decides to work in ${V.nurseryName}.`); + choice.push(`enjoys taking care of children, so ${he} <span class="job change">decides to work in ${V.nurseryName}.</span>`); choice.push(assignJob(slave, "work as a nanny")); } } else if (slave.relationship === -1) { choice.push(`relies on promiscuity to fulfill ${his} emotional needs,`); if (V.cash < 10000) { - choice.push(`and doesn't mind being a whore, so ${he} prostitutes ${himself}`); + choice.push(`and doesn't mind being a whore, <span class="job change">so ${he} prostitutes ${himself}`); if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`in ${V.brothelName}.`); + choice.push(`in ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`on the streets.`); + choice.push(`on the streets.</span>`); choice.push(assignJob(slave, "whore")); } } else { - choice.push(`so ${he} eagerly decides to slut around`); + choice.push(`so ${he} eagerly <span class="job change">decides to slut around`); if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`in ${V.clubName}.`); + choice.push(`in ${V.clubName}.</span>`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`on the streets.`); + choice.push(`on the streets.</span>`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; @@ -165,50 +165,50 @@ App.SlaveAssignment.choosesOwnJob = (function() { } else if (slave.relationship === -2) { choice.push(`is emotionally bonded to you,`); if (slave.behavioralQuirk === "insecure") { - choice.push(`but insecure, so ${he} decides to make you money by prostituting ${himself}`); + choice.push(`but insecure, so ${he} <span class="job change">decides to make you money by prostituting ${himself}`); if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`in ${V.brothelName}.`); + choice.push(`in ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`on the streets.`); + choice.push(`on the streets.</span>`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (slave.behavioralQuirk === "advocate") { - choice.push(`and an advocate for slavery, so ${he} decides to burnish your reputation by slutting it up`); + choice.push(`and an advocate for slavery, so ${he} <span class="job change">decides to burnish your reputation by slutting it up`); if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`in ${V.clubName}.`); + choice.push(`in ${V.clubName}.</span>`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`on the streets.`); + choice.push(`on the streets.</span>`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; } else if (slave.energy > 60) { choice.push(`and ${he} thinks of little but sex with you,`); if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`so ${he} heads straight to ${V.masterSuiteName}.`); + choice.push(`so ${he} <span class="job change">heads straight to ${V.masterSuiteName}.</span>`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`so ${he} cheerfully designates ${himself} one of your fucktoys.`); + choice.push(`so ${he} cheerfully <span class="job change">designates ${himself} one of your fucktoys.</span>`); choice.push(assignJob(slave, "please you")); } } else if (canSee(slave) && canWalk(slave)) { - choice.push(`so ${he} decides to work`); + choice.push(`so ${he} <span class="job change">decides to work`); if (V.universalRulesAssignsSelfFacility === 1 && V.servantsQuarters > servQL) { - choice.push(`from ${V.servantsQuartersName} to make your penthouse as clean and homelike as possible.`); + choice.push(`from ${V.servantsQuartersName}</span> to make your penthouse as clean and homelike as possible.`); choice.push(assignJob(slave, "work as a servant")); } else { - choice.push(`as a servant to make your penthouse as clean and homelike as possible.`); + choice.push(`as a servant</span> to make your penthouse as clean and homelike as possible.`); choice.push(assignJob(slave, "be a servant")); } } else { choice.push(`but unable to do much on ${his} own,`); if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`so ${he} heads straight to ${V.masterSuiteName} to await your caress.`); + choice.push(`so ${he} <span class="job change">heads straight to ${V.masterSuiteName} to await your caress.</span>`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`so ${he} cheerfully designates ${himself} one of your fucktoys to be close to you.`); + choice.push(`so ${he} cheerfully <span class="job change">designates ${himself} one of your fucktoys</span> to be close to you.`); choice.push(assignJob(slave, "please you")); } } @@ -224,122 +224,122 @@ App.SlaveAssignment.choosesOwnJob = (function() { if (slave.energy > 60) { choice.push(`and ${he} thinks of little but sex with you,`); if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`so ${he} heads straight to ${V.masterSuiteName}.`); + choice.push(`so ${he} <span class="job change">heads straight to ${V.masterSuiteName}.</span>`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`so ${he} cheerfully designates ${himself} one of your fucktoys.`); + choice.push(`so ${he} cheerfully <span class="job change">designates ${himself} one of your fucktoys.</span>`); choice.push(assignJob(slave, "please you")); } } else if (canSee(slave) && canWalk(slave)) { - choice.push(`so ${he} decides to work`); + choice.push(`so ${he} <span class="job change">decides to work`); if (V.universalRulesAssignsSelfFacility === 1 && V.servantsQuarters > servQL) { - choice.push(`from ${V.servantsQuartersName} to make your penthouse as clean and homelike as possible.`); + choice.push(`from ${V.servantsQuartersName}</span> to make your penthouse as clean and homelike as possible.`); choice.push(assignJob(slave, "work as a servant")); } else { - choice.push(`as a servant to make your penthouse as clean and homelike as possible.`); + choice.push(`as a servant</span> to make your penthouse as clean and homelike as possible.`); choice.push(assignJob(slave, "be a servant")); } } else { choice.push(`but unable to do much on ${his} own`); if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`so ${he} heads straight to ${V.masterSuiteName} to await your caress.`); + choice.push(`so ${he} <span class="job change">heads straight to ${V.masterSuiteName}</span> to await your caress.`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`so ${he} cheerfully designates ${himself} one of your fucktoys to be close to you.`); + choice.push(`so ${he} cheerfully <span class="job change">designates ${himself} one of your fucktoys</span> to be close to you.`); choice.push(assignJob(slave, "please you")); } } } else if (slave.devotion < -20) { - choice.push(`and ${he} is scared of you, so ${he} chooses to work as a servant so that ${he} may serve you without "serving" you.`); + choice.push(`and ${he} is scared of you, so ${he} <span class="job change">chooses to work as a servant</span> so that ${he} may serve you without "serving" you.`); choice.push(assignJob(slave, "be a servant")); } else { if (slave.energy > 60) { choice.push(`and ${he} thinks of little but sex,`); if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`so ${he} heads straight to ${V.masterSuiteName}.`); + choice.push(`so ${he} <span class="job change">heads straight to ${V.masterSuiteName}.</span>`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`so ${he} cheerfully designates ${himself} one of your fucktoys.`); + choice.push(`so ${he} cheerfully <span class="job change">designates ${himself} one of your fucktoys</span>.`); choice.push(assignJob(slave, "please you")); } } else if (canSee(slave) && canWalk(slave)) { - choice.push(`so ${he} decides to work`); + choice.push(`so ${he} <span class="job change">decides to work`); if (V.universalRulesAssignsSelfFacility === 1 && V.servantsQuarters > servQL) { - choice.push(`from ${V.servantsQuartersName} to make your penthouse as clean and homelike as possible.`); + choice.push(`from ${V.servantsQuartersName}</span> to make your penthouse as clean and homelike as possible.`); choice.push(assignJob(slave, "work as a servant")); } else { - choice.push(`as a servant to make your penthouse as clean and homelike as possible.`); + choice.push(`as a servant</span> to make your penthouse as clean and homelike as possible.`); choice.push(assignJob(slave, "be a servant")); } } else { - choice.push(`but unable to do much on ${his} own, so ${he} designates ${himself} one of your fucktoys to get more intimate with you.`); + choice.push(`but unable to do much on ${his} own, so ${he} <span class="job change">designates ${himself} one of your fucktoys</span> to get more intimate with you.`); choice.push(assignJob(slave, "please you")); } } } else if (slave.fetishKnown === 1 || jsRandom(1, 100) > 5) { // Yes, this segways into other things than fetish. PM - I added a 5% chance for her to not think of something just for flavor. if (slave.fetish === "submissive" && canWalk(slave) && canSee(slave)) { if (V.universalRulesAssignsSelfFacility === 1 && V.servantsQuarters > servQL) { - choice.push(`thinks ${he} belongs at the bottom of the penthouse hierarchy, so ${he} goes to live in ${V.servantsQuartersName}.`); + choice.push(`thinks ${he} belongs at the bottom of the penthouse hierarchy, so ${he} <span class="job change">goes to live in ${V.servantsQuartersName}.</span>`); choice.push(assignJob(slave, "work as a servant")); } else { - choice.push(`thinks ${he} belongs at the bottom of the penthouse hierarchy, so ${he} decides ${he} should be a servant.`); + choice.push(`thinks ${he} belongs at the bottom of the penthouse hierarchy, so ${he} <span class="job change">decides ${he} should be a servant.</span>`); choice.push(assignJob(slave, "be a servant")); } } else if (slave.fetish === "dom" || slave.fetish === "sadist") { if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`is self-confident, so ${he} decides to work in ${V.clubName}.`); + choice.push(`is self-confident, so ${he} <span class="job change">decides to work in ${V.clubName}.</span>`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`is self-confident, so ${he} decides to work as a public servant.`); + choice.push(`is self-confident, so ${he} <span class="job change">decides to work as a public servant.</span>`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; } else if (slave.fetish === "masochist") { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`enjoys abuse, so ${he} hurries down to ${V.brothelName}.`); + choice.push(`enjoys abuse, so ${he} <span class="job change">hurries down to ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`enjoys abuse, so ${he} decides to become a whore.`); + choice.push(`enjoys abuse, so ${he} <span class="job change">decides to become a whore.</span>`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (slave.fetish === "cumslut") { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`hurries down to ${V.brothelName} to suck cocks.`); + choice.push(`<span class="job change">hurries down to ${V.brothelName}</span> to suck cocks.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to become a whore, mostly to suck cock.`); + choice.push(`<span class="job change">decides to become a whore,</span> mostly to suck cock.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (slave.fetish === "humiliation") { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to work in ${V.brothelName}, since it's even more embarrassing to be a whore than a club slut.`); + choice.push(`<span class="job change">decides to work in ${V.brothelName},</span> since it's even more embarrassing to be a whore than a club slut.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to whore, since it's even more embarrassing to be a whore than to be a public servant.`); + choice.push(`<span class="job change">decides to whore,</span> since it's even more embarrassing to be a whore than to be a public servant.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (slave.fetish === "buttslut") { if (slave.balls > 0 && slave.prostate > 0 && V.universalRulesAssignsSelfFacility === 1 && V.dairyRestraintsSetting < 2 && V.dairyStimulatorsSetting > 0 && V.dairy > dairyL) { - choice.push(`chooses confinement in ${V.dairyName}, since all ${he} will be expected to do is produce cum by orgasming to buttsex.`); + choice.push(`<span class="job change">chooses confinement in ${V.dairyName},</span> since all ${he} will be expected to do is produce cum by orgasming to buttsex.`); choice.push(assignJob(slave, "work in the dairy")); } else if (canDoAnal(slave)){ if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to work in ${V.brothelName}, since whores get buttfucked more than anyone else.`); + choice.push(`<span class="job change">decides to work in ${V.brothelName},</span> since whores get buttfucked more than anyone else.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to whore, since whores get buttfucked more than anyone else.`); + choice.push(`<span class="job change">decides to whore,</span> since whores get buttfucked more than anyone else.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else { if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`decides to shake ${his} money maker in ${V.clubName}.`); + choice.push(`<span class="job change">decides to shake ${his} money maker in ${V.clubName}.</span>`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`decides to shake ${his} money maker on the streets.`); + choice.push(`<span class="job change">decides to shake ${his} money maker on the streets.</span>`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; @@ -347,78 +347,78 @@ App.SlaveAssignment.choosesOwnJob = (function() { } else if (slave.fetish === "pregnancy") { if (V.PC.dick > 0 && isFertile(slave)) { if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`decides to serve you in ${V.masterSuiteName}, hoping that you'll get ${him} pregnant.`); + choice.push(`<span class="job change">decides to serve you in ${V.masterSuiteName},</span> hoping that you'll get ${him} pregnant.`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`decides to be your fucktoy, hoping that you'll get ${him} pregnant.`); + choice.push(`<span class="job change">decides to be your fucktoy,</span> hoping that you'll get ${him} pregnant.`); choice.push(assignJob(slave, "please you")); } } else if (V.universalRulesAssignsSelfFacility === 1 && V.dairyPregSetting > 0 && V.dairy > dairyL && isFertile(slave)) { if (V.dairyPregSetting > 1) { - choice.push(`eagerly rushes to ${V.dairyName} in the hopes that ${his} fertile womb will be packed full of children.`); + choice.push(`eagerly <span class="job change">rushes to ${V.dairyName}</span> in the hopes that ${his} fertile womb will be packed full of children.`); choice.push(assignJob(slave, "work in the dairy")); } else { - choice.push(`rushes to ${V.dairyName} in the hopes that ${his} fertile womb will be rented out.`); + choice.push(`<span class="job change">rushes to ${V.dairyName}</span> in the hopes that ${his} fertile womb will be rented out.`); choice.push(assignJob(slave, "work in the dairy")); } } else if (slave.bellyPreg >= 1500) { if (arcology.FSRepopulationFocus > 20) { if (V.cash < 10000) { if (V.brothel > brothelL && V.universalRulesAssignsSelfFacility === 1) { - choice.push(`heads to ${V.brothelName} since ${he} wants to set an example for any unimpregnated girls.`); + choice.push(`<span class="job change">heads to ${V.brothelName}</span> since ${he} wants to set an example for any unimpregnated girls.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`heads to the streets to lavish in the attention given to pregnant prostitutes.`); + choice.push(`<span class="job change">heads to the streets</span> to lavish in the attention given to pregnant prostitutes.`); choice.push(assignJob(slave, "whore")); } } else { if (V.club > clubL && V.universalRulesAssignsSelfFacility === 1) { - choice.push(`heads to ${V.clubName} to show off ${his} growing middle and lavish in the public's attention.`); + choice.push(`<span class="job change">heads to ${V.clubName}</span> to show off ${his} growing middle and lavish in the public's attention.`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`heads to the streets to contribute to the number of visibly pregnant women around.`); + choice.push(`<span class="job change">heads to the streets</span> to contribute to the number of visibly pregnant women around.`); choice.push(assignJob(slave, "serve the public")); } } slave.sexAmount = 10; } else if (V.masterSuite > masterSL && V.universalRulesAssignsSelfFacility === 1) { - choice.push(`heads straight to ${V.masterSuiteName} to share the intimacy of ${his} pregnant body with you.`); + choice.push(`<span class="job change">heads straight to ${V.masterSuiteName}</span> to share the intimacy of ${his} pregnant body with you.`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`decides to be your fucktoy to share the intimacy of ${his} pregnant body with you.`); + choice.push(`<span class="job change">decides to be your fucktoy</span> to share the intimacy of ${his} pregnant body with you.`); choice.push(assignJob(slave, "please you")); } } else if (slave.pregKnown === 1) { if (V.masterSuite > masterSL && V.universalRulesAssignsSelfFacility === 1) { - choice.push(`heads straight to ${V.masterSuiteName} so you may watch for the day that ${he} finally starts to show.`); + choice.push(`<span class="job change">heads straight to ${V.masterSuiteName}</span> so you may watch for the day that ${he} finally starts to show.`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`decides to be your fucktoy so you may enjoy watching ${him} begin showing.`); + choice.push(`<span class="job change">decides to be your fucktoy</span> so you may enjoy watching ${him} begin showing.`); choice.push(assignJob(slave, "please you")); } } else if (canGetPregnant(slave)) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`can't indulge ${his} pregnancy fetish without getting dicked, so ${he} heads down to ${V.brothelName} to do just that.`); + choice.push(`can't indulge ${his} pregnancy fetish without getting dicked, so ${he} <span class="job change">heads down to ${V.brothelName}</span> to do just that.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`can't indulge ${his} pregnancy fetish without getting dicked, so ${he} decides to be a whore to get seeded.`); + choice.push(`can't indulge ${his} pregnancy fetish without getting dicked, so ${he} <span class="job change">decides to be a whore</span> to get seeded.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (slave.lactation > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.dairyRestraintsSetting < 2 && V.dairy > dairyL) { - choice.push(`heads down to ${V.dairyName} to be around other lactating girls.`); + choice.push(`<span class="job change">heads down to ${V.dairyName}</span> to be around other lactating girls.`); choice.push(assignJob(slave, "work in the dairy")); } else { - choice.push(`decides to get milked, since ${he} is already lactating.`); + choice.push(`<span class="job change">decides to get milked,</span> since ${he} is already lactating.`); choice.push(assignJob(slave, "get milked")); } } else { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`can't indulge ${his} fetish by getting pregnant ${himself}, so ${he} just heads down to ${V.brothelName}.`); + choice.push(`can't indulge ${his} fetish by getting pregnant ${himself}, so ${he} just <span class="job change">heads down to ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`can't indulge ${his} fetish by getting pregnant ${himself}, so ${he} glumly decides to be a whore.`); + choice.push(`can't indulge ${his} fetish by getting pregnant ${himself}, so ${he} glumly <span class="job change">decides to be a whore.</span>`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; @@ -426,144 +426,144 @@ App.SlaveAssignment.choosesOwnJob = (function() { } else if (slave.fetish === "boobs") { if (slave.lactation > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.dairyRestraintsSetting < 2 && V.dairy > dairyL) { - choice.push(`heads down to ${V.dairyName} for all the attention that'll be lavished on ${his} nipples.`); + choice.push(`<span class="job change">heads down to ${V.dairyName}</span> for all the attention that'll be lavished on ${his} nipples.`); choice.push(assignJob(slave, "work in the dairy")); } else { - choice.push(`decides to get milked, since ${he} loves getting off to it.`); + choice.push(`<span class="job change">decides to get milked,</span> since ${he} loves getting off to it.`); choice.push(assignJob(slave, "get milked")); } } else if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`decides to work in ${V.clubName} so ${he} can show off ${his} bare breasts.`); + choice.push(`<span class="job change">decides to work in ${V.clubName}</span> so ${he} can show off ${his} bare breasts.`); choice.push(assignJob(slave, "serve in the club")); slave.sexAmount = 10; } else { - choice.push(`decides to work as a public servant so ${he} can show off ${his} bare breasts.`); + choice.push(`<span class="job change">decides to work as a public servant</span> so ${he} can show off ${his} bare breasts.`); choice.push(assignJob(slave, "serve the public")); slave.sexAmount = 10; } } else if (slave.attrXX > 85) { if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`decides to work in ${V.clubName} so ${he} can hit on hot girls.`); + choice.push(`<span class="job change">decides to work in ${V.clubName}</span> so ${he} can hit on hot girls.`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`decides to work as a public servant so ${he} can hit on hot girls.`); + choice.push(`<span class="job change">decides to work as a public servant</span> so ${he} can hit on hot girls.`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; } else if (slave.attrXY > 85) { if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`decides to work in ${V.clubName} so ${he} can hit on cute boys.`); + choice.push(`<span class="job change">decides to work in ${V.clubName}</span> so ${he} can hit on cute boys.`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`decides to work as a public servant so ${he} can hit on cute boys.`); + choice.push(`<span class="job change">decides to work as a public servant</span> so ${he} can hit on cute boys.`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; } else if (slave.energy > 95) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to help those of your slaves who mind taking dick all day by working in ${V.brothelName}.`); + choice.push(`<span class="job change">decides to help those of your slaves who mind taking dick all day by working in ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to help those of your slaves who mind taking dick all day by working as a whore.`); + choice.push(`<span class="job change">decides to help those of your slaves who mind taking dick all day by working as a whore.</span>`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (arcology.FSChattelReligionist > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`is a pure and faithful slave, so ${he} sells ${his} body in the holy brothel.`); + choice.push(`is a pure and faithful slave, <span class="job change">so ${he} sells ${his} body in the holy brothel.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`is a pure and faithful slave, so ${he} sells ${his} body as a holy prostitute.`); + choice.push(`is a pure and faithful slave, <span class="job change">so ${he} sells ${his} body as a holy prostitute.</span>`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (arcology.FSEgyptianRevivalist > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.masterSuite > masterSL) { - choice.push(`is a devoted slave, so ${he} immediately joins your harem.`); + choice.push(`is a devoted slave, <span class="job change">so ${he} immediately joins your harem.</span>`); choice.push(assignJob(slave, "serve in the master suite")); } else { - choice.push(`is a devoted slave, so ${he} immediately joins your harem.`); + choice.push(`is a devoted slave, <span class="job change">so ${he} immediately joins your harem.</span>`); choice.push(assignJob(slave, "please you")); } } else if (arcology.FSRomanRevivalist > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`is a devoted slave, so ${he} decides ${he} can best serve the state by raising money for the treasury, by selling ${his} body in ${V.brothelName}.`); + choice.push(`is a devoted slave, so ${he} <span class="job change">decides ${he} can best serve the state by raising money for the treasury, by selling ${his} body in ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`is a devoted slave, so ${he} decides ${he} can best serve the state by raising money for the treasury, by selling ${his} body as a prostitute.`); + choice.push(`is a devoted slave, so ${he} <span class="job change">decides ${he} can best serve the state by raising money for the treasury, by selling ${his} body as a prostitute.</span>`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (arcology.FSAztecRevivalist > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`is a devoted slave, so ${he} decides ${he} can best serve the empire by serving at the fertility temple.`); + choice.push(`is a devoted slave, so ${he} <span class="job change">decides ${he} can best serve the empire by serving at the fertility temple.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`is a devoted slave, so ${he} decides ${he} can best serve the empire by offering ${himself} to the public.`); + choice.push(`is a devoted slave, so ${he} <span class="job change">decides ${he} can best serve the empire by offering ${himself} to the public.</span>`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; } else if (arcology.FSPaternalist > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to work in ${V.brothelName}, a respectable position for a slave in this enlightened arcology.`); + choice.push(`<span class="job change">decides to work in ${V.brothelName},</span> a respectable position for a slave in this enlightened arcology.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to be a whore, a respectable position for a slave in this enlightened arcology.`); + choice.push(`<span class="job change">decides to be a whore,</span> a respectable position for a slave in this enlightened arcology.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (arcology.FSPastoralist > 0) { if (slave.lactation > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.dairyRestraintsSetting < 2 && V.dairy > dairyL) { - choice.push(`hurries to join your herd of dairy cows.`); + choice.push(`<span class="job change">hurries to join your herd of dairy cows.</span>`); choice.push(assignJob(slave, "work in the dairy")); } else { - choice.push(`hurries to join your herd of cows.`); + choice.push(`<span class="job change">hurries to join your herd of cows.</span>`); choice.push(assignJob(slave, "get milked")); } } else { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to work in ${V.brothelName} to help raise money to get more girls lactating properly.`); + choice.push(`<span class="job change">decides to work in ${V.brothelName}</span> to help raise money to get more girls lactating properly.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to prostitute ${himself} to help raise money to get more girls lactating properly.`); + choice.push(`<span class="job change">decides to prostitute ${himself}</span> to help raise money to get more girls lactating properly.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } } else if (arcology.FSHedonisticDecadence > 0) { if (V.universalRulesAssignsSelfFacility === 1 && V.spa > spaL && (slave.trust < 60 || slave.devotion <= 60)) { - choice.push(`could use a break, so ${he} heads to take a dip in the spa.`); + choice.push(`could use a break, so ${he} <span class="job change">heads to take a dip in the spa.</span>`); choice.push(assignJob(slave, "rest in the spa")); } else { - choice.push(`could use a meal and a nap, so ${he} grabs a cup of food and heads to bed.`); + choice.push(`could use a meal and a nap, so ${he} grabs a cup of food and <span class="job change">heads to bed.</span>`); choice.push(removeJob(slave, slave.assignment)); } } else { if (slave.skill.whoring > slave.skill.entertainment) { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to work in ${V.brothelName}, since ${he} thinks ${himself} a better whore than a public slut.`); + choice.push(`<span class="job change">decides to work in ${V.brothelName},</span> since ${he} thinks ${himself} a better whore than a public slut.`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to whore, since ${he} thinks ${himself} a better whore than a public slut.`); + choice.push(`<span class="job change">decides to whore,</span> since ${he} thinks ${himself} a better whore than a public slut.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; } else if (slave.skill.entertainment > slave.skill.whoring) { if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`decides to be a club ${girl}, since ${he} thinks ${himself} a better public slut than a whore.`); + choice.push(`<span class="job change">decides to be a club ${girl},</span> since ${he} thinks ${himself} a better public slut than a whore.`); choice.push(assignJob(slave, "serve in the club")); } else { - choice.push(`decides to serve the public, since ${he} thinks ${himself} a better public slut than a whore.`); + choice.push(`<span class="job change">decides to serve the public,</span> since ${he} thinks ${himself} a better public slut than a whore.`); choice.push(assignJob(slave, "serve the public")); } slave.sexAmount = 10; } else { if (V.universalRulesAssignsSelfFacility === 1 && V.brothel > brothelL) { - choice.push(`decides to join ${his} sisters and work in ${V.brothelName}.`); + choice.push(`<span class="job change">decides to join ${his} sisters and work in ${V.brothelName}.</span>`); choice.push(assignJob(slave, "work in the brothel")); } else { - choice.push(`decides to prostitute ${himself} to help you upgrade ${arcology.name} and improve everyone's life.`); + choice.push(`<span class="job change">decides to prostitute ${himself}</span> to help you upgrade ${arcology.name} and improve everyone's life.`); choice.push(assignJob(slave, "whore")); } slave.sexAmount = 10; @@ -571,14 +571,14 @@ App.SlaveAssignment.choosesOwnJob = (function() { } } else { if (V.universalRulesAssignsSelfFacility === 1 && V.club > clubL) { - choice.push(`decides to be a club ${girl}, since partying is better than sitting around and failing to think of a job to do.`); + choice.push(`<span class="job change">decides to be a club ${girl},</span> since partying is better than sitting around and failing to think of a job to do.`); choice.push(assignJob(slave, "serve in the club")); slave.sexAmount = 10; } else if (canWalk(slave) && canSee(slave)) { - choice.push(`decides to tidy up the penthouse a little while ${he} thinks.`); + choice.push(`<span class="job change">decides to tidy up the penthouse</span> a little while ${he} thinks.`); choice.push(assignJob(slave, "be a servant")); } else { - choice.push(`stays in bed, unable to come up with anything.`); + choice.push(`<span class="job change">stays in bed,</span> unable to come up with anything.`); choice.push(removeJob(slave, slave.assignment)); } } diff --git a/src/endWeek/saLiveWithHG.js b/src/endWeek/saLiveWithHG.js index bd6c5eb51b69c7149e92987115ce40d674ab77f3..694ee34223f28ea95f562142e6c8f9fad3f87846 100644 --- a/src/endWeek/saLiveWithHG.js +++ b/src/endWeek/saLiveWithHG.js @@ -49,10 +49,6 @@ App.SlaveAssignment.liveWithHG = (function() { penetrativeUse = 0; cervixPump = 0; - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", el, App.Art.SlaveArtElement(slave, 2, 0), ["imageRef", "medImg"]); - } - HGSetsDiet(slave, S.HeadGirl); if (V.HGSuiteHormones !== 0) { HGSetsHormones(slave, S.HeadGirl); @@ -1625,23 +1621,13 @@ App.SlaveAssignment.liveWithHG = (function() { function slaveReport(slave) { if (V.showEWD === 0) { /* App.SlaveAssignment.choosesOwnClothes(slave) */ - App.SlaveAssignment.rules(slave); - App.SlaveAssignment.diet(slave); - App.SlaveAssignment.longTermEffects(slave); - App.SlaveAssignment.drugs(slave); - App.SlaveAssignment.relationships(slave); - App.SlaveAssignment.rivalries(slave); + App.SlaveAssignment.individualSlaveReport(slave); App.SlaveAssignment.devotion(slave); } else { /* App.SlaveAssignment.choosesOwnClothes(slave) */ const content = App.UI.DOM.makeElement("div", '', "indent"); $(content).append( - App.SlaveAssignment.rules(slave), - App.SlaveAssignment.diet(slave), - App.SlaveAssignment.longTermEffects(slave), - App.SlaveAssignment.drugs(slave), - App.SlaveAssignment.relationships(slave), - App.SlaveAssignment.rivalries(slave), + ...App.Events.spaceSentences(App.SlaveAssignment.individualSlaveReport(slave)), `<div class="indent">${App.SlaveAssignment.devotion(slave)}</span>`); r.push(content); } diff --git a/src/endWeek/saRecruitGirls.js b/src/endWeek/saRecruitGirls.js index 2815560f3a779593e31196a055cf500cda8f0ee2..db0ef59f980a12587741d0a909b991e40549f47e 100644 --- a/src/endWeek/saRecruitGirls.js +++ b/src/endWeek/saRecruitGirls.js @@ -597,14 +597,14 @@ App.SlaveAssignment.recruitGirls = (function() { } else if (arcology.FSHedonisticDecadence !== "unset") { if (targetArcology.FSHedonisticDecadence !== "unset") { r.push(`${He} advances Hedonistic Decadence there by stuffing ${his} face at all times, having one hand down ${his} pants, and inviting anyone near ${him} for a quick fuck whenever the mood strikes ${him}.`); - if (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "self hating"].includes(slave.sexualFlaw)) { + if (App.Data.misc.paraphiliaList.includes(slave.sexualFlaw)) { r.push(`${He} wears ${his} sexual paraphilia proudly and makes sure everyone knows what ${he} likes and how ${he} likes it.`); targetArcology.FSHedonisticDecadence++; } targetArcology.FSHedonisticDecadence += influence; } else if (targetArcology.FSPhysicalIdealist !== "unset") { r.push(`${He} challenges Physical Idealism there by stuffing ${his} face at all times, having one hand down ${his} pants, and inviting anyone near ${him} for a quick fuck whenever the mood strikes ${him}.`); - if (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "self hating"].includes(slave.sexualFlaw)) { + if (App.Data.misc.paraphiliaList.includes(slave.sexualFlaw)) { r.push(`${He} wears ${his} sexual paraphilia proudly and make sure everyone knows what ${he} likes and how ${he} likes it.`); targetArcology.FSPhysicalIdealist--; } diff --git a/src/endWeek/saRelationships.js b/src/endWeek/saRelationships.js index 38cf71f30eebc29217eb33b9a90439f20a4c727c..4f5b92ae7c5d273f2c5a67bc36d713eb5e35ede6 100644 --- a/src/endWeek/saRelationships.js +++ b/src/endWeek/saRelationships.js @@ -5,8 +5,6 @@ App.SlaveAssignment.relationships = (function() { // eslint-disable-next-line no-unused-vars let he, him, his, himself, He, His, wife, woman; - // eslint-disable-next-line no-unused-vars - let he2, him2, his2, girl2, wife2, He2; let playerPronouns; let PC; @@ -154,10 +152,8 @@ App.SlaveAssignment.relationships = (function() { if (randomSeed > 75) { let resentment = 0; for (const potentialFriend of V.slaves) { - ({ - he2, him2, his2, girl2, He2 - } = getPronouns(potentialFriend).appendSuffix("2")); if (canStartFriendship(slave, potentialFriend) && potentialFriend.assignment !== Job.CONFINEMENT) { + const {him2, He2} = getPronouns(potentialFriend).appendSuffix("2"); if (potentialFriend.ID === V.MadamID && slave.assignment === Job.BROTHEL) { if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) { r.push(`${slave.slaveName} manages to ingratiate ${himself} with the Madam, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`); @@ -285,10 +281,10 @@ App.SlaveAssignment.relationships = (function() { } } } else if (mutualChildren(slave, potentialFriend, V.slaves) > 0) { - if (App.Utils.sexAllowed(slave, potentialFriend)) { - if (potentialFriend.rules.relationship === "permissive") { + if (App.Utils.sexAllowed(slave, potentialFriend)) { + if (potentialFriend.rules.relationship === "permissive") { r.push(`${slave.slaveName} and ${potentialFriend.slaveName} have`); - if (mutualChildren(slave, potentialFriend, V.slaves) === 0) { + if (mutualChildren(slave, potentialFriend, V.slaves) === 1) { r.push(`a child`); } else { r.push(`children`); @@ -350,10 +346,11 @@ App.SlaveAssignment.relationships = (function() { * */ function existingRelationship(slave) { + let him2, his2, wife2; if (slave.relationship > 0) { friend = getSlave(slave.relationshipTarget); ({ - he2, him2, his2, girl2, He2 + him2, his2 } = getPronouns(friend).appendSuffix("2")); } if (slave.fetish === "mindbroken" && slave.relationship !== -3) { @@ -972,9 +969,9 @@ App.SlaveAssignment.relationships = (function() { */ function consummateRelationship(slave) { let lover = getSlave(slave.relationshipTarget); - ({ - he2, him2, his2, girl2, He2, wife2 - } = getPronouns(lover).appendSuffix("2")); + const { + he2, him2, his2, girl2, wife2 + } = getPronouns(lover).appendSuffix("2"); incestReactions(slave, lover); if (App.Utils.sexAllowed(slave, lover)) { @@ -1183,9 +1180,7 @@ App.SlaveAssignment.relationships = (function() { if (slave.trust <= 95) { let relatives = V.slaves.filter((s) => areRelated(slave, s)); // Is it possible to move this into the loop? for (const relative of relatives) { - ({ - he2, him2 - } = getPronouns(relative).appendSuffix("2")); + const {he2, him2} = getPronouns(relative).appendSuffix("2"); if (slave.trust < -20) { if (slave.rivalryTarget !== relative.ID) { if (isParentP(relative, slave)) { diff --git a/src/endWeek/saServeThePublic.js b/src/endWeek/saServeThePublic.js index 261705930f3d4eba2e857d065b91fc87a3441e22..56735a0988f32f85be497ab41974f99ae4d9b3a0 100644 --- a/src/endWeek/saServeThePublic.js +++ b/src/endWeek/saServeThePublic.js @@ -167,7 +167,7 @@ App.SlaveAssignment.serveThePublic = (function() { } } if (V.DJignoresFlaws !== 1) { - if (!["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw) && jsRandom(1, 100) > 90) { + if (!App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none" && jsRandom(1, 100) > 90) { r += ` ${SlaveFullName(S.DJ)} manages to <span class="flaw break">break</span> ${slave.slaveName} of ${his} sexual flaws.`; slave.sexualFlaw = "none"; } else if (slave.behavioralFlaw !== "none" && jsRandom(1, 100) > 90) { diff --git a/src/endWeek/saSharedVariables.js b/src/endWeek/saSharedVariables.js index 8fc356b65590ba174514ca70dc37f606a8d39e32..81608508ffef26ba0ac0ef0768900c84b5ac28bf 100644 --- a/src/endWeek/saSharedVariables.js +++ b/src/endWeek/saSharedVariables.js @@ -34,6 +34,8 @@ App.EndWeek.SASharedVariables = class { * @type {Map<number, Array<number>>} - key is sub target, value is list of sub slaves (by ID) assigned to that target */ this.subSlaveMap = new Map(); + /** Slave art manager */ + this.slaveArt = null; } /** diff --git a/src/endWeek/saSocialEffects.js b/src/endWeek/saSocialEffects.js index 443086463102615886df3ea4f254d2531ea9ee24..1137eda8fc89e28ef904f724443038d1d3ebe3cb 100644 --- a/src/endWeek/saSocialEffects.js +++ b/src/endWeek/saSocialEffects.js @@ -818,7 +818,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { if (["a burqa", "a chattel habit", "a fallen nuns habit", "a hijab and abaya", "a niqab and abaya", "a penitent nuns habit", "a succubus outfit"].includes(slave.clothes)) { t.push(new SocialEffect("ChattelReligionist", 1, `Religious clothing`, `Society <span class="green">approves</span> of ${his} religiously themed clothing, strengthening the connection between sexual servitude and faith.`)); - } else if (["a bunny outfit", "a hijab and blouse", "a huipil", "a kimono", "a military uniform", "a nice maid outfit", "a nice nurse outfit", "a skimpy loincloth", "a slutty qipao", "a toga", "body oil", "chains", "conservative clothing", "nice business attire", "no clothing", "shibari ropes", "uncomfortable straps"].includes(slave.clothes)) { + } else if (["a bunny outfit", "a hijab and blouse", "a huipil", "a kimono", "a military uniform", "a nice maid outfit", "a nice nurse outfit", "a skimpy loincloth", "a slutty qipao", "a toga", "Imperial Plate", "a tight Imperial bodysuit", "body oil", "chains", "conservative clothing", "nice business attire", "no clothing", "shibari ropes", "uncomfortable straps"].includes(slave.clothes)) { t.push(new SocialEffect("ChattelReligionist", 0, `Spartan clothing`, `Society accepts ${his} spartan clothing, seeing it as permissible under the new religious mores.`)); } else if (slave.fuckdoll === 0) { diff --git a/src/endWeek/saWhore.js b/src/endWeek/saWhore.js index 67f32fa4e960a8a0bf19419d577ab89ab7ed6e31..dcc918d5b55c994ab7f3f903024a63b1f80b8bee 100644 --- a/src/endWeek/saWhore.js +++ b/src/endWeek/saWhore.js @@ -206,7 +206,7 @@ App.SlaveAssignment.whore = (function() { r += ` Unfortunately, ${his} inability to hear wastes most of ${madam.slaveName}'s advice.`; } if (V.MadamIgnoresFlaws !== 1) { - if (!["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw) && jsRandom(1, 100) > 90) { + if (!App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none" && jsRandom(1, 100) > 90) { r += ` ${SlaveFullName(madam)} manages to <span class="flaw break">break</span> ${slave.slaveName} of ${his} sexual flaws.`; slave.sexualFlaw = "none"; } else if (slave.behavioralFlaw !== "none" && jsRandom(1, 100) > 90) { diff --git a/src/endWeek/schoolroomReport.js b/src/endWeek/schoolroomReport.js index 9e675864fcd23d341a6c07bfe82b079bf6ec48ef..5d315659318314ca212d75e3290b5a3c069a2f2e 100644 --- a/src/endWeek/schoolroomReport.js +++ b/src/endWeek/schoolroomReport.js @@ -146,15 +146,14 @@ App.EndWeek.schoolroomReport = function() { if (S.Schoolteacher) { const slave = S.Schoolteacher; + tired(slave); /* apply following SA passages to facility leader */ if (V.showEWD !== 0) { const schoolteacherEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", schoolteacherEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(schoolteacherEntry, slave); schoolteacherEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(schoolteacherEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> is serving as your Schoolteacher.`); - $(schoolteacherEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + schoolteacherEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { App.SlaveAssignment.standardSlaveReport(slave, true); } @@ -224,9 +223,7 @@ App.EndWeek.schoolroomReport = function() { if (V.showEWD !== 0) { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(slaveEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> `); if (slave.choosesOwnAssignment === 2) { @@ -242,7 +239,7 @@ App.EndWeek.schoolroomReport = function() { } const studentContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); $(studentContent).append(`${He} ${App.SlaveAssignment.takeClasses(slave)}`); - $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { // discard return values silently App.SlaveAssignment.choosesOwnJob(slave); diff --git a/src/endWeek/servantsQuartersReport.js b/src/endWeek/servantsQuartersReport.js index 75a67b0b63ebbe5938e3eb7b0f912a9201302f96..ed62fd974357a2d83461cbddee1cca40c44c5067 100644 --- a/src/endWeek/servantsQuartersReport.js +++ b/src/endWeek/servantsQuartersReport.js @@ -204,17 +204,15 @@ App.EndWeek.servantsQuartersReport = function() { } if (S.Stewardess) { - /** @type {App.Entity.SlaveState} */ const slave = S.Stewardess; + tired(slave); /* apply following SA passages to facility leader */ if (V.showEWD !== 0) { const stewardessEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", stewardessEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(stewardessEntry, slave); stewardessEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(stewardessEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> is serving as your Stewardess.`); - $(stewardessEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + stewardessEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { App.SlaveAssignment.standardSlaveReport(slave, true); } @@ -284,9 +282,7 @@ App.EndWeek.servantsQuartersReport = function() { if (V.showEWD !== 0) { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(slaveEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> `); if (slave.choosesOwnAssignment === 2) { @@ -303,7 +299,7 @@ App.EndWeek.servantsQuartersReport = function() { SQMilk += milkResults.milk; SQMilkSale += milkResults.milkSale; } - $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { // discard return values silently App.SlaveAssignment.choosesOwnJob(slave); diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js index 6e2c5ba860109411a735b2d8b68d9feb4e9a7e2f..50d790cfc378cfce2a45af9bc62caf335216100f 100644 --- a/src/endWeek/slaveAssignmentReport.js +++ b/src/endWeek/slaveAssignmentReport.js @@ -232,69 +232,14 @@ App.EndWeek.slaveAssignmentReport = function() { } } - if (S.HeadGirl) { - /** @type {FC.HeadGirlTrainee[][]} */ - const HGPossibleSlaves = [[], [], [], [], [], []]; - for (const slave of V.slaves) { - if (!assignmentVisible(slave) || slave.fuckdoll === 1 || slave.ID === V.BodyguardID || slave.ID === V.HeadGirlID || slave.fetish === "mindbroken") { - continue; - } else if (Array.isArray(V.personalAttention) && V.personalAttention.some(p => p.ID === slave.ID)) { - continue; - } - - if (V.headGirlTrainsHealth && slave.health.condition < -20) { - HGPossibleSlaves[0].push({ID: slave.ID, training: "health"}); - continue; - } - - if (slave.health.tired < 50) { - const hasParaphilia = (["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "self hating"].includes(slave.sexualFlaw)); - if (V.headGirlTrainsParaphilias && hasParaphilia) { - HGPossibleSlaves[1].push({ID: slave.ID, training: "paraphilia"}); - continue; - } - - if (V.headGirlTrainsFlaws || V.headGirlSoftensFlaws) { - if (slave.behavioralFlaw !== "none" || (slave.sexualFlaw !== "none" && !hasParaphilia)) { - if (V.headGirlSoftensFlaws) { - if (slave.devotion > 20) { - if ((slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") || (slave.sexualFlaw !== "none" && slave.sexualQuirk === "none" && !hasParaphilia)) { - HGPossibleSlaves[3].push({ID: slave.ID, training: "soften"}); - } else { - HGPossibleSlaves[3].push({ID: slave.ID, training: "flaw"}); - } - continue; - } - } else if (V.headGirlTrainsFlaws) { - HGPossibleSlaves[2].push({ID: slave.ID, training: "flaw"}); - continue; - } - } - } - - if (V.headGirlTrainsObedience && slave.devotion <= 20 && slave.trust >= -20) { - HGPossibleSlaves[4].push({ID: slave.ID, training: "obedience"}); - continue; - } - - if (V.headGirlTrainsSkills) { - if (slave.skill.oral < S.HeadGirl.skill.oral) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "oral skill"}); - } else if ((slave.skill.vaginal < S.HeadGirl.skill.vaginal) && (slave.vagina > 0) && (canDoVaginal(slave))) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "fuck skill"}); - } else if ((slave.skill.anal < S.HeadGirl.skill.anal) && (slave.anus > 0) && (canDoAnal(slave))) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "anal skill"}); - } else if (slave.skill.whoring < S.HeadGirl.skill.whoring) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "whore skill"}); - } else if ((slave.skill.entertainment < S.HeadGirl.skill.entertainment) && !isAmputee(slave)) { - HGPossibleSlaves[5].push({ID: slave.ID, training: "entertain skill"}); - } - } - } - } - V.HGTrainSlavesIDs = HGPossibleSlaves.flatten().slice(0, App.EndWeek.saVars.HGEnergy); - } else { - V.HGTrainSlavesIDs = []; + // initialize slave art + if (V.seeImages && V.seeReportImages) { + // agents and partners are not drawn; penthouse partners and the head girl's slave will be drawn via a different mechanism (since they are larger and right-aligned) + const undrawnJobs = [Job.AGENT, Job.AGENTPARTNER, ...App.Entity.facilities.penthouse.jobsNames, Job.HEADGIRLSUITE]; + const drawnSlaveIDs = V.slaves.filter(s => !undrawnJobs.includes(s.assignment)).map(s => s.ID); + // this batch renderer object will be accessible to all the facility reports + App.EndWeek.saVars.slaveArt = new App.Art.SlaveArtBatch(drawnSlaveIDs, 0); + res.append(App.EndWeek.saVars.slaveArt.writePreamble()); } /** @@ -304,7 +249,7 @@ App.EndWeek.slaveAssignmentReport = function() { * * @param array _facListArr * Multidimensional temporary array - * 0: The SC passage name or DOM function for the facility's report + * 0: The DOM function for the facility's report * 1: A facility object, or the title of the report if there is no facility object * 2: If there is no facility object, a truthy value indicating whether the facility exists * 3: If there is no facility object, the maximum capacity of the facility @@ -316,21 +261,21 @@ App.EndWeek.slaveAssignmentReport = function() { */ const facListArr = [ - ["Arcade Report", App.Entity.facilities.arcade], - ["Brothel Report", App.Entity.facilities.brothel], - ["Cellblock Report", App.Entity.facilities.cellblock], - ["Clinic Report", App.Entity.facilities.clinic], - ["Club Report", App.Entity.facilities.club], - ["Dairy Report", App.Entity.facilities.dairy], - ["Farmyard Report", App.Entity.facilities.farmyard], - ["Schoolroom Report", App.Entity.facilities.schoolroom], - ["Spa Report", App.Entity.facilities.spa], - ["Servants' Quarters Report", App.Entity.facilities.servantsQuarters], - ["Nursery Report", App.Entity.facilities.nursery], - ["Children Report", "Nursery Children", V.nursery, V.nurseryChildren], - ["Incubator Report", App.Entity.facilities.incubator], - ["Master Suite Report", App.Entity.facilities.masterSuite], - ["Penthouse Report", "The Penthouse"], + [App.EndWeek.arcadeReport, App.Entity.facilities.arcade], + [App.EndWeek.brothelReport, App.Entity.facilities.brothel], + [App.EndWeek.cellblockReport, App.Entity.facilities.cellblock], + [App.EndWeek.clinicReport, App.Entity.facilities.clinic], + [App.EndWeek.clubReport, App.Entity.facilities.club], + [App.EndWeek.dairyReport, App.Entity.facilities.dairy], + [App.Facilities.Farmyard.farmyardReport, App.Entity.facilities.farmyard], + [App.EndWeek.schoolroomReport, App.Entity.facilities.schoolroom], + [App.EndWeek.spaReport, App.Entity.facilities.spa], + [App.EndWeek.servantsQuartersReport, App.Entity.facilities.servantsQuarters], + [App.Facilities.Nursery.nurseryReport, App.Entity.facilities.nursery], + [App.Facilities.Nursery.childrenReport, "Nursery Children", V.nursery, V.nurseryChildren], + [App.EndWeek.incubatorReport, App.Entity.facilities.incubator], + [App.EndWeek.masterSuiteReport, App.Entity.facilities.masterSuite], + [App.EndWeek.penthouseReport, "The Penthouse"], [App.EndWeek.rulesAssistantReport, "Rules Assistant", V.rulesAssistantAuto], /** should be last — may reassign slaves **/ [App.EndWeek.labReport, "Lab", V.researchLab.level] ]; @@ -372,12 +317,8 @@ App.EndWeek.slaveAssignmentReport = function() { // TODO: this call should be in the individual reports' slave loops so slaves don't leak data to their coworkers if someone fucks up App.EndWeek.saVars.nextSlave(); - const reportContent = document.createElement("div"); - if (typeof facSubArr[0] === "function") { - reportContent.append(facSubArr[0]()); - } else if (typeof facSubArr[0] === "string") { - App.UI.DOM.includePassage(reportContent, facSubArr[0]); - } + // @ts-ignore - the first element of the subarray is always callable but TS isn't smart enough to figure that out + const reportContent = App.UI.DOM.makeElement("div", facSubArr[0]()); // needs to be inside the loop after the report passage to get the employees number after re-assignments const stats = _getReportElementStats(facSubArr); diff --git a/src/endWeek/standardSlaveReport.js b/src/endWeek/standardSlaveReport.js index 5ed4a6d9b43f2f8129093671ce28c516ed8e1fe3..b2792a7f077d2dc6efa6f7c54992143b99890eaa 100644 --- a/src/endWeek/standardSlaveReport.js +++ b/src/endWeek/standardSlaveReport.js @@ -1,27 +1,48 @@ /** * Generates (and returns if not silent) a standard slave report + * This is the part after the slave's job in most facilities. * @param {App.Entity.SlaveState} slave * @param {boolean} silent * @returns {HTMLElement|null} */ App.SlaveAssignment.standardSlaveReport = function(slave, silent=false) { const clothes = App.SlaveAssignment.choosesOwnClothes(slave); - - tired(slave); - - const rules = App.SlaveAssignment.rules(slave); - const diet = App.SlaveAssignment.diet(slave); - const ltEffects = App.SlaveAssignment.longTermEffects(slave); - const drugs = App.SlaveAssignment.drugs(slave); - const relationships = App.SlaveAssignment.relationships(slave); - const rivalries = App.SlaveAssignment.rivalries(slave); + const individualReport = App.SlaveAssignment.individualSlaveReport(slave); const devotion = App.SlaveAssignment.devotion(slave); if (!silent) { const content = App.UI.DOM.makeElement("div", '', "indent"); - $(content).append(clothes, rules, diet, ltEffects, drugs, relationships, rivalries, `<div class="indent">${devotion}</div>`); + $(content).append(...App.Events.spaceSentences([clothes, ...individualReport]), `<div class="indent">${devotion}</div>`); return content; } }; + +/** + * Generates the main part of the standard slave report for an individual slave. + * This is the section that's identical for all slaves regardless of facility. + * @param {App.Entity.SlaveState} slave + * @returns {Array<DocumentFragment|string>} + */ +App.SlaveAssignment.individualSlaveReport = function(slave) { + return [ + App.SlaveAssignment.rules(slave), + App.SlaveAssignment.diet(slave), + App.SlaveAssignment.longTermEffects(slave), + App.SlaveAssignment.drugs(slave), + App.SlaveAssignment.relationships(slave), + App.SlaveAssignment.rivalries(slave), + ]; +}; + +/** + * Render slave assignment report art + * @param {ParentNode} node + * @param {App.Entity.SlaveState} slave + */ +App.SlaveAssignment.appendSlaveArt = function(node, slave) { + if (V.seeImages && V.seeReportImages) { + App.UI.DOM.appendNewElement("div", node, App.EndWeek.saVars.slaveArt.render(slave), ["imageRef", "tinyImg"]); + } +}; diff --git a/src/events/PE/concubineInterview.js b/src/events/PE/concubineInterview.js index 9d64498a8df7c4bd0deebc08769dd33166690d4e..ad77e938425fd369c003c5cecc0397ebc13954e9 100644 --- a/src/events/PE/concubineInterview.js +++ b/src/events/PE/concubineInterview.js @@ -31,7 +31,7 @@ App.Events.PEConcubineInterview = class PEConcubineInterview extends App.Events. const rep = val => repX(val, "concubine", eventSlave); const speak = string => Spoken(eventSlave, string); - V.nextLink = "Next Week"; + V.nextLink = "RIE Eligibility Check"; App.Events.drawEventArt(node, eventSlave); diff --git a/src/events/RETS/reFucktoyPrefersRelative.js b/src/events/RETS/reFucktoyPrefersRelative.js new file mode 100644 index 0000000000000000000000000000000000000000..b6eec0a389e9583d61fc886c7622731eff587ca6 --- /dev/null +++ b/src/events/RETS/reFucktoyPrefersRelative.js @@ -0,0 +1,321 @@ +App.Events.RETSFucktoyPrefersRelative = class RETSFucktoyPrefersRelative extends App.Events.BaseEvent { + eventPrerequisites() { + return [ + () => V.seeIncest > 0, + ]; + } + + actorPrerequisites() { + return [ + [ // event slave + s => s.fetish !== "mindbroken", + s => s.devotion > 20, + s => s.relationship > -2, // ebonded and lower always prefer PC + s => s.trust < 95, // perfectly trusting prefer PC + s => [Job.CONCUBINE, Job.MASTERSUITE, Job.FUCKTOY].includes(s.assignment), // is assigned to fuck you + s => !["either", V.PC.genes].includes(RETSFucktoyPrefersRelative.preferredSex(s)), // but swings the other way + s => s.energy > 40, // scene assumes horniness...professionals might feel the same way, but you'd never know + ], + [ // and a relative that they prefer over you + s => s.fetish !== "mindbroken", + s => s.genes === RETSFucktoyPrefersRelative.preferredSex(getSlave(this.actors[0])), + s => areRelated(s, getSlave(this.actors[0])), + isSlaveAvailable + ] + ]; + } + + /** Return the preferred sex for this slave's partners + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ + static preferredSex(slave) { + if (slave.attrXX > (slave.attrXY + 5)) { + return "XX"; + } else if (slave.attrXY > (slave.attrXX + 5)) { + return "XY"; + } + return "either"; + } + + execute(node) { + /** @type {Array<App.Entity.SlaveState>} */ + const [fucktoy, relative] = this.actors.map(a => getSlave(a)); + const { + He, he, His, his, him + } = getPronouns(fucktoy); + const { + He2, he2, His2, his2, him2, girl2, women2 + } = getPronouns(relative).appendSuffix("2"); + + V.nextLink = "Next Week"; + + App.Events.drawEventArt(node, [fucktoy, relative], "no clothing"); + + let fuckhole = fucktoy.toyHole; + if (fuckhole === "all her holes") { + if (canDoVaginal(fucktoy)) { + fuckhole = "pussy"; + } else if (canDoAnal(fucktoy)) { + fuckhole = "ass"; + } else { + fuckhole = "mouth"; + } + } + + let t = []; + t.push(`You're enjoying`, contextualIntro(V.PC, fucktoy, "DOM"), `one evening in your office when`, contextualIntro(fucktoy, relative, "DOM"), `passes by stark naked (probably on ${his2} way to or from the shower). The glass walls of your office are designed to let you, and by extension everyone else inside, clearly see everything that happens in the rest of the Penthouse, and the comings and goings of all your slaves.`); + App.Events.addParagraph(node, t); + + t = []; + t.push(`In this case, that means ${fucktoy.slaveName} gets an eyeful of ${relative.slaveName} as ${he2} walks by. ${He} is a well-disciplined slave and ${his} reaction might have passed unnoticed if you weren't`); + switch (fuckhole) { + case "pussy": + if (V.PC.dick > 0) { + t.push(`deep inside ${his} pussy. You feel ${his} walls pulse and contract around you as ${he} cums hard.`); + } else { + t.push(`thrusting a strapon deep into ${his} pussy. You pause your thrusts as ${he} gasps and twitches, cumming hard.`); + } + break; + case "ass": + if (V.PC.dick > 0) { + t.push(`deep inside ${his} ass. You feel ${his} sphincter contract around you as ${he} cums hard.`); + } else { + t.push(`thrusting a strapon deep into ${his} ass. You pause your thrusts as ${he} gasps and twitches, cumming hard.`); + } + break; + case "mouth": + if (V.PC.dick > 0) { + t.push(`buried deep in ${his} throat. ${His} motions waver and you feel ${his} throat contract around you as ${he} cums hard.`); + } else { + t.push(`thrusting a strapon deep into ${his} throat. ${His} motions waver as ${he} twitches, cumming hard.`); + } + break; + case "boobs": + if (V.PC.dick > 0) { + t.push(`receiving a boobjob from ${him}. ${His} motions waver and ${he} gasps aloud as ${he} cums hard.`); + } else { + t.push(`groping ${his} boobs. ${He} gasps and twitches, cumming hard.`); + } + break; + case "dick": + t.push(`riding ${him}. ${He} groans as ${he} unexpectedly cums hard, filling you up.`); + if (canImpreg(V.PC, fucktoy)) { + t.push(`You wonder briefly if ${he} might have just gotten you pregnant.`); + knockMeUp(V.PC, 5, 2, fucktoy.ID); + } + break; + default: + throw `Unexpected toyhole ${fuckhole}`; + } + t.push(`You have a lot of experience with slaves getting off, and you're pretty sure that reaction wasn't just from your use of ${him}, but from ogling the nude form of ${relative.slaveName} at the same time.`); + App.Events.addParagraph(node, t); + + t = []; + t.push(`You decide to test your fucktoy, and ask ${him} directly whether ${he} was turned on by ${his} ${relativeTerm(fucktoy, relative)} ${relative.slaveName}.`); + if (fucktoy.trust < 0) { // illusion of choice...he'll always tell you, just for a different reason + t.push(`${He} knows better than to lie to you, and replies, terrified, that ${he} was.`); + } else { + t.push(`${He} trusts you enough to tell you the truth without reservation, and replies that ${he} was.`); + } + App.Events.addParagraph(node, t); + + t = []; + t.push(`Pushing further, you ask ${him} what turns ${him} on so much about ${relative.slaveName} that ${he}'d cum from looking at ${him2} but not from looking at you.`); + t.push(`Knowing that it's a potentially dangerous answer, but unwilling to lie to you, ${he} responds`); + if (!canTalk(fucktoy)) { + t.push(`with nervous gestures, indicating that`); + } else { + t.push(`nervously that`); + } + t.push(`${he} loves ${his} ${relativeTerm(fucktoy, relative)}, and besides,`); + if (RETSFucktoyPrefersRelative.preferredSex(fucktoy) === "XX") { // likes women + if (relative.vagina > -1 && V.PC.vagina === -1) { + t.push(`${he2} has a pretty pussy, and you don't.`); + } else if (relative.boobs > 300 && V.PC.boobs < 300) { + t.push(`${he2} has great tits, and you don't.`); + } else if (relative.boobs > V.PC.boobs * 1.2) { + t.push(`${he2} has way bigger tits than you do.`); + } else { + t.push(`${he2}'s a woman, and you aren't.`); // meh + } + } else { // likes men + if (relative.dick > V.PC.dick) { + if (V.PC.dick === 0) { + t.push(`${he2} has a cock, and ${he} loves cocks.`); + } else { + t.push(`${he2} has a bigger cock than you do.`); + } + } else if (relative.balls > 0 && V.PC.balls === 0) { + t.push(`${he2} has balls, and you don't.`); + } else if (relative.boobs === 0 && V.PC.boobs >= 300) { + t.push(`${he2} has a manly, muscular chest.`); + } else { + t.push(`${he2}'s a man, and you aren't.`); // meh + } + } + App.Events.addParagraph(node, t); + + t = []; + t.push(`You consider this for a moment...it's objectively a true difference between you and ${relative.slaveName}, and that reason lines up with what you ${fucktoy.attrKnown ? "know" : "have guessed"} about ${his} sexuality already.`); + if (App.Utils.sexAllowed(fucktoy, relative)) { + t.push(`In fact, you're pretty sure you've seen the two of them specifically going at it fairly vigorously before.`); + } + t.push(`${His} higher attraction to ${women2} isn't necessarily a problem...${he}'s been plenty attentive to your sexual needs even if ${he}'s not necessarily turned on by your body...but at the same time, you could probably do something about it if you wanted.`); + fucktoy.attrKnown = 1; // now you know + App.Events.addParagraph(node, t); + + App.Events.addResponses(node, [ + new App.Events.Result(`Punish ${him}`, punish), + new App.Events.Result(`Condition ${him} to appreciate ${RETSFucktoyPrefersRelative.preferredSex(fucktoy) === "XX" ? "men" : "women"}`, condition), + new App.Events.Result(`Call ${relative.slaveName} back and have a threesome`, threesome), + ]); + + function punish() { + const frag = document.createDocumentFragment(); + t = []; + t.push(`You push ${fucktoy.slaveName} face-down over your desk and sternly inform that ${he} has only one objective when serving as your fucktoy: bringing you pleasure. To punctuate each phrase, you strike ${his} buttocks with your hand, leaving a red mark. ${He} is not to be distracted when a ${girl2} ${he} likes walks by, or when you get a call, or for any other reason unless you specifically tell ${him} to stop. And ${he} is certainly not allowed to cum before you without permission.`); + App.Events.addParagraph(frag, t); + + t = []; + t.push(`${He} meekly acknowledges your instructions and <span class="devotion inc">vows to do better</span> for you, and you can tell that ${he} <span class="trust dec">fears</span> a repeat of this lesson.`); + fucktoy.devotion += 4; + fucktoy.trust -= 4; + if (fucktoy.fetish === "submissive" && fucktoy.fetishKnown === 1) { + t.push(`Still, when you glance down, you catch the faintest hint of a smile; it seems your punishment appealed to him, <span class="fetish inc">reinforcing ${his} submission</span> to your will.`); + fucktoy.fetishStrength += 10; + } else { + t.push(`${His} suppression of ${his} attraction naturally leads to a <span class="stat drop">decrease in ${his} libido</span> and <span class="stat drop">attraction to ${women2}.</span>`); + fucktoy.energy -= 3; + if (RETSFucktoyPrefersRelative.preferredSex(fucktoy) === "XX") { + fucktoy.attrXX -= 5; + } else { + fucktoy.attrXY -= 5; + } + } + App.Events.addParagraph(frag, t); + + if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + t = []; + t.push(`Whispers spread through your arcology about how seriously you take your slaves' <span class="reputation inc">duty to professional detachment.</span>`); + FutureSocieties.Change("SlaveProfessionalism", 3); + App.Events.addParagraph(frag, t); + } + + return [frag]; + } + + function condition() { + const {himA} = getPronouns(assistant.pronouns().main).appendSuffix('A'); + t = []; + t.push(`While ${fucktoy.slaveName} kneels before you, ready to resume ${his} service to you, you inform ${him} that ${he}'ll get some help to see things the right way. You summon ${V.assistant.name} and instruct ${himA} to begin a conditioning regimen to encourage ${fucktoy.slaveName} to engage sexually with`); + if (RETSFucktoyPrefersRelative.preferredSex(fucktoy) === "XX") { + t.push(`<span class="improvement">men rather than women.</span>`); + fucktoy.attrXX -= 10; + fucktoy.attrXY += 15; + } else { + t.push(`<span class="improvement">women rather than men.</span>`); + fucktoy.attrXX += 15; + fucktoy.attrXY -= 10; + } + t.push(`${fucktoy.slaveName} is <span class="trust dec">apprehensive</span> of conditioning but <span class="devotion inc">thankful</span> that you're willing to help ${him} this way.`); + fucktoy.trust -= 1; + fucktoy.devotion += 1; + return t; + } + + function threesome() { + const frag = document.createDocumentFragment(); + const enjoysIncest = s => s.sexualQuirk === "perverted" || s.sexualQuirk === "sinful"; + + t = []; + t.push(`You're not done with ${fucktoy.slaveName} yet, but what good is maintaining a stable of sex slaves, if you don't have a threesome every now and then? You have your assistant call ${relative.slaveName} back to your office. ${He2} arrives in just a couple of seconds, finding ${fucktoy.slaveName} blushing with embarrassment. You inform ${him2} that you'll be using ${him2} with ${fucktoy.slaveName}.`); + if (enjoysIncest(relative) || relative.relationshipTarget === fucktoy.ID) { + t.push(`${He2} grins, clearly aroused at the thought, and comes around the desk towards the two of you.`); + } else if (relative.devotion > 50) { + t.push(`${His2} eyes widen slightly, but ${he2} is devoted enough to commit fully to whatever you ask of ${him2}.`); + } else { + t.push(`${He2} stops in ${his2} tracks, clearly disturbed by what's about to happen, until you repeat your order.`); + } + App.Events.addParagraph(frag, t); + + /* Double pen the fucktoy if she prefers dudes and can take it */ + const doublePenFucktoy = RETSFucktoyPrefersRelative.preferredSex(fucktoy) === "XY" && (canDoAnal(fucktoy) || canDoVaginal(fucktoy)) && canPenetrate(relative); + /* Double pen the relative if the fucktoy prefers chicks and the relative can take it */ + const doublePenRelative = RETSFucktoyPrefersRelative.preferredSex(fucktoy) === "XX" && (canDoAnal(relative) || canDoVaginal(relative)) && canPenetrate(fucktoy); + /* If double pen is not possible or desirable, and EITHER slave can ride you, double cowgirl on the player, so the slaves face each other */ + const doubleCowgirl = canDoAnal(fucktoy) || canDoVaginal(fucktoy) || canDoAnal(relative) || canDoVaginal(relative); + if (doublePenFucktoy || doublePenRelative) { + const recipient = doublePenFucktoy ? fucktoy : relative; + const copenetrator = doublePenFucktoy ? relative : fucktoy; + const {heR, himR, hisR} = getPronouns(recipient).appendSuffix('R'); + t = []; + t.push(`You lay back on your couch while ${recipient.slaveName} mounts you, with ${copenetrator.slaveName} getting ready behind ${himR}.`); + if (canDoAnal(recipient) && canDoVaginal(recipient)) { + t.push(`While ${heR} slides your ${V.PC.dick > 0 ? "dick" : "strapon"} into ${hisR} waiting pussy, ${copenetrator.slaveName} pushes into ${hisR} ass. You continue like this for a bit, before swapping positions with ${copenetrator.slaveName}.`); + t.push(VCheck.Both(recipient, 2, 2)); + } else { + const anal = canDoAnal(recipient); + t.push(`It's a bit tight in ${recipient.slaveName}'s ${anal ? 'ass' : 'pussy'}, with both ${copenetrator.slaveName} and your ${V.PC.dick > 0 ? "dick" : "strapon"} sharing the space, but you make it work.`); + if (anal && recipient.anus < 3) { + t.push(VCheck.Anal(recipient, 2)); + t.push(`Having both of you in ${hisR} tight ass <span class="lime">stretches it out</span> a bit.`); + recipient.anus++; + } else if (!anal && recipient.vagina < 3) { + t.push(VCheck.Vaginal(recipient, 2)); + t.push(`Having both of you in ${hisR} tight pussy <span class="lime">stretches it out</span> a bit.`); + recipient.vagina++; + } + } + t.push(`It takes a few moments to find a rythm, but ${fucktoy.slaveName} is excited that ${he} gets to do this with ${his} ${getWrittenTitle(fucktoy)} and ${his} ${relativeTerm(fucktoy, relative)}. It's easy to enjoy the change of pace, especially with ${recipient.slaveName} writhing on your ${V.PC.dick > 0 ? `dick` : `strapon`}.`); + App.Events.addParagraph(frag, t); + } else if (doubleCowgirl) { + const onDick = canDoVaginal(fucktoy) ? fucktoy : canDoVaginal(relative) ? relative : canDoAnal(fucktoy) ? fucktoy : relative; // whee + const onMouth = onDick === fucktoy ? relative : fucktoy; + const {heD} = getPronouns(onDick).appendSuffix('D'); + const {himM, heM, hisM} = getPronouns(onMouth).appendSuffix('M'); + t = []; + t.push(`You lay back on your couch ${V.PC.dick < 1 ? `with your strapon attached ` : ``}and have ${onDick.slaveName} climb onto you, facing you while ${heD} rides.`); + t.push(VCheck.Simple(onDick, 1)); + t.push(`Meanwhile, you signal to ${onMouth.slaveName} that you want to taste ${himM}, and ${heM} straddles your face, facing ${hisM} ${relativeTerm(onMouth, onDick)}.`); + t.push(`Naturally, ${fucktoy.slaveName} starts a makeout session while ${he} and ${relative.slaveName} ride you. It doesn't take long for moans to turn to screams.`); + App.Events.addParagraph(frag, t); + } else { + /* FFS, really? You have two sex slaves here, one of whom is your *personal fucktoy*, and neither can do anything but oral? Fine, have an oral triangle. */ + t = []; + t.push(`The three of you lie down together, as you order ${fucktoy.slaveName} to continue servicing you orally. You tell ${relative.slaveName} to`); + if (fucktoy.dick > 0) { + t.push(`give ${fucktoy.slaveName} a blowjob`); + } else if (fucktoy.vagina > 0) { + t.push(`eat ${fucktoy.slaveName} out`); + } else { + t.push(`give ${fucktoy.slaveName} a rimjob`); // I guess? + } + t.push(`while you get a taste of ${him2}. It takes a few moments to find a rythm, but ${fucktoy.slaveName} is excited that ${he} gets to do this with ${his} ${getWrittenTitle(fucktoy)} and ${his} ${relativeTerm(fucktoy, relative)}, and it's not long before all of you have reached orgasm.`); + seX(fucktoy, "oral", relative, "oral", 1); + App.Events.addParagraph(frag, t); + } + + t = []; + t.push(`The three of you collapse into a warm, satisfied pile of bodies. ${fucktoy.slaveName} is <span class="devotion inc">grateful</span> that you indulged ${his} fantasy, and <span class="trust inc">trusts</span> that you'll continue to keep ${his} satisfaction in mind.`); + fucktoy.devotion += 2; + fucktoy.trust += 2; + + /* did one or both of them *really* have fun? */ + if (enjoysIncest(fucktoy) && enjoysIncest(relative)) { + t.push(`On top of it all, it turns out that ${fucktoy.slaveName} and ${relative.slaveName} both really enjoy breaking the taboo of incest, and they've <span class="devotion inc">grown closer to you</span> from this encounter.`); + fucktoy.devotion += 4; + relative.devotion += 4; + } else if (enjoysIncest(fucktoy)) { + t.push(`On top of it all, it turns out that ${he} really enjoys breaking the taboo of incest, and ${he}'s <span class="devotion inc">grown closer to you</span> from this encounter.`); + fucktoy.devotion += 3; + } else if (enjoysIncest(relative)) { + t.push(`On top of it all, it turns out that ${relative.slaveName} really enjoys breaking the taboo of incest, and ${he2}'s <span class="devotion inc">grown closer to you</span> from this encounter.`); + relative.devotion += 3; + } + App.Events.addParagraph(frag, t); + + return [frag]; + } + } +}; diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js index f1317ff7fbd749f602edf5ca4ddecb6396f35336..2762760c2dd46d7c119645cdded41c73b26d82a3 100644 --- a/src/events/randomEvent.js +++ b/src/events/randomEvent.js @@ -49,6 +49,7 @@ App.Events.getIndividualEvents = function() { new App.Events.RETSSiblingTussle(), new App.Events.RETSSimpleAssault(), + new App.Events.RETSFucktoyPrefersRelative(), ]; }; diff --git a/src/events/scheduled/murderAttempt.js b/src/events/scheduled/murderAttempt.js index daed121f4a5bcf3f971c75fc1bd94de2e11646be..dd5b19429065860bc9c246220beded15c9d10905 100644 --- a/src/events/scheduled/murderAttempt.js +++ b/src/events/scheduled/murderAttempt.js @@ -218,7 +218,7 @@ App.Events.murderAttempt = function() { function bgDefense(fragment, paragraphStart) { paragraphStart.push(`Before you can react, the ${woman} draws a weapon and`); - if (S.Bodyguard.muscles > 95 || S.Bodyguard.muscles < -30 || S.Bodyguard.boobs > 4000 || S.Bodyguard.weight > 130 || S.Bodyguard.health.tired > 30 || S.Bodyguard.belly >= 100000) { // BG is too big or weak to draw fast enough to matter + if ((S.Bodyguard.muscles > 95 && S.Bodyguard.height < 185) || S.Bodyguard.muscles < -30 || S.Bodyguard.boobs > 4000 || S.Bodyguard.weight > 130 || S.Bodyguard.health.tired > 30 || S.Bodyguard.belly >= 100000) { // BG is too big or weak to draw fast enough to matter paragraphStart.push("shoots you through the heart; having a bodyguard who cannot actually defend you might have been a poor choice in retrospect."); paragraphStart.push(`With you dead, ${S.Bodyguard.slaveName} knows ${heBG} has to put this to rest.`); if (deadliness(S.Bodyguard) > 1) { @@ -230,8 +230,12 @@ App.Events.murderAttempt = function() { gameOver(fragment); } else { paragraphStart.push(paragraphStart.pop() + ","); - if (deadliness(S.Bodyguard) > 1) { - paragraphStart.push(`just a little quicker, ${S.Bodyguard.slaveName} draws ${hisBG} own, shooting ${him} in the shoulder. Screaming in pain, ${he} drops ${his} weapon and ${S.Bodyguard.slaveName} swiftly moves to secure ${him}.`); + if (deadliness(S.Bodyguard) > 1 || (S.Bodyguard.muscles > 95 && S.Bodyguard.height >= 185)) { + if (deadliness(S.Bodyguard) > 1) { + paragraphStart.push(`just a little quicker, ${S.Bodyguard.slaveName} draws ${hisBG} own, shooting ${him} in the shoulder. Screaming in pain, ${he} drops ${his} weapon and ${S.Bodyguard.slaveName} swiftly moves to secure ${him}.`); + } else { + paragraphStart.push(`to your surprise and later annoyance, find ${S.Bodyguard.slaveName} has used ${hisBG} impressive strength to flip your desk at ${him}. Crushed beneath the heavy piece of furniture and writhing in pain, ${he} is in no position to take any further actions against you.`); + } App.Events.addParagraph(fragment, paragraphStart); let r = []; r.push(`After the initial shock has waned and you ready to begin interrogating ${him}, ${he} clamps ${his} jaw down hard, foams for several seconds and dies. Seems like whomever sent ${him} cares a lot about not being tracked down. And indeed, all the already sparse information about ${companyName} is gone and any leads you may have had are useless. You task ${V.assistant.name} to continue searching for the one behind this, but you don't expect anything to come out of it. Someone wanting you dead isn't all that surprising, and without any idea as to why, there are thousands of small groups and individuals who want arcology owners, owners like you, or maybe just you personally, dead.`); 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/farmyard/reports/farmyardReport.js b/src/facilities/farmyard/reports/farmyardReport.js index 7d646bf9f79726cfb9e0ee169169e07ea67e87b7..defb1d0e84996156141e633161ea523361e51399 100644 --- a/src/facilities/farmyard/reports/farmyardReport.js +++ b/src/facilities/farmyard/reports/farmyardReport.js @@ -254,14 +254,10 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { if (V.showEWD) { const farmerEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", farmerEntry, App.Art.SlaveArtElement(Farmer, 0, 0), ["imageRef", "tinyImg"]); - } - + App.SlaveAssignment.appendSlaveArt(farmerEntry, Farmer); farmerEntry.append(App.EndWeek.favoriteIcon(Farmer), " "); $(farmerEntry).append(`<span class="slave-name">${SlaveFullName(Farmer)}</span> is serving as the Farmer.`); - $(farmerEntry).append(App.SlaveAssignment.standardSlaveReport(Farmer, false)); + farmerEntry.append(App.SlaveAssignment.standardSlaveReport(Farmer, false)); } else { App.SlaveAssignment.standardSlaveReport(Farmer, true); } @@ -353,11 +349,7 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { if (V.showEWD) { const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); - - if (V.seeImages && V.seeReportImages) { - App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]); - } - + App.SlaveAssignment.appendSlaveArt(slaveEntry, slave); slaveEntry.append(App.EndWeek.favoriteIcon(slave), " "); $(slaveEntry).append(`<span class="slave-name">${SlaveFullName(slave)}</span> `); @@ -379,7 +371,7 @@ App.Facilities.Farmyard.farmyardReport = function farmyardReport() { const farmhandContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); $(farmhandContent).append(App.SlaveAssignment.workTheFarm(slave)); - $(slaveEntry).append(App.SlaveAssignment.standardSlaveReport(slave, false)); + slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); } else { // silently discard return values App.SlaveAssignment.workTheFarm(slave); App.SlaveAssignment.standardSlaveReport(slave, true); diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js index 5cf64c536cb0cac99d29c29cd4c437566afaf2a2..3b3b20e784bf0b1aaef5f2cc5d8d66b181a5d3d7 100644 --- a/src/facilities/pit/pit.js +++ b/src/facilities/pit/pit.js @@ -46,7 +46,6 @@ App.Facilities.Pit.pit = function() { link.append(App.UI.DOM.passageLink(`Decommission ${V.pit.name}`, "Main", () => { V.pit = null; - V.pit.fighterIDs = []; App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Market, "Pit", "Markets"); })); diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css index ef081dc3f8d3afa249f9f4b931ca3df74a8597e3..211a08b16a7bce2b0848c03d0e56c8ba7894f27a 100644 --- a/src/gui/css/mainStyleSheet.css +++ b/src/gui/css/mainStyleSheet.css @@ -179,7 +179,7 @@ img.paperdoll { .chocolate, .chocolate a { color: chocolate } .saddlebrown, .saddlebrown a { color: saddlebrown } .teal, .teal a { color: teal } -.yellow, .yellow a, .noteworthy, .noteworthy a, .paraphilia.gain, .paraphilia.gain a, .devotion.ambivalent, .devotion.ambivalent a, .trust.fearful, .trust.fearful a { color: yellow } +.yellow, .yellow a, .noteworthy, .noteworthy a, .paraphilia.gain, .paraphilia.gain a, .devotion.ambivalent, .devotion.ambivalent a, .trust.fearful, .trust.fearful a, .job.change { color: yellow } .yellowgreen, .yellowgreen a, .cash.inc, .cash.inc a, .cash, .cash a { color: yellowgreen } .white a { color: white } diff --git a/src/interaction/siRules.js b/src/interaction/siRules.js index 36e60ce7c78167a305fae5064d9f92661ac6933a..8f11eafa8bc344259ae0d4acdd2f54afdaa21fbb 100644 --- a/src/interaction/siRules.js +++ b/src/interaction/siRules.js @@ -21,9 +21,9 @@ App.UI.SlaveInteract.rules = function(slave) { function updateBreederLink(breeder, exclude) { p = document.createElement('p'); - const exempt = slave[exclude] ? "Exempt" : "Include"; + const exempt = slave[exclude] ? "Include" : "Exempt"; - p.append(`Will be bred by ${breeder} when fertile. `); + p.append(`Will ${slave[exclude] ? "not " : ""}be bred by ${breeder} when fertile. `); p.append( App.UI.DOM.link(`${exempt} ${him}`, () => { slave[exclude] = slave[exclude] ^ 1; // switch 0 and 1 diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index f0d83440ac5c590323d4e24a640ae73f2efeeba3..2dde6978006d862b17d7bd4a7295547e699e1052 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -149,7 +149,7 @@ globalThis.DefaultRules = (function() { if (job.checkRequirements(slave).length !== 0) { // no message to prevent spam removeAssignment(); - } else if (!job.facility.hasFreeSpace) { + } else if (!job.facility.hasFreeSpace && slave.assignment !== rule.setAssignment) { r += getAssignmentDescription({ rule, slave, assignmentResult: "unable", append: " because it was full" @@ -1166,15 +1166,21 @@ globalThis.DefaultRules = (function() { */ function ProcessDrugs(slave, rule) { // First we check AssetGrowthDrugs, then if 1. no growth targets or 2. targets have been hit, we check other drugs. + if (slave.indentureRestrictions === 2) { + return; + } if ((slave.drugs === "super fertility drugs" || slave.drugs === "fertility drugs") && isFertile(slave)) { r += `<br>${slave.slaveName} is on ${slave.drugs} and will not be considered for drug enhancement until that regime is complete.`; ProcessOtherDrugs(slave, rule); - } else if (slave.indentureRestrictions > 1 || (rule.growth.boobs === null && rule.growth.butt === null && rule.growth.lips === null && rule.growth.dick === null && rule.growth.balls === null)) { + return; + } else if (rule.growth.boobs === null && rule.growth.butt === null && rule.growth.lips === null && rule.growth.dick === null && rule.growth.balls === null) { ProcessOtherDrugs(slave, rule); + return; } - /** @typedef {"lips" | "boobs" | "butt" | "dick" | "balls"} DrugTarget */ + + /** @typedef {"lips" | "boobs" | "butt" | "dick" | "balls"} DrugTarget */ // Asset Growth const growthDrugs = new Set(["breast injections", "breast redistributors", "butt injections", "butt redistributors", "hyper breast injections", "hyper butt injections", "hyper penis enhancement", "hyper testicle enhancement", "intensive breast injections", "intensive butt injections", "intensive penis enhancement", "intensive testicle enhancement", "lip atrophiers", "lip injections", "penis atrophiers", "penis enhancement", "testicle atrophiers", "testicle enhancement"]); @@ -1313,7 +1319,7 @@ globalThis.DefaultRules = (function() { r += `that is the only part of ${his} body that does not meet the targeted size.`; } } - } else if (growthDrugs.has(slave.drugs)) { + } else if (growthDrugs.has(slave.drugs) && slave.drugs !== rule.drug) { r += `<br>${slave.slaveName}'s body has met all relevant growth targets, so ${his} pharmaceutical regime has been ended.`; ProcessOtherDrugs(slave,rule); } @@ -1325,7 +1331,7 @@ globalThis.DefaultRules = (function() { */ function ProcessOtherDrugs(slave, rule) { // Other Drugs - if (slave.indentureRestrictions < 2 && rule.drug !== null && slave.drugs !== rule.drug) { + if (rule.drug !== undefined && rule.drug !== null && slave.drugs !== rule.drug) { let flag = true; switch (rule.drug) { case "anti-aging cream": diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index 3cf15015d3fa36147fa0f9063df63f57f415a021..8fa439431bee7656bf5e06ddf22e294c43372a04 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -1811,26 +1811,28 @@ globalThis.FResultArray = (function() { * @param {App.Entity.SlaveState} slave */ function calcWorksWithRelatives(slave) { - V.slaves.forEach(potentialRel => { - if (isParentP(slave, potentialRel) && sameAssignmentP(slave, potentialRel)) { - adjustFResult(`Works with their parent(s)`, 1); - if (incestBonus) { - adjustFResult(`Works with their parent(s): incest bonus`, 1); + for (const potentialRel of V.slaves) { + if (sameAssignmentP(slave, potentialRel)) { + if (isParentP(slave, potentialRel)) { + adjustFResult(`Works with their parent(s)`, 1); + if (incestBonus) { + adjustFResult(`Works with their parent(s): incest bonus`, 1); + } } - } - if (isParentP(potentialRel, slave) && sameAssignmentP(slave, potentialRel)) { - adjustFResult(`Works with their kid(s)`, 1); - if (incestBonus) { - adjustFResult(`Works with their kid(s): incest bonus`, 1); + if (isParentP(potentialRel, slave)) { + adjustFResult(`Works with their kid(s)`, 1); + if (incestBonus) { + adjustFResult(`Works with their kid(s): incest bonus`, 1); + } } - } - if (areSisters(slave, potentialRel) > 0 && sameAssignmentP(slave, potentialRel)) { - adjustFResult(`Works with their sibling(s)`, 1); - if (incestBonus) { - adjustFResult(`Works with their sibling(s): incest bonus`, 1); + if (areSisters(slave, potentialRel) > 0) { + adjustFResult(`Works with their sibling(s)`, 1); + if (incestBonus) { + adjustFResult(`Works with their sibling(s): incest bonus`, 1); + } } } - }); + } } /** 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/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index b30e47e753eae6a327a09ff866b5ca509949f187..2ab584e145ef490b18d00262d9e2cd330ad66fd1 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -4665,7 +4665,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = }); - if (App.Entity.facilities.arcade.hasFreeSpace || V.arcadeUpgradeFuckdolls === 2) { + if (App.Entity.facilities.arcade.hasFreeSpace || V.arcadeUpgradeFuckdolls > 1) { choice({ linkName: `Send ${him} straight to the Arcade`, result(slave) { @@ -4678,7 +4678,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(S.HeadGirl.slaveName); } r.push(`to get ${slave.slaveName} set up in ${V.arcadeName}. The new slave does not know what ${V.arcadeName} is, not really, and ${he} doesn't know what being set up there means, either. ${He}'ll be confined inside a small space, not too different from the indignities ${he}'s suffered already. It's only when the restraints lock into place that ${he}'ll understand ${his} doom. ${His} mouth will be forced open and presented at one wall of ${V.arcadeName}, and ${his} ass will protrude from its other side, ${his} holes available for public relief at both ends. ${He}'ll probably refuse to believe the truth, until the first cockhead enters ${his} mouth${(slave.vagina > -1) ? `, parts ${his} pussylips,` : ``} or presses against ${his} poor anus.`); - if (V.arcade <= App.Entity.facilities.arcade.employeesIDs().size) { + if (!App.Entity.facilities.arcade.hasFreeSpace) { r.push(`Mere`); if (V.showInches === 2) { r.push(`yards`); 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/pregmod/incubatorReport.tw b/src/pregmod/incubatorReport.tw deleted file mode 100644 index d4c6d6d4bcd0f1537afd2e022fcfa07a36fdb145..0000000000000000000000000000000000000000 --- a/src/pregmod/incubatorReport.tw +++ /dev/null @@ -1,829 +0,0 @@ -:: Incubator Report [nobr] - -<<set $readySlaves = 0>> -<<if $incubatorImprintSetting == 0>><<set $incubatorImprintSetting = "trust">><</if>> - -<<for _inc = 0; _inc < $tanks.length; _inc++>> - <<setLocalPronouns $tanks[_inc]>> - <<set $tanks[_inc].birthWeek += 1>> - <<if $tanks[_inc].birthWeek >= 52>> - <<set $tanks[_inc].birthWeek = 0>> - <<if $seeAge == 1>> - <<set $tanks[_inc].actualAge++, $tanks[_inc].ovaryAge++>> - <</if>> - <</if>> - <<if $tanks[_inc].growTime > 0>> - <<set $tanks[_inc].growTime -= $incubatorUpgradeSpeed>> - <br>@@.pink;<<print $tanks[_inc].slaveName>>'s@@ growth is currently being accelerated. $He <<if Math.round($tanks[_inc].growTime/$incubatorUpgradeSpeed) <= 0>>is @@.lime;ready for release.@@ $He will be ejected from $his tank upon your approach<<else>>will be ready for release in about <<print Math.round($tanks[_inc].growTime/$incubatorUpgradeSpeed)>> weeks<</if>>. - <<else>> - @@.pink;$tanks[_inc].slaveName@@ is @@.lime;ready for release.@@ $He will be ejected from $his tank upon your approach. - <<set $readySlaves = 1>> - <</if>> - - <<if $incubatorUpgradeWeight == 1>> - <br> - <<if $incubatorWeightSetting == 1>> - <<if $tanks[_inc].weight < 200>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].weight += 70>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].weight += 40>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].weight += 20>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].weight += 10>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].weight += 5>> - <</if>> - <</if>> - The weight monitoring systems are overloading $his intake causing @@.red;rapid weight gain.@@ - <<elseif $incubatorWeightSetting == 2>> - <<if $tanks[_inc].weight > 10>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].weight -= 30>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].weight -= 10>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].weight -= 5>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].weight -= 2>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].weight -= 1>> - <</if>> - The weight monitoring systems detect $he is overweight and @@.green;decrease $his caloric intake.@@ - <<elseif $tanks[_inc].weight < -10>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].weight += 30>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].weight += 10>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].weight += 5>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].weight += 2>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].weight += 1>> - <</if>> - The weight monitoring systems detect $he is underweight and @@.green;increase $his caloric intake.@@ - <<else>> - $He is @@.lime;currently at a healthy weight;@@ efforts will be made to maintain it. - <</if>> - <<elseif $incubatorWeightSetting == 0>> - <<if $tanks[_inc].weight > -100>> - $His developing body @@.red;quickly sheds its gained weight.@@ - <<set $tanks[_inc].weight -= 40>> - <</if>> - <</if>> - <<else>> - <<if $tanks[_inc].weight > -100>> - $His developing body @@.red;quickly sheds its gained weight.@@ - <<set $tanks[_inc].weight -= 40>> - <</if>> - <</if>> - - <<if $incubatorUpgradeMuscles == 1>> - <br> - <<if $incubatorMusclesSetting == 2>> - <<if $tanks[_inc].muscles < 100>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].muscles += 70>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].muscles += 40>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].muscles += 20>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].muscles += 10>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].muscles += 5>> - <</if>> - <</if>> - The strength monitoring systems are overloading $him with steroids causing @@.green;rapid muscle development.@@ - <<elseif $incubatorMusclesSetting == 1>> - <<if $tanks[_inc].muscles > 10>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].muscles -= 30>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].muscles -= 10>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].muscles -= 5>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].muscles -= 2>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].muscles-->> - <</if>> - The strength monitoring systems detect $he is overly muscular and @@.green;decrease $his steroid dosage.@@ - <<elseif $tanks[_inc].muscles < -10>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].muscles += 30>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].muscles += 10>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].muscles += 5>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].muscles += 2>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].muscles++>> - <</if>> - The strength monitoring systems detect $he is weak and @@.green;increase $his steroid dosage.@@ - <<else>> - $He has @@.lime;a healthy musculature;@@ efforts will be made to maintain it. - <</if>> - <<elseif $incubatorMusclesSetting == 0>> - <<if $tanks[_inc].muscles > -100>> - $His developing body @@.red;quickly loses its gained muscle.@@ - <<set $tanks[_inc].muscles -= 40>> - <</if>> - <</if>> - <<else>> - <<if $tanks[_inc].muscles > -100>> - $His developing body @@.red;quickly loses its gained muscle.@@ - <<set $tanks[_inc].muscles -= 40>> - <</if>> - <</if>> - - <<if $incubatorUpgradeGrowthStims == 1 && $incubatorGrowthStimsSetting != 0>> - <br> - <<set _heightLimit = Math.trunc(Math.clamp((Height.mean($tanks[_inc]) * 1.25),0,274))>> - <<set _heightLimitAge = Height.forAge($tanks[_inc].height, $tanks[_inc])>> - <<if $tanks[_inc].geneticQuirks.dwarfism == 2 && $tanks[_inc].geneticQuirks.gigantism != 2>> - <<set _heightLimit = Math.min(_heightLimit, 160)>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* - ** NCS should block physical growth beyond that of a toddler, but some players might like - ** a little more or less. So using $minimumSlaveAge or 8, whichever is lesser. - */ - <<set _limitAge = Math.min(8, $minimumSlaveAge)>> - <<set _heightLimitAge = Height.forAge($tanks[_inc].height, _limitAge, $tanks[_inc].genes)>> - <<set _heightLimit = _heightLimitAge>> - <<elseif ($tanks[_inc].geneticQuirks.neoteny === 2 && $tanks[_inc].actualAge > 12)>> - <<set _heightLimitAge = Height.forAge($tanks[_inc].height, 12, $tanks[_inc].genes)>> - <<set _heightLimit = _heightLimitAge>> - <</if>> - <<if $tanks[_inc].height >= _heightLimit>> - The monitoring system detects $his body is not able to support further increases in height, so it carefully regulates stimulant injections to @@.yellow;maintain $his current stature.@@ - <<set $tanks[_inc].height = _heightLimit>> - <<elseif $incubatorGrowthStimsSetting == 2>> - <<if $tanks[_inc].geneMods.NCS == 1>> - The monitoring system floods $his body with growth stimulants, but $his @@.orange;NCS prevents an increase in $his growth rate.@@ - <<set $tanks[_inc].height = _heightLimitAge>> - <<else>> - The monitoring system floods $his body with growth stimulants, causing @@.green;a sharp increase in growth rate.@@ - <<if $incubatorWeightSetting >= 1 && $incubatorMusclesSetting <= 1 && $incubatorReproductionSetting <= 1>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].height += random(3,6)>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].height += random(2,5)>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].height += random(1,4)>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].height += random(1,3)>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].height += random(1,2)>> - <</if>> - <<else>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].height += random(2,5)>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].height += random(1,4)>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].height += random(1,3)>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].height += random(1,2)>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].height += random(0,1)>> - <</if>> - <</if>> - <</if>> - <<elseif $incubatorGrowthStimsSetting == 1>> - <<if $tanks[_inc].geneMods.NCS == 1>> - The monitoring system detects $he is near the expected height for $his @@.orange;NCS@@ condition, so it carefully regulates stimulant injections to @@.yellow;maintain $his current stature.@@ - <<set $tanks[_inc].height = _heightLimitAge>> - <<elseif $tanks[_inc].height > _heightLimitAge>> - The monitoring systems detect $he is near the expected height, so it carefully regulates stimulant injections to @@.yellow;maintain $his current stature.@@ - <<if random(1,10) == 10>> - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].height += random(1,4)>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].height += random(1,3)>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].height += random(1,2)>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].height += random(0,1)>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].height += random(0,1)>> - <</if>> - <</if>> - <<else>> - The monitoring systems detect $his body is capable of developing more rapidly and @@.green;increase $his growth stimulant dosage.@@ - <<if $incubatorUpgradeSpeed == 52>> - <<set $tanks[_inc].height += random(1,4)>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<set $tanks[_inc].height += random(1,3)>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<set $tanks[_inc].height += random(1,2)>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<set $tanks[_inc].height += random(0,1)>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<set $tanks[_inc].height += random(0,1)>> - <</if>> - <</if>> - <</if>> - <<set $tanks[_inc].height = Math.clamp($tanks[_inc].height, 0, _heightLimit)>> - <<else>> - <br> - With the growth stimulant injections offline, $his body is left to develop naturally. - <</if>> - - <<if $incubatorUpgradeReproduction == 1>> - <br> - <<set _rearQuirk = $tanks[_inc].geneticQuirks.rearLipedema == 2 ? 2 : 1>> - <<if $incubatorReproductionSetting == 2>> - $His developing body is being flooded with hormones. - <<if $incubatorWeightSetting == 1>> - Combined with the abundant food provided to $him, $his body grows rapidly. - <<if $tanks[_inc].ovaries == 1>> - <<set $tanks[_inc].pubertyXX = 1>> - <<if $tanks[_inc].hormoneBalance < 500>> - <<set $tanks[_inc].hormoneBalance += 100>> - <</if>> - <<if $seeHyperPreg == 1>> - <<set $tanks[_inc].readyOva = random(25,45)>> - <<else>> - <<set $tanks[_inc].readyOva = random(3,8)>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the excess estrogen-laced growth hormones flooding $his body. - <<elseif $incubatorUpgradeSpeed == 52>> - <<if $tanks[_inc].boobs < 8000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 2000>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 50>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips += 2>> - <</if>> - <<if $tanks[_inc].butt < 12*_rearQuirk && random(1,100) > 30/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt += 4>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<if $tanks[_inc].boobs < 8000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 500>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 50>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 12*_rearQuirk && random(1,100) > 50/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt += 3>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<if $tanks[_inc].boobs < 8000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 200>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 60>> - The excess estrogen-laced growth hormones @@.green;causes $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 12*_rearQuirk && random(1,100) > 50/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear grow fatter.@@ - <<set $tanks[_inc].butt += 2>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<if $tanks[_inc].boobs < 8000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 100>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 70>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 12*_rearQuirk && random(1,100) > 60/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<if $tanks[_inc].boobs < 8000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 100>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 80>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 12*_rearQuirk && random(1,100) > 70/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <</if>> - <<elseif $tanks[_inc].balls > 0>> - <<set $tanks[_inc].pubertyXY = 1>> - <<if $tanks[_inc].hormoneBalance > -500>> - <<set $tanks[_inc].hormoneBalance -= 100>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the excess testosterone-laced growth hormones flooding $his body. - <<elseif $incubatorUpgradeSpeed == 52>> - <<if $tanks[_inc].balls < 40>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls += 16>> - <</if>> - <<if $tanks[_inc].dick < 10 && random(1,100) > 20>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick += 4>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<if $tanks[_inc].balls < 40 && random(1,100) > 10>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls += 9>> - <</if>> - <<if $tanks[_inc].dick < 10 && random(1,100) > 30>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick += 3>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<if $tanks[_inc].balls < 40 && random(1,100) > 20>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls += 4>> - <</if>> - <<if $tanks[_inc].dick < 10 && random(1,100) > 50>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick += 2>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<if $tanks[_inc].balls < 40 && random(1,100) > 30>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls += 2>> - <</if>> - <<if $tanks[_inc].dick < 10 && random(1,100) > 70>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<if $tanks[_inc].balls < 40 && random(1,100) > 30>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 10 && random(1,100) > 80>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <</if>> - <</if>> - <<elseif $incubatorWeightSetting == 2>> - Combined with the healthy food provided to $him, $his body grows readily. - <<if $tanks[_inc].ovaries == 1>> - <<set $tanks[_inc].pubertyXX = 1>> - <<if $tanks[_inc].hormoneBalance < 500>> - <<set $tanks[_inc].hormoneBalance += 100>> - <</if>> - <<if $seeHyperPreg == 1>> - <<set $tanks[_inc].readyOva = random(15,25)>> - <<else>> - <<set $tanks[_inc].readyOva = random(2,6)>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the excess estrogen-laced growth hormones flooding $his body. - <<elseif $incubatorUpgradeSpeed == 52>> - <<if $tanks[_inc].boobs < 4000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 1000>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 70>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 8*_rearQuirk && random(1,100) > 50/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt += 3>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<if $tanks[_inc].boobs < 4000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 500>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 80>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 8*_rearQuirk && random(1,100) > 50/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<if $tanks[_inc].boobs < 4000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 200>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 90>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 8*_rearQuirk && random(1,100) > 60/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<if $tanks[_inc].boobs < 4000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 100>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 95>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 8*_rearQuirk && random(1,100) > 70/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<if $tanks[_inc].boobs < 4000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 100>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 95>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 8*_rearQuirk && random(1,100) > 80/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <</if>> - <<elseif $tanks[_inc].balls > 0>> - <<set $tanks[_inc].pubertyXY = 1>> - <<if $tanks[_inc].hormoneBalance > -500>> - <<set $tanks[_inc].hormoneBalance -= 100>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the excess testosterone-laced growth hormones flooding $his body. - <<elseif $incubatorUpgradeSpeed == 52>> - <<if $tanks[_inc].balls < 10>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls += 3>> - <</if>> - <<if $tanks[_inc].dick < 7 && random(1,100) > 20>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick += 2>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<if $tanks[_inc].balls < 10 && random(1,100) > 10>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls += 2>> - <</if>> - <<if $tanks[_inc].dick < 7 && random(1,100) > 30>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<if $tanks[_inc].balls < 10 && random(1,100) > 20>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 7 && random(1,100) > 50>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<if $tanks[_inc].balls < 10 && random(1,100) > 30>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 7 && random(1,100) > 70>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<if $tanks[_inc].balls < 10 && random(1,100) > 30>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 7 && random(1,100) > 80>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <</if>> - <</if>> - <<else>> - Since $his body has little to work with, $his growth is fairly minor. - <<if $tanks[_inc].ovaries == 1>> - <<set $tanks[_inc].pubertyXX = 1>> - <<if $tanks[_inc].hormoneBalance < 500>> - <<set $tanks[_inc].hormoneBalance += 100>> - <</if>> - <<if $seeHyperPreg == 1>> - <<set $tanks[_inc].readyOva = random(10,15)>> - <<else>> - <<set $tanks[_inc].readyOva = random(2,4)>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the excess estrogen-laced growth hormones flooding $his body. - <<elseif $incubatorUpgradeSpeed == 52>> - <<if $tanks[_inc].boobs < 2000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 700>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 90>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips += 2>> - <</if>> - <<if $tanks[_inc].butt < 6*_rearQuirk && random(1,100) > 70/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt += 2>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<if $tanks[_inc].boobs < 2000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 200>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 80>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 6*_rearQuirk && random(1,100) > 70/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<if $tanks[_inc].boobs < 2000>> - The excess estrogen-laced growth hormones @@.green;rapidly balloon $his breasts.@@ - <<set $tanks[_inc].boobs += 50>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 80>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 6*_rearQuirk && random(1,100) > 90/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<if $tanks[_inc].boobs < 2000>> - The excess estrogen-laced growth hormones @@.green;rapidly grow $his breasts.@@ - <<set $tanks[_inc].boobs += 20>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 90>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 6*_rearQuirk && random(1,100) > 90/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<if $tanks[_inc].boobs < 2000>> - The excess estrogen-laced growth hormones @@.green;rapidly grow $his breasts.@@ - <<set $tanks[_inc].boobs += 10>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 95>> - The excess estrogen-laced growth hormones @@.green;cause $his hips to widen for childbirth.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 6*_rearQuirk && random(1,100) > 90/_rearQuirk>> - The excess estrogen-laced growth hormones @@.green;cause $his rear to grow fatter.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <</if>> - <<elseif $tanks[_inc].balls > 0>> - <<set $tanks[_inc].pubertyXY = 1>> - <<if $tanks[_inc].hormoneBalance > -500>> - <<set $tanks[_inc].hormoneBalance -= 100>> - <</if>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the excess testosterone-laced growth hormones flooding $his body. - <<elseif $incubatorUpgradeSpeed == 52>> - <<if $tanks[_inc].balls < 6>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to grow for extra cum production.@@ - <<set $tanks[_inc].balls += 2>> - <</if>> - <<if $tanks[_inc].dick < 4 && random(1,100) > 60>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 18>> - <<if $tanks[_inc].balls < 6 && random(1,100) > 50>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to grow for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 4 && random(1,100) > 60>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 9>> - <<if $tanks[_inc].balls < 6 && random(1,100) > 60>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to balloon for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 4 && random(1,100) > 70>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick += 2>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 6>> - <<if $tanks[_inc].balls < 6 && random(1,100) > 70>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to grow for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 4 && random(1,100) > 80>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <<elseif $incubatorUpgradeSpeed == 5>> - <<if $tanks[_inc].balls < 6 && random(1,100) > 80>> - The excess testosterone-laced growth hormones @@.green;cause $his balls to grow for extra cum production.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 4 && random(1,100) > 90>> - The excess testosterone-laced growth hormones @@.green;cause $his penis to swell.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <</if>> - <</if>> - <</if>> - <<elseif $incubatorReproductionSetting == 1>> - $His hormone levels are being carefully managed, @@.green;encouraging early puberty.@@ - <<if $tanks[_inc].ovaries == 1>> - <<set $tanks[_inc].pubertyXX = 1>> - <<set $tanks[_inc].hormoneBalance = 250>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks growth@@ despite the added estrogen. - <<else>> - <<if $tanks[_inc].boobs < 400 && random(1,100) > 60>> - The added estrogen @@.green;causes $his breasts to swell.@@ - <<set $tanks[_inc].boobs += 50>> - <</if>> - <<if $tanks[_inc].hips < 2 && random(1,100) > 90>> - The added estrogen @@.green;causes $his hips to widen.@@ - <<set $tanks[_inc].hips++>> - <</if>> - <<if $tanks[_inc].butt < 5*_rearQuirk && random(1,100) > 80/_rearQuirk>> - The added estrogen @@.green;causes $his butt to grow.@@ - <<set $tanks[_inc].butt++>> - <</if>> - <</if>> - <<elseif $tanks[_inc].balls > 0>> - <<set $tanks[_inc].pubertyXY = 1>> - <<set $tanks[_inc].hormoneBalance = -250>> - <<if $tanks[_inc].geneMods.NCS == 1>> - /* NCS blocks hormonal growth of all secondary sexual characteristics */ - $His @@.orange;NCS blocks all growth@@ despite the added testosterone. - <<else>> - <<if $tanks[_inc].balls < 3 && random(1,100) > 80>> - The added testosterone @@.green;causes $his balls to swell.@@ - <<set $tanks[_inc].balls++>> - <</if>> - <<if $tanks[_inc].dick < 3 && random(1,100) > 60>> - The added testosterone @@.green;causes $his penis to grow.@@ - <<set $tanks[_inc].dick++>> - <</if>> - <</if>> - <</if>> - <<else>> - <<if $tanks[_inc].hormoneBalance > 100>> - <<set $tanks[_inc].hormoneBalance -= 50>> - <<elseif $tanks[_inc].hormoneBalance < -100>> - <<set $tanks[_inc].hormoneBalance += 50>> - <</if>> - <<if $tanks[_inc].balls > 0>> - <<if $tanks[_inc].balls > 1>> - <<set $tanks[_inc].balls -= 5>> - <</if>> - <<if $tanks[_inc].dick > 1>> - <<set $tanks[_inc].dick -= 5>> - <</if>> - <<if $tanks[_inc].balls <= 0>> - <<set $tanks[_inc].balls = 1>> - <</if>> - <<if $tanks[_inc].dick <= 0>> - <<set $tanks[_inc].dick = 1>> - <</if>> - <</if>> - <<if $tanks[_inc].boobs > 0>> - <<set $tanks[_inc].boobs -= 500>> - <</if>> - <<if $tanks[_inc].butt > 0>> - <<set $tanks[_inc].butt -= 4>> - <</if>> - <</if>> - <<else>> - <<if $tanks[_inc].hormoneBalance > 100>> - <<set $tanks[_inc].hormoneBalance -= 50>> - <<elseif $tanks[_inc].hormoneBalance < -100>> - <<set $tanks[_inc].hormoneBalance += 50>> - <</if>> - <<if $tanks[_inc].balls > 0>> - <<if $tanks[_inc].balls > 1>> - <<set $tanks[_inc].balls -= 5>> - <</if>> - <<if $tanks[_inc].dick > 1>> - <<set $tanks[_inc].dick -= 5>> - <</if>> - <<if $tanks[_inc].balls <= 0>> - <<set $tanks[_inc].balls = 1>> - <</if>> - <<if $tanks[_inc].dick <= 0>> - <<set $tanks[_inc].dick = 1>> - <</if>> - <</if>> - <<if $tanks[_inc].boobs > 0>> - <<set $tanks[_inc].boobs -= 500>> - <</if>> - <<if $tanks[_inc].butt > 0>> - <<set $tanks[_inc].butt -= 4>> - <</if>> - <</if>> - - <<if $incubatorReproductionSetting == 2>> - <<set $tanks[_inc].energy = 80, $tanks[_inc].need = 100>> - <<elseif $incubatorReproductionSetting == 1>> - <<set $tanks[_inc].energy = 50, $tanks[_inc].need = 20>> - <<else>> - <<set $tanks[_inc].energy = 0, $tanks[_inc].need = 0>> - <</if>> - - <<if (($incubatorPregAdaptationSetting == 1 && $tanks[_inc].genes == "XX") || ($incubatorPregAdaptationSetting == 2 && $tanks[_inc].genes == "XY") || $incubatorPregAdaptationSetting == 3) && $tanks[_inc].growTime > 0>> - <br> - The incubator is working on adapting $his abdomen and reproductive organs for future pregnancies. - - <<set _weekAdapt = $tanks[_inc].incubatorPregAdaptationInWeek * $incubatorUpgradeSpeed>> - <<if isNaN(_weekAdapt)>> /* NaN check AFTER multiply operation, against it result is critical here. Need to be absolutely sure about this operation, not about just tank[x] property itself. This give me two very unpleasant hours to catch this */ - <<set $tanks[_inc].incubatorPregAdaptationInWeek = (15000 / 2000 - $tanks[_inc].pregAdaptation) / $tanks[_inc].growTime>> - <</if>> - <<set _weekAdapt = $tanks[_inc].incubatorPregAdaptationInWeek * $incubatorUpgradeSpeed>> /* Now it's should be fine */ - <<set _weekAdapt *= 1 + ($incubatorReproductionSetting / 5)>> - <<set _weekAdapt *= 1 + ($tanks[_inc].hormoneBalance / 1500)>> - /*And now we done*/ - <<set $tanks[_inc].pregAdaptation += _weekAdapt>> - /* here goes side effect from intense and extreme settings: */ - <<if (random(0, 100) <= ($tanks[_inc].incubatorPregAdaptationPower - 1) * ($incubatorUpgradeSpeed / 2 + 1))>> - <<switch random(1, 9)>> /*side effect selection*/ - <<case 1>> - <<set $tanks[_inc].preg = -2>> - It caused @@.red;reproductive damage@@ when excessive meddling damaged an organ. - <<case 2>> - <<if $tanks[_inc].ovaries == 1 || $tanks[_inc].mpreg == 1>> - <<set $tanks[_inc].preg = -3>> - <</if>> - <<if $tanks[_inc].balls > 0>> - <<set $tanks[_inc].ballType = "sterile">> - <</if>> - It caused @@.red;severe reproductive damage@@ when excessive hormones shut down the associated organs. - <<case 3>> - <<set $tanks[_inc].lactation = 1>> - It has @@.orange;triggered a hormonal disorder,@@ causing $his breast glands begin producing milk. - <<case 4>> - <<set $tanks[_inc].bellySag = 100, $tanks[_inc].bellySagPreg = 100>> - It activated @@.red;emergency protocols@@ when overpressure to $his abdominal tissues and skin reached critical levels. $His belly has lost muscle tone and has begun to strongly sag. - <<case 5>> - <<set $tanks[_inc].health.condition -= 15>> - Overzealous prodding caused some @@.red;internal bleeding.@@ - <<case 6>> - <<set $tanks[_inc].weight += 50>> - An unexpected shift in hormones spurred @@.red;massive weight gain@@ before it could be corrected. - <<case 7>> - <<set $tanks[_inc].weight -= 50>> - An unexpected shift in hormones spurred @@.red;massive weight loss@@ before it could be corrected. - <<case 8>> - <<set $tanks[_inc].boobs += 5000>> - <<set $tanks[_inc].boobShape = "saggy">> - An unexpected shift in hormones encouraged @@.green;explosive breast growth@@ before it could be corrected. - <<case 9>> - <<set $tanks[_inc].hips = 3>> - A malfunction in the skeletal reconstruction software caused it to @@.green;overwiden $his hips.@@ - <</switch>> - <</if>> - <</if>> - - <<if $tanks[_inc].preg > 0>> - @@.red;The incubator is displaying an alert that $he may be pregnant.@@ - <</if>> - - <<set $tanks[_inc].weight = Math.clamp($tanks[_inc].weight, -100, 200)>> - <<set $tanks[_inc].muscles = Math.clamp($tanks[_inc].muscles, -100, 100)>> - <<set $tanks[_inc].dick = Math.clamp($tanks[_inc].dick, 0, 10)>> - <<set $tanks[_inc].hips = Math.clamp($tanks[_inc].hips, -2, 2)>> - <<set $tanks[_inc].balls = Math.clamp($tanks[_inc].balls, 0, 40)>> - <<set $tanks[_inc].boobs = Math.clamp($tanks[_inc].boobs, 25, 30000)>> - <<set $tanks[_inc].height = Math.clamp($tanks[_inc].height, 0, 274)>> - <<set $tanks[_inc].hormoneBalance = Math.clamp($tanks[_inc].hormoneBalance, -500, 500)>> - <<set $tanks[_inc].foreskin = $tanks[_inc].dick>> /*simple, clean way of making sure foreskins and scrotums grow appropriately*/ - <<set $tanks[_inc].scrotum = $tanks[_inc].balls>> /*if we want dicks/balls to outgrow foreskins/scrotums, this will have to be removed*/ - -<br><br> -<</for>> -/* -<<if $tanks.length == 0>> -<<= capFirstChar($incubatorName)>> is currently unused. -<</if>> -*/ - -<br><br> diff --git a/src/uncategorized/arcade.tw b/src/uncategorized/arcade.tw index c4c9d54d5735556b876039b8b9878cf3144dd97f..db8d593a71dc340e0b385a23e7999cf4a47ab44d 100644 --- a/src/uncategorized/arcade.tw +++ b/src/uncategorized/arcade.tw @@ -159,12 +159,17 @@ <<if $arcadeUpgradeFuckdolls == 1>> equipped to convert inmates into standard Fuckdolls. The converter can be put to work on your order. <div class="choices"> - [[Turn on conversion|Arcade][$arcadeUpgradeFuckdolls = 2]] + [[Turn on conversion|Arcade][$arcadeUpgradeFuckdolls = 2]] | [[Turn on bulk conversion|Arcade][$arcadeUpgradeFuckdolls = 3]] </div> <<elseif $arcadeUpgradeFuckdolls == 2>> equipped to convert inmates into standard Fuckdolls. The converter is currently active and will convert the least popular girl at the end of the week. <div class="choices"> - [[Turn off conversion|Arcade][$arcadeUpgradeFuckdolls = 1]] + [[Turn off conversion|Arcade][$arcadeUpgradeFuckdolls = 1]] | [[Switch to bulk conversion|Arcade][$arcadeUpgradeFuckdolls = 3]] + </div> + <<elseif $arcadeUpgradeFuckdolls == 3>> + equipped to convert inmates into standard Fuckdolls. The converter is currently active and will convert underperforming girls at the end of the week. + <div class="choices"> + [[Turn off conversion|Arcade][$arcadeUpgradeFuckdolls = 1]] | [[Switch to single conversion|Arcade][$arcadeUpgradeFuckdolls = 2]] </div> <<else>> <<set _Tmult2 = Math.trunc(5000*$upgradeMultiplierArcology)>> diff --git a/src/uncategorized/arcadeReport.tw b/src/uncategorized/arcadeReport.tw deleted file mode 100644 index 2f2dca07c7e394d40b8a15dba49052161ee1578f..0000000000000000000000000000000000000000 --- a/src/uncategorized/arcadeReport.tw +++ /dev/null @@ -1,298 +0,0 @@ -:: Arcade Report [nobr] - -<span id="arcade-stats"> -</span> - -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.arcade)>> -<<set _DL = _slaves.length, _SL = $slaves.length, _cockmilked = 0, _milked = 0, _milkProfits = 0, _profits = 0, _oldCash = 0, _boobsImplanted = 0, _prostatesImplanted = 0, _vasectomiesUndone = 0, _mSlave = 0, _bSlave = 0, _pSlave = 0, _cSlave = 0>> - -<!-- Statistics gathering --> -<<set $facility = $facility || {}, $facility.arcade = initFacilityStatistics($facility.arcade)>> -<<set _arcadeNameCaps = capFirstChar($arcadeName)>> - - <<if (_DL > 1)>>''There are _DL inmates confined in $arcadeName.''<<else>>''There is one inmate confined in $arcadeName.''<</if>> -<<if ($arcologies[0].FSDegradationist > 20)>> - <<if $arcologies[0].FSDegradationistLaw == 1>> - The tenants located near the arcade consider the facility a normal part of their surroundings, including the crowd of menial slaves waiting their turn spills out into the hallway, 24 hours a day. - <<else>> - The tenants located near the arcade consider the facility a normal part of their surroundings. - <</if>> -<<elseif ($arcologies[0].FSPaternalist > 20)>> - The tenants located near the arcade consider it an @@.red;intolerable@@ establishment. -<</if>> -<<if $arcadeDecoration != "standard">> - <br><br> _arcadeNameCaps's customers enjoy @@.green;getting off in $arcadeDecoration surroundings.@@ -<</if>> - -<<for _slave range _slaves>> - <<setLocalPronouns _slave>> - <<set $i = $slaveIndices[_slave.ID]>> /% for the included passages %/ - - /* Perform facility based rule changes */ - <<set _slave.clothes = "no clothing">> - /* Health */ - <<if $arcadeUpgradeHealth == 2 && _slave.health.condition < 40>> - <<run improveCondition(_slave, 2)>> - <<elseif _slave.health.condition > 20>> - <<run healthDamage(_slave, 5)>> - <<elseif $arcadeUpgradeHealth == 1 && _slave.health.condition < -30>> - <<run improveCondition(_slave, 2)>> - <<elseif _slave.health.condition > -50>> - <<run healthDamage(_slave, 3)>> - <<elseif _slave.health.condition > -90>> - <<run healthDamage(_slave, 1)>> - <</if>> - /* Curatives */ - <<if $arcadeUpgradeHealth == 2>> - <<set _slave.curatives = 2>> - <<elseif $arcadeUpgradeHealth == 1>> - <<set _slave.curatives = 1>> - <</if>> - /* Stimulation or lack thereof trust/devotion effect */ - <<if ($arcadeUpgradeInjectors > 0)>> - <<if $arcadeUpgradeInjectors == 2>> - <<set _slave.aphrodisiacs = 2>> - <</if>> - <<set _slave.devotion -= 5, _slave.trust -= 10>> - <<else>> - <<set _slave.trust -= 5>> - <</if>> - /* Muscles */ - <<if (_slave.muscles > -100)>> - <<set _slave.muscles-->> - <</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 confined in $arcadeName. - <</if>> - <br> $He <<= App.SlaveAssignment.workAGloryHole(_slave)>> - <<else>> - <<run App.SlaveAssignment.choosesOwnJob(_slave)>> - <<run App.SlaveAssignment.workAGloryHole(_slave)>> - <</if>> - <<if ($arcadeUpgradeCollectors > 0)>> - <<if (_slave.vasectomy == 1)>> - <<set _slave.vasectomy = 0, _vasectomiesUndone++>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", _slave), surgeryDamage(_slave, 10)>> - <<elseif (_slave.lactation < 2)>> - <<set _slave.lactation = 2, _boobsImplanted++>> - <<set _bSlave = _slave>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", _slave), surgeryDamage(_slave, 10)>> - <<elseif _slave.prostate == 1>> - <<set _slave.prostate = 2, _prostatesImplanted++>> - <<set _pSlave = _slave>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", _slave), surgeryDamage(_slave, 10)>> - <<elseif (_slave.lactation > 0) || (_slave.balls > 0)>> - <<set _milkResults = App.SlaveAssignment.getMilked(_slave, 1.0)>> - <<if $showEWD != 0>> - <br> $He <<= _milkResults.text>> - <</if>> - <<set _milkProfits += _milkResults.cash>> - <<set _growth = 0>> - <<set _gigantomastiaMod = _slave.geneticQuirks.gigantomastia == 2 ? (_slave.geneticQuirks.macromastia == 2 ? 3 : 2) : 1>> - <<if (_slave.boobs < 2000)>> - <<set _growth = 100>> - <<elseif (_slave.boobs < 5000*_gigantomastiaMod)>> - <<set _growth = 50>> - <<elseif (_slave.boobs < 10000*_gigantomastiaMod)>> - <<set _growth = 25>> - <</if>> - <<if (_slave.geneMods.NCS == 1)>> - /* - ** NCS will allow some growth for Arcade milking, but not as much as the Dairy. - */ - <<set _growth = Math.trunc(_growth/3.5)>> - <</if>> - <<set _slave.boobs += _growth>> - <<if ((_slave.balls > 0) && (_slave.balls < 10) && (random(1,100) > (40 + (10 * (_slave.balls + (2 * _slave.geneMods.NCS))))))>> - <<set _slave.balls++>> - <</if>> - <<if ((_slave.dick > 0) && (_slave.dick < 10) && (random(1,100) > (40 + (10 * _slave.dick + (2 * _slave.geneMods.NCS)))))>> - <<set _slave.dick++>> - <</if>> - <<if (_slave.lactation > 0)>> - <<set _milked++>> - <<set _mSlave = _slave>> - <</if>> - <<if (_slave.balls > 0)>> - <<set _cockmilked++>> - <<set _cSlave = _slave>> - <</if>> - <</if>> - <</if>> - <<if (_slave.inflation > 0)>> - <<run deflate(_slave)>> - <</if>> - <<if $showEWD != 0>> - <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.rules()>> - <<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 _DL + $fuckdolls > 0>> - <br><br> - <<if _milked == 1>> - <<setLocalPronouns _mSlave>> - One of them is lactating and spends $his time in $arcadeName being simultaneously milked and fucked. - <<elseif _milked > 1>> - _milked of them are lactating and spend their time in $arcadeName being simultaneously milked and fucked. - <</if>> - - <<if _vasectomiesUndone>> - <<if _vasectomiesUndone == 1>> - One - <<else>> - _vasectomiesUndone - <</if>> - of them had severed vas deferens, so they were reattached to allow sperm through, costing @@.red;<<print cashFormat($surgeryCost*_vasectomiesUndone)>>.@@ - <</if>> - <<if _boobsImplanted>> - <<if _boobsImplanted == 1>> - <<setLocalPronouns _bSlave>> - One of them was not lactating, so $he was - <<else>> - _boobsImplanted of them were not lactating, so they were - <</if>> - implanted with long-acting lactation inducing drugs, costing @@.red;<<print cashFormat($surgeryCost*_boobsImplanted)>>.@@ - <</if>> - <<if _prostatesImplanted>> - <<if _prostatesImplanted == 1>> - <<setLocalPronouns _pSlave>> - One of them was not producing the maximum possible amount of precum, so $he was - <<else>> - _prostatesImplanted of them were not producing the maximum possible amount of precum, so they were - <</if>> - implanted with long-acting prostate stimulation drugs, costing @@.red;<<print cashFormat($surgeryCost*_prostatesImplanted)>>.@@ - <</if>> - <<if _cockmilked == 1>> - <<setLocalPronouns _cSlave>> - One of them retains testicles and is brutally cockmilked as $he is used. - <<elseif _cockmilked > 1>> - _cockmilked of them retain testicles and are brutally cockmilked as they are used. - <</if>> - - The arcade makes you - <<if $policies.publicFuckdolls == 0>> - @@.yellowgreen;<<print cashFormat(_profits)>>@@ from selling the inmates' holes - <<else>> - @@.green;more reputable@@ from freely providing the inmates' holes - <</if>> - <<if $arcadeUpgradeCollectors > 0 && $policies.publicFuckdolls == 0>> - and - <</if>> - <<if $arcadeUpgradeCollectors > 0>> - @@.yellowgreen;<<print cashFormat(_milkProfits)>>@@ from selling the fluids they produced - <</if>> - this week. - <<if ($arcologies[0].FSPaternalist > 20)>> - <<run repX(forceNeg(Math.trunc(_profits/20)), "arcade")>> - <</if>> -<</if>> - -<<if ($arcadeUpgradeFuckdolls == 2)>> - <<set _currentSlave = 0, _Age = -1, _FD = -1, _MB = -1, _Con = -1>> - <<for _slave range _slaves>> - <<if _slave.sentence == 0>> /* let's not convert slaves we are punishing into Fuckdolls */ - <<if (_slave.fetish == "mindbroken")>> - <<if (_slave.fuckdoll == 0)>> - <<if (_slave.physicalAge > 35)>> - <<set _Age = $i>> - <<break>> - <<elseif _FD == -1>> - <<set _FD = $i>> - <</if>> - <<elseif _MB == -1>> - <<if _slave.vagina >= 4 || _slave.anus >= 4>> - <<set _Con = $i>> - <<elseif _slave.physicalAge > 35>> - <<set _Age = $i>> - <<else>> - <<set _MB = $i>> - <</if>> - <</if>> - <<elseif _Con == -1>> - <<if _slave.vagina >= 4 || _slave.anus >= 4>> - <<set _Con = $i>> - <<elseif _slave.physicalAge > 35>> - <<set _Age = $i>> - <</if>> - <</if>> - <</if>> - <</for>> - <<if _FD > -1>> - <<set _currentSlave = $slaves[_FD]>> - <<elseif _Con > -1>> - <<set _currentSlave = $slaves[_Con]>> - <<elseif _MB > -1>> - <<set _currentSlave = $slaves[_MB]>> - <<elseif _Age > -1>> - <<set _currentSlave = $slaves[_Age]>> - <</if>> - <<if _currentSlave != 0>> - <<run App.Utils.setLocalPronouns(_currentSlave)>> - <br> _currentSlave.slaveName is low-quality merchandise, so $he has been converted into a Fuckdoll. - <<= removeSlave(_currentSlave)>> - <<if _currentSlave == 0>> /% if not zero then technically there was an error INVALID SLAVE %/ - <<set $fuckdolls++, _SL-->> - <</if>> - <<else>> - <br> No slaves have failed quality inspection for Fuckdoll conversion. _arcadeNameCaps will remain overcrowded this week. - <</if>> -<</if>> - -<<if _DL > 0>> - <!-- Record statistics gathering --> - <<script>> - var b = State.variables.facility.arcade; - 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.maintenance = State.variables.arcade * State.variables.facilityCost * (0.05 + 0.02 * State.variables.arcadeUpgradeInjectors + 0.05 * State.variables.arcadeUpgradeCollectors); - b.totalIncome = b.whoreIncome; - b.totalExpenses = b.whoreCosts + b.maintenance; - b.profit = b.totalIncome - b.totalExpenses; - <</script>> - - <!-- Statistics output --> - <<includeDOM App.Facilities.Arcade.Stats(false)>> - <<timed 50ms>> - <<replace #arcade-stats>> - <<includeDOM App.Facilities.Arcade.Stats(true)>> - <</replace>> - <</timed>> - <br><br> -<</if>> diff --git a/src/uncategorized/cellblockReport.tw b/src/uncategorized/cellblockReport.tw deleted file mode 100644 index 8a2d3b4426fdf6360f035987da697c5d79beae08..0000000000000000000000000000000000000000 --- a/src/uncategorized/cellblockReport.tw +++ /dev/null @@ -1,308 +0,0 @@ -:: Cellblock Report [nobr] - -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.cellblock)>> -<<set _DL = _slaves.length, _SL = $slaves.length, _brokenSlaves = 0, _idleBonus = 0, _softenedQuirks = 0, _trustMalus = 0, _FLsFetish = 0>> - -<<if $cellblockDecoration != "standard">> - <<set _devBonus = 1>> -<<else>> - <<set _devBonus = 0>> -<</if>> -<<set _cellblockNameCaps = capFirstChar($cellblockName)>> -<<set $flSex = App.EndWeek.getFLSex(App.Entity.facilities.cellblock)>> /* FIXME: should be local, passed as a parameter to saRules */ - -<<if (_S.Wardeness)>> - <<setLocalPronouns _S.Wardeness>> - - <<if (_S.Wardeness.health.condition < -80)>> - <<run improveCondition(_S.Wardeness, 20)>> - <<elseif (_S.Wardeness.health.condition < -40)>> - <<run improveCondition(_S.Wardeness, 15)>> - <<elseif (_S.Wardeness.health.condition < 0)>> - <<run improveCondition(_S.Wardeness, 10)>> - <<elseif (_S.Wardeness.health.condition < 90)>> - <<run improveCondition(_S.Wardeness, 7)>> - <</if>> - <<if (_S.Wardeness.devotion <= 60)>> - <<set _S.Wardeness.devotion += 2>> - <</if>> - <<set _S.Wardeness.devotion += _devBonus>> - <<if _S.Wardeness.trust < 60>> - <<set _S.Wardeness.trust += 3>> - <</if>> - <<if (_S.Wardeness.rules.living != "luxurious")>> - <<set _S.Wardeness.rules.living = "luxurious">> - <</if>> - <<if _S.Wardeness.rules.rest != "restrictive">> - <<set _S.Wardeness.rules.rest = "restrictive">> - <</if>> - <<if _S.Wardeness.fetishStrength <= 95>> - <<if _S.Wardeness.fetish != "sadist">> - <<if fetishChangeChance(_S.Wardeness) > random(0,100)>> - <<set _FLsFetish = 1, _S.Wardeness.fetishKnown = 1, _S.Wardeness.fetish = "sadist">> - <</if>> - <<elseif _S.Wardeness.fetishKnown == 0>> - <<set _FLsFetish = 1, _S.Wardeness.fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 2, _S.Wardeness.fetishStrength += 4>> - <</if>> - <</if>> - <<if (_S.Wardeness.energy > 95) || (_S.Wardeness.fetish == "sadist")>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - <</if>> - <<= SlaveFullName(_S.Wardeness)>> is serving as the Wardeness. - <<if _S.Wardeness.relationship == -3 && _S.Wardeness.devotion > 50>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - As your $wife, $he tries $his best to break the disobedient slaves to your will. - <</if>> - <<if (_FLsFetish == 1)>> - One day $he demands obedience. The next day $he strikes a slave when it isn't given. The next, $he seems more excited than embarrassed when beating a prisoner. Soon, $he's looking for an excuse to punish. $He's @@.pink;become more of a sadist.@@ - <<elseif (_FLsFetish == 2)>> - Being not only allowed but encouraged to get off while punishing prisoners @@.lightsalmon;deepens $his sadism.@@ - <</if>> - <<if setup.wardenessCareers.includes(_S.Wardeness.career)>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - $He has experience with detecting security issues and grinding down potential miscreants from $his life before $he was a slave, making $him more effective. - <<elseif _S.Wardeness.skill.wardeness >= $masteredXP>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - $He has experience with detecting security issues and grinding down potential miscreants from working for you, making $him more effective. - <<else>> - <<set _S.Wardeness.skill.wardeness += random(1,Math.ceil((_S.Wardeness.intelligence+_S.Wardeness.intelligenceImplant)/15) + 8)>> - <</if>> - <<if _S.Wardeness.fetish == "sadist">> - $He uses the prisoners to gratify $his sadism, terrifying them and quickly breaking their resistance. - <<elseif _S.Wardeness.energy > 95>> - $He is so sexually depraved that $he constantly molests the prisoners, breaking them to a life of servitude. - <</if>> - <<if _S.Wardeness.sexualFlaw == "malicious" || _S.Wardeness.sexualFlaw == "abusive">> - <<set _devBonus++, _trustMalus += 2, _idleBonus += 2>> - Sexual abuse of prisoners has become an end for $him, not a means. $He inspires $his prisoners to do everything possible to qualify to get away from $him, even as $he slowly grinds away their interest in sex to do it. - <<elseif _S.Wardeness.sexualQuirk == "caring">> - <<set _devBonus--, _trustMalus--, _idleBonus-->> - $His kindness sometimes shows through $his tough facade, letting prisoners get off easier than they should. - <</if>> - <<if (_S.Wardeness.dick > 2) && (canPenetrate(_S.Wardeness))>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - $His molestation of the prisoners is more varied and effective because $he has a dick to fuck them with. - <</if>> - <<if (_S.Wardeness.muscles > 35)>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - $He is strong enough to restrain anyone that tries anything with $his own hands. - <</if>> - <<if (_S.Wardeness.devotion > 95)>> - <<set _devBonus++, _trustMalus++, _idleBonus++>> - $His devotion to you is so absolute that $he sees breaking bitches for your service as a noble calling. - <</if>> - <<for _slave range _slaves>> - <<if _S.Wardeness.rivalryTarget == _slave.ID>> - $He greatly enjoys breaking $his <<print rivalryTerm(_S.Wardeness)>>, _slave.slaveName's will. - <<set _slave.devotion++, _slave.trust -= 3>> - <<if random(1,100) > 30>> - <<set _S.Wardeness.rivalry++, _slave.rivalry++>> - <</if>> - <<elseif _S.Wardeness.relationshipTarget == _slave.ID>> - $He hates having to break $his <<print relationshipTerm(_S.Wardeness)>>, _slave.slaveName, but $his devotion to you wins out in the end. - <<set _slave.devotion++, _slave.trust -= 3>> - <<if random(1,100) >= 50>> - $His and _slave.slaveName's relationship has been shattered by these events. - <<set _S.Wardeness.relationship = 0, _S.Wardeness.relationshipTarget = 0 _slave.relationship = 0, _slave.relationshipTarget = 0>> - <</if>> - <<elseif areRelated(_S.Wardeness, _slave)>> - <<setLocalPronouns _slave 2>> - $He shows $his <<print relativeTerm(_S.Wardeness,_slave)>> _slave.slaveName no mercy, making sure _he2 understands _his2 place. - <<set _slave.devotion++, _slave.trust-->> - <</if>> - <</for>> - <<if (_DL < $cellblock && !slaveResting(_S.Wardeness))>> - <<set _seed = random(1,10)+(($cellblock-_DL)*(random(150,170)+(_idleBonus*10)))>> - <<run cashX(_seed, "cellblock", _S.Wardeness)>> - <br> Since $he doesn't have enough prisoners to manage to keep $him busy, $he works on citizens' slaves, earning @@.yellowgreen;<<print cashFormat(_seed)>>.@@ - <</if>> - <<if (_DL > 0)>><br><br><</if>> -<</if>> - -<<if (_DL > 0)>> - <<if (_DL == 1)>>''One slave is being confined in $cellblockName until they are willing to obey.''<<else>>''_DL slaves are being confined in $cellblockName until they are willing to obey.''<</if>> -<</if>> - -<<if (_S.Wardeness)>> - <<set $i = $slaveIndices[$WardenessID]>> /* apply following SA passages to facility leader */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_S.Wardeness, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<includeDOM App.EndWeek.favoriteIcon($slaves[$i])>> - <span class='slave-name'><<= SlaveFullName($slaves[$i])>></span> is serving as the Wardeness in $cellblockName. - <br> - <<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run tired($slaves[$i])>> - <<includeDOM App.SlaveAssignment.rules($slaves[$i])>> - <<= App.SlaveAssignment.diet($slaves[$i])>> - <<includeDOM App.SlaveAssignment.longTermEffects($slaves[$i])>> - <<= App.SlaveAssignment.drugs($slaves[$i])>> - <<= App.SlaveAssignment.relationships($slaves[$i])>> - <<= App.SlaveAssignment.rivalries($slaves[$i])>> - <br> <<= App.SlaveAssignment.devotion($slaves[$i])>> - <<else>> - <<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run tired($slaves[$i])>> - <<run App.SlaveAssignment.rules($slaves[$i])>> - <<run App.SlaveAssignment.diet($slaves[$i])>> - <<run App.SlaveAssignment.longTermEffects($slaves[$i])>> - <<run App.SlaveAssignment.drugs($slaves[$i])>> - <<run App.SlaveAssignment.relationships($slaves[$i])>> - <<run App.SlaveAssignment.rivalries($slaves[$i])>> - <<run App.SlaveAssignment.devotion($slaves[$i])>> - <</if>> -<</if>> - -<<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave>> - <<if (_slave.devotion <= 20)>> - <<if (_slave.trust >= -20)>> - <<if ((_slave.hears == -1 && _slave.earwear != "hearing aids") || (_slave.hears == 0 && _slave.earwear == "muffling ear plugs") ||(_slave.hears == -2))>> - <<set _slave.devotion -= 2, _slave.trust -= 2>> - <<else>> - <<set _slave.devotion -= 4, _slave.trust -= 4>> - <</if>> - <<else>> - <<set _slave.devotion++>> - <</if>> - <</if>> - <<switch $cellblockDecoration>> - <<case "Paternalist">> - <<set _slave.rules.living = "normal">> - <<if (_slave.inflation > 0)>> - <<run deflate(_slave)>> - <</if>> - <<case "Pastoralist">> - <<set _slave.rules.living = "spare">> - <<if _slave.inflation == 0>> - <<if _slave.pregKnown == 0 && _slave.bellyImplant < 1500>> - <<set _slave.inflation = 2, _slave.inflationType = "milk", _slave.inflationMethod = 1>> - <<else>> - <<set _slave.inflation = 1, _slave.inflationType = "milk", _slave.inflationMethod = 1>> - <</if>> - <<run SetBellySize(_slave)>> - <</if>> - <<case "Hedonistic">> - <<set _slave.rules.living = "spare">> - <<if _slave.weight < 200>> - <<if _slave.weightDirection == 1>> - <<set _slave.weight += 5>> - <<elseif _slave.weightDirection == -1>> - <<set _slave.weight += 1>> - <<else>> - <<set _slave.weight += 3>> - <</if>> - <</if>> - <<if _slave.muscles > -100>> - <<set _slave.muscles -= 2>> - <</if>> - <<if _slave.inflation == 0>> - <<if _slave.pregKnown == 0 && _slave.bellyImplant < 1500>> - <<set _slave.inflation = 3, _slave.inflationType = "food", _slave.inflationMethod = 1>> - <<else>> - <<set _slave.inflation = 1, _slave.inflationType = "food", _slave.inflationMethod = 1>> - <</if>> - <<run SetBellySize(_slave)>> - <</if>> - <<default>> - <<set _slave.rules.living = "spare">> - <<if (_slave.inflation > 0)>> - <<run deflate(_slave)>> - <</if>> - <</switch>> - <<if $cellblockUpgrade == 1>> - <<if (_slave.behavioralFlaw != "none") && (_slave.behavioralQuirk == "none")>> - <<run SoftenBehavioralFlaw(_slave)>> - <<set _slave.devotion -= 10, _softenedQuirks++>> - <<elseif (_slave.sexualFlaw != "none") && (_slave.sexualQuirk == "none")>> - <<run SoftenSexualFlaw(_slave)>> - <<set _slave.devotion -= 10, _softenedQuirks++>> - <</if>> - <</if>> - <<set _slave.devotion += _devBonus, _slave.trust -= _trustMalus>> - <<if (_S.Wardeness) && (_S.Wardeness.sexualFlaw == "malicious") && (_slave.energy >= 2)>> - <<set _slave.energy -= 2>> - <</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 < 40)>> - <<run improveCondition(_slave, 7)>> - <<elseif (_slave.health.condition < 100)>> - <<run improveCondition(_slave, 3)>> - <</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 confined in $cellblockName. - <</if>> - <br> $He <<= App.SlaveAssignment.stayConfined(_slave)>> - <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>> - <<silently>> - <<run App.SlaveAssignment.choosesOwnJob(_slave)>> - <<run App.SlaveAssignment.stayConfined(_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)>> - <</silently>> - <</if>> -<</for>> -<<if (_softenedQuirks) || (_brokenSlaves)>> - <br><br> - <<if (_softenedQuirks > 0)>> - _cellblockNameCaps's advanced compliance systems successfully softened - <<if (_softenedQuirks == 1)>> - one slave's mental flaw into an @@.green;appealing quirk,@@ though the constant correction caused them @@.mediumorchid;considerable anguish.@@ - <<else>> - _softenedQuirks slaves' mental flaws into @@.green;appealing quirks,@@ though the constant correction caused them @@.mediumorchid;considerable anguish.@@ - <</if>> - <</if>> - <<if (_brokenSlaves > 0)>> - <<if (_brokenSlaves == 1)>> - One slave is now willing to @@.hotpink;do as they're told@@ and has been released. - <<else>> - _brokenSlaves slaves are now willing to @@.hotpink;do as they're told@@ and have been released. - <</if>> - <<if $cellblockDecoration != "standard">> - <br><br> _cellblockNameCaps's $cellblockDecoration atmosphere @@.hotpink;had an impact on them while they were@@ imprisoned. - <</if>> - <</if>> -<</if>> -<<if _DL > 0 || _S.Wardeness>> - <br><br> -<</if>> 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/fullReport.tw b/src/uncategorized/fullReport.tw deleted file mode 100644 index 95d64be55e6178b8149b4e3c8b328f271593c277..0000000000000000000000000000000000000000 --- a/src/uncategorized/fullReport.tw +++ /dev/null @@ -1,94 +0,0 @@ -:: Full Report [nobr] - -/* 000-250-006 */ -<<if $seeImages && $seeReportImages>> - <div class="imageRef medImg"> - <<= SlaveArt($slaves[$i], 2, 0)>> - </div> -<</if>> -/* 000-250-006 */ - -<<setLocalPronouns $slaves[$i]>> - -<<switch $slaves[$i].assignment>> -<<case "rest">> - <<= App.SlaveAssignment.rest($slaves[$i])>> -<<case "whore">> - <<= App.SlaveAssignment.whore($slaves[$i])>> -<<case "serve the public">> - <<= App.SlaveAssignment.serveThePublic($slaves[$i])>> -<<case "work a glory hole">> - <<= App.SlaveAssignment.workAGloryHole($slaves[$i])>> -<<case "get milked">> - <<set _milkResults = App.SlaveAssignment.getMilked($slaves[$i])>> - <<= _milkResults.text>> -<<case "take classes">> - <<= App.SlaveAssignment.takeClasses($slaves[$i])>> -<<case "please you">> - <<= App.SlaveAssignment.pleaseYou($slaves[$i])>> -<<case "be a subordinate slave">> - <<= App.SlaveAssignment.serveYourOtherSlaves($slaves[$i])>> -<<case "be a servant">> - <<= App.SlaveAssignment.servant($slaves[$i])>> -<<case "stay confined">> - <<= App.SlaveAssignment.stayConfined($slaves[$i])>> -<<case "guard you">> - <<= App.SlaveAssignment.guardYou($slaves[$i])>> -<<case "be your Head Girl">> - <<= App.SlaveAssignment.beYourHeadGirl($slaves[$i])>> -<<case "recruit girls">> - <<= App.SlaveAssignment.recruitGirls($slaves[$i])>> -<<default>> - <<= removeJob($slaves[$i], $slaves[$i].assignment)>> - <<= App.SlaveAssignment.rest($slaves[$i])>> -<</switch>> - -<<if $servantMilkers == 1 && $slaves[$i].lactation > 0 && $slaves[$i].assignment != "get milked">> - $His assignment - <<if setup.servantMilkersJobs.includes($slaves[$i].assignment)>> - is not strenuous, so $he <<if $slaves[$i].devotion > 20>><<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses<<elseif $slaves[$i].devotion >= -20>>is required to use<<else>>is forced to use<</if>> the penthouse milkers frequently, - <<set _milkResult = App.SlaveAssignment.getMilked($slaves[$i], 0.5)>> - <<else>> - keeps $him busy, but $he <<if $slaves[$i].devotion > 20>><<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses<<elseif $slaves[$i].devotion >= -20>>is required to use<<else>>is forced to use<</if>> the penthouse milkers whenever $he can, - <<set _milkResult = App.SlaveAssignment.getMilked($slaves[$i], 0.25)>> - <</if>> - and $he gives <<= _milkResult.milk>> liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat(_milkResult.milkSale)>>.@@ -<</if>> - -<br> -<<if $slaves[$i].minorInjury != 0>> - $His $slaves[$i].minorInjury will heal by the end of the week. -<</if>> - -<<if $showEWD == 0>> - <<includeDOM App.SlaveAssignment.rules($slaves[$i])>> - <<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run App.SlaveAssignment.diet($slaves[$i])>> - <<run App.SlaveAssignment.longTermEffects($slaves[$i])>> - <<run App.SlaveAssignment.drugs($slaves[$i])>> - <<run App.SlaveAssignment.relationships($slaves[$i])>> - <<run App.SlaveAssignment.rivalries($slaves[$i])>> -<<else>> - <<includeDOM App.SlaveAssignment.rules($slaves[$i])>> - <<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<= App.SlaveAssignment.diet($slaves[$i])>> - <<includeDOM App.SlaveAssignment.longTermEffects($slaves[$i])>> - <<= App.SlaveAssignment.drugs($slaves[$i])>> - <<= App.SlaveAssignment.relationships($slaves[$i])>> - <<= App.SlaveAssignment.rivalries($slaves[$i])>> - <br> -<</if>> - -<<if $PC.health.shortDamage < 30 && Array.isArray($personalAttention) && $personalAttention.findIndex(function(s) { return s.ID == $slaves[$i].ID; }) != -1>> - <<includeDOM personalAttention($slaves[$i])>> -<</if>> - -<<for _hgtsidx = 0; _hgtsidx < $HGTrainSlavesIDs.length; _hgtsidx++>> - <<if $slaves[$i].ID == $HGTrainSlavesIDs[_hgtsidx].ID>> - <<set $activeSlave = $slaves[$i], $HGtraining = $HGTrainSlavesIDs[_hgtsidx].training>> - <<include "HG Application">> - <br> - <</if>> -<</for>> - - <<= App.SlaveAssignment.devotion($slaves[$i])>> diff --git a/src/uncategorized/hgApplication.tw b/src/uncategorized/hgApplication.tw deleted file mode 100644 index c5b39589583edfcd96b9386303845d1742b8b0b8..0000000000000000000000000000000000000000 --- a/src/uncategorized/hgApplication.tw +++ /dev/null @@ -1,441 +0,0 @@ -:: HG Application [nobr] - -<<setLocalPronouns _S.HeadGirl>> -<<setLocalPronouns $activeSlave 2>> - -<<if ndef $HGSeverity>> - <<set $HGSeverity = 0>> -<</if>> - -<<set $activeSlave.training = Math.clamp($activeSlave.training, 0, 150)>> -<<set _effectiveness = _S.HeadGirl.actualAge+((_S.HeadGirl.intelligence+_S.HeadGirl.intelligenceImplant)/3)-(_S.HeadGirl.accent*5)+($HGSeverity*10)+(($activeSlave.intelligence+$activeSlave.intelligenceImplant)/4)-($activeSlave.accent*5)>> -<<if $AgePenalty == 0>> - <<set _effectiveness += Math.max(0,(30-_S.HeadGirl.actualAge))>> -<</if>> -<<if _S.HeadGirl.sexualFlaw == "abusive" && $HGSeverity >= 0>> - <<set _effectiveness += 10>> -<</if>> -<<if $HGtraining != "health">> - <<set $activeSlave.health.tired += 25>> -<</if>> - - <span style="font-weight: bold">Your Head Girl</span> <span class='slave-name'>_S.HeadGirl.slaveName</span> notices that <span class='slave-name'>$activeSlave.slaveName</span> -<<switch $HGtraining>> -<<case "health">> - is unwell. -<<case "obedience">> - is disobedient. -<<case "paraphilia">> - has a paraphilia. -<<case "flaw">> - has an unpleasant flaw worth fixing. -<<case "soften">> - has an unpleasant flaw that $he can try to soften into a unique quirk. -<<case "oral skill">> - isn't as orally skilled as $he is. -<<case "anal skill">> - isn't as skilled at taking anal as $he is. -<<case "fuck skill">> - isn't as skilled at vaginal intercourse as $he is. -<<case "whore skill">> - isn't as skilled at the fine art of sex for money as $he is. -<<case "entertain skill">> - isn't as skilled at entertainment as $he is. -<</switch>> - -<<if $HGtraining == "health">> - -$He helps $activeSlave.slaveName however $he can. The tender care has @@.green;improved $activeSlave.slaveName's health.@@ -<<run improveCondition($activeSlave, 10)>> -<<set $activeSlave.health.tired = Math.clamp($activeSlave.health.tired-10, 0, 1000)>> -<<set $activeSlave.training = 0>> - -<<else>> - -<<if _S.HeadGirl.career == "an arcology owner">> - $He was once an arcology owner $himself, making $him truly peerless as a Head Girl. - <<set _effectiveness += 50>> -<<elseif setup.HGCareers.includes(_S.HeadGirl.career)>> - $He was used to giving commands and being obeyed in $his life before $he was a slave, experience $he can call on now. - <<set _effectiveness += 5>> -<<elseif _S.HeadGirl.skill.headGirl >= $masteredXP>> - $He is used to giving commands and being obeyed through experience, rendering $him more effective. - <<set _effectiveness += 5>> -<</if>> - -<<if _S.HeadGirl.actualAge > 30>> - $His age and experience help $him as $he works with $activeSlave.slaveName. -<<elseif _S.HeadGirl.actualAge < 25 && $AgePenalty > 0>> - $His youth and inexperience impede $him as $he works with $activeSlave.slaveName. -<</if>> - -<<if _S.HeadGirl.accent >= 3>> - $He does $his best to give orders in $language, but has to resort to a lot of unseemly gesticulation and shouting, making $him much less effective. -<<elseif _S.HeadGirl.accent == 2>> - $His heavy <<print aNational(_S.HeadGirl.nationality)>> accent impedes $his clarity in $language, making $him somewhat less effective. -<</if>> - -<<if ($HGtraining == "obedience") || ($HGtraining == "flaw") || ($HGtraining == "soften")>> - <<if _S.HeadGirl.intelligence+_S.HeadGirl.intelligenceImplant > 50>> - <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant > 50>> - $He needs $his wits about $him to mold $activeSlave.slaveName, who's quite intelligent _himself2. - <<elseif $activeSlave.intelligence+$activeSlave.intelligenceImplant >= -50>> - $His intelligence helps $him mold $activeSlave.slaveName. - <<else>> - Molding $activeSlave.slaveName is very easy, especially for a smart Head Girl like $him. - <</if>> - <</if>> -<<else>> - <<if _S.HeadGirl.intelligence+_S.HeadGirl.intelligenceImplant > 50>> - <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant > 50>> - Both slaves are quite intelligent, making $his job much easier. - <<elseif $activeSlave.intelligence+$activeSlave.intelligenceImplant >= -50>> - $He's quite intelligent and can teach $activeSlave.slaveName well. - <<else>> - $He needs all $his considerable intelligence to get through to the idiot $he has to teach. - <</if>> - <</if>> -<</if>> - -<<if $HGSeverity > 0>> - Your directives encourage $him to rape any slave that fails in the slightest way, a task $he approaches - <<if _S.HeadGirl.sexualFlaw == "abusive">> - eagerly, since $he prefers to take $his pleasure without consent. - <<elseif _S.HeadGirl.fetish == "sadist">> - with sadistic enthusiasm. - <<elseif _S.HeadGirl.fetish == "dom">> - with confidence. - <<elseif _S.HeadGirl.energy > 95>> - as a convenient way to - <<if (_S.HeadGirl.balls > 0)>> - drain $his perpetually overfilled balls into a series of spasming holes. - <<else>> - sate $his excess sexual appetite. - <</if>> - <<else>> - dutifully. - <</if>> - <<if $activeSlave.vagina == 0>> - In $activeSlave.slaveName's case, $he's careful to limit _his2 sexual abuse to things that won't take the _girl2's virginity. The slave - <<elseif $activeSlave.anus == 0>> - $He's careful to molest $activeSlave.slaveName in ways that don't involve penetrating _his2 virgin ass. The slave - <<else>> - $activeSlave.slaveName - <</if>> - <<if $activeSlave.devotion > 50>> - accepts the abuse, believing _he2 deserves to be raped. - <<elseif $activeSlave.devotion >= -20>> - is @@.gold;frightened@@ by the unceasing abuse. - <<set $activeSlave.trust -= 1>> - <<else>> - @@.mediumorchid;hates@@ and @@.gold;fears@@ the constant abuse. - <<set $activeSlave.trust -= 1>> - <<set $activeSlave.devotion -= 1>> - <</if>> - _S.HeadGirl.slaveName makes sure $his victim hates it, every time, and $activeSlave.slaveName can't help but do _his2 very best to avoid this treatment. -<<elseif $HGSeverity == 0>> - You allow $him to use $his own judgment when punishing failures, - <<if _S.HeadGirl.sexualFlaw == "abusive">> - and $he usually decides in favor of forcing misbehaving slaves to get $him off. - <<elseif _S.HeadGirl.fetish == "sadist">> - permission the sadist uses for $his own gratification. - <<elseif _S.HeadGirl.fetish == "dom">> - which the dominant $girl uses confidently. - <<elseif _S.HeadGirl.energy > 95>> - which $he uses to - <<if (_S.HeadGirl.balls > 0)>> - force $his subordinates to keep $his balls drained. - <<else>> - extract the constant sexual favors $his libido demands. - <</if>> - <<else>> - and $he does $his best to be fair. - <</if>> - $activeSlave.slaveName - <<if $activeSlave.devotion > 50>> - is @@.mediumaquamarine;grateful@@ that _he2 is punished justly when _he2 makes mistakes. - <<set $activeSlave.trust += 1>> - <<elseif $activeSlave.devotion >= -20>> - does _his2 best to learn quickly and avoid punishment. - <<else>> - is @@.gold;scared@@ by _his2 inability to get away with the smallest disobedience. - <<set $activeSlave.trust -= 1>> - <</if>> -<<else>> - You require $him to use respect when punishing; $he does $his best to motivate, but is unable to use real fear as a tool. $activeSlave.slaveName understands this, and @@.mediumaquamarine;trusts@@ that if _he2 fails, the consequences won't be too awful. - <<set $activeSlave.trust += 1>> -<</if>> - -<<if $HGtraining == "obedience">> - -<<set $activeSlave.training = 0>> -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<if _effectiveness <= 0>> - $activeSlave.slaveName is smart enough to complicate things; _he2 manages to outwit $him this week and makes no progress. -<<else>> - <<set $activeSlave.devotion += Math.ceil(_effectiveness/4)>> - <<if $activeSlave.devotion < -50>> - $He helps watch and restrain the rebellious $activeSlave.slaveName, helping wear _him2 down, @@.gold;breaking $activeSlave.slaveName's rebelliousness.@@ - <<elseif $activeSlave.devotion < -20>> - $He keeps $activeSlave.slaveName constantly aware of _his2 slavery, @@.gold;breaking $activeSlave.slaveName's resistance.@@ - <<else>> - $He acts as another pair of eyes watching $activeSlave.slaveName and metes out punishments, @@.gold;improving $activeSlave.slaveName's servitude.@@ - <</if>> -<</if>> - -<<elseif $HGtraining == "paraphilia">> - -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<set $activeSlave.training += _effectiveness>> -_S.HeadGirl.slaveName does $his best to get $activeSlave.slaveName past it with punishments and rewards, -<<if $activeSlave.training > 100>> - and @@.green;resolves $activeSlave.slaveName's paraphilia.@@ - <<set $activeSlave.training = 0>> - <<set $activeSlave.sexualFlaw = "none">> -<<else>> - and makes partial progress. -<</if>> - -<<elseif $HGtraining == "flaw">> - -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<set $activeSlave.training += _effectiveness>> -_S.HeadGirl.slaveName punishes $activeSlave.slaveName whenever $he catches _him2 indulging in _his2 bad habits, -<<if $activeSlave.training > 100>> - and @@.green;fixes $activeSlave.slaveName's flaw.@@ - <<set $activeSlave.training = 0>> - <<if $activeSlave.behavioralFlaw != "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<elseif $activeSlave.sexualFlaw != "none">> - <<set $activeSlave.sexualFlaw = "none">> - <</if>> -<<else>> - and makes partial progress. -<</if>> - -<<elseif $HGtraining == "soften">> - -<<set _effectiveness -= ($activeSlave.intelligence+$activeSlave.intelligenceImplant)/3>> -<<set $activeSlave.training += _effectiveness>> -$He punishes $activeSlave.slaveName whenever $he sees _him2 breaking the rules yet does $his best to retain what makes the slave special, -<<if $activeSlave.training > 150>> - <<set $activeSlave.training = 0>> - and successfully @@.green;softens $activeSlave.slaveName's flaw.@@ - <<if $activeSlave.behavioralFlaw != "none">> - <<run SoftenBehavioralFlaw($activeSlave)>> - <<elseif $activeSlave.sexualFlaw != "none">> - <<run SoftenSexualFlaw($activeSlave)>> - <</if>> -<<else>> - and makes partial progress. -<</if>> - -<<elseif $HGtraining == "oral skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.fetish == "cumslut") && (_S.HeadGirl.fetishStrength > 60)>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. $His enthusiasm for oral sex is infectious. $activeSlave.slaveName's @@.green;oral skills have improved.@@ - <<= slaveSkillIncrease('oral', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.dick > 0) && canPenetrate(_S.HeadGirl)>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. Your Head Girl uses $his penis as an effective teaching tool. $activeSlave.slaveName's @@.green;oral skills have improved.@@ - <<= slaveSkillIncrease('oral', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.clit > 2)>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. Your Head Girl uses $his pseudophallus-sized clit as an effective teaching tool. $activeSlave.slaveName's @@.green;oral skills have improved.@@ - <<= slaveSkillIncrease('oral', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to suck cocks, cunts, and assholes. $activeSlave.slaveName's @@.green;oral skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('oral', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "anal skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.fetish == "buttslut") && (_S.HeadGirl.fetishStrength > 60)>> - In spare moments $he teaches $activeSlave.slaveName how to take it up the ass. Your Head Girl's enthusiasm for backdoor loving is infectious. $activeSlave.slaveName's @@.green;anal skills have improved.@@ - <<= slaveSkillIncrease('anal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.dick > 0) && canPenetrate(_S.HeadGirl)>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick up the butt. Your Head Girl uses $his penis as an effective teaching tool. $activeSlave.slaveName's @@.green;anal skills have improved.@@ - <<= slaveSkillIncrease('anal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.clit > 2)>> - In spare moments $he teaches $activeSlave.slaveName how to take a phallus up the butt. Your Head Girl uses $his pseudophallus-sized clit as an effective teaching tool. $activeSlave.slaveName's @@.green;anal skills have improved.@@ - <<= slaveSkillIncrease('anal', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick up the butt. $activeSlave.slaveName's @@.green;anal skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('anal', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "fuck skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.energy > 95)>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick. Your Head Girl's enthusiasm for sex is infectious. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ - <<= slaveSkillIncrease('vaginal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.dick > 0) && canPenetrate(_S.HeadGirl)>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick. Your Head Girl uses $his penis as an effective teaching tool. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ - <<= slaveSkillIncrease('vaginal', $activeSlave, random(5,10))>> -<<elseif (_S.HeadGirl.clit > 2)>> - In spare moments $he teaches $activeSlave.slaveName how to take a phallus. Your Head Girl uses $his pseudophallus-sized clit as an effective teaching tool. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ - <<= slaveSkillIncrease('vaginal', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to take a dick. $activeSlave.slaveName's @@.green;vanilla sex skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('vaginal', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "whore skill">> - -<<set $activeSlave.training = 0>> -In spare moments $he teaches $activeSlave.slaveName how to prostitute _himself2. $activeSlave.slaveName's @@.green;whoring skills have improved.@@ -<<= slaveSkillIncrease('whoring', $activeSlave, Math.ceil(_effectiveness/10))>> - -<<elseif $HGtraining == "entertain skill">> - -<<set $activeSlave.training = 0>> -<<if (_S.HeadGirl.fetish == "humiliation") && (_S.HeadGirl.fetishStrength > 60)>> - In spare moments $he teaches $activeSlave.slaveName how to entertain. Your Head Girl's enthusiasm for public display is infectious. $activeSlave.slaveName's @@.green;entertainment skills have improved.@@ - <<= slaveSkillIncrease('entertainment', $activeSlave, random(5,10))>> -<<else>> - In spare moments $he teaches $activeSlave.slaveName how to entertain. $activeSlave.slaveName's @@.green;entertainment skills have improved.@@ -<</if>> -<<= slaveSkillIncrease('entertainment', $activeSlave, Math.ceil(_effectiveness/10))>> - -<</if>> -<</if>> - -<<if ($activeSlave.devotion >= -20)>> -<<if ($activeSlave.attrKnown == 0)>> - <<set $activeSlave.attrKnown = 1>> - _S.HeadGirl.slaveName also investigates the slave's basic sexual orientation, finding that _he2 is - <<if ($activeSlave.attrXY <= 40)>> - @@.red;disgusted by men@@ - <<elseif ($activeSlave.attrXY <= 60)>> - indifferent to men - <<elseif ($activeSlave.attrXY <= 80)>> - @@.green;attracted to men@@ - <<else>> - @@.green;intensely attracted to men@@ - <</if>> - and - <<if ($activeSlave.attrXX <= 40)>> - @@.red;disgusted by women.@@ - <<elseif ($activeSlave.attrXX <= 60)>> - indifferent to women. - <<elseif ($activeSlave.attrXX <= 80)>> - @@.green;attracted to women.@@ - <<else>> - @@.green;intensely attracted to women.@@ - <</if>> -<</if>> -<</if>> - -<<if $HGPiercings>> - <<if $activeSlave.devotion >= -20 && $activeSlave.genes == "XY" && $activeSlave.attrXY <= 35 && $arcologies[0].FSBodyPurist == "unset" && ($arcologies[0].FSPaternalist == "unset" || ($arcologies[0].FSPaternalist != "unset" && SlaveStatsChecker.modScore($activeSlave).total < 13))>> - <<set _piercingForbidden = 0>> - <<for _i = 0; _i < 1; _i++>> - <<if $activeSlave.earPiercing == 0 && $activeSlave.earShape !== "none">> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.earPiercing = 2>> - <<else>> - <<set $activeSlave.earPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.earPiercing != $slaveAfterRA.earPiercing>> - <<set _piercingForbidden = 1, $activeSlave.earPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he has the slave's ears pierced. This will be a constant reminder that _he2 is simply a sexual object here. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's ears pierced. A little feminine touch can make a big difference. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.nosePiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.nosePiercing = 2>> - <<else>> - <<set $activeSlave.nosePiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.nosePiercing != $slaveAfterRA.nosePiercing>> - <<set _piercingForbidden = 1, $activeSlave.nosePiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he gives the slave nasal studs and a large septum ring. It should push $activeSlave.slaveName to see _himself2 as a sexual object for others to use. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he gives the slave a cute little nose piercing. It should help $activeSlave.slaveName see _himself2 as a bit more feminine. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.eyebrowPiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.eyebrowPiercing = 2>> - <<else>> - <<set $activeSlave.eyebrowPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.eyebrowPiercing != $slaveAfterRA.eyebrowPiercing>> - <<set _piercingForbidden = 1, $activeSlave.eyebrowPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he gives the slave multiple eyebrow piercings. A slutty touch for a slave _girl2 should help _him2 feel a little hungrier for cock. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he gives the slave a cute little eyebrow piercing. A slutty touch for a slave _girl2 should help _him2 feel a little hungrier for cock. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.lipsPiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.lipsPiercing = 2>> - <<else>> - <<set $activeSlave.lipsPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.lipsPiercing != $slaveAfterRA.lipsPiercing>> - <<set _piercingForbidden = 1, $activeSlave.lipsPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs to adjust to life as a slave _girl2, so $he has the slave's lower lip pierced. _His2 mouth is for pleasing penises now, so it'll help _him2 if it looks like it. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's lower lip pierced. _His2 mouth is for pleasing penises now, so it'll help _him2 if it looks like it. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<if $activeSlave.navelPiercing == 0>> - <<if $arcologies[0].FSDegradationist != "unset">> - <<set $activeSlave.navelPiercing = 2>> - <<else>> - <<set $activeSlave.navelPiercing = 1>> - <</if>> - <<run RulesDeconfliction($activeSlave)>> - <<if $activeSlave.navelPiercing != $slaveAfterRA.navelPiercing>> - <<set _piercingForbidden = 1, $activeSlave.navelPiercing = 0>> - <<else>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's navel pierced with a big ring. Whatever _he2 thinks in _his2 mind, _S.HeadGirl.slaveName makes clear to _him2 that _his2 body belongs to you. - <<else>> - _S.HeadGirl.slaveName knows that $activeSlave.slaveName needs help adjusting to life as a slave _girl2, so $he has the slave's navel pierced. The prettier _his2 lower half looks, the less reluctant _he2 should feel to take it up the butt. - <</if>> - <<run cashX(forceNeg($modCost), "slaveMod", $activeSlave)>> - <<break>> - <</if>> - <</if>> - <<break>> - <</for>> - <<if _piercingForbidden>> - <<if $arcologies[0].FSDegradationist != "unset">> - _S.HeadGirl.slaveName thinks some piercings might push $activeSlave.slaveName to adjust to life as a slave _girl2, but $he also knows you have rules applied to this slave that forbid it. - <<else>> - _S.HeadGirl.slaveName thinks some cute piercings might help $activeSlave.slaveName adjust to life as a slave _girl2, but $he also knows you have rules applied to this slave that forbid it. - <</if>> - <</if>> - <</if>> -<</if>> - -<<set $slaves[$slaveIndices[$activeSlave.ID]] = $activeSlave>> /* save changes */ diff --git a/src/uncategorized/penthouseReport.tw b/src/uncategorized/penthouseReport.tw deleted file mode 100644 index 8119bfbbce3a0627c94ccc60c6b6057dd1b48e86..0000000000000000000000000000000000000000 --- a/src/uncategorized/penthouseReport.tw +++ /dev/null @@ -1,44 +0,0 @@ -:: Penthouse Report [nobr] - -<<set _SL = $slaves.length>> - -<<set _HGSuitSlaves = App.Utils.jobForAssignment(Job.HEADGIRLSUITE).employees()>> - -<<for $i = 0; $i < _SL; $i++>> - <<if assignmentVisible($slaves[$i])>> - <div> - <<includeDOM App.EndWeek.favoriteIcon($slaves[$i])>> - <span class='slave-name'><<= SlaveFullName($slaves[$i])>></span> - <<if $slaves[$i].choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob($slaves[$i])>> - $He - <</if>> - <<include "Full Report">> - <br><br> - - <<if ($slaves[$i].ID == $HeadGirlID) && (_HGSuitSlaves.length > 0)>> - /% We found the Head Girl, now let's find her slave %/ - <<set _iTemp = $i>> - <<set _ID = _HGSuitSlaves[0].ID, $i = $slaveIndices[_ID]>> - - <<if $slaves[$i].assignment != "live with your Head Girl">> - <br>@@.red;$slaves[$i].slaveName had been assigned to live with your Head Girl, but this week $he was assigned to $slaves[$i].assignment. $He has been released to your penthouse for reassignment.@@ - <<= removeJob($slaves[$i], "live with your Head Girl")>> - <<else>> - <span class='slave-name'><<= SlaveFullName($slaves[$i])>></span> - <<if $slaves[$i].choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob($slaves[$i])>> - $He - <</if>> - <<includeDOM App.SlaveAssignment.liveWithHG($slaves[$i])>> - <br><br> - <</if>> - - <<set $i = _iTemp>> - <</if>> - <br style="clear: both;"></div> - <</if>> -<</for>> - -/* count open spots in facilities after all assignments have been decided for the week */ -<<set $brothelSpots = App.Entity.facilities.brothel.freeSpace, $clubSpots = App.Entity.facilities.club.freeSpace, $dairySpots = App.Entity.facilities.dairy.freeSpace, $servantsQuartersSpots = App.Entity.facilities.servantsQuarters.freeSpace>> 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>>