diff --git a/src/endWeek/servantsQuartersReport.js b/src/endWeek/servantsQuartersReport.js new file mode 100644 index 0000000000000000000000000000000000000000..e2358d84f888603a48b16c9b49535c73514388ab --- /dev/null +++ b/src/endWeek/servantsQuartersReport.js @@ -0,0 +1,355 @@ +App.EndWeek.servantsQuartersReport = function() { + let frag = document.createDocumentFragment(); + + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.servantsQuarters); + const devBonus = (V.servantsQuartersDecoration !== "standard") ? 1 : 0; + let stewardessBonus = 0; + + function stewardessText() { + let r = []; + let FLsFetish = 0; + let stewardessImpregnated = 0; + + if (S.Stewardess) { + S.Stewardess.devotion += devBonus; + if (S.Stewardess.health.condition < -80) { + improveCondition(S.Stewardess, 20); + } else if ((S.Stewardess.health.condition < -40)) { + improveCondition(S.Stewardess, 15); + } else if ((S.Stewardess.health.condition < 0)) { + improveCondition(S.Stewardess, 10); + } else if ((S.Stewardess.health.condition < 90)) { + improveCondition(S.Stewardess, 7); + } + if (S.Stewardess.devotion <= 60) { + S.Stewardess.devotion++; + } + if (S.Stewardess.trust < 60) { + S.Stewardess.trust++; + } + if (S.Stewardess.fetishStrength <= 95) { + if (S.Stewardess.fetish !== "dom") { + if (fetishChangeChance(S.Stewardess) > jsRandom(0, 100)) { + FLsFetish = 1; + S.Stewardess.fetishKnown = 1; + S.Stewardess.fetish = "dom"; + } + } else if (S.Stewardess.fetishKnown === 0) { + FLsFetish = 1; + S.Stewardess.fetishKnown = 1; + } else { + FLsFetish = 2; + S.Stewardess.fetishStrength += 4; + } + } + if (S.Stewardess.rules.living !== "luxurious") { + S.Stewardess.rules.living = "luxurious"; + } + V.Stewardess = S.Stewardess; // FIXME: #1717 Stewardess subtask + + const {He, he, His, his, him, wife} = getPronouns(S.Stewardess); + r.push(`${SlaveFullName(S.Stewardess)} is serving as your Stewardess.`); + if (S.Stewardess.relationship === -3 && S.Stewardess.devotion > 50) { + r.push(`${He} does ${his} best to be your perfect lovely house${wife}.`); + } + if (V.stewardessImpregnates === 1 && canPenetrate(S.Stewardess) && S.Stewardess.pubertyXY === 1) { + for (const slave of slaves) { + if (canImpreg(slave, S.Stewardess)) { // FIXME: assumes vaginal pregnancy without check + seX(S.Stewardess, "penetrative", slave, "vaginal", 10); + r.push(knockMeUp(slave, 100, 2, S.Stewardess.ID)); + if (slave.vagina === 0) { + slave.vagina = 1; // FIXME: silent virginity loss? + } + stewardessImpregnated++; + slave.need = 0; + } + } + if (stewardessImpregnated > 0) { + r.push(`It's ${his} responsibility to keep ${his} charges pregnant, so`); + if (stewardessImpregnated === 1) { + r.push(`${he} cums in the only fertile slave's pussy all week.`); + } else { + r.push(`${he} ensures the ${stewardessImpregnated} fertile servants are full of ${his} cum at all times.`); + } + if (S.Stewardess.career === "a breeding bull") { + r.push(`${He} was conditioned to fill empty wombs, so ${he} takes a <span class="hotpink">deep pleasure</span> in ${his} job.`); + S.Stewardess.devotion++; + } + S.Stewardess.need = 0; + } + } + if (FLsFetish === 1) { + r.push(`${He}'s allowed and even expected to use ${his} charges for ${his} own gratification, and sometimes they'll even instigate submissive sex with ${him} just to ingratiate themselves. ${He} becomes comfortable with the role of a <span class="lightcoral">sexual dominant.</span>`); + } else if (FLsFetish === 2) { + r.push(`Having a legion of servants jumping to obey ${his} daily commands <span class="lightsalmon">makes ${him} more dominant.</span>`); + } + if (S.Stewardess.health.condition < 10) { + r.push(`Though ${he} tries to watch the servants, ${his} lack of good health inhibits ${him}.`); + } else if (S.Stewardess.health.condition < 80) { + stewardessBonus += 50; + r.push(`${His} good health allows ${him} to work long hours and <span class="yellowgreen">drive</span> the servants hard.`); + } else { + stewardessBonus += 75; + r.push(`${His} perfect health allows ${him} to work exhaustive hours and <span class="yellowgreen">drive</span> the servants very hard.`); + } + if (setup.stewardessCareers.includes(S.Stewardess.career)) { + stewardessBonus += 25; + r.push(`${He} has applicable experience with daily sums and organizational trifles from ${his} life before ${he} was a slave.`); + } else if (S.Stewardess.skill.stewardess >= V.masteredXP) { + stewardessBonus += 25; + r.push(`${He} has applicable experience with daily sums and organizational trifles from working for you.`); + } else { + S.Stewardess.skill.stewardess += jsRandom(1, Math.ceil((S.Stewardess.intelligence + S.Stewardess.intelligenceImplant) / 15) + 8); + } + if (S.Stewardess.actualAge > 35) { + stewardessBonus += 25; + r.push(`${His} age and experience give ${him} added effectiveness.`); + } else if (V.AgePenalty === 0) { + stewardessBonus +=25; + } + if (S.Stewardess.intelligence + S.Stewardess.intelligenceImplant > 15) { + stewardessBonus += S.Stewardess.intelligence + S.Stewardess.intelligenceImplant; + r.push(`${He}'s smart enough that ${he} misses very little.`); + } + const bonusToggle = S.Stewardess.energy > 95 || (S.Stewardess.fetishKnown === 1 && S.Stewardess.fetish === "dom"); + for (const slave of slaves) { + const {he2, him2, his2} = getPronouns(slave).appendSuffix('2'); + if (S.Stewardess.rivalryTarget === slave.ID) { + r.push(`${He} bears down on ${his} ${rivalryTerm(S.Stewardess)}, ${slave.slaveName}, forcing ${him2} to work extra hard or suffer punishment.`); + slave.devotion--; + slave.trust--; + if (jsRandom(1, 100) > 65) { + S.Stewardess.rivalry++; + slave.rivalry++; + } + } else if (S.Stewardess.relationshipTarget === slave.ID) { + r.push(`${He} dotes over ${his} ${relationshipTerm(S.Stewardess)}}, _${slave.slaveName}, making sure ${he2} knows how to do a good job and keeping ${him2} well stocked with everything ${he2} needs.`); + slave.devotion++; + } else if (areRelated(S.Stewardess, slave)) { + r.push(`${He} pays special attention to ${his} ${relativeTerm(S.Stewardess, slave)}, ${slave.slaveName}, making sure ${he2} doesn't slack off just because they are related.`); + slave.trust++; + } + switch (slave.prestigeDesc) { + case "$He is a famed Free Cities whore, and commands top prices.": + r.push(`${He} does ${his} best to motivate the famous whore, ${slave.slaveName}, though ${he} is uncertain why ${he2} is here.`); + break; + case "$He is a famed Free Cities slut, and can please anyone.": + r.push(`${He} ignores ${his} duties in order the fawn over the famous entertainer, ${slave.slaveName}.`); + break; + case "$He is remembered for winning best in show as a cockmilker.": + if ((slave.dick !== 0) && (slave.balls !== 0) && (slave.prostate > 1)) { + r.push(`${slave.slaveName} leaves a trail of cum wherever ${he2} goes and frequently stops to masturbate, greatly annoying ${S.Stewardess.slaveName}.`); + if (jsRandom(1, 100) > 90 && S.Stewardess.rivalry === 0 && slave.rivalry === 0) { + S.Stewardess.rivalryTarget = slave.ID; + S.Stewardess.rivalry++; + slave.rivalryTarget = S.Stewardess.ID; + slave.rivalry++; + } + } + break; + case "$He is remembered for winning best in show as a dairy cow.": + if ((slave.lactation > 0) && ((slave.boobs-slave.boobsImplant) > 6000)) { + r.push(`${slave.slaveName}'s huge breasts frequently get in the way of ${his2} work and ${he2} leaks milk everywhere, greatly annoying ${S.Stewardess.slaveName}.`); + if (jsRandom(1, 100) > 90 && S.Stewardess.rivalry === 0 && slave.rivalry === 0) { + S.Stewardess.rivalryTarget = slave.ID; + S.Stewardess.rivalry++; + slave.rivalryTarget = S.Stewardess.ID; + slave.rivalry++; + } + } + break; + case "$He is remembered for winning best in show as a breeder.": + if (slave.bellyPreg >= 10000) { + r.push(`${slave.slaveName}'s big pregnant belly frequently gets in the way of ${his2} work. However, ${S.Stewardess.slaveName} is willing to overlook it, as well as allow ${him2} easy jobs, due to how valuable ${his2} womb is.`); + } + break; + } + if (bonusToggle && slave.devotion < 45) { + slave.devotion += 5; + } + } + if (slaves.length > 0) { + if (S.Stewardess.fetishKnown === 1 && S.Stewardess.fetish === "dom") { + r.push(`${He} walks among the cowering servants as a queen among peasants, playing the role of a dominant to perfection and increasing ${his} charges' <span class="hotpink">obedience.</span>`); + } else if (S.Stewardess.energy > 95) { + r.push(`${He} walks among the cowering servants looking for an excuse to extract sex from shirkers as <span class="hotpink">punishment.</span>`); + } + cashX(stewardessBonus * slaves.length, "servantsQuarters", S.Stewardess); + } + if (V.arcologies[0].FSRestart !== "unset" && stewardessImpregnated > 0 && V.eugenicsFullControl !== 1) { + r.push(`<br>The Societal Elite know you've ordered ${S.Stewardess.slaveName} to impregnate your maids. <span class="red">They are not amused by your disinterest in eugenics.</span>`); + V.failedElite += 10; + } + } + return r.join(' '); + } + + /** Generate (and return, if not silent) the "standard" part of the slave report + * @param {App.Entity.SlaveState} slave + * @param {boolean} silent + * @returns {HTMLElement|null} + */ + function standardSlaveReport(slave, silent) { + const clothes = App.SlaveAssignment.choosesOwnClothes(slave); + tired(slave); + const rules = App.UI.DOM.renderPassage("SA rules"); + const diet = App.UI.DOM.renderPassage("SA diet"); + const ltEffects = App.UI.DOM.renderPassage("SA long term effects"); + const drugs = App.SlaveAssignment.drugs(slave); + const relationships = App.UI.DOM.renderPassage("SA relationships"); + const rivalries = App.UI.DOM.renderPassage("SA rivalries"); + const devotion = App.UI.DOM.renderPassage("SA devotion"); + if (!silent) { + const content = App.UI.DOM.makeElement("div", '', "indent"); + $(content).append(clothes, rules, diet, ltEffects, drugs, relationships, rivalries, document.createElement('br'), devotion); + return content; + } + } + + const stewardessEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(stewardessEffects).append(stewardessText()); + + if (slaves.length > 0) { + const intro = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + let r = []; + if (slaves.length > 1) { + r.push(`<strong>There are ${slaves.length} slaves working out of the servants' quarters.</strong> They work to`); + } else { + const {He} = getPronouns(slaves[0]); + r.push(`<strong>There is one slave working out of the servants' quarters.</strong> ${He} works to`); + } + r.push(`<span class="yellowgreen">reduce</span> your household expenses; having a well-staffed house slightly <span class="green">increases</span> your reputation.`); + $(intro).append(r.join(' ')); + } + + if (S.Stewardess) { + /** @type {App.Entity.SlaveState} */ + const slave = S.Stewardess; + V.i = V.slaveIndices[slave.ID]; + App.Utils.setLocalPronouns(slave); // need this for the includes + /* 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"]); + } + $(stewardessEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> is serving as your Stewardess.`); + $(stewardessEntry).append(standardSlaveReport(slave, false)); + } else { + standardSlaveReport(slave, true); + } + V.Stewardess = S.Stewardess; // FIXME: #1717 Stewardess subtask + } + + V.servantMilkersMultiplier = 0.5; + let SQMilk = 0; + let SQMilkSale = 0; + + for (const slave of slaves) { + V.i = V.slaveIndices[slave.ID]; + slave.devotion += devBonus; + if (slave.devotion <= 20 && slave.trust >= -20) { + slave.devotion -= 5; + slave.trust -= 5; + } else if (slave.devotion <= 10) { + slave.devotion += 2; + } else if (slave.devotion >= 80) { + slave.devotion -= 2; + } + if (slave.devotion < -20) { + slave.trust += 3; + } else if (slave.trust < -50) { + slave.trust += 2; + } else if (slave.trust < -30) { + slave.trust += 1; + } + if (slave.health.condition < -80) { + improveCondition(slave, 20); + } else if (slave.health.condition < -40) { + improveCondition(slave, 10); + } else if (slave.health.condition < 0) { + improveCondition(slave, 7); + } else if (slave.health.condition < 90) { + improveCondition(slave, 3); + } + switch (V.servantsQuartersDecoration) { + case "Arabian Revivalist": + case "Aztec Revivalist": + case "Chattel Religionist": + case "Chinese Revivalist": + case "Degradationist": + case "Edo Revivalist": + case "Egyptian Revivalist": + case "Roman Revivalist": + case "Subjugationist": + case "Supremacist": + slave.rules.living = "spare"; + break; + case "Slave Professionalism": + if (slave.intelligence+slave.intelligenceImplant > 15) { + slave.rules.living = "normal"; + } else { + slave.rules.living = "spare"; + } + break; + case "Petite Admiration": + case "Statuesque Glorification": + if (heightPass(slave)) { + slave.rules.living = "normal"; + } else { + slave.rules.living = "spare"; + } + break; + default: + slave.rules.living = "normal"; + } + + App.Utils.setLocalPronouns(slave); // need this for the includes + 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"]); + } + $(slaveEntry).append(`<span class='slave-name'>${SlaveFullName(slave)}</span> `); + if (slave.choosesOwnAssignment === 2) { + $(slaveEntry).append(App.UI.DOM.renderPassage("SA chooses own job")); + } else { + $(slaveEntry).append(`is working out of ${V.servantsQuartersName}.`); + } + const servantContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); + $(servantContent).append(`${He} ${App.SlaveAssignment.servant(slave)}`); + if ((V.servantMilkers === 1) && (slave.lactation > 0)) { + const milkContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent"); + $(milkContent).append(`${He} ${App.SlaveAssignment.getMilked(slave)}`); + SQMilk += V.milk; + SQMilkSale += V.milkSale; + } + $(slaveEntry).append(standardSlaveReport(slave, false)); + } else { + // discard return values silently + App.SlaveAssignment.servant(slave); + if ((V.servantMilkers === 1) && (slave.lactation > 0)) { + App.SlaveAssignment.getMilked(slave); + SQMilk += V.milk; + SQMilkSale += V.milkSale; + } + standardSlaveReport(slave, true); + } + } + + if (SQMilk > 0) { + const milkEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(milkEffects).append(`Since your lactating servants spend most of their time working in the penthouse, they use the milkers there, giving ${SQMilk} liters of milk over the week, which is sold for <span class="yellowgreen">${cashFormat(SQMilkSale)}.</span>`); + } + + if (V.servantsQuartersDecoration !== "standard") { + const decorationEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(decorationEffects).append(`${V.servantsQuartersNameCaps}'s ${V.servantsQuartersDecoration} atmosphere <span class="hotpink">has a minor impact on your servants.</span>`); + } + + V.servantMilkersMultiplier = 1; + repX(slaves.length * 20, "servantsQuarters"); + + return frag; +}; diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css index 083a1985fe51bbd417f4718fbc95ced8beb78041..e380ff8791f1bc0c60203b6c2562700912828939 100644 --- a/src/gui/css/mainStyleSheet.css +++ b/src/gui/css/mainStyleSheet.css @@ -307,6 +307,10 @@ table.corporate td { .tab { margin-left: 2em; } +div.slave-report { + margin-top: 1em; + margin-bottom: 1em; +} div.indent, p.indent { text-indent: 2em; } diff --git a/src/js/pregJS.js b/src/js/pregJS.js index 39d567cde31dcd49e6c25b1b4319d4480907a95e..1bcec8237648c669fcf309e101b18aa885ef1829 100644 --- a/src/js/pregJS.js +++ b/src/js/pregJS.js @@ -414,14 +414,15 @@ globalThis.setPregType = function(actor) { return Math.ceil(ovum); }; -/* - Penetrative ability, ability to become pregnant, and canBreed() must be checked outside of this. Designed to assume .eggType === "human". - target is the slave to get pregnant. Also accepts the PC. - chance is the % chance to conceive. - hole control's the hole involved (0 - vagina, 1 - ass, 2 - both). .mpreg did this. - fatherID is the ID of her sire or 0 if undefined. - displayOverride is an override if defined - fatherID must be defined in this case. -*/ +/** Attempt to get a slave pregnant + * Penetrative ability, ability to become pregnant, and canBreed() must be checked outside of this. Designed to assume .eggType === "human". + * @param {App.Entity.SlaveState} target is the slave to get pregnant. Also accepts the PC. + * @param {number} chance is the % chance to conceive. + * @param {number} hole control's the hole involved (0 - vagina, 1 - ass, 2 - both). .mpreg did this. + * @param {number} [fatherID] is the ID of her sire or 0 if undefined. + * @param {boolean} [displayOverride] is an override if defined - fatherID must be defined in this case. + * @returns {string} + */ globalThis.knockMeUp = function(target, chance, hole, fatherID, displayOverride) { let He; let r = ``; diff --git a/src/uncategorized/servantsQuartersReport.tw b/src/uncategorized/servantsQuartersReport.tw index 28abb38eff176e710cc78d5426016ef73962b9ad..6abf6fc4e9d59aec7819e2b6c0eaa63e013633f6 100644 --- a/src/uncategorized/servantsQuartersReport.tw +++ b/src/uncategorized/servantsQuartersReport.tw @@ -1,334 +1,5 @@ :: Servants' Quarters Report [nobr] -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.servantsQuarters)>> -<<set _DL = _slaves.length, _SL = $slaves.length, _FLsFetish = 0, $stewardessBonus = 0>> - -<<if $servantsQuartersDecoration != "standard">> - <<set _devBonus = 1>> -<<else>> - <<set _devBonus = 0>> -<</if>> - -<<if ($Stewardess != 0)>> - <<set _FLs = $slaveIndices[$Stewardess.ID]>> - - <<set $slaves[_FLs].devotion += _devBonus>> - <<if ($slaves[_FLs].health.condition < -80)>> - <<run improveCondition($slaves[_FLs], 20)>> - <<elseif ($slaves[_FLs].health.condition < -40)>> - <<run improveCondition($slaves[_FLs], 15)>> - <<elseif ($slaves[_FLs].health.condition < 0)>> - <<run improveCondition($slaves[_FLs], 10)>> - <<elseif ($slaves[_FLs].health.condition < 90)>> - <<run improveCondition($slaves[_FLs], 7)>> - <</if>> - <<if $slaves[_FLs].devotion <= 60>> - <<set $slaves[_FLs].devotion++>> - <</if>> - <<if $slaves[_FLs].trust < 60>> - <<set $slaves[_FLs].trust++>> - <</if>> - <<if $slaves[_FLs].fetishStrength <= 95>> - <<if $slaves[_FLs].fetish != "dom">> - <<if fetishChangeChance($slaves[_FLs]) > random(0,100)>> - <<set _FLsFetish = 1, $slaves[_FLs].fetishKnown = 1, $slaves[_FLs].fetish = "dom">> - <</if>> - <<elseif $slaves[_FLs].fetishKnown == 0>> - <<set _FLsFetish = 1, $slaves[_FLs].fetishKnown = 1>> - <<else>> - <<set _FLsFetish = 2, $slaves[_FLs].fetishStrength += 4>> - <</if>> - <</if>> - <<if $slaves[_FLs].rules.living != "luxurious">> - <<set $slaves[_FLs].rules.living = "luxurious">> - <</if>> - <<set $Stewardess = $slaves[_FLs]>> - <<setLocalPronouns $Stewardess>> - <<= SlaveFullName($Stewardess)>> is serving as your Stewardess.<<if $Stewardess.relationship == -3 && $Stewardess.devotion > 50>> $He does $his best to be your perfect lovely house<<= $wife>>.<</if>> - <<if ($stewardessImpregnates == 1) && (_DL > 0) && (canPenetrate($Stewardess)) && $Stewardess.pubertyXY == 1>> - <<set _stewardessImpregnated = 0>> - <<for _slave range _slaves>> - <<if (canImpreg(_slave, $Stewardess))>> - <<= knockMeUp(_slave, 100, 2, $Stewardess.ID)>> - <<set _slave.preg = 1, _slave.pregKnown = 1, _slave.pregWeek = 1, _slave.pregSource = $Stewardess.ID>><<set _slave.pregType = setPregType(_slave)>> - <<set WombImpregnate(_slave, _slave.pregType, _slave.pregSource, 1)>> - <<set _slave.vagina = Math.clamp(_slave.vagina,1,10), _stewardessImpregnated++, _slave.counter.vaginal += 10, $vaginalTotal += 10>> - <<set _slave.need = 0>> - <</if>> - <</for>> - <<if _stewardessImpregnated > 0>> - It's $his responsibility to keep $his charges pregnant, so - <<if _stewardessImpregnated == 1>> - $he cums in the only fertile slave's pussy all week. - <<else>> - $he ensures the _stewardessImpregnated fertile servants are full of $his cum at all times. - <</if>> - <<if $Stewardess.career == "a breeding bull">> - $He was conditioned to fill empty wombs, so $he takes a @@.hotpink;deep pleasure@@ in $his job. - <<set $slaves[_FLs].devotion++>> - <</if>> - <<set _Tmult = (_stewardessImpregnated * 10), $slaves[_FLs].counter.penetrative += _Tmult, $Stewardess.counter.penetrative += _Tmult, $penetrativeTotal += _Tmult>> - <<set $slaves[_FLs].need = 0>> - <</if>> - <</if>> - <<if _FLsFetish == 1>> - $He's allowed and even expected to use $his charges for $his own gratification, and sometimes they'll even instigate submissive sex with $him just to ingratiate themselves. $He becomes comfortable with the role of a @@.lightcoral;sexual dominant.@@ - <<elseif _FLsFetish == 2>> - Having a legion of servants jumping to obey $his daily commands @@.lightsalmon;makes $him more dominant.@@ - <</if>> - <<if ($Stewardess.health.condition < 10)>> - Though $he tries to watch the servants, $his lack of good health inhibits $him. - <<elseif ($Stewardess.health.condition < 80)>> - <<set $stewardessBonus += 50>> - $His good health allows $him to work long hours and @@.yellowgreen;drive@@ the servants hard. - <<else>> - <<set $stewardessBonus += 75>> - $His perfect health allows $him to work exhaustive hours and @@.yellowgreen;drive@@ the servants very hard. - <</if>> - <<if setup.stewardessCareers.includes($Stewardess.career)>> - <<set $stewardessBonus += 25>> - $He has applicable experience with daily sums and organizational trifles from $his life before $he was a slave. - <<elseif $Stewardess.skill.stewardess >= $masteredXP>> - <<set $stewardessBonus += 25>> - $He has applicable experience with daily sums and organizational trifles from working for you. - <<else>> - <<set $slaves[_FLs].skill.stewardess += random(1,Math.ceil(($Stewardess.intelligence+$Stewardess.intelligenceImplant)/15) + 8)>> - <</if>> - <<if ($Stewardess.actualAge > 35)>> - <<set $stewardessBonus += 25>> - $His age and experience give $him added effectiveness. - <<elseif $AgePenalty == 0>> - <<set $stewardessBonus +=25>> - <</if>> - <<if ($Stewardess.intelligence+$Stewardess.intelligenceImplant > 15)>> - <<set $stewardessBonus += $Stewardess.intelligence+$Stewardess.intelligenceImplant>> - $He's smart enough that $he misses very little. - <</if>> - <<if ($Stewardess.energy > 95) || (($Stewardess.fetishKnown == 1) && ($Stewardess.fetish == "dom"))>> - <<set _BonusToggle = 1>> - <<else>> - <<set _BonusToggle = 0>> - <</if>> - <<for _slave range _slaves>> - <<setLocalPronouns _slave 2>> - <<if $Stewardess.rivalryTarget == _slave.ID>> - $He bears down on $his <<print rivalryTerm($Stewardess)>>, _slave.slaveName, forcing _him2 to work extra hard or suffer punishment. - <<set _slave.devotion--, _slave.trust-->> - <<if random(1,100) > 65>> - <<set $Stewardess.rivalry++, $slaves[_FLs].rivalry++, _slave.rivalry++>> - <</if>> - <<elseif $Stewardess.relationshipTarget == _slave.ID>> - $He dotes over $his <<print relationshipTerm($Stewardess)>>, _slave.slaveName, making sure _he2 knows how to do a good job and keeping _him2 well stocked with everything _he2 needs. - <<set _slave.devotion++>> - <<elseif areRelated($Stewardess, _slave)>> - $He pays special attention to $his <<print relativeTerm($Stewardess,_slave)>>, _slave.slaveName, making sure _he2 doesn't slack off just because they are related. - <<set _slave.trust++>> - <</if>> - <<switch _slave.prestigeDesc>> - <<case "$He is a famed Free Cities whore, and commands top prices.">> - $He does $his best to motivate the famous whore, _slave.slaveName, though $he is uncertain why _he2 is here. - <<case "$He is a famed Free Cities slut, and can please anyone.">> - $He ignores $his duties in order the fawn over the famous entertainer, _slave.slaveName. - <<case "$He is remembered for winning best in show as a cockmilker.">> - <<if (_slave.dick != 0) && (_slave.balls != 0) && (_slave.prostate > 1)>> - _slave.slaveName leaves a trail of cum wherever _he2 goes and frequently stops to masturbate, greatly annoying $Stewardess.slaveName. - <<if random(1,100) > 90 && $Stewardess.rivalry == 0 && _slave.rivalry == 0>> - <<set $Stewardess.rivalryTarget = _slave.ID, $Stewardess.rivalry++, $slaves[_FLs].rivalryTarget = _slave.ID, $slaves[_FLs].rivalry++>> - <<set _slave.rivalryTarget = $Stewardess.ID, _slave.rivalry++>> - <</if>> - <</if>> - <<case "$He is remembered for winning best in show as a dairy cow.">> - <<if (_slave.lactation > 0) && ((_slave.boobs-_slave.boobsImplant) > 6000)>> - _slave.slaveName's huge breasts frequently get in the way of _his2 work and _he2 leaks milk everywhere, greatly annoying $Stewardess.slaveName. - <<if random(1,100) > 90 && $Stewardess.rivalry == 0 && _slave.rivalry == 0>> - <<set $Stewardess.rivalryTarget = _slave.ID, $Stewardess.rivalry++, $slaves[_FLs].rivalryTarget = _slave.ID, $slaves[_FLs].rivalry++>> - <<set _slave.rivalryTarget = $Stewardess.ID, _slave.rivalry++>> - <</if>> - <</if>> - <<case "$He is remembered for winning best in show as a breeder.">> - <<if _slave.bellyPreg >= 10000>> - _slave.slaveName's big pregnant belly frequently gets in the way of _his2 work. However, $Stewardess.slaveName is willing to overlook it, as well as allow _him2 easy jobs, due to how valuable _his2 womb is. - <</if>> - <</switch>> - <<if (_BonusToggle == 1) && (_slave.devotion < 45)>> - <<set _slave.devotion += 5>> - <</if>> - <</for>> - <<if (_DL > 0)>> - <<if ($Stewardess.fetishKnown == 1) && ($Stewardess.fetish == "dom")>> - $He walks among the cowering servants as a queen among peasants, playing the role of a dominant to perfection and increasing $his charges' @@.hotpink;obedience.@@ - <<elseif ($Stewardess.energy > 95)>> - $He walks among the cowering servants looking for an excuse to extract sex from shirkers as @@.hotpink;punishment.@@ - <</if>> - /% Get it out of the loop %/ - <<run cashX(($stewardessBonus * _DL), "servantsQuarters", $Stewardess)>> - <br><br> - <</if>> -<</if>> - -<<if $arcologies[0].FSRestart != "unset" && _stewardessImpregnated == 1 && $eugenicsFullControl != 1>> - The Societal Elite know you've ordered $Stewardess.slaveName to impregnate your maids. @@.red;They are not amused by your disinterest in eugenics.@@ - <<set $failedElite += 10>> -<</if>> -<<if (_DL > 0)>> - <<setLocalPronouns _slaves[0]>> - <<if (_DL != 1)>>''There are _DL slaves working out of the servants' quarters.'' They work to<<else>>''There is one slave working out of the servants' quarters.'' $He works to<</if>> @@.yellowgreen;reduce@@ your household expenses; having a well-staffed house slightly @@.green;increases@@ your reputation. -<</if>> - -<<if ($Stewardess != 0)>> - <<set $i = _FLs>> /* apply following SA passages to facility leader */ - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt($slaves[_FLs], 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <span class='slave-name'><<= SlaveFullName($slaves[_FLs])>></span> is serving as your Stewardess. - <br> - <<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run tired($slaves[$i])>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<= App.SlaveAssignment.drugs($slaves[$i])>> - <<include "SA relationships">> - <<include "SA rivalries">> - <br><<include "SA devotion">> - <<else>> - <<silently>> - <<run App.SlaveAssignment.choosesOwnClothes($slaves[$i])>> - <<run tired($slaves[$i])>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<run App.SlaveAssignment.drugs($slaves[$i])>> - <<include "SA relationships">> - <<include "SA rivalries">> - <<include "SA devotion">> - <</silently>> - <</if>> - <<set $Stewardess = $slaves[_FLs]>> -<</if>> - -<<set $servantMilkersMultiplier = 0.5, _SQMilk = 0, _SQMilkSale = 0>> - -<<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<set _slave.devotion += _devBonus>> - <<setLocalPronouns _slave 2>> - <<if (_slave.devotion <= 20) && (_slave.trust >= -20)>> - <<set _slave.devotion -= 5, _slave.trust -= 5>> - <<elseif (_slave.devotion <= 10)>> - <<set _slave.devotion += 2>> - <<elseif (_slave.devotion >= 80)>> - <<set _slave.devotion -= 2>> - <</if>> - <<if (_slave.devotion < -20)>> - <<set _slave.trust += 3>> - <<elseif (_slave.trust < -50)>> - <<set _slave.trust += 2>> - <<elseif (_slave.trust < -30)>> - <<set _slave.trust += 1>> - <</if>> - <<if (_slave.health.condition < -80)>> - <<run improveCondition(_slave, 20)>> - <<elseif (_slave.health.condition < -40)>> - <<run improveCondition(_slave, 10)>> - <<elseif (_slave.health.condition < 0)>> - <<run improveCondition(_slave, 7)>> - <<elseif (_slave.health.condition < 90)>> - <<run improveCondition(_slave, 3)>> - <</if>> - <<switch $servantsQuartersDecoration>> - <<case "Arabian Revivalist" "Aztec Revivalist" "Chattel Religionist" "Chinese Revivalist" "Degradationist" "Edo Revivalist" "Egyptian Revivalist" "Roman Revivalist" "Subjugationist" "Supremacist">> - <<set _slave.rules.living = "spare">> - <<case "Slave Professionalism">> - <<if _slave.intelligence+_slave.intelligenceImplant > 15>> - <<set _slave.rules.living = "normal">> - <<else>> - <<set _slave.rules.living = "spare">> - <</if>> - <<case "Petite Admiration">> - <<if heightPass(_slave)>> - <<set _slave.rules.living = "normal">> - <<else>> - <<set _slave.rules.living = "spare">> - <</if>> - <<case "Statuesque Glorification">> - <<if heightPass(_slave)>> - <<set _slave.rules.living = "normal">> - <<else>> - <<set _slave.rules.living = "spare">> - <</if>> - <<default>> - <<set _slave.rules.living = "normal">> - <</switch>> - <<if $showEWD != 0>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_slave, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <span class='slave-name'><<= SlaveFullName(_slave)>></span> - <<if _slave.choosesOwnAssignment == 2>> - <<include "SA chooses own job">> - <<else>> - is working out of $servantsQuartersName. - <</if>> - <br> _He2 <<= App.SlaveAssignment.servant(_slave)>> - <<if ($servantMilkers == 1) && (_slave.lactation > 0)>> - <br> _He2 <<= App.SlaveAssignment.getMilked(_slave)>> - <<set _SQMilk += $milk, _SQMilkSale += $milkSale>> - <</if>> - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<= App.SlaveAssignment.drugs(_slave)>> - <<include "SA relationships">> - <<include "SA rivalries">> - <br><<include "SA devotion">> - <<else>> - <<silently>> - <<include "SA chooses own job">> - <<run App.SlaveAssignment.servant(_slave)>> - <<if ($servantMilkers == 1) && (_slave.lactation > 0)>> - <<run App.SlaveAssignment.getMilked(_slave)>> - <<set _SQMilk += $milk, _SQMilkSale += $milkSale>> - <</if>> - <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<include "SA rules">> - <<include "SA diet">> - <<include "SA long term effects">> - <<run App.SlaveAssignment.drugs(_slave)>> - <<include "SA relationships">> - <<include "SA rivalries">> - <<include "SA devotion">> - <</silently>> - <</if>> -<</for>> - -<<if _SQMilk > 0 || $servantsQuartersDecoration != "standard">> - <br><br> - <<if _SQMilk > 0>> - Since your lactating servants spend most of their time working in the penthouse, they use the milkers there, giving _SQMilk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat(_SQMilkSale)>>.@@ - <</if>> -<</if>> - -<<if $servantsQuartersDecoration != "standard">> - <br><br> $servantsQuartersNameCaps's $servantsQuartersDecoration atmosphere @@.hotpink;has a minor impact on your servants.@@ -<</if>> - -<<set $servantMilkersMultiplier = 1>> -<<run repX(_DL*20, "servantsQuarters")>> - -<<if _DL > 0 || $Stewardess != 0>> - <br><br> -<</if>> +/* 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()>>