From 1e2b0dce9db6ed9d2a7a6c37eb62e9b0a84ef272 Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Wed, 23 Sep 2020 13:58:58 -0700 Subject: [PATCH] Master Suite Report to DOM --- src/endWeek/masterSuiteReport.js | 463 +++++++++++++++++++++++++ src/uncategorized/masterSuiteReport.tw | 398 +-------------------- 2 files changed, 466 insertions(+), 395 deletions(-) create mode 100644 src/endWeek/masterSuiteReport.js diff --git a/src/endWeek/masterSuiteReport.js b/src/endWeek/masterSuiteReport.js new file mode 100644 index 00000000000..20e78be18cf --- /dev/null +++ b/src/endWeek/masterSuiteReport.js @@ -0,0 +1,463 @@ +App.EndWeek.masterSuiteReport = function() { + let frag = document.createDocumentFragment(); + const slaves = App.Utils.sortedEmployees(App.Entity.facilities.masterSuite); + const msAvg = App.Utils.masterSuiteAverages(); + + // find a potential legendary abolitionist + const abolitionist = slaves.find((s) => (s.devotion > 95) && (s.prestige === 0) && ( + (s.origin === "You sentenced $him to enslavement as a punishment for attempted theft of a slave.") || + (s.origin === "$He is an enslaved Daughter of Liberty.") || + (s.origin === "You got $him at the Slave Shelter. $He is an enslaved Daughter of Liberty, caught some weeks after the failed coup. $His previous owner used $him as a punching bag and dart board, then when he was bored of $him tattooed obscenities all over $his body and threw $him away.") || + (s.origin === "$He is an enslaved member of an anti-slavery extremist group.") || + (s.career === "an antislavery activist") + )); + V.legendaryAbolitionistID = abolitionist ? abolitionist.ID : 0; + + const pregnantSlaves = V.masterSuiteUpgradePregnancy ? slaves.filter((s) => s.pregKnown > 0).length : 0; + + function concubineText() { + let r = []; + const {He, he, his, him, himself} = getPronouns(S.Concubine); + + r.push(`Your concubine <span class='slave-name'>${SlaveFullName(S.Concubine)}</span> is serving you in ${V.masterSuiteName}. More than any other slave, ${his} sexual brilliance and physical appeal are <span class="green">critical</span> to your reputation.`); + + if ((S.Concubine.prestigeDesc === "You bankrupted and enslaved $him in revenge for $his part in the attack on your arcology by the Daughters of Liberty.") && (S.Concubine.newGamePlus === 0)) { + r.push(`${He} was once your rival, and your relationship is widely thought to be <span class="green">the perfect modern romance.</span>`); + repX(500, "concubine", S.Concubine); + } else if ((S.Concubine.prestige > 0)) { + repX(500*S.Concubine.prestige, "concubine", S.Concubine); + if (V.verboseDescriptions === 1) { + r.push(`Keeping such a prestigious slave as your concubine <span class="green">adds to your fame.</span>`); + if (S.Concubine.prestigeDesc === "$He is a famed Free Cities whore, and commands top prices.") { + r.push(`When ${he} has a free moment, ${he} refines ${his} flexibility so that ${he} is prepared for any sexual position you can think of, and many more that ${he} researched just for your pleasure.`); + } + if (S.Concubine.prestigeDesc === "$He is a famed Free Cities slut, and can please anyone.") { + r.push(`When ${he} has a free moment, ${he} pretties ${himself} up so that ${he} may be as beautiful as possible to make you look even better.`); + } + if (S.Concubine.prestigeDesc === "$He is remembered for winning best in show as a cockmilker.") { + if (S.Concubine.balls > 10 || S.Concubine.prostate > 1) { + r.push(`${He} does ${his} best to prevent ${himself} from making a mess when you don't want one. When ${he} has free time, ${he} researches new techniques to make use of ${his} huge loads to entertain you.`); + } else if (S.Concubine.balls > 0) { + r.push(`When ${he} has a free moment, ${he} researches ways to increase the size of ${his} loads for you; ${he} dreams of the day ${he} show you just what ${he} was capable of.`); + } else { + r.push(`${He} wishes ${he} could blow huge loads for you, but without balls, there is little ${he} can do.`); + } + } + if (S.Concubine.prestigeDesc === "$He is remembered for winning best in show as a dairy cow.") { + if (S.Concubine.lactation > 1 || S.Concubine.lactationAdaptation > 90) { + r.push(`${He} does ${his} best to prevent ${himself} from making a mess when you don't want one. When ${he} has free time, ${he} researches new techniques to make use of ${his} excessive milk to entertain you.`); + } else if (S.Concubine.lactation > 0) { + r.push(`${He} does ${his} best to prevent ${himself} from making a mess when you don't want one. When ${he} has free time, ${he} researches new techniques to make use of ${his} breast milk to entertain you.`); + } else { + r.push(`${He} wishes ${he} could lactate for you, but ${he} has dried up since ${his} glory days.`); + } + } + if (S.Concubine.prestigeDesc === "$He is remembered for winning best in show as a breeder.") { + if (S.Concubine.bellyPreg >= 5000) { + r.push(`When ${he} has a free moment, ${he} refines ${his} flexibility so that ${he} can perform any sexual position possible for ${him} in ${his} motherly state. ${He} takes the time to look up new positions to work around ${his} growing pregnancy.`); + } else if (isFertile(S.Concubine) || S.Concubine.preg > 0) { + r.push(`When ${he} has a free moment, ${he} refines ${his} flexibility so that ${he} is prepared for any sexual position you can think of, no matter how heavy ${he} becomes with children.`); + } else { + r.push(`When ${he} has a free moment, ${he} researches ways to restore ${his} fertility; ${he} dreams of the day ${he} can carry `); + if (V.PC.dick !== 0) { + r.push(`your children.`); + } else { + r.push(`children for you.`); + } + } + } + } + } + if (S.Concubine.porn.prestige > 2) { + repX(800, "concubine", S.Concubine); + r.push(`Having a porn star as your personal bed warmer <span class="green">reflects on your standing.</span> Your citizens can only wonder at what kinky things happen behind closed doors.`); + } else if (S.Concubine.porn.prestige > 1) { + repX(300, "concubine", S.Concubine); + r.push(`Having a rising porn star as your personal bed warmer <span class="green">reflects on your standing.</span>`); + } + if (S.Concubine.counter.oral + S.Concubine.counter.anal + S.Concubine.counter.vaginal + S.Concubine.counter.mammary + S.Concubine.counter.penetrative > 1000) { + if (V.verboseDescriptions === 1) { + r.push(`Many citizens `); + if (S.Concubine.counter.publicUse > 10) { + r.push(`remember having had ${him} themselves, and`); + } + r.push(`<span class="green">respectfully</span> envy you ${his} exclusive company.`); + } + repX(300, "concubine", S.Concubine); + } + /* Perform facility based rule changes - FIXME - dev/trust living condition changes probably should be in saRules; there's no text reporting these changes here */ + if (V.masterSuiteUpgradeLuxury > 0) { + S.Concubine.rules.living = "luxurious"; + S.Concubine.devotion += 4; + S.Concubine.trust += 4; + } else { + S.Concubine.rules.living = "normal"; + S.Concubine.devotion += 2; + S.Concubine.trust += 2; + } + repX(Beauty(S.Concubine) * 5 + (S.Concubine.skill.vaginal || 0) + (S.Concubine.skill.anal || 0) + (S.Concubine.skill.oral || 0) + (S.Concubine.skill.whoring || 0) + (S.Concubine.skill.entertainment || 0), "concubine", S.Concubine); + return r.join(' '); + } + + /** Generate text specific to non-concubine MS slaves + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ + function nonConcubineText(slave) { + let r = []; + r.push(`<span class='slave-name'>${SlaveFullName(slave)}</span>`); + if (slave.choosesOwnAssignment === 2) { + r.push(`${App.SlaveAssignment.choosesOwnJob(slave)}`); + } else { + r.push(`sees to your pleasure in ${V.masterSuiteName}.`); + } + /* Perform facility based rule changes - FIXME - dev/trust living condition changes probably should be in saRules; there's no text reporting these changes here */ + if (V.masterSuiteUpgradeLuxury === 1) { + slave.rules.living = "luxurious"; + if (slave.devotion <= 95) { + slave.devotion += 2; + } + if (slave.trust < 60) { + slave.trust++; + } + } else if (V.masterSuiteUpgradeLuxury === 2) { + slave.rules.living = "luxurious"; + if (slave.energy > 90) { + if (slave.devotion <= 95) { + slave.devotion += 2; + } + if (slave.trust <= 95) { + slave.trust += 2; + } + } else { + if (slave.devotion <= 60) { + slave.devotion++; + } + if (slave.trust < 60) { + slave.trust++; + } + } + } else { + slave.rules.living = "spare"; + if ((slave.devotion <= 20) && (slave.trust >= -20)) { + slave.devotion -= 2; + slave.trust -= 5; + } else if ((slave.devotion <= 60)) { + slave.devotion += 2; + } else if ((slave.devotion > 60)) { + slave.devotion -= 2; + } + if (slave.trust < 60) { + slave.trust++; + } + } + // decoration dev bonus (reported at end) + if (V.masterSuiteDecoration !== "standard") { + slave.devotion++; + } + return r.join(' '); + } + + /** Generate text shared by concubine and non-concubine MS slaves + * @param {App.Entity.SlaveState} slave + * @returns {DocumentFragment} + */ + function commonText(slave) { + const smallFrag = document.createDocumentFragment(); + let r = []; + const {He, he, His, his, him, himself} = getPronouns(slave); + + if (V.masterSuiteUpgradeLuxury === 2 && msAvg.energy > random(40, 90)) { + const energy = (Math.ceil(slave.energy / 5) * 7); + SimpleSexAct.Slave(slave, energy); + if (canPenetrate(slave)) { + actX(slave, "penetrative", random(1, 3) * energy); + } + if (slave.nipples === "fuckable" && msAvg.dick > 2) { + actX(slave, "mammary", random(1, 3) * energy); + } + if ((slave.trust >= -20) && (slave.devotion > -10) && (slave.fetishStrength <= 95) && slave.fetish !== "mindbroken") { + const fetishChange = fetishChangeChance(slave); + if ((msAvg.milk > 2000) && (fetishChange > random(0, 50))) { + if (slave.fetish === "boobs") { + if (V.verboseDescriptions === 1) { + r.push(`${His}`); + } else { + r.push(`${slave.slaveName}'s`); + } + r.push(`<span class="lightcoral">boob fetish is strengthened</span> by the constant availability of milky nipples for ${him} to play with.`); + slave.fetishStrength += 4; + } else { + if (V.verboseDescriptions === 1) { + r.push(`${He}`); + } else { + r.push(slave.slaveName); + } + r.push(`<span class="lightcoral">acquires a boob fetish</span> after spending a lot of time in the fuckpit drinking from ${his} fellow fucktoys' tits.`); + slave.fetish = "boobs"; + slave.fetishStrength = 65; + } + } else if ((msAvg.dick > 3) && (slave.anus > 0) && (fetishChange > random(0, 50))) { + r.push(`${He}`); + if (slave.fetish === "buttslut") { + r.push(`<span class="lightcoral">sinks farther into anal pleasure,</span> since ${he} spends ${his} time in the fuckpit with at least one of the many available cocks up ${his} butt.`); + slave.fetishStrength += 4; + } else { + r.push(`<span class="lightcoral">acquires an anal fetish</span> after helplessly orgasming at the mercy of your many fucktoys eager to shove their big stiff penises up ${his} ass.`); + slave.fetish = "buttslut"; + slave.fetishStrength = 65; + } + } else if ((msAvg.cum > 3) && (fetishChange > random(0, 50))) { + r.push(`${He}`); + if (slave.fetish === "cumslut") { + r.push(`<span class="lightcoral">sinks farther into cum addiction,</span> since ${he} spends ${his} time in the fuckpit eagerly sucking down ejaculate, straight from the many sources.`); + slave.fetishStrength += 4; + } else { + r.push(`<span class="lightcoral">acquires an oral fixation</span> after orally servicing your many fucktoys eager to blow their loads down ${his} throat.`); + slave.fetish = "cumslut"; + slave.fetishStrength = 65; + } + } else if ((msAvg.preg > 10) && (fetishChange > random(0, 50))) { + r.push(`${He}`); + if (slave.fetish === "pregnancy") { + r.push(`<span class="lightcoral">sinks farther into pregnancy obsession,</span> since ${he} never wants for a pregnant girl to make love to.`); + slave.fetishStrength += 4; + } else { + r.push(`<span class="lightcoral">acquires a pregnancy fetish,</span> since many of ${his} sexual partners in the fuckpit are heavily pregnant.`); + slave.fetish = "pregnancy"; + slave.fetishStrength = 65; + } + } else if ((msAvg.dom < -25) && (fetishChange > random(0, 50))) { + r.push(`${He}`); + if (slave.fetish === "dom") { + r.push(`<span class="lightcoral">becomes more dominant,</span> since there are so many subs in the fuckpit who beg ${him} to fuck them hard.`); + slave.fetishStrength += 4; + } else { + r.push(`<span class="lightcoral">becomes sexually dominant</span> after having fun satisfying the many submissive fucktoys in the fuckpit who beg ${him} to top them.`); + slave.fetish = "dom"; + slave.fetishStrength = 65; + } + } else if ((msAvg.dom > 25) && (fetishChange > random(0, 50))) { + r.push(`${He}`); + if (slave.fetish === "submissive") { + r.push(`<span class="lightcoral">becomes even more submissive,</span> since there are so many doms in the fuckpit that ${he}'s often used by more than one at once.`); + slave.fetishStrength += 4; + } else { + r.push(`<span class="lightcoral">becomes sexually submissive</span> after the many dominant slaves in the fuckpit hold ${him} down and use ${him} for their pleasure.`); + slave.fetish = "submissive"; + slave.fetishStrength = 65; + } + } else if ((msAvg.sadism < -25) && (fetishChange > random(0, 50))) { + r.push(`${He}`); + if (slave.fetish === "sadist") { + r.push(`<span class="lightcoral">becomes more sadistic,</span> since there are so many sluts in the fuckpit who will do anything for ${him} if ${he}'ll only spank them.`); + slave.fetishStrength += 4; + } else { + r.push(`<span class="lightcoral">becomes a bit of a sadist</span> after ${he} notices that so many of ${his} fellow fucktoys cum harder if ${he} gives them a good slap.`); + slave.fetish = "sadist"; + slave.fetishStrength = 65; + } + } else if ((msAvg.sadism > 25) && (fetishChange > random(0, 50))) { + if (slave.fetish === "masochist") { + if (V.verboseDescriptions === 1) { + r.push(`${His}`); + } else { + r.push(`${slave.slaveName}'s`); + } + r.push(`<span class="lightcoral">pain addiction deepens,</span> since the fuckpit is full of ladies happy to fuck ${him} while ${he} screams.`); + slave.fetishStrength += 4; + } else { + if (V.verboseDescriptions === 1) { + r.push(`${He}`); + } else { + r.push(slave.slaveName); + } + r.push(`<span class="lightcoral">learns masochism</span> after experiencing many orgasms under the exquisite sexual torture of the sadists in the fuckpit.`); + slave.fetish = "masochist"; + slave.fetishStrength = 65; + } + } + } + // FIXME: fuckpit means servant milkers get no milk at all?? + if (slave.lactation > 0) { + slave.lactationDuration = 2; + slave.boobs -= slave.boobsMilk; + slave.boobsMilk = 0; + } + if (slave.energy > 40 && slave.energy < 95) { + r.push(`Being a constant part of the fuckpit orgy <span class="green">greatly heightens ${his} libido.</span>`); + slave.energy += 2; + } + slave.need -= 50; + } + + if (V.masterSuiteUpgradePregnancy === 1) { + /* If they're not on fertility drugs and the toggle is active, stick them on (if they can take them). Otherwise take them off. */ + if ((V.masterSuitePregnancyFertilityDrugs === 1) && (slave.drugs !== "fertility drugs") && canGetPregnant(slave)) { + slave.drugs = "fertility drugs"; + } else if ((V.masterSuiteHyperPregnancy === 1) && (slave.drugs !== "super fertility drugs") && canGetPregnant(slave)) { + slave.drugs = "super fertility drugs"; + } else if ((((V.masterSuitePregnancyFertilityDrugs === 0) && (slave.drugs === "fertility drugs")) || ((V.masterSuiteHyperPregnancy === 0) && (slave.drugs === "super fertility drugs"))) || (!canGetPregnant(slave) && ["fertility drugs", "super fertility drugs"].includes(slave.drugs))) { + slave.drugs = "no drugs"; + } + /* We don't know they're pregnant for a month or so by game logic */ + if (slave.pregKnown === 1) { + /* FIXME: should these effects have associated text? */ + /* If they're preggo and in the upgraded suite, give them extra devotion. More if they're being given lighter duties. */ + if (slave.devotion <= 100) { + if (V.masterSuitePregnancySlaveLuxuries === 0) { + slave.devotion += 2; + } else { + slave.devotion += 5; + } + } + /* If they're preggo and in the upgraded suite, give them extra trust. More if they're being given lighter duties. */ + if (slave.trust <= 100) { + if (V.masterSuitePregnancySlaveLuxuries === 0) { + slave.trust += 2; + } else { + slave.trust += 5; + } + } + /* If they're preggo and in the upgraded suite, give them extra health. More if they're being given lighter duties. */ + if (slave.health.condition < 100) { + if (V.masterSuitePregnancySlaveLuxuries === 0) { + improveCondition(slave, 15); + } else { + improveCondition(slave, 25); + } + } + } + } + + $(smallFrag).append(r.join(' ')); + + V.i = V.slaveIndices[slave.ID]; + App.Utils.setLocalPronouns(slave); // need this for the includes + if (V.verboseDescriptions === 1) { + const msContent = App.UI.DOM.appendNewElement("div", smallFrag, '', "indent"); + $(msContent).append(`${He} ${App.SlaveAssignment.pleaseYou(slave)}`); + + if (V.servantMilkers === 1 && slave.lactation > 0 && slave.fuckdoll === 0 && slave.fetish !== "mindbroken" && canMove(slave) && slave.intelligence+slave.intelligenceImplant >= -90) { + const milkIntro = `When ${his} breasts begin to feel full and you aren't around, ${he} avails ${himself} to the penthouse milkers and `; + const milkContent = App.UI.DOM.appendNewElement("div", smallFrag, milkIntro, "indent"); + V.servantMilkersMultiplier = 0.25; // FIXME: should be a parameter + $(milkContent).append(App.SlaveAssignment.getMilked(slave)); + V.servantMilkersMultiplier = 1; + $(milkContent).append(`gives ${V.milk} liters of milk over the week, which is sold for <span class="cash inc">${cashFormat(V.milkSale)}.</span>`); + } + const commonContent = App.UI.DOM.appendNewElement("div", smallFrag, '', "indent"); + commonContent.append(App.SlaveAssignment.standardSlaveReport(slave, false)); + } else { + // discard return values silently + App.SlaveAssignment.choosesOwnJob(slave); + App.SlaveAssignment.pleaseYou(slave); + if (V.servantMilkers === 1 && slave.lactation > 0 && slave.fuckdoll === 0 && slave.fetish !== "mindbroken" && canMove(slave) && slave.intelligence+slave.intelligenceImplant >= -90) { + V.servantMilkersMultiplier = 0.25; // FIXME: should be a parameter + App.SlaveAssignment.getMilked(slave); + V.servantMilkersMultiplier = 1; + } + App.SlaveAssignment.standardSlaveReport(slave, true); + } + if (slave.health.condition < 80) { + if (V.masterSuiteUpgradeLuxury === 1) { + improveCondition(slave, 20); + } else { + improveCondition(slave, 10); + } + } + + return smallFrag; + } + + 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`); + } else { + r.push(`<strong>There is one slave`); + } + r.push(`seeing to your pleasure in the master suite.</strong> Such sexual opulence <span class="green">improves</span> your reputation.`); + + if ((V.arcologies[0].FSEgyptianRevivalist > 0) && (slaves.length >= 5)) { + r.push(`Society <span class="green">approves</span> of your keeping a large number of women. This advances the Egyptian revivalist ideal of multiple concubinage.`); + FutureSocieties.Change("EgyptianRevivalist", 2); + } + if (pregnantSlaves >= 1) { + r.push(`The suite is supporting the pregnancies of the slaves`); + if (V.masterSuitePregnancyFertilityDrugs === 1 || V.masterSuiteHyperPregnancy === 1) { + r.push(`within, and is providing them with fertility drugs`); + if (V.masterSuitePregnancyFertilitySupplements === 1) { + r.push(`and supplements to encourage impregnation.`); + } else { + r.push(`to encourage impregnation.`); + } + } else { + r.push(`within.`); + } + if (V.arcologies[0].FSHedonisticDecadence > 0) { + r.push(`Society <span class="green">approves</span> of the pampering your pregnant harem receives. This advances the ideal that everyone's desires should be fulfilled.`); + FutureSocieties.Change("Hedonistic", 1); + } + } + if (slaves.length > 1) { + r.push(`The level of sexual energy in the suite is`); + if (V.masterSuiteUpgradeLuxury === 1) { + if (msAvg.energy > 90) { + r.push(`intense. When you enter your luxurious retreat, you can set off pent-up orgasms with a touch.`); + } else if (msAvg.energy > 60) { + r.push(`high; there is strong competition for your favors whenever you enter your retreat.`); + } else { + r.push(`relatively normal; the slaves serve your pleasure before their own.`); + } + } else if (V.masterSuiteUpgradeLuxury === 2) { + if (msAvg.energy > 90) { + r.push(`intense. Your slaves spend almost all their time in the fuckpit, having sex in a big pile.`); + } else if (msAvg.energy > 60) { + r.push(`high; your slaves spend much of their time in the fuckpit, having sex with each other.`); + } else { + r.push(`relatively normal; the slaves lounging in the fuckpit get each other off when they feel like it.`); + } + if (msAvg.cum > 4) { + r.push(`Unless it's right after an automated cleaning, everything in the fuckpit is spattered with cum.`); + } + if (msAvg.milk > 4000) { + r.push(`There's so much lactation going on that the lowest level of the fuckpit is a pool of milk.`); + } + } else { + r.push(`relatively normal.`); + } + } + $(intro).append(r.join(' ')); + } + + if (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"]); + } + $(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"]); + } + $(slaveEntry).append(nonConcubineText(slave), commonText(slave)); + } + + if (pregnantSlaves > 0 && V.arcologies[0].FSRestart !== "unset" && V.propOutcome !== 1 && V.eugenicsFullControl !== 1) { + const eliteEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(eliteEffects).append(`The Societal Elite know what you are doing with your bedslaves. <span class="red">They do not approve.</span>`); + V.failedElite += (5 * pregnantSlaves); + } + + if (V.masterSuiteDecoration !== "standard") { + const decorationEffects = App.UI.DOM.appendNewElement("p", frag, '', "indent"); + $(decorationEffects).append(`${capFirstChar(V.masterSuiteName)}'s ${V.masterSuiteDecoration} atmosphere <span class="hotpink">has a minor impact on your fucktoys.</span>`); + } + + return frag; +}; diff --git a/src/uncategorized/masterSuiteReport.tw b/src/uncategorized/masterSuiteReport.tw index 4ed7e461e3f..de0391e8f80 100644 --- a/src/uncategorized/masterSuiteReport.tw +++ b/src/uncategorized/masterSuiteReport.tw @@ -1,397 +1,5 @@ :: Master Suite Report [nobr] -<<set _slaves = App.Utils.sortedEmployees(App.Entity.facilities.masterSuite)>> -<<set _DL = _slaves.length, _SL = $slaves.length, $legendaryAbolitionistID = 0, _masterSuitePregnantSlaves = 0, _masterSuitePregnantSlavesMultiple = 0, _msAvg = App.Utils.masterSuiteAverages()>> -<<if $ConcubineID != 0>> - /% Add the Concubine to the _slaves list at the front of the array, so that $he displays first %/ - <<set _slaves.unshift(_S.Concubine), _DL++>> -<</if>> - -<<if _DL > 0>> - <<for _slave range _slaves>> - <<if ($legendaryAbolitionistID == 0) && (_slave.devotion > 95) && (_slave.prestige == 0) && ((_slave.origin == "You sentenced $him to enslavement as a punishment for attempted theft of a slave.") || (_slave.origin == "$He is an enslaved Daughter of Liberty.") || (_slave.origin === "You got $him at the Slave Shelter. $He is an enslaved Daughter of Liberty, caught some weeks after the failed coup. $His previous owner used $him as a punching bag and dart board, then when he was bored of $him tattooed obscenities all over $his body and threw $him away.") || (_slave.origin === "$He is an enslaved member of an anti-slavery extremist group.") || (_slave.career == "an antislavery activist"))>> - <<set $legendaryAbolitionistID = _slave.ID>> - <</if>> - <</for>> - - ''There <<if (_DL == 1)>>is one slave<<else>>are _DL slaves<</if>> - seeing to your pleasure in the master suite.'' Such sexual opulence @@.green;improves@@ your reputation. - <<if ($arcologies[0].FSEgyptianRevivalist > 0) && (_DL >= 5)>> - Society @@.green;approves@@ of your keeping a large number of women. This advances the Egyptian revivalist ideal of multiple concubinage. - <<run FutureSocieties.Change("EgyptianRevivalist", 2)>> - <</if>> - <<if (_masterSuitePregnantSlaves >= 1)>> - The suite is supporting the pregnancies of the slaves - <<if ($masterSuitePregnancyFertilityDrugs == 1 || $masterSuiteHyperPregnancy == 1)>> - within, and is providing them with fertility drugs - <<if ($masterSuitePregnancyFertilitySupplements == 1)>> - and supplements to encourage impregnation. - <<else>> - to encourage impregnation. - <</if>> - <<else>> - within. - <</if>> - <<if ($arcologies[0].FSHedonisticDecadence > 0)>> - Society @@.green;approves@@ of the pampering your pregnant harem receives. This advances the ideal that everyone's desires should be fulfilled. - <<run FutureSocieties.Change("Hedonistic", 1)>> - <</if>> - <</if>> - <<if _DL > 1>> - The level of sexual energy in the suite is - <<if $masterSuiteUpgradeLuxury == 1>> - <<if _msAvg.energy > 90>> - intense. When you enter your luxurious retreat, you can set off pent-up orgasms with a touch. - <<elseif _msAvg.energy > 60>> - high; there is strong competition for your favors whenever you enter your retreat. - <<else>> - relatively normal; the slaves serve your pleasure before their own. - <</if>> - <<elseif $masterSuiteUpgradeLuxury == 2>> - <<if _msAvg.energy > 90>> - intense. Your slaves spend almost all their time in the fuckpit, having sex in a big pile. - <<elseif _msAvg.energy > 60>> - high; your slaves spend much of their time in the fuckpit, having sex with each other. - <<else>> - relatively normal; the slaves lounging in the fuckpit get each other off when they feel like it. - <</if>> - <<if _msAvg.cum > 4>> - Unless it's right after an automated cleaning, everything in the fuckpit is spattered with cum. - <</if>> - <<if _msAvg.milk > 4000>> - There's so much lactation going on that the lowest level of the fuckpit is a pool of milk. - <</if>> - <<else>> - relatively normal. - <</if>> - <</if>> - - <<for _slave range _slaves>> - <<set $i = $slaveIndices[_slave.ID]>> - <<setLocalPronouns _slave>> - <br><br> - /* 000-250-006 */ - <<if $seeImages && $seeReportImages>> - <div class="imageRef tinyImg"> - <<= SlaveArt(_slave, 0, 0)>> - </div> - <</if>> - /* 000-250-006 */ - <<if (_slave.assignment == Job.CONCUBINE)>> - ''Your concubine <<= SlaveFullName(_S.Concubine)>> is serving you in $masterSuiteName.'' More than any other slave, $his sexual brilliance and physical appeal are @@.green;critical@@ to your reputation. - - <<if ((_S.Concubine.prestigeDesc == "You bankrupted and enslaved $him in revenge for $his part in the attack on your arcology by the Daughters of Liberty.") && (_S.Concubine.newGamePlus == 0))>> - $He was once your rival, and your relationship is widely thought to be @@.green;the perfect modern romance.@@ - <<run repX(500, "concubine", _S.Concubine)>> - <<elseif (_S.Concubine.prestige > 0)>> - <<run repX(500*_S.Concubine.prestige, "concubine", _S.Concubine)>> - <<if $verboseDescriptions == 1>> - Keeping such a prestigious slave as your concubine @@.green;adds to your fame.@@ - <<if _S.Concubine.prestigeDesc == "$He is a famed Free Cities whore, and commands top prices.">> - When $he has a free moment, $he refines $his flexibility so that $he is prepared for any sexual position you can think of, and many more that $he researched just for your pleasure. - <</if>> - <<if _S.Concubine.prestigeDesc == "$He is a famed Free Cities slut, and can please anyone.">> - When $he has a free moment, $he pretties $himself up so that $he may be as beautiful as possible to make you look even better. - <</if>> - <<if _S.Concubine.prestigeDesc == "$He is remembered for winning best in show as a cockmilker.">> - <<if _S.Concubine.balls > 10 || _S.Concubine.prostate > 1>> - $He does $his best to prevent $himself from making a mess when you don't want one. When $he has free time, $he researches new techniques to make use of $his huge loads to entertain you. - <<elseif _S.Concubine.balls > 0>> - When $he has a free moment, $he researches ways to increase the size of $his loads for you; $he dreams of the day $he show you just what $he was capable of. - <<else>> - $He wishes $he could blow huge loads for you, but without balls, there is little $he can do. - <</if>> - <</if>> - <<if _S.Concubine.prestigeDesc == "$He is remembered for winning best in show as a dairy cow.">> - <<if _S.Concubine.lactation > 1 || _S.Concubine.lactationAdaptation > 90>> - $He does $his best to prevent $himself from making a mess when you don't want one. When $he has free time, $he researches new techniques to make use of $his excessive milk to entertain you. - <<elseif _S.Concubine.lactation > 0>> - $He does $his best to prevent $himself from making a mess when you don't want one. When $he has free time, $he researches new techniques to make use of $his breast milk to entertain you. - <<else>> - $He wishes $he could lactate for you, but $he has dried up since $his glory days. - <</if>> - <</if>> - <<if _S.Concubine.prestigeDesc == "$He is remembered for winning best in show as a breeder.">> - <<if _S.Concubine.bellyPreg >= 5000>> - When $he has a free moment, $he refines $his flexibility so that $he can perform any sexual position possible for $him in $his motherly state. $He takes the time to look up new positions to work around $his growing pregnancy. - <<elseif isFertile(_S.Concubine) || _S.Concubine.preg > 0>> - When $he has a free moment, $he refines $his flexibility so that $he is prepared for any sexual position you can think of, no matter how heavy $he becomes with children. - <<else>> - When $he has a free moment, $he researches ways to restore $his fertility; $he dreams of the day $he can carry <<if $PC.dick != 0>>your children<<else>>children for you<</if>>. - <</if>> - <</if>> - <</if>> - <</if>> - <<if _S.Concubine.porn.prestige > 2>> - <<run repX(800, "concubine", _S.Concubine)>> - Having a porn star as your personal bed warmer @@.green;reflects on your standing.@@ Your citizens can only wonder at what kinky things happen behind closed doors. - <<elseif _S.Concubine.porn.prestige > 1>> - <<run repX(300, "concubine", _S.Concubine)>> - Having a rising porn star as your personal bed warmer @@.green;reflects on your standing.@@ - <</if>> - <<if (_S.Concubine.counter.oral + _S.Concubine.counter.anal + _S.Concubine.counter.vaginal + _S.Concubine.counter.mammary + _S.Concubine.counter.penetrative > 1000)>> - <<if $verboseDescriptions == 1>>Many citizens <<if _S.Concubine.counter.publicUse > 10>>remember having had $him themselves, and <</if>>@@.green;respectfully@@ envy you $his exclusive company.<</if>> - <<run repX(300, "concubine", _S.Concubine)>> - <</if>> - <<if $masterSuiteUpgradeLuxury > 0>> - <<set _slave.rules.living = "luxurious", _slave.devotion += 4, _slave.trust += 4>> - <<else>> - <<set _slave.rules.living = "normal", _slave.devotion += 2, _slave.trust += 2>> - <</if>> - <<if $masterSuiteDecoration != "standard">> - <<set _slave.devotion++>> - <</if>> - <<run repX(Beauty(_S.Concubine) * 5 + (_S.Concubine.skill.vaginal || 0) + (_S.Concubine.skill.anal || 0) + (_S.Concubine.skill.oral || 0) + (_S.Concubine.skill.whoring || 0) + (_S.Concubine.skill.entertainment || 0), "concubine", _S.Concubine)>> - <<else>> /* not Concubine */ - <span class='slave-name'><<= SlaveFullName(_slave)>></span> - <<if _slave.choosesOwnAssignment == 2>> - <<= App.SlaveAssignment.choosesOwnJob(_slave)>> - <<else>> - sees to your pleasure in $masterSuiteName. - <</if>> - /* Perform facility based rule changes */ - <<if ($masterSuiteUpgradeLuxury == 1)>> - <<set _slave.rules.living = "luxurious">> - <<if (_slave.devotion <= 95)>> - <<set _slave.devotion += 2>> - <</if>> - <<if $masterSuiteDecoration != "standard">> - <<set _slave.devotion++>> - <</if>> - <<if (_slave.trust < 60)>> - <<set _slave.trust++>> - <</if>> - <<elseif ($masterSuiteUpgradeLuxury == 2)>> - <<set _slave.rules.living = "luxurious">> - <<if (_slave.energy > 90)>> - <<if (_slave.devotion <= 95)>> - <<set _slave.devotion += 2>> - <</if>> - <<if (_slave.trust <= 95)>> - <<set _slave.trust += 2>> - <</if>> - <<else>> - <<if (_slave.devotion <= 60)>> - <<set _slave.devotion++>> - <</if>> - <<if (_slave.trust < 60)>> - <<set _slave.trust++>> - <</if>> - <</if>> - <<else>> - <<set _slave.rules.living = "spare">> - <<if (_slave.devotion <= 20) && (_slave.trust >= -20)>> - <<set _slave.devotion -= 2, _slave.trust -= 5>> - <<elseif (_slave.devotion <= 60)>> - <<set _slave.devotion += 2>> - <<elseif (_slave.devotion > 60)>> - <<set _slave.devotion -= 2>> - <</if>> - <<if (_slave.trust < 60)>> - <<set _slave.trust++>> - <</if>> - <</if>> - <</if>> - /% Both Concubine and other slaves %/ - <<if $masterSuiteUpgradeLuxury == 2 && _msAvg.energy > random(50,90)>> - <<set _energy = (Math.ceil(_slave.energy/5)*7)>> - <<run SimpleSexAct.Slave(_slave, _energy)>> - <<if canPenetrate(_slave)>> - <<set _fuckCount = (random(1,3)*_energy)>> - <<set _slave.counter.penetrative += _fuckCount, $penetrativeTotal += _fuckCount>> - <</if>> - <<if _slave.nipples == "fuckable" && _msAvg.dick > 2>> - <<set _fuckCount = (random(1,3)*_energy)>> - <<set _slave.counter.mammary += _fuckCount, $mammaryTotal += _fuckCount>> - <</if>> - <<if (_slave.trust >= -20) && (_slave.devotion > -10) && (_slave.fetishStrength <= 95) && _slave.fetish != "mindbroken">> - <<set _fetishChangeChance = fetishChangeChance(_slave)>> - <<if (_msAvg.milk > 2000) && (_fetishChangeChance > random(0,50))>> - <<if _slave.fetish == "boobs">> - <<if $verboseDescriptions == 1>>$His<<else>>_slave.slaveName's<</if>> @@.lightcoral;boob fetish is strengthened@@ by the constant availability of milky nipples for $him to play with. - <<set _slave.fetishStrength += 4>> - <<else>> - <<if $verboseDescriptions == 1>>$He<<else>>_slave.slaveName<</if>> @@.lightcoral;acquires a boob fetish@@ after spending a lot of time in the fuckpit drinking from $his fellow fucktoys' tits. - <<set _slave.fetish = "boobs", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.dick > 3) && (_slave.anus > 0) && (_fetishChangeChance > random(0,50))>> - $He - <<if _slave.fetish == "buttslut">> - @@.lightcoral;sinks farther into anal pleasure,@@ since $he spends $his time in the fuckpit with at least one of the many available cocks up $his butt. - <<set _slave.fetishStrength += 4>> - <<else>> - @@.lightcoral;acquires an anal fetish@@ after helplessly orgasming at the mercy of your many fucktoys eager to shove their big stiff penises up $his ass. - <<set _slave.fetish = "buttslut", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.cum > 3) && (_fetishChangeChance > random(0,50))>> - $He - <<if _slave.fetish == "cumslut">> - @@.lightcoral;sinks farther into cum addiction,@@ since $he spends $his time in the fuckpit eagerly sucking down ejaculate, straight from the many sources. - <<set _slave.fetishStrength += 4>> - <<else>> - @@.lightcoral;acquires an oral fixation@@ after orally servicing your many fucktoys eager to blow their loads down $his throat. - <<set _slave.fetish = "cumslut", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.preg > 10) && (_fetishChangeChance > random(0,50))>> - $He - <<if _slave.fetish == "pregnancy">> - @@.lightcoral;sinks farther into pregnancy obsession,@@ since $he never wants for a pregnant girl to make love to. - <<set _slave.fetishStrength += 4>> - <<else>> - @@.lightcoral;acquires a pregnancy fetish,@@ since many of $his sexual partners in the fuckpit are heavily pregnant. - <<set _slave.fetish = "pregnancy", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.dom < -25) && (_fetishChangeChance > random(0,50))>> - $He - <<if _slave.fetish == "dom">> - @@.lightcoral;becomes more dominant,@@ since there are so many subs in the fuckpit who beg $him to fuck them hard. - <<set _slave.fetishStrength += 4>> - <<else>> - @@.lightcoral;becomes sexually dominant@@ after having fun satisfying the many submissive fucktoys in the fuckpit who beg $him to top them. - <<set _slave.fetish = "dom", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.dom > 25) && (_fetishChangeChance > random(0,50))>> - $He - <<if _slave.fetish == "submissive">> - @@.lightcoral;becomes even more submissive,@@ since there are so many doms in the fuckpit that $he's often used by more than one at once. - <<set _slave.fetishStrength += 4>> - <<else>> - @@.lightcoral;becomes sexually submissive@@ after the many dominant slaves in the fuckpit hold $him down and use $him for their pleasure. - <<set _slave.fetish = "submissive", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.sadism < -25) && (_fetishChangeChance > random(0,50))>> - $He - <<if _slave.fetish == "sadist">> - @@.lightcoral;becomes more sadistic,@@ since there are so many sluts in the fuckpit who will do anything for $him if $he'll only spank them. - <<set _slave.fetishStrength += 4>> - <<else>> - @@.lightcoral;becomes a bit of a sadist@@ after $he notices that so many of $his fellow fucktoys cum harder if $he gives them a good slap. - <<set _slave.fetish = "sadist", _slave.fetishStrength = 65>> - <</if>> - <<elseif (_msAvg.sadism > 25) && (_fetishChangeChance > random(0,50))>> - <<if _slave.fetish == "masochist">> - <<if $verboseDescriptions == 1>>$His<<else>>_slave.slaveName's<</if>> @@.lightcoral;pain addiction deepens,@@ since the fuckpit is full of ladies happy to fuck $him while $he screams. - <<set _slave.fetishStrength += 4>> - <<else>> - <<if $verboseDescriptions == 1>>$He<<else>>_slave.slaveName<</if>> @@.lightcoral;learns masochism@@ after experiencing many orgasms under the exquisite sexual torture of the sadists in the fuckpit. - <<set _slave.fetish = "masochist", _slave.fetishStrength = 65>> - <</if>> - <</if>> - <</if>> - <<if _slave.lactation > 0>> - <<set _slave.lactationDuration = 2>> - <<set _slave.boobs -= _slave.boobsMilk, _slave.boobsMilk = 0>> - <</if>> - <<if _slave.energy > 40 && _slave.energy < 95>> - Being a constant part of the fuckpit orgy @@.green;greatly heightens $his libido.@@ - <<set _slave.energy += 2>> - <</if>> - <<set _slave.need -= 50>> - <</if>> - - <<if $masterSuiteUpgradePregnancy == 1>> - /* If they're not on fertility drugs and the toggle is active, stick them on (if they can take them). Otherwise take them off. */ - <<if ($masterSuitePregnancyFertilityDrugs == 1) && (_slave.drugs != "fertility drugs") && canGetPregnant(_slave)>> - <<set _slave.drugs = "fertility drugs">> - <<elseif ($masterSuiteHyperPregnancy == 1) && (_slave.drugs != "super fertility drugs") && canGetPregnant(_slave)>> - <<set _slave.drugs = "super fertility drugs">> - <<elseif ((($masterSuitePregnancyFertilityDrugs == 0) && (_slave.drugs == "fertility drugs")) || (($masterSuiteHyperPregnancy == 0) && (_slave.drugs == "super fertility drugs"))) || (!canGetPregnant(_slave) && ["fertility drugs", "super fertility drugs"].includes(_slave.drugs))>> - <<set _slave.drugs = "no drugs">> - <</if>> - /* We don't know they're pregnant for a month or so by game logic */ - <<if (_slave.pregKnown == 1)>> - /* Once we know they're knocked up, get the counter going. */ - <<set _masterSuitePregnantSlaves += 1>> - /* Don't know about twins/triplets etc until 10 weeks. Once we do, get the counter going */ - <<if (_slave.pregType > 1) && (_slave.preg >= _slave.pregData.normalBirth/1.33)>> - <<set _masterSuitePregnantSlavesMultiple += 1>> - <</if>> - /* If they're preggo and in the upgraded suite, give them extra devotion. More if they're being given lighter duties. */ - <<if (_slave.devotion <= 100)>> - <<if ($masterSuitePregnancySlaveLuxuries == 0)>> - <<set _slave.devotion += 2>> - <<else>> - <<set _slave.devotion += 5>> - <</if>> - <</if>> - /* If they're preggo and in the upgraded suite, give them extra trust. More if they're being given lighter duties. */ - <<if (_slave.trust <= 100)>> - <<if ($masterSuitePregnancySlaveLuxuries == 0)>> - <<set _slave.trust += 2>> - <<else>> - <<set _slave.trust += 5>> - <</if>> - <</if>> - /* If they're preggo and in the upgraded suite, give them extra health. More if they're being given lighter duties. */ - <<if (_slave.health.condition < 100)>> - <<if ($masterSuitePregnancySlaveLuxuries == 0)>> - <<run improveCondition(_slave, 15)>> - <<else>> - <<run improveCondition(_slave, 25)>> - <</if>> - <</if>> - <</if>> - <</if>> - - <<if $verboseDescriptions == 1>> - <br> $He <<= App.SlaveAssignment.pleaseYou(_slave)>> - <br> - <<if $servantMilkers == 1 && _slave.lactation > 0 && _slave.fuckdoll == 0 && _slave.fetish != "mindbroken" && canMove(_slave) && _slave.intelligence+_slave.intelligenceImplant >= -90>> - When $his breasts begin to feel full and you aren't around, $he avails $himself to the penthouse milkers and - <<set $servantMilkersMultiplier = 0.25>> - <<run App.SlaveAssignment.getMilked(_slave)>> - <<set $servantMilkersMultiplier = 1>> - gives $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@ - <</if>> - <br> - <<= App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<include "SA rules">> - <<= App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> - <<= 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.pleaseYou(_slave)>> - <<if $servantMilkers == 1 && _slave.lactation > 0 && _slave.fuckdoll == 0 && _slave.fetish != "mindbroken" && canMove(_slave) && _slave.intelligence+_slave.intelligenceImplant >= -90>> - <<set $servantMilkersMultiplier = 0.25>> - <<run App.SlaveAssignment.getMilked(_slave)>> - <<set $servantMilkersMultiplier = 1>> - <</if>> - <<run App.SlaveAssignment.choosesOwnClothes(_slave)>> - <<include "SA rules">> - <<run App.SlaveAssignment.diet(_slave)>> - <<include "SA long term effects">> - <<run App.SlaveAssignment.drugs(_slave)>> - <<run App.SlaveAssignment.relationships(_slave)>> - <<run App.SlaveAssignment.rivalries(_slave)>> - <<run App.SlaveAssignment.devotion(_slave)>> - <</silently>> - <</if>> - <<if _slave.health.condition < 80>> - <<if $masterSuiteUpgradeLuxury == 1>> - <<run improveCondition(_slave, 20)>> - <<else>> - <<run improveCondition(_slave, 10)>> - <</if>> - <</if>> - - <</for>> - - <br><br> - - <<if $arcologies[0].FSRestart != "unset" && $propOutcome != 1 && _masterSuitePregnantSlaves > 0 && $eugenicsFullControl != 1>> - The Societal Elite know what you are doing with your bedslaves. @@.red;They do not approve.@@ - <<set $failedElite += (5 * _masterSuitePregnantSlaves)>> - <</if>> - - <<if $masterSuiteDecoration != "standard">> - <br><br> <<= capFirstChar($masterSuiteName)>>'s $masterSuiteDecoration atmosphere @@.hotpink;has a minor impact on your fucktoys.@@ - <</if>> -<</if>> -<<if _DL > 0 || _S.Concubine>> - <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.masterSuiteReport()>> -- GitLab